Archivo de la categoría ‘software’

Wammu: Controla tu móvil

Domingo, 5 de julio de 2009 por

Hoy estaba buscando algo para poder acceder a la agenda de mi teléfono, los mensajes y demás desde Ubuntu (en mi caso 9.04) y he descubierto wammu, un programita que te permite hacer todo esto. De software libre y basado en GTK. Y descargable de repositorios.

Yo he conectado mi móvil por Bluetooth, pero existen todas las posibilidades. Utilizando el wizard, le he pedido que localice mi móvil de forma automática, y no ha ido nada mal.

wammu

A veces ha fallado en alguna cosa, dando un error, pero haciendo click en "Back" y repitiendo el paso fallido, ha terminado por darme acceso sin mayores problemas al móvil.

Backtraces en C

Jueves, 7 de mayo de 2009 por

El otro día me entró la curiosidad de cómo podía saber al ejecutar un programa donde se producía un segmentation fault, por ejemplo, que es bastante común en mi caso :-) con ayuda de algún compañero de trabajo encontramos la página de GNU en la que se refieren a los Backtraces.

Para usarlo, hay que poner un #include <execinfo.h> y las opciones -g y -rdynamic, si utilizas el compilador y el linker de GNU. De esta manera se guardan en el ejecutable todos los símbolos. Aumenta el tamaño de los ejecutables, con lo que conviene sólo usarlo mientras se hacen pruebas. Esta librería tiene tres funciones:

  • int backtrace (void **buffer, int size): Rellena buffer con los size punteros obtenidos del backtrace del thread en ejecución. Devuelve el número de punteros devueltos, menor o igual que size.
  • char ** backtrace_symbols (void *const *buffer, int size): Rellena buffer con los nombres (símbolos) del backtrace, hasta un máximo de size.
  • void backtrace_symbols_fd (void *const *buffer, int size, int fd): Hace la misma operación que la anterior, pero devolviendo los strings al fichero fd, en lugar de al buffer de punteros.

Ejemplo de función de uso (de la página de GNU):

     print_trace (void)
     {
         void *array[10];
         size_t size;
         char **strings;
         size_t i;

         size = backtrace (array, 10);
         strings = backtrace_symbols (array, size);

         printf ("Obtained %zd stack frames.\n", size);

         for (i = 0; i < size; i++)
            printf ("%s\n", strings[i]);

         free (strings);
     }

Estas funciones sólo obtienen los datos correspondientes al thread que llama a estas funciones. Si por ejemplo quieres ver las funciones que se llaman en un segmentation fault, deberías cazar la señal SIGSEGV con la función signal de signal.h y llamar a una función que llame a las de execinfo.h.

Enlace: Backtraces, GNU library

Stellarium: Para ver las estrellas

Domingo, 3 de mayo de 2009 por

Este puente he descubierto Stellarium, un programa gratuito, de código abierto, que te permite ver el cielo tal cual y aprender a identificar planetas, estrella, constelaciones...

stellarium

Aunque parezca un coñazo salir a ver las estrellas con portátil, merece la pena hacerlo. Ha sido la primera vez que he sido capaz de identificar constelaciones (jeje, la Osa Mayor no cuenta)
Este programa es más que un simple planisferio, tiene muchas funciones para ir aprendiendo cosillas de Astronomia, como todos los datos de las estrellas y planetas (nombres, distancia, clase...), figuras de las constelaciones para entender por qué se llaman así, etc.
stellarium_constelac
Está disponible tanto en Linux, como Windows o Mac.
A todos los novatos en esto de las Estrellas, les recomiendo que lo descarguen y prueben

Fotomontajes: Regalos Originales

Martes, 21 de abril de 2009 por

Para cuando queréis hacer un regalo personalizado y original, os dejo un resumen de algunas aplicaciones y programas para montajes con fotos que he probado:

- Collage. El programa Shape Collage es muy fácil de utilizar y permite meter una imagen, logo o texto, y hacerlo con una base de fotos. En su web puedes descargarlo y ver más ejemplos.
shape collage

- Poner tu/su cara a un/a famoso/a. Hay varias aplicaciones on-line muy rápidas. Sólo elige la plantilla y sube la foto con la cara que quieres que aparezca. En FaceInHole tienen un repertorio muy amplio, ordenado por temática. En Photofunia tienen otro tipo de plantillas, con efectos muy curiosos.
 face in hole

- Poster. Las aplicaciones anteriores no permiten generar una foto con resolución suficiente para luego imprimirlas en un tamaño aceptable. Con Poster Forge se puede crear poster de películas, carteles de "Se busca", etc. personalizando los títulos, créditos, etc.
poster forge

- Mosaico. Expliqué paso a paso aquí cómo hacerlo.

¡Ya no hay excusas para no intentar hacer regalos curiosos!

No me toques las ventanas!

Domingo, 5 de abril de 2009 por

