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, 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?