24 julio 2007

La impresora funciona

Finalmente he conseguido imprimir en Linux.

Tengo desde hace 2 o 3 años una impresora HP Laserjet 1020. Anteriomente tuve una impresora Lexmark también laser que gané en un concurso de programación y cuando se estropeó decidí comprarme otra laser. La HP que tengo ahora tenían una característica fundamental: era la más barata que había. Me costó unos 105 euros y acabo de ver en la web de PCBox y ahora cuesta 129, a pesar de ser un modelo bastante antiguo.

La HP Laserject 1020, por lo que he podido ver durante estos años, es una impresora laser bastante cutre, tiene una circuitería y lenguaje distinto al de otras impresoras HP por eso era tan barata. En Windows tiene unos drivers muy chulos: puedo imprimir a dos caras fácilmente, poner varias páginas por hoja, rotaciones y todo lo que hacen las impresoras normalmente.

Pero en Linux es otra historia, al tener un lenguaje tan extraño, los drivers típicos de HP no servían con esta impresora y alguien tuvo que hacer unos drivers adrede para este modelo.

Durante este tiempo he intentando varias veces hacer funcionar la impresora en Linux y no lo había conseguido hasta hoy.

Nota friki: Si tienes una impresora por puerto paralelo, puedes imprimir ficheros de texto ASCII enviándolos directamente al dispositivo. Con impresoras USB no lo he probado.
cat fichero.txt > /dev/lpt

Tanto Debian como Kubuntu vienen con un programa de HP llamado HPLIP. Mi error era intentar utilizar este programa para configurar la impresora, supongo que al ser una impresora "rara" no estaba soportada por el programa. Me decía que no tenía ninguna impresoa conectada.

Pero mirando en Automatix para Debian(bendito sea) he visto en el apartado "Drivers" que había algo de HP y aparecía el modelo de mi impresora. Lo he instalado rápidamente y he probado con el HPLIP y nada. Pero en el menú Sistema he encontrado una opción "Printers" y ahí en un programa muy cutre ¡he podido agregar la impresora!

He imprimido una página de prueba. Medio folio que pone arriba en grande Foomatic-GUI Printer Test Page y un pingüino pequeño al lado.

No me permite imprimir a 2 caras automáticamente como en Windows así que he tenido que pensar un algoritmo para ello:

1 - se imprimen las páginas pares en orden inverso
2 - se colocan las páginas recién imprimidas en la bandeja pero girándo el folio 180º
3 - se imprime las páginas impares en orden normal

Menudos rollos que suelto últimamente. ¡Salud!

23 julio 2007

Niveles de programadores

High School/Jr.High
===================

10 PRINT "HELLO WORLD"
20 END

First year in College
=====================
program Hello(input, output)
begin
writeln('Hello World')
end.

Senior year in College
======================
(defun hello
(print
(cons 'Hello (list 'World))))

New professional
================
#include <stdio.h>
void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}
Experienced Hacker
===================
#include <stdio.h>
#define S "Hello, World\n"
main(){exit(printf(S) == strlen(S) ? 0 : 1);}

rsync

Continuación de la historieta anterior.

He estado trasteando con los discos duros y he escrito un pequeño script que utiliza rsync para hacer copias de seguridad de los datos del home.

Disco duro 1 (40 GB):
- 1 GB de swap
- 39 GB de ext3 para Debian

Disco duro 2 (250 GB):
- 110 GB de ext3 para copias de seguridad
- 60 GB en FAT32 para lo que surja
- 65 GB en FAT32 para lo que surja

Disco duro 3 (80 GB):
- 50 GB de ext3 para copias de seguridad
- 30 GB de FAT32 para lo que surja

Las particiones FAT32 a lo mejor algún día puedan albergar un Windows XP pero de momento no tienen utilidad porque no suelo bajarme nada del P2P.

He creado un script que copia el contenido de /home a los otros 2 discos duros. Con rsync es igual de fácil que usar el comando cp.


#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
echo `date` Inicio backup
rsync -arv --delete /home /backup1
rsync -arv --delete /home /backup2
echo `date` Fin backup


El parámetro -a de rsync intenta mantener toda la información de los ficheros: propietario, grupo, permisos, enlaces simbólicos, etc. Por eso hago el destino es también una partición ext3.

rsync hace una copia incremental, sólo copia los ficheros modificados o nuevos con lo a partir de la segunda copia de seguridad el proceso es relativamente rápido.

El parámetro --delete indica que se deben borrar en el directorio destino lo ficheros que no estén en el origen. Sin este parámetro los ficheros que renombremos o borremos en el home seguirán estando en el directorio de backup.

Estoy meditando sobre cada cuánto tiempo ejecutar el script. En un principio he programado cron para que lo haga cada hora, pero igual satura mucho el sistema y es peor.


Yo he usado rsync en un sólo ordenador, pero tiene soporte para realizar copias a través de ssh y un montón de opciones. El man es muy largo y tiene muchas cosas.

Discos duros y disqueteras

Tenía en el PC 2 discos duros, uno de 40 con el sistema operativo y otro de 80 con mis ficheros. Me he comprado un disco duro de 250GB porque el que uso para guardar mis cosas a veces no funciona, pero como a veces sí que funciona quiero dejarlo para guardar las cosas en 2 sitios por si acaso. También tengo un lector/grabadora de CD/DVD.

