General

You are currently browsing the archive for the General category.

El método de Euler para la aproximación de una función partiendo de un punto conocido de ésta y de su derivada.
La derivada de una función es aproximadamente:
\frac{dx\;}{dt\;} \approx \frac{x(t+h)-x(t)}{h} = f(t)

Despejando tenemos:
\begin{cases}  x(t+h) = x(t) +hf(t) \\ x(0) \mbox{ es conocido} \end{cases}

Y dando valores a t=0, h, 2h , 3h, \dots
x(h) = x(0) + hf(0)
x(2h) = x(h) + hf(h)
x(3h) = x(2h) + hf(2h)
\dots

Con lo que ya tenemos el algoritmo. Lo siguiente es la implementación en sage ploteando juntos el primer punto, los puntos calculados con el método de Euler y la función original (en linea roja) para comparar.
En este caso la función original es x = {{e}^{t}  \cos \left( t \right)}. De la que únicamente conocemos la derivada f={{e}^{t}  \cos \left(t \right)} - {{e}^{t}  \sin \left( t \right)} y el punto x(0)=1. Finalmente el algoritmo quedaría:


#Variables
var('h,t,n')
h = 1/10 #paso
puntos = 100 #puntos a calcular
#Condiciones iniciales
f = exp(t)*cos(t) - exp(t)*sin(t) #ecuacion diferencial
x = exp(t)*cos(t) #funcion original para comparar
x0 = 1 #el punto conocido

p = point((0,1))
for i in range(puntos):
    x1 = RR(x0 + h*f(i*h))
    #print x1,RR(x(i*h)),x1-RR(x(i*h))
    p += point((i*h,x1))
    x0 = x1

#graficar la funcion original junto con los puntos hallados
p += plot(x,0,puntos*h,color="red")
p

Escucho a Gabilondo y me da miedo, porque lo que oigo ya me suena, es una voz de fondo que lleva ya tiempo sonando y cada vez repite más fuerte: control, control, control.

Supongo que en tiempos de crisis algunos ven positivo cortar las tres libertades de la economía global, sin embargo es en realidad muy peligroso. David analiza muy bien el discurso y concluye que además de la crisis deberíamos temer a quienes la aprovechan para reclamar un mundo más cerrado y autoritario en nombre de una supuesta economía democrática.

Gabilondo dice:

La especulación financiera se hizo global antes de que el mundo construyera alguna estructura global

Pero a mi me parece que las casas no se empiezan por el tejado y que el significado que le da a esa afirmación no tiene pies ni cabeza, porque es una afirmación trivial.

Entiendo poquito de economía, pero tengo alguna idea de los cimientos sobre los que se ha levantado: matemáticas lineales que asumen que el mercado tiene distribución normal. Error, y de los gordos.

No lo sé, y espero investigar pronto cómo ha sido posible desarrollar la ciencia económica si la teoría está equivocada, tal vez no le prestan mucha atención y la práctica empírica se impone a la larga. Pero el caso es que sería muy interesante aplicar la Teoría del caos a la economía.

Quizás me equivoco (una vez y otra) y sean solo impresiones mías pero en un post de Juan Urrutia sobre neurología y neuroeconomía leo entre lineas un poquito de ese orden caótico no lineal que subyace en la economía.

La imparable Neuroeconomía no parece tan útil para la economía como seguramente lo es para la neurología [...] todavía estoy por ver algún experimento que me abra un camino en economía que me parezca interesante recorrer. Y, sin embargo, estoy convencido de que el cogollo de la ciencia económica es una fuente segura de ideas y de caminos a recorrer par los neurólogos

Por el momento no me importa el sentido en el que brotan las ideas en esa fuente, me interesa la implicación y vuelvo a la frase de gabilondo sobre el sistema global no construido. La economía, como todo sistema social es un sistema vivo. Y en vez de ponernos a sangrar al paciente como propone él tal vez deberíamos antes explorar y asimilar estas nuevas matemáticas de la no linealidad y obrar en consecuencia.

Audentes fortuna iuvat

Este verano no le he hecho mucho caso a mi blog. Me quedó poquito tiempo para él después de que se me cruzaran los cables y empezara a mover el culo para ganarme los garbanzos.

Un día un colega me pegó un telefonazo y me dijo: “¡Ey! No me renuevan el contrato… ¿tienes alguna idea?”. No daría un duro por ninguna de mis ideas, pero tenerlas las tengo a montones, así que sabiendo que él tenía herramientas le propuse montarnos algo por nuestra cuenta. Y ahí está, funcionando, poquito a poco: Telecomunicaciones Gemavi, o la empresa de cómo hacer ñapas con estilo.

Gemavi está superada, fue divertido y enriquecedor, aprendí mucho. Pero no me interesa pasarme la vida grimpando efes y coaxiales… Gemavi me sirve para ir acumulando un pequeñito capital que me está permitiendo desarrollar en los ratos libres otro proyecto, con otro pirado. De momento puedo decir que es un proyecto neoveneciano puro. Es arriesgado, mucho, pero a los osados les sonríe la fortuna y esta vez, de verdad, si que es apasionante :)

Construir un nodo propio en la red es divertido. Crear un blog pieza a pieza, perfeccionar el diseño, añadirle funcionalidades es una tarea continua, siempre hay algo que hacer. Alguien dijo una vez que era como cultivar un bonsai, o como contruir una isla trocito a trocito.

Ya hace mucho que a esta pequeña isla le incorporé una contextopedia, un album propio de fotos, un feevy como versión superior del clásico blogroll, la Red de minipost distribuida, etc.

Y ahora se me ocurren muchas más cosas por añadir, por ejemplo una sección de enlaces, para dejar de una vez del.icio.us, y un capricho tras el que llevo mucho tiempo: mi propia biblioteca.

La sección de enlaces ya la tengo implementada en una instalación para experimentos, la biblioteca me llevará algo más. He intentado siempre evitar por todos los medios aprender diseño web, pero me rendí hace tiempo al darme cuenta de la flexibilidad que se pierde si no eres capaz de modificar tú mismo tu blog. Por suerte (o por desgracia) tuve que programar por encargo una plataforma (blog + foros + wiki + enlaces + etc) basada en wordpress y aprendí por la fuerza.

Este es el roadmap que voy a seguir:

  • Fase cero: Documentar recursos sobre PHP, MYSQL, CSS, RSS, JQUERY, WP.
  • Fase uno: Implementar una sección de enlaces y una biblioteca.
  • Fase dos: Rediseño del blog
  • Fase tres: Huir de google gmail y reader instalando servicios en mi servidor.
  • Fase cuatro: Automatizar el sistema de backup (¡hecho!)
  • Fase cinco: Mover la isla a un servidor dedicado.

Este es el plan. Así que… ¡Allá voy!

