Dibujemos matrices fácilmente con LaTeX!

— [ edit | raw ] migrated from node/475
Hola buenas... recientemente tuve que realizar la documentación de una práctica y por la cosa de coger soltura la realice 100% en LaTex. Como tenía que hacer diagramitas chulos y tal me puse a buscar que extensión podía ayudarme y encontré una maravillosa: xymatrix. Espero que esto sea un "primeros pasos" de xymatrix ya que la potencia (como todo lo que rodea al LaTex) es increíble y el límite lo ponemos nosotros.

Ingredientes

Para trastear con la receta os hará falta:
  • Unos conocimientos muy mínimos de LaTex.
  • Tener instalado LaTeX/TeTeX.
  • Un buen Makefile y/o rubber.
Excepto el primer requisito... todo es paquete Debian.

Instalación de xymatrix

Instrucciones para Debian (y supongo que Ubuntu):
# apt-get install tetex-extra
Instrucciones para otras distros: ¿hay otras? :-P

El preámbulo

Bueno, sabréis que un documento en LaTex debe tener un pequeño preámbulo donde se define qué tipo de documento se está creando, paquetes que se emplearán, etc. Lo que yo uso para añadir y configurar xymatrix es:
\usepackage{geometry,amsthm,graphics,amssymb,amsmath,latexsym}
\usepackage[all,2cell]{xy} \UseAllTwocells \SilentMatrices
En la documentación oficial de xymatrix emplean un parámetro más al incluir xy, esto es:
\usepackage[all,2cell,dvips]{xy} \UseAllTwocells \SilentMatrices
Pero esto provocaba que no se me dibujasen las flechitas.

Crear una matriz

Pues nada, vamos a crear una matriz de 2x2 con los elementos A, B, C y D:
\[ \xymatrix{
  A & B \\
  C & D}
\]
Activamos el modo matemático (con "\[" y "\]"), en él insertamos un elemento xymatrix con los elementos citados. Los elementos de una columna los separamos con ampersand, es decir "&", y una nueva fila con la doble barra, "\\". Que yo lo haya puesto en distintas líneas en el código ha sido para que se vea más claro, pero podríamos haber hecho:
\[\xymatrix{A&B\\C&D}\]
Los ejemplos anteriores habrían dado como resultado:
La dimensión de una matriz se calcula por el número de columnas de la primera fila y después el número de filas creadas. Esto es importante, todas las filas tienen que tener el mismo número de columnas. Si por ejemplo nuestra matriz no va a tener elemento C debemos hacer lo siguiente:
\[\xymatrix{
A & B \\
  & D}
\]
Recordad que podemos hacer cosas como:
\[\xymatrix{
A && B & C}
\]
En este caso tendríamos una matriz fila de cuatro elementos, en el que el segundo elemento es nulo. Podéis ver como quedaría aquí:
Como último ejemplo de matriz vamos a definir:
Debemos hacer una matriz de tres filas y cinco columnas. ¿Por qué cinco? pues tenemos tres elementos y dos huecos entre ellos en la fila con más columnas de todas. Quedaría como sigue:
\[\xymatrix{
 & &1& & \\
 &2& &3& \\
4& &5& &6}
\]
Los huecos entre ampersand's los coloco para que se vea más claro, pero podría haber escrito:
\[\xymatrix{
&&1&&\\
&2&&3&\\
4&5&6}
\]
O incluso:
\[\xymatrix{&&1&&\\&2&&3&\\4&5&6}\]
El manual de xy tiene los ejemplos en la segunda forma, por lo que más vale entender esto bien, incluso practicarlo un poco. Yo en ejemplos más complicados tuve que usar lápiz y papel para entenderme (menudo informático de pacotilla! :-P). Entendiendo esto bien podemos pasar al siguiente punto: la flechas entre elementos.

Las flechitas

