viernes, 25 de abril de 2008

I still love programming



Tengo la suerte de no ser programador e ingeniero informático a la vez. Esto me permite no tener aversión por la programación. Aquí dejo un documento sobre tres o cuatro cosas [pdf, 500KB, imperfecto inglés] que escribí ayer con una recopilación de códigos que me parecieron bonitos al escribirlos.

lunes, 14 de abril de 2008

Shine a light


No es un documental porque tiene un concierto entero, no es un concierto porque suena a disco y no es la grabación de un disco porque la ejecución es la de un directo. Es una película sin identidad, un directo artificial con una primera fila llena de modelos con tacones y vestido de cocktail. El poco material antiguo de entrevistas no es nada novedoso ni interesante. Todo está improvisado según hacen entender ya que no hay setlist hasta un segundo antes de empezar. ¿Qué hace Scorsese entonces?

sábado, 5 de abril de 2008

Tecnología de la hostelería II

(Viene de Tecnología de la hostelería)

Las centrales de reserva de hoteles firman contratos con ellos y les dan una dirección web a la que pueden acceder para actualizar sus precios y su disponibilidad. Estas webs tienen miles de visitas ya que los hoteles actualizan sus precios a menudo; hacen cambios desde una vez a la semana hasta media docena al día. Son especialmente críticas las épocas de ferias y congresos ya que hay que llenar el hotel maximizando el beneficio, atendiendo a la competencia y la tendencia de las ventas. Es injusto para el cliente pagar más por lo mismo pero muchos hoteles no podrían competir de ninguna forma.

Las páginas de administración que ponen a disposición del hotel son sorprendemente diferentes unas de otras. El objetivo es simple: Poner un precio a cada día y un número de habitaciones a la venta. Se complica considerablemente cuando existen varios tipos de habitación y uso (Doble, Triple, Apartamento, Estudio, uso individual, cama supletoria), varios tipos de ocupantes (adultos, niños, niños menores de x años), varios tipos de regímenes: (sólo alojamiento, alojamiento y desayuno, media pensión, pensión completa, todo incluido), estancias mínimas, anticipación de compra, distintos contratos dependiendo del mercado...

Tantas opciones hacen que los desarrolladores de estos paneles de administración se planteen ayudar al usuario que no tiene por qué saber nada de informática. Estas terribles ayudas derivan en páginas web que sólo funcionan en Internet Explorer, que abusan del (mal) uso de javascript
y que están hechas con frameworks y entornos WYSIWGY (What you see is what you get) como ASP.NET, que puede derivar en páginas web terribles.

Un problema de estas páginas es que no están desarrolladas para el público, son extranets a las que se accede con contraseña, por lo que el presupuesto que tienen para ello está bastante limitado. Prefieren vender más que dar mejor servicio a sus proveedores por lo que se esmeran en el front-end para clientes.

En mi trabajo he tenido que estudiarme estas páginas de arriba a abajo sin tener más que el código fuente y mis herramientas para webscraping (que merecen un post aparte). Casi todas tienen errores graves ya sea de desarrollo o de usabilidad por lo que puedo decir que he aprendido bastante sobre lo que hay que evitar.

