lunes, 7 de mayo de 2012

Aventuras con python

Me he pasado a python.

Así de simple. Estaba ya harto de todas las barrabasadas y el código sucio que tenía que crear con PHP, usara el framework que usara (no se salva ni dios), así que me he liado la manta a la cabeza y voy a rehacer todo el trabajo de dos años en Python.

Lo curioso es que la mayor parte de ese trabajo ha sido corregir las cagadas del framework, adaptar lo que yo pretendía hacer al mismo y llenar todo el código de ñapas.

Así que me he pasado a Python, con Django (Web framework), con Tastypie (REST), sobre Tornado (web server) y... si me quejaba de la cantidad brutal de librerías de Java, ¡toma dos tazas! Eso sí, por primera vez desde hace mucho tiempo, me estoy centrando en crear mis aplicaciones, no en arreglar "lo de debajo".

Y a esas almas envidiosas que dicen que Python es lento unas pequeñas palabritas: ¡y una mierda!

Por primera vez desde hace algún tiempo soy feliz programando.

miércoles, 15 de febrero de 2012

¿Qué hacer durante un apagón?

No falla.

Llegas a casa después del trabajo, te reciben un par de gatas maullando como locas de alegria porque supuestamente te han echado de menos pero cuyo mayor interés es que las observes mientras usan la arena (no es coña, una de mis gatas me obliga a ir donde la arena y si yo no vigilo, se aguanta), vas a la nevera a por un red bull y algo de comer, te sientas ante el ordenador a revisar qué ha pasado por el mundo y te preparas para hacer algo productivo... no sé, revisar Menéame o algo así.

Pasan los minutos, haces cosas, y notas que en la calle ha empezado a lloviznar; lo normal en invierno.

Y sucede también algo habitual en Barcelona, cuando llueve, cuando hace sol, cuando nieva, los días de viento y los días calmados.

Un apagón.

Primero piensas "bah, vendrá la luz rápido", porque se supone que vives en una de las ciudades más modernas de Europa, en un país del primer mundo (eso dicen), en el punto de encuentro de las culturas, en la referencia del Mediterráneo, en un hervidero de startups de alta tecnología, en una ciudad orientada al turista, al que cuidan y miman y no permiten que pasen necesidades ni sufran esos pequeños inconvenientes de sus (habitualmente) frías regiones de origen.

Pero se te olvida que tú no eres un turista, eres un habitante habitual (barcelonés te llaman), que no vives en la zona turística, sino en un barrio de los de toda la vida, de esos en los que se mezclan edificios de viviendas de 9 pisos y casitas con jardín viviendo en armonía, con sus tiendas de barrio, sus agujeros en las aceras, sus casas okupadas, sus "casals" donde van los jubilados a pasar el día... vamos, que no vives en Paseo de Gracia ni cerca de El Corte Inglés.

Y la luz no viene. Las reflexiones anteriores te han llevado un par de minutos, mientras el SAI (la mejor compra que has hecho desde que vives en esta bendita ciudad) ha lanzado unos 50 pitidos avisando que no le gusta estar sin alimentación y que como no venga la luz deprisa te quedas sin internet porque el router no lleva baterías (mira, igual me pienso comprar un router a pilas).

A los 15 minutos necesitas entretenerte. Por suerte el portátil tiene batería para 1 hora y con el google talk abierto al otro lado tienes con quien charlar. No, ya no, sólo 57 minutos. Dicen que cuando mejor lo pasas el tiempo transcurre más deprisa; supongo que cuando se va la luz será la inversa: 10 segundos de tiempo real serán 3 minutos de "tiempo informático".

Es igual, necesitas diversión porque va para largo. Esperemos que no tanto como el 23 de Julio de 2007 al mediodía, el día del "gran apagón", cuando decidiste irte a tomar un granizado a un bar con aire acondicionado y al llegar descubriste que la mitad de la ciudad estaba sin electricidad. Ese día el olor a plástico quemado debería haberte advertido de que algo no iba bien... y el humo negro saliendo de la subestación eléctrica que subía a dos manzanas no presagiaba nada bueno...

Dejémoslo, vamos al presente: 20 minutos in electricidad y necesitas entretenerte.

Primero te levantas procurando no pisas a una gata mientras con el móvil iluminas un poquito el camino. Te golpeas la espinilla con la mesita del salón mientras enciendes tu última vela y miras la llama. Bonita iluminación, bonita llama, huele bien (es aromática, huele a mango). En la calle está todo como la cueva de un oso, oscura (no sé si la cuevas de oso están adoquinadas, supongo que no porque no he vivido en ninguna, aunque sí he vivido en un cuchitril que debía parecerse demasiado... y me disperso).