Hace poco Kevin Kelly publicaba un artículo muy interesante sobre la perpetuación de la información almacenada. El debate no es nuevo: nuestra información desde la implantación de la revolución digital es rápidamente caduca y difícilmente recuperable debido a los soportes y la codificación respectivamente. ¿Alguien cree que dentro de 20 años podremos recuperar la información de nuestros actuales DVD’s? Hoy día es muy dificil recuperar la información de un disquette de 3″ 1/2 ya ni digamos de uno de 5″ 1/4. Y eso respecto al soporte, en cuanto a la codificación yo mismo tengo ficheros de mis primeros videojuegos que programé con 15 años y que corren en Windows 95… Prácticamente irrecuperables.

En el artículo se habla de la presentación (tras casi diez años de trabajo) del Rosetta disk. Un disco de larga duración que almacena a escala microscópica aproximadamente 13000 páginas en 1500 lenguajes diferentes. Un legado de información para las próximas generaciones.

Toda una proeza.

Sin embargo leo el último artículo de David sobre multilingüísmo y el contraste clama al cielo, el mundo anglo nos ofrece petrificar las lenguas, conservar un fosil para cuando dentro de tres, cinco o diez generaciones toda “la humanidad” hable inglés. Los anglófonos son sordos, ya lo sabemos, pero a mí me parece que además son ciegos: David relata un mundo que ya existe y que cada vez se hará más presente, ciudades-metrópoli como tablero de juego neoveneciano, donde coexistiran en una estructura fractal miles de lenguas distintas y vivas.

La lengua articula el pensamiento, y es la misma lengua la rejilla sobre la cual se cultivan las redes. Por eso si queremos que nuestras redes sean verdaderamente nuestras tenemos que emitir en nuestras lenguas (sean las que sean), solo así nuestra red creará un marco conversacional importante, digno de ser escuchado por otros.

En un mundo transnacional, verdaderamente globalizado, en cada ciudad-metrópoli, un precioso fractal de flores-red se abrirá y su esplendor será como un sonido selvático en el que si escuchamos directamente, sin filtros, lo que oiremos será diversidad, a cada comunidad real emitiendo sus pensamientos, proclamando su modo de vida y defendiendo sus intereses.

Puede resultar útil integrar ciertos feeds en un wiki, por ejemplo podemos crear una categoría de miniposts llamada “wiki” en el blog e ir anotando allí los cambios y las nuevas referencias que vamos introduciendo en el wiki, tomamos el feed de esa categoría y lo incluimos en la portada del wiki en una sección a modo “cambios recientes”.

Para conseguirlo utilizamos el programa Magpie a través de la extensión Feedimport para Mediawiki, el proceso es muy sencillo:

  1. Descargamos Magpie y lo colocamos por ejemplo en ~/lib/Magpie

  2. Colocamos el fichero feedimport.php en el directorio de extensiones de Mediawiki:
    ~/mediawiki/extensions

  3. Editamos feedimport.php para configurar el directorio en el que se encuentra Magpie:
    # define location of magpie
    define('MAGPIE_DIR', '/home/janzo/lib/magpierss/');

  4. Y editamos el fichero de configuración de Mediawiki (LocalSettings.php) para incluir la extensión, añadiendo la siguiente linea:
    require_once("$IP/extensions/feedimport.php");

  5. Para utilizarlo editamos cualquier página en Mediawiki:
    <rss>http://nonumerable.net/feed|max=5|template=Template:FEED</rss>

  6. Y configuramos la apariencia en una plantilla (en este caso FEED) con el formato:
    : [{{{link}}} {{{title}}}]
    :: {{{description}}}
    :: {{{dc_creator}}} {{{date}}}

Actualización

  • La prueba de funcionamiento en este minipost y en la portada de mi contextopedia.
  • Como Mediawiki hace los enlaces a su forma particular para que un link aparezca en ambos el formato debe ser la combinación siguiente: <a href="http://micontextopedia/articulo">[[articulo]]</a>

La meditación como régimen de entrenamiento emocional y de atención es objeto de estudio en este artículo en Trends in Cognitive Sciences.
El potencial regulatorio de esta práctica sobre los procesos de atención y emoción podrían tener un impacto a largo plazo sobre el cerebro y la conducta.

Un estudio muy interesante, que además abstrae las dos principales técnicas de meditación: “focused atention” y “open monitoring” preparando unas bases para la investigación en un campo tan complejo debido sobre todo a las dificultades para realizar experimentos. Para el futuro quedan abiertas las siguientes cuestiones:

  • ¿Cual es el impacto de la meditación en niños y ancianos? ¿Cual es la dosis óptima de meditación segun edades? Más ampliamente ¿Cómo afecta la meditación en el marco del desarrollo en la vida?
  • ¿Qué técnicas se ajustan mejor a cada individuo?
  • ¿Cuales son las consecuencias biológicas periféricas? ¿Podemos utilizar la meditación para examinar los mecanismos de interacción mente-cuerpo?

Referencias:
Resumen y artículo en inglés.
Neurociencia y la meditación de atención. Con-ciencia..
Neuroscience of meditation and attention. Mind Hacks.

Activar el protocolo ed2k para el navegador firefox y que al pinchar sobre un link a un fichero descargable pase directamente a la lista de descargas de la mula es sencillo.

En mi caso utilizo amule, por lo que primero instalo los útiles de consola amule-utils. Después en firefox abrimos la pestaña de configuración about:config e introducimos dos configuraciones:

network.protocol-handler.external.ed2k boolean true
network.protocol-handler.app.ed2k string /usr/bin/ed2k

Y listo. Si se comete algún error, para borrar una linea de configuración buscaríamos el fichero prefs.js y tras cerrar el navegador haríamos una copia de seguridad y lo editaríamos borrando la entrada erronea.

Atención al comentario que me acaba de dejar Damián, de lógica y concisión envidiables. Me ha hecho especial ilusión porque el artículo en el que comenta me costó lo suyo escribirlo y ha generado un buen debate en comentarios, me gusta saber que de vez en cuando alguien del nivel intelectual de Pere Quintana o Damián lee las tonterías que escribo.

indianosLa semana pasada me fui de visitas por Madrid. Primero con los amigos de las indias, que me acogieron unos días y de los cuales aprendí un montón de cosas. En esos días hicieron la migración al nuevo servidor y doy fe de que fue un auténtico coñazo mudar bases de datos, blogs y correos. También pude participar de una pequeña conspiración por el cine español… Allí también conocí a Lobo, que me recomendó muy buenos libros y me ilustró un poco sobre los conflictos de Iraq, Iran y Afganistan, de los que ando tan verde…
gitano
marwanEl viernes me despedí de los indianos deseoso de volver a verlos muy pronto y me encontré con mi gran amigo Marwan, perdido por el mundo (Londres, los Atlas, Madrid), y a quién tenía muchas ganas de volver a encontrar. Por cierto, aproveché la visita para echarle una mano instalando su nuevo blog, que va derecho a mi lector y que seguro tiene mucho que aportar a ingenieros y programadores.
Así que he vuelto muy contento de Madrid, y además me he traido muchos deberes en forma de libros e hiperenlaces…

