feed icon Ambos idiomas / Both languages
(es|en)

Como incluir bibliografia en documentos LaTeX
En este post voy a explicar como referenciar automáticamente bibliografia en un documento LaTeX.

Primero definimos la bibliografia usada en una sección de este tipo:
\begin{thebibliography}[ cantidad máxima de elementos ]
\bibitem[ ETIQUETA_1 ]{ referencia1 } Autor1, ... \emph{Título1}, ...
\bibitem[ ETIQUETA_2 ]{ referencia2 } Autor2, ... \emph{Título2}, ...
...
\bibitem[ ETIQUETA_N ]{ referenciaN } AutorN, ... \emph{TítuloN}, ...
\end{thebibliography}

Si no se especifica la etiqueta para identificación, automáticamente LaTeX genera números de la forma [1], [2], [3], etc.

Luego, al escribir se hace referencia de forma similar a como se usa \ref y \label.

Por ejemplo se pone:
\cite[pág.184]{referencia1}
y luego al generarse el documento automáticamente se reemplaza por:
[ETIQUETA_1, pág.184]

si no ponemos los corchetes:
[ETIQUETA_1]

o si no definimos etiquetas, simplemente queda:
[NumeroCorrespondiente]

Una alternativa a esto es el uso de BibTeX, que principalmente consiste en almacenar toda la bibliografía en un archivo de texto plano, separandola de esta forma de la "presentación" de la misma. Usa el mismo principio de separación del contenido y presentación/estilo que por ejemplo CSS (hojas de estilo).

Ejemplos de entradas de un archivo .bib:
@Article{referencia,
author = "",
title = "",
OPTcrossref = "",
OPTkey = "",
OPTjournal = "",
OPTyear = "",
OPTvolume = "",
OPTnumber = "",
OPTpages = "",
OPTmonth = "",
OPTnote = "",
OPTannote = ""
}
 
@Book{referencia,
author = "",
title = "",
publisher = "",
year = ,
address = "",
edition = "",
isbn = ""
}

y luego en el documento LaTeX se usa de forma similar a la opción presentada anteriormente:
\cite{referencia}

Para que aparezcan detalladas las referencias en el documento, antes del "\end{document}" se pone algo como:
bibliography{references}
bibliographystyle{plain}

Una ventaja de esta última opción es que en sitios como "Scientific Literature Digital Library" o "The Collection of Computer Science Bibliographies" proporcionan las entradas BibTeX de los papers y publicaciones que ofrecen o archivan. También, programas para manejar colecciones de libros (como por ejemplo Tellico) pueden exportar sus bases de datos a formato BibTeX o importar entradas desde archivos de este tipo.
Tech Tags:


[ 1 comment ] ( 259 views )   |  [ 0 trackbacks ]   |  permalink
Reemplazando matlab con python
Hace bastante tiempo que bastantes personas con distintos perfiles me vienen hablando bien de python, de su facilidad de uso y potencia. También habia visto en internet que habia muchas bibliotecas "científicas" y para practicamente cualquier cosa, hecho que me agradaba.

Hace bastante tiempo también que queria encontrar una solución definitiva para poder usar libremente y sin limitaciones mis scripts en Matlab. Si, esta Octave, que es Software Libre y esta bastante bien y es bastante compatible, pero le faltan algunas cosas y pensar en integrarlo con aplicaciones gráficas (u otras cosas) más alla de algunos bindings, no parecia muy sencillo. Tampoco parece que existan al día de hoy muchas bibliotecas para cosas más avanzadas.

Siempre me gusto Matlab porque podía hacer cosas de una forma relativamente sencilla, pero también me encontraba con el problema de que después dependia de su intérprete (privativo) y su infraestructura para ejecutar ese código. Cuando supe de Octave (hace ya unos años) pensé que seria bueno mantener mis scripts compatibles con este último para poder garantizar su distribución y uso (por ejemplo) y es lo que hice hasta hoy (o ayer, je).

Hace unos días, Juan Vuletich me dijo: "¿Probaste Smalltalk? Tiene todas las ventajas de matlab, todas las de C, y algunas extras..." y bueno... a raíz de eso pensé si en python no podría hacer algo similar... y dado que estaba con ganas desde antes de ponerme a aprender, busqué y me di cuenta que la misma idea ya se le habia ocurrido a mucha gente (por suerte para mi :-)) ya que encontré muchisimo material y la "migración" total solo me costó un par de horas. Asi que Smalltalk quedará para la próxima (no lo descarto!)

Con las bibliotecas SciPy y Matplotlib se resuelve lo básico.