Vas hacia la puerta, ojeas por la mirilla, oyes a los vecinos intentando subir por las escaleras (algo difícil para algunos con andador, pero bueno...). 30 minutos sin luz.

Decides contar los pitidos del SAI, uno cada 10 segundos, impepinables: PI PI PI PI. Los cronometras para asegurarte de que no es uno cada 5 segundos, que indicaría que le quedan 15 minutos de batería. PI [10 segundos]PI [otros 10 segundos]PI[me abuuuurro]PI[voy a dar un paseo]PI[nah, vamos a seguir contando]PI[tengo hambre, voy a poner una pizza en el horn... ah no]PI[coño, el movil sin batería]PI[a la mierda!]

40 minutos sin luz.

Te pones a caminar por la zona visible y sin peligro de pisar gatas, unos tres metros cuadrados. Le interesas a una gata, te persigue, se cruza. "Gatas". "Me aburro". "Gatas". Coges en brazos a una gata que te gruñe, a la que previamente has tenido que agarrar de una pata para que no se escapase. Te gusta el riesgo y acercas tu nariz al cuello de la gata que te gruñe para hacerle carantoñas. Te gruñe. El aliento le huele a comida de gato y algo inidentificable pero que asocias con zombies. Te gruñe más y se agarra con fuerza con las uñas sacando hilos de tu jersey. Quizás va siendo hora de soltarla. Te acercas a una mesa y la dejas ir, arañándote el brazo. Dejará marca pero no hace falta betadine.

50 minutos sin luz.

"Gatas". "Me aburro". Te acuerdas de que tienes un puntero láser. Gatas + láser = diversión. Diversión para ti, para las gatas es una putada. Buscas el láser que está más allá de tus tres metros de seguridad y tiras un bolígrafo y varios papeles buscando a tientas. Quien fuese gato para ver en la oscuridad. Lo malo es el olor de aliento y la castración, pero bueno...

1 hora sin luz.

Tocotón tocotón gatas corriendo por el pasillo. Llegan a la puerta y se paran. ¿Son idiotas o qué? Tienen el láser delante de las narices y no lo persiguen. Ya no quiero ser gato, y me ahorro la castración. Ah! mira, ahora sí, que vienen, que vienen! Tocotón Tocotón y se paran.

Definitivamente los gatos son idiotas y ya llevo 1 hora y 10 minutos sin luz.

El portátil se queda sin batería, ahora tengo dos pitidos PI piiiiiii. Te despides de quien te ha estado entreteniendo y dices que si viene la luz vuelves al gtalk. Cierras todo lo que tienes abierto, las descargas de pr0n y esas cosas....

1 hora 15 minutos sin luz.

"Me aburro". No pasa nadie por la calle, está oscura, llueve. "Estoy triste y me aburro". "Tengo hambre".

1 hora y 20 minutos sin luz.

Vas a cotillear a ver si ha venido FECSA a hacer algo o siguen contando los lerus que le pagas cada mes. Probablemente será lo segundo porque priorizan muy bien: dinero antes que servicio.

Como buen cotilla hay que buscar una excusa. Recuerdas que hay varias botellas de plástico dispersas por la cocina así que las metes en una bolsa. Te pones una cazadora, te abrochas los pantalones (porque es invierno que si no te tocaría buscar los pantalones fuera de la zona de 3 metros semi iluminada). Y recuerdas que el láser también tiene un LED. Eres idiota como un gato.

1 hora 30 minutos sin luz.

Abres la puerta, sales, bajas hasta el primer descansillo iluminado por el LED del láser que como buen idiota no recordabas que tenía y...

Viene la luz.

Hay que joderse.

Te da el bajón porque ya no podrás cotillear a gusto con los vecinos criticando a la compañía eléctrica. Ya no podrás decir "siempre igual, caen 4 gotas y se rompe todo", ni tampoco dirás "como en el metro, que cuando llueve se jode y cuando hace bueno también".

Te guardas la ganas de cotillear, sales a la calle cagándote de frío y dejas la bolsa de basura en el contenedor (el de basura "normal", que el de plástico lo han puesto donde Cristo perdió las sandalias; decisiones de ayuntamiento, ya sabes, lo normal, también son idiotas).

Subes a casa y piensas: ¿en que invierten el dinero de mi factura de la luz? ¿en mariscadas y putas?

Y también piensas: Kabul-celona.

Lo malo es que no vives en la Green Zone...







lunes, 14 de noviembre de 2011

¿Errores informáticos?

