lunes, 14 de abril de 2008

Latex: Más vale tarde que nunca

Viendo ahora los resultados que se pueden obtener usando Latex me arrepiento bastante de no haberlo descubierto antes de terminar la carrera. Pero bueno, más vale tarde que nunca y voy a tratar de usarlo a partir de ahora.

Si quieres saber como va esto te lo explico. Yo estoy escribiendo un trabajo usando Vim, pero se puede usar cualquier cosa. Siguiendo la sintaxis que puedes encontrar en cualquier tutorial la forma de obtener tu documento es:

# latex trabajo.tex

# dvipdf trabajo.dvi trabajo.pdf

Y listo. Pensando en lo que hay que hacer para escribir un documento con referencias de más de 100 páginas en Word u OpenOffice.org, puedo asegurar que nunca dejaré el Latex.

viernes, 25 de enero de 2008

El profiler de Netbeans

He necesitado echar mano de NetBeans para un proyecto de la Universidad. El proyecto consistía en indexar una gran cantidad de documentos, y luego proporcionar una interfaz "tipo google" para acceder a dichos documentos por relevancia, según el modelo clásico del espacio vectorial.


Bueno a lo que importa, dado el tamaño de la colección empecé a tener problemas con la memoria teniendo constantemente excepciones del java heap que me tenían ya mosqueado porque yo iba volcando todo a disco. Ya lo solucioné, pero en el camino descubrí la herramienta profiler.



Es simplemente IMPRESIONANTE, puedes ver cada cosa que objeto que se va alojando en la memoria, como van saliendo por el recolector de basura, .... Y todo en una lista ordenadita por "quien ocupa más" que es perfecta para detectar memory leaks.


¡QUIERO UN PROFILER PARA PYTHON!


Un saludo

jueves, 20 de diciembre de 2007

La maldad de los asistentes

Es un hecho que las distribuciones modernas de GNU/Linux están cada vez más adaptadas al usuario inexperto. Para casi todo existen cómodos asistentes que nos ayudan a cosas triviales como conectar a la red, actualizar el sistema o importar nuestra colección musical.

El problema es que si tú, como usuario avanzado, caes en el uso contínuo de los asistentes, empiezas a abstraerte y poco a poco, vas olvidando como funcionan las cosas por dentro. Personalmente, ese fue uno de los motivos que me hizo pasar a GNU/Linux, el entender como funcionan las cosas.

Comento esto porque me siento avergonzado. Hace poco tuve que configurar un portatil con la distribución Guadalinex, todo fue de perlas hasta que quise activar el WiFi. El caso es que la tarjeta externa Conceptronic no conseguía entrar a la red, a pesar de que la veía.

Sigo sin entender, por qué ese asistente no detecta la red, cuando en Ubuntu Edgy (sistema anterior del portatil) si la detectaba y en teoría son distribuciones similares.

El caso es que abriendo un terminal la solución era bien sencilla, pero llevo tanto tiempo gestionando mi sistema con asistentes que no lo recordaba.

¿Sera que no detecta la tarjeta? Era tan fácil como:
# iwconfig

Pues ahí aparecía la tarjeta ese no es el problema.

¿Será que no ve la red? Solución:
# sudo iwlist ra1 scan

Pues sí, sí la ve. Aunque desde el asistente la detecta con intensidad 0% y desde aqui con 78%. Puede que por ahí esté el problema.

Pero es un problema del asistente, ¿cómo configurar la red sin asistentes ni NetworkManager ?

Pues en mis comienzos hace años no tenía problema para lidiar con /etc/network/interfaces, sólo es cuestión de recordar como gestionar la red desde consola.

Para probar simplemente tengo que hacer:
# sudo ifconfig ra1 up
# sudo iwconfig ra1 essid elnombredelaESSID
# sudo iwconfig ra1 key s:lacontraseña
# sudo dhclient ra1


Y ya funciona. Conclusión: Mi Hardware funciona perfectamente, así como los drivers. El problema: El asistente de NetworkManager.

Ahora ya lo he automatizado todo y no tengo problema para conectar, pero ¿realmente era necesario recurrir a google para eso? De ahora en adelante trataré de recordar porqué es mejor hacerlo todo desde consola, para tener una idea clara de como funcionan las cosas, sin capas que impidan ententer.

Conste que me parece fenómeno que haya asistentes, porque es una forma de atraer al usuario común, pero a los que nos gusta este mundillo, deberíamos no olvidar las buenas costumbres.

Un saludo.

P.D. Información extraida de un post Helektron.com.

miércoles, 21 de noviembre de 2007

Instalar un servidor LAMP en 3 clicks

Debido a cuestiones académicas me veo obligado a empezar a trastear con el mundillo de los servidores LAMP (Linux + Apache + MySQL + PHP).

Durante este último año he estado trabajando con Turbogears y la verdad es que siguiendo la guía es bastante fácil instalar automáticamente todos los paquetes necesarios.

