Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Sergio Guerrero | Desarrollo web y Tiendas virtuales

Manifiesto por una Red Neutral

Noviembre 30th, 2010 - [Enlace local]

Los ciudadanos y las empresas usuarias de Internet adheridas a este texto manifestamos:

  1. Que Internet es una Red Neutral por diseño, desde su creación hasta su actual implementación, en la que la información fluye de manera libre, sin discriminación alguna en función de origen, destino, protocolo o contenido.
  2. Que las empresas, emprendedores y usuarios de Internet han podido crear servicios y productos en esa Red Neutral sin necesidad de autorizaciones ni acuerdos previos, dando lugar a una barrera de entrada prácticamente inexistente que ha permitido la explosión creativa, de innovación y de servicios que define el estado de la red actual.
  3. Que todos los usuarios, emprendedores y empresas de Internet han podido definir y ofrecer sus servicios en condiciones de igualdad llevando el concepto de la libre competencia hasta extremos nunca antes conocidos.
  4. Que Internet es el vehículo de libre expresión, libre información y desarrollo social más importante con el que cuentan ciudadanos y empresas. Su naturaleza no debe ser puesta en riesgo bajo ningún concepto.
  5. Que para posibilitar esa Red Neutral las operadoras deben transportar paquetes de datos de manera neutral sin erigirse en "aduaneros" del tráfico y sin favorecer o perjudicar a unos contenidos por encima de otros.
  6. Que la gestión del tráfico en situaciones puntuales y excepcionales de saturación de las redes debe acometerse de forma transparente, de acuerdo a criterios homogéneos de interés público y no discriminatorios ni comerciales.
  7. Que dicha restricción excepcional del tráfico por parte de las operadoras no puede convertirse en una alternativa sostenida a la inversión en redes.
  8. Que dicha Red Neutral se ve amenazada por operadoras interesadas en llegar a acuerdos comerciales por los que se privilegie o degrade el contenido según su relación comercial con la operadora.
  9. Que algunos operadores del mercado quieren “redefinir” la Red Neutral para manejarla de acuerdo con sus intereses, y esa pretensión debe ser evitada; la definición de las reglas fundamentales del funcionamiento de Internet debe basarse en el interés de quienes la usan, no de quienes la proveen.
  10. Que la respuesta ante esta amenaza para la red no puede ser la inacción: no hacer nada equivale a permitir que intereses privados puedan de facto llevar a cabo prácticas que afectan a las libertades fundamentales de los ciudadanos y la capacidad de las empresas para competir en igualdad de condiciones.
  11. Que es preciso y urgente instar al Gobierno a proteger de manera clara e inequívoca la Red Neutral, con el fin de proteger el valor de Internet de cara al desarrollo de una economía más productiva, moderna, eficiente y libre de injerencias e intromisiones indebidas. Para ello es preciso que cualquier moción que se apruebe vincule de manera indisoluble la definición de Red Neutral en el contenido de la futura ley que se promueve, y no condicione su aplicación a cuestiones que poco tienen que ver con ésta.

La Red Neutral es un concepto claro y definido en el ámbito académico, donde no suscita debate: los ciudadanos y las empresas tienen derecho a que el tráfico de datos recibido o generado no sea manipulado, tergiversado, impedido, desviado, priorizado o retrasado en función del tipo de contenido, del protocolo o aplicación utilizado, del origen o destino de la comunicación ni de cualquier otra consideración ajena a la de su propia voluntad. Ese tráfico se tratará como una comunicación privada y exclusivamente bajo mandato judicial podrá ser espiado, trazado, archivado o analizado en su contenido, como correspondencia privada que es en realidad.

Europa, y España en particular, se encuentran en medio de una crisis económica tan importante que obligará al cambio radical de su modelo productivo, y a un mejor aprovechamiento de la creatividad de sus ciudadanos. La Red Neutral es crucial a la hora de preservar un ecosistema que favorezca la competencia e innovación para la creación de los innumerables productos y servicios que quedan por inventar y descubrir. La capacidad de trabajar en red, de manera colaborativa, y en mercados conectados, afectará a todos los sectores y todas las empresas de nuestro país, lo que convierte a Internet en un factor clave actual y futuro en nuestro desarrollo económico y social, determinando en gran medida el nivel de competitividad del país. De ahí nuestra profunda preocupación por la preservación de la Red Neutral. Por eso instamos con urgencia al Gobierno español a ser proactivo en el contexto europeo y a legislar de manera clara e inequívoca en ese sentido.

(Si te sientes cómodo y representado por este texto, dale toda la difusión que puedas y quieras: reprodúcelo, enlázalo, tradúcelo, compártelo, vótalo… todas esas cosas que puedes hacer con total tranquilidad y libertad gracias, precisamente, al hecho de que tenemos todavía una red neutral. Hagamos posible el seguir teniéndola)

 

Fuente original: Microsiervos.com

» Leer más, comentarios, etc...

Variable not found

32 Síntomas que indican que estás afectado por el desarrollo

Noviembre 30th, 2010 - [Enlace local]

Stackoverflow es, sin duda, una fuente infinita de temas curiosos sobre los que hablar y escribir. Hace tiempo tenía ganas de comentar un hilo que me pareció muy divertido unos meses atrás.



La pregunta “What real life bad habits has programming given you?”, que podríamos traducir más o menos como “¿Qué malos hábitos de la vida real te ha dado la programación?”, inició un hilarante brainstorming sobre nuestra particular visión del mundo real, brindándonos la oportunidad de comprobar que no somos tan únicos ni raros como suele parecer.



A continuación resumo las respuestas y comentarios que más me han llamado la atención en este hilo, probablemente por padecerlos en primera persona. Y ya puestos, como de costumbre, he aprovechado para añadir otros de cosecha propia:

  1. Considerar 256 o 1.024 números bonitos, tanto como podrían ser 1.000 o 10 para alguien no afectado por el desarrollo.
  2. Echar en falta un Ctrl-F cuando estamos ante un libro o documento escrito para buscar términos.
  3. Intentar poner en pausa un programa de televisión convencional, o retroceder en una secuencia de la que no nos hemos enterado bien.
  4. Interpretar de forma extremadamente literal las expresiones. Responder “Sí” a “¿tienes hora?” es un ejemplo clásico.
  5. Utilizar la aritmética booleana donde no se debe, por ejemplo, respondiendo “Sí” a “¿Quieres té o café?”.
  6. Echar en falta el Ctrl-S para salvar un trabajo, por ejemplo un castillo de arena, y conservarlo justo en el estado en que se encuentra para volver a retomarlo más adelante.
  7. Mostrar alergia a textos con problemas de puntuación, paréntesis desbalanceados y otro tipo de fallos ortográficos, así como un sexto sentido para detectarlos.
  8. Googlearlo todo, en cualquier momento y circunstancia.
  9. Buscar opciones por defecto que nos facilite la toma de decisiones. Incluso a la hora de elegir el almuerzo en un restaurante. 
  10. Numerar elementos comenzando por cero, y obviamente, acabar con un número menos que el resto de mortales. Comenzando por el pulgar: dedo 0, dedo 1… dedo 9.
  11. Sentir los errores de conversión de tipo como si fuéramos compiladores. Si preguntas a alguien “¿quieres salir a pasear?” esperas un booleano, no algo como “me duele la cabeza”.
  12. imageDivertirse con frases y chistes geeks, como “Dios es real, a menos que se declare como entero” :-D
  13. Sentir una extraña y maquiavélica alegría al detectar bugs en cualquier tipo de sistemas, como programas de televisión o dispositivos electrónicos.
  14. Intentar optimizar y hacer más eficiente cada paso que damos. Seguro que todos hemos vivido situaciones como “me tengo que levantar para ir al aseo, así que aprovecho para llevar algunos chismes a la cocina, de camino pongo las palomitas en el microondas, de forma que cuando vuelva ya estarán listas, busco una cerveza en el frigorífico y continúo viendo la película”.
  15. Ser incapaces de comprender el lado contrario, es decir, cómo alguien no optimiza sus acciones, desaprovechando esfuerzos de forma injustificable ;-)
  16. Intentar planificar minuciosamente otros aspectos de la vida: viajes, excursiones, ir de compras, etc.
  17. Utilizar en conversaciones con gente normal palabras como “lógica”, “optimizar”, “recurso”, o “multitarea”.
  18. Llamar a los no programadores “gente normal” ;-D
  19. Buscar patrones repetitivos de comportamiento en todo como si tuviésemos que implementarlo.
  20. Anidar paréntesis (en textos escritos (incluso a mano)). Pero, eso sí, siempre correctamente balanceados.
  21. Analizar y criticar lo que se nos pregunta en un formulario, aunque sea en papel impreso. Por ejemplo, “¿para qué quieren saber la edad si están preguntando también la fecha de nacimiento?”
  22. Incluir una barra inclinada en el interior del dígito cero (algo como “Ø”) cuando escribes números a mano.
  23. Bucles para la vida real, ¡YA!En las webs de compra de entradas online, pensar al tener que elegir sitio en un cine con sesión numerada, que la sala podría ser defragmentada. :-D
  24. No recordar el significado original de palabras como “herencia”, “hilo”, o “excepción”.
  25. Echar en falta los bucles en la vida real.
  26. Ponerse realmente nervioso cuando tenemos delante a alguien no experto manejando un ordenador y esperamos a que realice una tarea.
  27. Finalizar frases con punto y coma;
  28. Echar en falta el Ctrl-Z para deshacer alguna barbaridad. Por ejemplo, si dedicas tiempo a la pintura o dibujo, seguro que más de una vez lo has necesitado. Y también si eres algo bocazas ;-)
  29. Echar también en falta la versión Linux de Ctrl-Z para pausar un proceso en curso.
  30. Solucionar un problema mientras sueñas, o en mitad de una conversación ajena al mismo.
  31. Excusarnos en este último caso diciendo que “estábamos en multitarea” cuando no es cierto: simplemente no prestábamos mucha atención a la conversación ;-D
  32. Hacer que el número de elementos en una lista sea siempre potencia de 2 ;-)