Ante todo, este post no va dirigido precisamente a los profesionales del desarrollo. Así que si alguien de ese grupo me lee que no espere soluciones mágicas ni superdebuggers de la muerte. Si alguien del "otro grupo" lo lee (lo que por otra parte me haría muy feliz) que no espere compasión por mi parte. Este post trata sobre incompetencia.


Sucedió hace unos días: Francia se queda sin triple AAA debido a un error informático.

Antes había sido precedido por dos cagadas que no consiguieron achacar a las malévolas y revolucionarias máquinas: Cagada en la deuda de Alemania y Cagada en la deuda de Irlanda. Supongo que no ha de ser sencillo acusar a Microsoft por haberla pifiado al diseñar (mal) una hoja Excel.

La verdad es que los errores informáticos pululan por doquier. Ya sólo haciendo una consulta en meneame encontramos decenas de páginas llenitas de acusaciones y sospechas hacia nosotros, los pobres técnicos. No es que todos estemos libres de culpa pero es que parece que somos una panda de chapuceros y que en cualquier momento se acabará el mundo por nuestra culpa.

No voy a decir nada nuevo para quien se dedica al desarrollo (de hecho es una de nuestras máximas), pero seguro que a muchos "legos en la materia" les extraña leer esto que voy a poner:

El principal error informático se encuentra entre el ordenador y la silla.

Parecerá coña pero los ordenadores no se equivocan, son infalibles. Los ordenadores hacen lo que se les manda, ni más ni menos. Ni siquiera esos algoritmos tan chulos que hacen Google y Facebook para averiguar la marca de nuestra ropa interior servirían para mucho sin alguien que los hubiese ideado, que los estuviese revisando cada poco tiempo, que los afinase y que los probase.

Skynet no existe, y si existe todavía no tiene conciencia de sí misma. HAL 9000 no existe, y si existe, no piensa por sí mismo. Esos robotitos tan chulos de "Yo Robot" y todos los agentes Smith de Matrix sólo son pajas mentales de escritores, guionistas y plagiadores.

Un ordenador, o una red de ordenadores, o la red de ordenadores más grande del mundo no es más que una herramienta y, como todas las herramientas, está pensada para ser usada por los humanos (bueno, y por los gatos mientras esperan a que les crezcan pulgares para llevar a cabo su plan de conquista mundial). Un ordenador sin alguien que lo "alimente" es un conjunto de hierros inútiles. Sí, hasta esos de la manzanita, son poco más que pisapapeles de lujo.


Imaginemos que se produce un atropello en la calle: ¿alguien culpa al coche? O pensemos por un momento que un tren descarrilla: ¿la culpa es de la locomotora, que no frena en las curvas? O que alguien muere por un golpe con una llave inglesa: ¿metemos en la carcel a la pobre llave?

Pero claro, con los ordenadores es distinto, porque son muy listos. Están acechando y esperando a que llegue el momento adecuado y ¡Zasca! te largan un error y le quitan la triple AAA a Francia. O peor aun, se esperan a estar cerca de Marte y estrellan una sonda que vale millones de euros porque sí, porque son malévolos. Y qué decir de esos que te roban en el banco por internet cuando tú sólo estabas carteándote con el presidente de Nigeria.

Un ordenador es una máquina estúpida y detrás de esos "errores informáticos" siempre hay un grupito de humanos que la han cagado. Todavía estoy esperando el día en que un peritaje concluya que algo ha sido culpa de un ordenador; da igual que sea un accidente aéreo o un recuento de votos, quien se equivoca siempre es un humano. ¿A alguien le suena que haya sucedido? Pues a mí tampoco.

"Error informático" se usa para esconder la incompetencia de un analista económico que no sabe usar una hoja de cálculo.

"Error informático" se usa para justificar la incompetencia de una empresa al diseñar un producto informático. Bien sea por abaratar costes y contratar becarios, por ahorrarse el tiempo de probar lo que hacen o porque "da igual, ya les cobraremos el mantenimiento". Lo malo es cuando se usa "eso" en procesos electorales.

"Error informático" se usa para esconder la incompetencia de quien no hace su trabajo y espera que una máquina se lo resuelva. El error es dejarles ver pr0n en el trabajo, o haberles dado el trabajo, simplemente.

La verdad es que me apetecía desahogarme, y tampoco era cuestión de escribir un post sólo con la frase "sois una panda de ignorantes incompetentes". Es probable que mi tráfico de 3 lectores pasase a uno solo... yo mismo.

Pues eso, que la próxima vez que se os ocurra decir "error informático" os miréis las manos a ver dónde habéis metido la zarpa.

No, por mucho que os empeñéis no existen los "errores informáticos".





martes, 25 de octubre de 2011

Crónica de un roadshow (Windows Phone 7)

