Trilo: Viaja como un hacker

View this post in english here

Reconozco que me encanta viajar, y me encanta programar cosas interesantes (aunque inútiles). Tenía desde hace tiempo la idea de hacer un blog sobre viajes. Sin embargo, hacer una cuenta en WordPress.com para hacer «otro blog sobre viajes» parecía algo aburrido, así que, con la tarde del domingo por delante, me hice un pequeño esquema de qué quería:

  • Tener una lista de los países visitados, mostrar las banderas y mostrar para cada país el número de ciudades vistas.
  • Para cada país, tener en el mapa las ciudades en las que he estado.
  • Para cada ciudad, tener una lista de los sitios recomendados, y mostrarlos (como no) en un mapa.

El resultado de esto es Trilo:
trilo_home

La pagina inicial está formada por dos conjuntos de mapas, uno mundial y otro a escala europea. Estos mapas están creados usando Google Chart Tools.

Las banderas, por otra parte, se obtienen de un servicio web a partir del código de dos dígitos


Para ello necesitamos las iniciales de los países, que nos servirán además de categoría.

trilo_country

En la página de países, se muestra la bandera obtenida anteriormente, un mapa ampliado con cada una de las ciudades, y los enlaces a las mismas.

trilo_city

A nivel de ciudad, se genera un mapa estático con la API de Google Maps a partir del nombre de la misma y de los elementos recomendados. Además se enlaza con TripAdvisor y la Wikipedia para más enlaces.

El sistema está basado en Jekyll, un sistema escrito en Ruby que permite generar páginas estáticas a partir de plantillas, código y un poquito de magia. Además, ha resultado interesante acceder a algunos servicios y salirse un poco de algo relacionado con informática.

El proyecto está disponible (y alojado) en http://rlbisbe.github.com/trilo/

Los lenguajes de la web, resumen y materiales

El pasado viernes 13 de abril estuve en la UAM hablando de otros lenguajes de programación y marcado que podemos encontrar en la web dentro del marco de las Jornadas de desarrollo web 2012.

La web no deja de ser una inmensa torre de babel, con muchos lenguajes y mucha gente que programan desde CGIs hasta aplicaciones en Rails, y es bastante útil conocer qué tecnologías y qué lenguajes mueven la web hoy.

Dejando de un lado los pesos pesados como PHP, Java EE o .NET, que (bajo mi opinión) debería de ser obligatorio su conocimiento a gran escala en la carrera de informática, en la charla me centré en algunos menos conocidos pero a su vez muy usados: Ruby, Python, Javascript y Scala:

Javascript, el lenguaje que nos permite hacer páginas bonitas, y que no tiene nada que ver con Java, tiene además una versión de lado de servidor llamada node que permite hacer acciones como servir una web evitando el coste de generar un nuevo proceso. Soporta de una mejor manera la concurrencia y podemos usarlo para procesos con un alto grado de interacción (como un sistema de chat).

Python, la navaja suiza, un poco más a alto nivel que la BASH de unix y más a bajo nivel que un lenguaje de programación tradicional, permite hacernos nuestras utilidades para el procesamiento de información. Es un lenguaje de programación multiparadigma, que permite usar programación estructurada, funcional u orientada a objetos, dependiendo del tipo de proyecto. Permite, además, el uso de varias bibliotecas matemáticas, así que para aplicaciones científicas en base web, es nuestra herramienta.

Ruby, un lenguaje mágico, con un elevado nivel abstracción, se ha ganado un puesto entre los grandes por la facilidad de su aprendizaje, por su sistema de gestión de paquetes llamados gemas, y por frameworks como Sinatra o Rails, que permiten el desarrollo rápido de aplicaciones (o RAD).

Scala, feo, funcional, e increiblemente potente, tiene una curva de aprendizaje considerablemente mayor que los otros lenguajes vistos, pero sin embargo, la compensa con la posibilidad de interactuar con clases de Java (ya que se ejecuta sobre la JVM) y con un rendimiento muy bueno para análisis de datos (por ello lo usan en Twitter para manejar el tráfico constante de información que tienen).

Como aparte, vimos un par de lenguajes de marcado, Haml, que permite sustituir el html por una manera más simple de definir las marcas, y Razor, que hace todo lo contrario, aprovechar el HTML que tenemos (estático) e introducir la información dinámica de manera poco invasiva.