A la vista de esto, ¿crees que estás afectado por el desarrollo? ;-D



Publicado en: Variable not found



» Leer más, comentarios, etc...

más que código - Articulo - Programación

Siete lenguajes en siete semanas

Noviembre 29th, 2010 - [Enlace local]

Seven Languages in Seven Weeks

En Lambda the Ultimate apuntan al libro Seven Languages in Seven Weeks.

La verdad es que resulta interesante y creo que voy a intentar seguir la idea: No digo siete lenguajes y no digo en siete semanas, pero la idea es aprender, aunque sea de modo rudimentario, unos cuantos lenguajes con paradigmas distintos a los que estamos acostumbrados (en mi caso, programación orientada a objetos y programación procedural). Creo que es un reto mental interesante y te puede ayudar a pensar “outside the box” incluso cuando programes en tu lenguage habitual.

En cualquier caso, los siete lenguajes que propone son:

» Leer más, comentarios, etc...

Picando Código

Introducción a Spring Framework Java

Noviembre 29th, 2010 - [Enlace local]

Una de las tecnologías interesantes que aprendí este año fue Spring Framework. Tuve que estudiarlo y vengo usándolo a diario en el trabajo. Qué mejor forma de fijar mis conocimientos que intentando explicar Spring.

Lo único que sabía hasta el momento que me puse a estudiar era “es un framework de inyección de dependencias”. Poco sabía sobre inyección de dependencias, más que una teoría básica. En su núcleo, eso es Spring, pero en verdad hoy día cuenta con mucho más que eso. Actualmente es muy popular, siendo tomado en cuenta como alternativa o reemplazo de los Enterprise JavaBean (EJB).

En su momento empecé con Spring 2.5, pero creo que a modo de introducción los conceptos básicos se mantienen en Spring 3 (versión actual).

Spring Framework

Spring Framework

Spring es un framework liviano y no intrusivo: generalmente los objetos que programamos no tienen dependencias en clases específicas de Spring. Sus características principales son inyección de dependencias y programación orientada a aspectos. Intentaré hacer una breve explicación de ambas sin entrar en detalle de cómo se implementan en Spring (esto vendrá más adelante).

Inyección de dependencias

El objetivo es lograr un bajo acoplamiento entre los objetos de nuestra aplicación. Con este patrón de diseño, los objetos no crean o buscan sus dependencias (objetos con los cuales colabora) sino que éstas son dadas al objeto. El contenedor (la entidad que coordina cada objeto en el sistema) es el encargado de realizar este trabajo al momento de instanciar el objeto. Se invierte la responsabilidad en cuanto a la manera en que un objeto obtiene la referencia a otro objeto.

De esta manera, los objetos conocen sus dependencias por su interfaz. Así la dependencia puede ser intercambiada por distintas implementaciones a través del contenedor. En resumen, programaremos orientado a interfaces e inyectaremos las implementaciones a través del contenedor.

Programación orientada a aspectos

Se trata de un paradigma de programación que intenta separar las funcionalidades secundarias de la lógica de negocios. En inglés denominan a estas funcionalidades “cross-cutting concerns” algo que se traduciría como “preocupaciones transversales”. Por ejemplo los loggers, la seguridad, el manejo de transacciones, etc., son funcionalidades que atraviesan nuestro programa en varias abstracciones de éste. Por lo tanto corremos el riesgo de caer en la repetición de código y el acoplamiento entre nuestra lógica de negocios y la implementación de los cross-cutting concerns.

La AOP (Aspect-Oriented Programming) busca modularizar estos servicios y aplicarlos de manera declarativa a los componentes que deban afectar.

Módulos de Spring

Módulos de Spring

Módulos de Spring

El diagrama muestra los módulos con los que cuenta Spring (hasta la versión 2.5). En su núcleo (Core) se encuentra el BeanFactory – el contenedor fundamental de Spring y quien se encarga de la inyección de dependencias. El contenedor ApplicationContext se basa en BeanFactory y extiende su funcionalidad con soporte para i18n, eventos de ciclo de vida, validación y mejor integración con AOP.

AOP – provee la implementación de AOP, permitiéndonos desarrollar interceptores de método y puntos de corte para desacoplar el código de las funcionalidades transversales.

DAO - Provee una capa de abstracción sobre JDBC, abstrae el código de acceso a datos de una manera simple y limpia. Tiene una capa de expeciones sobre los mensajes de error provistos por cada servidor específico de base de datos. Además cuenta con manejo de transacciones a través de AOP.

ORM – Provee la integración para las distintas APIs de mapeo objeto-relacional incluyendo JPA, JDO, Hibernate e iBatis.

JEE – Provee integración con aplicaciones Java Enterprise Edition así como servicios JMX, JMS, EJB, etc.

Web – Módulo que aporta clases especiales orientadas al desarrollo web e integración con tecnologías como Struts y JSF. Cuenta con el paquete Spring MVC, una implementación del conocido patrón de diseño aplicando los principios de Spring.

Cómo seguir

Como siempre, la documentación oficial es un buen recurso donde ir estudiando.

Spring in Action

Spring in Action

Un libro que está muy recomendado y me ayudó mucho al momento de estudiar Spring fue Spring in Action – Second Edition. Cubre Spring 2.5, pero ya se puede pre-ordenar Spring in Action – Third Edition, versión actualizada a lo más reciente de Spring.

He leído (y escuchado) que este libro es básico y solo ofrece pero bueno, era lo que buscaba al momento de dar con este libro. Tras leerlo, uno puede salir andando con Spring. Ya después se podrá seguir ahondando en el tema con documentación o libros más específicos según los módulos que se quieran usar.

Me interesó mucho el uso de Spring, dentro del paradigma de orientación a objetos, creo que es una de las formas más sanas y dinámicas de desarrollar aplicaciones Java hoy en día.

Espero contar con el tiempo suficiente para continuar publicando sobre lo que he ido aprendiendo de esta tecnología. Me interesa sobre todo ahondar en lo que ví sobre la manera en que el BeanFactory y el ApplicationContext realizan la inyección de dependencias y el ciclo de vida de los SpringBeans.

Más adelante también debería estudiar un poco más intensamente Spring MVC (sobretodo a partir de Spring 3), y creo que sería un buen ejercicio postear sobre eso también. Espero sus comentarios, si no conocían Spring qué les pareció, y particularmente si lo conocen y lo usan, qué conocimiento pueden agregar para complementar el post.

En el próximo post me gustaría hablar un poco más sobre el contenedor de inyección de dependencias, y armar un proyecto básico para mostrar algo de código.

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti)