Ya hace más de un mes que no publico nada, entre otras cosas porque he estado haciendo cosas productivas, por ejemplo conquistar Europa con Napoleón y el Total War. Pero el tema de mi adicción a los juegos lo dejaremos para otra ocasión porque tiene demasiada chicha.

Aprovechando que el Lunes 24 de Octubre asistí a una Roadshow sobre la plataforma Windows Phone 7.5 (Mango pa los amigos) y como estoy emocionado con lo que me regalaron, pues vamos a contar qué pasó.

El evento se llamaba "Cómo desarrollar y publicar las mejores aplicaciones y juegos para Windows Phone" y el programa era el siguiente:


09:00-09:30       Registro

09:30-10:30       Por qué Windows Phone?

10:30-12:00       Plataforma de desarrollo de aplicaciones y Juegos

12:00-12:15       Descanso (café)

12.15-13:15       Datos, Servicios y "Live Tiles" (Ventanas Vivas)
13:15-14:00       Capacidades avanzadas de Windows Phone
14:00-15:00       Descanso
15.00-16:00       Multitarea en Windows Phone
16:00-16:15       Descanso
16:15-17:15       Desarrollo paso a paso y publicación de "Zombsquare"
17:15-17:45       Cómo comercializar tus aplicaciones y juegos en el Marketplace
17:45-18:00       Recursos, Ayudas e Iniciativas


La verdad, tenía bastante miedo de que se convirtiera en algo parecido a "Developers! Developers!", o peor aún, que fuese un evento de captación de adeptos al lado oscuro y que hubiese que realizar algún sacrificio de sangre. En el mejor de los casos esperaba una aburrida presentación cargada de Powerpoints contando las bondades del producto pero sin llegar a ver la potencio (o la falta de ella) de la plataforma.

Menos mal que me equivoqué.

Soy ya perro viejo en estas lides y cuando me cuentan algo nuevo, sobre todo si viene de los propios iniciadores del invento, no me suelo creer ni la mitad. Yo también he maquillado "productos" y realizado "demos" y, aunque no se me da demasiado bien el Powerpoint, sé mentir lo suficientemente bien como para vender hielo a un esquimal si hace falta. Suelo detectar desde lejos a los vendemotos, supongo que será porque he tenido que vender yo algunas y quizás las feromonas que emiten puedo olerlas a kilómetros.

Pues no es el caso y, aunque alguien pueda pensar que el lado oscuro me ha llamado a su lado, he de reconocer que Windows Phone 7.5 está bastante completo. Si Microsoft hace algo bien, como en su día .NET o hace poco con Windows 7, se merecen mis elogios. En el fondo lo suyo es un negocio, como al que podamos dedicarnos cualquiera de nosotros (de hecho creo que muy pocos estamos libres de culpa porque o curramos o hemos currado en consultoras o tenemos nuestros clientes de pago).

Lo dejaré ahí y si hace falta se comenta algo más otro día.

El Roadshow, interesante de principio a fin, excepto en un par de ocasiones en las que el hambre no me dejaba razonar. Los ponentes (Eduardo Ortega, José Antonio Gallego e Isabel Gómez) controlaban y, ojo que es importante, fueron sinceros en todo momento con las limitaciones de la plataforma, que las tiene, y algunas las he twiteado (y otras las han twiteado otros).

Hubo presentaciones, hubo mucha cháchara a alta velocidad y chascarrillos y, sobre todo, hubo demostraciones y desarrollos en directo sobre la plataforma, ahí con un par, y petando lo justo. Si todo hubiera funcionado a la primera hubiera sido sospechoso.

No es que sea un entusiasta de la GUI Metro las "Live Tiles" y esos inventos, de hecho el que esté por defecto en Windows 8 me da bastante rabia (casi tanta como que Ubuntu traiga Unity de serie, puaj!) pero ¡coño! en el móvil queda bien.

El que la GUI haya que desarrollarla con Silverlight no me acaba de gustar demasiado, igual que no me gusta el Flash al que pretendía "sustituir". Quizás podría haberse optado a la solución de Windows 8, desarrollando con HTML5, pero supongo que la fechas aprietan y cambiarlo todo ahora sería un suicidio económico. Sea como sea, hacer la GUI con Visual Studio (o Microsoft Expression Blend) es sencillo y se basa, como Android, en "atar" eventos a widgets. El SDK es gratuito así que no hay queja.

Limitaciones de la plataforma, las tiene, algunas poco comprensibles. Según nos han aclarado era por falta de tiempo y que irían siendo puestas de forma pública, aunque comenté en twitter mis sospechas de que hubiese algún SDK pro de pago con accesso a lo limitado (seguro que alguno recuerda las acusaciones de hace años de que Microsoft ocultaba partes de la API de Windows para eliminar competencia). Les daré un voto de confianza y veremos si para la próxima están corregidas.

