martes, 14 de agosto de 2007

Astrofoto

Este fin de semana pasado estuvimos unos amigos en una casa en el campo cerca de Madrid, para ver las perséidas, la lluvia de estrellas más famosa del año.

La verdad es que el sitio estaba bastante bien pero las nubes no nos dejaron tranquilos. No tuvimos mucha suerte con las estrellas, y vimos unas pocas nada más.

Pero aprovechando la era digital, usé la cámara de fotos compacta de un amigo para hacer unas cuantas tomas del cielo en un trípode, sin telescopio ni nada.

Hice un total de 10 fotos de 15 segundos cada una, a ISO400.

La verdad es que directamente de las fotos no se ve gran cosa. Pero para eso están los ordenadores, y hay mucho software para astrofotografía que permite "sumar" varias fotos, alineándolas previamente, y conseguir mucha más calidad y sacar lo que hay escondido.

El software que utilicé es uno de los pocos freeware, muy profesional aunque mal documentado y un poco antipático de usar. Se llama Iris, y la verdad es que es potentísimo.

Así que aquí os dejo el resultado, y como muestra, lo que se consigue con una cámara un poco más profesional y mejores cielos, detrás de la mía. Pinchadlas para verlas mejor.




Quizás tenéis problemas para ver que ambas corresponden a la misma zona de cielo (no me extraña). Os dejo otras dos versiones con una pequeña ayuda visual:




Las marcas que he hecho no corresponden con constelaciones, son simplemente "pintarrajos".

Las constelaciones de verdad que corresponden a esa zona de cielo son las siguientes:



Así que como veis, el resultado de mis experimentos es francamente mejorable, pero pueden verse estrellas hasta magnitud 8, se medio adivina medio ve la Vía Láctea, se ven los colores de las estrellas, y todo con 10 fotos hechas de mala manera con una cámara fotográfica que no está pensada para astrofotografía.

Pero algo es algo.

Saludos.

jueves, 2 de agosto de 2007

Correos temporales lucrativos.

En muchas páginas de Internet es obligatorio registrarse para acceder a los contenidos. En muchas ocasiones, este registro requiere una dirección de e-mail donde enviarán un código de activación o un link que hay que seguir para acceder a la web. Y en algunos casos, el acceso es durante un tiempo limitado, lo que nos obliga a registrarnos una y otra vez con correos distintos.

Parece que esto no se le ha escapado a alguien al que se le ha ocurrido crear un servicio de mails temporales.

Puede que haya más, pero el que a mí me han pasado es MierdaMail, nombre bastante descriptivo.

En esta web se puede crear una dirección de correo, válida durante 15 minutos prorrogables, y desde la propia página se pueden consultar los mails que llegan.

Al margen de la utilidad obvia del servicio, me ha llamado la atención el uso que hacen de la publicidad de Google.

Una vez que te dan la dirección de email, pasas a otra página de consulta, donde hay que dar a un botón grande de actualizar para ver si has recibido un mensaje.

Cuando finalmente el mensaje llega, el botón de actualizar se desplaza hacia abajo para dejar hueco al mensaje, y el anuncio de Google que había encima del botón también se desplaza. Queda estratégicamente situado donde antes estaba el botón de actualizar, lo que significa que si eres un pulsador compulsivo, dando como loco al botón de actualizar para ver si ha llegado un mensaje, terminarás pinchando en la publicidad (que es lo que más beneficios produce).

Además, en cada refresco se actualizan los anuncios, así que cuenta como dos visualizaciones. A la larga, esto también aporta beneficios, aunque generalmente no tantos como pinchar sobre el anuncio.

No sé si esta estrategia ha sido intencionada o casual, pero les ha salido redonda desde mi punto de vista. Me gustaría saber cuántas visitas tienen y qué beneficios sacan con la web.

Por lo demás, el servicio es muy útil, y aparentemente no costaría mucho desarrollarlo, para alguien que tenga un poco de experiencia en la creación de portales. Así que no me extrañaría que empiecen a salirles imitadores como moscas (si no han salido ya).

