LiteIDE: mi IDE preferido para Go

Después de probar y estudiar Go (aka Golang) desde el día que nació sobre el 2009, he vuelto a retomarlo para el desarrollo de pequeños proyectos web/API. Me ha empujado a volver a usarlo la constante mención sobre Go en Hacker News. Raro es el día que no aparece una empresa o start-up que ha empezado a usarlo para bajar la factura de servidores y watios.

En su día analicé algún que otro IDE para Go que estaba interesante.

Lo cierto es que hoy en día Go ha evolucionado mucho y lo mismo ha ocurrido con los IDE asociados.

De entre todos lo que he probado (Goclipse, Go-IDE y LiteIDE) me quedo con LiteIDE.

Las razones son:

  • Cross-platform (GNU/Linux, Windows y Mac OS X)
  • LGPL
  • Modular
  • Sencillo
  • Ligero
  • Integra perfectamente el entorno (algo particular) de Go.

 

Ahora queda empezar a hacer Apps Go-fabulosas 🙂

 

Django, DRY y el client-side

Por sí alguien no lo sabe, Django es un potente framework para el desarrollo de aplicaciones web en Python.
Sigue al pie de la letra la filosofía DRY (Don’t Repeat Yourself).

La verdad es que hace honor al lema, pero como backend que es, entra muy poco en lo relativo al client-side.
Aunque Django se usa como backend de aplicaciones móviles (recomiendo Django REST framework) o incluso como backend para aplicaciones nativas (alguna he hecho con C++/Qt4), la realidad es que el grueso de aplicaciones cliente/servidor hechas con Django son web.

Me he dado cuenta que donde más tiempo invierto a la hora de hacer una webapp es en escribir la lógica JavaScript. A pesar de usar mis propias librerías JS, jQuery, Handlebars y demás herramientas de última tecnología, aun tengo que crear mucho código JS para comunicar vía Ajax. Sin duda no cumple con el principio DRY. Harto de esta situación de ineficiencia me puse a buscar paquetes Django que me ayudarán en esta guerra.

No he encontrado una gran variedad, pero he descubierto un paquete en Github que aunque lleva un año sin recibir actualizaciones cumple con gran parte de lo que quiero.

El paquete se llama Django-puzzledev-jom y es fruto de un estudio universitario de lo que llaman SSMVC (Symmetric Synchronized Model View Controller).

Este paquete crea una serie de ficheros JavaScript para cada uno de los modelos que quieras que sean exportables. Importando estas clases en tu client-side, se hace trivial cualquier tarea CRUD.

Esta es la teoría. En la práctica me he dado cuenta de que aun le falta mucho por pulir. Aún esta lejos de alternativas en otras plataformas como ASP.Net o GWT.

Entre otras cosas. aún esta verde la generación de código JavaScript. Una de sus principales carencias es la inclusión de validadores. Esta tarea es más o menos trivial, ya que conociendo los tipos de datos, añadir una expresión regular para comprobar lo que debe ser un email, un télefono o un dato requerido, no debe ser muy complicado.

Es muy probable que acabe haciendo un fork de esta libreria y mejorarla a mi antojo.
Creo que puede ser una buena inversión de tiempo para agilizar los futuros desarrollos.

 

Mis pasatiempos para vacaciones

Eres un frikazo

Eres un frikazo

Hoy comienzo las anheladas vacaciones 🙂

Durante este mes quiero hacer muchas cosas para relajarme: piscina, una vuelta por ahí, viajes “conocidos”, ir al cine (no creo que mucho, ni esta la cosa como para ir mucho ni lo que hay en cartelera lo merece).  En resumen, lo típico que hace cualquier “nota” que tiene la suerte de estar empleado.

Pero… one more thing!

Un mes entero haciendo las cosas típicas de las vacaciones de verano puede ser mucho para mi, luego me llevo conmigo unos “pasatiempos” (por llamarlo de alguna forma) especiales:

  • Actualización de una App (iOS & Android).
  • Dejar casi lista otra App (Android).
  • Pruebas y paso a producción de una WebApp.
  • Montaje de mi impresora 3D, Prusa i3 (si es que me llega en este mes).
  • Diseñar prototipo de enchufe “inteligente”.