Velneo V7

Noviembre 28th, 2010 - [Enlace local]

Los amigos de Velneo me han invitado a probar el nuevo Velneo V7, que ya está disponible en su versión 7.6.

Velneo es una completa plataforma de desarrollo de aplicaciones empresariales basada en el paradigma Cliente-Servidor, y que nos permite desarrollar tanto aplicaciones de escritorio, como basadas en web.

Lo probé brevemente cuando era conocido como Velázquez Visual, y muchos años después vuelvo a meterme con él.

La mayoría de herramientas están disponible para plataformas como Win32, Mac, Linux o Maemo. La herramienta completa, consta de los siguientes paquetes: Velneo vClient V7 (Ejecutor de aplicaciones); Velneo vDevelop V7 (Editor integrado); Velneo vAdmin V7 (Administrador gráfico); Velneo vServer V7 (Servidor de aplicaciones); Velneo vInstallBuilder V7 (Instalador de proyectos); Velneo vMap2ProjectAid V7 (Ayuda a la migración); Velneo vDataClient V7 (Cliente de datos); Velneo vTranslator V7 (Editor de idiomas); Velneo vWebClient V7 (Plugin cliente para navegadores Web); Velneo vModApache V7 (Módulo Apache para soluciones Web); y Velneo vODBC driver V7 (Acceso a datos Velneo).

La filosofía de desarrollo, como ya viera con Velázquez es extraña en el sentido de ser diferente a lo que un desarrollador puede estar acostumbrado. No es mala, pero si que requiere un proceso de adaptación.

Una vez superado, vemos que Velneo es una herramienta tremendamente productiva en el desarrollo de aplicaciones de gestión cliente-servidor. Se puede utilizar para otro tipo de aplicativos, pero al no ser su campo de especialidad, no será tan competitivo.

El rendimiento que obtiene, a pesar de ser no-compilado es bueno, dado que este tipo de aplicaciones dependen más del rendimiento del servidor, y de la comunicación con éste, que de la pura potencia de proceso del cliente.

Es cierto que las aplicaciones de gestión tal cual las conocíamos van a menos, por la paulatina migración al entorno web. Un campo que Velneo cubre, aunque no de una manera tan buena como la tradicional.

Si sigues con el desarrollo digamos Visual Basic o xBase, deberías al menos evaluar la plataforma Velneo, tendrás que aprender a trabajar con él, pero una vez estés familiarizado, vas a notar lo productivo que es.

Por contra, si trabajas con Delphi, C++ Builder, o incluso C++ con alguna librería como Qt, entonces tienes ya un rendimiento algo superior (compilado), y sobretodo mucha mayor flexibilidad (diferentes tipos de proyecto) a la hora de desarrollar. El coste será en general un desarrollo más complicado.

Para los que estén con .NET, MONO o Java, tienen como ventaja la flexibilidad, es decir poder desarrollar diferentes tipos de aplicaciones (web, escritorio, cliente servidor, movilidad, ...), y de nuevo el inconveniente de la productividad si nos restringimos a las aplicaciones empresariales.

Los precios oscilan desde la versión gratuita para estudiantes y desarrolladores, hasta los 3.450€ + 220€/mes (Nivel 4) o los 149€ + 55€/mes (Nivel 2).

Velneo es un excelente producto, y un escaparate de tecnología nacional. No me cabe la menor duda de que si fuese estadounidense, su popularidad sería mucho mayor.

Ya para acabar, me gustaría recalcar lo competencia es dura en este campo, y es aquí donde la especialización de Velneo es su mayor ventaja, pero también su principal inconveniente.

Te animo a descargar Velneo desde la página oficial de descargas, para que puedas empezar a probarlo y juzgar por ti mismo.

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

Velneo V7

Noviembre 28th, 2010 - [Enlace local]

Los amigos de Velneo me han invitado a probar el nuevo Velneo V7, que ya está disponible en su versión 7.6.

Velneo es una completa plataforma de desarrollo de aplicaciones empresariales basada en el paradigma Cliente-Servidor, y que nos permite desarrollar tanto aplicaciones de escritorio, como basadas en web.

Lo probé brevemente cuando era conocido como Velázquez Visual, y muchos años después vuelvo a meterme con él.

La mayoría de herramientas están disponible para plataformas como Win32, Mac, Linux o Maemo. La herramienta completa, consta de los siguientes paquetes: Velneo vClient V7 (Ejecutor de aplicaciones); Velneo vDevelop V7 (Editor integrado); Velneo vAdmin V7 (Administrador gráfico); Velneo vServer V7 (Servidor de aplicaciones); Velneo vInstallBuilder V7 (Instalador de proyectos); Velneo vMap2ProjectAid V7 (Ayuda a la migración); Velneo vDataClient V7 (Cliente de datos); Velneo vTranslator V7 (Editor de idiomas); Velneo vWebClient V7 (Plugin cliente para navegadores Web); Velneo vModApache V7 (Módulo Apache para soluciones Web); y Velneo vODBC driver V7 (Acceso a datos Velneo).

La filosofía de desarrollo, como ya viera con Velázquez es extraña en el sentido de ser diferente a lo que un desarrollador puede estar acostumbrado. No es mala, pero si que requiere un proceso de adaptación.

Una vez superado, vemos que Velneo es una herramienta tremendamente productiva en el desarrollo de aplicaciones de gestión cliente-servidor. Se puede utilizar para otro tipo de aplicativos, pero al no ser su campo de especialidad, no será tan competitivo.

El rendimiento que obtiene, a pesar de ser no-compilado es bueno, dado que este tipo de aplicaciones dependen más del rendimiento del servidor, y de la comunicación con éste, que de la pura potencia de proceso del cliente.

Es cierto que las aplicaciones de gestión tal cual las conocíamos van a menos, por la paulatina migración al entorno web. Un campo que Velneo cubre, aunque no de una manera tan buena como la tradicional.

Si sigues con el desarrollo digamos Visual Basic o xBase, deberías al menos evaluar la plataforma Velneo, tendrás que aprender a trabajar con él, pero una vez estés familiarizado, vas a notar lo productivo que es.

Por contra, si trabajas con Delphi, C++ Builder, o incluso C++ con alguna librería como Qt, entonces tienes ya un rendimiento algo superior (compilado), y sobretodo mucha mayor flexibilidad (diferentes tipos de proyecto) a la hora de desarrollar. El coste será en general un desarrollo más complicado.

Para los que estén con .NET, MONO o Java, tienen como ventaja la flexibilidad, es decir poder desarrollar diferentes tipos de aplicaciones (web, escritorio, cliente servidor, movilidad, …), y de nuevo el inconveniente de la productividad si nos restringimos a las aplicaciones empresariales.

Los precios oscilan desde la versión gratuita para estudiantes y desarrolladores, hasta los 3.450€ + 220€/mes (Nivel 4) o los 149€ + 55€/mes (Nivel 2).

Velneo es un excelente producto, y un escaparate de tecnología nacional. No me cabe la menor duda de que si fuese estadounidense, su popularidad sería mucho mayor.

Ya para acabar, me gustaría recalcar lo competencia es dura en este campo, y es aquí donde la especialización de Velneo es su mayor ventaja, pero también su principal inconveniente.

Te animo a descargar Velneo desde la página oficial de descargas, para que puedas empezar a probarlo y juzgar por ti mismo.

Artículos relacionados

SQLite
Actualización a SPHPBlog 0.3.7i
Web Storage

» Leer más, comentarios, etc...

MadeInFlex

Operaciones CRUD desde Flex con Pimento y Cinnamon

Noviembre 27th, 2010 - [Enlace local]


  1. ¿Qué es Pimento Data Services y qué funcionalidades ofrece?
  2. El ejemplo
  3. Conclusiones

¿Qué es Pimento Data Services y qué funcionalidades ofrece?

Cuando utilizamos JPA e Hibernate para ejecutar operaciones CRUD en nuestra aplicación creamos las entidades con sus correspondientes anotaciones, luego creamos una capa DAO en la cual invocamos las operaciones de persistencia y finalmente una capa de servicios desde la cual invocamos los métodos del DAO y encapsulamos la lógica de negocios. Si ejecutamos todo este código en una aplicación JEE que implemente AMF podremos invocar estos métodos desde Flex utilizando Remote Objects. Pero en caso que decidamos dotar de más inteligencia a la aplicación Flex podemos trasladar la capa de servicios al cliente y en este caso necesitaríamos invocar directamente a la capa DAO o a las operaciones de persistencia.