Cerramos la charla hablando de JSON, por qué es popular, y cómo se diferencia de XML en la transmisión de datos, como se puede ver en los siguientes ejemplos usando la API de Twitter:

Aquí dejo la presentación original:

Sinatra, un framework web para Ruby

sinatra logo

Ruby es un lenguaje de programación que se ha hecho tremendamente conocido (de hecho es el lenguaje más usado en los repositorios de GitHub en estos momentos), Es un lenguaje dinámico y orientado a objetos que es sencillo de aprender. Además, posee diversos frameworks que lo convierte en un lenguaje potente para desarrollar aplicaciones web.

Uno de estos frameworks toma el nombre del célebre artista Frank Sinatra. Se usa en la actualidad por empresas como la BBC o la propia GitHub. Es tremendamente potente y bastante más sencillo que Ruby On Rails, más conocido y complejo. En este artículo veremos una brevísima introducción a qué es trabajar con Sinatra.

Instalación

Lo primero que necesitamos es una instalación de Ruby, para lo cual tenemos varios enlaces en su página oficial dependiendo de nuestro sistema operativo. Una vez instalado ruby podremos agregar nuevos paquetes usando RubyGems, y deberemos ejecutar el siguiente comando desde nuestra consola:

$ gem install sinatra

Descifrando el Hola Mundo

El hola mundo que nos ofrece el framework es muy sencillo, y es lo que podemos encontrar en la página principal. Acudimos a una carpeta cualquiera de nuestro sistema, y creamos un fichero llamado hi.rb:

require 'sinatra'

get '/hi' do
  "Hello World!"
end

Para ejecutar esta aplicación solamente tendremos que escribir el siguiente comando en nuestra terminal:


$ ruby -rubygems hi.rb
== Sinatra has taken the stage ...
>> Listening on 0.0.0.0:4567

A continuación se cargará el servidor de desarrollo de ruby, y solamente tendremos que acudir a localhost:4567 y ver nuestra página en funcionamiento.

El primer valor que se muestra es el comando HTTP al que responde (si recordamos este artículo los diferentes comandos HTTP son get, post, put, delete… ) con lo cual podemos hacer que nuestra aplicación responda a una petición en concreto, lo cual nos puede ser de gran utilidad si estamos desarrollando cualquier tipo de servicio web.

Además de mostrar código, podemos hacer uso de los diferentes motores de visualización que soporta. Uno de ellos se conoce como erb (acrónimo de embebed ruby), y permite tener en una página HTML código ruby.

Para ello editamos nuestra aplicación y agregamos el siguiente código:

...

get '/hello/:id' do
  @name = params[:id]
  erb :hello
end

Además necesitamos crear una carpeta llamada views (que contendrá las vistas de nuestra aplicación) y agregar el fichero, que tendrá extensión erb.



</pre>
<h2>Hello</h2>
<pre>


Esto no es del todo cómodo ya que nos obliga a repetir el código de marcado para cada vista que queramos tener en nuestra aplicación, sin embargo lo que podemos hacer es tener una plantilla que inserte cierto código antes y después de la vista, para lo cual usamos un fichero llamado layout.erb que contendrá la estructura básica del sitio, y actualizaremos el código para mostrar esta diferencia.


    
    

 


El código anterior contiene una etiqueta, yield, que especifica donde se ha de cargar el código específico de nuestra vista. El fichero de la vista actualizado contendría la siguiente información:

</pre>
<h2>Hello</h2>
<pre>

Con esto seríamos capaces de crear un portal básico que responda a ciertos parámetros de entrada.

Pasos adicionales

Tenemos mucho más que poder agregar a nuestra app: Modelos de datos con DataMapper, autorización con Warden, posibilidad de devolver los resultados en formato json (y usarlo entonces como un servicio web)… Las posibilidades son infinitas, pero todo comienza con get «/hi»….

Más información

Instalar Ruby on Rails en Windows y no morir en el intento

Por motivos oscuros me he visto en la necesidad de instalar Ruby on Rails en Windows, para preparar una charla. Tras intentar instalar su homónimo para .net (IronRuby) y no conseguir éxito, intenté hacer lo mismo con la versión oficial, pero, surgieron problemas de conflictos entre ambas versiones, ya que comparten comandos y se puede formar un lío.
Continuar leyendo «Instalar Ruby on Rails en Windows y no morir en el intento»