Bien, las flechas tienen un origen y un destino (ohhh), el origen es el elemento donde se crea y el destino es el elemento que le indicaremos nosotros. Todas las flechas tienen dirección por lo que si queréis una bidireccional entre A y B (por ejemplo) debéis crear una entre A y B y otra entre B y A (esto creo que debería estar en el TO-DO de xy). La forma en la que indicamos el elemento destino es indicando su desplazamiento con respecto al elemento origen. Los desplazamientos se indican con una letra: u,d,l,r; esto es: up, down, left, right (vaaaale: arriba, abajo, izquierda y derecha :-P). Por tanto, si queremos una flecha desde un elemento hasta el siguiente elemento a la izquierda, lo indicaríamos con [l]. Si queremos una flecha desde un elemento hasta el elemento dos lineas mas arriba y una columna más a la derecha pues [uur]. Al principio puede parecer lioso, pero veamos un ejemplo: en la matriz de ejemplo primera, la de 2x2, vamos a hacer un triángulo de flechas entre los elementos A, B y D con el sentido de las agujas del reloj, es decir, lo siguiente:
Pues el código es muy simple:
\[ \xymatrix{
  A \ar[r] & B \ar[d]\\
  C & D \ar[ul]}
\]
Veamos: con \ar añadimos una flecha, un elemento puede tener todas las que quiera, los destinos pueden ser elementos vacíos y tiene que estar obligatoriamente dentro de los límites de la matriz, en caso contrario no compilará. Si no entendéis bien el ejemplo, dibujad en un papel un cuadro de 2x2 y observad los desplazamientos. Ahora vamos a crear una matriz fila de tres elementos: A, B y C, uniremos todos de forma cíclica, es decir: A con B, B con C y C otra vez con A:
\[\xymatrix{
  A \ar[r]& B \ar[r]& C \ar[ll]}
\]
Si compiláis veréis lo siguiente:
Deberíamos poder arquear la flecha para que esto no ocurra, es decir, queremos obtener lo siguiente:
Pues el código es muy simple, simplemente debemos añadir lo siguiente:
\[\xymatrix{
  A \ar[r]& B \ar[r]& C \ar@/^/[ll]}
\]
Para arquear una flecha añadimos la arroba al final de ar después viene lo siguiente: "/^/" indica cómo debe ser el arco. La concavidad/convexidad es relativa a la dirección de la flecha, "/^/" lo hace de una forma y "/_/" de la otra. También podemos aumentar la curvatura: "/^1pc/", "/^2pc/", etc.

Algunos ejemplos

Hasta aquí supondré q lo entendéis todo bien e incluso lo habéis probado. Si no entendéis bien lo anterior... esto os va a resultar algo extraño... Vamos a dibujar cuatro elementos formando un cuadrado pero con un quinto elemento central, todos los elementos exteriores tendrán una flecha hacia el elemento central:
\[\xymatrix{
A \ar[dr]& & B \ar[dl] \\
  & E & \\
C \ar[ur] & & D \ar[ul]}
\]
Que resulta en lo siguiente:
Ahora vamos a dibujar un cubo, para saber cómo debemos representar un cubo mediante una xymatrix os recomiendo el uso de lápiz y papel... tal vez este ejemplo empiece a ser un poco extraño... ;-)
\[\xymatrix{
   & E \ar[rr]&& F \ar[dd]\\
 A \ar[rr]\ar[ur]&& B \ar[dd]\ar[ur]&\\
   & G \ar[uu]&& H \ar[ll]\\
 C \ar[uu]\ar[ur]&& D \ar[ll]\ar[ur]&}
\]
Con lo que obtendríamos un bonito:
Y finalmente una rayada: no voy a decir de que se trata para que a alguno le pique la curiosidad y lo pruebe :-P .Sólo diré que de la figura completa hay cuatro aristas curvadas para que no se emborrone el resultado final. Además, hay un elemento más que complica el ejemplo: todas las flechas son bidireccionales ;-), en fin, ahí tenéis:
\[ \xymatrix{
  &   & 2 \ar[rrrr]\ar@/_1pc/[dddddd]\ar[dl]\ar[ddr]&   &   &   & 3 \ar[llll]\ar@/^1pc/[dddddd]\ar[dl]\ar[ddl]\\
  & 0 \ar[rrrr]\ar@/_1pc/[dddddd]\ar[ur]\ar[ddr]&   &   &   & 1 \ar[llll]\ar@/^1pc/[dddddd]\ar[ur]\ar[ddl]&   \\
  &   &   & 10 \ar[rr]\ar[dd]\ar[dl]\ar[uul]&   & 11 \ar[ll]\ar[dd]\ar[dl]\ar[uur]&   \\
  &   & 8 \ar[rr]\ar[dd]\ar[ur]\ar[uul]&   & 9 \ar[ll]\ar[dd]\ar[ur]\ar[uur]&   &   \\
  &   &   & 14 \ar[uu]\ar[rr]\ar[dl]\ar[ddl]&   & 15 \ar[ll]\ar[uu]\ar[dl]\ar[ddr]&   \\
  &   & 12 \ar[rr]\ar[uu]\ar[ur]\ar[ddl]&   & 13 \ar[ll]\ar[uu]\ar[ur]\ar[ddr]&   &   \\
  &   & 6 \ar@/^1pc/[uuuuuu]\ar[rrrr]\ar[dl]\ar[uur]&   &   &   & 7 \ar[llll]\ar@/_1pc/[uuuuuu]\ar[dl]\ar[uul] \\
  & 4 \ar@/^1pc/[uuuuuu]\ar[rrrr]\ar[ur]\ar[uur]&   &   &   & 5 \ar[llll]\ar@/_1pc/[uuuuuu]\ar[ur]\ar[uul]&   }
\]
Si entendéis este ejemplo podréis hacer cualquier otra cosa de este tipo. El manual de xymatrix es todavía mas rayante...