Una de las cosas que más me molesta de gran cantidad de páginas web, en especial la de algún banco, es que me maximizan la ventana de firefox. Cuando estás navegando en un portátil con pantalla panorámica, no me gusta tener firefox maximizado por que es absurdo, pero por lo visto hay ciertos diseñadores de páginas que se empeñan en tocarme las ventanas sin permiso.

Hoy por fin he vencido a la pereza y he buscado cómo evitar que las páginas web te redimensionen la ventana de firefox. Es realmente fácil:

Editar -> Preferencias -> Contenido -> Avanzado.

Ahí veremos lo que le permitimos hacer a los scripts que se carguen desde una página web. Quitamos la selección en "Mover y redimensionar ventanas" para que sólo tú manejes tu navegador.

firefox1

F1 Live Timing en Consola de Linux

Miércoles, 25 de marzo de 2009 por

En esta última fiebre que me ha entrado de posts de Fórmula 1 debido al comienzo del Mundial, os dejo la última perla. Justo al final de la temporada pasada descubrí live-f1: Un programita para poder ver el Live Timing de la Fórmula 1 en consola.

¿Por qué usarlo? No sé, yo tengo mis tres razones válidas: 1) La máquina virtual de Java al cargar en la página oficial tarda a veces mucho en cargar, 2)seguramente así se reduzca el tráfico al no tener que cargar ninguna web (por si tenemos 3G) y además 3)en este pongo las letras del tamaño que quiera, por si quiero espanzurrarme bien en el sofá. Si alguien tiene razones más poderosas, puede ponerlas en comentarios :-)

Este programa viene con unas sencillas instrucciones para compilarlo y usarlo, pero dejo unas pinceladas:

  • Es necesario darse de alta en la página oficial de la F1 para poder usarlo.
  • Dependencias: librería de ncurses 5.5 y neon 0.24 (o superiores), descargables de repositorios ( libncurses5-dev y libneon25-dev o superiores)
  • Tu usuario y contraseña de formula1.com quedan guardados en el fichero .f1rc de tu $HOME.

Enlace: live-f1

Actualización: Si el enlace no funciona (a veces pasa) descargarlo de aquí: http://launchpad.net/live-f1/0.2/0.2.9/+download/live-f1-0.2.9.tar.gz

Nota: El Live Timing de la fórmula 1 es una aplicación que te permite ver los tiempos que hace cada piloto en tiempo real. Básicamente, ves esa pantallita que los jefes de equipo miran constantemente. Tiempo por vuelta, vuelta rápida, sectores, diferencias entre pilotos... Para algunas carreras llenas de estrategia es muy útil para transmitir emociones, si bien para luchas sin cuartel (las pocas que hay) casi hasta estorba :-) Habitualmente funciona como una aplicación Java en un navegador. Es gratuita pero debes darte de alta en su web.

Actualización  12/03/2010: Al parecer, la aplicación no funciona correctamente. Es posible que fórmula1.com haya bloqueado el acceso a sus datos por aplicaciones de terceros. Ya hubo algunos problemas con una aplicación creada para Android. Ahora la opción es el live timing the la página oficial o su aplicación para móviles. No obstante, si a alguno os sigue funcionando esta aplicación, os agradeceríamos el comentario. Gracias :-)

Actualización 25/03/2010: Nueva versión de los fuentes que sí funcionan ahora para la temporada 2010. Gracias a saba por el comentario: http://launchpad.net/live-f1/0.2/0.2.9/+download/live-f1-0.2.9.tar.gz

Pon a tope tu QuadCore

Jueves, 5 de marzo de 2009 por

Para poder sacar el máximo partido a los nuevos microprocesadores de doble o cuádruple núcleo debemos paralelizar nuestros programas. Esto consiste en convertir nuestro programa en varios programas que realizan cada uno una parte del cálculo. La coordinación de cada uno de estos subprogramas requiere que se puedan comunicar entre sí sin afectar a la posibilidad de ejecutarse de forma independiente y evitando problemas de concurrencia.

La interfaz MPI (Message Passing Interface) propone un conjunto de funciones que ayudan realizar esta tarea de coordinación. Su uso en nuestros programas es bastante sencillo. En Windows la implementación de mpi más cómoda es MPICH2. En Linux hay otra un poco más extendida que es OpenMPI.

Después de instalar MPICH2 en nuestro ordenador solo tenemos que linkar nuestro programa con la librería “C:Program FilesMPICH2libmpi.lib” y usar el directorio de inclusión “C:Program FilesMPICH2include”. Hecho esto probamos un programa de ejemplo como el que podemos encontrar en wikipedia (http://es.wikipedia.org/wiki/MPI). Vemos que este programa es genérico para cualquier distribución de mpi.

El programa usa pocas funciones principales

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);

MPI_Comm_size(MPI_COMM_WORLD, &size);

La primera función inicializa MPI la segunda nos devuelve el rango que es un identificador del proceso y la tercera nos devuelve el numero de instancias que se han lanzado. Después se usan dos funciones que son las encargadas de enviar y recibir mensajes. Estas funciones son bloqueantes y permiten la sincronización de los procesos.

