Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

Proyecto NACA: Migración de código COBOL a Java.

Ver para creer!! El Proyecto NACA de Publicitas Ltd. acaba de migrar satisfactoriamente 4 millones de líneas de código fuente COBOL de una aplicación que corría en un IBM/Mainframe a código Java 100% funcional sobre arquitectura Intel en Linux.

Lo mejor de todo es que este proyecto fue publicado como Software Libre bajo la licencia GNU GPL/LGPL, la versión 1.0 pueden descargarla aquí.

Suena un poco raro que existan casos para este tipo de migraciones, normalmente los proyectos de COBOL se situan en IBM Mainframes debido al alto volumen de manejo de datos, no sé hasta qué punto una migración a Java sería 100% exitosa, es decir no solo que sea funcional sino también del mismo o mejor rendimiento.

Sin duda es un gran trabajo de ingeniería que colocará a Java como una nueva alternativa a proyectos ya existentes en la plataforma de IBM.

Saludos!

Componentes Ribbon en Java

Platicando hace algunos días con algunos ingenieros sobre las causas que obligaron al team de Microsoft Office a rediseñar por completo su interfaz gráfica (Chequen las ponencias del MIX08), coincidiendo todos en que efectivamente fue muy buena y fundamentada solución crear componentes Ribbon para mejorar la experiencia de los usuarios (Pensando en un proceso de: búsqueda, diseño, prototipado y evaluación).

Fundamentado en estas mismas razones se ha desarrollado el proyecto Flamingo el cual fue presentado en el JavaOne de este año con bombo y platillo; puesto que se encuentra mas estable que nunca.

flamingo

Este proyecto tiene soporte para la mayoría de los contenedores, botones de comandos, tooltips etc. que de igual forma existen en Ribbon.

NetBeans IDE 6.7 disponible para descarga.

Desde hace un para de días está disponible la versión 6.7 de Netbeans.

Estaba leyendo los nuevos "features", y lo que más me llamó la atención es que hablan de la integración con un proyecto llamado Kenai, un ambiente de colaboración para desarrolladores de código abierto. Patrocinado por SUN, por cierto.

¿Qué onda con este Kenai ? ¿ Alguién lo conocía ?

http://kenai.com/

"Welcome to Project Kenai, Sun Microsystem's onramp for the developer cloud experience of tomorrow, where you can host your open source projects and code, as well as find and collaborate with developers of like mind."

Sale y vale
Byte

Seguridad en Aplicaciones Java, el video.

Video de la ponencia impartida por Enrique Zamudio, en el marco de la Séptima Reunión de JavaMexico.org, SpringHispano.org y Grails.org.mx, el pasado 13 de Junio

Vimeo: Seguridad en Aplicaciones Java..

Tips pa mejores QUERYS

