Blogia

Desarrollo de Software y formación en Zaragoza

Math-race, real time game node.js / socket.io / knockout.js

Math-race, real time game node.js / socket.io / knockout.js

En este vídeo se puede ver la baja latencia que es posible conseguir en una aplicación web usando socket.io y node.js. 

http://www.youtube.com/watch?v=LXbYSJfLUW8

El ejemplo es un sencillo juego en tiempo real cuyo código está disponible aquí:

https://github.com/iloire/math-race

Let's node.js

Acabo de lanzar un blog dedicado a node.js y express.js, donde iré contando cosas que considero interesantes del desarrollo en esta plataforma de alto rendimiento.

También he colocado ejemplos de código:

http://www.letsnode.com/

Página oficinal de node.js: http://www.nodejs.org/

Curso de HTML5 / CSS3 en Mayo en Zaragoza

Curso de HTML5 / CSS3 en Mayo en Zaragoza

Curso de HTML5 / CSS3 en Mayo en Zaragoza

http://www.vitaminasdev.com/Cursos/3/html5-y-css3

  • Los nuevos tags de HTML5: qué podemos empezar a utilizar ya (header, nav, article, section, video, audio…) y cómo hacerlo compatible con navegadores antiguos.
  • Los formularios con HTML5 (los nuevos type, validación nativa…).  
  • Las API de HTML5: un vistazo rápido a las API de Javascript que harán más fácil el desarrollo de aplicaciones web (canvas, web workers, web sockets, cache…). Este punto es meramente introductorio y no se profundizará más en él por cuestiones de tiempo.
  • Soporte actual de CSS3 en los distintos navegadores y en qué situaciones podemos permitirnos usar CSS3 aunque no esté ampliamente soportado.
  • Las nuevas herramientas de decoración: border-radius, gradients, shadows, opacity, multiple-backgrounds…  
  • La tipografía a la carta: @font-face, sus virtudes, sus problemas y herramientas relacionadas, como Google Font Directory o Typekit.
  • Los nuevos selectores y sus posibilidades.
  • Animaciones y transformaciones con CSS3.
  • CSS columns, media queries y las nuevas herramientas de layout.

WebForms vs ASP.NET MVC

Comentarios recientes (Enero 2011) de programadores que acaban de descubrir MVC:

"En Webforms costaba mucho hacer las cosas. Ahora en ASP.NET MVC hacemos todo mucho más rápido y el resultado es mucho mejorVíctor Bude. Analista programador en Nervia Consultores.

 "Utilizando MVC las responsabilidades entre interfaz, lógica de negocios y de control quedan claramente separadas. Con lo que facilita la realización de pruebas unitarias de los componentes y se construyen sistemas más eficientes." Adriana Aparicio. Analista programadora en Nervia Consultores.

"Con MVC todo queda mas usable, mas simple, no hay que acabar metiendo controles dentro de controles con mas controles, si no que todo esta algo mas organizado, además que para comenzar los avances se ven mucho más rápido, lo cual anima al equipo un montón." Eduardo Izquierdo. Analista programador en Nervia Consultores.

Vitaminas de formación en Zaragoza: Fundamentos ASP.NET MVC

Vitaminas de formación en Zaragoza: Fundamentos ASP.NET MVC

Estoy preparando unos talleres de un día, muy prácticos y dirigidos, orientados a programadores que quieren mejorar la calidad del código y su capacidad productiva, haciendo más y mejor en menos tiempo.


El primero de esos talleres es "Fundamentos de ASP.NET MVC". Contenido:

  • Arquitectura de una solución ASP.NET MVC
  • El patrón MVC
  • Routing
  • Controllers
  • Views, typed Views
  • View helpers
  • Model (usando Entity Framework)
  • Acceso a datos
  • Validaciones usando Data Annotations
  • Edición de modelo
  • Gestión y registro de errores, instrumentación. Elmah
  • Testing, unit testing con MVC

Si estás interesado en estos talleres, puedes rellenar este formulario, que servirá para dimensionar la demanda y priorizar los cursos (el envío del formulario no conlleva ningún tipo de compromiso):

Vitaminas de formación en Zaragoza. Formulario de interés

Más información en breve, en www.iloire.com

El proyecto DNDZGZ visto desde fuera (desafío abredatos)

