| Subcribe via RSS

Python: Trabajar con MySQL

Septiembre 18th, 2008 | 3 Comments | Posted in programacion, python

En esta nueva entrega de artículos sobre Python le ha tocado el turno al MySQL.

Lo primero, si no tenemos instalado el soporte MySQL para Python debemos añadirlo al sistema. En Ubuntu podemos hacerlo así:

sudo apt-get install python-mysqldb

Existen dos formas de trabajar con MySQL, una es a través del módulo _mysql y la otra es a través de MySQLdb. _mysql es la implementación en Python de la API de C para MySQL. Se suele recomendar usar MySQLdb para trabajar, pero, cabezota que es uno yo suelo trabajar con _mysql :-P .

Para el ejemplo voy a suponer que existe una tabla llamada clientes que contiene los campos nombre y apellido.

#!/usr/bin/env python
 
import _mysql
 
# Datos para la conexión a MySQL
mysql_servidor = 'localhost'
mysql_usuario  = 'usuario'
mysql_clave    = 'clave'
mysql_bd       = 'base_datos'
 
conexion = _mysql.connect(host=mysql_servidor, user=mysql_usuario, passwd=mysql_clave, db=mysql_bd)
sql = "select * from clientes limit 10"
conexion.query(sql)
query = conexion.store_result()
if query.num_rows():
	print "Resultados\n=========="
	fila = query.fetch_row(how=1)
	while fila:
		print fila[0]["nombre"], " ", fila[0]["apellido"]
		fila = query.fetch_row(how=1)
conexion.close()

Aquí empezamos a usar conceptos algo más complicados como los diccionarios y las tuplas. Se recomienda buscar información al respecto (o igual me animo y escribo algún post sobre el tema).

Algunos comentarios:

1) fetch_row() tiene un parámetro opcional llamado how que indica cómo se devuelven los resultados. Si se especifica el valor ‘1′ los devolverá como un dicconario donde la clave es el nombre del campo.

2) Uso fila[0] ya que fetch_row devuelve cada fila como un diccionario dentro de una tupla.

3) store_result(). Si se usa esta función el servidor nos envía todos los datos “de golpe”, lo que puede ser un problema si hay muchos datos. Sin embargo podemos limitar el número de resultados usando LIMIT en la SQL. También podemos usar use_result() y el servidor nos devolvera las filas una a una. Esta opción tiene la pega de que consumimos más recursos del servidor.

Tags: , , ,

Ubuntu: WMWare no reconoce mis dispositivos USB

Septiembre 8th, 2008 | No Comments » | Posted in ubuntu, virtualizacion, vmware

Es posible que cuando conectes un dispositivo USB a tu ordenador, este esté visible en Ubuntu pero no en la máquina virtual WMWare.

Para solucionarlo basta con editar el fichero ‘fstab’:

sudo gedit /etc/fstab

y añadir las líneas:

# USB for vmware/vbox
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0

Reiniciar Ubuntu y la máquina virtual.

Asegúrate que en las propiedades de tu máquina virtual tienes activado en controlador USB.

Una vez reiniciada la máquina virtual basta con ir a VMWare y en el menú ‘WM’->Removable devices->USB Devices seleccionar el dispositivo USB que queremos activar.

Con esto debería bastar, espero que os funcione.

Sacado de la guía para instalar VMWare en Ubuntu 8.04 (en inglés).

Tags: , ,

Arrancar un programa automáticamente al entrar en Ubuntu (Gnome)

Agosto 29th, 2008 | No Comments » | Posted in linux, ubuntu

En ocasiones puede resultarnos interesante poder arrancar algún programa al iniciar sesión en nuestro ordenador con Ubuntu. Por ejemplo, es posible que queramos que el Skype se incie automáticamente al entrar en Ubuntu (Skype debe estar instalado en el sistema previamente).

Para esto basta con ir a Sistema -> Preferencias -> Sesiones.

Una vez allí basta con que pinchemos sobre el botón ‘Añadir’ y rellenemos los campos:

Nombre: Skype
Comando: skype (en minúsculas)
Descripción: Arrancar Skype automáticamente (por ejemplo)

Aceptamos y listo. La próxima vez que entremos en Ubuntu Skype se abrirá automáticamente.

Tags: , , ,

Instalando Ubuntu 8.04 en Dell Inspiron 1525

Agosto 28th, 2008 | 4 Comments | Posted in Hardware, ubuntu

