SEAT600: Manual de Uso y Entretenimiento – SEAT 600 E – El azul!

Buscando buscando, y tras mucho buscar… al final he conseguido un manual del SEAT 600 E, en bastantes buenas condiciones. Pero lo mejor de todo, es que se trata de la última versión publicada por SEAT, edición de Marzo de 1973. Una de las 10000 copias publicadas.

Todo un orgullo!!! 🙂

 

IMG-20160216-WA0000

IMG-20160216-WA0002

Share Button

PHP: contruir un Rest Server en sólo 65 líneas de código

Recientemente he necesitado crear un rest server para un aplicación web con AngularJS, que me hiciera de interfaz con respuesta JSON. Mi problema es que no la puedo desplegar en un servidor propio y por lo tanto no dispongo de Node para crear un buen servidor rest con Express. Por ello, lo que me he planteado es desplegar esta aplicación sobre mi servidor actual, que acepta PHP y, por lo tanto, HTML. Entonces, lo mas sencillo es intentar crear un servidor rest con las tecnologías disponibles. Y eso me ha llevado a hacerlo en PHP.

Cómo no, Google para estos casos es la mejor herramienta, y para no reinventar la rueda, me he decidido a utilizar una solución ya existente. Por lo tanto, lo que voy a hacer en esta ocasión es ofreceros el enlace al increíble artículo de LeaseWeb labs: Creating a simple REST API in PHP.

https://www.leaseweb.com/labs/2015/10/creating-a-simple-rest-api-in-php/

Os lo recomiendo, funcionando a la primera y sin ningún tipo de problema. Todo un aporte excelente!

Si seguís interesados en su proyecto, ofrecen la suite completa para crear un interfaz CRUD en este repositorio GIT: https://github.com/mevdschee/php-crud-api

Espero que os sea de ayuda, tanto o mas como me lo ha sido a mi.

Gracias por leerme!

Jordi

Share Button

El M40 cumple 43 años

Hoy 4 de enero de 2016 mi Seat 600 cumple 43 años desde el día de su salida de la cadena de montaje de la planta de la Zona Franca de Barcelona. Seguramente fue un gran regalo de reyes para aún español de la época. Hoy puedo decir que soy yo su orgulloso propietario.

Una vez más, me veo obligado a haceros llegar mi reconocimiento a este increíble vehículo, toda una hazaña de la historia de nuestro país.

Sirva esta gran foto para homenajear su larga y aún durarera trayectoria por la carreteras españolas.

Felicidades!

El M40 cumple 43 añitos

El M40 cumple 43 añitos

 

Saludos,

Jordi

Share Button

Java: El problema del órden de las classes en Eclipse

Recientemente he tenido que implementar un proyecto Maven con su plugin de overlays. En concreto, lo que he tenido que hacer ha sido extender un proyecto web maven que ya existía, para poder sobreescribir solo algunos de los fuentes que lo forman, como etsilos visuales y algún pequeño cambio a nivel de código fuente.

Antes de seguir, si no conocéis el tema de overlays de Maven, os recomiendo encarecidamente profundizar un poco en el tema, merece la pena: https://maven.apache.org/plugins/maven-war-plugin/overlays.html

Siguiendo con lo que os quería comentar, mi problema es que cuando ejecutaba el proyecto hijo, el que sobreescribe el original, todo parecía funcionar correctamente: overlays estaba haciendo su trabajo sin problemas, y mis estilos estaban siendo sobreescritos sin mayores incidencias. Pero, siempre hay un pero, a la hora de debuggar sobre Eclipse, el tema se complica, y en vez de trabajar sobre las classes java sobreescritas, se utilizaban las originales.

Menudo dolor de cabeza! Por mucho que buscaba no daba con el tema. Claramente era un problema de preferencias de órden de los fuentes: Eclipse no se entera de que el proyecto es un overlay (es la idea) e intenta debuggar las classes originales, no es la idea…

Bien, aquí está la solución, y esto sirve para cualquier proyecto, ya sea con empaquetado jar o war. En mi caso utilizo un servidor de aplicaciones Tomcat 7. Si nos vamos a Debug configurations… y buscamos nuestro servidor, expandimos sus propiedades, y en la pestaña Source, tenemos:

tomcat_debug_preferences

Mi proyecto es el que aparece en primer lugar, el segundo es el sobre el que realizo el overlay (el original) y los otros son dos proyectos importados, de Sentilo. En condiciones normales, vuestro proyecto no aparecerá, solo de los que depende. Esta lista es de órden preferencia. Es decir, a la hora de compilar y debuggar, Eclipse buscará los fuentes en ese órden. Vemos claramente el problema: nuestras classes sobreescritas no aparecen! Solución simple: añadimos nuestro propio proyecto y lo colo camos en primer lugar (botón Add…).