El proyecto DNDZGZ visto desde fuera (desafío abredatos)

Se ha escrito bastante ya sobre el desafío abredatos y sobre el equipo maño que ha participado: dndzgz (Dónde en Zaragoza)

A mi me gustaría entrar en la vertiente técnica (manteniendo el post "todos los públicos") y hacerlo desde fuera, ya que Daniel y Alberto nos han contado muchas cosas desde dentro.

1) Primeras impresiones, introducción

Estaba muy interesado en conocer el código asociado a un proyecto que se concibe y ejecuta en 48 horas por un equipo en el que apenas se conocen sus miembros.

Detrás de este proyecto había buenos profesionales, pero sinceramente, esperaba encontrar eventualmente "spaghetti code", "hacks" buscando atajos rápidos para solucionar problemas complejos (recordemos: sólo 48 horas - un exigente "deadline" que cumplir, sueño acumulado, muchas horas de programación seguidas, nulo trabajo en equipo anterior), etc..

Mi sorpresa fue agradable al encontrar en el repositorio de código público  (el código está disponible para descarga y revisión)

  • Una elección de plataforma tecnológica innovadora y muy adecuada para el desafío (bueno, esto ya lo conocía "a priori")
  • Una elección de lenguaje de servidor muy acertada: Python
  • Una ejecución realmente concisa, elegante y brillante

2) Apuesta tecnológica: AppEngine

AppEngine, de Google, es una plataforma de desarrollo que permite al programador abstraerse del trabajo asociado a poner un proyecto web en marcha (instalación, configuración de base de datos, etc), y del asociado a su crecimiento (Google te garantiza escalabilidad de forma transparente) y centrarse en el desarrollo (por ahora limitado a los lenguajes Java y Python).

AppEngine gestiona de manera transparente la escalabilidad del proyecto en un entorno distribuido. Perfecto para un desafío de 48 horas, donde no puedes perder el tiempo con la configuración de los servidores ni con la puesta en marcha!!

3) Python, lenguaje de programación utilizado en el "backend" (el servidor)

Usando AppEngine puedes elegir dos lenguajes de programación: Java y Python. Dani y Alberto son "javeros", así que os podéis imaginar el lenguaje que usaron.... pues.. eligieron Python!!.

Eso dice mucho y muy bien de ellos. Python es un lenguaje muy conciso y potente en el que "cunde mucho la faena" (se hace mucho en pocas líneas de código) y es excelente para obtención y tratamiento de cadenas de texto y recursos remotos accesibles por HTTP (URLS).

Con Python, obtener una URL de Bizi y obtener el conjunto de datos deseado mediante "scrapping" se convierte en una tarea de unas pocas líneas de código. Ejemplo extraído de Dndzgz (perdonad que el formato haga que no encaje correctamente en el blog):

class FecthBizi(BaseHandler): 
def get(self):
response = urlfetch.fetch(’http://www.bizizaragoza.com/localizaciones/station_map.php’).content
self.response.headers[’Content-Type’] = ’text/plain’
response = response.replace(’r’, ’ ’)
response = response.replace(’n’, ’ ’)
response = response.replace(’t’, ’ ’)
regex = ’GLatLng((-?d+.d+),(-?d+.d+).+?idStation="+(d+)+"&addressnew=([a-zA-Z0-9]+)’
matchobjects = re.finditer(regex, response)
result = []
import base64
for match in matchobjects:
s = match.group(4)
result.append({"name": base64.decodestring(s + ’=’ * (4 - len(s) % 4)),
"lat": float(match.group(1)),
"lon": float(match.group(2)),
"id": match.group(3)})

self.create_service("bizi", result)

4) Un impecable trabajo de cliente: jQTouch, jQuery, HTML5, CSS

Una vez que los datos son recuperados mediante el acceso a las diferentes URLS y limpiados ("scrapping"), estos datos están ya preparados para ser "digeridos" por la aplicación ya en el entorno local. 

Daniel y Alberto usaron jQTouch para crear el interfaz de usuario de manera que de la impresión de que la aplicación se comporta como una "aplicación nativa" (es decir, desarrollada específicamente para cada terminal), aunque no haya sido así (por cierto, en este momento me consta que se está trabajando en versiones nativas para Android y iPhone)

A destacar el uso de una base de datos local (localStorage) utilizando la potencia de HTML 5 para guardar los favoritos. Más información sobre "Web SQL Database" en el blog de Daniel Latorre: http://www.danilat.com/weblog/2010/05/18/sql-con-javascript-web-sql-database/

Notas finales

Creo que dndzgz, tanto por su abordaje innovador (arquitectura distribuida autogestionada - App Engine, la "nube" de Google), como por su brillante ejecución (código conciso, eficiente, elegante), es un proyecto a ser utilizado como ejemplo en talleres de desarrollo de aplicaciones  basadas en consumo de servicios, geoposicionadas y orientadas a dispositivos móviles.

Es brillante lo que este equipo ha conseguido en tan poco tiempo y con tan sólo unos pocos Kbytes de código.

Este proyecto, prueba una afirmación que defiendo profundamente:

"In our field, the top 1 percent of the work force can easily be 10 times as productive as the average developer. The best developers invent new products, figure out shortcuts that save months of work, and, when there are no shortcuts, plow through coding tasks like a monster truck at a tea party" Joel Spolsky - Artículo completo

Por supuesto, aunque quede fuera de este humilde mini-análisis técnico quiero destacar también el  brillante trabajo de Diseño y Marketing de Mamen y Lucas (respectivamente).

Referencias

Programador cabreado

Programador cabreado

Has sentido alguna vez que tu trabajo como programador es ingrato, o te genera insatisfacción?

Te sientes con frecuencia "cabreado"?

Aquí tienes un lugar para desahogarte :)

