Picando Código
Disponible revista Linux+ Agosto 2010: ¡Libre descarga ya!
Julio 31st, 2010 - [Enlace local]
Está disponible la edición de agosto de la revista Linux+ que ya pueden descargar libremente.
El tema de portada es Computación Híbrida: Co-diseño Hardware-Software:
El término computación híbrida no es demasiado afortunado. En el ámbito del diseño hardware-software (HW/SW) parece una obviedad. Está claro que los sistemas son una combinación de ambos componentes HW/SW donde el primero actúa como un soporte material programable o reconfigurable y el segundo define los procesos intangibles que gestionarán determinada información o datos para conseguir equis resultados…
Otros artículos de esta edición:
- OpenVz – Alternativa perfecta para virtualización de servidores
- Computación Híbrida – Co-diseño Hardware-Software
- Descubriendo Linux – ¿Qué debes saber si no sabes nada?
- Software Libre en la PYME – Ejercicio de creación de oferta y demanda
- gPXE – Arranque de sistemas operativos en red con Software Libre
- LocuLinux 2.0 -!Libera tu CiberCafé!
Descarguen en el siguiente enlace:
Linux+ DVD Agosto 2010
» Leer más, comentarios, etc...
Picando Código
Curso de Introducción a Scrum en Montevideo, Uruguay
Julio 30th, 2010 - [Enlace local]
Replico por este blog la información publicada en Aplicando Scrum. Se está por dictar un curso de Introducción a Scrum con énfasis en la tarea del Scrum Master.
El curso va a tener un costo más accesible que la certificación CSM, una razón de peso para muchas personas que no han podido hacer la certificación.
Va a contar con Gabriel Ledesma, docente de ORT, candidato al certificado internacional de Scrum Professional y practicante de Scrum profesionalmente desde el año 2008.
También estará a cargo de Ariel Ber quien ha asistido en las certificaciones de Alan Cyment en varios países, y se ha dedicado a brindar capacitación a empresas en Argentina.
Les recomiendo el curso, anótense, y únanse a la comunidad ágil en Uruguay.
Ver más información del curso:
Curso de introducción a Scrum en Montevideo, Uruguay
» Leer más, comentarios, etc...
Sergio Guerrero | Desarrollo web y Tiendas virtuales
Curso de Magento para el verano
Julio 26th, 2010 - [Enlace local]