Un sencillo generador de grafos aleatorios con sagemath

Se llama matriz de adyacencia de un grafo a una matriz cuadrada para representar relaciones entre pares de vértices. Un 1 en la fila i columna j representa una arista entre los vertices i y j.
Es decir, la matriz de adyacencia:

M=Matrix([[1,0,1,1],[0,1,0,1],[1,1,0,1],[0,1,0,1]])
M

[1 0 1 1]
[0 1 0 1]
[1 1 0 1]
[0 1 0 1]

Ejecutada con este código:
M=Matrix([[1,0,1,1],[0,1,0,1],[1,1,0,1],[0,1,0,1]])
G = Graph(M)
G.plot().show()

Representa el siguiente grafo
sage0.png

Modificando ese código se puede construir un sencillo generador de grafos aleatorio.
Para generar un 1 o un 0 aleatoriamente utilizamos: int(round(random()))
y para crear un vector de 10 componentes [i for i in range(10)]. Combinando ambas [int(round(random())) for i in range(10)] se generan vectores como:
[0, 0, 1, 0, 0, 0, 1, 1, 0, 0]

Así que finalmente el generador de grafos aleatorio quedaría así

print("Generador de grafos aleatorio")
nVect=12
M=Matrix([[int(round(random())) for i in range(nVect)] for i in range(nVect)])
G = Graph(M);
G.plot().show()

sage1.png

Con Sagemath podemos mostrar curvas y superficies en un applet interactivo de java. Ha sido una odisea de dos días conseguir empotrar el applet en el blog, pero finalmente aquí está el resultado.

En el tutorial oficial de Sagemath hay unos ejemplos sencillos de algunas parametrizaciones, no teneis más que copiarlas en vuestro sage local o en el notebook público online para ver el estupendo resultado. Utiliza Jmol para su visualización, un applet de java para la representación de moléculas que permite rotar, hacer zoom, y algunas cosas más.

Para emportar el applet con la superficie en nuestro blog primero necesitaremos obtener el fichero con la superficie, en la lista de correo de sage me explican un truco para encontrarlo. Añadimos la sentencia open ('a.txt', 'w') lo cual hará aparecer al evaluar un enlace a la ruta donde se guardan los ficheros de datos de esa evaluación. Debe ser algo como https://localhost:8000/home/admin/73/cells/1/a.txt quitamos el a.txt de la ruta y entonces encontramos varios ficheros. Lo que nos interesa realmente es el fichero zip que dentro tiene un fichero de malla .pmesh. Lo guardamos para utilizarlo posteriormente.

Ahora vamos a instalar Jmol en wordpress. No hay mucho que hacer, descargamos el paquete de binarios de la página oficial y lo descomprimimos por ejemplo en el directorio wp-content/jmol
Necesitamos ahora una molécula para representar, por ejemplo la de cafeína, que colocamos tambien el el directorio wp-content.
En un nuevo post escribimos el código:


<applet name="jmol" code="JmolApplet"
           archive="/wp-content/jmol/JmolApplet.jar"
           width="200" height="200" mayscript="true">
  <param name="progressbar" value="true"/>
  <param name="load" value='/wp-content/caffeine.xyz'/>
</applet>

¡Y listo! Ahora deberías tener una preciosa molécula alcalina como esta girando por tu blog. Por cierto que es la misma molécula que la teína, guaranina y mateína.


width="200" height="200" mayscript="true">

cafeína
(si no la ves prueba recargando el explorador)

Ahora puedes probar el zoom con la rueda del ratón; pinchar y rotarla; pulsar Shift, pinchar y desplazar en horizontal el ratón; pulsar Alt Gr y pinchar para desplazarla.

Con Jmol funcionando vamos a representar ahora la superficie que hemos obtenido en sage, bastaría con subir el fichero .pmesh y sustituir en el script la linea que representa una molécula:

<param name="load" value='/wp-content/caffeine.xyz'/>

Por esta otra que representa la superficie (sf.pmesh):

<param name="script" value='pmesh "/wp-content/sf.pmesh"'/>

Quedando así:


<applet name="jmol" code="JmolApplet"
           archive="/wp-content/jmol/JmolApplet.jar"
           width="200" height="200" mayscript="true">
  <param name="progressbar" value="true"/>
  <param name="script" value='pmesh "/wp-content/sf.pmesh"'/>
</applet>

Por supuesto se puede cambiar el path del .pmesh para utilizar ficheros subidos con el interfaz de carga de wordpress en el directorio /wp-content/uploads.

Otra forma alternativa de hacerlo, pero que requiere editar el fichero de cabecera del blog es la siguiente:
En header.php colocamos:


<script type="text/javascript">
<!--
function insertJmol(me,width,height,myPmesh) {
   document.getElementById(me).innerHTML =
   '<applet width="'+width+'" height="'+height+
   '" code="JmolApplet" archive="/wp-content/jmol/JmolApplet.jar">'
   +'<param name="progressbar" value="true">'
   +'<param name="script" value='+"'pmesh"+'"'+myPmesh+'"'+"'"+'>';
 }
//-->
</script>

Y en los post llamamos al applet con:


<div class="jmol" id="caffeine_applet">
<img src="/wp-content/logo.png" onLoad="insertJmol('caffeine_applet',400,400,'/wp-content/file.pmesh')" alt="caffeine screenshot"/>
</div>

(No hay que olvidar subir la imagen de precarga logo.png).
No sé muy bien cual es la ventaja de esto, pero en las páginas de Jmol recomiendan hacerlo así. La verdad a mi este método me da problemas cuando coloco en un post más de un applet, pero lo pongo para que quede la referencia.

Con cualquiera de las dos formas obtendremos el applet Jmol con nuestra superficie empotrado en el blog ¿no es estupendo? :-)


width="400" height="400" mayscript="true">

twistedTorus

¿No se visualiza? | Controles

Si las superficies generadas con sagemath os saben a poco y quereis explorar las posibilidades de la herramienta aquí teneis una batería de enlaces:

Y para acabar agradecer a todos aquellos que han aguantado mi inglés de todo a cien en las listas de correo:

Actualización: Hay un pequeño problema con las url, tengo que ponerlas absolutas si no quiero que nada más se vea en la página principal del blog y no en las páginas individuales de los post. Seguro que se soluciona con algún atributo de path de wordpress… investigaré.
¡Solucionado!
Cambiamos la ruta wp-content/ por /wp-content.

Una de las peores cosas que tiene la inserción de fórmulas con LaTex en mediawiki es la arbitraria etiquetación con <math>formula</math> en vez de la habitual $fórmula$. Pero se puede crear una macro para emacs que facilite el trabajo.

Con C-x ( empezamos la definición de la macro, entonces escribimos <math></math> y al acabar situamos el cursor en medio de ambas etiquetas. Finalizamos la definición de macro con C-x )
Si ahora pulsamos C-x e se ejecutará la macro que acabamos de definir, pero se perderá si salimos del programa.

