Buscar
Social
Ofertas laborales ES
lunes
dic072009

JavaHispano Podcast - 064 - Test de aplicaciones (Parte 1)

Publicado un nuevo número del podcast de javaHispano. En esta ocasión vamos a realizar una tertulia sobre test de aplicaciones. En este número participarán Alfredo Casado, Julio César Pérez y Jose Luis Bugarín. Dada la extensión del tema hemos dividido la tertulia en dos partes. En esta primera parte realizaremos una introducción a los test de aplicaciones, explicaremos para que sirven, clasificaremos los diferentes tipos de test que se pueden desarrollar, explicaremos buenas prácticas para que tu código sea testeable y finalmente hablaremos del desarrollo TDD.

Links de interés:

 

viernes
dic042009

Manual Avanzado de JPA por Carmelo Navarro

blank_page

Carmelo Navarro ha realizado este manual avanzado sobre JPA. En él encontrarás una guía de mejores prácticas para usar este ORM. El manual se divide en

  1. Bases de datos: Cómo modelar tu base de datos relacional para sacarle mejor provecho con JPA.
  2. Configuración de JPA: Tips para configurar tus aplicaciones.
  3. Transacciones. Manejo correcto de transacciones con esta tecnología.
  4. Modificar datos. Cómo evitar errores comunes a la hora de persistir datos y buenas prácticas para ello.

El manual toma como ejemplo la implementación OpenJPA 1.2. Gracias a Carmelo Navarro por enviarnos este documento.

viernes
dic042009

Nueva actualización Java para Macos X

Apple ha publicado hoy (20091203) una nueva actualización del JDK. Por fin todos los macintosh a 64 bits (Intel Core 2 Duo o Xeon), podrán disfrutar de las nuevas características que viene ofreciendo el plugin de Java a partir de la versión 6u10. En las preferencias de Java hay que especificar que los applets se ejecuten en su propio proceso, y no en el del navegador (Al menos hasta que haya un navegador a 64 bits).
jueves
dic032009

En defensa de los derechos fundamentales en Internet

En defensa de los derechos fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que:
  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red, en España ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Se ha publicado en multitud de sitios web. Si estás de acuerdo y quieres sumarte a él, difúndelo por Internet.
jueves
dic032009

Debate: ¿La web y el escritorio por fin convergen?

Recientemente EFrigerio publicaba el soporte parcial de canvas en Form4G, para los que no conozcais Form4G, es una herramienta Java con el fin de acercar Swing al web, replicando aunque no sea de forma estándar el modelo de programación web en aplicaciones de escritorio.

La publicación de Form4G e inquietudes personales previas me han hecho reflexionar si está llegando el momento en que la web y el escritorio convergen, y cuando digo convergen no me refiero a que una aplicación web pueda llegar a acercarse a la funcionalidad de una aplicación de escritorio, sino más bien a que ambos tipos de aplicaciones puedan hacerse de la misma manera. 

El tema de Form4G es un tema que en su momento me interesó muchísimo, a mi también me gusta retorcer las tecnologías como decía remoh en el hilo de la noticia del lanzamiento de Form4G, la tecnología web en aplicaciones Swing habría dado un gran empuje al propio Swing, pues al acercar Swing al web el riesgo de "inversión" entre una y otra tecnología hubiera disminuido mucho.

Hace años con la llegada del primer Mozilla 1.0 estaba entusiasmado en la posibilidad de que Java, que era el lenguaje claramente emergente en esa época, pudiera integrarse con Mozilla para el desarrollo de aplicaciones de escritorio. JavaScript siempre me pareció "débil" y C++ demasiado "fuerte" y rígido, la combinación de HTML y Java con dosis de JavaScript siempre me pareció una opción de desarrollo mucho más flexible y sencilla que la tremenda complejidad (y potencia sin duda) del puro Swing (bastante malillo en aquella época).