Uff! Visto así parece que lo que voy a hacer es un Ironman xD

¿Podré con todo? Lo veremos después de las “vacaciones”.

Quirks del kernel Linux

Lo primero, ¿sabes lo que es un “quirk“?  Según el traductor, tiene varias acepciones como capricho o peculiaridad. Es esta última acepción de la que vamos a hablar.

Linux tiene código “quirk” (peculiaridades) para ciertos dispositivos concretos.

Esto se debe a que hay muchos dispositivos que aunque tienen funcionalidades en común, incorporan “peculiaridades” que deben ser tratadas para explotar al máximo el dispositivo. Un ejemplo claro son los teclados con teclas multimedia o esos joysticks enormes que se emplean en los simuladores de vuelo.

Os voy a poner un ejemplo con un dispositivo de interfaz-humana (HID) al que vamos a intercambiar la funcionalidad de dos de sus teclas.

Como sabéis, cada dispositivo USB tiene asociado un par de códigos que representan un código unívoco de producto (identificador de fabricantes e identificador de producto). Cuando un dispositivo HID USB se conecta al sistema, el kernel busca si tiene asociado algún quirk, y si procede, aplica el “remapeo” de eventos.

Un fragmento de hid-belkin.c para un teclado Belkin.


static int belkin_input_mapping(struct hid_device ∗ hdev, struct hid_input ∗ hi, struct hid_field ∗ field, struct hid_usage ∗ usage,unsigned long ∗ ∗ bit, int  max)
{
unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);

    if ((usage >hid & HID_USAGE_PAGE) != HID_UP_CONSUMER || !(quirks & BELKIN_WKBD))
          return 0;
    switch (usage >hid & HID_USAGE) {
          case 0x03a: belkin_map_key_clear(KEY_SOUND);
          case 0x03b: belkin_map_key_clear(KEY_CAMERA);
          case 0x03c: belkin_map_key_clear(KEY_DOCUMENTS);
          default:
          return 0;
    }
    return 1;
}

¿es fácil de entender no? El código “mapea” tres eventos distintos a los códigos de kernel correspondientes a las teclas KEY_SOUND, KEY_CAMERA y KEY_DOCUMENTS.
Esta función de “mapeo” se ejecuta después de que la función “probe” del driver sea positiva y se haya obtenido la tabla de usos del dispositivo USB HID.
Dicha función de “mapeado” se aplica para cada uno de los códigos que reporte el dispositivo. Si os fijáis, cuando se produce un intercambio el código de retorno es 0.
Se devuelve 1 si no hay alteración (como puede ser el caso de la tecla ‘a’).

Si tenéis curiosidad veréis en que en todo el kernel hay numerosos “quirks” a todos los niveles.

 

Cómo instalar una aplicación Django en OpenShift

OpenShift es la plataforma PaaS de Red Hat. Aunque este post trata sobre consejos y experiencia de instalar una app de Django, hay que decir que OpenShift está actualmente montado sobre Amazon Web Services y que utiliza el concepto de recurso (gear o cartucho).  Un “cartucho” puede ser una aplicación web, una base de datos MySql, una instancia de memcached, etc. La cuenta gratuita permite tener 3 cartuchos. La idea es que si tu solución necesita escalar, fácilmente se puede añadir nuevos cartuchos bajo demanda.