http://www.programadorcabreado.com/

(la imagen ha sido tomada de flickr, licencia CC. Original aquí)

DND ZGZ - Desafío Abredatos

DND ZGZ - Desafío Abredatos

DND ZGZ... No, no es el balbuceo de un bebé. es una iniciativa (dónde en Zaragoza) llevada a cabo por 4 Zaragozanos para afrontar el desafío abredatos.

El objetivo: la liberación en formato abierto de los datos públicos, para aprovechamiento de los mismos en beneficio de los ciudadanos. En tan solo 48 horas, los equipos participantes en el desafío han podido hacer cosas como la aplicación multiplataforma del equipo @dndzgz, que permite localizar puntos Wifi, paradas de Bizi y autobuses.

Los pobres han tenido que obtener los datos que alimentan las aplicaciones diseccionando a mano el  código HTML de las páginas webs correspondientes (desperdicio de tiempo y talento). Si estos datos hubiesen estado disponibles de forma pública en un formato más fácilmente manipulable se podría haber conseguido mucho más, con mucho menos esfuerzo.

Ese es el objetivo.

Podéis conocer más del equipo, el proyecto y la aplicación aquí

http://www.dndzgz.com/web/index.html 

Almacenamiento de contraseñas seguro, sincronizado y multiplataforma

Almacenamiento de contraseñas seguro, sincronizado y multiplataforma

Mi estrategia para guardar la contraseñas, mantenerlas sincronizadas entre equipos independientemente del SO.

Almacenamiento de contraseñas seguro, sincronizado y multiplataforma

Grupo desarrolladores de Android en Zaragoza

Grupo desarrolladores de Android en Zaragoza

Recientemente se ha creado un grupo de desarrolladores interesados en la plataforma Android. Si estás interesado, puedes inscribirte aquí:

http://groups.google.com/group/zaragoza-android

Trabajar con repositorio SVN sin servidor dedicado

Trabajar con repositorio SVN sin servidor dedicado

Si trabajas como freelance o en equipos muy pequeños, te propongo que mantengas el uso del repositorio SVN (con su capacidad de fusión, sincronización, comparación, histórico, etc), pero aprovechando la potencia de DropBox, para que no necesites tener un servidor SVN conectado las 24 horas por día.

http://dotneat.wordpress.com/2010/03/03/trabajar-con-repositorio-svn-sin-servidor-dedicado-usando-dropbox/

Jobsket en BBVA Open Talent

Jobsket en BBVA Open Talent

Probablemente conozcas Jobsket, la startup "made in Aragón" que está revolucionando los conceptos tradicionales de búsqueda de empleo.

Subir tu CV son 10 segundos. Subes el PDF desde tu disco duro y Jobsket lo clasifica y valora, extrayendo los términos relativos en forma de tags o palabras clave.