La verdad es que nunca tuve la posibilidad real de experimentar con este enfoque, de todas formas el panorama ha sido siempre desolador, la marginación de Java por parte de la Fundación Mozilla más allá de los applets y el desinterés del mundo Java en integrar el mundo web en Swing ha sido muy muy escaso, por no hablar de la casi inexistencia de navegadores 100% Java y los que ha habido, comerciales, no parece que hayan sido muy populares.  

Han existido intentos de integración del mundo web y Swing, particularmente el trabajo "hercúleo" de generar una aplicación web a partir de Swing, como es el caso de AjaxSwing (antiguo WebCream) y similares herramientas o frameworks web fuertemente basados en Swing como WingS. El objetivo es rentabilizar la inversión en aplicaciones Swing portando a web sin demasiado esfuerzo. Sin duda a muchos estas herramientas les han sido extremadamente útiles para portar sus viejas aplicaciones, sin embargo cualquiera que conozca un poco ambas técnicas de programación (Swing y web) se dará cuenta en seguida que la aplicación web generada es tremendamente forzada.

Si portar una aplicación Swing a web es relativamente "fácil" lo contrario no lo es, el paradigma de programación web basado en páginas se lleva tremendamente mal con el paradigma de una sola ventana del mundo del escritorio, por no hablar de que la forma de programar en Swing es muy diferente a la forma de programar en web.

Sin duda alguna el web es el rey absoluto sólo "amenazado" por Flex/SilverLight/JavaFX, por lo que la opción web es casi siempre la opción número uno, la intención de hacer una aplicación alternativa de escritorio "más productiva" se queda casi siempre en el papel por razones básicamente de coste (doble trabajo).

Sin embargo las cosas están cambiando, la llegada de AJAX está permitiendo el desarrollo de aplicaciones web similares al escritorio, no sólo por la riqueza visual de sus componentes sino también porque el uso intensivo de AJAX permite la creación de aplicaciones Single Page Interface, paradigma que converge claramente con el Single Document Interface (SDI) típico del escritorio.

Pero este aspecto algunos lo podrían ver como una razón más para deshacerse del viejo Swing.

 El mencionado WebCream mejoró enormemente cuando introdujo AJAX, pues anteriormente cada click suponía la regeneración de la página entera, lo cual no ha sido gran problema para un usuario web que está ya "acostumbrado" sin embargo para el usuario de la aplicación Swing que se pretende substituir el resultado dejaba bastante que desear. Pero aun así, "nadie" hoy día hace una aplicación Swing como primera opción y la porta a web después, porque todos sabemos que el usuario web tiene unas exigencias extremas sobre lo que quiere ver en la pantalla y el web permite una gran libertad de diseño con un relativo bajo coste, el mismo resultado en Swing cuesta más trabajo aunque el resultado es más correcto y no está lleno de las chapucillas propias del web (que si imágenes con las esquinas redondeadas etc).

Empezar en Swing y portar a web no es hoy día una opción (salvo excepciones), por lo tanto, la opción es llevar el web a Swing. Quizás AHORA es el momento, cuando las aplicaciones web tienden cada vez más a ser Single Page Interface lo cual encaja muy bien con el Single Document Interface del escritorio, por tanto por primera vez en la historia ambas formas de programación (web y escritorio) convergen.

En este llevar el web a Swing, Form4G es un intento. EFrigerio aprovecha el pobre soporte de HTML 3.2 de Swing con el fin de extenderlo añadiendo nuevos tags y JavaScript a través de Rhino, añadiendo además tecnologías similares al servidor tal y como una especie de servlets y JSP, digo "especie" porque el propio autor deja claro que su objetivo por ahora no es replicar exactamente el estándar servlets/JSP.

El esfuerzo es loable aunque el esfuerzo de hacer un motor web es un trabajo ingente, por lo que no veo tanto Form4G como un motor web sino una tecnología nueva "inspirada" en web.