El equipo de Magento presenta una oferta veraniega para los que quieran aprender a gestionar e incluso "desarrollar" sus Tiendas Virtuales con Magento Commerce. Todos los martes y jueves de cada semana hasta el día 26 de agosto, se realizará un seminario on-line de introducción a Magento donde se tratarán temas de gestión de contenidos, iniciación a Magento Mobile, iniciación a Magento Connect, plantillas, configuraciones, etc.
El calendario oficial de seminarios es el siguiente:
- Iniciación a la plataforma Magento – Jueves 22 de Julio 2010
- Configuración del Catálogo en Magento – Martes 27 de Julio 2010
- Gestión de contenidos con Magento (CMS, páginas dinámicas, bloques estáticos…) – Jueves 29 de Julio 2010
- Usando MagentoConnect – Martes 3 de Agosto 2010
- Introducción a Magento Mobile – Jueves 5 de Agosto 2010
- Plantillas y diseño – Martes 10 de Agosto 2010
- Preparándose para vender – Jueves 12 de Agosto 2010
- Iniciación a la plataforma Magento – Martes 17 de Agosto 2010
- Introducción a Magento Mobile – Jueves 19 de Agosto 2010
- Marketing y promociones – Martes 24 de Agosto 2010
- Desarrollando para Magento – Jueves 26 de Agosto 2010
Semana del 19 de Julio
Iniciación a la plataforma Magento – Jueves 22 de Julio 2010
Seminario para saber que pasos debemos dar una vez finalizada la instalación de la plataforma en nuestro servidor. Primeros pasos con la configuración, creación de categorías y productos, cambios sencillos del diseño, desactivación de módulos, intercambio entre plantillas, creación de múltiples tiendas con Magento.
- Descargar PPT de Iniciación a Magento (English)
- Vídeo del Seminario – No disponible
Semana del 26 de Julio
Configuración del Catálogo en Magento – Martes 27 de Julio 2010
Magento soporta diferentes tipos de productos, que pueden ser adaptados para vender casi cualquier tipo de artículo, software, servicio… El seminario de configuración del catálogo tratará sobre como definir y crear nuestro catálogo de categorías y productos, creación de atributos e incluso tratará sobre las importaciones y exportaciones de productos.
- Descargar PPT de Configuración del Catálogo de Magento (English) – No disponible
- Vídeo del Seminario – No disponible
Gestión de contenidos con Magento (CMS, páginas dinámicas, bloques estáticos…) – Jueves 29 de Julio 2010
Seminario de introducción a la gestión de páginas de contenido mediante el CMS de Magento. Se abordarán tema relacionados con las páginas de contenido, los bloques estáticos que podemos incluir en cualquier zona de nuestra tienda e incluso se hablará sobre el uso de Widgets.
- Descargar PPT de Gestión de contenidos con Magento (English) – No disponible
- Vídeo del Seminario – No disponible
Semana del 2 de Agosto
Usando MagentoConnect – Martes 3 de Agosto 2010
MagentoConnect es el sistema que permite a los usuarios de la comunidad de Magento compartir sus extensiones de código abierto o vender sus extensiones comerciales. Existen infinidad de extensiones para los diferentes ámbitos: elementos de diseño (slides de productos, pestañas personalizadas, diseños de menú, zoom para las fotografías…), gestores de bloques y contenidos, gestores de afiliados, integraciones con redes sociales, módulos de pago, envíos, traducciones… Este seminario le guiará en el proceso de gestión de los módulos mediante MagentoConnect, con el que podrá personalizar su tienda sin tener que desarrollar sus propios módulos.
- Descargar PPT de Usando MagentoConnect (English) – No disponible
- Vídeo del Seminario – No disponible
Introducción a Magento Mobile – Jueves 5 de Agosto 2010
La nueva plataforma Magento Mobile le permite crear, de forma sencilla, aplicaciones para móviles utilizando los elementos de su tienda como son el catálogo, las páginas de contenidos y los ajustes comerciales establecidos en su tienda. El seminario de introducción a Magento Mobile le guiará en el proceso de instalación de la extensión y creación de una primera aplicación móvil.
- Descargar PPT de Introducción a Magento Mobile (English) – No disponible
- Vídeo del Seminario – No disponible
Semana del 9 de Agosto
Plantillas y diseño – Martes 10 de Agosto 2010
Las plantillas son uno de los aspectos en los que más destaca Magento. Su potencia y flexibilidad a la hora de crear plantillas personalizadas. Magento acepta personalización de plantillas a nivel de vistas (un diseño por idioma), a nivel de categoría (un diseño por categoría), a nivel de producto, diseños personalizados en fechas concretas, inserción de bloques estáticos, variables de sistema, widgets con listados de productos, categorías destacadas, slides e infinidad de otras opciones.
- Descargar PPT de Plantillas y diseño (English) – No disponible
- Vídeo del Seminario – No disponible
Preparándose para vender – Jueves 12 de Agosto 2010
Este seminario trata sobre cómo preparar a su tienda virtual para empezar a vender los productos. Definición de los impuestos, métodos de envío y métodos de pago. También cubre algunos aspectos sobre las configuraciones necesarias antes de iniciar cualquier proceso de venta, como la personalización de los correos electrónicos de confirmación de pedidos…
- Descargar PPT de Preparándose para vender (English) – No disponible
- Vídeo del Seminario – No disponible
Semana del 16 de Agosto
Iniciación a la plataforma Magento – Martes 17 de Julio 2010
Seminario para saber que pasos debemos dar una vez finalizada la instalación de la plataforma en nuestro servidor. Primeros pasos con la configuración, creación de categorías y productos, cambios sencillos del diseño, desactivación de módulos, intercambio entre plantillas, creación de múltiples tiendas con Magento.
- Descargar PPT de Iniciación a Magento (English)
- Vídeo del Seminario – No disponible
Introducción a Magento Mobile – Jueves 19 de Agosto 2010
La nueva plataforma Magento Mobile le permite crear, de forma sencilla, aplicaciones para móviles utilizando los elementos de su tienda como son el catálogo, las páginas de contenidos y los ajustes comerciales establecidos en su tienda. El seminario de introducción a Magento Mobile le guiará en el proceso de instalación de la extensión y creación de una primera aplicación móvil.
- Descargar PPT de Introducción a Magento Mobile (English) – No disponible
- Vídeo del Seminario – No disponible
Semana del 23 de Agosto
Marketing y promociones – Martes 24 de Agosto 2010
Este seminario muestra algunas de las herramientas de Magento para trabajar los aspectos relacionados con nuestras campañas de Marketing y Promociones, incluido el SEO, promociones y ofertas especiales (con y sin cupones de descuento), utilización de los boletines de noticias y Google Base.
- Descargar PPT de Marketing y promociones (English)
- Vídeo del Seminario – No disponible
Desarrollando para Magento – Jueves 26 de Agosto 2010
Magento es un Framework PHP para la creación de Tiendas Virtuales y puede ser utilizado para el desarrollo de aplicaciones web dinámicas que aprovechen las funcionalidades de Magento para el comercio electrónico. De forma muy rápida se verán aspectos relacionados con el desarrollo de módulos en Magento y como realizar una correcta sobreescritura de lo elementos del núcleo. "Seguramente mostrarán el típico desarrollo de un módulo de pago o envío".
- Descargar PPT de Desarrollo para Magento (English) – No disponible
- Vídeo del Seminario – No disponible
Espero que podáis disfrutar de esta gran oferta
» Leer más, comentarios, etc...
Picando Código
RubyConf Uruguay 2010
Julio 26th, 2010 - [Enlace local]
¡Se viene la primera RubyConf Uruguay!
Los invitamos a asistir a RubyConf Uruguay, a realizarse el viernes 29 y sábado 30 de octubre de 2010 en Montevideo.
Este va a ser un evento orientado a todos los informáticos de la región que quieran aprender o actualizarse en tecnologías como Ruby, Ruby on Rails, Sinatra, Testing, SCRUM, JavaScript, SQL vs NoSQL, etc.
Nos gustaría además invitarlos a que nos envíen sus propuestas para presentar algún tema que les apasione (las instrucciones están en el sitio web).
Por más información sobre el evento visiten RubyConf y sígannos por twitter.
RubyOnRails es una de las tantas tecnologías interesantes que tengo pendientes de usar algún día. Me quedé con muchas ganas de asistir al curso intensivo de RubyOnRails que se dió en Montevideo el año pasado, pero ya no había cupo :S
Parece que esta va a ser otra buena oportunidad para acercarse al framework, además de aprender más sobre otras tecnologías. ¡Vayan agendando para finales de octubre!
Comparte:
» Leer más, comentarios, etc...
Variable not found
De vacaciones
Julio 26th, 2010 - [Enlace local]
Hace unos días he iniciado las vacaciones, y con ellas el descenso de actividad tradicional en Variable not found (bueno, y en esta ocasión también podréis notarlo en Facebook y Twitter), por lo que dejaré de daros la lata durante algún tiempecito.
Como en otras ocasiones, los destinos elegidos para descansar son El Portil, una tranquila playa en la provincia de Huelva, y Sanlúcar de Barrameda, una maravillosa localidad costera de Cádiz.
Aunque seguiré atento al mail y no voy a dejar de trabajar durante este tiempo (ya os comentaré el nuevo proyecto que me traigo entre manos), sí que relajaré el tiempo de dedicación con objeto de recargar las pilas para el próximo año que, según se está planteando, será de lo más emocionante.
Dejo cerrado los comentarios anónimos para evitar que los spammers conviertan esto en un festival de enlaces a sitios inapropiados. Ah, no, no hace falta… ya los había cerrado hace algunas semanas precisamente por eso, así que nada. ;-P
Nos vemos a la vuelta.
Felices vacaciones, amigos ;-)
Publicado en: http://www.variablenotfound.com/.
» Leer más, comentarios, etc...
Picando Código
De trabajo en trabajo
Julio 26th, 2010 - [Enlace local]
Cada vez que hay algún tipo de cambio importante en lo laboral o académico, el blog sufre de días de semi-abandono y escasez de posts. Esta vez, se debe entre otras cuestiones, a un cambio en lo laboral. Creo que el tiempo (o la falta de) no es el factor determinante a la hora de no postear. Mas bien, en estas situaciones, como que uno tiene la cabeza llena de cosas que lo distraen de tareas como escribir para el blog.
El miercoles fue mi último día en la oficina donde venía trabajando desde diciembre con Java EE y Flex/AIR. Además desde entonces he estado haciendo algunos trabajos freelance en paralelo, básicamente desarrollos web, maquetaciones, etc.
Escribí respecto a ciertos cambios laborales y geográficos en ese entonces, e hice un balance bastante positivo un mes después.
Dejo atrás un equipo humano excelente, al igual que en trabajos anteriores, valoro mucho las nuevas relaciones humanas ya que nuevamente me voy con nuevos amigos de una empresa.
Desde el punto de vista frío y profesional, se agregan jugadores importantes a la red profesional personal (que no solo de LinkedIn se forma
), más experiencia y nuevos conocimientos.
En general, cuando nos vamos de un trabajo a otro lo hacemos porque creemos que vamos a crecer, asumiendo el riesgo de cambiar.
Probablemente siga atento el proyecto en el que trabajaba, además de mantener el contacto con los amigos. Creo que lo que más voy a extrañar van a ser las partidas de Armagetron… (veremos de organizar alguna Lan Party cada tanto)
Hoy lunes empieza una nueva etapa, ya veremos qué se cuenta…
Dejo en el post una foto con la captura de pantalla de mi querida laptop, que me ha acompañado en este trabajo desde hace muchos meses. Siempre quise usar esa imagen de fondo, pero no tenía la excusa hasta que comencé a trabajar con Flex… el compilador es leeeento…
Comparte:
» Leer más, comentarios, etc...
Arragonán
Jobsket.com, Grails en un proyecto real
Julio 25th, 2010 - [Enlace local]
Dejo por aquí mi presentación del sábado.
A ver si en estos días saco algo de tiempo y escribo sobre que tal estuvo la Lan Party
» Leer más, comentarios, etc...
MadeInFlex
Model–View–Controller y algunas de sus variantes
Julio 24th, 2010 - [Enlace local]
Flex es un framework pensado para poder usar otros frameworks. En este artículo nos centraremos en la base de muchos frameworks, como Cairngorm o PureMVC, esta característica es el patrón Model-View-Controller (MVC). Analizaremos este patrón y veremos otras aproximaciones para compararlas y adjuntaré proyectos de ejemplo para entender el concepto que representa cada uno.
Model–View–Controller (MVC)
Como ya sabemos, es un patrón arquitectural muy usado en la ingeniería del software. Este patrón nos separa el modelos de dato, de la capa de presentación y de la parte de control.