Algunas de esas limitaciones eran bastante curiosas, como el no poder acceder a Bluetooth, o que las alarmas no funciones si el teléfono no tiene batería (esta no es de la API), o alguna otra que había con las Live Tiles y las tareas en background. En todos los casos la respuesta fue que muchas limitaciones eran para proteger al usuario de malware O.O

No sé los demás pero a mí, como desarrollador, me interesa acceder a TODO y poder especificar yo las limitaciones de mi aplicación. Por otra parte es comprensible que, ya que todas las aplicaciones se van a tener que descargar obligatoriamente desde el Zune Marketplace, quieran cubrirse las espaldas y no arriesgarse a demandas por facturas de miles de euros en SMS no solicitados, por ejemplo. Pero ya digo, como desarrollador me fastidia (por no decir me jode) que esté limitada "por la seguridad de un fulano que suele ser demasiado estúpido como para saber qué instala". Casi hubiera preferido que se hubiesen creado zonas de aplicaciones confiables en el Marketplace pero que nos dejasen la oportunidas de trastear con todo.

El Marketplace, otra historia. Son 75 euros para registrarse como desarrollador, más caro que los 30 de Android y mucho más barato que los 200 de iOS. Y se pueden "liberar" hasta tres móviles para hacer instalaciones locales. Ni bien, ni mal; me parece correcto. Tiene en común con el resto de "mercados" que las aplicaciones pr0n están vetadas. Mal, muy mal; en el pr0n se mueve mucha pasta y están echando fuera a muchos potenciales compradores de la plataforma.

También hay un programa de Ads (anuncios) e incluso un componente para meter esos Ads en las aplicaciones (de Microsoft, que es quien controla los clicks y las visualizaciones de anuncios). Curioso y creo que lo usaré nada, odio los anuncios. Probablemente me la rechacen pero mi segunda aplicación sería un eliminador de Ads y un AdBlock o algo así para el Internet Explorer del móvil. Sí, no hay Firefox, por ahora, ni Chrome y no he visto si hay Opera... una pena.

Todavía he de probar cómo se comporta el navegador con los estándares. Prometían que iba bien pero no sé yo, no me fío del Explorer.

Mi conclusión final es que no tengo conclusión porque no he podido probarlo a fondo. Lo mostrado promete mucho y la GUI Metro es curiosa y funcional. Lo que nos han mostrado me ha parecido interesante y me ha animado a desarrollar alguna cosilla para cogerle el tranquillo. Supongo que no puede ser más terrible que trabajar con Windows CE (todavía recuerdo cuando en el 2000 me hice con una PDA e intenté acceder al sensor de infrarrojos... con C++ y a pelo).

Para poner los dientes largos: regalaban 5 móviles y nos hicieron, no sé, unas 30 preguntas para ver quienes se los llevaban.

Ahora tengo sobre mi mesa uno de ellos, un LG Quantum (como el detergente), liberado y ya con la última versión de Windows Phone 7.5.

Hale, moríos de envidia.

Para una vez que gano algo...


Update: me comentan desde twitter que el SDK de Microsoft es opcional y que otras compañías también pueden ofrecerlos. Gracias por la info. Sigo odiando los Ads vengan de quien vengan :-P

jueves, 1 de septiembre de 2011

Marketing en redes sociales e idiotas con ordenador


Ayer, al destapar un yogur y dejar impoluta la tapa con mi lengua, descubrí algo que me llamó mucho la atención. Lo primero fue que normalmente el yogur se pega en grandes cantidades en el borde de la tapa y, si no tienes cuidado al lamer, te acaba salpicando. Lo segundo fue más inquietante: todavía había “premios” bajo las tapas.

Recuerdo que en mi niñez a mi madre la convencía con malas artes para que me comprase los yogures de determinada marca, no porque estuviesen más buenos, sino porque bajo las tapas había premios y, con suerte, recogías a la semana siguiente el álbum de cromos de Naranjito o el muñeco que acababa mordisqueado y olvidado bajo la cama...

Además, en el Cola Cao o tenías los muñequitos del Subbuteo o los Mini Airgamboys de Barcelona 92, o las camisetas del Mundobasket. Que le dieran po'l saco al Nesquick, aunque estaba más bueno y no te dejaba un pegote polvoroso en el fondo de la taza. El Cola Cao te regalaba cosas útiles.

Para recoger ciertos regalos tenías que enviar un carta, un cupón o lo que fuese y tú tenías tu cacho de cartón pintado y la empresa tenía tus datos y te enviaba publicidad y conocía algo más de tus hábitos de consumo.