El PC está diseñado para admitir un máximo de 4 dispositivos de tipo IDE, así que puedo conectar los 3 discos duros y el DVD sin problemas. ¿Sin problemas? Pues resulta que la en la caja del ordenador sólo hay espacio para 2 discos duros y para 4 unidades tipo CD/DVD. También hay un hueco para la disquetera.

He decidido quitar la disquetera porque no recuerdo haberla usado jamás y así he obtenido un flamante hueco para el nuevo disco duro.

No tenía ganas de pelearme con el fdisk así que he decidido instalar gparted (me suena que en Kubuntu estaba kparted pero no lo he visto en los repositorios).

Al iniciar el gparted me pone: "Analizando discos". Y se ha quedado ahí indefinidamente. Mirando los mensajes del nucleo con dmesg he encontrado un montón de mensajes como estos:

end_request: i/o error, dev fd0, sector 0


Parece ser que gparted está en un bucle intentando acceder a la disquetera que está aquí, tirada en el suelo. La disquetera es una especie de herencia de los PCs de IBM de los 80 y 90 así que he pensado que a lo mejor no es "plug and play" como los otros dispositivos.

He borrado la entrada para la disquetera en /etc/fstab y mirando en la BIOS he encontrado una opción para indicar que mi disquetera de 1.44 es "none". Con esto he conseguido que Linux ya no busque la disquetera y no dé esos errores.

gparted ya inicia bien. Le he indicado que me cree una tabla de particiones en el disco nuevo con una partición de 150 gigas EXT3 y el resto del espacio en 2 particiones FAT32. También en el disco duro que falla a veces le he dicho que cree una partición EXT3 que ocupe todo el espacio disponible.

Le doy a "Aplicar" y al cabo de un rato la aplicación se cierra sin dar ningún error... mmmm... no me gusta que se cierren las cosas cuando estoy tocando particiones.

He vuelto a abrir el gparted y he hecho las particiones una a una, aplicando cada vez y no ha dado ningún error.

Ahora estoy reiniciando para comprobar que todo ha ido bien y me dispongo a escribir un montón de líneas nuevas en el fstab...

La idea es que cada día o cada hora lo que tengo en el home se copie al otro disco duro, creo que rsync vale para esto, lo voy a mirar y ya lo contaré.

15 julio 2007

Adios Kubuntu

He formateado el disco duro del PC porque hacía tiempo que no lo limpiaba. Tenía Kubuntu 7.04 Feisty Fawn y ahora le he puesto Debian 4.0 Etch.

Tengo un par de discos USB de 100 y 160 GB con particiones FAT32 y me fallaba muchísimo al copiar o mover muchos ficheros juntos. Para hacer copias de seguridad tenía que copiar carpeta por carpeta porque fallaba y se desmontaba sólo el disco externo.

Hoy me ha costado 2 horas copiar todo al disco usb por este fallo, teniendo que montarlo cada vez que fallaba. Tras instalar Debian lo he podido copiar todo de nuevo sin que fallara ni una vez. Así que el fallo debía ser algo de Kubuntu porque ya no ocurre.

Con Kubuntu al apretar el boton de encender el PC en vez de apagarse lo que hacía era mostrarme el menú de Apagar, Reiniciar, Hibernar, Cerrar Sesión. Ahora en Debian se me apaga directamente, lo cual me gusta más.

Creo que Kubuntu ha perdido mucho, hace tiempo me gustaba mucho pero la última versión que me gustó fue la 6.06, las siguientes no han ido todo lo bien que deberían así que abandono Kubuntu de momento.

He instalado la versión de Debian que viene con el escritorio KDE, es muy fácil de instalar (creo que ya lo comenté una vez) pero lo malo es que instala cientos de cosas. Con el sistema recién instalado tienes montones de programas que seguramente jamás utilizarás. Y entre los mil programas que instala no está Amarok...

Otro "fallo" de Debian es que viene con el navegador Iceweasel, que es el Firefox cambiado de nombre por problemas de licencias. Es exactamente igual que Firefox salvo el nombre, lo malo que le han cambiado el useragent, la cadena que envía el navegador cuando accede a una página y por eso muchas páginas te dicen que tienes un navegador compatible.

Además me gustaba mucho más el visor de imágenes que usaba Kubuntu, te cargaba la imagen en el mismo Konqueror pero salían flechitas para ir cambiar a la siguiente imagen o a la anterior. Con Debian te muestra la imagen pero no puedes cambiar a otra y eso es más rancio.

Seguramente todos mis "fallos" tanto de Kubuntu con de Debian se pueden arreglar... pero nunca me he puesto en serio a solucionarlos.

04 julio 2007

010101010101

El otro día alguien preguntaba en barrapunto sobre como programarías un bucle que va cambiando una variable de 0 a 1. Yo lo dejo ahí caer a ver las formas que se me ocurren.

int i = 0;
while (1) {
if (i == 0) i = 1;
else i = 0;
}

while (1)
i = !i;

while (1)
i = 1 - i;

while (1)
i = (i == 0)? 1: 0;

while (1)
i =1^i;

en python (c no tiene potencias)

while True:
i = 0**i

¿se os ocurren más?