Una vez echo esto, al arrancar Tomcat en modo debug, cargará por preferencia nuestras classes, y luego las de los proyectos restantes. Por tanto, todas aquellas classes que hayamos sobreescrito las obtendrá del primer proyecto de la lista, que es el nuestro. Si las encuentra, seguirá en órden de preferencia con los proyectos restantes.

Ahora ya podemos debuggar, sea cual sea la naturaleza de nuestro proyecto, decidiendo nuestro órden de preferencia en los fuentes.

Espero haberos ayudado!

Jordi

 

 

Share Button

SmartCities: Congreso internacional

Desde ayer se presenta en Fira de Barcelona el Congreso Internacional de las Smartcities. Hoy tendré el privilegio de poder asistir, así que si puedo, ya colgaré alguna foto.

Lo mas interesante para mi es el proyecto en el que actualmente estoy trabajando, Sentilo. Es la plataforma de sensores del Ajuntament de Barcelona, y es open source.

Podréis encontrar mas información a cerca de ello en http://www.sentilo.io

Por otro lado, aprovecho para dejaros el repositorio de código de ejemplos que hemos realizado para el evento, y que se encuentra dentro del mismo proyecto de Sentilo, y que espero os sea de gran interés: https://github.com/sentilo

En ellos podréis encontrar librerías y ejemplos para poder conectaros a Sentilo desde Arduino, Raspberry Pi o simple código Java.

 

Saludos,

Jordi

Share Button

Python: Flask, un microserver web con muchas posibilidades

No soy muy dado en el mundo de Python, y de echo he hecho pocas cosas en mi carrera profesional como programador relacionado con él. Pero ahora, gracias al proyecto que llevo entre manos, mi piCarPC, me veo obligado a aprender un “poco” sobre él. Nunca lo había descartado, y era algo que ya tenía en mente hacer…

Hace muchos años ya lo descubrí en mi Curso de Postgrado de Software Libre de la UPC, pero por aquel entonces vivía una versión muy primeriza. Con la aparición de la Raspberry Pi se ha impulsado enormemente, hasta el punto de formar parte del core de la distribución más importante, Raspbian. De echo, ya no es necesario ni tan siquiera instalarlo, incluso ni las librerías del GPIO para Python, que ya vienen también incluidas.

Su gran agilidad y ligereza hacen de él uno de los lenguajes de programación preferidos para la RasPi. En mi proyecto de piCarPC lo utilizaré para crear un servidor REST y la librería que controlará el módulo de radio FM, el Si4703.

Buscando, me di de bruces (vale, no busqué demasiado…) con un framework que parece muy interesante: Flask.

Básicamente es un framework que nos permite crear un servidor http en muy pocos pasos. Casi me atrevería a afirmar que en menos que lo que necesita NodeJS para hacerlo…

Para muestra, un botón:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Este sencillo código levanta un webserver que responde con un “Hello world” al invocar la raíz del sitio…

Si eres programador, no hay que ser muy avispado para ver qué se cuece en su real importancia: es más que sencillo crear una interfaz REST con menos de 4 líneas de código!!! Tan solo echad un ojo a la anotación, al mas puro estilo Java: @app.route(“/”). En efecto, esa anotación indica que el servidor responderá con la función hello() cuando invoquemos la raíz del sitio… Mas que sencillo, trivial!

Una vez visto esto, tan solo nos queda realizar severas llamadas a sistema o a otras librerías en Python. Como he comentado al principio, al ser un lenguaje mas que extendido en la RasPi, no nos va a costar nada en absoluto llevar a cabo nuestras mejores ejecuciones, ya que vamos a tener muchos recursos por internet…

Para instalarlo, basta con tener nuestro sistema actualizado (recordad el ya típico apt-get update && apt-get upgrade), y proceder del siguiente modo.

Instalamos PIP, el instalador de paquetes para Python:

pi@raspberrypi ~ $ sudo apt-get install python-pip

Y posteriormente, el propio Flask:

pi@raspberrypi ~ $ sudo pip install flask

Una vez hecho etso, ya podemos probar nuestro primer script. Para ello, creamos un fichero Python, llamado server.py (por ejemplo), y añadimos el anterior código, expuesto mas arriba…

pi@raspberrypi ~ $ nano server.py

Una vez creado, lo ejecutamos:

pi@raspberrypi ~ $ python server.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Y con esto ya tenemos corriendo nuestro sencillo webserver. Para poder comprobar su funcionamiento, basta con acceder a un explorador y solicitar la url de nuestra RasPi, por defecto al puerto 5000. Esto nos retornará por pantalla un bonito “Hello World”.