Por otro lado, el dominio mierdamail.com me imagino que tendrá una utilidad limitada. A medida que las páginas que requieren un registro se vayan dando cuenta de la estratagema, prohibirán el uso de esos correos, pero es tan fácil como registrar otro dominio y volver a empezar.

Y es que está claro que en contra de lo que quieren vendernos muchas veces, el éxito no está en un super-desarrollo sino en una idea feliz. ¡Quién las tuviera!

sábado, 21 de julio de 2007

Precios e importaciones.

Hoy sale el séptimo y último libro de Harry Potter: Harry Potter and the Deathly Hallows.

Con un dineral gastado en promoción (que en realidad no creo que necesitara) estiman vender varios millones de libros sólo el primer día.

De momento sólo está la versión en inglés. Para la versión española habrá que esperar al 2008, pero espero que sea una traducción digna, y no las porquerías que pueden verse últimamente, como ha pasado con "El espejismo de Dios", de Richard Dawkins.

Son varias las librerías en Madrid donde se puede comprar a partir de hoy mismo. Por ejemplo, en La Casa del Libro y en la FNAC, que además envían a domicilio.

En la primera, La Casa del Libro lo vende a 28.50€, gastos de envío aparte, un poco caro, pero uno podría disculparlo si tiene en cuenta que es un libro de importación.

Sin embargo, indagando un poco, he descubierto que en Play.com lo venden a 15.49€, ¡gastos de envío incluidos! Evidentemente las tiendas españolas no los importan uno a uno, sino en grandes lotes, que es más barato. Lo que significa que a ellos les ha costado mucho menos de la mitad de lo que ingresan al venderlo.

Vale, hay muchos gastos asociados a tener una tienda, pero la diferencia me parece abusiva. Creo que deberían espabilar, ahora que comprar por Internet es mucho más fácil, y lo mismo te da comprarlo aquí que allí.

Yo he hecho un simbólico gesto de protesta de la mejor forma que sabía: comprándolo en play.com.

Ahora sólo falta que me llegue, y que me entere con el inglés. Pero como me recomendó un amigo, si nunca te pones, nunca podrás.

El otro de Harry Potter que tengo en la estantería creo que me va a costar un poco más...


Saludos mágicos.

viernes, 20 de julio de 2007

Impresión en 3D

Leyendo la última entrada del blog de Wolfram Research he visto que han creado el logotipo de su compañía como objeto tridimensional usando una impresora 3D. Por lo que dice en el blog, la estrella picuda aparecerá en capítulos de la serie Numbers, pero mi apatía televisiva me impedirá comprobarlo de primera mano.

Me ha picado un poco la curiosidad y me he puesto a investigar cómo funcionan estas impresoras.

La cosa es bastante curiosa. Parece que no hay muchos fabricantes de impresoras 3D, y los que hay usan técnicas distintas. He estado viendo principalmente las de ZCorp, que tiene también representación en España.

El sistema es el siguiente:

  • Se crea el diseño del objeto 3D en el ordenador, preferiblemente importándolo de alguna otra aplicación de diseño 3D o, como han hecho en el blog del Mathematica, exportando una figura hecha en el programa. También hay scanners 3D para coger objetos reales, ideal para hacer maquetas.
  • En la aplicación de la impresora se comprueba que el objeto cumpla algunas condiciones (por ejemplo, que no haya paredes finas, tienen que ser sólidas o al menos gruesas) y se le da color, precisión, etc.
  • Se manda a la impresora para que genere el objeto.
Evidentemente la parte más interesante y novedosa es la creación del objeto en sí mismo.

Se parte de una cubeta vacía, de unos 20-25 cm cada lado. Un cabezal pasa por encima de la cubeta, poco a poco, esparciendo un polvo especial. Pone una fina capa de este polvo, como si fuera harina, de manera homogénea por toda la cubeta.

Después se rocía el polvo con un líquido que hace que el polvo se solidifique, y el cabezal sólo lo rocía en el punto concreto donde se quiere que haya objeto. De esta forma, se consigue una lámina, como si fuera un corte en horizontal del objeto final.

