OAuth en WebOS

Hace ya unos cuantos meses que programo asiduamente con el Framework Mojo de Palm WebOS , y para unas cuantas aplicaciones que he empezado a desarrollar, he necesitado autenticación OAuth.

Como me ha costado bastante trabajo dejar listo todo el proceso de autenticación, y estoy seguro que a muchos que desarrollen para WebOS les podría venir bien, he liberado (aprovechando para estrenar mi nueva cuenta de GitHub) una librería de autenticación OAuth para WebOS.

Además, he querido abstraerla de los dos tipos de aplicaciones con autenticación OAuth que puede haber: web application / client application. Así que he optado por hacer un pequeño hack para que, dando de alta la aplicación como web app, funcione en un terminal movil.
Si conocen un poco cómo funciona la autenticación OAuth, sabrán que al finalizar el proceso, para una web app, se realiza una redirección web en la que se envía el token de autorización como parametro GET. Esto complica la integración en una aplicación movil o de escritorio, ya que no hay url de callback posible. Por lo que el pequeño hack consiste simplemente en capturar la url de callback y parsearla para obtener el token, y luego interrumpir el proceso. De esta manera poder autenticar la aplicación como si fuese web, sin serlo.
Esto además abre el abanico de APIs con las que poder trabajar, ya que no todas están preparadas para ofrecer soporte a aplicaciones cliente. Sin embargo, todas sí soportan la integración de tipo web.

La librería la he liberado en GitHub y pueden acceder desde aquí : http://github.com/fillito/WebOS-OAuth

Es totalmente OpenSource y gratuita. E invito a todo el que se anime a “forkearla” en GitHub y mejorarla.

Espero que sea útil !

Esta semana en minube lanzamos un nuevo blog, pero esta vez un poco más especial.

Desde hace unos meses, los que desarrollamos y creamos minube, nos surgió la idea de crear un blog técnico donde contar las cosillas con las que nos vamos encontrando día a día desde el punto de vista del desarrollo. Estamos convencidos de que muchas de las cosas que hacemos, cómo solucionamos algunos problemas técnicos o simplemente cosas curiosas o interesantes relacionadas con la programación y el desarrollo, podrían ser interesantes para mucha gente.

Así que , con mucha ilusión y cariño , los que hacemos minube lanzamos haciendo.minube.com. Un blog técnico más, pero esta vez, hecho por nosotros :)

No dejéis de echarle un vistazo !

Hoy es un gran día para toda la comunidad de desarrolladores entusiastas de minube.com !

Desde hace ya unos meses, hemos estado trabajando en la preparación de una API de datos para desarrolladores. Y al fin está lista para que podáis empezar a hacer pruebas con ella (todo obra de nuestro gran arquitecto pablasso).
Creemos ciegamente que la base de una gran comunidad es el contenido generado por el usuario, y que el gran valor de una comunidad está en la utilidad que se le dé a ese contenido. No queremos ser una gran base de datos de contenido relacionado con los viajes donde la gente va llenando con sus experiencias, fotos y videos de sus viajes, sino una gran comunidad donde aportar y consultar información sobre cualquier destino. ¿Y qué mejor manera, que poniendo a disposición de todos vosotros, todo ese contenido?

Muchas de las herramientas más populares e interesantes, se convierten en increibles aplicaciones mucho más ricas al permitir hacer un mashup con otras. (salvando las diferencias…) Como es el caso del propio Google Maps. A pesar de ser una herramienta increible, haber liberado su API ha permitido que aparecieran aplicaciones igualmente impresionantes como Panoramio.
Precisamente eso es lo que queremos !

Si eres desarrollador y crees que podrías desarrollar algo interesante aprovechando el contenido que te podemos ofrecer en minube, adelante !!
La integración es muy sencilla (peticiones REST y resultados formateados en XML), la cantidad de contenido disponible sigue creciendo día a día, y por supuesto, usar nuestra API es totalmente gratuito.

Apenas hace unas horas que hemos anunciado la liberación de la API y ya hemos recibido unas cuantas solicitudes para usarla. Y aunque aún está en fase de pruebas, y esperamos poder seguir mejorandola con vuestra ayuda y en base a vuestras necesidades, estamos seguros de que no os decepcionará.

Empieza a usarla aquí
Esperamos que la disfrutes !

Un saludo !

Esta semana me he encontrado con un problema que me dió muchos quebraderos de cabeza pero que por suerte llegué a una solución :)
El problema surgía al manipular cadenas de caracteres en php codificadas en UTF-8 con funciones del tipo ucwords, strtoupper, etc...
Al pasarlas por éstas funciones, algunos caracteres se corrompían, y se guardaban erroneamente.

Indagando un poco encontré la explicación a todos éstos problemas.
Las funciones de manipulación de strings en PHP están programadas para trabajar con caracteres de 1 byte de longitud. De ésta manera, funciones como contar el número de caracteres que incluye una cadena (strlen) simplemente calcula el tamaño ocupado en memoria y divide por 1 byte. Todo esto se viene abajo al utilizar cadenas de caracteres codificadas con juegos de caracteres como UTF-8, en los que algunos caracteres pueden ocupar 2 o 3 bytes. Por lo tanto, muchas de las funciones típicas de trabajo con cadenas son peligrosas de usar si nuestros textos están codificados en UTF-8 y son susceptibles de contener éste tipo de caracteres de mayor tamaño, que al leer byte a byte, encontrará erroneamente los datos binarios correspondiente a dos (o tres) caracteres, en vez de uno.

Existe una lista de funciones "inseguras" al trabajar con cadenas con encodings que guarden caracteres de más de 1 byte. Son las siguientes :
· ord
· str_ireplace
· str_pad
· str_split
· strcasecmp
· strcspn
· stristr
· strlen
· strpos
· strrpos
· strrev
· strspn
· strtolower
· strtoupper
· substr_replace
· [l|r]trim (unicamente cuando se usa el segundo parametro)
· ucfirst
· ucwords

Si lo que necesitas es convertir toda la cadena a minúsculas (strtolower), a mayúsculas (strtoupper) o la primera letra de cada palabra a mayúsculas y el resto en minúsculas (ucwords), existe una alternativa que nos evitará tener que cambiar el encoding de nuestra cadena:

PHP:
  1. $string = mb_convert_case($string, TIPO_ACCION, "UTF-8");

Donde TIPO_ACCION  puede tomar los  siguientes valores para obtener el resultado equivalente:  "MB_CASE_LOWER" (strtolower), "MB_CASE_UPPER" (strtoupper)  , "MB_CASE_TITLE" (ucwords)

mb_convert_case es una función que permite la manipulación de los caracteres de una cadena de tipo multibyte.

Tienes muchas más funciones para cadenas multibyte.

Un saludo !