Tal y como comenté hace un par de días ya me ha llegado mi flamante Dell Inspiron 1525. Como seguramente sabréis este portátil se puede comprar con Ubuntu o con Windows Vista. Yo opté por esta segunda opción porque nunca se sabe si puedo necesitar el Vista y porque costaban prácticamente lo mismo.

Lo primero que hice fue juguetear un poco con el Vista para ver qué tal funcionaba el portátil (por cierto, con el Vista me siento totalmente perdido).

Una vez comprobado que todo funcionaba bien me puse manos a la obra y empecé con la instalación de Ubuntu 8.03. Me colé con los CD de instalación y puse el de x86 en lugar de la versión de Ubuntu de 64 bits (algún día, cuando tenga tiempo y ganas, lo cambiaré).

Comencé haciendo sitio para Ubuntu reduciendo el tamaño de la partición de Vista a la mitad (es lo máximo que me dejaba reducir).

Una vez hecho sitio para Ubuntu metí el CD y reinicié. Por cierto, está puesto para arrancar primero el disco duro así que hay que entrar en la Bios para indicarle que arranque desde el CD.

En la instalación todo fue correctamente. Si quieres conservar la partición de Vista es recomendable hacer el particionado manual.

Mi portátil tiene 320Gb, dejé 40 Gb para la carpeta raíz ‘/’, 4Gb para la partición de Swap y el resto para la partición que va a montarse como ‘/home’. Me gusta tenerlo así por si hay algún problema puedo reinstalarlo todo bastante rápido.

En cuanto terminó la instalación comencé a meterle los programas con los que trabajo habitualmente: Quanta plus, Thunderbird, Rapid SVN,GnoTime, K3B, VLC, Filezilla, Skype, rsync, Apache+MySQL+PHP, VMWare y algunos otros que ahora no recuerdo.

Lo siguiente fue copiar a la partición /home/gorka todos los datos de mi antiguo portátil y, voilá, automáticamente los programas que uso han quedado configurados a mi gusto (es una de las cosas por las que prefiero Linux a cualquier Windows).

Parece que todo funciona bien, incluso la tarjeta inalámbrica que parece que al principio daba algunos problemas (que según tengo entendido solucionaron los de Dell).

Todo ha ido como la seda, estoy contento.

Y, como siempre, un poco de publicidad para terminar:

Entrar en Dell.es

Tags: , , , ,

Lexmark X215 funcionando con Ubuntu 8.04

Agosto 27th, 2008 | No Comments » | Posted in ubuntu

¡Casi no puedo ni creerlo! He conseguido que funcione una Lexmark X215 con Ubuntu 8.04. Después de varios meses sin intentarlo de nuevo (y casi a punto de desterrar esta multifunción a tareas de simple fotocopiadora) lo he conseguido.

La pista me la dieron aquí:
http://foros.ubuntu-cl.org/viewtopic.php?p=30637

Sabiendo que la Lexmarxk X215 funciona igual que una Samsung scx-4×16 rebusqué un poco y encontré la solución aquí:

http://ubuntuforums.org/showthread.php?t=341621

Los pasos que seguí fueron:

1) Descargar el driver de Samsung. Es posible que haya una versión nuevo, sólo es cuestión de buscar.

2) Lo descomprimí en la carpeta ‘/home/gorka/cdroot’.

3) Abrí una consola y tecleé:

cd /home/gorka/cdroot
sudo chown -R root:root *
sudo ./autorun

4) Este último comando abre un asistente de instalación. Como no me autodetectó la impresora cancelé la configuración en cuanto me pidió que indicara el puerto al que estaba conectado la impresora.

5) Abrí el asistente de impresoras de Ubuntu: Sistema->Administración->Impresoras.

6) Seleccioné: Impresora nueva.

7) Buscó las impresoras y la encontró conectado al puerto LPT1 (sí, sí, está conectada a ese puerto y no al USB en este PC). Seleccioné la impresora y click en siguiente.

8 ) En la lista de controladores seleccioné el de Samsung.

9) De la lista de impresoras de Samsung escogí la “SCX-4×16″.

10) Siguiente, aplicar y listo. Pedí que imprimiera la página de prueba y ¡Tacháaan! Salió perfecta.

He de decir que es posible que en algún momento tengas que reiniciar el ordenador, por ejemplo si ves que la lista de impresoras de Samsung no aparece, o que no se detecta la impresora Lexmark.