Si necesitáis acceder desde fuera de vuestra RasPi, o bien queréis cambiar el puerto al 80, basta con modificar el servidor de esta manera:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)

Y al ejecutarlo, veremos que el puerto y la dirección ha cambiado. Por cierto, también he añadido un flag opcional, que indica que queremos ver trazas de debug…

Tras ejecutarlo, y acceder al server desde el navegador, podemos ver:

pi@raspberrypi ~ $ sudo python server.py
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
 * Restarting with stat

Varias cosas a comentar:

  • indicando la dirección ip 0.0.0.0 le decimos que queremos que cualquier petición externa sea servida por igual, si indicamos localhost o 127.0.0.1 sólo se admitirá llamadas desde el mismo host
  • para parar el servidor, basta hacer Ctrl+C

Y con esto finaliza la breve introducción a Flask. Espero poder demostraros mas sobre su potencia en futuros posts.

Confío que os haya parecido interesante.

 

Jordi

 

Share Button

Y llegó el día del futuro…

Así es, por fin ha llegado el gran día! El día en que Marty McFly viaja al futuro… Y es que hoy es 21 de octubre de 2015 y, teóricamente, Marty aparecerá esta tarde a eso de las 7:28 PM, hora local de Hill Valley, procedente del pasado 1985…

Regreso al Futuro

Regreso al Futuro, 21 de octubre de 2015

Como fan(ático) de la saga, no me he podido resistir a dejar constancia en mi diario de bordo de lo que sin duda es un día especial para todos aquellos adictos como yo a este increíble trilogía Regreso al Futuro, u originalmente, Back to the Future, fue dirigida y escrita por Robert Zemeckis, producida por Steven Spielberg y protagonizada por Michael J. Fox, Christopher Lloyd, Lea Thompson, Crispin Glover y Thomas F. Wilson.

A lo largo de 3 increíbles entregas de comedia y ciencia ficción, perfectamente secuenciadas, sus protagonistas nos explican cómo fue el presente, pasado y futuro (hoy!!!) visto desde los ojos de un increíble equipo de producción, allá por 1985. Sin duda, un film que no deja a nadie indiferente! Si no las has visto… a qué estás esperando!!!

Parece ser que hoy día 21 nos van a deleitar con una gran sorpresa: un cortometraje, Doc Brown Saves the World, en el que el doctor loco vuelve para salvar el mundo…

Os dejo el tráiler oficial:

Sin duda, un gran día… ¿vendrá alguien del pasado? Si es así, creo que la realidad dista bastante de lo que en su día creyó ver Marty McFly…

Feliz día X de Back to te Future!

 

Jordi

Share Button

SEAT600: San Cristóbal 2015 en Corbera de Llobregat – 12/07/2015

El pasado 12 de julio tubo lugar en Corbera de Llobregat la celebración del Día de San Cristóbal. Y como cada año, se concentraron en el pueblo algunos coches clásicos que esperaban para ser bendecidos por el cura del pueblo.

Os dejo algunas fotos del día. Espero que os gusten!

Share Button

SEAT600: Concentración de clásicos en Montjuïc – 27/06/2015

Cada último sábado de mes se celebra en Montjuïc (Barcelona) una concentración de clásicos, en la que se dan cita coches de todas las marcas, modelos y edades. El pasado día 27 de junio de 2015 asistí por primera vez con mi M40, y espero que no sea la última.

Os dejo unas fotos del encuentro.

Animaros a venir!!!

Share Button

Eclipse: proyectos en sistema de ficheros remoto

Hoy os traigo algo que acabo de aprender, después de mucho buscar por la red. Se trata de crear un proyecto en un sistema de fiecheros remoto, por tal de poder trabajar de manera idéntica a como si lo tuviéramos en nuestro propio pc.

Mi necesidad era que, para desarrollar en Raspberry Pi, lo mejor es hacerlo sobre la propia plataforma. La idea incluso os puede confundir un poco, porque el proyecto es en Nodejs, y como todos sabemos, es un lenguaje multiplataforma. Por lo tanto, podría editar y probar en local, y posteriormente, publicarlo a la Pi, pero ¿no creéis que es mas cómodo editar y publicar directamente sobre el servidor? Sobretodo cómodo, porque usando grunt podemos ver los cambios al instante, sin necesidad de tener que realizar deploys manualmente y esperar a que se publiquen los cambios.

La solución es bastante mas sencilla de lo que cabía esperar: usaremos un plugin que ya incluye las últimas versiones de Eclips, el Remote System Explorer (RSE). Su fecha de lanzamiento fue por allá en 2006, por lo que ya es un proyecto con solera, que seguramente nos va a funcionar muy bien. Este a su vez pertenece al Target Management Home.

Vamos a por ello.