MPI_Send(&num, 1, MPI_INT, next, tag, MPI_COMM_WORLD); 
MPI_Recv(&num, 1, MPI_INT, from, tag, MPI_COMM_WORLD, &status);

Para ejecutar el programa usamos el siguiente comando en una términal

mpiexec -n 4 -localonly ./bin/Debug/mpisample.exe

Este comando indica que se ejecutarán 4 instancias del programa (-n 4) en modo local (-localonly). Mpich instala un servicio de Windows que permite que se puedan lanzar procesos coordinados en varias máquinas conectadas por red, como es el caso de los grandes clusters de computación.

resultado mpi

resultado mpi

Arduino con Makefile

Jueves, 12 de febrero de 2009 por

Para todos los que no estén familiarizados con lo que es Arduino, intentaré resumirlo: Arduino es un proyecto de hardware y software libre, parecido a Pinguino, pero con un microcontrolador Atmega168. El proyecto ha sido un éxito y está bastante avanzado, con multitud de documentación y ejemplos, especialmente útiles para principiantes y enfocados a la enseñanza. De hecho, las librerías de C que utilizan facilitan mucho el uso, ocultando los aspectos más oscuros de programar un Atmega a pelo. Hay varios modelos, un Arduino Diecimila, anda por los 24 €, ya montado.

Para programar Arduino existe un IDE gratuito para Windows, Linux y Mac, pero yo soy fan de los Makefiles en linux, y de usar mi editor, manías... Además, con algo de entrenamiento, entiendes mejor lo que estás haciendo y la localización de los errores si los hubiera. Arduino tiene un Makefile incorporado en arduino_home/hardware/cores/arduino.

El Makefile incluye en los comentarios unas instrucciones maravillosas que lo dejan listo para usarse. Al principio hay que cambiar algunos parámetros para nuestro programa en particular:

TARGET = $(notdir $(CURDIR))
INSTALL_DIR = /opt/arduino
PORT = /dev/ttyUSB0
UPLOAD_RATE = 19200
AVRDUDE_PROGRAMMER = stk500v1
MCU = atmega168
F_CPU = 16000000

Básicamente, aquí el target sería el nombre del directorio (así funciona el IDE, qué casualidad, mismo nombre en directorio y .hex,  pero puedes llamarlo como quieras, programa, por ejemplo), dónde hemos instalado arduino, el puerto que usaremos para subir el programa, baud rate y características de la placa: procesador atmega168 (arduinos viejos atmega8), 16MHz.

Si se quiere añadir una librería, habrá que meter su código fuente en SRC (si es .c) o en SRCXX (si es .cpp) y de la misma forma poner los directorios en que se encuentran las cabeceras (.h) en CINCS o CXXINCS. Para mi gusto, el otro día me dí cuenta de que falta una importantísima: hay que añadir Print.cpp a SRCXX para que funcione el puerto serie, dado que la clase de manejo del puerto de serie, HardwareSerial, hereda directamente de la clase Print.

Y se escribe en un terminal:

make para obtener el programa.hex

make upload para subir programa.hex al arduino.

Por cierto que echando un vistazo a arduino_home/hardware/cores/arduino se puede entender bastante sobre como funcionan algunas cosas, crearte tus propias librerías o sencillamente ir avanzando en el uso de Arduino.

Opera tu propia Central Térmica

Miércoles, 11 de febrero de 2009 por

Si alguna vez te has preguntado cómo se genera la luz que llega a tu casa, te recomiendo eches un vistazo a esta Web.

Central Térmica
Desde "Mi central" te puedes descargar el programa para simular una central térmica.

Está de lo más completo, con todos los circuitos, y sirve para hacerse una idea de lo complicado que es el mundo de la generación. Juegas con la producción, los costes de la energía, del combustible... vamos, real como la vida misma.

Además, te llama de vez en cuando el Sr. Reynolds para aconsejarte.

Pinguino project

Domingo, 8 de febrero de 2009 por

Ayer sábado se presentó en Madrid la plataforma Pinguino.

logo_pinguino

Se trata de una plataforma para desarrollo de microcontroladores similar a Arduino, pero basada en un microcontrolador PIC y creada por Jean-Pierre Mandon.

Dispone de un entorno de desarrollo para Windows, Linux y Mac OS X que de momento se encuentra en una versión beta 4.

 

El hardware está basado en un 18F2550 y dispone de interfaz USB nativo (es la diferencia más notable respecto a Arduino, ojo al logo de Pinguino), de un puerto de serie, I2C y entradas y salidas de propósito general. Se puede alimentar tanto por USB como por un conector externo.

pinguino_board

El entorno de desarrollo o IDE es prácticamente igual al de Arduino. También está basado en Python e incluso el código base parece ser el mismo. Dispone de un compilador de C (SDCC), un ensamblador y enlazador (GPUTILS) y un bootloader basado en el proyecto PUF. Se puede descargar desde aquí.

pinguino_ide

Tengo ganas de probarlo, a ver si saco un rato y monto una placa, porque de momento parece que no se vende.

Más información en la página del proyecto y en el blog del creador de Pinguino.