Se obtiene una sintaxis muy similar a Matlab, lo que facilita enormemente el "traspaso", y una vez en python podemos interfacear nuestro código con miles de bibliotecas (la comunidad python es realmente grande, muchisimo más grande que la de Octave al menos) y manteniendo, ante todo, la simplicidad y claridad.



También use algunas referencias que me fueron de gran utilidad, como esta tabla comparativa y esta descripción que hacen en el sitio de ScyPy.org: NumPy for Matlab Users.

De esta forma se puede trabajar mediante scripts y funciones. Para hacerlo de forma interactiva, ingresando comandos y viendo su resultado en el acto (la forma "standard" de Matlab) tenemos IPython, un excelente shell interactivo para python con soporte para Matplotlib y computación paralela.

Ahora, lo único que queda a favor de Matlab es la cantidad impresionante de toolkits que tiene para un montón de temas específicos (signal processing, redes neuronales, lógica difusa, etc) y Simulink, pero dada la cantidad de bibliotecas que hay en python y la facilidad que existe para integrar código (además que en este último caso el usuario tiene un control total sobre la aplicación, pudiendo hilar tan fino como quiera) no creo que no sea nada que no se pueda lograr con un poco de trabajo (sobre todo para los usuarios que también son programadores).

Si miran el siguiente código que puse a manera de ejemplo, se daran cuenta que perfectamente puede pasar como "código Matlab". En este caso en particular es practicamente igual. Básicamente lo que hace es comparar con gráficos (que además de mostrados son guardados en png) tres DFT con distinto N, mostrando que a pesar de que alcanza para recuperar la señal con N=L, rellenando la señal original con ceros y aumentando el N de la DFT se logra una mejor visualización del espectro.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
from pylab import *
 
L = 10
x = ones( L )
 
# Figura 1: N = L = 10
N = L
X = fft( x, N )
figure(1)
subplot(311)
title('N = L = 10')
horiz = arange(0,L,1)
stem( horiz, x )
subplot(312)
horiz = arange(0,N,1)
stem( horiz, abs(X) )
subplot(313)
stem( horiz, angle(X) )
savefig( 'figura1.png' )
 
 
# Figura 2: N = 50
N = 50
X = fft( x, N )
figure(2)
subplot(311)
title('N = 50')
horiz = arange(0,L,1)
stem( horiz, x )
subplot(312)
horiz = arange(0,N,1)
stem( horiz, abs(X) )
subplot(313)
stem( horiz, angle(X) )
savefig( 'figura2.png' )
 
 
# Figura 3: N = 100
N = 100
X = fft( x, N )
figure(3)
subplot(311)
title('N = 100')
horiz = arange(0,L,1)
stem( horiz, x )
subplot(312)
horiz = arange(0,N,1)
stem( horiz, abs(X) )
subplot(313)
stem( horiz, angle(X) )
savefig( 'figura3.png' )
 
 
show()


Conclusión: aprendí algo de python que era algo que tenia pendiente y resolví el problema que tenia de poder tener aplicaciones "standalone"[1] de calculo numérico relativamente avanzado y con una sintaxis clara y sencilla. Cuando se requiera tiempo real o velocidad de procesamiento no quedará otra que seguir recurriendo a c/c++ (en este punto es bueno mencionar que python puede llamar directamente a funciones c/c++) o assembly.
Para los que ya manejen otro lenguaje de scripting (tipo Perl, Lua o PHP) y hagan cosas con Matlab recomiendo que al menos lo prueben ya que no es para nada complicado y los beneficios son muchos.

[1] Bueno, para ser exactos precisamos el intérprete de python, pero es Software Libre y multiplataforma :-)

Update 1: En mi otro blog dedicado exclusivamente al audio escribí "Funciones para trabajar con wav's vectorialmente en python" (es decir "a la manera" de matlab) como una de las primeras consecuencias de este post. Por otra parte, en el grupo Buena Señal surgió un thread bastante interesante sobre esto (link) con más datos y opiniones sobre lo planteado en este post. Además, Juan Vuletich también escribió en su blog sobre este tema, donde propone a Smalltalk como reemplazo y compara el ejemplo aqui dado con su respectiva solución en squeak (una implementación libre de Smalltalk): "A taste of Squeak for Signal Processing folks"

Update 2: Me crucé con este interesante blog destinado precisamente al tema de este post: "Python as a better Matlab" y me enteré de esto: "Sage: Un sistema de álgebra computacional basado en Python".


[ 2 comments ] ( 1063 views )   |  [ 1 trackbacks ]   |  permalink  |  related link
Redes y linux (recopilación)
Este post es recopilatorio de las cosas que aprendí este último tiempo sobre redes y linux.