El proceso se vuelve a repetir, y se echa otra capa de polvo sobre la anterior, y se vuelve a rociar allí donde hay objeto, de tal forma que las capas sólidas se funden unas con otras, y donde no hay objeto, se va acumulando polvo.

Cuando el proceso ha terminado, se tiene la cubeta llena de polvo y dentro ella está el objeto sólido, formado capa a capa. Basta dejarlo secar y extraerlo con cuidado. Después se puede eliminar el polvo soplando o con ayuda de un compresor de aire.

El objeto no tiene por qué estar formado por una única pieza. Podría ser hueco, tener unas piezas dentro de otras, o incluso estar formado por piezas sueltas conectadas, como una cadena hecha de eslabones.

El objeto final en sí, formado por polvo solidificado, es bastante frágil, y recomiendan sumergirlo en algún otro material que se filtre dentro y le dé dureza, o bien darle un baño de algún material duro. Entre los productos utilizados está la cera, resina epoxy (una especie de plástico), poliuretano, etc.

En las versiones avanzadas de las impresoras, es posible darle color al objeto. No se pinta, sino que el líquido que se usa para endurecer el polvo está coloreado, cada gota de un color, de tal forma que el objeto es de verdad de ese color, y no simplemente está pintado por fuera.


El polvo que ha quedado sin endurecer se puede reutilizar perfectamente (supongo que habrá que filtrarlo para quitar residuos sólidos que hayan quedado como grumos), así que el gasto de polvo que haces depende del objeto que creas.

Aunque en las impresoras de ZCorp hay que quitar el polvo soplando, parece que en otras impresoras, que utilizan otros materiales, se puede quitar sumergiendo el objeto en un disolvente especial, que disuelve el polvo pero mantiene la parte sólida, o sometiéndolo a calor. Supongo que cada método tiene sus ventajas. También hay un polvo especial que permite hacer moldes para usar luego metal fundido.

Los resultados, desde luego, son impresionantes. Aunque no resultan prácticos para una producción en masa (son lentos, caros, frágiles...), resultan perfectos para enseñar prototipos a los clientes, ayudar a entender visualmente sistemas complejos (como motores o engranajes), o hacer objetos únicos, donde cada uno es distinto, y hacer el molde y el proceso industrial sale carísimo si haces unos pocos, y sólo compensa si se fabrican miles. Imaginad por ejemplo un órgano interno o un feto a partir de una ecografía 3D o un TAC.



Por supuesto, mi mente levemente friki le daría muchos usos, y acabaría haciendo muchas chorraditas, si no fuera por el precio.

Las impresoras cuestan entre 30.000€ y 60.000€, dependiendo del modelo, y tienen un coste de mantenimiento de unos 3.000€ anuales, al margen de los recambios y materiales. Más que asumible para muchas empresas que trabajan con objetos físicos (diseño de componentes, maquetas, arquitectura, prototipos), universidades o institutos de investigación, pero impensables para un particular.

Pero siempre me queda la esperanza de que me lean en ZCorp y me dejen jugar un día con ellas :D

viernes, 22 de junio de 2007

Evolución genética de andar por casa.

Es sorprendente lo que puede dar de sí un golpe de inspiración extralaboral en horas de trabajo.

En mi caso, mi inspirador ha sido Richard Dawkins, leyendo uno de sus libros, "El relojero ciego". Este libro habla de evolución natural darwiniana, explicándola y justificándola con ejemplos de seres vivos, y respondiendo a críticas de otros autores a la evolución.

En uno de sus apartados, Dawkins se hizo un pequeño programa informático para jugar a ver la evolución de lo que llama "bioforma", o forma de vida, bastante simple. Él crea árboles fractales, donde los genes que definen el aspecto del árbol pueden variar ligeramente.

La idea es partir de una bioforma, y mostrar una posible descendencia en la que se ha variado un gen ligeramente. La selección natural, en este caso, no es tan natural, ya que el propio Dawkins elige en cada paso qué forma de vida sobrevive y puede dar descendencia. Partiendo de un mismo punto, consigue bioformas muy vistosas como ilustra en su libro.