que tal amigos jav-eros, después de mucho; entro a postear en mi blog, no creo poder hablar de cosas de las cuales no se haya hablado ya :(. Por el momento me encuentro atado trabajando con PHP y JavaScript (así que si tienen una duda, pues aquí estamos, patterns, ajax, AFO's, DOM, HTML) :S me está gustando, pero mi alma le pertenece a Java :P, por lo tanto he retomado el camino de la "fuerza" y empezare de nuevo con java, mi primer aporte creo que es muy bueno son unos tips de SQL (espero les agraden, se acepta toda clase de comentarios y retroalimentación)

Unos cuantos tips de cómo hacer unos query's mas rápidos:

1. Usar conexiones a bases de datos que sean persistentes, esto para evitar sobrecarga. Algo más o menos como los Singleton's.

2. Checar que todas nuestras tablas tengan PRIMARY KEYs y que si hay FOREING KEYs estas tengan una cardinalidad alta (muchos registros con la misma FKEY). Bueno siempre habrá excepciones como por ejemplo "sexo" (ha que bueno) es una columna que tiene baja cardinalidad y eso no hay problema, pero un "user_id" es un buen candidato para una cardinalidad alta.

Presentación de la charla "Hablando en Scrum"

Ya está disponible vía Comunidad Scrum la charla de la pasada reunión de SpringHispano, javaMexico y Grails MX.

Ejemplo Cross-Site Scripting

El tercer y último ejemplo que vimos en la plática de Seguridad en Aplicaciones Java, fue el de Cross-Site Scripting, conocido por su abreviatura como XSS.

Este ataque puede ser bastante complejo en cuanto al daño que se pueda hacer y los lugares por donde se puede realizar (vectores de ataque). Sin embargo, el fundamento es muy similar al de la inyección de SQL: usar datos que capturan los usuarios, sin validarlos apropiadamente.

La inyección de SQL permite que un usuario malicioso pueda enviar a una aplicación ciertos datos que incluyan sentencias de SQL que se ejecutarán en el servidor de base de datos. Los ataques de XSS usan ese mismo principio pero los datos que se envian, pueden incluir código HTML y/o Javascript; la principal diferencia es que dicho Javascript es inocuo en el servidor pero al ser incluido en páginas que se envían a otros usuarios, sus navegadores posiblemente ejecutarán dicho Javascript.

Buscar Citas fechas pasadas de un archivo secuencial

//JESUS SANCHEZ CRUZ & SANDRA YADIRA CRUZ LARA
//INSTITUTO TECNOLOGICO DE OAXACA
//************LICENCIATURA EN INFORMATICA**************
///////////////////////////////////////////////
//
//  creooo@hotmail.com
//   <a href="http://tecoaxaca.blogspot.com
//
//
//Se" title="http://tecoaxaca.blogspot.com
//
//
//Se">http://tecoaxaca.blogspot.com
//
//
//Se</a> reciben por parametros el dia, fecha y año actuales, y se
//comparan con las fechas que el archivo ya tiene
//Aqui adjunto un archivo que uso llamado citas.txt
//contuiene campo dia,mes,año,nombre,razon,dia_cita,mes_cita,año_cita
 //RECIBE EL DIA / MES / ANNIO DE HOY AUTOMATICAMENTE
  public void pasado(String dia,String mes,String annio)
  {
    //JOptionPane.showMessageDialog(null,dia+" de "+mes+" del "+annio);
      int sa,ya=0,cr,n;
     
       boolean encontrado;
       File f;
       String dd,mm,aa,nombre,texto,day,month,year;
       String nmes[]= {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
       sa=Integer.parseInt(dia);
           cr=Integer.parseInt(annio);
           n=0;
            while(n<12){                       
                if(nmes[n].equals(mes))
                        ya= n+1;
                                n++;
            }
           

Ejemplo de Inyección de SQL

El siguiente ejemplo que hubo en la plática de seguridad en aplicaciones Java fue de inyección de SQL. Este ataque es posible cuando se capturan datos y se concatenan directamente dentro de una sentencia SQL, sin validarse; este método de hecho también es el fundamento de los ataques XSS (cross-site scripting).

Acelerando una peticion Http por UrlConnection

Hola!
Estoy desarrollando una aplicacion que necesita hacer peticiones Http mediante post en una clase.
Ahora... yo (me imagino, mas ahora me doy cuenta que es lo contrario; al menos en mi caso) que leer linea por linea la respuesta de un UrlConnection es mas lento que leer un buffer... Haciendo pruebas, me dicuenta de lo contrario.

Mis metodos son:

Leyendo del buffer:

public void getPostResponse1(String pUrl, String params) throws MalformedURLException, IOException {
        URL url = new URL(pUrl);
        long ini = new Date().getTime();
        long fin = 0;
        Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "time: " + ini);
        URLConnection urlConnection = url.openConnection();
        urlConnection.setDoOutput(true);
       
        OutputStreamWriter out = new OutputStreamWriter(
        urlConnection.getOutputStream());

        out.write(params);
        out.flush();

        final InputStream is = urlConnection.getInputStream();
        final Reader reader = new InputStreamReader(is);
        final char[] buf = new char[16384];
        int read;
        final StringBuffer sb = new StringBuffer();

Distribuir contenido