Como os comentaba, yo he usado una Raspberry Pi para mi servidor / plataforma de desarrollo, pero podréis usar cualquier otro sistema, Linux o Windows, según vuestras necesidades. Paralelamente, mi Eclipse es un Spring STS, pero podéis usar cualquier otra versión.

Lo primero que haremos es buscar la perspectiva del RSE, y abrirla: Window > Open Perspective > Other… > Remote System Explorer

Open Perspective Remote System Explorer

Open Perspective Remote System Explorer

 

Una vez ya en la perspectiva del RSE, pulsaremos sobre el icono que vemos en a parte superior que es una tubería con un símbolo +. Esto es para crear una nueva conexión remota. Se nos abrirá una pantalla semejante a la que vemos a continuación, desde la que podremos seleccionar el sistema remoto al que nos conectaremos. En nuestro caso, Linux:

Selección del tipo de sistema de ficheros remoto

Selección del tipo de sistema de ficheros remoto

 

Seleccionamos Linux, pulsamos Next y a continuación se nos solicita la información del sistema remoto.

Deberemos indicar:

  • Parent profile: aquí aparecerá el nombre de nuestro host o PC
  • Host name: nombre de host o ip del sistema remoto
  • Connection name: un nombre para nuestra conexión
  • Description: una posible descripción
Descripción de la conexión

Descripción de la conexión

En el ejemplo, mi Raspberry Pi tiene la ip 192.168.1.2. Clickamos en Next… A continuación nos aparece una nueva ventana en la que se nos solicita que indiquemos el sistema de comunicación entre nuestro host y el remoto. Yo he seleccionado SSH (ssh.files), pero podéis utilizar cualquiera de los que se ofrecen. En cualquier caso, sea cual sea la opción elegida, tened en cuenta que el servidor o sistema remoto tiene activado el servicio, por ejemplo, el SSH…

Selección del tipo de conexión, SSL con SFTP

Selección del tipo de conexión, SSL con SFTP

Después de esta pantalla, podéis dar Next… hasta finalizar el proceso. Iremos con las opciones por defecto en el resto de preguntas. También podéis darle a Finish.

Tras este proceso ya tendremos disponible en nuestra vista de sistemas remotos la conexión que acabamos de crear. Como podéis ver, se llama raspberrypi, que es el nombre que le hemos dado en el momento de la creación:

Conexión Linux creada

Conexión Linux creada

Ahora ya podemos proceder a desplegar el sistema de ficheros remoto. Para ello, accedemos a la conexión raspberrypi que acabamos de crear, y desplegamos del árbol raspberrypi > Sftp Files > My Home, que nos llevará directamente al home del usuario que utilicemos en la pantalla de credenciales que se nos abrirá al mismo tiempo (es el directorio por defecto al conectarse un usuario por ssh o sftp):

Credenciales de conexión

Credenciales de conexión

 

 

Usaré el usuario raspberry/pi por defecto. Por comodidad, marcaremos las opciones Save user ID y Save password, para que no tengamos que ponerlas cada vez. Clickamos OK, y esto nos llevará al home del usuario pi mediante el explorador de sistemas remotos:

Explorador del sistema de ficheros remoto

Explorador del sistema de ficheros remoto

Como podéis comprobar, al desplegar el árbol My Home, nos muestra dos directorios, que son los que existen en el home del usuario pi. Uno de ellos se llama workspace y dentro, otro llamado homepi. Estos dos directorios los he creado yo para albergar en ellos mi proyecto, que tal y como vemos, se llamará homepi.

Ahora ya solo nos queda importar el directorio de trabajo para nuestro proyecto. Para ello, lo que haremos es clicar botón derecho sobre el directorio deseado (homepi) y en el menú emergente, seleccionaremos Import to project… si lo que queremos es importar un proyecto de Eclipse ya existente, o bien Create remote project, para crear un nuevo proyecto dentro del mismo. Yo seleccionaré esta última opción, ya que aún no disponía de ningún proyecto creado…

Seleccionamos la opción de crear o importar proyecto

Seleccionamos la opción de crear o importar proyecto

Tras esto, ya tendremos nuestro proyecto importado en el workspace de Eclipse. Su nombre es hostName_projectName, por lo que en mi caso, se me habrá creado un proyecto, vacío, con el nombre raspberrypi_homepi.

A partir de aquí ya podéis seguir trabajando con normalidad en vuestro proyecto.

A tener en cuenta, si el proyecto ya existe en el sistema de ficheros remoto, al importarlo tendrá la misma etsructura que el original, por lo que si es un proyecto con facetas especiales, es muy importante tenerlo creado antes.

Cualquier duda o comentario, ya sabéis!

Suerte, y espero que os haya parecido interesante.

Jordi

Share Button