Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

lunes, 28 de noviembre de 2011

Unas vacaciones inteligentes


Durante el día de hoy (dejándome engañar, pues el tictac del reloj ha llevado a sus agujas a sobrepasar el límite de los dos minutos hasta la medianoche cuando me siento a escribir estas líneas) he podido disfrutar de una jornada vacacional de lo más enriquecedora. Hace unos días descubría que se iba a celebrar en la ETSIIT de Granada una hackatón centrada en el desafío de programación de bots con Inteligencia Artificial de Google de este año (AI Challenge. Ants) y, ni corto ni perezoso, comencé a mover hilos para intentar conseguir ese día como vacacional y poder asistir. Al final hubo suerte, y así ha sido que he podido disfrutar junto al resto de asistentes de una serie de interesantes charlas sobre diversas metaheurísticas y sus posibles aplicaciones para conseguir el objetivo propuesto: ganar en el juego de las hormigas de Google.

Las charlas, de nivel, se enriquecieron con las aportaciones de todos los asistentes, y así anduvimos debatiendo diversas tácticas y estrategias para alcanzar la victoria o, cuanto menos, no sufrir un varapalo tremendo a la primera de cambio. Volver a disfrutar del buen ambiente universitario, compartir conocimiento e impresiones con antiguos profesores y compañeros de facultad, así como con las nuevas generaciones, que vienen pisando fuerte, y enriquecernos con las impresiones e ideas de Blas, al que por fin “desvirtualicé”, gracias a su punto de vista más cercano a la Biología, fue una más que agradable recompensa ante la no menos jugosa alternativa de un día soleado y agradable en la ciudad de la Alhambra, fuera de “la Escuela”.

JJ, vehemente como él solo, nos invitó en varias ocasiones a participar en el torneo de Google y recordó que hay un concurso alternativo para miembros de la Universidad de Granada siempre y cuando se libere el código del bot programado: el conocimiento, por supuesto, libre y abierto.

Habrá que ir pensando en hacerlo. Al menos se antoja apetecible... ;)

Si quieres saber más:

lunes, 24 de octubre de 2011

Nuevas malas noticias


En las últimas semanas el blog se está convirtiendo en un obituario informático.
(format nil "DEP, tío McCarthy")
Desafortunadamente, hoy escribo para publicar otra necrológica. John McCarthy, padre de la inteligencia artificial, fallecía ayer a los 84 años de edad. Creador del lenguaje de programación LISP, ampliamente usado en el mundo de la IA, recibió el Premio Turing —el equivalente al Nobel en informática— en 1971 por sus contribuciones a este campo. Ya en 1961 vaticinó que el uso de la potencia de cálculo distribuida y las aplicaciones podrían venderse en un futuro como servicio. "La nube" conceptual (y computacional) ya estaba en su cabeza por aquel entonces.

Descanse en paz este genio adelantado a su época.

martes, 18 de octubre de 2011

La #ormiga de Langton

Uno de mis objetivos durante el presente curso académico es profundizar en algunos campos en los que la informática supone un importante apoyo para el estudio del medio ambiente y la biología. Por ejemplo, desarrollando aplicaciones que hagan uso de sistemas de información geográfica para representar la evolución de poblaciones en un determinado entorno físico. El uso de la inteligencia y la vida artificial para modelar sistemas siempre me ha interesado sobremanera y, ya que Ecología es una de las asignaturas que cursaré en Ambientales durante 2011-2012, espero poder sacar partido a mis conocimientos en la materia para adquirir otros mucho más profundos e interesantes.

Un primer paso lo ha supuesto entretenerme durante la tarde de ayer en programar un algoritmo muy básico dentro del mundo de los autómatas celulares: la hormiga de Langton. Esta primera aproximación la he desarrollado sobre un mundo bidimensional y he implementado dos tipos de malla, una cuadrada que es la que puede verse en el vídeo de ejemplo y una hexagonal, representable en el modo de texto pero de forma no muy intuitiva.