Comandos:
hostname: muestra o setea el sistema host
ifconfig: configura la interfaz de red o muestra sus parámetros
host: herramienta para conocer la dirección IP de un host \
("host direccion.com")
route: muestra/manipula la tabla de ruteo IP
netstat: muestra las conexiones de red, tablas de ruteo, estadísticas\
de la interfaz, conexiones enmascaradas, etc
dnsdomainname: muestra el dominio del sistema
arp: manipula el cache ARP del sistema
ping, ping6: envia el ICMP ECHO_REQUEST a hosts


Archivos de configuración útiles: (al menos en debian based)
/etc/hosts -> resolución automática de nombres (por ejemplo\
192.168.1.7 miserver.org) sin consultar al DNS

/etc/resolv.conf -> configuración del DNS

/etc/network/interfaces -> configuración del placa ethernet (dhcp o \
static, etc)


Monitoreo:

* Ethereal: permite capturar el tráfico de la red y analizarlo. Permite ver como funcionan los protocolos.
* Nagios: monitoreo de red con interfaz web.

Servicios:
* apache2: servidor web.
* postfix: envio de mail.
* cups: servidor de impresión.
* vsftpd: servidor ftp.
* jabberd: servidor de IM.
* sshd: servidor ssh.
* distccd: compilación distribuida para c y c++.

Configuración remota:
* Interfaz web de CUPS.
* phpMyAdmin: administración de MySQL.

[ 2 comments ] ( 610 views )   |  [ 1 trackbacks ]   |  permalink
Convolución circular rápida (aplicación en reverbs)


[ add comment ]   |  [ 0 trackbacks ]   |  permalink  |  related link
Agregando nuevos service menus a Konqueror y KDE
Esto sirve para agregar opciones de ejecución o acciones a determinados archivos cuando usamos KDE.

Hay que crear un archivo con extensión ".desktop" y agregarlo en "~/.kde/share/apps/konqueror/servicemenus/" para que este solo disponible para nuestro usuario y en "/usr/share/apps/konqueror/servicemenus/" para que lo este para todos los usuarios del sistema.

Como ejemplo pongo lo que uso para reproducir videos en un screen alternativo (el tv-out), pero se puede hacer cualquier cosa que a uno se le ocurra:
[Desktop Entry]
Actions=Play in TV-OUT;
Encoding=UTF-8
ServiceTypes=video/mpeg,video/x-msvideo,video/x-ms-wmv,video/x-ms-asf,
video/flv,video/mp4
 
[Desktop Action Play in TV-OUT]
Icon=
Name=Play in TV-OUT
Exec=xterm -e ~/scripts/video/mplay_to_tvout.sh "%U"

En este caso en particular lo que hace es ejecutar un script pasandole el nombre del archivo (la cadena "%U" será reemplazada por el path y nombre de archivo sobre el que se hizo click) y dentro de ese script se ejecutan los comandos necesarios, como ser setear correctamente la variable de entorno DISPLAY, exportarla, pasar los parámetros que desee a mplayer, elegir la tarjeta de sonido adecuada, etc.

Esto aparecerá por ejemplo como opción de ejecución dentro de "Acciones" cuando se haga click con el botón derecho sobre un archivo con las extensiones definidas (en "ServiceTypes").

Ya que estoy pongo el script para reproducir algo en otro screen por si le sirve a alguien:
#!/bin/sh
#uso: mplay_to_tvout.sh movie
#uso: mplay_to_tvout.sh movie subtitle
 
ARCH=$1
SUBTITULO=$2
 
export DISPLAY=:0.1 #screen del tvout
#cierra kicker (barra de tareas) para que no moleste y "tape" la pantalla
dcop kicker-screen-1 kicker-screen-1 quit
 
if [ -f "$ARCH" ] # si existe y es un archivo regular
then
if [ $# -lt 2 ] # si se ingreso solo un parámentro(cant_param<2)
then
# modo fullscreen con driver de audio alsa
mplayer -fs -vo xv -ao alsa:mmap:device=ca0106 "$ARCH"
else
if [ -f "$SUBTITULO" ] #verifica si existe $2 (el subtítulo)
then
# modo fullscreen con driver de audio alsa + subtítulo
mplayer -fs -vo xv -ao alsa:mmap:device=ca0106 "$ARCH"
-sub "$SUBTITULO"
else
echo "no existe el subtítulo $SUBTITULO"
fi
 
fi
else
echo "no existe el archivo $ARCH"
fi


[ add comment ]   |  [ 0 trackbacks ]   |  permalink

<<First <Back | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Next> Last>>