Red de Miniposts Distribuida

David de Ugarte (miniposts) -La sutil frontera entre facilitar las adopciones y ponérselo fácil al tráfico de niños-
A veces el estado parece tremendamente naive… o tal vez negligente. Las adopciones internacionales cada día provocan más y más fundadas sospechas. Hace tiempo que la oferta quedó por debajo de la demanda a nivel global. El resultado lo podría predecir cualquier estudiante de Economía: aumenta la producción y aparecen conseguidores de niños. España, por cierto, está entre los principales demandantes. De pavor.

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

Tags: , ,

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.

Tags: , , , ,

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.

Tags: , ,

Con cada vez más aplicaciones del lado del servidor, cada una con su base de datos, merece la pena automatizar la tarea de realizar copias de seguridad periódicas. Porque la frecuencia será constante y mayor que si la hicieramos a mano y porque no tienes que preocuparte nunca más de perder datos.
Acabo de terminar un script de bash para enviar bases de datos cifradas por email.

March 17, 2008 by Janzo | No comments

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)))))

Tags: ,

Conectar objetos. Esa es la idea detrás del proyecto openspime influenciado por Sterling. En el vídeo el concepto de medidor de concentración de co2 ubicuo.

March 3, 2008 by Janzo | No comments

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.

Tags: , , , ,

Aviso a los de Alicante y alrededores: este fin de semana tendremos unas jornadas copyleft. Asistirán David Bravo, Jorge Cortell y José Marchesi. Tendremos conciertos, wii’s y alfombras de baile, talleres, pista de segways, bookcrossing, y banda ancha para todos… Sí, ya lo sé, en otra ocasión montaremos unas jornadas por el dominio público la devolución.

February 13, 2008 by Janzo | No comments

« Older entries § Newer entries »