PHP: CORS en PHP

Recientemente me he visto en la necesidad de crear un pequeño servidor REST para una aplicación en AngularJS que necesitaba explotar los datos de una MySQL. El problema era el maldito CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) que tantos males de cabeza nos da en Angular se puede solventar de manera sencilla desde un fichero PHP, símplemente añadiendo un header:

Ahora nuestro servidor REST (fichero php) ya es CORS Compilant…

Espero que os sirva de ayuda!

Jordi

Share

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

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

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

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

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

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:

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:

Y posteriormente, el propio 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…

Una vez creado, lo ejecutamos:

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:

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:

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

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

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

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