El modelo controla la información y notifica a sus observadores de cambios en sus datos. Representa el dominio de datos. La vista representa gráficamente el modelo para que el usuario pueda interactuar él. El controlador recibe peticiones de la vista y responde actualizando el modelo de datos. En consecuencia, debido a que la vista observa cambios en el modelo de datos, actualiza sus componentes en función de éstos.
La finalidad de este patrón es conseguir bajo acoplamiento en las aplicaciones. Lo logra desacoplando los modelos de las vistas, reduciendo la complejidad en el diseño arquitectural e incrementando la flexbilidad y mantenimiento del código.
La aplicación de ejemplo que usaremos es esta:

A continuación os dejo el proyecto que la implementa según MVC.
Model-View-Presenter (MVP)

Este patrón se considera una derivación del MVC. El patrón MVP está centrado en la interfaz de usuario y pensado para facilitar el unit testing y mejorar la separación conceptos en la presentación de la lógica. Proporciona una implementación limipia del patrón Observer entre el modelo y la vista.
El modelo es una interface que define los datos que serán mostrados en la vista. La vista es una interface que muestra los datos del modelo y lanza llamadas a la capa presenter para que actúe con los datos. El presenter recupera los datos del modelo y los persiste y hacia la vista.
Normalmente, la vista instancia su objecto presenter con el que se relacionará y le proporciona una referencia suya.
El grado de lógica permitida en las vistas varia en función de la implementación que usemos: podemos hacer que la vista sea totalmente pasiva, alegando todas las operaciones al presenter. Otras versiones del MVP permiten más autonomía a la vista.
Si nos centramos en un punto de vista de capas, el presenter se consideraría la capa de aplicación entre el modelo y la vista.
El creador del patrón MVP, Martin Fowler, decidió separarlo en dos patrones de presentación que ya hemos tratado en madeinflex, son el supervising presenter y el passive view.
MVC vs MVP
Los une la idea de que el modelo alberga los datos y la vista los representa. Tanto el controller como el presenter se encargan de coordinar la aplicación y es en estas clases donde está la diferencia: el Presenter tiene más responsabilidades, maneja los datos del modelo y trata las propiedades de la vista que recibirá como parámetro.
Aquí está el proyecto implementado con MVP.
Model–View–Adapter (MVA)
Como en los dos patrones anteriores, quiere separar el modelo de datos de la vista para que los cambios en la vista no afecten el manejo de datos y que éstos puedan ser tratados sin cambiar la interfaz de usuario.
MVA y MVC intentan solucionar este problema con dos aproximaciones diferentes:
- MVC mantiene un estructura triangular entre el modelo, la vista y el controller, donde las tres entidades serían los vértices del triángulo y las aristas las vías de comunicación entre éstas.
- MVA lo soluciona de manera diferente, lo hace mediante una estructura lineal en la cual en una punta está la vista, en la otra el modelo y en el centro el adapter o mediating controller, pero se evita la comunicación directa entre el modelo y la vista.
Así pués la vista está totalmente desacoplada del modelo de datos y estas entidades sólo se pueden comunicar mediante el adapter, en otras palabras, sólo el adapter tiene conocimiento del modelo y de la vista.
Con esta separación de comportamientos conseguimos que una amplia variedad de vistas puedan acceder indirectamente al modelo de datos mediante el mismo adapter. Las vistas también se olvidan del modelo de datos, ya que es el adapter quien las comunica con éste.
Esto también nos permite poder usar diferentes adapters para cada par modelo / vista. Un ejemplo podría ser la aplicación de una entidad bancaria, para cada una de sus delegaciones, puede ser que con los mismos datos y la misma vista se tengan que maipular los datos de maneras diferentes, para eso podríamos tener diferentes adapters sin tener que modificar ni la vista ni el modelo de datos.
MVA también es conocido como mediating-controller. Hay quien cree que como base sigue la misma idea que MVP, aunque hay gurús del software que defienden diferencias entre ellos.
Aquí os dejo un enlace de un proyecto de ejemplo para que podais analizarlo vosotros mismos.
Conclusión
En este artículo hemos recordado el patrón MVC y visto dos enfoques que derivan directamente de él, para poder comparar la manera de abordar la relación modelo-vista-controlador. Espero que haya sido de vuestro interés.
» Leer más, comentarios, etc...
Picando Código
Este sábado: miniJAM! artístico por Ceibal Jam
Julio 23rd, 2010 - [Enlace local]
La revolución generada por OLPC, y el Plan Ceibal en Uruguay, sigue avanzando. Vean la agenda para este Jam, y encontrarán un proyecto para transformar la ceibalita en un robot!
Este sábado se realizará el segundo miniJAM! artístico. Una instancia para explorar las posibilidades de las XO en el campo de las artes visuales y la robótica.
Programa:
14:00 Bienvenida (Enrique Aguerre, Gabriel Eirea)
14:15 Charla: OLPC, desde Austria hasta Nepal (Christoph Derndorfer). Plan Ceibal es el proyecto más grande de OLPC que hay en este momento. Pero tambien existe una comunidad global de OLPC y Sugar, y no solo en los paises donde existen proyectos activos. Grupos como OLPC Alemanía, OLPC Austria y OLPC Francia estan muy activos en contribuir a los esfuerzos globales. Esta charla va a presentar unos de los proyectos que se están realizando en Austria. Además vamos a ver a Nepal donde la ONG OLE Nepal ha estado trabajando en crear contenido interactivo para sus escuelas que usan los XO desde el 2007.
15:00 Charla/taller: Butia, transformando la XO en un robot móvil (Gonzalo Tejera y equipo de proyecto Butiá). A partir de este proyecto todo joven podrá, obteniendo elementos robóticos de bajo costo, transformar la computadora XO en un robot móvil autónomo. Este proyecto pretende acercar a los jóvenes de todo el país a la robótica, trabajando en aspectos mecánicos simples y poniendo énfasis en la programación. Se utilizan los lenguajes incluidos en la computadora XO (pe: Python y Tortugarte) para dotar de “inteligencia” al robot Butia. El proyecto Butia está financiado por la ANII y la Unidad de Extensión de la Facultad de Ingeniería de la Universidad de la República.
16:00 Taller: Animación artística Stop Motion en la XO (Victoria Barreiro y equipo de Múltiplo XO). Se realizará un taller para explorar a la XO como herramienta para la creación artística en el lenguaje de la animación: específicamente Stop Motion y Pixelation. Se utilizará captura de imágen y scratch.
18:30 Se realizará mosaico con las realizaciones visuales obtenidas en las XO.
Comparte:
» Leer más, comentarios, etc...
avemundi, blog de un micro-isv » Desarrollo de software
enlaces 24.julio.2010
Julio 23rd, 2010 - [Enlace local]
Varios enlaces aparecidos últimamente en sitios web de periódicos, hablando de programadores:
- En EE.UU. el programador es la estrella, no como en España una entrevista a un programador español que trabaja en Microsoft. A resaltar lo que dice sobre la valoración de los programadores en la empresa.
- Programadores S.A., un interesante artículo sobre programadores independientes.
- Consejos para vivir de las apps, una serie de consejos para poder vivir de las aplicaciones propias que complementa al artículo anterior.
Otro artículo que me gustó mucho fue ‘El problema del inglés’ que apareció en la edición impresa de El País y que no está accesible en linea. Abordaba la problemática del aprendizaje del idioma desde varias vertientes. Uno de ellos, y que me llamó mucho la atención, es que en España es el único país europeo donde se doblan las peliculas y series habladas en inglés, y esto nos pone en desventaja frente a otros paises que no las doblan. Esto último supone una inmersión en el idioma que da buenos resultados y familiariza a la persona que lo realiza con el idioma. Así que es una buena idea ver películas o series en versión original o con subtítulos.
Hace mucho que pienso que la falta de dominio del inglés es el mayor handicap que puede tener un programador, y que debemos hacer un esfuerzo para conseguir fluidez en la lectura y comprensión del mismo.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
90 FPS en HTML 5
Julio 21st, 2010 - [Enlace local]
Después de JS ZX LOAD "" SCREEN$, he dado una vuelta de hoja más, esta vez para poder comprobar el rendimiento de blitting en HTML 5.
Para ello he partido del código en 800 FPS en un PC, y lo he adaptado en menos de 15 minutos.
Los resultados, un equipo que daba con el binario para Windows x64 1300 FPS, consigue con la versión de HTML 5 bajo Chrome 6 unos 90 FPS (75 FPS en Opera 10.6 y 60 FPS en Firefox 3.7 x64), es decir, un rendimiento bastante similar al de la versión para DOS de 16 bits.
Como de costumbre, el código lo tienes aquí (2 Kb. en formato HTML).
» Leer más, comentarios, etc...
Fetishcode
JUnit, Ant y el error JBO-33003.
Julio 21st, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
Arragonán
Nos vemos en la Tenerife Lan Party 2010
Julio 19th, 2010 - [Enlace local]
El sábado 24 a las 12:00 de la mañana, daré una charla en la Tenerife Lan Party 2010: Jobsket.com, Grails en un proyecto real.
La charla será una explicación de qué es Grails y cómo lo usamos en Jobsket, una startup pequeñita con unos recursos muuuucho menores que otras empresas, y como nos ayuda a ser una de las compañías más innovadoras tecnológicamente en el sector de empleo en internet.