Suerte, que creo que sois unos cuantos con éste problema.

Como nota final diré que esta ha sido la primera Lexmark que me he comprado y será la última.

Tags: , ,

Instalar paquetes .deb (debian) en Ubuntu

Agosto 25th, 2008 | 1 Comment | Posted in linux, ubuntu

Si alguna vez te has decargado algún paquete .deb seguramente habrás tenido problemas usando el comando apt-get install. Para este tipo de programas lo mejor es usar el gestor de paquetes GDebi. Usarlo es tan sencillo (en Ubuntu con Gnome) como ir a la carpeta donde está el archivo a instalar, pinchar sobre el fichero con el botón derecho y seleccionar “Abrir con Instalador de paquetes GDebi”.

Esta es una opción recomendada frente a “sudo dpkg -i” ya que este último a veces da problemas con las dependencias entre paquetes.

Tags: , , ,

La consola de Linux – Controlar los procesos con ps

Agosto 15th, 2008 | No Comments » | Posted in linux, ubuntu

ps es un comando que nos permite ver los procesos que se están ejecutando en un sistema. Si tecleamos:

ps

en la línea de comando tendremos el siguiente resultado:

  PID TTY          TIME CMD
 7953 pts/1    00:00:00 bash
 7954 pts/1    00:00:00 ps

Vemos que este listado es muy escaso, tan sólo aparecen los procesos hijos de la consola que tenemos abierta. Si queremos ver todos los procesos del sistema tendremos que usar:

ps ax

que mostrará un resultado como éste:

root         1  0.0  0.0   5112  1968 ?        Ss   11:20   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   11:20   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   11:20   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        SN   11:20   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11:20   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S<   11:20   0:00 [events/0]
 
...

Como esto no está muy claro yo le suelo añadir la opción ‘u’ para que lo muestre en un formato más claro:

ps aux

que da como resultado:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   5112  1968 ?        Ss   11:20   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   11:20   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   11:20   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        SN   11:20   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11:20   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S<   11:20   0:00 [events/0]

Mucho más claro. Además ‘aux’ para mí es más fácil de recordar :-P .

Si queremos saber si hay algún programa en concreto que esté en marcha podemos usar algo como:

ps aux | grep firefox

(para buscar si firefox se está ejecutando)

ó también podemos usar:

ps u -C firefox

La primera forma devuelve todas las líneas que contengan el término “firefox” mientras la segunda devolverá los procesos cuyo nombre sea “firefox”.

Para cargarnos algún proceso podemos usar el comando kill:

kill -9 

donde es el número del proceso (podemos sacarlo de la columna PID).

Un comando muy relacionado con ps es top, que nos devuelve un listado con los procesos que más memoria y CPU están consumiendo.

Tags: , , ,

Mi USB ha dejado de funcionar en Ubuntu – Solución

Agosto 11th, 2008 | 1 Comment | Posted in linux, ubuntu

Misteriosamente hoy mi USB ha dejado de funcionar en Ubuntu. Sin duda una gran desgracia para mí ya que en mi llave USB llevo mis emails y el SVN con todos mis proyectos, amén de otros documentos importantes (ando mucho de aquí para allá y descubrí hace un tiempo que el USB era la mejor opción).

Después de investigar y volverme un poco loco he encontrado una solución que me ha funcionado a la perfección:

- He abierto una consola y he tecleado:

sudo modprobe -r ehci_hcd 

Después de eso he enchufado de nuevo el USB y mágicamente ha aparecido de nuevo.

¿Dónde he encontrado la solución? Dónde va a ser, en los foros de Ubuntu (solución para el problema con el USB).

Parece que esta solución no funciona a todo el mundo, y a algunos les funciona pero el dispositivo funciona como USB1.1 en lugar de USB2. Sin embargo, prueba a ver si tienes suerte.

También soluciona los problemas al conectar discos duros externos (me pasaba también en otro PC con un disco duro externo Lacie).

Tags: ,

Backups con rsync

Enero 16th, 2008 | No Comments » | Posted in linux, privacidad-y-seguridad, ubuntu