Aquí os presento algunos tips o problemas con los que me he encontrado:

  • Lo primero es instalar el toolkit de OpenShift, rhc. Se trata de un script Ruby con el que se puede crear aplicaciones, ver logs, acceder via SSH etc. Se instala con “gem install rhc”. A mi me dio un error al instalar parte de la documentación pero funciona sin problemas.
  • La primera vez que se ejecuta rhc nos pedirá los credenciales de OpenShift (login/password) y permite crear y subir una clave pública de SSH para acceder sin tener que recordar clave alguna.
  • Para acceder vía SSH, ejecutamos “rhc ssh <app>“. Esto llama a SSH utilizando la clave pública. Como usuario, se utiliza un string-ID bastante largo. Al acceder nos situa en el “home” virtualizado: /var/lib/openshift/<UserID>. En ese directorio aparecen los componentes principales de tu aplicación. Para una aplicación Django son: app-root, git y python. La mayoria de los directorios son de sólo lectura. Solo en $HOME/app-root/data, $HOME/app-root/repo y algún que otro directorio podemos escribir.
  • Si necesitamos instalar algún componente Python, deberemos de ejecutar el script de Virtualenv. Esto se hace con “source $HOME//python/virtenv/bin/activate”. Luego ya llamaos a “pip install <paquete>“.
  • En caso de tener que copiar algo vía SCP, deberemos tener cuidado de que el directorio destino tenga permiso de escritura. Esta seria una sintaxis válida “scp <fichero> <userID>@<app>-<cuenta>.rhcloud.com:/var/lib/openshift/<userID>/app-root/data“.
  • El entorno de OpenShift establece un número grande de variables de entorno que será de gran utilidad para configurar tu aplicación. Todas comienzan por “OPENSHIFT_”. Por ejemplo OPENSHIFT_APP_DNS nos da el host,  OPENSHIFT_REPO_DIR el directorio donde se ubica el repositorio o OPENSHIFT_PYTHON_LOG_DIR donde se encuentran los logs de Apache.
  • El equivalente a “service httpd restart” es “ctl_app restart“. Lo utilizaremos cada vez que hagamos algún cambio en la aplicación.
  • La mejor forma de enlazar nuestra aplicación con wsgi es fijarnos en el ejemplo que viene. Apache ejecuta $HOME/app-root/repo/wsgi/application para cada request. Este script prepara el entorno de virtualenv e invoca al manejador wsgi de Django. Debemos ajustar los paths y nuestro “project.settings”.
  • Lo más normal es que durante la instalación de nuestra app nos encontremos con errores tipo 500. Con “rhc tail”, veremos los logs de Apache.
  • Los contenidos estáticos deben ir a $HOME/app-root/repo/wsgi/static, luego debemos configurar correctamente la variable STATIC_ROOT para que apunte al path correcto dentro de settings.py.
  • Si nuestra aplicación usa base de datos, se recomienda la ubicacion $HOME/app-root/data, ya que $HOME/app-root/repo se destina al repositorio de código.
  • Es posible tener una configuración especifica según el entorno de ejecución mirando las variables de entorno. En el ejemplo que viene por defecto, se crea una variable booleana ON_OPENSHIFT dentro settings.py que se usa para determinar la ubicación de la base de datos sqlite3.
  • Si queremos obtener la IP de aquellos que nos visitan, tenemos que usar el meta “HTTP_X_FORWARDED_FOR” en lugar “REMOTE_ADDR”.
  • Por último, si queremos asociar un CNAME a nuestra app, usamos “rhc alias <app> <cname>” para crear dicho alias (imagino que añadirá un ServerAlias a la configuración de Apache).

Sin duda OpenShift es de las plataformas más económicas (o gratis) de hospedar un proyecto Django. Muy recomendable para aplicaciones inicialmente pequeñas o prototipos.

 

Resumen Betabeers Madrid – De websockets, juegos y rockstar!!!

Betabeers Madrid - Abril/13

Betabeers Madrid – Abril/13

Como cada mes, llegó Betabeers Madrid, el mejor evento de/para desarrolladores más importante de Madrid (y sino es el más importante…el premio al mejor buen rollo lo gana seguro). En esta ocasión se celebró en el nuevo espacio de Utotpic_US y se llenó! (si había 120 apuntados en el evento, creo que estábamos rondando la centena).

Resumen TL;DR