Quid pro quo. A ti te daban un muñequito y les cedías unos datos que realmente te importaban poco. Total, que te enviasen un catálogo chorra que acababa en la basura tampoco era molesto.

A mi entender ésto no ha evolucionado demasiado a lo largo de los años. Lo que ha involucionado es la calidad de la recompensa al consumidor.

Todavía hay empresas que siguen dando “satisfacción inmediata” (de verdad que Cola Cao es honrosa en ese aspecto) pero la gran mayoría intentan saber de ti, seguirte y espiarte sin darte nada.

Y a las tapas de yogur me remito: mete un código, mete todos tus datos y adjunta un análisis de orina y una muestra de heces y entras a un sorteo de una muñeca chochona. Las tapas de yogur, los cartones de leche, el paquete de arroz o la bolsa de pañales para adultos.

Y lo peor no es que esos expertos en marketing pretendan obtenerlo todo a cambio de nada, que ya me jode bastante, sino que hay gente que gustosamente cede su vida por nada.

Ese es un consumidor estúpido. No es idiota, solo estúpido, porque no se da cuenta de que unos señores con unos trajes muy caros seguirán ganando mucho dinero gracias a varios miles de consumidores estúpidos que todavía creen en unicornios rosa.

El consumidor puede ser estúpido, pero no todos son idiotas. Sólo hay que hacerles ver que están haciendo el tonto y se acabó perder el tiempo en páginas web que, además, son horribles, hechas con Flash y que en condiciones normales no serían visitadas más que por los pobres programadores/diseñadoras a los que les toco hacerlas (vaya aquí mi condolencia para quienes tienen que sufrir tremendos engendros).

Hasta aquí mis reflexiones sobre las tapas de yogur, y ahora viene lo bueno: las campañas en Facebook y la sobreidiotización del consumidor.

Es que resulta que después de comer el yogur, y cuando la tele me pilló desprevenido sin el mando a mano para hacer zapping, me tocó sufrir uno de los anuncios más gilipollas que había visto desde lo último de Wipp Express: las maquinillas Gillete.

En ese engendro aparecen al final un montón de capturas de supuestos “comentarios de Facebook” hechos por “consumidores” alabando el deslizamiento de la susodicha maquinilla (que por otra parte es cierto, yo uso el modelo anterior y va de coña).

A ver, señores de Gillete, ¿nos han tomado a todos por GILIPOLLAS?

Todavía hay gente que no sabe cómo funciona esto de las redes sociales y podría creérselo a pies juntillas, igual que los hay que se creen los publirreportajes de la leche de turno, pero hasta el más cateto se da cuenta de que esos comentarios o han sido directamente falsificados con el Adobe Premiere de turno, o existen realmente y han sido puestos por los publicistas abriendo mil cuentas o porque sus empleados están obligados por contrato a cantar sus alabanzas en Facebook.

Hay que ser un cretino integral para ir a la página de una empresa a cantar las alabanzas de una puta maquinilla de afeitar. ¿Hay alguien que se crea que eso sucede?

Si hablásemos de teléfonos móviles, coches, vibradores... de algo satisfactorio y del que fácilmente pueden haber grupos de fans... pero, ¿de una maquinilla de afeitar?

¿De verdad se creen que somos tan imbéciles?

El problema, para mí, es que acabo de recibir un “¡Zas! ¡En toda la boca!”. Acabo de descubrir a unos 16000 idiotas, todos ellos fanáticos de una marca de agua ”ligera”.

O sea que ahora la pregunta ha cambiado, ¿cómo ese tipo de gente ha podido reproducirse?

Y hasta aquí mi disertación de hoy sobre el advenimiento de la idiocracia. Cabreado me hallo.

No tengo intención de poner enlaces a las empresas que menciono, no sólo por hacer campañas de marketing cutres en las que yo no gano nada, sino porque, principalmente, no me da la gana.

Hace un par de años, en mi temporada de navegante de Second Life escribí una pequeña serie de artículos tratando temas similares, pero orientado al marketing en ese entorno virtual. Para quien le interese: Estudio totalmente subjetivo sobreSecond Life.


Salut!











lunes, 29 de agosto de 2011

Annotations, esas desconocidas en PHP

He de reconocerlo, me encantan las annotations (attributes en .NET). Me parecen una de las herramientas mas útiles que nos puede proveer un lenguaje de programación y me pongo burro cuando las veo por algún sitio.

Ya me había acostumbrado a ellas en Java hace tiempo cuando comencé con Hibernate y más tarde seguí usándolas con .NET. Las annotations, en este caso, eran una manera de los más limpia para no tener que toquetear un xml cada vez que cambiaban los objetos de datos.

