• Como Redireccionar el Trafico HTTP a HTTPS en Tomcat

    0

    Apache Tomcat tiene la habilidad de redireccionar todo el tráfico HTTP a HTTPS lo cual hace que cualquier entrada al sitio sea segura. Pero como en el caso de Mapaprop queremos servir imágenes de las propiedades a third party feeds y sorprendentemente como en el caso de OLX no pueden manejar requests HTTPS para las imágenes.

    Editando el archivo de configuración server.xml podemos redireccionar todo el tráfico a HTTPS de la siguiente manera:

    <Connector port="8080" protocol="HTTP/1.1"
    redirectPort="443"/>
    
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="conf/keystore" keystorePass="somepass"/>

    Ahora para evitar de manera permanente el protocolo HTTPS podemos editar el archivo web.xml de cada webapp que queremos servir y agregar el siguiente security constraint:

    <!-- Require HTTPS for everything except /img (favicon) and /css. -->
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>Private</web-resource-name>
    <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
    </security-constraint>
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>PrivateORPublic</web-resource-name>
    <url-pattern>/somefolder/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
    <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
    </security-constraint>

    De ésta manera el folder /somefolder/* y todos sus descendientes pueden o no utilizar el protocolo HTTPS.

     

  • Mejoras Para Java 8

    0
    En el 2012 Oracle tiene pensado liberar Java 8 y este vendría con nuevas características.

    1. OSGi
    La modularización de java proveniente de Eclipse llegaría al JDK definitivamente

    2. Project Coin
    Mas mejoras respecto a la sintaxis del lenguage que ayudan mucho al programador. En el JDK 7 tuvimos strings en switch y otras mejoras importantes. Seria bueno poder tener cosas como

    3. Collections
    Expresiones literales para listas inmutables, mapas y sets. Asi mismo como acceso indexado para listas y mapas.

    4. Soporte para programación modular
    La idea es extender el lenguage con nuevas estructuras llamadas “superpackages” lo que permitirían una organización modular.

    5. Expresiones Lambda
    Closures para Java, la verdad son buenos shortcuts que atentan un poco contra la teoria de objetos… pero como ya todo es objeto…no estaria nada mal optimizar funciones a nivel de la vm.

    6. Annotations en cualquier lado y para cualquier cosa
    Estan proponiendo extender las annotations para que sean usadas en cualquier tipo, no solo classes metodos o declaraciones de variables.

    7. Swing application framework
    Cuantas veces tuviste que reescribir una app swing con sus bases una y otra vez ? La idea es hacer un framework el cual maneje el startup, shutdown, sessiones y manejo de recursos de manera standard y escalable.

    8. Date and Time API
    Van a reescribir Date and Time API lo cual seria excelente porque es una porqueria ahora. Especialmente la clase SimpleDateFormat que no es thread safe.

    9. Bendito DatePicker!
    Al fin piensan hacer un datepicker para Swing.

    Las mejoras que me gustarían a mi
    1. Lo que más odio del lenguaje que mas amo es el reload de la VM en cada cambio. Esto es dado a que el código es compilado y no es un scripting como php o similar. JRebel tiene un metodo de unload y reload de classes, no podria implementar eso el JDK para evitar downtime de los servidores en cada deploy ?
    2. Tipos de variables. Me acuerdo en mis dias de smalltalk donde no era requerido poner el tipo de variable. Yo la verdad que era feliz. Despues Java me obligo a poner tipos y me complico la existencia. Estoy de acuerdo de que el typing ayuda a muchisimas cosas como por ejemplo webservices, pero la verdad todo seria mas facil y corto si no fuera obligatorio el typing de las variables.
    3. Nativos para diferentes plataformas. Seria bueno que el JDK traiga un tool para poder generar un ejecutable (exe, bin o app) para cada diferente plataforma. Es algo siempre util.
  • Barcamp Litoral en Santa Fe

    0

    El proximo sábado 7 de mayo se realizará en Santa Fe, Argentina, el Barcamp Litoral mas grande de sudamerica. El evento cuenta con el apoyo de la Universidad Nacional del Litoral, el Gobierno de la Ciudad de Santa Fe y el grupo de emprendedores Santa Fe Valley.

    Lo curioso de esta edicion es que se preparan para recibir 3000 asistentes, lo cual seria un record para este tipo de eventos. Los eventos Barcamp realizados en Buenos Aires y Cordoba han juntado hasta 500 asistentes y han sido un exito rotundo. La gente que organiza esta edicion tienen gran experiencia y no dudo de que van a hacer un evento fantastico.

    Aparte del Barcamp se hara un evento “Santa Fe Tech Day” el cual sera de acceso libre y gratuito para todos y sera el lugar donde los soponsors podran desplegar sus productos ante los miles de invitados a esta jornada Geek.

    Les deseo el mejor de los exitos a mis amigos de Barcamp Litoral!

    Link para registrarse

  • WebSockets en HTML5

    0

    WebSockets es una tecnología que está surgiendo de la mano de HTML5 y estará pronto disponible en todos nuestros browsers en poco tiempo. Pero que son los WebSockets ? WebSockets es una tecnología que nos da canales de comunicación bidireccional, full-duplex a través de un sencillo socket TCP. Traducido ésto a nuestro ámbito más cotidiano, es simplemente server push. Vamos a poder comunicarnos real-time con nuestros clientes conectados cosas que trataba de emular la tecnica Comet la cual hacía vivir un request http durante X tiempo y donde el server escribia en ese response emulando ser un push.

    Hoy no son muchas las versiones estables de browsers que lo soportan. No es el caso de Google Chrome el cual viene con soporte para WebSockets desde su versión 4.

    • Google Chrome 4 +
    • Internet Explorer 9 beta +
    • Firefox 4 beta +
    • Safari 5 +
    • Opera 10.70 +

    Ahora veamos un poco de código. Lo primero que tenemos que saber es si el browser conectado soporta WebSockets, lo cual podemos comprobarlo de manera sencilla.

    var support = window.WebSocket != null;

    Ahora que sabemos que nuestro browser soporta WebSockets podemos empezar creando uno.

    var socket = new WebSocket("/mysocket");

    Una vez creado el objeto WebSocket vamos a agregarle una serie de listeners para poder manipular los eventos que ocurran en el mismo.

    socket.onopen = function(e) {
      alert("Socket is connected");
    };
    
    socket.onclose = function(e) {
      alert("Socket is closed :(");
    }
    
    // y finalmente el que mas nos interesa, el push del server
    socket.onmessage = function(e) {
      alert("Server sent a message: " + e.data);
    }

    Sin dudas que el evento más importante aca es el onmessage. El parámetro e.data puede ser texto plano, json, xml o cualquier formato que estén acostumbrados a utilizar a diario.

    Ahora vamos a ver un ejemplo de cuando el cliente quiere comunicarse con el server enviándole un sencillo mensaje.

    socket.send("data goes here");

    De ésta manera podemos tener una comunicación bidireccional de manera sencilla.

    Ahora veamos algunos escenarios donde aplica la utilización de WebSockets

    • Es aplicacble donde un servicio TCP debe ser llevado a una arquitectura web (como por ejemplo el servicio de mensajeria XMPP)
    • Donde una aplicación web necesita comunicar datos en real-time a sus clientes (por ejemplo una aplicación de stocks online)

    WebSockets es un avance significativo para la web donde las aplicaciones en browsers se parecen cada vez más a las de escritorio pero a su vez hiper conectadas entre sí.

    Algunos recursos para leer

  • Como Descargar Un Archivo En PHP

    0

    Descargar un archivo en PHP implica leer un archivo de una locación en el servidor y escribir hacia el cliente. Hay varias opciones disponibles a la hora de la descarga.

    Primero localizamos y abrimos el archivo

    $path = "http://myserver/somelocation/somefile.pdf";
    $fd = fopen($path, "r")
    $fsize = filesize($path);
    $path_parts = pathinfo($path);
    $ext = strtolower($path_parts["extension"]);

    Escribimos los headers para la descarga

    header("Content-type: application/octet-stream");
    header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    header("Content-length: $fsize");

    Escribimos el archivo hacia el browser

    readfile($path);
    fclose($fd);
    exit;
Page 1 of 4912345»102030...Last »