Pimento Data Services nos permite, desde ActionScript, invocar las operaciones de persistencia definidas por JPA en el servidor, a través de la clase EntityManager, homóloga de la de JPA, pero adaptada a este tipo de cliente. A través de esta clase podemos invocar las operaciones “load”, “persist”, “remove” y “merge”, además de ejecutar consultas utilizando JPAQL y “Named Query”.

El framework almacena en un “cache” en el cliente las entidades cargadas del servidor, asegurando que exista una sola instancia de cada entidad, y este “cache” se utiliza para enviar al servidor solamente las propiedades que cambien cuando se realice una operación “merge” o para restablecer el estado original de la entidad, también ofrece métodos para eliminar objetos del “cache” e inspeccionar si un objeto ya existe en el “cache”.

Pimento ofrece también funcionalidades que permiten realizar “lazy loading” de entidades. Para todas las asociaciones y colecciones marcadas como “lazy” que no han sido inicializadas en el momento de la carga, el servidor envía solamente “proxies” al cliente, y en el momento necesario, utilizando el método “initialize” de la clase EntityManager se cargarán el resto de los datos.

Ante una operación “merge” de una entidad se compara el estado de la misma con la que se encuentra en el “cache” y se envía al servidor solamente aquellas propiedades que hayan cambiado, este proceso ocurre recursivamente cuando las propiedades son colecciones.

El framework también se ocupa de gestionar las llaves primarias de las entidades, al hacer persistente una nueva entidad se devuelve la misma entidad con el valor correspondiente de su llave primaria inyectada.

Si tenemos propiedades en nuestra entidad en el servidor que no deseamos que lleguen al cliente o que no sean modificadas en éste, anotamos las mismas usando anotaciones propias del framework.
En el servidor podemos interceptar todas las operaciones iniciadas en el cliente y controlar el valor de las propiedades de las entidades involucradas en las operaciones.

Pimento Data Services se compone de dos partes, una se incluye en el cliente y otra en el servidor. La parte que se incluye en el servidor utiliza Spring para inyectar dependencias en todas las clases que reciben las entidades enviadas por el cliente. La parte correspondiente en el cliente incluye librerías que se añaden al proyecto.

El framework ofrece dos modelos de programación para trabajar con entidades persistentes: uno utilizando la clase EntityManager de AS3 y otro utilizando servicios personalizados, cada uno tiene sus ventajas y desventajas. El modelo más simple es el que utiliza el EntityManager de AS3, con este modelo creamos las entidades y le incluimos las anotaciones propias de JPA, luego añadimos la anotación “@Managed” a aquellas entidades que queremos que sean gestionadas por Pimento, se crean las clases AS3 equivalentes a las entidades gestionadas, se inicializa el cliente y se invocan las operaciones CRUD, opcionalmente se pueden crear interceptores.

Los servicios personalizados por su parte son equivalente a las capa de servicios que mencionábamos anteriormente, son clases Java gestionadas por Spring y que se exponen al cliente para que sean invocadas remotamente. El framework incluye tareas ant para generar los “proxies” de esas clases en el cliente.

Desde el punto de vista de flexibilidad los servicios personalizados son más convenientes si planeamos que nuestra aplicación tenga múltiples clientes (Web, de escritorio, Web Service, etc.), pero si el único cliente es Flex entonces la solución más simple es usar el EntityManager de AS3, en este caso solamente tenemos que crear en el servidor las entidades con sus anotaciones correspondientes.
El framework se soporta sobre Cinnamon Remoting, una aplicación JEE que implementa el protocolo AMF3, como BlazeDS, pero a diferencia de éste no soporta mensajería, por lo que se hace un poco complejo implementar la sincronización de datos.

En este artículo veremos a través de un ejemplo como ejecutar operaciones CRUD desde Flex con Pimento Data Services utiizando el EntityManager de AS3. En artículos futuros veremos la funcionalidad de “lazy loading” y los servicios personalizados.

El ejemplo

En el ejemplo que desarrollaremos partimos del hecho que queremos gestionar una entidad denominada User y contamos con un servidor de bases de datos MySQL.

Luego de descargar el framework desde aquí lo primero que haremos será crear la aplicación JEE que utilice Cinnamon y donde crearemos las entidades. Para esto creamos un proyecto de tipo “Dynamic Web Project” con las siguientes características:

Una vez creado el proyecto copiamos el contenido de la carpeta “server/web/WEB-INF/lib” de la distribución del framework en “WebContent/WEB-INF/lib” de nuestro proyecto. Sustituimos el archivo de HSQLDB por el controlador JDBC de MySQL, y copiamos de la carpeta “server/release” los archivos “cinnamon-core”, “cinnamon-reflect” y “pimento-core”. Necesitamos copiar también el paquete “javassist”, este lo podemos encontrar en la distribución de Spring con dependencias.

Creamos una carpeta denominada “config” dentro de “WebContent/WEB-INF” de nuestro proyecto y copiamos los archivos “jpa-spring.xml” y “pimento-spring.xml” en “server/web/WEB-INF/config” en la distribución del framework; también copiamos el archivo “dp.properties.template.mysql” de “server/web/WEB-INF/config/db-templates” como “db.properties” en “WebContent/WEB-INF/config” de nuestro proyecto y ajustamos los valores de la conexión a la base de datos. Como estamos en fase de desarrollo ponemos “hibernate.hbm2ddl.auto=update”.

Finalmente el archivo “web.xml” de nuestro proyecto queda así:

A continuación crearemos la entidad que vamos a gestionar desde el cliente:

Aquí la única anotación propia de Pimento es “@Managed”, que indica que la entidad será gestionada por el framework, o sea, será incluida en el “cache” del cliente cuando sea cargada, su llave primaria será inyectada al hacer persistente una instancia de la clase, se enviarán solamente las propiedades que cambien al realizar una operación “merge” y su estado podrá ser gestionado a través del EntityManager.

Desplegamos la aplicación en Tomcat y arrancamos el servicio, pero antes creamos la base de datos según quedó configurada en el archivo “db.properties”. Al iniciar la aplicación se creará la tabla que representa la entidad en la base de datos. Llenamos esta tabla con información inicial para poder efectuar la autenticación en la UI.

Esto es todo lo que haremos en el servidor, a continuación crearemos la UI.

Creamos un proyecto Flex con las siguientes características:

La interface de usuario contiene un ViewStack con dos elementos, en uno pondremos un panel de autenticación:

login

Al introducir un nombre de usuario y contraseña válidos pasaremos al segundo elemento del View Stack, en el cual se realizará la gestión de la entidad:

crud

Para estructurar mejor el proyecto nos auxiliaremos del framework Robotlegs. Lo primero que haremos será incluir en el proyecto las librerías del framework Pimento y Cinnamon. Copiamos en la carpeta “libs” del proyecto los archivos “cinnamon-1.1.0.swc” y “pimento-1.1.0.swc” que se encuentran en la carpeta “client\release” de la distribución, incluimos también “spicelib-core-2.0.1.swc” y “spicelib-reflect-2.0.1.swc” de la carpeta “client\lib” y la librería del framework Robotlegs.

Luego procedemos a crear el equivalente AS3 de la entidad creada en java:

Como podemos ver, no se incluye el metadata “RemoteClass”, que normalmente utilizamos para indicar la clase equivalente a ésta en el servidor, Pimento y Cinnamon se encargan de registrar la clase y realizar todo el proceso de serialización/deserialización entre AS3 y Java de las instancias cuando viajan de cliente a servidor y viceversa.

La configuración del framework en el cliente comienza con la creación de una instancia de la clase “PimentoConfig”, a través de la cual podemos obtener el “EntityManager” que usaremos para invocar las operaciones de persistencia. La clase PimentoConfig necesita conocer el URL de la aplicación JEE que a través de Cinnamon recibirá las solicitudes del cliente para invocar las operaciones de persistencia, específicamente el URL al servlet “service”. En nuestro caso cargaremos esta información de un archivo xml externo. El comando que hace todo esto queda así:

El contenido del archivo “config.xml” que se encuentra en la carpeta “src/config” del proyecto Flex es el siguiente:

Cuando el usuario introduzca un nombre de usuario y contraseña válidos se ejecutará el comando que realiza la autenticación, que es éste:

Como vemos en el método “execute”, el modo de uso de la clase EntityManager de Pimento es muy similar a su homóloga de JPA, pero con la característica distintiva que las operaciones de persistencia son asincrónicas, de ahí que debamos registrar manejadores para obtener los resultados y los posibles errores.

De forma similar el código para realizar las operaciones CRUD queda así:

Adicionar

Modificar

Eliminar

Listar

El código fuente de los proyectos del servidor y el cliente se puede descargar de aquí.

Conclusiones

Hemos visto el modelo de programación más simple de Pimento Data Services, este modelo nos permite trasladar al cliente la lógica de la capa de servicios e invocar directamente desde éste las operaciones de persistencia de JPA en el servidor. Hemos dejado fuera las funcionalidades del “lazy loading” y los servicios personalizados, que serán tratados en artículos futuros.

» Leer más, comentarios, etc...

avemundi, blog de un micro-isv » Desarrollo de software

password chest

Noviembre 27th, 2010 - [Enlace local]

Uno de los programas que me faltaban en OS X era un gestor de contraseñas ligero. Los que había encontrado eran o muy rudimentarios, o con aspecto poco maquero o muy complicados. Eso hasta hace pocos días que encontré un programa que ha ganado un sitio en mi stack de aplicaciones.

Password Chest es un sencillo gestor de contraseñas para OS X que almacena la información en el formato de Password Safe V3. Permite agrupar las contraseñas por temática, generar contraseñas y copiar una contraseña al portapapeles desde el formulario principal del programa. Además el programa permite elegir la ubicación del archivo de contraseñas, con lo que eligiendo la carpeta de Dropbox como ubicación permite tener un único archivo de contraseñas siempre actualizado y accesible desde varios Mac.

El programa tiene licencia GPL2, está hecho con PyObjc y el código fuente se puede descargar desde el sitio web del autor.

passwordchest2

» Leer más, comentarios, etc...

Buayacorp

Google Docs ya soporta LaTeX

Noviembre 26th, 2010 - [Enlace local]

Google Docs acaba de añadir soporte a LaTeX. Vía MuyLinux.

» Leer más, comentarios, etc...

Najaraba.com: Software libre, metodologías ágiles y más.

Coderetreat y TDD, en Donosti

Noviembre 26th, 2010 - [Enlace local]

El sabado estuve en el #coderetreat de Donosti. Contamos con la presencia de Enrique Comba, que hizo de maestro de ceremonias, planteando el problema y dándonos los pasos a seguir para las prácticas en cada iteración.Os animo desde aquí a que os organiceis un evento de estos dónde podais, en realidad no hace falta traer a ninguna estrella, solo tener ganas de aprender un día, y de pasarlo bien.Ha

» Leer más, comentarios, etc...

MadeInFlex

Flex Hero: nuevos componentes para Desktop(II): Spark Form y Spark Formatters

Noviembre 26th, 2010 - [Enlace local]

En este post veremos dos de los nuevos componentes que nos trae esta release de Hero, Spark Form y Spark Formatters.

El Spark Form

Mantiene la funcionalidad del MX Form y añade mejoras para adaptarse a diseños más modernos, debido a que es totalmente customizable por ser un SkinnableContainer con estados visuals asociados. Su costumización se hace en la skin del componente.

La mejora más importante de este componente respecto a su predecesor es la madurez de su layout. El Spark Form usa restricciones basadas en un grid para posicionar cada FormItem. Además, el layout nos permite tratar las filas y columnas de forma más dinámica: las columnas y filas pueden incrementar o decrementar su amaño en tiempo de ejecución para adaptarse al contenido de la información y los errores de texto de ayuda o de validación, se pueden mostrar bajo demanda. Spark Form viene con dos layouts: por defecto el horizontal y también el llamado stacked, que distribuye los elementos verticalmente. En las imágenes vemos estos dos tipos de layout:

Clases relacionadas con el componente
Tenemos unas clases que se relacionan con el Spark Form y debemos tener en cuenta:

Aspectos importantes de la clase FormItemLayout
FormItemLayout extiende a ConstraintLayout, una clase equivalente a las restricciones del mx Canvas. FormItemLayout usa los métodos internos getMeasuredColumnWidths y setLayoutColumnWidths para alinear las columnas de los FormItem. En este momento ConstraintLayout soporta las siguientes restricciones: left, right, top, bottom y baseline.

El comportamiento general de ConstraintLayout es el de un grid para definir el layout en regiones. Los elementos que constituyen el Layout se pueden alinear con las filas y columnas usando restricciones. También es possible hacer que los elementos del Layout se expandan a través de multiples filas y columnas para dar un major comportamiento y flexibilidad del posicionamiento.

ConstraintColumns y ConstraintRows

Las regiones dentro de un ConstraintLayout se definen con instancias de ConstraintColumn y ConstraintRow definidas dentro de dos propiedades de tipo vector, llamdas constraintColumns y constraintRows respectivamente. Cada ConstraintColumn y ConstraintRow puede tener o no un tamaño definido a nivel de píxel. Una columna de tamaño fijo no cambiará de tamaño aunque su contenido lo haga. Si un componente se expande a través de diferentes columnas, el espacio se distribuirá a través de las columnas. Se prevé que ConstraintColumn y ConstraintRow permitan determinar el tamaño porcentualmente en futuras releases.

Restricciones
Ya hemos comentado las restricciones que se pueden determinar. Cada elemento puede especificar restricciones respecto al contenedor principal, por ejemplo (left=”5″) , o respecto a una columna o fila, por ejemplo (left=”col1:5″).
Las restricciones left, right, top, and bottom, definen las fronteras del elemento respecto a la región o container. La restricción de baseline define el desplazamiento entre la línea de base definida por la fila que establece la restricción y la posición del elemento.

Estados del elemento FormItem
Los estados que nos define el elemento FormItem son: normal, disabled, required, requiredAndDisabled y requiredAndError.
El estado de error se da cuando el contenido del FormItem tiene valor INVALID (fallo de la validación). El estado required ocurre cuando el FormItem se especifica como requerido.

Error Handling en la validación
Un FormItem está pendiente de los eventos FlexEvent.VALID y FlexEvent.INVALID de los elementos que contiene. La propiedad elementErrorStrings contiene un Vector de errorStrings sobre los elementos del FormItem.

Para ver más:
Especificación
Video

Spark Formatters

Flash Player 10.1 lleva implícito un Nuevo conjunto de APIs para tratar la globalización de los datos, como el formateo de fechas, horas, números o monedas. Hero, usando estas APIs ha desarrollado los nuevos Spark Formatters. Estos formatean los datos basados en la configuración regional definida por el sistema operativo.
Esta versión de Hero nos proporciona 3 formatters para tartar la información correctamente: CurrencyFormatter, NumberFormatter y DateTimeFormatter:

Otro aspecto importante son las nuevas clases de Sort y SortField añadidas para tratar el comportamiento específico para ordenar los datos según la configuración regional. La nueva clase de Sort aprovecha el tratamiento de la configuración regional específica que trae Flash Player 10.1 para comparar strings, parsear números y monedas para ordenar debidamante.

Conceptos importantes

Para entender bien los nuevos formatters debemos tener en cuenta estos conceptos:

Comparación entre MX formatters y Spark formatters
Una diferencia importante es el uso que hacen los Spark formatters del package flash.globalization para mejorar su funcionalidad. Los MX formatters usan el ResourceManager de Flex para acceder a la configuración regional y usar los datos adecuados.
Como consecuencia, los Spark formatters proporcionan un comportamiento adecuado al sistema operativo y tienen acceso a todas la localizaciones que este soporta, aunque este comportamiento puede variar según la plataforma en que se use. Por otro lado, los MX formatters tienen el mismo comportamiento en relación a los SO, pero limitados a los “locales” proporcionados por el developer.
Más información en:

Especificación
Video

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Plan for Deployment Project Server 2010

Noviembre 25th, 2010 - [Enlace local]

Seguramente para muchos será de utilidad saber cuales son los pasos a seguir en la implementación de Microsoft Project Server 2010 y mas alla que componente o actividades tomar en cuenta para toda estructurar una estrategia de EPM, Microsoft proporciona la siguiente información.