Te recomiendo que lo pruebas, este portal dará que hablar!

Si lo crees interesante puedes votar su proyecto en Open Talent:

http://www.bbvaopentalent.com/jobsket/

 

Uso de máquinas virtuales (VMware, Virtual PC) para programación y desarrollo de software

Windows XP Running On Linux (by paradoxperfect via Flickr))

En los cursos oficiales de certificación de Microsoft es patrón común el uso de máquinas virtuales, donde el alumno tiene un entorno de trabajo ya correctamente configurado, con las herramientas, bases de datos, componentes y servicios del sistema operativo perfectamente funcionando. 

Esto nos evita a los organizadores del curso innumerables horas muertas teniendo que instalar paquetes de software, lidiar con problemas de sistemas operativos, particularidades de cada máquina, virus, drivers, etc.

También soy partidario del uso de máquinas virtuales para programar aplicaciones de software. Cierto que estamos sufriendo una merma de rendimiento, pero con el precio que el hardware tiene estos días este problema puede resolverse aumentando la potencia de tu máquina (sobre todo un HD rápido y mucha RAM!), con una inversión modesta.

Las ventajas de desarrollar software en una máquina virtual son varias:

  • Permite tener un ambiente de trabajo permanente y garantizado, con el sistema operativo adecuado en cada caso, independientemente del sistema host que corre el equipo. Ej: Puedes tener un equipo usando Windows Vista pero desarrollar en Windows XP, o Ubuntu, etc..
  • Fácilmente puedes volver a versiones anteriores de tu máquina virtual (usando Snapshots o copias de tus discos duros virtuales), caso tu máquina virtual se corrompa, sufras virus, dañes la configuración, instales algo que no deberías, etc.. 
  • Puedes utilizar la misma máquina virtual de desarrollo en cualquier máquina física (Ej: desarrollar en el equipo de escritorio, continuar con entorno idéntico en el portátil, etc).
  • La ley de Murphy dice que tu máquina de desarrollo quemará el disco duro principal justo unos días antes de una entrega. Usando máquinas virtuales, simplemente necesitas cambiar el disco duro e instalar un sistema operativo básico en la máquina, el resto de software y componentes lo tienes en la máquina virtual, que copias en 10 minutos.
  • En grupos de trabajo grandes, permite disponer de una máquina de desarrollo a punto y configurada en pocos minutos (nuevos miembros en el equipo, por ejemplo)
  • Permite simular entornos de red heterogéneos, en tu propia máquina (Ej: trabajar con una base de datos MySQL en Linux, mientras conectas en otra máquina virtual con Microsoft Visual Studio sobre Windows), todo en la misma máquina física.

Unos consejos basados en mi experiencia:

  • Utilizar dos discos duros independientes, uno para sistema y el otro para los archivos de la máquina virtual.
  • Mantened los discos duros siempre correctamente defragmentados (el HD virtual también!)
  • Merece la pena comprar un disco duro rápido, de 10k o 15k revoluciones por minuto, tipo SAS, raptor o similar. Os garantizo que el aumento de rendimiento al programar amortiza la diferencia de precio en pocas semanas o meses.
  • Usar una cantidad suficiente de RAM. A ser posible usar un sistema operativo que permita gestionar más de 4Gb de RAM, como Windows Vista 64 bits (hasta 8 Gb de RAM), como SO principal de vuestra máquina. De esta manera, podréis tener 2 máquinas virtuales funcionando simultáneamente con 2Gb de RAM cada una, mas 2-4 Gb de RAM para el SO host.
  • La velocidad de la CPU no es lo más importante. Mejor gastar el dinero en un disco duro rápido extra y mayor cantidad de RAM. Pero si tenéis presupuesto extra, lógicamente más velocidad de CPU ayudan (y sobre todo una CPU con varios núcleos, de manera que puedan ejecutarse procesos e hilos de manera simultánea - esto tiene relevancia al programar "threads")

The Principles Of Successful Freelancing (free ebook)

Interesante lectura para quien quiera comenzar a emprender:

http://www.danilat.com/weblog/2009/09/09/the-principles-of-successful-freelancing-disponible-gratuitamente/

Gracias Dani.

Como hacer que tu software sea el número 1, por Joel Spolsky