También hay otras actividades muy interesantes para desarrolladores en el programa. Aunque yo voy a destacar las relacionadas con la gente de Agile-Canarias, el viernes por la mañana a las 10:00 Yeray Darias y Fran Reyes impartirán un taller de Integración continua, y seguidamente a las 12:00 Carlos Blé organiza un Code Retreat.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
SQLite compilado para DOS (386)
Julio 17th, 2010 - [Enlace local]
No me di cuenta, pero el ejecutable que publiqué en SQLite compilado para DOS, tenía un problema. No era realmente un bug, ni nada por el estilo, sino un problema de concepto.
El asunto está en que Visual C++ 2008, genera instrucciones de Pentium y superiores a la hora de compilar, que en general no sería un problema si hablamos de Win32, pero lo es absolutamente si hablamos de DOS, pues recordemos que DOS, es capaz de funcionar incluso en equipos basados en procesadores 8088.
Para ello, he actualizado los fuentes del artículo original para SQLite 3.6.23.1 (en vez de la 3.6.21), y los he compilado con OpenWatcom 1.9 RC5, esta vez generando código para 386, sin FPU, y optimizando para tamaño en vez de para velocidad. El resultado ha sido un ejecutable de 391 Kb. en comparación con los 524 Kb. del original.
Luego lo he comprimido con UPX 3.05, porque en DOS, el espacio importa, y el binario ha quedado reducido a 170 Kb. Lamentablemente la RTL de Watcom para Windows, no solamente tiene dependencias con KRNL32, sino también con USER32 y GDI32, por lo que las he tenido que añadir del correspondiente paquete de HX-DOS Extender 2.17, aunque a pesar de ello, sigue siendo una versión mucho más compacta y eficiente que la anterior.
Cuanta con las últimas novedades aplicadas sobre la rama 3.6.23.1, y es de este modo, uno de los SGBD más ligeros, y con menos requisitos hardware que haya disponibles. Mi compilación requiriendo solamente un procesador 386, 2 Mb. de memoria RAM, y el sistema operativo DOS 5.0, es ideal para usuarios de paises en vías de desarrollo que quieran practicar con SQL. Además, como una vez extraído solamente necesita 370 Kb. de almacenamiento, esto quiere decir que en discos de 3,5 pulgadas y doble densidad o en discos de 5,25 pulgadas de alta densidad, queda suficiente espacio libre para poder crear bases de datos no muy complicadas, y sus correspondientes logs.
Puedes descargar los binarios y los fuentes aquí (1,2 Mb. en formato ZIP).
» Leer más, comentarios, etc...
avemundi, blog de un micro-isv » Desarrollo de software
abandonar la zona de confort
Julio 16th, 2010 - [Enlace local]
Durante los últimos 15 años mi zona de confort ha estado delimitada por el uso de sistemas operativos Windows y desarrollo de programas con xHarbour y FWH. Con este par de lenguajes he sido capaz de hacer programación de escritorio en entornos Windows y me he sentido muy cómodo con ellos. Han servido para mi propósito al crear primero jsnsoftware y luego alanit, que era vender software de acuerdo a la modalidad de distribución conocida como shareware. La aventura ha sido muy satisfactoria a nivel personal, pues me ha permitido aprender muchas cosas relativas a hacer y vender software empaquetado. Ha sido una de las cosas que he hecho en mi vida de la que estoy más orgulloso.
Hace tres años que compré mi primer Mac. Desde entonces que tengo el gusanillo de programar en OS X, pero siempre han surgido cosas que me han hecho aplazar el aprendizaje. Quizás la más importante haya sido que Windows era mi primer sistema operativo como usuario. Cuando tenía que arrancar el ordenador para hacer alguna cosa, casi siempre arrancaba Windows. Cuando arrancada Mac era para hacer alguna tarea específica que no podía hacer con Windows. Sin embargo, en el último año las tornas han cambiado. Ahora Mac OS X es mi primer sistema operativo, con el que arranco habitualmente el ordenador, y sólo arranco Windows cuando tengo que hacer alguna tarea específica que no puedo hacer con Mac OS X. Sin embargo el cambio no es completo, me falta precisamente lo que más me gusta hacer con un ordenador: programar.
Así que he decidido retomar el empeño de aprender Cocoa y hacer software para Mac OS X. Esto supone definitivamente abandonar mi zona de confort y entrar en un terreno totalmente desconocido para mi. Aunque en verano los niños mandan, quiero dedicarme a leer el libro de la vespa cuando tenga un ratito, teniendo presente una frase del prólogo del libro que me ha encantado: Antes de continuar, te aseguro que no eres tonto y que simplemente algunas cosas son difíciles. Armado con esta simple afirmación y la cabeza descansada, estás listo para aprender Cocoa.
» Leer más, comentarios, etc...
PROGRAMANDO EN .NET
El final de un largo viaje: MCPD
Julio 16th, 2010 - [Enlace local]
6 exámenes después ya soy MCPD Enterprise Application Developer 3.5 :)
» Leer más, comentarios, etc...
MadeInFlex
Adobe + Sourceforge = Open@Adobe
Julio 15th, 2010 - [Enlace local]
Adobe ha anunciado la expansión de sus actividades open source y mediante la colaboración con la empresa Sourceforge, han creado Open@Adobe; es la site definitiva de las actividades open source de Adobe. Alberga proyectos en los que Adobe participa y hosting de código open source.