Enlaces de interés

Manual de xymatrix Y como siempre que escribo una receta... Manual de xypic Lo de xypic no lo conocía pero parece que es bastante mejor que xymatrix... habrá que echarle un ojo ;-)

Samsung SyncMaster 203b con GNU/Linux

— [ edit | raw ] migrated from node/472

Cómo configurar este monitor con xorg7 y sacarle todo el jugo.

Restart your system!

— [ edit | raw ] migrated from node/473

Seguro que más de una vez, y de 20, se os ha colgado el firefox (a.k.a iceweasel), lo matas (o se muere solo) y a veces al volverlo a ejecutar sale un mensajito como este:

Enviar correo no-ASCII desde un programa Python

— [ edit | raw ] migrated from node/471

Cómo enviar correo con cuerpo o cabeceras no-ASCII desde un programa Python

convertidor de video

— [ edit | raw ]
migrated from node/470
alguien por ahi me puede recomendar un buen convertidor de video? especificamente que convierta de AVI a MPG. y si tiene tiempo limitado, les agradeceria que me indiquen como crackearlo. Gracias!!

Video Streaming en Flash con Software Libre

— [ edit | raw ] migrated from node/468
Una forma sorprendentemente sencilla de hacer streaming de video tipo YouTube, pero usando sólo software libre.
Quién no conoce el streaming de video en flash. Páginas tan famosas como YouTube o la versión de google video.google.com son capaces de reproducir videos en formato FLV de Flash. El formato Flash en si es una especificación libre de la que han salido algunos proyectos interesantes, como Flowplayer; un reproductor libre de formato FLV, con lo que podremos añadir videos a nuestras páginas empleando herramientas libres!! Veamos cómo... Lo primero que necesitamos es convertir nuestro video original en formato FLV. Para ello, haremos uso de ffmpeg, con una orden similar a la siguiente (os pego directamente la orden del video de ejemplo):
$ ffmpeg -i video.avi -acodec mp3 -ar 22050 -ab 32 -f flv -s 288×144 dest.flv
Naturalmente, tendréis que cambiar la resolución del video destino (en este caso 288x144). Bien, tenemos un video en formato FLV. Para que el reproductor pueda saber la duración del video, permitir avanzar o retroceder en el video, etc... el fichero necesita unos metadatos que en la version actual de ffmpeg no añade. Suerte que tenemos un programa hecho en Ruby para estas marranadas llamado flvtool2:
$ flvtool2 -U dest.flv
Con esa sencilla orden, flvtool2 añade los metadatos escribiendo sobre el propio fichero que le pasamos como parámetros. Bien, ya casi hemos terminado... Sólo falta descargarnos el fichero swf del FlowPlayer e incluir en nuestro html un objeto como el siguiente:
<object type="application/x-shockwave-flash" data="FlowPlayer.swf" width="480" height="312" id="FlowPlayer">
  <param name="allowScriptAccess" value="sameDomain" />
  <param name="movie" value="FlowPlayer.swf" />
  <param name="quality" value="high" />
  <param name="scale" value="noScale" />
  <param name="wmode" value="transparent" />
  <param name="flashvars" value="videoFile=jura.flv&autoPlay=false&loop=false&autoBuffering=false&splashImageFile=clicktoplay.jpg"/>