Si queréis hacer copias de seguridad de manera sencilla una herramienta muy potente es rsync. Existen un montón de programas para hacer backups pero ninguno acaba de convencerme. Yo necesito que la copia de seguridad sea fácilmente accesible, es decir, que esté sin comprimir para poder acceder directamente a determinados archivos de manera cómoda sin tener que andar descomprimiendo archivos de varios megas (o gigas). Además, utlizo el disco externo de backup para llevar los arhivos de casa a la oficina y vice versa. Para mi caso la mejor herramienta que he encontrado hasta ahora es rsync. Uso un sencillo comando para hacer los backups:

rsync -avz --exclude-from=.rsync/exclude /home/gorka/. /media/discobackup

-avz: copia recursivamete todos los ficheros desde el directorio /home/gorka a /media/discobackup (mi disco duro externo). Además mantiene los permisos, enlaces simbólicos, propietarios, atributos, etc… La opción -z comprime los ficheros antes de transferirlos, pero, dado que uso un disco usb2 realmente no estoy seguro de que tenga utilidad (un día que me aburra mediré la diferencia entre hacer la copia de seguridad con esta opción o sin ella).

–exclude-from=.rsync/exclude: esta opción busca el fichero .rsync/exclude en el que está la información de qué ficheros no se deben copiar. En mi caso uso el siguiente:

*.iso
*.avi
*.mp3

para que no me copie ni los ficheros iso, avi ni mp3. Cada tipo de fichero que queramos excluir debe ir en una línea.

/home/gorka/. aquí indico que quiero copiar el contenido de la carpeta /home/gorka. Si uso el ‘.’ es para que me copie los ficheros ocultos que empiezan por el punto. Si no se quieren copiar los archivos ocultos hay que usar /home/gorka/*

/media/discobackup – mi flamante disco duro externo.

Ejecuto el script, me voy a comer y espero a que se haga la copia tranquilamente.

Algo más de información: rsync y rsync Tips & Tricks.

Tags: , , , ,

Problema con Firestarter – el interfaz eth0 no está preparado

Enero 16th, 2008 | 19 Comments | Posted in privacidad-y-seguridad, ubuntu

Recientemente me he encontrado con este problema y, después de darle muchas vueltas he encontrado el problema. La causa está en el script firestarter.sh. Abre el dichoso script:

gksudo gedit /etc/firestarter/firestarter.sh

y modifica la línea:

MASK=`/sbin/ifconfig $IF | grep Mas | cut -d : -f 4`

por:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`

Explicación paso a paso

Por si a alguien le interesa saber cómo dí con el problema he aquí un pequeño e instructivo rollete.

El mensaje de error que me aparece al intentar arrarcar el firestarter es:

External network device $IF is not ready. Aborting..

ese mensaje de error se muestra aquí (en este caso $IF es eth0):

if [ "$MASK" = "" -a "$1" != "stop" ]; then
	echo "External network device $IF is not ready. Aborting.."
	exit 2
fi

comprobé que la variable $MASK estaba en blanco (era la razón de que no arrancara el firestarter) así que busqué dónde se definía:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`

El comando /sbin/ifconfi eth0 muestra un mensaje parecido a éste:

eth0      Link encap:Ethernet  HWaddr 00:13:8F:4C:47:59
          inet dirección:192.168.1.2  Bcast:192.168.1.255  Máscara:255.255.255.0
          dirección inet6: fe80::213:8fff:fe4c:4759/64 Alcance:Vínculo
          ARRIBA BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:221627 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226060 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:159080113 (151.7 MiB)  TX bytes:105193874 (100.3 MiB)
          Interrupción:23 Base address:0xe400

y el comando:

/sbin/ifconfig $IF | grep Mas | cut -d : -f 4

Lo que hace es buscar la línea donde esté el texto Mas (de Mask) y, claro, al estar mi Ubuntu en castellano en lugar de Mask poner Máscara:

eth0      Link encap:Ethernet  HWaddr 00:13:8F:4C:47:59
          inet dirección:192.168.1.2  Bcast:192.168.1.255  Máscara:255.255.255.0
          dirección inet6: fe80::213:8fff:fe4c:4759/64 Alcance:Vínculo
          ARRIBA BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:221627 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226060 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:159080113 (151.7 MiB)  TX bytes:105193874 (100.3 MiB)
          Interrupción:23 Base address:0xe400

Como resultado de este pequeño detalle $MASK se queda en blanco. Por tanto, la solución consiste en modificar el script y dejarlo como:

MASK=`/sbin/ifconfig $IF | grep Más | cut -d : -f 4`
Tags: , , , ,