La idea me pareció muy atractiva, y decidí hacer algo parecido. Dawkins tenía un ordenador de 64Kb con BASIC (uno de los primeros lenguajes de programación de alto nivel). Yo tengo un buen PC y el Mathematica. No creo que compense la cabeza y los conocimientos de Dawkins, pero se hace lo que se puede.

La ventaja del sistema utilizado por Dawkins es que se puede ver la bioforma "desarrollada", es decir, de forma gráfica. Es mucho más vistoso, sobretodo para enseñar a los amigos. Pero tiene una pega: hacer un algoritmo que elija una de las mutaciones es mucho más complicado, porque a ver qué parámetros eliges para que la bioforma sea "bonita". Dawkins las elegía manualmente una a una.

Así que yo he optado por algo más sencillo y automatizable. Mis bioformas en realidad son bionúmeros. Voy a suponer que cada ente es en realidad, una lista de números, como un vector. Se podría decir que son los genes, definidos por la secuencia numérica.

De esta forma, es más fácil elegir quién sobrevive. Basta con aplicar alguna función a cada mutación y escoger un hijo basándonos en un criterio matemático.

En mi caso, he empezado con una muy simple: la supervivencia viene dada por la suma de los valores absolutos de cada número del gen. Cuanto más baja sea esta suma, mejor sobrevive.

En este caso existiría un único gen "perfecto", formado todo por ceros. Además, cualquier mutación en un gen haría que la función de supervivencia subiera o bajara.

Por tanto el proceso es el que sigue:

  • Se elige una secuencia de genes al azar, como una secuencia numérica de cualquier longitud (50 en mi caso), con valores entre -10 y 10.
  • Se crean n hijos, cada uno con una mutación. La mutación consiste en sumar o restar un pequeño valor (entre 0 y 1) a uno cualquiera de sus genes (pero sólo a uno).
  • De entre todos los hijos, calculamos su función de supervivencia y nos quedamos con el mejor.
  • Se repite el proceso todas las veces que se quiera.

Si entre mis lectores hay algún ingeniero, físico, matemático, etc. un poco avispado, habrá visto lo que significa matemáticamente este planteamiento. Se trata de una optimización numérica. Hay un objetivo final, y partiendo de un punto cualquiera, se van haciendo pequeñas mejoras hasta acercarnos (o alcanzar) el objetivo. Así que en realidad he desarrollado un método de optimización numérica basado en algoritmos genéticos, más o menos, que en cualquier caso, no es nada nuevo. Pero lo que me interesa es el camino y no el objetivo.

Suponiendo 50 genes aleatorios entre -10 y 10, con 5 hijos por generación y escogiendo siempre el hijo más cerca a mi objetivo, se puede ver la evolución aquí:
El eje vertical está en escala logarítimica de tal forma que puede verse cómo se acerca la secuencia a la secuencia "ideal" (cuanto más baja es la línea, más cerca está). Converge hacia cierto valor pero no baja más. Ninguna secuencia de mutaciones se acerca, incluso entre los mejores hijos. Al final, hay mutaciones que se alejan.

Si se aumenta el número de hijos, al haber más donde elegir, la convergencia se hace más rápida y más estable, ya que será más fácil encontrar una mutación mejor.
Aquí puede verse en rojo la evolución con 25 hijos, y en azul la anterior, con 5 hijos por generación. Claramente, con 25 hijos se mejorarían los genes.

Otra característica es que me quedo siempre con el mejor hijo. Esto es un poco artificial, porque dudo mucho que en la evolución real las pequeñas diferencias entre hermanos hagan que sólo uno sobreviva. La selección natural determinará que en un conjunto muy grande de hermanos, los que estén mejor preparados tenderán a sobrevivir más, pero será una tendencia, no un absoluto.

Así que metí un pequeño cambio en el programa. En esta ocasión, el mejor hijo tendrá un 50% de probabilidades de ser elegido. El segundo mejor hijo un 30% y el tercero un 20%.