Joel, visionario, creador, fantástico orador, escritor y gran conocedor del mundo del software nos brinda otra de sus conferencias. Interesante!

(visto en el blog de JM Alarcón)

WPF line of Business (Londres, Mayo 09)

Aproveché el curso de dos días de WPF impartido por dos especialistas de talla mundial Jaime Rodriguez y Karl Shifflet para quitarme los cariños de "la city" y visitar a buenos amigos. Mereció realmente la pena todo lo que Jaime y Karl, dos grandes conocedores de la tecnología (y muy buenos oradores) nos comprimieron en esos dos días.

Detailed Agenda

  • Day One:
    • Lap Around WPF
    • WPF Tools ( Blend, Visual Studio 2008)
    • Graphics Subsystem
    • Layout
    • WPF Fundamentals and new concepts
      • Application Model
      • Dependency Properties
      • Trees (logical & visual)
      • Events
      • Threading
      • Resources
    • Controls
    • Styling
    • Templating
    • Q&A with instructors at end of day 
  • Day Two:
    • WPF integration with Win32 and Windows Forms
    • Data binding
    • Introduction to Model-View-ViewModel
    • Commanding in M-V-VM
    • Views, Navigation and Transitions
    • Data Validation
    • Error handling, Model dialogs, Logging
    • Unit Testing
    • MVVM & LOB tips and tricks
    • Q&A with the instructors

 

Comunidad de Microsoft Certified Trainers (MCT)

Si eres un Microsoft Certified Trainer, te puede interesar formar parte de un grupo que ha sido creado recientemente en linkedin para MCT’s actuando en España.

Es un grupo reservado para Microsoft Certified Trainers (deberás de enviar tu transcript para participar) y en el se discuten asuntos que nos interesan como conjunto de profesionales.

Si estás interesado en participar, entra en linkedin.com y busca el grupo: Microsoft Certified Trainers (MCT) en España (Spain) (intenta este link para acceder a él).

 

Asegur@IT V (Zaragoza) 3 marzo 09

 

martes, 03 de marzo de 2009 9:00 - martes, 03 de marzo de 2009 14:00 Madrid, París 

Instituto Tecnológico de Aragón (ITA) (Edificio Blanco) ITA-3 
Auditorio del Instituto Tecnológico de Aragón
c/ María de Luna 7-8 Zaragoza Zaragoza 50018
España

Información general del Evento

La seguridad informática exige cada vez mayor conocimiento en múltiples disciplinas. Este evento pretende dar conocimiento de algunas técnicas utilizadas para atacar sistemas y cómo podemos protegernos ante ellas. Este evento está dirigido a técnicos de sistemas, administradores de redes, responsables de seguridad y desarrolladores de sitios web.

Agenda

(ver enlace)

 

Desarrollar software no es sólo picar código

Desarrollar software no es sólo picar código

Me ha gustado mucho el cartel del evento de los compañeros de Navarra (autor Sergio Jimenez)

Habrá que estar atento al calendario de eventos.

 


Vacante desarrollador / analista programador Zaragoza

Vacante desarrollador / analista programador Zaragoza

Normalmente las empresas a las que doy formación o consultoría me piden referencias de buenos candidatos que incorporar a su plantilla. El hecho de formar a una persona durante 65 horas te permite tener una idea bastante precisa de sus aptitudes, capacidad de aprendizaje, creatividad a la hora de afrontar problemas, etc..

Si eres una persona honesta, capaz de:

  1. Innovar, generar buenas ideas.
  2. Transformar esas ideas en un producto de software usable.
  3. Hacerlo de una manera precisa y eficiente, con calidad. Anticipando en tu diseño / código futuras ampliaciones y cambios. De manera entendible por otras personas que continuasen tu trabajo.
  4. Estar dispuesta a aprender lo que no sabes y a enseñar lo que has aprendido.
Tienes ahí fuera un mercado de trabajo que te acogerá con los brazos abiertos. Y si quieres enviarme tu CV, podría ayudarte. El enlace con mi correo está arriba a la derecha. 
Bueno, si eres una persona que encaja con el perfil definido, dudo que estés buscando trabajo. De todas maneras, puede ser interesante que contactemos para cualquier otro tipo de colaboración.
Confidencialidad: Cualquier CV / información personal solo será compartido con terceras personas o empresas previa autorización expresa del candidato.