Además nos permitirá encontrar información de ayuda y estar a la última en cuanto a la comunidad Adobe open source.
Adobe realiza diferentes operaciones en su actividad open source, como trabajar directamente con contribuyentes directos, liberar el código de productos o crear librerías para la comunidad.
Open@Adobe actualmente contiene unos 267.000 proyectos open source y recibe muchísimas descargas diarias.
Aquí os dejo el link.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
PHP 5.2+ lento al concatenar
Julio 15th, 2010 - [Enlace local]
Tras actualizar a PHP 5.3, he podido comprobar que ciertas aplicaciones funcionaban mucho más lentas. Una vez descartado que los problemas no estaban en el paso de ISAPI a FastCGI, he dado con la clave, que es la issue #46198.
Parece ser que si concatemanos asignado la cadena original, en la forma como:
$sCadena = $sCadena . 'Valor';
El resultado es tremendamente ineficiente. Según mis pruebas entre 3 y 30 veces más lento que haciéndolo así:
$sCadena .= 'Valor';
El argumento que aducen es que en el primer caso, la cadena debe ser copiada, mientras que en el segundo no. Personalmente, y aunque sigo siendo bastante entusiasta de PHP, lo encuentro intolerable.
La explicación dada es consistente si el comportamiento siempre hubiera sido así, pero es que concatenando como en el primer ejemplo sobre PHP 5.1, el rendimiento es igualmente bueno. Puedo comprender, que se hayan aplicado optimizaciones sobre la segunda variante, que lo hagan mucho más eficiente en nuevas versiones de PHP, pero no puedo enterder porque han cambiado una implementación a peor.
Como colofón, ciertas deficiencias en la 5.3, desde la ya mencionada ausencia de ISAPI, que según he visto era más eficiente que FastCGI, o los problemas con IPv6, son sin duda un paso para atrás.
Precisamente una de las claves de PHP era su rendimiento, que permitió imponerse en su día a Coldfusion y ASP (amén de su facilidad, capacidad de conexión a base de datos y portabilidad), pero lamentablemente, se ha ido quedando atrás respecto a la competencia.
Si a todo lo visto, le añadimos los múltiples retrasos en PHP 6, nos daremos cuenta de los problemas internos que debe de estar sufriendo el desarrollo.
» Leer más, comentarios, etc...
Arragonán
grails.sh, trabaja fácilmente con distintas versiones de Grails
Julio 15th, 2010 - [Enlace local]
Leyendo la lista de correo de grails, me encuentro un pequeño script, que al menos a mi me parece muy útil para los que a veces andamos cambiando entre varias versiones de grails: grails.sh.
- En el directorio de un proyecto ejecuta la versión del mismo proyecto.
- Desde otros directorios se ejecutará la versión de grails que tengamos por defecto en GRAILS_HOME.
- Y para utilizar una versión concreta, simplemente se lo debemos pasar como parámetro.
Sencillo y cumple su función. Al parecer funciona perfectamente en Mac, Linux y Windows con cygwin. Y para los despistados como yo, recordad darle permisos de ejecución al script
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
JS ZX LOAD “” SCREEN$
Julio 14th, 2010 - [Enlace local]
Después del primer experimento que publiqué usando HTML, JS Noise, ahora le llega el turno a algo un poquito más avanzado, y que he titulado como en laguísimo, y poco original nombre de JS ZX LOAD "" SCREEN$.
Esta vez de lo que se trata, es usando canvas de HTML 5, simular las cargas de pantallas gráficas de nuestro queridísimo Sinclair ZX Spectrum.
La demostración en custión imita el borde de carga, el dibujo progresivo de la imagen, así como la carga final de sus atributos. Le he añadido al principio una recreación de cómo se cargaban este tipo de pantallas. El efecto es bastante resultón después de todo, a pesar que no se incluye por ejemplo el efecto de la carga de la cabecera del archivo, y que naturalmente no se está emulando la memoria de video del Spectrum, de manera que tanto las lineas, como los atributos, son una pura recreación.
La pantalla de texto, con la introducción de comandos, es muy mejorable utilizando la tipografía del Spectrum, pero no he querido complicarlo con fuentes embedidas.
El código ha pasado algunas rondas de limpieza, simplificación y optimización, de modo que es bastante eficiente, a la vez que debería resultar sencillo de comprender.
Lo puedes ver y descargar aquí (5 Kb. en formato HTML).
» Leer más, comentarios, etc...
Variable not found
¡Más de mil suscriptores!
Julio 14th, 2010 - [Enlace local]
Variable not found es un blog cuyos lectores son en su mayoría esporádicos y proceden de motores de búsqueda: aterrizan, miran lo que les interesa, se van, y la mayoría de ellos no vuelven. Obviamente estos usuarios son bienvenidos y alegra saber que cada día los posts de VNF llegan a más gente.
Sin embargo, el dato que siempre he valorado más para hacerme una idea de la aceptación de un blog es el número de suscriptores a los feeds, puesto que implican una respuesta activa del lector hacia los contenidos. Se trata de personas que, voluntariamente, deciden en un momento u otro añadirte como fuente a su lector favorito, mostrando así de forma explícita su interés por tu trabajo.
Y aunque sé que Feedburner no es demasiado preciso, que este dato suele oscilar bastante y que probablemente en unas horas ya no será así, me váis a permitir que lo celebre un poco...
¡Hemos superado los mil suscriptores a los feeds en Variable not found! :-))
¡Mil gracias a todos!
Publicado en: Variable not found
» Leer más, comentarios, etc...
carlosrovira.com
MIF ONSITE IV
Julio 14th, 2010 - [Enlace local]
Ya es oficial. En Agosto tendremos en Made In Flex un nuevo MIF ONSITE (el IV) donde planteamos darle una nueva vuelta de tuerca para que sea mejor que los anteriores. En esta ocasión treremos a la creme de la creme de los evangelistas de Adobe Europeos ofreciendo las últimas novedades.