En esta edición, la charla fue sobre Websockets y corrió a cargo del maestro de ceromonias, Miquel Camps (@miquelcamps). Los proyectos que se presentaron fueron: Origo, Funddy, Otogami y SocialPoint. El momento estelar fue cuando Miquel, transformado en rockstar, hizo historia al usar nuestros smartphones como “LEDs psicodélicos”. Dejó a las famosas pulseras de Coldplay a la altura del betún. Por último, hubo dos request-for-collaboration, uno para SaveInformaticOS y otro para MiParlamento.

Websockets

Miquel nos presentó el potencial que los websockets tienen a través de diversas aplicaciones: un sistema domótico, una cola para pedir copas en las discotecas, etc.

WebSocket forma parte de HTML5 y nace como solución “bien pensada” para relevar las soluciones ad-hocs como polling o long-ajax-request (que entre otras cosas, chupan bateria que da gusto).

Para la demostración uso en el backend Heroku, Node.js. y Socket.IO (que también tiene libreria JS para el frontend). Destacar la facilidad de programación gracias a la librería Socket.IO.

Origo

Formado por ex-tuentis, Origo recopila tus opiniones y les asigna un color: verde = mola, rojo = apesta. Se trata de un proyecto que está siendo acelerado en Wayra. Suplen la necesidad tipo: “¿Qué opinan mis colegas sobre la última de IronMan?”. Innovan bastante en el frontend haciendo uso del <canvas> de HTML5. Toda su portada del home es un inmenso canvas que se actualiza on the fly según una reglas (está muy chulo). Para la presentación de las opiniones también utilizan <canvas>. Se declaran enemigos de Internet Explorer 🙂

Se unió al proyecto, Luis Santos de (la maltrecha) SpartanBits para desarrollar la versión mobile para iOS y Android.

Sobre la mecánica de funcionamiento y la generación de tracción, tengo que decir que no lo usuaria a día de hoy. El motivo es que soy muy vago. Dejar una opinión sobre algo en Origo requiere que vaya a la web, me logue y deje la opinión. Aunque tenga la UX más wonderful del mundo, para mi no es suficiente. Creo que las opiniones deberían de recogerlas de forma pasiva, bien mediante API, o bien mediante algo tan tonto como hacer un tweet así: “Me encanta la nueva de #IronMan3 #Ori+1”.

Funddy

Se trata de otro proyecto formado por ex-tuentis y ex-youzees. Como ocurre con otros muchos proyectos,  Funddy surge de la necesidad de recolectar dinero para hacer algo. Un viaje, un amigo en apuros, un regalo en común, etc. Tiene un acabado muy fino y están bien integrados con PayPal. A destacar el gran video de presentación.

A nivel técnico, destacar el uso de symfony.

Otogami

La pareja del metal: David Bonilla (@david_bonilla) y Jerónimo López (@jerolba) presentaron su última creación: Otogami. La idea es clara: “ofrecer el mejor comparador de videojuegos que siempre te de el mejor precio“.
La plataforma tiene un diseño y una UX exquisita.

A nivel técnico destacar los propios frameworks creados por Jerónimo y un “sistema revolucionario para introducir los juegos a mano” 🙂
Su pasión por el producto queda patente con innovaciones como el Otoscore (un rating well-done para videojuegos).

Con un particular homenaje al “one more thing“, anunciaron un gran acuerdo con Hobby Consolas por el cual en la web de la revista decana de videojuegos, aparece un widget de Otogami con la info del juego, precio y opción de compra. ¡Enhorabuena!

Hay que agradecer también la transparencia a la hora de presentar cifras y su modelo de negocio basado en afiliación.

Doy fe de que dan el mejor precio, me ahorre bastante con la expansión de Starcraft II.

SocialPoint

Se trata de una plataforma de juegos sociales made-in-spain que ha conseguido encontrar inversores y más de una vez (ya llevan un par de rondas si no entendí mal). Situada en Barcelona desde 2008 (año en que se fundó), se trata de una de las pocas empresas que se empeñan en bajar el paro. Están buscando desarrolladores, diseñadores, etc.