No se cuales son claramente los objetivos personales del autor y el rumbo de Form4G, pero en ese terreno hay mucho trabajo hecho por ejemplo en Lobo Browser.

El objetivo de Lobo es construir un navegador web decente 100% Java y de código abierto, aunque siempre es posible reutilizar los componentes, extenderlos e integrarlos en aplicaciones que no sean navegadores web, es el caso del componente Cobra.

No conozco Lobo más que la superficie, pero por lo que se su objetivo es hacer web estándar. Form4G busca extender el web normal con Swing, lo cual me parece genial, estoy hablando por ejemplo del menú popup Swing que he visto en la documentación de Form4G. En mi opinión las ideas de Form4G tendrían más frutos dentro de Lobo, pero es el autor de Form4G el que tiene que decidir sus caminos y sus compañeros de viaje.

A mi me interesa mucho Lobo por dos razones, la primera como un navegador web más soportado en ItsNat, actualmente no está soportado porque todavía está muy verde, faltan demasiadas cosas ("the Javascript engine is functional, but not all APIs are complete" dice la web).

Pero Lobo me interesa mucho más por otra razón: como motor web Java con el que hacer aplicaciones de escritorio basadas en web, más bien en "la nueva web" Single Page Interface (SPI), es decir ser capaces de meter un framework web intensivo en AJAX en la aplicación de escritorio.

La idea no es nueva, todo el mundo sabe que Tomcat y Jetty desde hace mucho tiempo pueden introducirse embebidos en tu aplicación Java, sin embargo, en ambos casos, el modo de funcionamiento es el típico web, es decir el servidor se carga reservando un puerto de comunicaciones, lo cual es simplemente absurdo en una aplicación de escritorio.

Otro problema de esta técnica son los JSPs, los JSPs fueron pensados para generar páginas web lo cual tiene un valor casi nulo en aplicaciones "web de escritorio" basadas en SPI.

En el caso de ItsNat el enfoque "el servidor es el navegador" encaja bastante bien, pues básicamente ItsNat es un navegador Java W3C sin renderización web. 

En mi opinión para que este enfoque de "aplicaciones web de escritorio" prospere aparte de un motor web decente (no se si todavía Lobo está a la altura), es necesario crear un falso procesador de servlets y un XMLHttpRequest que pueda funcionar en local, es decir que el envío de datos realmente se una llamada directa al falso motor de servlets.

Es más como cualquiera puede imaginar, podríamos prescindir de toda la parafernalia servlets pues cualquier evento web podría ser procesado directamente por listeners en Java y cualquier modificación del DOM podría hacerse directamente en Java, cualquiera que conozca un poco Rhino y especialmente Batik sabe de lo que estoy hablando (el tema me pilla muy de cerca porque estoy peleándome actualmente con Batik funcionando en un applet).

Aunque lo anterior es totalmente cierto no hay que olvidar que el objetivo es ser capaces de hacer aplicaciones web que funcionen tanto en remoto como en escritorio (sin crear sockets) reutilizando cerca del 100% del código, por lo que la eliminación de los servlets puede no ser viable, de todas formas hay que recordar que la tecnología servlets fue concebida como no necesariamente ligada a HTTP, por eso las clases e interfases base no incluyen dependencias HTTP, aunque en la práctica "nadie" use servlets fuera del HTTP.

Lo interesante de estas "aplicaciones web de escritorio" es que no necesitan sockets para funcionar en local y admiten extensiones Swing en la línea de los popup Swing de Form4G, por lo que la versión web de escritorio podría ser funcionalmente exacta a la remota, pero además con extensiones Swing que permitieran una mayor productividad y por supuesto con la ventaja de poder acceder al escritorio via Java (y JNI si es necesario) como cualquier aplicación de escritorio (acceso al scanner, a la cámara etc).

¿Tienen futuro estas aplicaciones web de escritorio?