Recuerda que la cita es el 16 de Agosto en Barcelona y que es importante registrase cuanto antes para asegurar plaza.
» Leer más, comentarios, etc...
Variable not found
¿Visual Studio 2008 se te cierra de forma brusca al intentar añadir controles a la caja de herramientas?
Julio 13th, 2010 - [Enlace local]
Hacía tiempo que Visual Studio 2008 me estaba dando problemas al intentar añadir controles a la caja de herramientas. Concretamente, tras pulsar el botón derecho del ratón sobre esta zona y seleccionar la opción “Elegir elementos”, el entorno se cerraba bruscamente sin dar ningún tipo de explicación.
Aunque hasta ahora he podido convivir pacíficamente con este problema (básicamente, no añadiendo controles al Toolbox ;-)), hace unos días decidí dedicar un rato a solucionarlo.
En primer lugar, dado que el casque no mostraba ningún mensaje de error previo, he acudido al visor de eventos de Windows, encontrándome con el siguiente mensaje:
.NET Runtime version 2.0.50727.3603 - Error grave de motor de ejecución (7A036050) (80131506)
Afortunadamente, es una pista suficiente para dar con la solución. Googleando un poco los códigos de error 7A036050 y 80131506, he dado con el hotfix KB963676, que es posible descargar desde Microsoft Connect.Una vez instalado el software apropiado para nuestra plataforma (x86, x64…) y reiniciado el equipo, todo ha vuelto a la normalidad.
Y es que a veces bastan unos minutos para eliminar esos pequeños y molestos inconvenientes que nos hacen menos productivos. Lo que es la procrastinación ;-)
Publicado en: Variable not found
Twitteado en: twitter.com/jmaguilar
Facebookeado en: facebook.com/variablenotfound
» Leer más, comentarios, etc...
MadeInFlex
Utilizando Robotlegs para el desarrollo de aplicaciones Flex
Julio 13th, 2010 - [Enlace local]
Robotlegs es una microarquitectura escrita completamente en AS3 para el desarrollo de aplicaciones Flex, Flash y Air, cuyo principal objetivo es interconectar las diferentes partes de la aplicación y proveer un mecanismo para que se comuniquen, en este caso utiliza el sistema de mensajería nativo de Flex.
El framework viene con una implementación de referencia basada en el patrón MVC+S que sirve de guía para estructurar la aplicación, que incluye las clases Mediator, Command y Actor (denominadas los actores del framework), y aunque no es obligatorio su uso constituye un punto de comienzo. La inyección de dependencias la realiza a través de la biblioteca SwiftSuspenders, aunque deja abierta la posibilidad de usar otras, los puntos de inyección de dependencias se indican declarativamente a través de metadata.
Principio de funcionamiento
La clase Context es el corazón del framework, sirve como un bus centralizado de eventos y permite que las implementaciones de las diferentes partes de la arquitectura se comuniquen entre sí. Es el mecanismo de arranque que inicializa la inyección de dependencias y otras utilidades del framework. El contexto define ámbito, los actores del framework viven dentro de un contexto y se comunican con otros que viven dentro del mismo ámbito de ese contexto. En una aplicación pueden existir varios contextos, y éstos pueden comunicarse entre sí, lo cual es muy útil para el desarrollo de aplicaciones modulares que requieren comunicación entre módulos.
La capa controladora se representa por la clase Command. Los comandos son objetos de corta vida, sin estado, que representan acciones individuales a ejecutar por la aplicación, comúnmente como respuesta a interacciones con el usuario pero su uso no está limitado a esto. Estos objetos pueden enviar eventos que pueden ser recibidos por mediadores para ejecutar acciones sobre las vistas, o que pueden desencadenar la ejecución de otros comandos.
La capa de la vista es representada por la clase Mediator. Las clases que heredan de Mediator se utilizan para controlar la interacción de los actores del framework con los componentes visuales. Los mediadores escuchan los eventos despachados por los actores del framework y en consecuencia modifican el estado del componente visual que representan, registran escuchadores de los eventos generados por el componente visual que representan y despachan además eventos como respuesta éstos. Esto permite poner la lógica del componente visual en el mediador y desacoplarlo al máximo de la aplicación, permitiendo su reutilización y modificación con el menor costo.
Para implementar la capa del modelo y de los servicios el framework ofrece la clase Actor. Cualquier clase que herede de Actor tiene la funcionalidad de comunicarse con el resto de los actores del framework.
El funcionamiento a través de un ejemplo
Para ejemplificar el funcionamiento de Robotlegs desarrollaremos un pequeño ejemplo en el que tendremos una vista compuesta por un botón y una tabla, al oprimir el botón recuperaremos un conjunto de datos en formato XML a través de una solicitud HTTP y los mostraremos en la tabla. Utilizaremos Flash Builder 4 y Robotlegs 1.1.1. Aunque el ejemplo es muy simple nos servirá para explorar cómo interactúan las diferentes partes de una aplicación que utilice Robotlegs.
Comenzaremos descargando el archivo robotlegs-framework-v1.1.1.zip de http://www.robotlegs.org y creando un proyecto Flex con las siguientes características:
Una vez creado el proyecto copiamos en la carpeta libs de proyecto el archivo “robotlegs-framework-v1.1.1.swc”, que se encuentra en la carpeta bin del archivo previamente descargado; y creamos la siguiente estructura en el proyecto:
A continuación procederemos a crear el único componente visual de la aplicación, al cual llamaremos CountryListView y se creará en la carpeta views del proyecto:
El código queda así:
Cuando se oprime el botón se despachará un evento que será atrapado por el mediador de este componente, el cual como respuesta despachará otro evento que desencadenará la ejecución de un comando.
Como vemos, este componente visual está totalmente desacoplado de la aplicación (no tiene enlaces –bindings- al modelo, etc.) y puede ser reutilizado y modificado sin incurrir en cambios en el código. Por supuesto que en un escenario real el componente seguramente será mucho más complejo, pero la idea es la misma.
El mediador será una clase que herede de la clase Mediator del framework y cuya responsabilidad será comunicarse con el resto de los actores de la aplicación e interactuar con el componente visual para actualizar su estado.
En el método “onRegister”, el mediador registra los escuchadores tanto para los eventos despachados por el componente visual como para los eventos despachados por el resto de los actores del framework. El metadata “[Inject]” indica que el framework suministrará a las variables “view” y “applicationModel” referencias válidas de objetos de tipo “CountryListView” y “CountryListModel” respectivamente.
Cuando el mediador atrapa el evento despachado por el componente visual (LOAD_DATA), despacha el evento LOAD_COUNTRY_DATA, lo cual provoca que se ejecute el método “execute” del comando asociado a ese evento.
El comando, representado por la clase “LoadCountryData”, hereda de la clase Command del framework y es responsable de obtener los datos del archivo XML. Para este ejemplo se creó un servicio HTTP (CountryDataService) utilizando la funcionalidad de Data Centric Development de Flash Builder. El framework inyecta una referencia válida del servicio y el modelo cuando se crea un objeto de la clase “LoadCountryData”.
Cuando el servicio retorna (en el método “resultHandler”) se actualiza la lista de países en el modelo, lo cual provoca que se despache el evento COUNTRY_DATA_LOADED, el cual es atrapado por el mediador y este, en respuesta, actualiza el componente visual.
El modelo está representado en la clase “CountryListModel”, que almacena los datos de la aplicación, ésta hereda de la clase Actor del framework, la cual añade la funcionalidad básica para comunicarse con el resto de los actores.
Nótese que cuando se modifica la variable “countryList”, que almacena la lista de países, se despacha un evento (COUNTRY_DATA_LOADED), que es atrapado por el mediador, el cual en respuesta, actualiza el componente visual.
En este ejemplo, por razones de simplicidad, los eventos utilizados son de la clase “Event” de Flex, pero en un escenario real, lo más conveniente sería crear eventos personalizados que llevaran una carga útil de interés para la aplicación.
Finalmente el actor responsable de orquestar todo este trabajo es el contexto, representado por la clase “CountryListContext”, que hereda de la clase “Context” del framework.
En el método “startup”, invocado cuando el dueño de este contexto se añade al stage, se realiza el trabajo de enlazar las diferentes partes de la aplicación.
En este caso, primeramente se indica al mecanismo de inyección que cree un singleton de las clases “CountryListModel” (el modelo) y “CountryDataService” (el servicio), cuyas referencias serán inyectadas en las clases “LoadCountryData” y “CountryListMediator” según sea necesario.
Luego se indica que para el evento LOAD_COUNTRY_DATA se registre el comando LoadCountryData. Esto hará que cuando algún actor del framework (en este ejemplo el mediador) despache un evento de ese tipo, se creará un objeto de tipo “LoadCountryData”, se inyectarán todas sus dependencias y se invocará el método execute.
Por último se indica que se registre como mediador del componente visual CountryListView la clase CountryListMediator. Esto provocará que cuando se añada el componente visual al stage, se creará una instancia de la clase “CountryListMediator”, se inyectarán sus dependencias y se invocará el método “onRegister”.
Finalmente se crea el contexto en la clase Application:
Cuando ejecutamos la aplicación se obtiene lo siguiente:
El archivo XML con los datos se encuentra en la carpeta “data” del proyecto, el que se puede descargar de aquí.
Conclusiones
Robotlegs es un framework muy simple y compacto que ofrece una implementación de referencia del patrón MVC+S, nos permite crear aplicaciones Flex con bajo nivel de acoplamiento, componentes reutilizables y con una estructura que en proyectos grandes resulta de gran utilidad, nos permite aprovechar los beneficios de la Inversión de Control en nuestros proyectos.
» Leer más, comentarios, etc...
Variable not found
Enlaces interesantes 12
Julio 12th, 2010 - [Enlace local]
Estos son los enlaces publicados en Variable not found en Facebook desde el lunes, 05 de julio de 2010 hasta el domingo, 12 de julio de 2010. Espero que te resulten interesantes. :-)
- Un buen post de Eduard Tomàs mostrando cómo crear un value provider para obtener valores de las cookies en ASP.NET MVC.
Fecha: 09/07/2010 - Matthew M. Osborn presenta el helper WebImage. De momento para ASP.NET Web Pages, pero seguro que pronto en MVC 3. :-)
Fecha: 09/07/2010 - Dave Ward muestra un curioso problema provocado por el uso de jQuery sobre marcado inválido, y la forma de dar con él.
Fecha: 09/07/2010 - Respuesta a 10 buenas preguntas sobre tecnologías de datos de Microsoft.
Fecha: 09/07/2010 - Algunos gestores de contenidos populares para .NET.
Fecha: 09/07/2010 - Uso de la herramienta de comparación de bases de datos de VS2010 Ultimate.
Fecha: 09/07/2010 - Trabajando con zips de forma sencilla, by Bruno Capuano.
Fecha: 09/07/2010 - Gonzalo Pérez C. muestra cómo utilizar Webmatrix con un ejemplo, paso a paso.
Fecha: 08/07/2010 - Eduard Tomàs: [Básico] Qué son y cómo se usan los interfaces. En C#, pero igualmente válido para otros lenguajes p.e. VB.
Fecha: 08/07/2010 - José Miguel Torres continúa destripando colecciones en NET. Ahora, System.Collections.ObjectModel en profundidad.
Fecha: 08/07/2010 - Webmatrix, Razor, ASP.NET Web Pages, MVC... ¿cómo encaja todo esto?
Fecha: 07/07/2010 - El nuevo Razor ya se puede ver en funcionamiento en Webmatrix.
Fecha: 06/07/2010
Publicado en: Variable not found