http://technet.microsoft.com/en-us/library/ff603997.aspx

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Business Process Maturity Model Specification

Noviembre 25th, 2010 - [Enlace local]

Hablando de madurez de proceso, a continuación el link de donde se puede descargar la especificación V1.0

http://www.omg.org/oceb/coveragemap-fund.htmhttp://www.omg.org/oceb/coveragemap-fund.htm

En la sección de Espacificaciones, muy recomendable el material adicional que en la página se presenta.

» Leer más, comentarios, etc...

Buayacorp

Apache quiere salvar a Google Wave

Noviembre 25th, 2010 - [Enlace local]

Apache Wave

Desde que Google decidió descontinuar a Google Wave, muchas grandes empresas han adoptado su tecnología.

Google además anunció que liberaría a Wave como un proyecto Open Source llamado Wave in a Box.

La buena noticia de hoy es que la fundación Apache ha decidido, o mejor dicho, está pensando adoptar a Wave y lanzarlo como un proyecto para ser instalado en nuestros servidores como Apache Wave.

La mala noticia es que Apache tiene muchos proyectos pendientes y posiblemente nunca veamos la luz de Apache Wave, sin embargo, puede ser que la presión de la comunidad de desarrolladores y usuarios podamos ver pronto en la luz a Apache Wave.

Personalmente al inicio me dio mucha curiosidad usar Wave, lo encontré interesante pero pienso que muchos aun no estamos preparados para usarlo. Pero se ve un buen futuro para este tipo de aplicaciones.

Enlace | Wave Proposal

Vía | Genbeta

» Leer más, comentarios, etc...

Buayacorp

Jimmy Wales, la mejor extensión de Chrome

Noviembre 25th, 2010 - [Enlace local]

La extensión ‘Jimmy Wales’ para Chrome, añade un bonito banner de donación para la Wikipedia en cualquier página.

» Leer más, comentarios, etc...

Buayacorp

Snippet: coloreando código con jQuery

Noviembre 25th, 2010 - [Enlace local]

snippet

Aprovechando el poder y la flexibilidad de jQuery, presentamos Snippet; un plugin que permite de manera fácil y rápida el coloreado de código.

Especial para sitios como el nuestro en que necesitamos mostrar código resaltado y que fácilmente podría reemplazar al GeShi de siempre.

Soporta 15 lenguajes, entre ellos están:

Además podemos escoger entre 39 esquemas de colores y funciona con la mayoría de navegadores modernos.

Enlace | Snippet

» Leer más, comentarios, etc...

Cerebro en la Sombra » Técnico

Valenbisi.mobi como aplicación para Android ya disponible en Android Market

Noviembre 24th, 2010 - [Enlace local]

Ya está disponible la aplicación de Valenbisi.mobi, el proyecto que os presentaba hace unos días, para plataforma Android, puedes descargarlo desde Android Market si tienes un dispositivo de este tipo buscando directamente por el nombre:

AndroidMarket3 Valenbisi.mobi como aplicación para Android ya disponible en Android Market

AndroidMarket1 Valenbisi.mobi como aplicación para Android ya disponible en Android Market

Y una vez instalada la aplicación, esto es lo que veremos:

AndroidMarket2 Valenbisi.mobi como aplicación para Android ya disponible en Android Market

Técnicamente la aplicación no es nada del otro mundo, simplemente actúa como lanzadera hacia Valenbisi.mobi detectando la posición del usuario a través del GPS si el usuario lo permite.

Están pendientes de aprobación las versiónes para Symbian y BlackBerry. Para iPhone tengo un pequeño problema, no tengo un Mac para desarrollarla, así que no se cuando la tendré icon razz Valenbisi.mobi como aplicación para Android ya disponible en Android Market .

» Leer más, comentarios, etc...

Variable not found

Velneo v7: desarrollo de aplicaciones empresariales

Noviembre 23rd, 2010 - [Enlace local]

Los desarrolladores solemos trabajar encerrados en burbujas, compartiendo espacio con las tecnologías y herramientas que usamos a diario. Esto, acompañado de nuestra habitual falta de tiempo libre, impide que podamos conocer otros mundos, tecnologías que están ahí y que pueden aportarnos nuevas formas de afrontar los problemas y ayudarnos a dar soluciones a nuestros clientes, que es de lo que, en definitiva, se trata.



Por esta razón, me ha parecido interesante cuando los amigos de la empresa Velneo me han pedido que realice un análisis de su plataforma de desarrollo de aplicaciones empresariales Velneo v7. Sin duda, una oportunidad para conocer algo totalmente nuevo para mí, lejos del ecosistema Microsoft (bueno, y últimamente Java :-O) en el que habitualmente me muevo.

Velneo v7¿Qué es Velneo v7?

Como el propio fabricante lo define, Velneo V7 es una plataforma completa de desarrollo de aplicaciones empresariales. Incluye todos los elementos necesarios para crear y ejecutar aplicaciones creadas en esta tecnología:

Además, hay otros componentes destinados a tareas más específicas, como el acceso directo desde cliente a orígenes de datos (vDataClient), un sistema para la localización de aplicaciones (vTranslator), un driver ODBC propio, un cliente basado en web, y muchos otros más.



Se trata de una herramienta multiplataforma, pues cuenta con versiones específicamente compiladas para las principales tecnologías, Windows, Linux, Mac, e incluso sistemas móviles con Meego. Por tanto, un único desarrollo será válido sobre dichas infraestructuras.



De la misma forma, no será necesario realizar ningún esfuerzo adicional para conseguir que las aplicaciones sean multiusuario y multiidioma, puesto que la propia plataforma provee de esta capacidad “de serie”, así como la gestión de aspectos farragosos como la transaccionalidad o el control de la concurrencia.



Eso sí, aunque algunos de sus productos son gratuitos, e incluso disponen de Open Apps, un repositorio de aplicaciones, recursos y componentes libres bastante interesante, se trata de un producto comercial, cuyos precios podéis consultar en su sitio web.



Sin embargo, su modelo de comercialización basado en niveles permite comenzar a trabajar de forma inmediata y gratuita sólo con descargar Velneo y registrarse en su web, momento en que seremos considerados como usuarios de Nivel 1. Con este grado podremos crear aplicaciones directamente sobre la nube de la compañía, que resultará más que suficiente para realizar pruebas e introducirnos en este mundo.



A partir de ahí, conforme nuestras necesidades vayan creciendo, podemos ir ascendiendo a otros niveles, 2, 3 y 4, ya de pago, donde se nos brindará la posibilidad de instalar nuestro propio servidor local, agregar licencias de uso, crear instaladores, usar potentes componentes, trabajar en equipo, disponer de soporte técnico, etc.

Desarrollo con Velneo

Desarrollar con la plataforma Velneo es diferente a como acostumbramos con otras tecnologías, primero por la propia arquitectura preconfigurada de la solución: no será necesario tomar decisiones como hacemos con herramientas de desarrollo genéricas.



También la forma de estructurar las aplicaciones es quizás más cercano al desarrollo o personalización de sistemas empresariales (como ERPs de gran calado), en los que se parte de una gran infraestructura existente y hay que amoldarse a conceptos propios de dicho sistema. Probablemente, la vocación del producto hacia el mundo del software de gestión tenga algo que ver en esto.



Otro aspecto interesante es la práctica ausencia de código fuente para crear nuestras aplicaciones. La definición del modelo de datos, formularios, procesos y funciones de nuestros sistemas las realizaremos principalmente de forma visual, es decir, a golpe de ratón.



La principal ventaja de este enfoque es que no es necesario memorizar comandos, instrucciones o particularidades sintácticas del lenguaje, aunque para los que preferimos aporrear teclas puede resultar algo tostón. En cualquier caso, la experiencia de implementar un proceso con condiciones, bucles y otro tipo de construcciones utilizando desplegables resulta, cuanto menos, curiosa.



Para comenzar a desarrollar aplicaciones, como ya he comentado anteriormente, basta con registrarse en el sitio web de Velneo facilitando una dirección de correo electrónico. Tras ello, tendremos acceso al Panel de Control (en el propio sitio web), desde el que podemos crear e iniciar nuestra propia instancia de servidor vServer en la nube:



Panel de control del servidor vServer