Su CTO, Marc Canaleta, nos explicó toda su infraestructura. Lo que más me llamo la atención fue la reflexión sobre la poca efectividad de usar caches debido a la necesidad de estar escribiendo en la BBDD continuamente.

FlashRock

Sin duda el momento estelar de la “noche”.
Se apagaron las luces y ya pensé que nos estaban echando. En realidad, se trataba de parte del espectáculo que Miquel estaba a punto de empezar.
Como última demo de los websockets, Miquel desarrolló una pequeña aplicación donde cada uno de los asistentes accedia a una URL con su smartphone y lo convertía en un siervo como si de un zombie-botnet se tratara.

Cuando todos los zombis-móviles estaban levantados al aire, le dió al play desde su Macbook y empezó a sonar Seven Nation Army (a.k.a “Loo looo looo lo”). Poco a poco, los móviles empezaron a mostrar colores psicodélicos al son de la música. Había nacido el sustituto de los mecheros al aire en los conciertos (al menos un competidor).
Como suele pasar con las experiencias interactivas, consiguió atacar los sentimientos y simplemente MOLÓ MUCHO 🙂

SaveInformaticOS

A raíz del infamous #debate10, donde se debatió sobre la calidad y existencia de informáticos de calidad, nace SaveInformaticOS como un open-space donde debatir y sacar ideas sobre la “crisis” que atraviesa el sector y como acercar posturas entre desarrolladores, emprendedores, consultoras, PYMEs, etc.

Se celebra el sábado 27 en la UPM.

MiParlamento

Esta iniciativa pretende ponerle caras a esos 350 diputados que se juegan nuestro futuro en el Congreso. Para lograrlo, MiParlamento hace uso de la gamificación y establece una analogía entre diputados y jugadores de fútbol. Su objetivo es sacar unos álbumes de cromos como los que Panini pero con los susodichos diputados.

El 1 de Mayo sacaran una campaña crowdfunding para obtener los fondos necesarios para su desarrollo (actualizaré con el enlace cuando este disponible)

A mi todo este tipo de iniciativas de transparencia y concienciación política me parecen geniales y necesarias. Sin duda apoyaré el crowdfunding 🙂

También necesitan de desarrolladores, diseñadores, o retweets con cariño. Si estáis interesados en participar, os podéis apuntar en su landing page (powered by epiclanding)

Esperemos encontrar en los kioskos y en la web este proyecto pronto.

Conclusiones

¿has llegado hasta aquí? Olé por ti! 🙂

  • Creo que ha sido unos de los mejores Betabeers respecto a la calidad de los proyectos presentados y al número de asistentes.
  • Muy interesante ver como Symfony2 se usa en varios de los proyectos presentados.
  • Algunas críticas contra MongoDB y Backbone.
  • Piques aparentes entre “aceleradoras” vs “bootstrap”.
  • Nadie quiere a los potenciales usuario de Internet Explorer (salvo David Bonilla).
  • Primero desarrolla en Android.
  • ¿qué piensas tú?

Sugerencia

Creo que Betabeers es un evento cojonudo para presentar proyectos pero pienso que puede dar mucho más. Aunque hay turno para preguntas, creo que puede ser muy interesante para los proyectos que la audiencia pueda dar un feedback fácilmente sobre el proyecto. A mi se me ocurre algo así.

  • Web accesible mediante un QR que se muestra al empezar la presentación de cada proyecto
  • Los responsable del proyecto platean 3 preguntas sobre las que esperan un feedback númerico o tipo “mal, regualar, bueno”
  • Los asistentes hacen esa valoración durante la charla
  • Se presentan los resultados

¿Qué os parece? Creo que daría un buen feedback.

Enlaces

Red Hat Tour 13 Madrid

Red Hat Tour 2013 Madrid en el Santiago Bernabéu

Red Hat Tour 2013 Madrid en el Santiago Bernabéu

El pasado día 16 de Abril tuvo lugar el Red Hat Tour 13 en Madrid. En esta ocasión no se celebró en el típico hotel de turno, sino que se desarrolló en todo un monumento vivo de la Villa de Madrid, el estadio Santiago Bernabéu.