Algunas disfunciones técnicas que me he encontrado son:
  • Un _viewstate de 100Kb. El _viewstate es un parámetro que incluyen las páginas ASP.NET. Se le conoce como la "administración de estado" ya que guarda la información (codificada) de todos los elementos de una página web como inputs de texto, etiquetas, desplegables... Guarda propiedades como el color del fondo, los items de un desplegable, la posición, etc.
  • Utilización de entornos de programación que facilitan el desarrollo. Estos entornos, entre los que se incluye ASP.NET con su _viewstate, son muy comunes. ¿Para qué pagar a un desarrollador que entienda conceptos como POST, GET, HTTP, cabeceras, variables de sesión, cookies, cachés y bases de datos, si podemos comprar por 6.000€ una aplicación que lo hace todo y poner a un becario a ejercitar el ensayo-error? Estas aplicaciones pueden ayudar mucho a agilizar el desarrollo pero hay que estudiarlas y controlarlas bien antes de empezar un proyecto. Suelen generar HTML muy, muy feo y repetir mucho código.
  • Un caso concreto de utilización de estos entornos fue una de las páginas que guardaba cada cambio que se hacía en el calendario y generaba 10 líneas javascript. ¡Cada vez que se hacía un cambio crecía el tamaño del html! Era el browser del cliente el que tenía que procesar todos los cambios, desde que se cargó el contrato. Cuando desarrollamos el webscraping estaba en 300Kb de .html y al par de meses ya ocupaba un MB.
  • Comprobar el usuario y la contraseña sólo al principio. En un entorno bajo usuario y contraseña se debe comprobar en cada página y en cada petición que el usuario es quien debería ser. Hay varios métodos para esto siendo el guardar un identificador de sesión en cookie, el más utilizado. Sin entrar en detalles, al modificar un parámetro llamado típicamente "idhotel", "idh", "id_hotel" y ponerle un número cualquiera, es fácil hacer modificaciones a hoteles a los que teóricamente no se tiene acceso. Cuando descubrimos una de estas vulnerabilidades se avisa al intermediario pero nunca han contestado. Dan ganas de irse de viaje por un euro la noche si no fuera porque el problema se lo pasan al hotel.
Sobre usabilidad y administración de tarifas:
  • De validar la página ni hablamos. Se puede ir olvidando un recepcionista de consultar una extranet desde el móvil (cosa que no veo tan descabellada) o un discapacitado de manejar centrales.
  • Hay extranets con pocas opciones que permiten introducir sólo un número de habitaciones y precio. No tienen mucho más y pueden sobrevivir sin javascript perfectamente.
  • Para configuraciones más completas se pueden basar en un precio base: al introducir el precio de la doble estándar, se genera la Doble Uso Individual un 10% más barata, una triple un 20% más cara, etc. No es nada habitual.
  • Basadas en tarifas. Las tarifas se definen por contrato previamente y se les da un nombre orientativo. Así al poner una tarifa llamada "Oferta 2" se establecería la doble a 100€, la DUI a 90€, la triple a 120€, etc. en vez de tener que especificar precio para los tres usos al cambiar de tarifa.
  • Basada en niveles. Como la basada en tarifas pero en vez de llamar "Oferta 2" a la tarifa, se le pone un precio orientativo como "100€" que corresponde con el precio, típicamente, de la habitación doble con uso doble. Es mi opción favorita.
  • Calendarios en ventanas nuevas. Ya de por sí, un pop-up es molesto, pues más lo es si es sólo para elegir una fecha.
  • Lo mejor que he visto es la extranet de atrapalo.com. Hasta te ponen comentarios para webscrapers, lo cual es un detallazo. Consiste en una tabla enorme con una columna para cada tipo de habitación, estancias mínimas y desayunos y un día para cada fila. El precio se introduce a mano al céntimo. Por javascript se puede modificar esta tabla por rangos y marca las modificaciones que se hagan a la tabla.
Nos queda mucho para erradicar la mala praxis webera. Entre las consultoras que meten ingenieros superiores que no han hecho una web en su vida y las empresillas que contratan a un becario que sabe de informática, estamos acostumbrados a que no funcionen bien las cosas.

viernes, 4 de abril de 2008

Tecnología de la hostelería

El mundo del turismo en España, aunque vivamos de él, está atrasadísimo tecnológicamente. Llevo dos años y medio peleándome con intermediarios, software de gestión hotelera, recepcionistas y una larga cola de impedimentos.

La posición media ante las mejoras tecnológicas es No me lo toques que yo me apaño con esto aunque está presente en un rango entre Yo es que no tengo ni idea hasta Este programa es una castaña. El problema se extiende desde la nulidad informática de los empleados en los hoteles y agencias (donde no puedes pretender que un usuario instale un programa) hasta la posición de los directivos y jefes que no quieren perder tiempo en mejorar ni invertir en desarrolladores que les organicen los sistemas.

