viernes, 27 de junio de 2008

jesusibanez.com


Hoy hemos publicado la nueva web de Jesús Ibáñez en la que he colaborado como programador. Puesto que se trataba de un estudio de paisajismo y debía tener estilo y elegancia y no era crítico el posicionamiento en buscadores, acepté el uso de Flash. Ha sido el primer contacto con AS3 serio, ya que el Tensegrity fue sólo un experimento.

Respecto a AS2 hay algunos cambios que no me convencen en absoluto. El uso del antiguo _root no tiene nada que ver con el nuevo root lo cual complica el uso de varibles entre películas incrustadas. El orden z de los objetos (definir cuáles están encima de otros) ha cambiado también. Ya no es posible darle orden 1000 a un objeto y orden 1100 a otro.Para que un objeto se ponga encima de otro, se deben intercambiar sus posiciones para que todos estén seguidos.

Por lo demás, ActionScript sigue siendo un lenguaje de programación limitado. Creo que voy a seguir más de cerca el desarrollo de SilverLight y me voy a poner con ello cuando saque un rato.

Aprendiendo a ser geek


Entre el 16 y el 20 de Junio organicé un taller de electrónica basado en Arduino para enseñar a futuros geeks de 15 y 16 años la programación de la placa y algo de electrónica analógica.

Acostumbrado al taller del Aula de Propulsión Escópica (Enero 2008), en el que me encontré a cuarenta y cinco personas adultas escuchándome en la primera clase, hubo que enfocarla de otra forma ya que los apenas ocho asistentes estaban pensando en las vacaciones de verano y en pasar el rato de una forma entretenida. Por ello fui a lo práctico sin dar demasiadas explicaciones teóricas, que ya se darían durante el desarrollo del taller.

Puesto que era una actividad optativa en el colegio, tuve la suerte de recibir a los chavales más ingeniosos y despiertos y aunque hay que animarles mucho más que al grupo de adultos, aprenden rápido y están acostumbrados a recibir clase.



Además, promocionar la Arduino por los ámbitos docentes es bastante interesante. Es una placa que por 22-25€ nos hace entender muy rápidamente la forma de utilizar un sensor, la potencia que tiene un microcontrolador, la utilidad de multiplexores, encoders, registros de desplazamiento... Por lo que he podido ver, la clase de tecnología que se imparte en E.S.O. y Bachillerato se podría basar enteramente en esta placa y se cubriría un espectro mucho más amplio, interesante y escalable de lo que se hace ahora.

Mucho se habla del pasotismo de los adolescentes y mucho puedo hablar de lo que he visto en la misma carrera de electrónica, donde una terrorífica parte del alumnado no tenía ningún interés ni le veía las posibilidades a nada, más allá de aprobar la práctica o el examen. No creo que sea culpa suya, ni de la televisión, Wii o Internet sino de que llegados al primer laboratorio de la carrera hay alumnos que no saben hacia qué lado se aprieta un tornillo. Es cierto que es difícil tener un cuarto en casa completamente dedicado al bricolaje y al D.I.Y. como fue mi caso, pero más vale un padre/tío/profesor geek, que, ilusionado por haber encontrado la forma de arreglar un vídeo, nos haga querer llegar a saber tanto.

Organizar talleres, concursos, páginas webs, blogs e incluso contribuir a la wikipedia son acciones que no reemplazarán a un padre comprometido con la educación, pero ayudará a que el hijo se pueda buscar la vida para aprender.

Animo a todo el mundo que sepa de algún tema a organizar cursos y talleres. Si no es suficiente realización el mero hecho de darlos, hay otras motivaciones como, por ejemplo, practicar el hablar en público o que queda muy bien en el C.V. Cualquier razón para contribuir a la comunidad de conocimiento libre me parece lícita.

lunes, 26 de mayo de 2008

Tensegrity 0.1

Un tensegrity[wikipedia; inglés] es una construcción que está en equilibrio gracias a partes elásticas que estabilizan cada componente con la particularidad de que si se deforma, intentará volver a su forma original o al menos a una forma en equilibrio.

Con unos cuantos palos y unas gomas se puede construir un tensegrity casero [video youtube] que se puede simplificar bastante. Yo he hecho una esfera con sólo seis aristas, no es nada difícil.

La versión del tensegrity [flash] que he liberado es un pequeño flash hecho para probar el nuevo Adobe Flash 9. Tras leer varios comentarios positivos a favor de ActionScript 3.0 (el lenguaje de programación de Flash), decidí programar algo sencillo que consumiera CPU como es este sistema de planetas o más bien átomos.



Cada círculo es atraído por los círculos lejanos y es repelido por los cercanos, así se consiguen estructuras muy estables, moléculas. Cuando dos círculos se repelen, dibujan una línea roja. Las líneas blancas representan la fuerza con la que son atraídos hacia los círculos lejanos. Todos los círculos interactúan con todos por lo que la complejidad del cálculo crece potencialmente para cada círculo que se añade a la escena.

Además hay pequeñas fuerzas en el recuadro que empujan los círculos hacia su centro.

Me ha desilusionado bastante que el IDE (entorno de programación) de Flash siga siendo tan arcaico. He recordado mis tiempos anteriores a Visual Studio en los que para llamar a métodos había que mirar en la ayuda y documentación, cosa que con el Intellisense ha quedado sólo para casos muy concretos. Es básicamente un cuadro de texto. El code-hint sigue siendo una broma.

El rendimiento no me ha sorprendido. Sigue siendo lento al redibujar cuando disparas el número de círculos. Si se necesita hacer un sistema más complejo habrá que irse a programación a más bajo nivel o a librerías capaces de aprovechar tarjetas gráficas.

Nueva web

Éste es mi quinto o sexto blog y ésta es mi centésima web:




http://gndcontrol.com

El nombre no es fácil de decir ni tiene armonía pero es perfecto ya que voy a publicar proyectos de electrónica, música y programación. Ground Control es parte de la canción Space Oddity de Bowie, una de esas canciones perfectas. GND es la abreviatura típica de un nodo conectado a tierra en electrónica. Control es una parte bastante importante de mi rama de ingeniería.

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.