Creas tu objeto de datos y lo mapeas en dos patadas, tal que así:

@Entity
@Table( name = "EVENTS" )
public class Event {
   ...
}

Trabajo terminado.

Más o menos hace un año, mientras estaba RESTificando unga, que está programado, por ahora, con PHP, me surgieron una serie de dificultades:
- Necesitaba devolver los resultados en diferentes formatos (XML, JSON, HTML).
- PHP es un lenguaje de tipado débil y sólo en muy contadas ocasiones se puede especificar un tipo de datos.
- Con lo anterior tenía problemas para mapear números y cadenas, o incluso tipos de datos binarios sin mantener en algún sitio un objeto de conversión específico para cada tipo de datos. En Java/.NET/etc. es mucho más sencillo pues en cada momento se puede acceder al tipo de cada variable.

Cómo pasar, por ejemplo de ésto:

public class Cosa {
    public $DatoCadena = ‘pakito’;
    public $DatoFloat = 0.123;
    public $DatoEntero = 123;
    public $ArrayDeObjetos;
}

A ésto:

<?xml version="1.0" encoding="UTF-8" ?>
<Cosa>
    <DatoCadena>pakito</DatoCadena>
    <DatoFloat>0.123</DatoFloat>
    <DatoEntero>123</DatoEntero>

<ArrayDeObjetos>

    <Objeto....

    ...

</ArrayDeObjetos>
</Cosa>

O más difícil aún, ¿cómo hacerlo a la inversa? (de XML a objeto).

Recordemos: PHP es un lenguaje de tipado débil, de ahí el problema. Los Javeros, NETeros, C++eros y similares lo tienen algo más sencillo.

Hay muchas formas y podrían hacerse muchos tipos de parsers pero siempre vamos a encontrarnos con que esos parsers no van a ser genéricos y requerirán que, cada vez que se modifique una clase, se incluyan sus nuevas propiedades específicas (por ejemplo, DatoPatito, haciendo referencia a objetos de tipo Patito).

Podría delegarse la responsabilidad en cada objeto de datos, la cual fue mi primera opción, pero sería un coñazo, con el tiempo, tener que escribir las funciones de serializacion/deserialización cada vez que se crease un tipo de dato nuevo.

En mi afán de obtener grandes resultados con el mínimo esfuerzo se me ocurrió que quizás con annotations en PHP podría especificar el tipo de datos de cada propiedad y crear únicamente serializadores genéricos que no habrían de ser tocados cada vez que se crease una nueva clase.

La clase anterior bien podría quedar tal que así:

class Cosa {
    /* @type = ‘string’ */
    public $DatoCadena = ‘pakito’;
    /* @type = ‘float’ */
    public $DatoFloat = 0.123;
    /* @type = ‘integer’ */
    public $DatoEntero = 123;
    /* @type = ‘array’, @object_type=’Objeto’ */
    public $ArrayDeObjetos;
}

Limpio, claro y sin errores. Y además los componentes que tuviesen que tratar con esos objetos podrían tener especificados el tipo de datos con el que trabajarían y, si algún día hubiese que cambiarlo, sería modificar un simple parámetro. Por ejemplo:

/* @object_type = ‘Cosa’ */
public function HacerCosas {...}

Pues sí, aunque conozco a muchos desarrolladores que están en contra de estas cosas tan dinámicas, de construcción automática de código, de mapeos y de cosas así... no puedo evitarlo, a mí me gusta.