Es bastante común que en vez de tener un equipo de IT en una empresa de turismo, se opte por contratar a una consultora que haga el trabajo. Evidentemente si se pide algo a una empresa que ha optado por esta forma de trabajo lo último que van a hacer es volver a llamar a la consultora para entender qué es lo que les estás ofreciendo o pidiendo. No es fácil explicar a una recepcionista que quieres realizar una conexión XML entre sistemas.

En lo que a las centrales de reserva respecta (intermediarios, puntos de venta de habitaciones de hotel), pocos quieren hablar de integraciones ni estándares. El producto que vende mi empresa hace que un recepcionista de un hotel actualice su disponibildiad y precio de forma automática en todos sus puntos de venta por lo que mi trabajo es hacer que esta conexión sea automática. El ideal para hacer esta integración se basa en un webservice por parte del intermediario al que se le envían las tarifas cuando se produce un cambio. Estos webservices suelen tener una especificación para crear un documento XML y mandarlo directamente, con una autentificación por SOAP o en el mismo XML. Es decir, un API a través de Internet.

Los intermediarios grandes como Booking, GHRS, Expedia... tienen estas integraciones definidas aunque es difícil trabajar con ellos.
  • Booking sólo permite integrar si el hotel deja de hacer cambios manualmente, lo cual huele a overbooking si se cae el sistema. Descartado.
  • GHRS tiene un captcha en su web para evitar robots que hagan webscraping pero proporciona un método de integración por webservice. Un buen día cerraron el acceso a esta integración porque decidieron que tenían que auditar los programas que enviaban los cambios. Les respondí que lo auditaran todo lo que quisieran y lleva meses caido.
  • La especificación de Expedia parece bastante completa pero aún no la he probado ya que no me han puesto en contacto con ningún técnico.
  • Hotelbeds desarrolló en 2007 su servicio para integraciones y aunque se respira cierto ambiente beta, es de las pocas centrales españolas con un equipo técnico con el que puedes hablar. Aún no la he probado en producción porque llevo semanas esperando a que me pongan un hotel complicado en el entorno de test.
  • Transhotel fue la primera empresa española que conocí con webservices. Ésta fue mi conversación en FITUR de 2007, en la que decían:
    • Os mandamos la especificación y cada vez que haya una búsqueda se os hará una consulta.
    • ¿No es más fácil que cacheeis las tarifas y la disponibilidad de cada hotel? Es un desperdicio de ancho de banda y podríais echar abajo los servidores.
    • Pues sí. Ha pasado.
    • Hay que poner servidores sólo para vosotros entonces.

    Así que a la espera de que evolucionen. ¡Si ya tienen la cache hecha! Sólo tienen que hacer un webservice que modifique los datos que se modifican mediante su extranet.
Intentaré actualizar esta lista según vayamos evolucionando pero no creo que lo haga muy a menudo, me temo.

Éstas son las empresas más avanzadas, porque "tienen" webservices. Sobre las extranets de las centrales de reservas hay mucho que decir, así que voy a ponerlo en un post aparte.

Mala fe en la w3: Softonic, experts-exchange.

- ¡No sabía que el Messenger costara 3€ ahora!
- ¿Cómo va a c...? No me digas que te lo has bajado de Softonic...
- Sí, ¡y no me funciona! jaja.

Maldito Google qué mal funciona a veces. Buscando messenger sale todo tipo de engañabobos. Incluso sospechosísimos enlaces directos a un .exe en ciertas páginas que pagan por salir en enlaces patrocinados (adwords).

Además, Google guarda los clicks de los usuarios en estas páginas y los usuarios no ayudan a bajarlas de PageRank.

Softonic es un ejemplo suave de mala fe. Aunque te lo ponen fácil para que pagues y pienses que estás en la web del producto, también se supone que te ponen un link directo al software gratuito. No te aseguran que funcione y tampoco me extrañaría que no dediquen mucho tiempo a mantenerlo actualizado.