</object>
Os recomiendo echar un vistazo a todas las opciones que soporta FlowPlayer, ya que se pueden poner thumbnails para videos largos, personalizar la imagen de "clicktoplay" (como he hecho en el ejemplo), cambiar el aspecto del reproductor mediante skins, etc... La resolución de reproducción del video, como veis en el html es en realidad el doble de la del fichero de video. Esto permite que el video se vea más grande, y la pérdida de calidad por el aumento de la resolución no se aprecia demasiado (en las escenas rápidas se ve peor, pero no es problema de la resolución, sino por el algoritmo de codificación). Fijaos en el principio del video... Bueno, pues os dejo con el video de presentación del festival de cortos Annecy del 2002 titulado "Jurannessic"... o cómo se descubrió el fenómeno de la persistencia de la visión. Bye!!

Referencias

Lo nuevo de emacs22

— [ edit | raw ] migrated from node/469

Un enlace interesante que cuenta algunas de las nuevas features de emacs 22 aunque creo que hay muuuchas más.

GNU/Linux y la banda ancha móvil

— [ edit | raw ] migrated from node/467
Recientemente ha caído en mis manos un juguetito muy chulo: un kit de conexión a banda ancha móvil... me he pasado unas cuantas horas pegándome con un sinfín de recetas y módulos hasta conseguir la dichosa conexión... que va freshhquísima... aquí viene un resumen de mis periplos...

Cómo indicar a X.org qué tarjeta de vídeo tienes

— [ edit | raw ] migrated from node/466
En esta receta se explica, qué hacer para indicar a X.Org qué tarjeta de vídeo tienes, y qué driver debe utilizar.

Acceder al archivo xorg.conf

La información que te interesa introducir, se encuentra en el archivo xorg.conf, para acceder a él, lo único que tienes que hacer es:
 $ cd etc/X11
Una vez aquí, te deberá aparecer el archivo xorg.conf, abrelo con algún editor de textos, por ejemplo:
 $ gedit xorg.conf
En este archivo, entre otra mucha información, hay una parte que hace referencia a la tarjeta de vídeo, la sección se llama Section "Device", por ejemplo a mi lo que me aparece es lo siguiente:
Section "Device"
	Identifier	"Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device"
	Driver		"vesa"
	BusID		"PCI:0:2:0"
EndSection
Donde pone Identifier, es donde está el nombre de tu tarjeta. Por ejemplo si tienes una tarjeta de vídeo NVIDIA, tendría que aparecerte algo así:
Section "Device"
        Identifier "NVIDIA Corporation NV11 [GeForce2 MX/MX 400]"
        Driver "nvidia"
        BusID "PCI:0:9:0"
EndSection

Agradecimientos

Esta receta ha sido posible gracias al altruismo de mi colegilla Cristobal. Blog de Cristobal. Por supuesto, gracias también, a todos los que hacen posible CRySoL y agradecerles la oportunidad que me dan de comunicar lo poco que sé.

GLib IO Channels con Python

— [ edit | raw ] migrated from node/465

Cómo utilizar los IO-Channels de GLib desde Python para implementar el patrón reactor.