Este evento que se celebra cada año y medio aproximadamente tiene como título “Transform your IT“. En líneas generales viene a presentarnos lo último que los chicos de Red Hat  y sus patners (HP, Bull, Intel, Fujitsu, etc) están trabajando, sus apuestas de futuro inmediato y los casos de éxito.

El tema diagonal de todas las charlas fue el cloud computing. Siendo un poco más específico, los términos que más aparecieron en las distintas sesiones fueron “cloud abierta, cerrada e híbrida”.

Yo soy de los que piensan que esto del “cloud” no es más que un producto de marketing asociado a dos viejos conocidos: red y virtualización.

Según Wikipedia, una nube privada no es más que una nube destinada a ser explotada por una organización. De todos los casos de nube privada que presentaron, el que más me llamo la atención fue el renderizado de películas 3D de DreamWorks. Antes de la nube, ellos tenían montado un IT propio que era muy caro de mantener y encima no daban a basto cuando querían producir una película (según dijeron tardarían 7.000 años para hacer el  renderizado en un solo PC de alta gama). Lo peor de esto es que cuando no había película que renderizar, el sistema estaba ocioso. Así fue como acudieron a los servicios de consultaría de Red Hat y apostaron por la nube para reducir drásticamente el precio y conseguir sacar las películas según la planificación.

Para Red Hat las ventajas de una nube open source son claras: escalabilidad, velocidad y no lock-in. En entornos cada vez más competitivos con menor presupuesto y mayor exigencia, poder lanzar una solución rápidamente, hacer que escale según la demanda para no desperdiciar ningún recurso y que puedas seleccionar qué proveedor te va dar solución para según qué subsistema sin problemas de dependencia se convierte en un “must“.

De los pocos productos hardware que se vieron, me llamo la atención el HP Moonshot. Se trata de un nuevo concepto de rack que puede albergar hasta 45 unidades de lo que denominan “cartuchos”. Un cartucho puede ser una CPU, un disco SSD, un servidor NAS o incluso una FPGA. Para mi es el mejor “mapeo” de la nube en una nube física.

Respecto a las nuevas tecnologías open en las que Red Hat y sus patners están trabajando, destacaría OpenStack  (“el sistema operativo de la nube”). El objetivo es estandarizar la gestión de nubes públicas, privadas e híbridas. Esto viene muy bien para la interoperatividad entre proveedores de cloud.

Un nuevo servicio que me gustó especialmente fue OpenShift (el nombre no es muy acertado, esperemos que funcione bien). Este servicio es un PaaS de Red Hat que te permite  alojar una aplicación en el cloud abierto de Red Hat. Es insultantemente rápido hacer un deployment de un aplicación alli. Me registré y con dos click tenia andando un WordPress a estrenar. Lo mejor de todo es que hay un plan gratuito, luego se puede tener un WordPress totalmente modificable pero como si estuviera alojado en WordPress.com. Una pasada.
El principal problema que le veo a OpenShit es que hoy en día corre sobre Amazon Web Services (IaaS). Además de esto, todavía no admite SSL para tu dominio (tiene un SSL wildcard para *.rhcloud.com)

Para (casi) terminar, decir que he echado en falta la ausencia de ARM como alternativa a la arquitectura x86 para servidores y que no me cabe duda que le quitara cuota de mercado. Ya existen proyectos amateurs de cluster y supercomputadores que tienen el tamaño de una tarjeta de crédito que usan ARM como CPU. También brillo por su ausencia el término “mobile”, lo cual deja claro donde se posiciona Red Hat, dejando a distribuciones como Ubuntu que experimente en ese difícil terreno.

Por último, felicitar a Red Hat por el gran evento que ha organizado. El contenido de las charlas, el desempeño de los ponentes, el timing, la ubicación, etc estuvo muy a la altura.
¿dónde será el próximo Red Hat Tour 15? ¿Las Ventas? 🙂