Una vez en marcha, ya podemos entrar con la herramienta de administración vAdmin (descargar) a este servidor utilizando la dirección y credenciales de acceso suministradas:



image



En ese primer vistazo ya podremos tomar consciencia de su utilidad: nos permite gestionar usuarios, grupos, soluciones, instancias de proyectos en ejecución, etc. El primer paso, tal y como se nos recomienda desde el Panel de Control, es modificar la clave que hemos utilizado para entrar, por motivos de seguridad.



Ya sólo será necesario volver a esta herramienta de administración cuando hayamos creado nuestro proyecto, para iniciar las instancias ejecutables y asignar a los usuarios con permisos para acceder a ellas, algo más adelante.



Ahora es un buen momento para descargar e instalar la herramienta de desarrollo, vDevelop. Se trata de un entorno visual integrado, desde el que crearemos los proyectos y diseñaremos nuestros modelos de datos relacionales, crearemos los procesos, funciones y elementos de interfaz de nuestras aplicaciones.



El funcionamiento en desarrollo también es cliente-servidor, es decir, el código fuente de nuestra aplicación estará almacenado en un vServer, por lo que el primer paso será conectarnos con él utilizando las direcciones y credenciales conocidas.



image



Las aplicaciones se estructuran en forma de soluciones, que actúan como meros contenedores de proyectos. Básicamente se permiten dos tipos de proyectos:

A la hora de crear una solución podemos utilizar un asistente, el cual nos permitirá crear, en el mismo proceso, los proyectos contenidos en ésta. En el contexto de aplicaciones empresariales, lo habitual será crear una solución con un proyecto de cada tipo.



Una vez creados y salvados los proyectos, ya es posible, desde la herramienta vAdmin, crear e iniciar las instancias ejecutables de ambos proyectos, y dar permiso a los usuarios pertenecientes a un grupo.



Configuración de instancias



Volviendo a vDevelop, ya podríamos comenzar a crear las estructuras de datos y, más adelante, los objetos visuales que permitirán su gestión y consulta, y los procedimientos de lógica necesarios.



imageLa definición del modelo de datos se realiza de forma muy similar a como solemos hacerlo utilizando las herramientas de gestión propias de los SGBD como SQL Server, Oracle o MySQL: crearemos tablas, definiremos sus campos, los índices a utilizar, las relaciones con otras tablas, e incluso definiremos triggers, o acciones a ejecutar ante determinados acontecimientos, como la inserción o eliminación de registros.



Desde el punto de vista de la definición de interfaz de usuario, Velneo v7 nos proporciona todo lo que una aplicación empresarial puede necesitar: visualización en rejilla (grids), formularios de introducción de datos, búsquedas, controles, etc. En el aspecto visual, el diseño de interfaces es bastante similar a cualquier herramienta RAD como Visual Studio, y consiste principalmente en arrastrar y soltar y definir propiedades de los objetos.



Para la inclusión de lógica personalizada podemos usar objetos como “Proceso” o “Función”, que permiten su implementación de forma visual (¿ein?). Es decir, conceptualmente seguiremos haciendo lo mismo, pero en la práctica, en lugar de teclear directamente código, iremos construyendo el cuerpo de nuestros procedimientos a base de añadir instrucciones (“líneas”):



image



En resumen, Velneo v7 es una plataforma ya veterana en este mundillo y que puede aportar gran productividad en el desarrollo de aplicaciones empresariales. Al integrar en la propia plataforma todas las herramientas, se entiende que la estabilidad de las soluciones será muy alta. También resulta muy atractiva su capacidad para escalar basándose en el uso de la nube, así como determinadas características infraestructurales como el hecho de ser multiplataforma o el soporte multiidioma.



Como nota negativa, al menos desde la óptica de alguien acostumbrado a desarrollar “a pelo”, el cambio de filosofía propuesto requiere un esfuerzo considerable para tomar las riendas, al menos en un principio.



Tampoco, obviamente, resulta una herramienta muy válida para la creación de software genérico alejado del mundo empresarial, aunque ya sabemos que no es ese el objetivo del producto, muy enfocado al ámbito empresarial.



Podéis encontrar más información en el sitio web del producto, http://www.velneo.es/.



Publicado en: Variable not found.



» Leer más, comentarios, etc...

Picando Código

Rails for Zombies

Noviembre 23rd, 2010 - [Enlace local]

Rails for Zombies

Rails for Zombies

En RubyConf Uruguay hubo un taller con Rails for Zombies. Si bien en el momento hubo un pequeño problema técnico con la red, pudimos ver las presentaciones del tema, y parte de la apicación una vez que se descongestionó un poco el wifi.

Se trata de una aplicación web para aprender a programar en Rails. En el momento estaban usando una versión beta y todavía no estaba disponible. Pero ya se liberó, y pueden ingresar e inscribirse para completar los “Labs”.

Es un tutorial bastante interactivo, nos muestran videos por Gregg Pollack junto a presentaciones donde se explican algunos conceptos básicos de Rails.

Luego hay que completar los Labs en la aplicación mismo, aplicando los conocimientos que fuimos adquiriendo en las presentaciones. Los ejercicios son bastante rápidos, y la aplicación funciona muy bien.

Por ahora hay 5 laboratorios, y son básicos como para gente que está empezando en el tema. De todas formas es muy recomendable. Apoyo el uso de Zombies, Piratas, Extraterrestres y Dinosaurios en tutoriales y libros de programación.

Visiten:

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

Picando Código

Este viernes: Libros con descuentos

Noviembre 23rd, 2010 - [Enlace local]

Este viernes se celebra el “Black Friday” en USA, un día donde los norteamericanos atacan masivamente los centros comerciales por la tradición de descontar precios en sus artículos.

¡Podemos aprovecharlo con descuentos en libros de programación!

The Pragmatic Bookshelf va a tener un descuento de 40% en todo (Libros, PDFs y screencasts) y hay muchos libros interesantes (The Pragmatic Programmer [justo este lo excluyeron del descuento], .Net, Java, Ruby, Clojure, Android, Scala, HTML5, JavaScript, etc.)