En cuanto a LAMP, pues al a ver tantísima información en la Web, uno no sabe muy bien como guiarse para conseguir hacerlo rápido y empezar a programar inmediatamente.

Pues buscando, buscando, me topé con una de esas funcionalidades que no sabes que existen y que una vez descubierta, no puedes creer que vivieras sin ella. Me refiero al marcar paquetes por tareas de Synaptic.

  1. Bien, abrimos Synaptic/Editar/Marcar paquetes por tareas... (1º click)
  2. Señalamos servidor LAMP (2º click)
  3. Le damos a aplicar (3º click)
Servidor instalado, gracias Synaptic ;)

Como sabéis, ya sólo queda colocar vuestros documentos en /var/www y a tocar localmente todo lo que necesitéis.

lunes, 22 de octubre de 2007

Configurando un cliente para el CVS de sourceforge

Esto es algo bastante común cuando se quiere trabajar en aplicaciones libres, y aunque parece que la tendencia augura un mejor futuro a SVN, nunca está de más tener a mano una forma rápida de descargar un proyecto de software y tenerlo listo para participar.

Para esta configuración es fundamental tener instalado el Open Secure Shell y CVS.

1.- Se crean los archivos .cvsignore y .cvsrc en el home del usuario, un ejemplo del contenido para un proyecto escrito en python puede ser:

  • .cvsignore:
*.png *.jpg *.xpm *.bak *.gladep *~ *dump*.sql *.pdf *.conf* *.pyc *.pyo .*.swp *.pywc
  • .cvsrc:
update -Pd
diff -uw
cvs -z 3

2.- El siguiente paso es exportar las variables:

#export CVSROOT= :ext:user@n_proyecto.cvs.sourceforge.net:/cvsroot/n_proyecto
#export CVS_RSH=ssh

3.- Y por último sólo tenemos que hacer el checkout para descargar el código

# cvs checkout nombre_rama_proyecto


Tras introducir nuestra clave de usuario de sourceforge se descarga el código. Entre las opciones de cvs recordar las tres fundamentales:
  • cvs update
  • cvs ci
  • cvs add fichero

jueves, 30 de agosto de 2007

Impresión a la carta: pdfnup

¿Cuántas veces has tenido que imprimir una presentación y has querido poner 6 diapositivas en una página para ahorrar papel?

¿Cuántas veces has intentado poner dos hojas por cara, separar pares de impares, etc, etc y el resultado han sido folios y folios para reciclar?

Salvemos los bosques, todo es mucho más sencillo: PDFNup

PDFNup es una aplicación de consola incluida en el paquete PDFJam. Escrita por David Firth, es realmente útil y básicamente sirve para realizar transformaciones en archivos PDF o PostScript.

Existe alguna GUI para manejarlo, pero es bastante sencillo de manejar directamente. Tras instalar el paquete abrimos una shell y ya está listo para funcionar. Supongamos que hemos bajado una revista electrónica, y la queremos imprimir, pero con dos hojas por folio porque no sabemos donde meter tantos papeles. Es tan simple como:

#pdfnup --nup 2x1 fichero.pdf

Y esto nos crea otro pdf que tiene la estructura que queremos, sencillo ¿no?

No, es que lo quiero con las páginas en vertical. Pues nada:

#pdfnup --nup 1x2 fichero.pdf

Esos son los usos más comunes para mí pero mirando la ayuda (#pdfnup --help) o las páginas man del programa (#man pdfnup) se pueden ver muchísimas más opciones que pueden que os hagan falta en un momento dado. Algunas de las posibilidades son:
  • Seleccionar las páginas que se quieren
  • Seleccionar la orientación de las páginas
  • El tamaño del papel
  • Poner marcos
  • Márgenes personalizados
  • Espacio entre páginas
  • ...
Bueno, pues recomendar esta aplicación, que muchos no sabrán que existe y que es EXTREMADAMENTE útil.

Un saludo

martes, 10 de julio de 2007

Desarrollo de un seguidor de paredes inteligente (Resultados)

Para empezar ejecutaremos nuestro controlador difuso sobre el ejemplo con el hicimos las primeras aproximaciones.

El resultado es:

Podemos apreciar claramente la mejora. Las rectas no tienen ningún tipo de “zigzagueo”. Las curvas cerradas se toman con suavidad, y el vehículo detecta perfectamente las curvas abiertas corrigiendo su rumbo.


Veamos otro ejemplo más complicado:


Como podemos ver con curvas con un ángulo más pronunciado, el robot también responde.

Aparentemente, la sección superior con forma de escalera, la hace mal. Pero no es así. El robot detecta la curva abierta y la corrige, pero en el proceso encuentra la cerrada y la corrige suavemente. Esa suavidad es la que hace que parezca que está pasando de largo, pero vimos en las secciones anteriores que era preferible una curva suave, que un giro de 90 grados parando el vehículo.


Analicemos otro ejemplo más:

Nuevamente el resultado es perfecto. Tras los tres ejemplos analizados podemos decir que el comportamiento es adecuado.