La cosa cambia un poco, como se puede ver:

En marrón se ve cómo evolucionan 5 hijos, pero sin seleccionarse siempre la mejor mutación, sólo alguna de las mejores.

Con la función de supervivencia que he cogido (la suma de los valores absolutos de cada gen), se tienen dos consecuencias. En primer lugar, como ya he comentado, existe una combinación de genes perfecta, y cualquier otra es peor, con lo que el objetivo final está claro. Por otro lado, cada gen es independiente del resto, ya que al final se suman todos.

Para intentar cambiar estos dos factores, probé con otra función objetivo: en primer lugar calculo la diferencia de un gen con el anterior, y después, sumo estas diferencias.

¿Cómo cambia la cosa? En esta situación, hay infinitas combinaciones de genes ideales. En concreto, cuando todos los genes valen lo mismo, pero no necesariamente cero, simplemente todos iguales. En ese caso, las diferencias con el anterior valdrán cero, y la suma de las diferencias será también cero.

El otro factor que cambia es el de la independencia de los genes. Al considerarse la resta entre dos genes consecutivos, cuando varía un gen, cambian en realidad las relaciones entre dos genes. Puede darse la situación de que se sumen ambas diferencias (y quedaría el doble) o que se resten, con lo que el resultado no cambiaría, aunque cambie el gen. Espero no haberlo liado mucho :D. El caso es que algunos cambios van en buen camino, pero no son cuantificables hasta que se alcanza cierto valor.

Pero veamos cómo converge ahora una evolución cualquiera en esta situación:
En esta situación, converge peor. Más despacio (ahora hay 2000 generaciones en el gráfico en vez de 500) y más lejos del objetivo.

Pero además, se puede ver otra curiosidad. En el caso anterior, las series evolutivas convergían siempre a un valor mínimo, y se quedaban ahí oscilando un poco para arriba o para abajo. Pero en esta situación no sucede esto. Por ejemplo, aquí se pueden ver 5 evoluciones distintas a partir de los mismos genes iniciales:
No es que no se estabilice nunca, sino que se estabiliza en torno a valores distintos en cada evolución, dando saltos puntuales. Partiendo de un mismo origen, se llega a soluciones distintas.

Recuperando lo que he comentado anteriormente de que este modelo corresponde a una optimización numérica, se puede explicar este comportamiento.

En una optimización se pueden buscar mínimos locales o globales. En este caso, el algoritmo está buscando mínimos locales. Se puede ver el símil de buscar el punto más profundo en un cartón de una huevera. Si uno cambia su posición sobre la huevera sólo ligeramente (una mutación), podrá bajar o subir por la curva de la huevera. Al caer en un hoyo, nos estaremos moviendo todo el rato por el fondo de uno de los agujeros.

Sin embargo, es posible que haya otro agujero mejor en la huevera. Se necesitaría subir todo el agujero y caer en otro (una gran mutación, o una serie de malas mutaciones) para poder encontrarlo.

Curiosamente Dawkins comenta este caso como algo que realmente pasa en la vida real. Por ejemplo, los ojos de los pulpos y de los humanos son distintos. Ambos ojos evolucionaron de forma independiente, y dieron soluciones parecidas (a problemas similares, soluciones similares). Sin embargo los ojos de los pulpos son superiores a los nuestros en algunos aspectos.

Nuestros ojos podrían evolucionar hasta conseguir mejorar los aspectos en los que falla (respecto a los pulpos), pero eso requeriría un camino intermedio peor y no se llega a ese cambio ya que los cambios son pequeños, generación a generación, y los cambios a peor tienden a descartarse. Así que parece que no se van a cambiar.

Estoy abierto a cualquier sugerencia para nuevas funciones objetivos o nuevos cambios que alguien tenga curiosidad por probar.

No tengo problemas en dar el código fuente (algo caótico) para Mathematica 6.

Y hasta aquí la paja mental del mes (que es más o menos lo que actualizo el blog, una vez al mes).

Un saludo.

PD. Le agradecería a mi meneador anónimo un buen meneo, que lo voy necesitando ;)