Lo que me hace hervir la sangre es la web experts-exchange.com. Es un foro donde la gente pone sus preguntas técnicas y normalmente en el resumen que sale en Google aparece la solución. Al entrar en la página, para ampliar la información, te dice que tienes que estar suscrito para ver la respuesta. Tienen una página para buscadores y otra para humanos lo cual debería estar castigadísimo. Sería tan fácil como hacer que un crawler no resuelva su dirección a una ip del buscador y que se haga pasar por humano, falsificando también el nombre del navegador que utiliza. No hay más formas de detectar a un crawler. Si la diferencia es grande, se baja la puntuación. Aparece siempre de las primeras sobretodo al desarrollar en .net.

Si esta web es la única que tiene nuestra solución, recomiendo usar la versión cacheada que tiene Google, que está limpia y en perfecto unicode.

jueves, 3 de abril de 2008

tuenti

Hoy he visitado tuenti. Es una oficina enorme en pleno Chueca. Se habla inglés (no php, como asegura edans) y hay gráficos de tráfico en tiempo real en pantallas de tropecientas pulgadas, que parece que se regalaban. Son desarrolladores de los duros, no de los que han hecho un curso o recién licenciados. Ambiente de start-up, de ganas de hacer cosas y de mucho secretismo por todo, lo cual, con diez servidores nuevos cada semana, se entiende.

martes, 1 de abril de 2008

De daft punk a la minería de datos

En el trabajo me gusta sacar estadísticas de eventos que guardo en bases de datos. Rendimiento, velocidad, carga y cosas insustanciales que no dan para más. En mi nuevo Proyecto Secreto pretendo jugar con cargas brutales y registros exhaustivos para aunar comportamientos, relacionar datos y hacer enormes gráficas sacadas de largos procesos nocturnos.

La minería de datos consiste en analizar millones de pequeños datos. Last.fm es un ejemplo genial de ello. Una vez te registras te observan. Si abres tu winamp o tienes la mala suerte de usar tu Itunes se envía la canción que escuchas al iniciarla, así va creando un perfil sobre ti (esto se llama scrobbling, por lo visto). También al usar lastfm tienes varias opciones; escuchar música relacionada con un artista, escuchar la música de un usuario o simplemente darle a Play para que te ponga música según lo que te gusta escuchar.

Si cada uno de los usuarios de Last.fm escucha una canción cada cuatro minutos, la cantidad de información que se guarda en su base de datos debe ser impresionante. Ser el administrador de una base de datos así y entrar por las mañanas debe ser como despertarse todos los días en el Kilimanjaro. Cuantos más usuarios, menos fallo, más verdad. Diez millones de escuchas al día.

Empecé poniendo Daft Punk y Soulwax y en un par de semanas he descubierto Justice, Digitalism, Boys Noize y un montón de música electrónica francesa. También he descubierto nuevos términos para denominar música. De estos que duran dos semanas. Neo-rave o new-rave. Es como decir "música de martes por la tarde". En cualquier caso, es inspiradora. Me hace abrir el Reason todas las noches y lamentarlo por la mañana.

Para mi Proyecto Secreto he decidido guardar un registro en una enorme tabla cada vez que haya un nuevo suceso y cada día procesar los nuevos cambios para sacar estadísticas. La latencia da bastante seguridad porque si se corrompen resultados estadísticos (al utilizar estadística on-the-fly) hay poco que hacer con ellos y para el uso que les voy a dar no hay ninguna prisa. Idealmente los resultados variarán muy poco de un día a otro.

Otra razón por la que optar por un procesado periódico de estadísticas es que si se guardan eventos simples, se pueden sacar en cualquier momento otras estadísticas interesantes, que mejoren el motor de inteligencia artificial (o como se quiera llamar) y apuntarlas hacia datos del pasado para tener el dato instantáneamente en vez de esperar a que se generen.

Soy un vocoder

Este espacio se va a utilizar para dejar apuntes, tutoriales o reseñas sobre distintos temas: Electrónica, música, programación, diseño, etc.