Para guardarla primero le ponemos un nombre con M-x name-last-kbd-macro después abrimos el fichero de configuración de emacs ~/.emacs y copiamos la macro recién nombrada con M-x insert-kbd-macro aparecerá algo como esto:

(fset 'macromath
[?< ?m ?t backspace ?a ?t ?h ?< backspace ?> ?m backspace ?< ?m ?a ?t backspace backspace backspace ?/ ?m ?a ?t ?h ?> left left left left left left left])

Al añadir la siguiente linea estamos asignando la combinación de teclas shift+up (por ejemplo) a la macro ‘macromath
(global-set-key [(shift up)] ‘macromath)

Nada más tenemos que presionar shift+up para que nos aparezcan las etiquetas con el cursor en la posición listo para editar.

Esta semana me he peleado con un comportamiento extraño de mi intérprete de scheme: las recursiones funcionaban a veces sí, a veces no.
Finalmente y gracias a los compañeros de comp.lang.scheme se ha resuelto el misterio.

(define (factorial n)
(if (= n 0)
1
(* n (factorial (- 1 n)))))

En esta recursión tan básica, que calcula el factorial de un número hay un error grave que mete al intérprete en una torre de llamadas recursivas no resueltas (hasta agotar la pila). Salta a la vista (cuando te lo dicen) que (- 1 n) es distinto a (- n 1).
Cuando mi llamada recurente era del tipo (- 1 n) la expresión (factorial 2) generaba:
(factorial 2)
(* 2 (factorial (- 1 2))
(* 2 (factorial (-1))
(* 2 (* -1 (factorial (- 1 -1))))
(* 2 (* -1 (factorial (2))))

en definitiva: (* 2 (* -1 (* 2 (* -1 (* 2 ....

Así que el código correcto es:

(define (factorial n)
(if (= n 0)
1
(* n (factorial (- n 1)))))

Easytimeline es una herramienta añadida a mediawiki que permite crear lineas de tiempo interactivas. Al ser programadas (no diseñadas gráficamente) permiten modificarlas de una forma muy rápida y sencilla, aunque eso sí, cada linea de tiempo bien hecha conlleva bastante trabajo.
A mi entender ni las referencias para la instalación ni de utilización están nada claras y por eso he escrito esta mini guía.

universo

Instalando la extensión

Los pasos para la instalación se encuentran en la web oficial de la extensión, lo que sigue es una traducción a mi manera porque considero que a veces no queda muy claro cada paso.

Primero necesitamos instalar el programa Ploticus. Hay que bajarlo de la web y ponerlo en el directorio /usr/local/bin , si no tienes acceso a ese directorio ponlo en cualquier otro y especifícalo en la configuración.

A continuación descargamos dos scripts de php/perl uno es EasyTimeline.pl el otro Timeline.php (atención: no descargues directamente, visita los enlaces pues son repositorios de versiones!). El programa en sí es el pl, pero el php es la extensión para mediawiki que utiliza al otro programa.

Renombra Timeline.php a EasyTimeline.php y muevelo al directorio wiki/extensions/
Mueve el fichero EasyTimeline.pl al directorio wiki/extensions/timeline
Crea un directorio para las imágenes con los permisos adecuados
mkdir wiki/images/timeline
chmod 777 wiki/images/timeline

Y añade esto en el fichero de configuración LocalSettings.php
# Add support for EasyTimeline extension
include('extensions/EasyTimeline.php');
$wgTimelineSettings->ploticusCommand = "/usr/local/bin/pl";
$wgTimelineSettings->perlCommand = "/usr/local/bin/perl";

Aquí es donde tienes que fijar correctamente las rutas a todos los programas, si no tienes claro dónde está cada cosa puedes buscarla con el comando whois: $whois perl

Diseñando lineas de tiempo

Este es un esqueleto básico para crear una linea de tiempo. Hay que encerrarlo entre las etiquetas timeline.

#Configuración imagen
ImageSize = width:250 height:600
PlotArea = left:60 bottom:20 top:10 right:10

#Configuración del tiempo
TimeAxis = orientation:vertical
DateFormat = yyyy
Period = from:1982 till:2012
ScaleMajor = unit:year increment:4 start:1982 #gridcolor:black
ScaleMinor = unit:year increment:1 start:1982
Colors =
id:verdoso value:rgb(0.7,1,0.7) # otro color
id:fondo value:rgb(1,1,0.7)

#BackgroundColors = canvas:fondo

Define $dx = 25 #desplazar el texto

PlotData=
bar:GOBIERNO fontsize:S width:30 #set defaults

from:2008 till:2012 shift:($dx) text:”?” color:verdoso
from:2004 till:2008 shift:($dx) text:”[http://www.lamiradapositiva.es | Rodriguez Zapatero]” color:red
from:1996 till:2004 shift:($dx) text:”[http://aznar2000.pp.es | Jose Maria Aznar]” color:blue
from:1982 till:1996 shift:($dx) text:”[[Felipe Gonzalez]]” color:red

gobiernos

Trasteando toda la tarde con otras lineas de tiempo se aprende que hay muchas formas de hacer las cosas. Lo siguiente son unas referencias rápidas de cuestiones que me ha costado un rato entender, parto de que hacemos una linea de tiempo horizontal.

  • Las lineas obligatorias que siempre han de incluirse son: ImageSize, Period y PlotArea
    . Si hay alguna dificultad es en la diferencia entre ImageSize y PlotArea, la primera es como su nombre indica el tamaño total de la imagen resultante, la segunda define un margen de impresión extra para la linea de tiempo, una posible configuración es darle 10 pixeles arriba, 10 a la derecha, 20 abajo y 60 a la izquierda.
    PlotArea = left:60 bottom:20 top:10 right:10
  • En el comando PlotData se puede incluir una opción (width) que define el grueso de cada columna:
    PlotData=
    align:left color:epoch fontsize:S width:40 #set defaults

    Si lo hacemos así tendremos que establecer la dimensión de la imagen teniendo en cuenta el ancho de cada columna sumado a los márgenes de arriba y abajo.
    Si tuviesemos 3 columnas de width:40 y hemos definido PlotArea = left:60 bottom:20 top:10 right:10 tendremos que definir el tamaño total como: 40(width)*3(columnas)=120 + 20 (bottom) + 10 (top) = 150
    ImageSize = width:1000 height:150

  • La configuración del tiempo se puede establecer con las siguientes lineas que definen en orden: el eje horizontal, el formato de la fecha en años de cuatro dígitos, el periodo que abarca la linea de tiempo y dos escalas graduadas (una mayor y otra menor).
    TimeAxis = orientation:horizontal
    DateFormat = yyyy
    Period = from:1923 till:2008
    ScaleMajor = unit:year increment:20 start:1923 gridcolor:white
    ScaleMinor = unit:year increment:5 start:1923

    Además hemos añadido la opción gridcolor:white a la escala mayor para que muestre una rejilla
  • Se puede añadir marcas en las barras at:1982mark:(line,white)
  • También podemos definir colores para usarlos posteriormente
    Colors =
    id:epoch value:rgb(0.7,0.7,1) legend:Batallas_marinas # light yellow
    id:age value:rgb(0.7,1,0.7) # light green
    id:era value:rgb(1,1,0.7) # light blue
    id:eon value:rgb(1,0.7,1) # light purple
    id:black value:black
    id:white value:gray(0.9)

Actualización
Acabo de encontrar una página donde se referencian todas las lineas de tiempo y sus códigos de la wikipedia en español.

Los fanáticos de Lisp estamos de enhorabuena, acaban de publicar Arc lo que pretende ser el dialecto más conciso y potente de este lenguaje. Arc es un proyecto de Paul Graham y Robert Morris en lo que podría denominarse como la obtención del núcleo fundamental de Lisp.

Hace poco tenía una discusión sobre lenguajes de programación, Php vs Ruby vs Python vs Perl, etc… Finalmente llegamos al consenso de que no hay un mejor lenguaje, sino lenguajes más apropiados que otros para determinada tarea. Sin embargo, una ojeada al mítico La venganza de los Nerds nos basta para darnos cuenta de que en general los lenguajes tienden asintóticamente hacia Lisp… Da que pensar.

Un buen comentario sobre Arc se puede encontrar en el blog de Lisp at light speed, la nota de publicación del software en el blog de Paul Graham y por supuesto en la página oficial del proyecto.

dualheadUtilizar dos monitores simultáneamente es algo que todo el que trabaja con ordenadores debería probar alguna vez, lo digo porque puede parecer una tontería (¿para algo están las ventanas y el alt+tab no?) pero es de esas cosas que hasta que no se prueban no se sabe que no puedes vivir sin ellas. Es genial utilizar un monitor para programar y otro para navegar por manuales y referencias o para visualizar el ebook preferido sobre ese lenguaje.

Hace un tiempo conseguí hacerlo gracias a una entrada de Juan Tomás, después, por otros problemas, mi portátil se pasó unos meses en el servicio técnico y ahora que ya lo tengo de nuevo he vuelto a configurarlo.

No es muy complicado, el equipo ideal sería un portátil con salida de vídeo a la que conectamos un segundo monitor. Entonces modificamos el fichero /etc/X11/xorg.conf que como su nombre indica es la configuración del sistema gráfico xorg.

En la foto el resultado combinando mi portátil (Gödel) con el monitor del sobremesa.
En serio, si tienes la oportunidad pruébalo. Sólo así podrás sentirte como una especie de científico loco en su laboratorio… :-D

Jonathan Coulton es un artista newyorkino muy peculiar, lo conocí gracias a una canción sobre el conjunto Mandelbrot que me dejó flasheado, además publica toda su obra bajo creative commons by-nc, mucho mejor hubiese sido que licenciara en dominio público ya que pienso que las cc y su lógica de “algunos derechos reservados” justifican el copyright: si tú puedes reservarte algunos derechos, yo me los puedo reservar todos. ¿o no?
Sin embargo, es un ejemplo de cómo hacer dinero sin pasar por la discográfica vendiendo sus discos (completos o por canciones a la carta) en su tienda online. La verdad, pagarle unos 10$ por disco no me parece mal, aunque prefiero descargarme sus canciones gratis y si alguna vez tengo la oportunidad pagar la entrada de su concierto. De hecho se le puede pedir que vaya a actuar a cualquier lugar del mundo, y yo ya he abierto la petición de que venga a Alicante.

Lo que me gusta de su música es la temática, si sueñas con androides, mundos virtuales, legiones de robots para conquistar la Tierra y demás locura matemático-computacional y robótico-cibernética éste es tu cantante. Si te detienes a leer/escuchar la letra vas a encontrar perlas de las buenas:

“She lost the real ones [eyes] in the robot wars
I’ll say I’m sorry, she’ll say it’s not your fault
Or is it?” The Future soon.

“I’m not a monster Tom, well, technically I am
I guess I am ” Your Brains

Ésta es la más famosa y una de las mejores:
Mandelbrot Set: descarga video letra, más videos e info.

Impagable:
Your Brains: video letra, más videos e info.

En serio, ¿cuántos de nosotros no hemos soñado algo similar cuando éramos adolescentes y engullíamos libros de Asimov?:
The Future Soon: descarga video letra, más videos e info.

All we want to do is eat your brains
We’re not unreasonable, I mean, no one’s gonna eat your eyes

Estamos a un paso de la era de la computación ubicua, un mundo en el que casi toda computación será realizada por nuestro entorno en todo momento, en cualquier lugar. Muy cerca de terminar de entretejer el metaverso con el mundo real.

Hace tiempo que todas estas ideas me vienen rondando la cabeza. Si te parece vamos a dar un paseo imaginario por el centro de una metrópoli cualquiera…
Es temprano, la mañana es fresca pero hoy se esperan temperaturas agradables, eso es lo que mis gafas muestran al detectar el gps que llevan integrado que estoy saliendo de casa, información meteorológica sobre el día que comienza. Nos dirigimos hacia el centro de la ciudad, por el camino nos cruzamos un tipo que nos llama la atención porque lleva un perro grandísimo sujeto a una correa. Pedimos a las gafas información sobre el animal, el collar emisor del perro muestra su nombre: “Gos”, raza, edad… ¿deseas saber más? un enlace parpadeante pero no molesto me indica la posibilidad de acceder a internet para buscar información sobre ese tipo de animales.
ñarfidosContinuando con nuestro paseo ya casi hemos llegado al centro de la metrópoli, por el camino recibimos una llamada de un amigo que sabemos que está ahora mismo a una manzana de distancia porque ambos hemos intercambiado nuestra geoposición, como estamos cerca y ociosos quedamos para desayunar juntos en el bar Ubiquity. Nuestras gafas nos muestran un plano con la ruta trazada hasta la cafetería y opcionalmente nos indicará cada calle que debemos tomar. Al encontrarnos enfrente de la cafetería echamos un vistazo a la lista de precios, caro como todas, no aparece información extra porque nunca he estado en este establecimiento, pido información de mi red de contactos sobre el sitio, aparece una puntuación: 7/10 “un sitio tranquilo, camareros majos” la nota es de un colega, confío en él tiene buen criterio para estas cosas. Durante el desayuno tenemos una conversación amena, discutimos sobre Historia Antigua y el papel de las matemáticas y la ciencia en la antigua Grecia, nuestro amigo accede un par de veces al metaverso para comprobar de quién era discípulo Platón y exáctamente cual era el punto fuerte de aquella historia de la caverna, yo por mi parte accedo a mi propia contextopedia para buscar referencias sobre el teorema de pitágoras y la norma euclídea, la conversación avanza con nuevas informaciones.
La mañana trascurre con normalidad, ya que estoy en el centro decido hacer algunas compras, paso por un pequeño mercado y adquiero las frutas que más me gustan, siempre que puedo compro a los mismos agricultores, el cajón de naranjas envía a mis gafas esa información. También compro algo de pescado, estoy completamente seguro de que es fresco, si en algún momento uno solo de esos peces se hubiese descongelado y puesto en situación de riesgo higiénico el árfido grapado a su aleta hubiese informado al vendedor para su inmediata retirada ya que automáticamente habría anulado su posibilidad de venta al público mediante pago electrónico. Desde hace tiempo cualquier objeto es más que un objeto, es un spime: un objeto informacionalmente significado.
Cuando llega la hora de volver a casa, agotado decido tomar el transporte público, inmediatamente obtengo la dirección a la que debo dirigirme para subir al autobus que en menos tiempo me dejará en casa. Ya en el autobús una niñita me sonríe con ojos traviesos, un mensaje junto a ella me informa de que me está retando a un tetris virtual, la “princesa Nell” (así ha decidio ella identificarse) quiere machacarme al tetris, le devuelvo la sonrisa negándole la partida, estoy algo cansado… bueno, ¡qué diablos! solo será una partida.

La idea:
La tecnología RFID nos permite dotar a los objetos de capacidad de computación e interconexión entre ellos mediante árfidos obteniendo así computación en todo momento y lugar. Añadamos a cada objeto una capa de información transformándolos en spimes. Utilicemos gafas especiales como la interfaz de esta nueva nueva realidad ampliada. Finalmente hagamos invisible la herramienta y dejemos que emerja su utilidad.

“Las tecnologías que más calan son las que desaparecen. Se entrelazan en el tejido de la cotidianidad hasta que se vuelven invisibles”. Mark Weiser

Balance anual 2007

En este año que termina he aprendido muchas cosas, no puedo quejarme. Sin duda la mayor de ellas ha sido darme cuenta de la importancia de descubrir nuevos paradigmas para resolver problemas. La inercia y el absurdo sentido de propiedad nos dificultan gravemente la tarea de aprehender nuevas ideas que están en conflicto con otras antiguas, pero cuando finalmente hacemos el cambio ¡qué equivocados nos damos cuenta que estábamos! 2007 será para mi el año de las redes, el año en el que aprendí a aplicar modelos de red a todos los flujos de información que nos rodean.

Os deseo a todos un año 2008 lleno de fuerza y voluntad para alcanzar vuestros objetivos.

Ubiquity es la revista digital de la asociación ACM (Association for Computing Machinery), en ella encontré una entrevista interesante a Peter Denning (anterior presidente de la ACM) sobre el movimiento que lidera: el proyecto para asentar los grandes principios de la computación.

Actualmente la informática (computing) es considerada como una ingeniería, el propósito del proyecto es recoger el cuerpo de conocimiento necesario para establecer la computación como ciencia. ¿Por qué es importante reclamar la computación como una ciencia?, ¿realmente existe una diferencia fundamental entre considerarla ciencia o ingenierí­a? Denning da cuatro razones principales:

  • Proporciona credibilidad para la colaboración con los campos cientí­ficos con los que se trabaja estrechamente
  • Mejora la innovación porque clarifica los principios con los que encontrar soluciones
  • Centra la cuestión que nos ocupa (es decir, los procesos de información)
  • Asienta un lenguaje común con el que discutir

Hay una -cada vez menos fuerte- oposición a considerar la informática como una ciencia. El principal argumento en contra, que no trataba sobre aspectos naturales sino sobre una construcción humana, fue abolido hace más de un lustro, en el año 2001 cuando el Nobel de biologí­a David Baltimore dijo que los mecanismos celulares computan la lectura del ADN para construir nuevas células vivas.
Parafraseando a Djikstra: la computación es a las computadoras como la astronomía a los telescopios. Al igual que otras ciencias no tratan sobre los telescopios o microscopios sino sobre el Universo y la vida, la computación no trata sobre computadoras, estas son la herramienta para estudiar los procesos de información.

Los principios de la computación elaborados por Denning son siete, según él son como un edificio heptagonal con siete ventanas: computación, comunicación, coordinación, recolección, automatización, evaluación y diseño. Según esto cada vez que miramos algo dentro del edificio, como por ejemplo las redes, podemos hacerlo desde cada una de las siete ventanas, obteniendo un punto de vista distinto.
Denning, con el soporte de la ACM, ha elaborado una interesante página sobre los principios de la computación. En su blog de Wired, Bruce Sterling también hace su aportación al tema.
Ví­a Quantum Pontiff.

Me informa Alex sobre un nuevo proyecto de la fundación Mozilla: se llama Weave, conceptualmente es una nube de metadatos (marcadores, historial de navegación, configuraciones, etc) que se refleja de forma transparente en cualquier dispositivo que utilice el navegador firefox.
Curiosamente nosotros ya llevábamos un par de semanas discutiendo el concepto, incluso planteándonos si podríamos desarrollar algo parecido a un navegador ubicuo con firefox, pero los chicos de Mozilla se nos han adelantado (algo estupendo porque es un trabajo que nos ahorramos y ellos lo pueden hacer mejor que nosotros).
the cloud
Todo está muy verde pero el proyecto promete, y el hecho de que tanto nosotros como la fundación hayamos tenido la misma idea es significativo: esa gran red de metainformación que estamos construyendo tendrá mucho más sentido cuando consigamos despegarla totalmente de un dispositivo (o varios) en concreto. En realidad si vamos un poco más lejos se puede pensar que este es un paso necesario para la computación ubicua mediante polvo inteligente.

Tutorial con los pasos para conseguir instalar un metaverso propio en un sistema GNU/Linux.

Hace un tiempo Linden liberó el código de Second Life. Desde ese día se ha ido tejiendo alrededor del software una comunidad muy interesante de hackers que están trabajando en la creación de metaversos distribuidos. En esta entrada voy a mostrar los pasos para conseguir instalar un metaverso propio en un sistema GNU/Linux.
openslComenzamos en el wiki del proyecto opensimulator. Opensim es un programa escrito en C# (por tanto multiplataforma) capaz de servir metaversos soportando múltiples clientes y servidores. Después de instalar el servidor podremos ejecutarlo en diferentes modos, el modo autista, que permite un único visitante y el modo grid que permite la conexión de más personas al metaverso. Una vez tengamos el “grid” funcionando nos conectaremos con nuestro cliente de secondlife habitual.

¡Manos a la obra!

Primero descargarmos el código del repositorio subversion con el comando

svn co http://opensimulator.org/svn/opensim/trunk opensim

Para esto tendrás que tener instalado svn (subversion) en tu sistema. También hay versiones estables disponibles, pero no te proporcionarán ese cosquilleo en la barriga de ver tu metaverso saltar por los aires con tus amigos dentro.

A continuación construimos el software:
cd opensim
./runprebuild.sh
nant

Asegurate de que tienes el programa nant instalado.
En el wiki hay más información para activar la física ODE (Open Dynamics Engine), de la que vamos a pasar por el momento. Si algo no te ha funcionado ve a la sección de problemas de opensim e instala todos los programas de mono que ponen allí.

Un metaverso cualquiera

Ahora mismo ya podremos lanzar nuestro metaverso autista ejecutando opensim:

cd bin
mono OpenSim.exe

Y conectarnos a él mediante nuestro cliente de secondlife:

secondlife -loginuri http://localhost:9000

Aquí por algún motivo tienes que introducir tu usuario de secondlife (en el modo grid no). Bien, los seguideres de Nación Solipsista seguramente estarán más que satisfechos con esto, pero nosotros queremos más, queremos un metaverso con amigos… así que matemos el programa y vamos a configurar el modo grid.

Lo siguiente que necesitamos es un gestor de bases de datos mysql en el que crear una base de datos y almacenar la información del grid. Si necesitas ayuda para instalar mysql, en el wiki encontrarás más información.
Si no, conectate a mysql y crea una base de datos con las tablas que encontrarás en opensim/share/sql de la siguiente manera:

$ mysql -u root -p -h localhost
mysql> create database opensim;
mysql> use opensim;
mysql> source mysql-agents.sql;
mysql> source mysql-inventoryfolders.sql;
mysql> source mysql-inventoryitems.sql;
mysql> source mysql-logs.sql;
mysql> source mysql-regions.sql;
mysql> source mysql-users.sql;
mysql> quit

[Actualización 16:00 8 Diciembre]
Necesitaremos volcar también a la base de datos los ficheros UpgradeItemsTableToVersion2.sql y UpgradeFoldersTableToVersion2.sql que se encuentran en la ruta OpenSim/Framework/Data.MySQL/Resources. En posteriores revisiones/versiones no será necesario, actualmente (en la revisión 2621) sí.

Ahora editamos el fichero mysql_connection.ini

[mysqlconnection]
hostname=localhost
database=opensim
username=tu_usuario_de_mysql
password=tu_clave
pooling=false
port=3306

Ya casi está todo, ahora abre 5 consolas distintas, ejecuta en cada una los siguientes programas, en el orden que sigue y esperando para ejecutar el siguiente a que el primero te devuelva el prompt:

OpenSim.Grid.UserServer.exe devuelve el prompt OpenUser#
OpenSim.Grid.GridServer.exe devuelve el prompt OpenGrid#
OpenSim.Grid.AssetServer.exe devuelve el prompt OpenAsset#
OpenSim.Grid.InventoryServer.exe devuelve el prompt INVENTORY#
OpenSim.exe -gridmode=true

mi metaverso

Todos estos procesos te pedirán opciones, dales la que viene por defecto pulsando intro a discrección. Vete a la primera consola OpenUser# y crea un usuario para cada visitante con el comando create user, te pedirá nombre, apellido, clave y posición cartesiana, puedes asignar (1000,1000) al primero, (1050,1050) al segundo y así sucesivamente. Nos bastará crear un par de usuarios para hacer las pruebas. ¿Preparado? Conecta cada visitante (local) con tu cliente secondlife habitual, ahora el puerto de conexión es distinto:

secondlife -loginuri http://localhost:8002/

Por último si quieres que se conecten a tu servidor de metaversos desde fuera de tu red local, lo primero que tendrás que hacer es asegurarte que les proporcionas una IP correcta y que tu router está redirigiendo el tráfico de los puertos que utiliza opensim a tu equipo servidor (sé valiente y abre todos los puertos : P ). Además tendrás que editar el fichero xml de regiones opensim/bin/Regions/fichero.xml y escribir la IP externa en el campo “external_host_name”. (Yo he tenido a mi hermano estrellándose contra el portón cerrado de mi metaverso de pruebas durante un buen rato, tú no te olvides de esto).

Ya has creado tu propio metaverso. Ahora puedes seguir explorando, desde el wiki de opensimulator se accede a servidores de grids de metaversos, canales irc de la comunidad y demás. Yo te recomiendo, al igual que me recomendaron a mi, que leas Ciudad Permutación, ahí se esconde la esencia de todo esto y tal vez, por qué no Snow Crash, que explora menos las implicaciones pero es mucho más divertido.

Emacs tips

Algunos truquillos para emacs:

Existe un comando para ir a una linea determinada: M-x goto-line y se le puede asignar una tecla rápida añadiendo al fichero ~/.emacs la siguiente linea:
(define-key global-map (kbd "M-g") 'goto-line) ; M-g means 'goto-line

Si quieres que cada número de linea aparezca al principio de la linea actual descarga el fichero linum.el y añade a ~/.emacs la linea: (require 'linum). Si no sabes dónde meter el fichero copialo por ejemplo en el directorio ~/elisp después añade a ~/.emacs la linea:
(add-to-list 'load-path "~/elisp") ; Ruta a los ficheros .el
Después activa el modo linum con M-x linum-mode

Por último un buen truco para programadores que piden ayuda al resto: “pastea” tu código en esta página

He creado una nueva sección en la contextopedia sobre emacs para ir guardando todas estas cosas.

Esos embusteros de los creacionistas -aquellos que niegan la evolución y ponen en su lugar a un creador con voluntad y designios própios- utilizan a menudo el argumento de que la evolución no se muestra actualmente en la naturaleza. Sólo una mente yerma, o como en el caso: manipuladora e interesada, serí­a incapaz de entender que la evolución es un proceso que se da a una escala de tiempo tal que hace dificil su observación. Al igual que la escala geológica o cosmológica, una montaña o un sistema solar no se crean, destruyen o modifican en un par de dí­as, se necesitan cientos, miles o millones de años para eso.

Pero a veces a animales con ciclos vitales muy cortos -como los insectos- se les puede ver evolucionar. Es el caso de las mariposas de Samoa, que en 5 años han demostrado cómo un gen era seleccionado naturalmente para hacer frente a una plaga bacteriana que estuvo a punto de eliminar la población completa. La breve nota del compañero Maikel es realmente interesante.

Hace un par de meses le propuse a un compañero que me echara una mano para traducir meneame a esperanto y crear así­ nuestra propia versión en la lengua internacional. Me puso en contacto con un esperantista que tení­a en mente el mismo proyecto y junto con otros esperantistas de la geografí­a europea aunamos fuerzas y nos pusimos a trabajar en pligg, otro clon de meneame.
Tras muchas pruebas y ensayos, con muchas ganas y mucha ilusión lanzamos klaku.net el portal de noticias de la comunidad esperantista.

logo Klaku

Bueno sí­, es un proyecto 2.0, justo ahora que parece que estamos superando la descentralización y tendemos hacia una red completamente distribuida. Pero resulta que la comunidad esperantista no está conectada y pensamos que klaku puede servir como punto central donde la enredadera comience a brotar, después como los cohetes de fase de una nave espacial dejaremos de ser necesarios. Ya nos han dedicado algún post y han incluido un agregar a klaku en un servicio de blog gratuitos… Klaku da sus primeros pasitos.

El peligro de extraviar una computadora portatil con información personal me ha llevado a investigar un sistema de cifrado de discos duros. En este howto explico el proceso para cifrar la partición /home del sistema.

Esta semana el muro de hormigón contra el que darme cabezazos ha sido truecrypt un software de cifrado de volúmenes realmente práctico.
Con él se puede hacer cosas muy interesantes: cifrar particiones, crear ficheros ocultos que se montan como particiones, etc. Hay versión para Windows y GNU/linux, la de Windows se instala con siguiente;siguiente;siguiente y se usa igual, la de GNU/linux es un poco más complicada de instalar y eso es lo que voy a intentar explicar a continuación.

Compilación e instalación del módulo de cifrado truecrypt en GNU/Linux

Vamos a la página de truecrypt y nos bajamos los fuentes, desempaquetamos y entramos en el subdirectorio /linux. A continuación compilamos ejecutando build.sh. Para hacer esto tendrás que tener los fuentes de tu núcleo (para saber tu núcleo ejecuta $uname -a). Luego baja los que correspondan desde kernel.org y desempaqueta en /usr/src/.
Al ejecutar build.sh te pedirá la ruta a los fuentes del núcleo y se pondrá a trabajar. Paciencia lo normal es que tarde entre 30 minutos y 2 horas.
Una vez compilado los instalamos ejecutando #install.sh.
Si todo ha ido bien cargamos el módulo en el núcleo con #modprobe truecrypt o #modprobe -f truecrypt si lo anterior da problemas. Con #lsmod comprobaremos que efectivamente lo haya cargado.

Después ya todo es cosa de leerse las páginas del manual, que también se pueden leer online en la página oficial.
Si hemos tenido complicaciones tenemos un foro bastante completo y las nunca suficientemente valoradas preguntas frequentes: FAQ.

actualización [3:21 Martes 12 de Junio]:
Si al ejecutar $./build da muchos errores enigmáticos y no encuentras ayuda en el foro ni las FAQ, prueba con otro núcleo. Es decir, instala en tu sistema otro núcleo y las fuentes (rearranca con ese núcleo) e inténtalo de nuevo. A mi me ha funcionado.

Cifrar la partición /home

Para crear una partición cifrada en linux ejecuta #truecrypt -c. Este comando arranca un modo interactivo en el que te preguntará qué partición quieres cifrar, cuando pregunta tipo de sistema de ficheros elegimos none.

Lo mapeamos y le damos formato ext3
#truecrypt -N 1 /dev/hdxx && mkfs.ext3 /dev/mapper/truecrypt1
Ahora ya podemos montarlo donde queramos:
$mount /dev/mapper/truecrypt1 /home

Mi idea era cifrar una partición y utilizarla como home, claro que al iniciar el sistema habrí­a que montarla con truecrypt, esto lo consigo mediante un script que coloco en el directorio de los guiones de arranque /etc/init.d y que enlazo desde /etc/rc2.d/S98cripta, el S98 es porque quiero montar el sistema antes de que arranque KDE que está con la prioridad S99.
El script un poco friki-tolkien es este:

#!/bin/bash
echo "Dí­ amigo y pasa"
sudo truecrypt /dev/hda3 /home
if [ $? = 0 ];
then
echo “Accediendo a la cripta”
else {
echo “¡No puedes pasar!”
sudo halt
}
fi

No olvides que si ya tenías en /etc/fstab una linea para esa partición debeis comentarla, o dará un error al iniciar. Por último queda que al apagar la máquina desmonte con el comando #truecrypt -d. Pero todavía no sé donde poner ese script ¿alguna idea?

Si te interesa el tema puedes visitar el wiki de seguridad que estoy construyendo con Lot

ruby on railsHe encontrado un manual poderoso que explica todos los pasos para instalar ruby on rails en tu máquina y además hacer que el apache sirva las aplicaciones rails. Lo he destripado y os he traido las partes importantes. Quien quiera algo más elaborado y enlazado que visite el artí­culo original
.
Primero instala ruby
#apt-get install ruby libzlib-ruby rdoc irb
Bájate gems, que es como el apt pero de programitas ruby. Descomprime, entra al directorio y ejecuta
#ruby setup.rb all
Con gem instalado y configurado utilizalo para instalar rails
#gem install rails --include-dependencies
Si el paso anterior da un error chungo-raro, borra la cache de gem. Busca el GEM PATH con
$ gem env
Ahora localiza y destruye un fichero llamado source_cache, e intenta instalar de nuevo rails.

Ya tienes funcionando rails. Como rails viene con WEBrick podrí­as probar que funciona perfectamente, pero vayamos más lejos instalando un módulo para el apache… ¿porque tienes apache instalado verdad? ;)

Instala estos paquetitos (más el de apache si no lo tienes)

  • libfcgi-ruby1.8
  • libapache2-mod-fcgid
  • libmysql-ruby1.8

Hazle un restart más o menos suave (#apache2ctl graceful) al apache.
Ahora crea una aplicación rails de prueba:
$cd /var/www/railes
$rails prueba

y dirigete allá­ con tu navegador. Si no has configurado un virtual host (eres perro como yo) estará en http://localhost/rails/prueba/public

Espero que ahora veas un pantallazo, con el texto:

Welcome aboard
You’re riding the Rails!

que te hará sentirte muy bien.

Brillante. Esta palabra define la idea de la gente de reCAPTCHA.

¿Qué es un CAPTCHA?
Turing planteó una manera de saber si una máquina es o no es inteligente, dijo que si manteníamos una charla con un interlocutor artificial y otro humano y no podíamos distinguir cual era cual entonces esa máquina podía ser considerada inteligente (al menos tanto como un humano). A esto se le llamó el test de Turing.
CAPTCHA significa Completely Automated Turing Test To Tell Computers and Humans Apart. Es un programa que muestra la imagen de una palabra distorsionada, las máquinas tienen problemas para reconocer patrones, la mente humana está especializada en eso.

¿Qué aporta reCAPTCHA?
En millones de webs se requiere pasar este Test de Turing para autenticarse, registrarse o dejar un comentario. Se estima que diariamente se resuelven 60 millones de ellos, 150,000 horas-hombre que la gente de reCAPTCHA piensa utilizar para digitalizar libros.

recaptcha
Internet Archive es una fundación que entre otras cosas digitaliza libros, muchos de sus programas reconocedores de palabras (tienen hardware y software propio) informan cuando no está seguro de haber digitalizado correctamente una palabra. reCAPTCHA te muestra dos palabras, una es una de estas palabras dificiles de digitalizar la otra es una palabra conocida, al introducir el texto de ambas palabras reCAPTCHA comprueba si coincide la palabra conocida, entonces te valida y asume la entrada que le demos para la otra palabra. Posteriormente la contrastará con otros usuarios y finalmente habremos digitalizado una palabra. Como todas las buenas ideas es sencilla y elegante.Meneame ya incluye reCAPTCHA, ya se ha enviado una petición a pligg (el clon de meneame sobre el que hemos implementado klaku) para que hagan un módulo que lo incluya.