Si a la supuesta sobrecarga de la “interpretación” de PHP (medio desmentido aquí: http://www.phpclasses.org/blog/post/155-Top-10-Wrong-Ideas-About-PHP-That-You-Should-Get-Right.html ) le añades que antes ha de examinar (reflexión) las clases de datos y decodificarlas la aplicación se morirá de asco.

Yo no he notado disminución de rendimiento apreciable y sólo por la comodidad que me ofrece vale la pena la posible “pérdida” que pudiese acarrear. Hay que tener en cuenta que en los entornos de desarrollo yo no uso op-code caches ni optimizaciones de ningún tipo (memcache, caché de páginas, etc.).

Para “escoger” qué solución de Annotations era la más adecuada, en mi caso, me guié por las opciones presentadas aquí: declarative development using annotations in php. Al final me decidí por Addendum  porque no todos los hosting tienen la posibilidad de instalar PEAR y porque además podría modificarla a gusto si lo necesitase.

En unga todos los DTOs están “anotados” y me resulta muy sencillo realizar clases de serialización. Por ahora serializa para XML y JSON pero hay un futuro brillante esperando porque la era móvil me está obligando a pensarme ciertas cosas sobre la presentación.

Así que sí, PHP tiene Annotations. Y decían que no era un lenguaje serio...

Salut!

jueves, 25 de agosto de 2011

To REST or not to REST

Hay veces en las que no puedo evitar maravillarme por la raza humana. Somos capaces de crear unas herramientas increíbles y extremadamente versátiles, estudiarlas, justificarlas científicamente y analizando los pros (muchos) y los contras(escasos) de su uso... y acto seguido enviarlas a la mierda y condenarlas al ostracismo.

REST me parece uno de esos casos.

¿Qué es REST? Pues algo similar a ésto, en su forma más pura: REST en la wikipedia.

No es muy largo de leer pero por si acaso lo resumo:
- La mayor parte de las operaciones que realiza una aplicación es crear, actualizar, consultar y leer tipos de datos (clientes, productos, tweets, mensajitos de facebook, etc.) o “recursos” en la jerga. Lo que se llama CRUD.
- Si estás trabajando en la web, con el protocolo HTTP, puedes especificar la operación a realizar: get, post, put y delete (entre otras). Eso es el request method.
- Sé listo y simplifica tus aplicaciones web, que casi todas son CRUD, y no llenes de mierda las urls. Usa los “request method” http y sé limpio.

Pues no hay manera oye. Raro es el servicio web que usa “bien” REST. La gran mayoría te obligan a hacer verdaderas salvajadas del tipo:
http://servicio.com/uno/dos/tres/nombredeserviciototalmenteimposibledememorizar?op=1&papepipopu=asdf&pongaaquisusdatosinutiles

Como mucho se usa POST para enviar datos y GET para leerlos pero el resto de métodos se los han olvidado. Pero ¡ay de ti como se te olvidase la tabla de operaciones del parámetro “op”! (¿borrar era 1 o 4?)

Comprendo que quizás hace 5 o 10 años fuese difícil de hacer que un navegador enviase una petición DELETE, pero hace tiempo que estamos en la era AJAX y hacer las cosas bien y claritas no habría de ser tan complicado... ¿o será vagancia?

Sea como sea yo me he erigido a título personal en defensor del RESTarismo, soy un RESTafari de pro, y quizás fundamentalista. Desde hace ya tiempo no soporto ver código que no siga las especificaciones REST: si vas a hacer CRUD, hazlo bien, ¡carajo!.

Comprendo que hay recursos o servicios que son imposibles o dificilmente expresables usando REST, por ejemplo un servicio de login, pero para todo lo demás, teniendo en cuenta que la mayor parte de lo que hacemos es actualizar objetos : si pretendes que yo use tus APIs, facilítame el trabajo.


Al llegar a este punto voy a darme algo de autobombo con unga, mi mimadito framework PHP, está preparado para REST “puro”: implementar servicios CRUD es tan sencillo como crear un controlador y hacerlo heredar de REST_Controller (sí, mala elección de nombre, ya lo cambiaré).

Ese REST_Controller se va ocupar de recoger los parámetros de la url, recoger los datos de la petición (si los hubiese) y redirigir a la función correspondiente (create, retrieve, update, delete) según el “request method”.

Lo he hecho tan sencillo, además, que incluso no habrá que teclear ni una línea de código para llevarlo hasta la base de datos: crea una clase Model, indícale su nombre al Controlador y éste se encargará de hacerlo todo.

Es similar al scaffolding que te da Ruby on Rails pero un poco más elaborado y, sobre todo, fácilmente modificable.

¿Qué quieres obtener un dato? GET a http://servidor/servicio/objeto/id/xxxx
¿Que quieres borrar? DELETE hacia http://servidor/servicio/objeto/id/xxxx
¿Que quieres crear uno nuevo? POST a http://servidor/servicio/objeto

Más fácil, imposible. Y si además unimos que se puede filtrar por cualquier campo (id, name, product_name, manzanas, peras...), que admite filtros avanzados (<, >, like...) y que trabaja indistintamente con JSON o XML (con sus restricciones)... Es que cada vez que lo veo me beso a mí mismo.

Lástima que no esté todo lo estable que yo desearía, pero todo llegará.

En resumen, una buena parte de los servicios que pululan por internet, emulando a algunas pancartas del 15-M “lo llaman REST y no lo es”. Eso es lo que quería dejar claro: en muchos casos estamos infrautilizando la tecnología o arrastrando errores año tras año, por cabezonería (y yo el primero).

La próxima vez que tengas que hacer un CRUD: piensa en REST.

Salut!


Más información:
REST Web Services
Introducción a REST
Más REST
Presentación sobre REST