Primera versión de la hormiga de Langton (C# con un visor en modo texto)

Para quienes no la conozcáis, la hormiga de Langton consiste en un sistema determinista, dinámico y discreto, que puede entenderse como un autómata celular, una máquina de Turing bidimensional o un sistema de agentes. Aunque la versión más básica de la misma consiste en un mundo bidimensional infinito (aunque por motivos de representación suelen hacerse simulaciones con toros finitos, como es el caso de mi ejemplo, con el borde izquierdo “unido” al derecho y el superior al inferior) en el que se mueve nuestra hormiga cambiando el color de la celda sobre la que se sitúa en cada momento del tiempo, lo cierto es que resulta interesante extender las características de la hormiga para mostrar movimientos y comportamientos más complejos, como colorear de distinto modo las celdas o moverse según otros patrones o en mundos más complejos. También es posible incluir más hormigas en el sistema, por supuesto.

El comportamiento más básico de la hormiga es el siguiente:
  • Situamos la hormiga en un mundo representado por una malla cuadrada cuyas casillas pueden estar coloreadas de blanco o negro.
  • La hormiga pude moverse en la dirección de cualquiera de los cuatro puntos cardinales, siempre según las siguientes reglas (conjunto básico):
    • Si la hormiga está en una casilla blanca, gira 90º a la derecha, cambia el color de la casilla y se mueve adelante una unidad.
    • Si la hormiga está en una casilla negra, gira 90º a la izquierda, cambia el color de la casilla y se mueve adelante una unidad.
La hormiga fue descubierta al mundo en un artículo de la revista Physica D en 1986 escrito por el especialista en vida artificial (es uno de los padres fundadores de esta línea de investigación) Christopher Langton, que estudiaba por aquel entonces modelos de autómatas simples dotados de comportamientos complejos.

Un par de años después, el entonces estudiante de informática Greg Turk propuso varios ejemplos de máquinas de Turing bidimensionales que “caminaban” sobre su cinta en lugar de hacer que esta se moviese bajo las mismas. Una de esas máquinas resultó ser la hormiga de Langton, y en conjunto recibieron el evocativo nombre de turmites (“turmitas”, algo así como termitas de Turing). El matemático y divulgador A.K. Dewdney dedicó uno de sus artículos en Scientific American a este tema.

Nuestra hormiga hizo una tercera aparición dentro de los modelos para la simulación de dinámica de fluidos a niveles microscópicos en Física. Uno de estos modelos, en concreto el de de Ruijgrok-Cohen, se corresponde con el de una partícula que se mueve entre desviadores que cambian su trayectoria y que pueden ser modificados por los impactos de la misma, igual que ocurre con la hormiga de Langton y el comportamiento que presenta en la malla que comprende su mundo.

El comportamiento de la hormiga es muy curioso. Después de un periodo en el que describe unos movimientos aparentemente caóticos comienza a construir una "autopista" siguiendo un patrón que comprende 104 avances o pasos. En el vídeo que incluyo como demostración esto ocurre a partir de veinte segundos.

Mi intención es liberar el código fuente (está en C#, de ahí lo de #ormiga) que vaya generando a lo largo de mis aventuras en estos mundos virtuales, incluso el de este “periodo de repaso” a algunos sistemas realmente simples, pero lo cierto es que creo que esperaré un poco más antes de publicar el de la hormiga de Langton, ya que me gustaría hacerla mucho más configurable. Ahora mismo es posible cambiar el tipo de rejilla y usar más de un agente en ella, pero no especificar reglas de movimiento para la hormiga o, tal y como me gustaría, tener un mundo tridimensional por el que pueda moverse.

Espero que os interese el tema y que, además, sirva de punto de arranque para una serie de entradas que posiblemente se espacien pero también prolonguen en el tiempo.

miércoles, 12 de octubre de 2011

Underclocking en Granada


Overclocking es un término ampliamente difundido y reconocido por muchos usuarios de la informática, incluso por aquellos que no lo ponen nunca en práctica. Consiste, como sabréis, en aumentar la frecuencia de reloj de un dispositivo electrónico para conseguir una mayor velocidad. Con ello se incrementa el consumo de energía y, por consiguiente, requerirá una refrigeración mayor.

Frente al overclocking podemos situar el underclocking. Conocido el primero es fácil inferir en qué consistirá el segundo: en una bajada de la velocidad de reloj para reducir el consumo energético y el calentamiento del dispositivo, consiguiendo así una mayor estabilidad y que se prolongue su vida útil.

Al igual que durante el proceso de overclocking se llevarán ajustes tanto a la frecuencia del reloj de un procesador como a su voltaje, durante el underclocking se irán reduciendo paulatinamente la frecuencia de reloj y el voltaje necesarios para su funcionamiento. El ajuste de voltaje en este caso recibe el nombre de undervolting.

Aunque podría parecer un contrasentido buscar de forma activa una reducción en la velocidad de procesado de los componentes de nuestros equipos, lo cierto es que es fácil encontrar varios usos al underclocking. Entre ellos podemos citar:
  • La disminución del consumo eléctrico de los dispositivos redunda en un incremento del tiempo de uso de la batería cuando se trata de un dispositivo portátil.
  • Es posible llegar a bajar tanto la frecuencia de reloj que resultaría útil para usar en el equipo software antiguo que se ejecutaría demasiado rápido en los equipos modernos (esto es posible hacerlo también vía software, ciertamente).
  • Podemos hacer uso del equipo en ambientes más silenciosos.
Si os resulta interesante el concepto y estáis en la Campus Party Milenio de Granada durante el próximo fin de semana, seguro que os interesa la charla sobre esta disciplina que auna economía y eficiencia energética con un uso responsable de los recursos informáticos. Desde el Área de Ciencia de la Campus, de la mano de Hard-h2o y con la colaboración de la Agrupación de Voluntariado Ambiental de Santa Fe, AUCA, Rocío Serrano y un servidor aportaremos nuestro punto de vista sobre esta particular forma de usar los ordenadores, incluyendo un taller realizado por expertos del overclocking.

lunes, 10 de octubre de 2011

D.E.P. Dennis Ritchie


# include <stdio.h>

int main(void)
{
printf("Bye Dennis. We'll miss you :_( \n");
return 0;
}

jueves, 6 de octubre de 2011

D.E.P., Steve Jobs

"Si hoy fuera el último día de mi vida, ¿haría lo que voy a hacer? No hay razón para no seguir... Nadie quiere morir, incluso los que saben que van a ir al cielo. Pero hay que renovar, lo nuevo sustituye a lo viejo y así debe ser (...) A veces la vida te golpea con un ladridllo. No perdáis la fe. Estoy convencido de que la única cosa que me ha mantenido en pie ha sido amar lo que hago. Tenéis que encontrar lo que amáis. Vuestro trabajo es una parte muy importante en la vida, y la única forma de queda satisfechos es creer que estáis haciendo algo grande. Amad lo que hacéis".

Actualización a 26/10/2011: Tras las declaraciones de Stallman (tan acertadas en el fondo como desafortunadas en la forma, a mi parecer) enlazo una entrada del blog de J.J. Merelo, "Atalaya: desde la tela de araña" sobre esta cuestión.

domingo, 2 de octubre de 2011

Mi lista de libros para primero de… Informática

Leyendo el "Diario de un copépodo" hace unos días encontré una propuesta de libros para primero de Biología de lo más interesante. Su entrada partía de una idea sugerida desde "Oteando desde proa", cuya lista de libros para primero de Física también me ha encantado. De hecho, de ambos he escogido al menos un libro para primero de Ciencias Ambientales (carrera que estoy cursando ahora por la UNED): Física básica, de Antonio Fernández-Rañada, y Ecological and General Systems, de Howard T. Odum.

Al leer las entradas de sus blogs pensé en la carrera de Informática y en algunos libros y manuales que considero imprescindibles para un alumno de primero. Como ellos, me he centrado en pocos títulos y en libros que pueden servir de apoyo y referencia durante toda la carrera, aunque puedan interesar particularmente como acercamiento a las materias que se tratarán a lo largo de la misma.

El primero de los escogidos no es otro que Conferencias sobre computación, de Richard Feynman. El archiconocido físico y premio Nobel, que tanto aportara en su principal campo de investigación, dio un impulso a la computación mediante su modelo de computadora cuántica publicado a principios de los años 80 del pasado siglo. Su libro Conferencias sobre computación recoge, no obstante, los principios en que se basa la Informática, y resulta tan claro y didáctico como en sus obras sobre Física (Seis piezas fáciles, por ejemplo, es imprescindible). El libro comprende siete capítulos y nos enseña la Física subyacente en los circuitos, en qué consisten las máquinas de Turing, la teoría de la información y el teorema de Shannon, vital para la codificación de mensajes. Aunque en nuestra rama del conocimiento todo avanza a una velocidad vertiginosa, el ordenador con el que lees esta entrada sigue estando basado en la arquitectura Von Neumann al igual que el antiguo ENIAC o, mucho más recientemente, los queridos ordenadores e 8 bits.

La algoritmia es la base de la programación y vas a tener que enfrentarte a ella durante toda tu carrera (académica y profesional, si te dedicas al desarrollo de software). Aunque existen buenos libros, algunos de ellos traducidos al castellano, voy a optar por un título que está disponible en inglés y que, además, es posible descargar gratuitamente de la página de uno de los autores. Se trata de Algorithms, del profesor Christos Papadimitriou, Sanjoy Dasgupta y Umesh Vazirani. Abarca múltiples acercamientos a la resolución de problemas y una aproximación a la clase de complejidad NP-completo.

Una de las materias en las que, a mi parecer, menos se profundiza en el sistema académico actual es la Ingeniería del software. Queremos que nuestra formación sea la del ingeniero y se nos vea como a tales, pero después en el mercado laboral es difícil encontrar empresas donde se trabaje con metodologías adecuadas. Al menos en España, claro. Afortunadamente esto va ocurriendo en cada vez menos ocasiones, pero no viene mal tener una buena base de Ingeniería del software y hacerla crecer con las últimas metodologías (programación extrema, desarrollos ágiles, TDD, etcétera). Un clásico de la materia es el libro de Roger S. Pressman, Ingeniería del Software. De ahí podréis saltar a otras maravillas como The Pragmatic Programmer de Andrew Hunt y David Thomas. ;-)

Como no todo va a ser programar, un acercamiento a las redes no nos vendrá mal. No es una materia que se vea en los primeros años de la carrera pero, como pronto empezaremos a acercarnos a la misma a través de las asignaturas de sistemas operativos y similares, nunca está de más conocerla bien. Uno de los clásicos es el libro de Tanenbaum Redes de computadoras.

Por último, una de las grandes olvidadas de la titulación es la Seguridad. Resulta imprescindible, los sistemas informáticos son impensables sin ella y, sin embargo, apenas se ve de pasada en asignaturas de redes o mediante alguna optativa. Y ya que en primero veréis asignaturas como Álgebra o Matemáticas Discretas y no os dirán para qué pueden servir, os recomiendo acercaros al mundo de la criptografía y la seguridad a través de otro libro disponible gratuitamente en la red, este en español, que creo fundamental: el Libro Electrónico de Seguridad Informática y Criptografía de Jorge Ramió Aguirre.

¿Y vosotros? ¿Sin qué libros no concebís pasar por cualquiera de las carreras de Informática?

miércoles, 28 de septiembre de 2011

Nueva vuelta de tuerca a la privacidad en la nube.

Entrada publicada originariamente en el blog Lobosoft bajo el mismo título.

Quienes me conocen saben de mi escepticismo sobre la computación en la nube. No es que no me parezca un campo apasionante, que lo es, ni que reniegue de la ubicuidad de los datos y del software, pues la considero una configuración de sistemas informáticos válida e interesante hasta cierto punto y para determinados usos. Lo que no me gusta (ya no como profesional de la informática, sino como usuario de la misma) es que mis datos estén diseminados por el mundo y no sentirme dueño de mi software: que este sea única y exclusivamente un servicio (SaaS).

En lo personal he podido comprobar cómo personas cercanas a mí han sufrido problemas con la disponibilidad del servicio de aplicaciones en la nube y, aunque obviamente esto es algo que puede ocurrirnos con cualesquiera otros de cuantos están involucrados en el proceso, como el acceso a Internet por parte de nuestro proveedor, por ejemplo, lo cierto es que tener un plazo de entrega de un trabajo determinado y no poder llevarlo a cabo porque hay problemas con los servidores puede resultar algo exasperante. De cualquier forma, esto es soluble mediante replicación de servicios y una mejora de la confianza y la asistencia técnica de los mismos.


Sin embargo, que los datos se encuentren en la nube es una cuestión más delicada. ¿Qué empresa dejaría en un servidor remoto el detalle de sus operaciones contables? ¿Y los datos de sus clientes o trabajadores? ¿Almacenaríamos nuestro historial médico en un disco duro “virtual” accesible a través de Internet? ¿Quién nos asegura que los datos no serán robados, como ocurriera recientemente con las cuentas bancarias de usuarios de Sony? ¿Y que no serán usados por nuestra compañía para ofrecernos otros servicios –como publicidad personalizada– al más puro “estilo Google”?

Hasta hace poco, nadie podía asegurarnos que nuestros datos no pudieran ser robados, usados o alterados sin nuestro consentimiento y/o conocimiento. Sin embargo, esta noche leía con interés una noticia sobre un avance en la resolución de esta problemática llevado a cabo por la gente de Microsoft. Se trata de una implementación parcial de un sistema de cifrado homomórfico, en la que se permiten algunos cálculos básicos (sumas, multiplicaciones) que, no obstante, permitirán ser combinados para llevar a cabo operaciones más avanzadas, como funciones estadísticas del tipo del modelo logístico.

Este avance es importante ya que el cifrado homomórfico permitiría vislumbrar un futuro interesante para el almacenamiento de datos en la nube. Sin embargo, desde la publicación del artículo de Ronald L. Rivest en 1978 (On Data Banks And Privacy Homomorphisms) transcurrieron más de 30 años de debates hasta que se ofreció un posible escenario de resolución de un sistema de cifrado homomórfico completo. Fue en su tesis de doctorado, A Fully Homomorphic Encryption Scheme, donde Craig Gentry presentó un modelo matemático completamente funcional; con todo, la gran cantidad de cálculos necesarios para hacerlo funcionar llevaron al experto en seguridad Bruce Schneier a afirmar que transcurrirían al menos cuarenta años más hasta que pudiera ser llevado a la práctica un sistema así de complejo con el mismo rendimiento que uno que no use cifrado. Schneier llegó a sus conclusiones basándose en la ley de Moore y en los datos aportados por Gentry en un artículo acerca del cifrado homomórfico y el tiempo requerido para llevar a cabo las operaciones de búsqueda por parte de un hipotético Google que usase de este mecanismo de cifrado.

El funcionamiento básico del cifrado homomórfico es el siguiente: supongamos un esquema criptográfico con un sistema de cifrado simétrico o asimétrico donde tenemos dos funciones, C(x,k), que cifra el valor ‘x’ usando la clave ‘k’ y otra D(y,k) que descifra ‘y’ usando la clave ‘k’. Entonces podemos afirmar que

D(C(x,k),k) = x

Esto es así para cualquier sistema de cifrado. Se cumplirá que es homomórfico si además existe un conjunto de pares de funciones (F, G) tales que

D(F(C(x,k)) = G(x)

Las funciones F y G pueden ser o no la misma, pero dada F podemos saber G, y viceversa.

Como resultado de lo anterior, podemos llevar a cabo operaciones sobre los datos cifrados, sin descifrarlos, por lo que el proveedor de servicios no tiene la necesidad de almacenarlos en claro y únicamente nosotros, como clientes, tenemos acceso a los mismos sin cifrar.

¡Ay, qué feliz habría sido nuestro paso por la asignatura de matemática discreta si hubiéramos encontrado ejemplos así de prácticos en el primer año de carrera! ;)

A pesar de lo interesante del avance de Microsoft y sus aplicaciones prácticas en la nube, los esquemas de cifrado con homomorfismo parcial no son demasiado raros. Por ejemplo, uno que todos conoceréis es RSA, que es homomórfico respecto a la multiplicación. Dadas un par de claves pública y privada (K,k), para todo par de valores ‘x’ e ‘y’ se cumple que:

D(C(x*y,k),K) = x*y

Un posible escenario de uso del cifrado homomórfico podría ser el de una empresa que desee hacer uso de un servicio en la nube para almacenar datos de sus clientes. La explotación de una vulnerabilidad en el servidor podría exponer dichos datos al atacante en un sistema como los actuales y, si el servicio almacenase todos los datos cifrados como mejora de la seguridad, el acceso a los mismos sería demasiado penoso. Imaginemos que nuestra empresa desea realizar una consulta sobre sus datos de clientes para obtener aquellos residentes en una provincia determinada que hayan alcanzado un determinado volumen de compras. La consulta sobre la tabla de clientes requeriría ir descifrando cada una de las filas, comprobar si se cumplen las condiciones requeridas y devolverlo, o no, en función de ello. En un servidor que usase el cifrado homomórfico la consulta se haría sobre los datos cifrados directamente, devolviendo únicamente aquellos que se vieran afectados por la consulta y podrían ser descifrados en el propio equipo del cliente sin ser expuestos a “miradas ajenas” en ningún momento.

En resumen, se trata de un interesante avance en lo tocante a la seguridad y la privacidad en la nube, para evitar que esta devenga en nubarrón.

Para saber más:
El cuadro que ilustra la entrada es un óleo de J. M. William Turner, "Rain Cloud", y la camiseta la he encontrado en Nerdy T-Shirt.

martes, 30 de agosto de 2011

All Watched Over By Machines of Loving Grace




ALL WATCHED OVER BY MACHINES OF LOVING GRACE





I like to think (and
the sooner the better!)
of a cybernetic meadow
where mammals and computers
live together in mutually
programming harmony
like pure water
touching clear sky

I like to think
   (right now, please!)
of a cybernetic forest
filled with pines and electronics
where deer stroll peacefully
past computers as if they were flowers
with spinning blossoms.

I like to think
   (it has to be!)
of a cybernetic ecology
where we are free of our labors
and joined back to nature,
returned to our mammal
brothers and sisters,
and all watched over
by machines of loving grace.
    Me gusta pensar (¡y

cuanto antes, mejor!

en un prado cibernético

donde mamíferos y ordenadores

vivan juntos en mutua

armonía programada

como el agua pura

tocando el cielo despejado.



Me gusta pensar

     (¡ahora mismo, por favor!)

en un bosque cibernético

lleno de pinos y componentes electrónicos

donde los ciervos paseen tranquilos

entre las computadoras como si fueran flores

con pétalos que giran.



Me gusta pensar

    (¡tiene que ser!)

en una ecología cibernética

donde seamos liberados del trabajo

y volvamos a la naturaleza,

retornando a nuestros

hermanas y hermanos mamíferos,

vigilados todos

por las máquinas de amor y gracia. 





Richard Brautigan

lunes, 15 de agosto de 2011

Los dictadores benevolentes del lenguaje

Quality of implementation, however, is critically important in the satisfaction enjoyed by users of the language. It is the experiential difference between writing Ruby and JavaScript. The factor that, in my view, most affects this quality of implementation is the vision of the original creator. Where the vision is maintained by a single individual, quality thrives. Where committees determine features, quality declines inexorably: Each new release saps vitality from the language even as it appears to remedy past faults or provide new, awaited capabilities.
[...]
Benevolent dictators make decisions about the language in consultation with the community of users. They are notable for being willing to extend the spirit of the language by making hard decisions that large committees almost always eschew.
[...]
A similar benevolent dictatorship exists with C#. The language, as I have mentioned before, is remarkably well tended by a core group in Microsoft headed by Anders Hejlsberg. (Although there is an ECMA standard for C#, Microsoft is the reference implementation, and the company decides the new features.) The result is a language widely loved by its users (Miguel de Icaza: "It's a beautiful languages that is such a pleasure to program in") and admired by others. Lua, Ruby, D, and Perl are other successful instances of this model.

Leído en Dr. Dobb's. "In Praise of Benevolent Language Dictators", de Andrew Binstock.

jueves, 11 de agosto de 2011

Nueva vuelta de tuerca a la privacidad en la nube.

Quienes me conocen saben de mi escepticismo sobre la computación en la nube. No es que no me parezca un campo apasionante, que lo es, ni que reniegue de la ubicuidad de los datos y del software, pues la considero una configuración de sistemas informáticos válida e interesante hasta cierto punto y para determinados usos. Lo que no me gusta (ya no como profesional de la informática, sino como usuario de la misma) es que mis datos estén diseminados por el mundo y no sentirme dueño de mi software: que este sea única y exclusivamente un servicio (SaaS).

En lo personal he podido comprobar cómo personas cercanas a mí han sufrido problemas con la disponibilidad del servicio de aplicaciones en la nube y, aunque obviamente esto es algo que puede ocurrirnos con cualesquiera otros de cuantos están involucrados en el proceso, como el acceso a Internet por parte de nuestro proveedor, por ejemplo, lo cierto es que tener un plazo de entrega de un trabajo determinado y no poder llevarlo a cabo porque hay problemas con los servidores puede resultar algo exasperante. De cualquier forma, esto es soluble mediante replicación de servicios y una mejora de la confianza y la asistencia técnica de los mismos.


Sin embargo, que los datos se encuentren en la nube es una cuestión más delicada. ¿Qué empresa dejaría en un servidor remoto el detalle de sus operaciones contables? ¿Y los datos de sus clientes o trabajadores? ¿Almacenaríamos nuestro historial médico en un disco duro “virtual” accesible a través de Internet? ¿Quién nos asegura que los datos no serán robados, como ocurriera recientemente con las cuentas bancarias de usuarios de Sony? ¿Y que no serán usados por nuestra compañía para ofrecernos otros servicios –como publicidad personalizada– al más puro “estilo Google”?

Hasta hace poco, nadie podía asegurarnos que nuestros datos no pudieran ser robados, usados o alterados sin nuestro consentimiento y/o conocimiento. Sin embargo, esta noche leía con interés una noticia sobre un avance en la resolución de esta problemática llevado a cabo por la gente de Microsoft. Se trata de una implementación parcial de un sistema de cifrado homomórfico, en la que se permiten algunos cálculos básicos (sumas, multiplicaciones) que, no obstante, permitirán ser combinados para llevar a cabo operaciones más avanzadas, como funciones estadísticas del tipo del modelo logístico.

Este avance es importante ya que el cifrado homomórfico permitiría vislumbrar un futuro interesante para el almacenamiento de datos en la nube. Sin embargo, desde la publicación del artículo de Ronald L. Rivest en 1978 (On Data Banks And Privacy Homomorphisms) transcurrieron más de 30 años de debates hasta que se ofreció un posible escenario de resolución de un sistema de cifrado homomórfico completo. Fue en su tesis de doctorado, A Fully Homomorphic Encryption Scheme, donde Craig Gentry presentó un modelo matemático completamente funcional; con todo, la gran cantidad de cálculos necesarios para hacerlo funcionar llevaron al experto en seguridad Bruce Schneier a afirmar que transcurrirían al menos cuarenta años más hasta que pudiera ser llevado a la práctica un sistema así de complejo con el mismo rendimiento que uno que no use cifrado. Schneier llegó a sus conclusiones basándose en la ley de Moore y en los datos aportados por Gentry en un artículo acerca del cifrado homomórfico y el tiempo requerido para llevar a cabo las operaciones de búsqueda por parte de un hipotético Google que usase de este mecanismo de cifrado.

El funcionamiento básico del cifrado homomórfico es el siguiente: supongamos un esquema criptográfico con un sistema de cifrado simétrico o asimétrico donde tenemos dos funciones, C(x,k), que cifra el valor ‘x’ usando la clave ‘k’ y otra D(y,k) que descifra ‘y’ usando la clave ‘k’. Entonces podemos afirmar que

D(C(x,k),k) = x

Esto es así para cualquier sistema de cifrado. Se cumplirá que es homomórfico si además existe un conjunto de pares de funciones (F, G) tales que

D(F(C(x,k)) = G(x)

Las funciones F y G pueden ser o no la misma, pero dada F podemos saber G, y viceversa. 

Como resultado de lo anterior, podemos llevar a cabo operaciones sobre los datos cifrados, sin descifrarlos, por lo que el proveedor de servicios no tiene la necesidad de almacenarlos en claro y únicamente nosotros, como clientes, tenemos acceso a los mismos sin cifrar.

¡Ay, qué feliz habría sido nuestro paso por la asignatura de matemática discreta si hubiéramos encontrado ejemplos así de prácticos en el primer año de carrera! ;)

A pesar de lo interesante del avance de Microsoft y sus aplicaciones prácticas en la nube, los esquemas de cifrado con homomorfismo parcial no son demasiado raros. Por ejemplo, uno que todos conoceréis es RSA, que es homomórfico respecto a la multiplicación. Dadas un par de claves pública y privada (K,k), para todo par de valores ‘x’ e ‘y’ se cumple que:

D(C(x*y,k),K) = x*y

Un posible escenario de uso del cifrado homomórfico podría ser el de una empresa que desee hacer uso de un servicio en la nube para almacenar datos de sus clientes. La explotación de una vulnerabilidad en el servidor podría exponer dichos datos al atacante en un sistema como los actuales y, si el servicio almacenase todos los datos cifrados como mejora de la seguridad, el acceso a los mismos sería demasiado penoso. Imaginemos que nuestra empresa desea realizar una consulta sobre sus datos de clientes para obtener aquellos residentes en una provincia determinada que hayan alcanzado un determinado volumen de compras. La consulta sobre la tabla de clientes requeriría ir descifrando cada una de las filas, comprobar si se cumplen las condiciones requeridas y devolverlo, o no, en función de ello. En un servidor que usase el cifrado homomórfico la consulta se haría sobre los datos cifrados directamente, devolviendo únicamente aquellos que se vieran afectados por la consulta y podrían ser descifrados en el propio equipo del cliente sin ser expuestos a “miradas ajenas” en ningún momento.

En resumen, se trata de un interesante avance en lo tocante a la seguridad y la privacidad en la nube, para evitar que esta devenga en nubarrón.


Para saber más:
El cuadro que ilustra la entrada es un óleo de J. M. William Turner, "Rain Cloud", y la camiseta la he encontrado en Nerdy T-Shirt.

lunes, 1 de agosto de 2011

Playmodiator

Hace apenas unos días un amigo me hizo llegar un vídeo realizado por uno de sus compañeros de trabajo en la actualidad. Tanto me gustó que he decidido traerlo al blog, ya que se trata de un trabajo ingente, de un cúmulo de tiempo y genialidad que merece, cuanto menos, difusión y reconocimiento.

Se trata del corto “Playmodiator” de Raoul Gallego (aka Riwal). Espero que os guste y os arranque una sonrisa en este inicio de semana (y, para muchos, de mes vacacional).

miércoles, 27 de julio de 2011

Manejando minidumps en .NET

Por mucho cuidado que pongamos en la programación, por exhaustivas que sean las pruebas unitarias que dirigen nuestros desarrollos y meticulosas las personas que realicen las funcionales, de integración o aceptación, lo cierto es que de cuando en cuando nos encontraremos ante la tesitura de tener que depurar un error en nuestras aplicaciones sobre una máquina de producción. En estos equipos no tendremos disponible nuestro IDE favorito y, aparte de las trazas de depuración que podamos habilitar para ayudarnos a determinar el origen del problema, lo cierto es que a priori solo nuestra holmesiana capacidad de deducción nos ayudará a lograr nuestro objetivo.

Sin embargo, no estamos del todo “vendidos”, y además de numerosas herramientas de depuración que nos ofrece Microsoft en su paquete Debugging Tools for Windows o de instalar en .NET Reflector add-ins como Deblector –técnicas en las que entraremos más adelante– podemos hacer uso de la función de la API MiniDumpWriteDump para obtener un archivo con un volcado de memoria que nos ayude, ya en nuestra máquina de desarrollo, a depurar el problema, bien con alguna de las aplicaciones diseñadas a tal fin, bien con el propio Visual Studio que, especialmente en su versión de 2010 sobre el .NET Framework 4, cuenta con poderosas herramientas a tal fin.

Los minidumps permiten la depuración post mórtem de nuestras aplicaciones, es decir, llevarla a cabo cuando la aplicación está “muerta”. Son usados, por ejemplo, por Microsoft, cuando un usuario envía información sobre un error desde el cuadro de diálogo correspondiente de Windows XP. Un minidump consiste en un volcado de la memoria de nuestra aplicación, y mediante la carga del mismo en un depurador podremos estudiar desde el hilo en el que se produjo una determinada excepción al valor de las variables involucradas o el estado de nuestro programa. Esto lo veremos más adelante. Por lo pronto, veamos cómo podemos usar la función nativa de Windows MiniDumpWriteDump desde nuestro código.

Obvia decir que al no tratarse de una función propia del .NET Framework es necesario realizar la llamada mediante Interop. Así, lo primero es definir las estructuras de datos que necesitaremos para hacer uso de aquella y, a continuación, importar las librerías necesarias y las funciones que usaremos, tanto de la Kernel32.dll para obtener información sobre el proceso como, en el caso de MiniDumpWriteDump, Dbghelp.dll.

Según la MSDN, la sintaxis de nuestra función es:
BOOL WINAPI MiniDumpWriteDump(
__in HANDLE hProcess,
__in DWORD ProcessId,
__in HANDLE hFile,
__in MINIDUMP_TYPE DumpType,
__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Crearemos una clase que nos ofrezca el comportamiento que deseamos: un auxiliar que nos permita volcar a fichero el estado de la memoria cuando nuestro proceso capture una determinada excepción. El código podría quedar así:

    public class MiniDumpWriter
    {
        [Flags]
        public enum DumpType : uint
        {
            MiniDumpNormal = 0x00000000,
            MiniDumpWithDataSegs = 0x00000001,
            MiniDumpWithFullMemory = 0x00000002,
            MiniDumpWithHandleData = 0x00000004,
            MiniDumpFilterMemory = 0x00000008,
            MiniDumpScanMemory = 0x00000010,
            MiniDumpWithUnloadedModules = 0x00000020,
            MiniDumpWithIndirectlyReferencedMemory = 0x00000040,
            MiniDumpFilterModulePaths = 0x00000080,
            MiniDumpWithProcessThreadData = 0x00000100,
            MiniDumpWithPrivateReadWriteMemory = 0x00000200,
            MiniDumpWithoutOptionalData = 0x00000400,
            MiniDumpWithFullMemoryInfo = 0x00000800,
            MiniDumpWithThreadInfo = 0x00001000,
            MiniDumpWithCodeSegs = 0x00002000,
            MiniDumpWithoutAuxiliaryState = 0x00004000,
            MiniDumpWithFullAuxiliaryState = 0x00008000,
            MiniDumpWithPrivateWriteCopyMemory = 0x00010000,
            MiniDumpIgnoreInaccessibleMemory = 0x00020000,
            MiniDumpValidTypeFlags = 0x0003ffff,
        };

        [StructLayout(LayoutKind.Sequential, Pack = 4)]  
        struct MiniDumpExceptionInformation
        {
          public uint ThreadId;
          public IntPtr ExceptionPointers;
          [MarshalAs(UnmanagedType.Bool)]
          public bool ClientPointers;
        }

        [DllImport("dbghelp.dll",
          EntryPoint = "MiniDumpWriteDump",
          CallingConvention = CallingConvention.StdCall,
          CharSet = CharSet.Unicode,
          ExactSpelling = true, SetLastError = true)]

        static extern bool MiniDumpWriteDump(
          IntPtr hProcess,
          uint processId,
          IntPtr hFile,
          uint dumpType,
          ref MiniDumpExceptionInformation expParam,
          IntPtr userStreamParam,
          IntPtr callbackParam);

        [DllImport("kernel32.dll", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
        static extern uint GetCurrentThreadId();

        [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcess", ExactSpelling = true)]
        static extern IntPtr GetCurrentProcess();

        [DllImport("kernel32.dll", EntryPoint = "GetCurrentProcessId", ExactSpelling = true)]
        static extern uint GetCurrentProcessId();

        /// <summary>
        /// Generates a memory dump and save it into a file.
        /// </summary>
        /// <param name="fileName">The file where dump must be stored.</param>
        /// <param name="dumpType">The type of memory dump generated.</param>
        /// <returns></returns>       
        public static bool Write(string fileName, DumpType dumpType)
        {
            using (FileStream fs = new FileStream(fileName, 
                                                  FileMode.Create, 
                                                  FileAccess.Write, 
                                                  FileShare.None))
            {
                MiniDumpExceptionInformation exInfo;
                exInfo.ThreadId = GetCurrentThreadId();
                exInfo.ClientPointers = false;
                exInfo.ExceptionPointers = Marshal.GetExceptionPointers();
                
                bool value = MiniDumpWriteDump(GetCurrentProcess(),
                                               GetCurrentProcessId(),
                                               fs.SafeFileHandle.DangerousGetHandle(),
                                               (uint)dumpType,
                                               ref exInfo,
                                               IntPtr.Zero,
                                               IntPtr.Zero);                
                return value;
            }
        }
    }

Y para usarla, simplemente llamaremos al método correspondiente cuando nos interese tener un volcado de memoria, por ejemplo, cuando se produzca una excepción en nuestro programa:

 class Program
    {
        static void Main(string[] args)
        {
            try
            {
                object o = null;

                Console.WriteLine("Press ENTER to continue...");
                Console.ReadLine();

                o.ToString();

            }
            catch (System.Exception e)
            {                
                string dumpFile = @"Something\Like\lobosoft.dmp";                
                MiniDumpWriter.Write(dumpFile, MiniDumpWriter.DumpType.MiniDumpWithFullMemory);
            }
        }
    }

Hay que tener en cuenta que los ficheros generados son bastante voluminosos y que la ruta donde los guardará nuestra aplicación debe establecerse a una ubicación donde contemos con permisos suficientes como para que pueda ser escrito. Una vez generado podremos usar Visual Studio, o la Debugging Diagnostic Tool para analizar el error. Pero esto será objeto de una próxima entrada.

martes, 17 de mayo de 2011

Día de Internet 2011: ¿Llega la web 3.0?

Entre las actividades del curso de periodismo ambiental que estoy realizando se nos propuso la lectura del libro Bienvenida Web 3.0. Guía para sobrevivir en la Internet del 2011, de Eduardo Albalá, dentro de la unidad didáctica dedicada al periodismo digital visto desde la experiencia de las redes sociales. Aprovechando que hoy se celebra el Día de Internet (además del Día Internacional del Reciclaje, y es que hasta la gran red se recicla y renueva a sí misma) y que me apetecía reseñar siquiera de forma somera el libro, aquí os dejo con una entrada sobre el mismo.

El texto, que puede ser obtenido en su versión electrónica a través del enlace superior, presenta con una visión bastante clara y práctica la evolución de la red de redes en los últimos años, llevándonos de una web 2.0 en la que los usuarios tomaron el protagonismo hasta convertirse (convertirnos) en generadores de contenidos a través de los blogs, foros o redes sociales, y donde los grandes buscadores como Google tomaron relevancia gracias a potentes algoritmos de ordenación y búsqueda de contenidos con un negocio basado en la visualización (a más “impactos” más ingresos en publicidad), hacia una nueva Internet donde las aplicaciones, la computación en la nube y la semántica de los contenidos ganan terreno.

Los usuarios de esta web 3.0 podrán interactuar con la máquina sin utilizar engorrosas interfaces (teclado, ratón…) sino a través de su cuerpo gracias a tecnologías tan interesantes como el reconocimiento gestual o cámaras tridimensionales tan potentes como Kinect, de Microsoft, para la que los usuarios han desarrollado en un lapso relativamente breve de tiempo multitud de controladores y aplicaciones. Los móviles, para los que ya se preveía años atrás un mercado floreciente en la red, tanto como puerta de acceso a sus contenidos desde los navegadores (¡qué lejos quedan las páginas WAP hoy día!) como a través de aplicaciones propias, cada vez más presentes e imprescindibles en estos teléfonos inteligentes o smartphones, hoy día permiten incluso enriquecer la experiencia de usuario con interfaces avanzadas como las que permite la realidad aumentada.

La red semántica irá ganando contenido y permitirá a los usuarios realizar búsquedas mucho más potentes que las que pueda ofrecer hoy día cualquier buscador de Internet al uso, como Google o Bing entre otros. Los contenidos se ven así contextualizados, presentando interrelaciones con otra información y permitiéndoles dotarles de atributos, como si de objetos reales se tratase. Esto, junto a la intercomunicación de dispositivos (Machine to machine o M2M), la citada realidad aumentada y la inteligencia artificial (útil, por ejemplo, para el desarrollo de sistemas expertos que pueden desembocar en asistentes para los usuarios como Lucía, el bot de información al usuario de la Junta de Andalucía a través de Messenger) abre nuevos campos al uso de la informática por parte de personas que son, en gran medida, “nativos de la red”, así como a mercados que irán basándose más en la adquisición de servicios que en la publicidad: Internet deja de ser “gratis” y surgen cada vez más servicios de pago y “cotos” que dividen la red en espacios privados.

Como unión de aplicaciones y servicios surge la idea del cloud computing o la computación en la nube. Una idea tan interesante como peligrosa que abre el camino al software como servicio (SaaS), tal y como lo viene ofreciendo Google desde hace tiempo con su Google Docs, donde tanto los datos como las aplicaciones residen en la red, aislando al usuario de detalles “a bajo nivel” de las mismas (dónde residen, cómo se ejecutan, sobre qué máquinas) y permitiéndole acceder a las mismas desde cualquier lugar gracias al concepto de navegador como soporte universal para aplicaciones. En ese sentido irá enfocado el sistema operativo que la compañía desea sacar a la luz y que tiene en su Google Chrome una de sus mayores bazas. El pago por el servicio permite evitar la piratería de software y mantener un ritmo de actualizaciones muy interesante para las compañías y, a cambio, el usuario no necesita un ordenador especialmente potente ya que prácticamente la totalidad del cómputo se realiza en servidores (aparece así la noticia del nuevo portátil para la nube y, de paso, volvemos al concepto de terminal “tonto” que tanto primó en los años 80 en la informática).

Por el contrario, la nube se presenta como nubarrón cuando por problemas de servicio (de la operadora con la que tengamos contratado el acceso a Internet, por la propia compañía que nos ofrece el servicio software…) no podemos acceder a la nube y sus servicios. Aunque posiblemente muchas aplicaciones ofrezcan servicios en desconexión, como ya ocurriese con la API de Google Gears, lo cierto es que nos veríamos entonces muy limitados en cuanto a lo que podríamos hacer con nuestro ordenador. Esto sin citar los problemas de seguridad que podemos encontrarnos en la red y que ya no estará en nuestra mano gestionar, como ha ocurrido recientemente con el robo de datos personales a compañías como Sony o Microsoft, o con la gestión del servicio de almacenamiento virtual Dropbox.

Richard Stallman, el gurú del software libre y fundador de la GNU, es un duro crítico de la nube y del SaaS. El control del software para el usuario en la nube no es posible, lo que rompe con la filosofía del software libre y las libertades del mismo, a saber:
0.- Libertad de usar el programa con cualquier propósito.
1.- Libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a tus necesidades.
2.- Libertad de distribuir copias del programa, con lo cual puedes ayudar a tu prójimo.
3.- Libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que toda la comunidad se beneficie.
Personalmente, como informático concibo los cambios de Internet y de las nuevas tecnologías como un reto apasionante, pero como usuario guardo serias dudas sobre cómo podrán influir estas en nuestras vidas: si ya las cookies en el navegador supusieron en su día un duro golpe a nuestra privacidad (recuerdo cómo explicaba el concepto a mis alumnos en algún curso sobre Internet mediante el ejemplo del refinamiento de búsquedas en Amazon gracias a la información que le íbamos dando a través de búsquedas precedentes) y la publicidad de Google Ad Sense a día de hoy usa los datos de nuestra cuenta de usuario en Google (vinculada al correo de Gmail, a nuestros gustos en YouTube, a las fotos de Picasa o a las búsquedas que hacemos en el propio buscador), me cuestiono qué podrán conseguir gracias a los datos que proporcionamos en Facebook, el seguimiento a través del chip RFID que contendrá nuestro futuro móvil, o a los controvertidos datos de geolocalización que arroja el GPS del mismo.

No se trata, por supuesto, de generar miedo o reticencia al uso de Internet, pero lo que sí está claro es que, ante la nueva red, más nos vale estar informados. El libro cuyo contenido, al menos así lo he intentado, he querido haceros vislumbrar a través de la entrada, así nos lo permite. Espero que os guste.

jueves, 5 de mayo de 2011

Nuevamente viernes

Hace tiempo inicié una sección que intenté que fuese semanal llamada “¡Por fin viernes!”. En ella incluía entradas en las que cada viernes realizaba un pequeño resumen de algunas de las entradas que durante la misma había descubierto en la red y me habían parecido interesantes o hacía una reflexión en torno a lo que había ocurrido en la misma. Hoy, meses –años– después, la retomo para realizar una declaración de intenciones implícita ya que si no terminará por truncarse como tantas otras, e insuflar vida al blog. He aquí el “¡Por fin viernes!” de la primera semana de mayo de 2011 con un breve resumen de lo acontecido en la misma.

Llevo un tiempo volviendo a “reenamorarme” de la profesión y durante el último par de meses he realizado varios cursos en diversas materias (HTML5 y CSS3, diseño y programación de videojuegos en Python y J2ME, LOPD, metodologías ITIL, Silverlight, este en curso) además de seguir con otro de Periodismo Ambiental y la Licenciatura en Ciencias Ambientales. Sin embargo, me seguía faltando algo. El blog, que en el pasado tanto me llenó, continuaba inactivo. Ya en su día, años atrás, fue el motor del cambio, el que me permitió redescubrirme como informático y creo que ha llegado el momento de que vuelva a ser así. A principios de la semana me llegaba un aviso de expiración del dominio y me estuve planteando si merecía la pena seguir con él. En el último año, tras pagar el servicio de hosting a unos indeseables y que me impidiesen el acceso a mi propia cuenta apenas un par de meses después de la renovación tomé la decisión de desvincularles como contacto técnico, ponerme a mí mismo y redirigir el dominio al blog de Blogger en el que está actualmente. Me dedicaría entonces a escribir más que a administrar el sitio, pero no fue así. Tras un año de actividad prácticamente nula he decidido darle una oportunidad y aquí estoy. Con el dominio y los ánimos renovados, una cuenta de Twitter (@Lobosoft_Es) y todas las antiguas entradas que había decidido dejar atrás y que finalmente (¡ay, espíritu voluble!) he determinado incluir en el blog e ir arreglándolas, vuelvo a recuperar las ganas de escribir y experimentar... ¡o justo al contrario!

Desde comienzos del verano pasado trabajaba y escribía en mi viejo portátil con alma de GNU/Linux (en concreto, la distro gNewSense. Con la tarjeta de vídeo fastidiada, los sistemas operativos del amigo Gates apenas funcionaban un minuto antes de que la imagen se congelase y tuviera que apagar el ordenador durante bastante tiempo -de minutos a horas- antes de que volviese a funcionar). Hoy, en ese afán de renovación, he hecho mío este otro pequeño: un HP DV6-3181SS con un corazoncito i7 y bastante guerra por delante. Aunque siempre me han gustado más los sobremesa, el portátil me permitirá gozar de mayor movilidad y, por supuesto, he buscado una marca que ofreciese calidad desde la responsabilidad. La presencia de coltán en los portátiles así como el importante consumo de recursos necesario para fabricarlos hace imprescindible, a mi parecer, que pensemos mu y bien nuestras compras antes de que, llevándolas a cabo, emitamos nuestro “voto” a favor de un modelo de producción u otro. Si tenéis curiosidad, podéis leer las respuestas de HP a las cuestiones planteadas por la organización Make IT Fair, una ONG que pide que la fabricación de móviles y otros equipos electrónicos se realice de forma social y medioambientalmente responsable.

En cuanto a los eventos de la semana, ayer se celebraba en Málaga el Asegúr@IT 9, “La cabeza en las nubes, los pies en el suelo” y creo que estuvo genial. Y digo creo porque por el trabajo no pude asistir (ay, qué tiempos gloriosos los de estudiante a tiempo completo, jajaja) aunque me habría encantado. Si alguno de vosotros estuvo por allí, ¿por qué no nos pone al tanto de la jornada? ¡Ah! Y para quien quiera y pueda, el martes de la próxima semana (día 10 de mayo) hay una jornada sobre seguridad en la web también en Málaga. De momento, nada más.

¡Buen fin de semana!

jueves, 14 de abril de 2011

Despejado

Tanto desde mi perfil profesional de informático como desde mi papel de usuario de las nuevas tecnologías considero que "la nube" abre un interesante campo de trabajo, con sus luces pero también sus sombras (y muchas). Una de ellas es la falta de disponibilidad.

Esto es lo que ocurre cuando intentas consultar un documento y el cielo aparece por completo despejado:

Al final, la tormenta se forma en tu interior.

Nuevas andanzas en la web

Llevo casi tanto tiempo apartado del blog (al menos, de la forma asidua y continuada de antaño) como del desarrollo web, al menos desde que salté de los protocolos de la capa de aplicación para ponerme a juguetear con los de la de transporte, así que como no es bueno dejar olvidarse de lo que un día te satisfizo y dio de comer, me propuse no hace mucho poner al día mis conocimientos en lo que a estas tecnologías informáticas se refiere.

Hace apenas unos días me ponía manos a la obra participando en un curso de Silverlight que ha comenzado a impartir el MVP Braulio Díez en Málaga y, como adalid del software libre, he empezado a investigar un poco sobre las maravillas de HTML5, CSS3 y librerías como jQuery. El mes pasado hice un curso sobre estos, aunque me resultó demasiado básico (al menos no he olvidado demasiado, me dije), y precisamente hoy, cuando investigaba sobre el tema, me he encontrado con un movimiento por parte de IBM: el lanzamiento hace apenas unos días de su IDE “Maqetta”, de código abierto -en su licencia figura un sospechoso “commercial-friendly open source” que no sé si la acerca más a una posible Licencia BSD modificada o a una licencia Libre Académica (AFL)- y totalmente basado en HTML5: el navegador es tu amigo.

He podido probar la Preview 1 aunque no en profundidad. Sin embargo, salvo una ligera tardanza en el tiempo de respuesta cuando se realizan operaciones algo más “pesadas”, lo cierto es que el uso de la herramienta es bastante intuitivo y no se aleja demasiado del que ofrecen otras herramientas de diseño y desarrollo visuales. Dado que está enfocada a la creación de proyectos para dispositivos móviles y aplicaciones de escritorio incorpora emuladores de dispositivos para comprobar la disposición de las páginas creadas en cada uno de ellos.


Con esta herramienta, liberada a través de la Fundación Dojo, IBM plantea que cualquier desarrollador podrá hacerla crecer y plantar cara a dos soluciones tan implantadas en el mercado como Flash y Silverlight. Aunque no es fácil, ya que habitualmente van “por detrás” de lo que los productos propios de cada compañía ofrecen, lo cierto es que apostar por los estándares en un escenario tan marcado por las incompatibilidades y las “guerras de navegadores” de las diversas empresas que han entrado en juego es, hasta cierto punto, aferrarse a una tabla de salvación.

Además, entre otras funcionalidades, Maqetta cuenta con edición WYSIWYG, diseño de prototipos (website wireframing, aunque personalmente me gusta bastante Balsamiq), posibilidad de pulsar y arrastrar controles sobre la propia “piel” de un móvil, edición simultánea en modo diseño y de código fuente, un editor de temas o la posibilidad de definir interacciones con el usuario sin necesidad de programar.


En resumen, una herramienta de diseño y desarrollo que parece ofrecer funciones de lo más interesantes y que no deberíamos perder de vista. Ahora que he decidido volver a Internet, incluyendo al blog, no le quitaré ojo de encima. Si queréis descargarla, podéis hacerlo a través de su sitio web o de este enlace directo.