Para hacer su compra con el 40%, hay que ingresar el código “turkey” al hacer checkout.
Condiciones:
* the coupon is valid from 00:01PST to 23:59PST on Friday, November 26th. (PST is 8 hours behind GMT)
* the discount cannot be applied to orders placed prior to or after these times
* the coupon cannot be combined with any other coupon
* the coupon can only be used for products we have on sale on Friday (that is, we can't hold it over until some unreleased title becomes available)
* the coupon is valid for the entire contents of an order (with some exceptions, including "The Pragmatic Programmer", "Programming Ruby 1.9", and Beta-On-Paper titles) but does not affect shipping costs
* you have to enter the coupon code turkey and then select your payment mechanism to apply the discount to your order

También si les interesa, este libro:

Programming Ruby 1.9

Programming Ruby 1.9

Programming Ruby 1.9 (3rd edition): The Pragmatic Programmers’ Guide
http://www.pragprog.com/titles/ruby3/programming-ruby-1-9
Está a U$S 10 (tiempo limitado) por motivo de su décimo aniversario.

Es la última edición del libro, actualizado a Ruby 1.9.2. Con unos compañeros de trabajo aprovechamos la oferta y nos pedimos unas copias.

Otro libro interesante si quieren iniciarse en Rails es “Agile Web Development With Rails“, que se encuentra en su cuarta edición (beta actualmente), y es muy recomendado por la gente de Rails.

Si saben de algún otra tienda de libros con descuentos, agradezco lo comenten en este post. Tengo entendido que Amazon va haciendo descuentos en artículos seleccionados, no sé si aplica a todos sus ítems durante el viernes.

En fin, ¡espero que les sirva el dato!

Comparte: Print del.icio.us Facebook Google Bookmarks BarraPunto Bitacoras.com Tumblr Twitter

» Leer más, comentarios, etc...

MadeInFlex

Flex Hero: nuevos componentes para Desktop(I): Spark DataGrid

Noviembre 23rd, 2010 - [Enlace local]

Uno de los componentes más esperados ha sido el Spark DataGrid. Es un componente complejo, bajo desarrollo y que en este post veremos sus particularidades más interesantes.

Introducción

Le diferencian dos características principales de su homólogo Halo:

La implementación de la funcionalidad del Spark DataGrid se divide en dos niveles: El primer nivel de funcionalidad se incluye en esta preview release de Hero; el segundo nivel vendrá en las siguientes releases.
Expliquemos en que se centra cada uno de estos niveles:

Especificaciones

El Spark DataGrid quiere describir el mismo concepto que su predecesor: un componente que muestra una lista de datos y que los visualiza en una tabla o grid, es decir, divide el espacio de visualización en filas y columnas. Cada uno de estos datos forman una fila del componente.
A partir de ahora veremos las diferencias con el mx Datagrid.

Cada celda puede contener un elemento visual, desde un simple elemento gráfico, hasta formas más complejas.

El Spark DataGrid nos permite la selección individual o multiple de filas o celdas. También nos permite la edición de dichos elementos.

El Spark DataGrid soporta grandes cantidades de datos: podemos hacer smooth scrolling a través de miles de filas ( es decir miles de elementos de datos ) y miles de columnas. Aunque la altura de cada fila puede variar, inicialmente se muestra con la altura del typical data item.

El componente Spark DataGrid es skineable. Mediante el skin situaremos los elementos dentro del grid, personalizaremos tanto las cabeceras como el scroller y podremos configurar los elementos gráficos que mostrarán nuestros datos. Un aspecto importante es que la skin puede determinar un item renderer por defecto, que se usará para renderizar el contenido de cada celda, para las colmnas no especifica ninguno.

Las diferencias más notables entre el Spark DataGrid y su homólogo en la versión MX son estas:

Ejemplo de uso

Definición del componente

El componente Spark DataGrid es en realidad un contenedor con un propósito especial: definir el skin, mediante las skin parts, del grid y de la barra de la cabecera. Debemos tener claro que es el componente Grid quien muestra las filas y columnas, controla la selección y la edición. La Skin del Spark DataGrid se responsabiliza de organizar estos elementos y el Scroller.
En cuanto a estructura, Spark DataGrid es similar al Spark List: delega la responsabilidad de mostrar los elementos a un componente no skinneable como es el DataGroup. El Spark DataGrid maneja los eventos de teclado y mouse que suceden sobre el Grid y la barra de cabeceras de columnas.
El Spark DataGrid tiene como dataProvider un IList que contiene “data items” o “items”, son dos maneras de llamarlos. Cada aspecto de los ítems se representa en cada columna. La intersección de fila y columna define una celda, indexada mediante las propiedades rowIndex y columnIndex. Las columnas, además también definen el item renderer que se usará para la celda. Las columnas también se definen con un IList, donde cada columna debe ser una instancia de elementos visuales concretos relacionados con el Grid.
El DataGrid no se dibuja solo con los item renderers de las columnas, algunos elementos visuals se dibujan por separado. Esto es lo que lo diferencia del component List, en la que son sus item renderers los responsables de determinar todos los aspectos visuals. Para entenderlo mejor pongamos un ejemplo: cuando definimos el modo de seleccion del grid a nivel de filas, no es práctico que cada item renderer ( representación de la celda), intervenga en la representación visual de la fila. En este caso, esta representación se determina mediante las propiedades del DataGroup, como “selectionIndicator” o “caretIndicator”. El Grid crea, recicla y dibuja los IVisualElements como sea necesario.
A continuación vemos las diferentes partes que componen el Spark DataGrid:
datagridParts

Custom Item Renderers

El itemRenderer de una columna es un IVisualElement que implementa la interface IGridItemRenderer. Los Item renderers no requieren el uso del data binding par configurar sus elementos visuales. En lugar de esto, puede ser más eficiente sobreescribir el metodo prepare() de la clase GridItemRenderer, que se lanza después de configurar el ítem renderer y antes de que dibuje. Aquí tenemos un ejemplo:

El parámetro hasBeenRecycled del método prepare(), le informa de si el renderer acaba de ser creado o se está reutilizando. A veces es necesario hacer renderers que se usen una sola vez, asignando recycle=false.

Documentos de especificación

Las especificaciones del Spark DataGrid están divididas en diferentes secciones para que así sea más comprensible.Estas secciones

Más información

videos en el Adobe TV

Spark DataGrid 1
Spark DataGrid 2

Especificaciones

Spark DataGrid
Accesibilidad del Spark DataGrid

» Leer más, comentarios, etc...

Variable not found

Enlaces interesantes 22

Noviembre 21st, 2010 - [Enlace local]

Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el domingo, 14 de noviembre de 2010 hasta el domingo, 21 de noviembre de 2010. Espero que te resulten interesantes. :-)

Y no olvides que puedes seguir esta información en vivo y en directo desde Variable not found en Facebook, o a través de Twitter.



Publicado en: Variable not found



» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti)

Sieve en Javascript (optimizado)

Noviembre 21st, 2010 - [Enlace local]

Mi artículo Sieve en Javascript acababa actualizado descartando las mejoras en Closure Compiler Service con el modo de optimización avanzado.

Sin embargo, algo se ha debido actualizar en el servicio de Google, ya que el código que ahora se obtiene es perfectamente funcional, y como era previsible, entorno a un 10% más rápido que el original.

Navegador Plataforma Tiempo de ejecución (ms) Tiempo de ejecución optimizado (ms)
Chromium 8.0.550 (62074) x86 6.682 5.843
Firefox 4.0b8 (Gecko/20100731) x86 3.667 3.323
Firefox 4.0b8 (Gecko/20100731) x64 3.176 3.103
Internet Explorer 8.0.7600.16385 x86 ~200.000 ~200.000
Internet Explorer 8.0.7600.16385 x86 ~200.000 ~200.000
Opera 10.70.9053 x86 8.284 7.571
Safari 5.0.2 (7533.18.5) x86 3.310 3.111


Puedes revisar el código, y ejecutarlo tu mismo aquí (1 Kb. en formato HTML).

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

Sieve en Javascript (optimizado)

Noviembre 21st, 2010 - [Enlace local]

Mi artículo Sieve en Javascript acababa actualizado descartando las mejoras en Closure Compiler Service con el modo de optimización avanzado.

Sin embargo, algo se ha debido actualizar en el servicio de Google, ya que el código que ahora se obtiene es perfectamente funcional, y como era previsible, entorno a un 10% más rápido que el original.

NavegadorPlataformaTiempo de ejecución (ms)Tiempo de ejecución optimizado (ms)
Chromium 8.0.550 (62074)x866.6825.843
Firefox 4.0b8 (Gecko/20100731)x863.6673.323
Firefox 4.0b8 (Gecko/20100731)x643.1763.103
Internet Explorer 8.0.7600.16385x86~200.000~200.000
Internet Explorer 8.0.7600.16385x86~200.000~200.000
Opera 10.70.9053x868.2847.571
Safari 5.0.2 (7533.18.5)x863.3103.111

Puedes revisar el código, y ejecutarlo tu mismo aquí (1 Kb. en formato HTML).

Artículos relacionados

Sieve en Javascript
Velocidad de Javascript en Opera
Rendimiento Javascript vs VBScript

» Leer más, comentarios, etc...

Monocaffe

Grails Enum

Noviembre 20th, 2010 - [Enlace local]

¿Soporta Groovy enums?



Sí, como con cualquier objeto de Java, podemos acceder a ellos desde Groovy. Hacer que estos funcionen con Grails ya es un poco más complicado ya que tenemos que tener en cuenta el comportamiento de Hibernate al encontrarse un enum.



Después de un poco de trial & error, finalmente logre una solución que se ajusta a lo que quería.



public enum BookType{

EBOOK("eBook"),

PAPERBACK("PaperBack"),

HARD("Hard Cover"),

AUDIO("Audio Book")



String type



BookType(String type){

this.type = type

}



static list() {

[EBOOK, PAPERBACK, HARD, AUDIO]

}

}



Luego utilizamos este enum en nuestro modelo:



class Book{

String name

BookType type



static constraints = {

type(nullable:false)

}

}



Lo mejor de esto es el comportamiento de Hibernate, que crea la tabla book_type con la columna type y enlaza los valores del enum con nuestro modelo. A continuación, podemos utilizar los valores de nuestro enum al crear un libro:



<g:select name="bookType" id="bookType"

from="${BookType.list()}"

value="${fieldValue(bean: bookInstance, field: 'bookType')}"

optionValue="type"/>

» Leer más, comentarios, etc...

Información legal y técnica