Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Ordenar archivos en sistemas de ficheros FAT

El sistema de ficheros FAT es uno de lo más antiguos todavía en uso. Su actual popularidad se debe a que la mayoría de teléfonos móviles, lectores de MP3, cámaras de fotos, radios, etc. solo reconocen este sistema, por lo que las memorias USB, las tarjetas SD, MMC, etc. vienen formateadas con FAT.

El problema es que estos dispositivos no suelen ordenar los ficheros y directorios que encuentran, sino que muesrtan los archivos tal y como están grabados. Esto hace que muchas veces, tras pasar varias horas ordenando tu colección de música, molestándote en ponerles nombres tipo “01-titulo-artista.mp3″ y demás, te encuentras con que el reproductor lista las canciones aleatoriamente.

Para evitar esto basta con “ordenar” los ficheros en el sistema FAT. En GNU/Linux, como es habitual, es muy sencillo hacerlo (el dispositivo debe estar desmontado):
sudo fatsort (dispositivo)

Para que esto funcione bien, primero hay que instalar fatsort, lo que a su vez tambien es muy sencillo:
sudo aptitude install fatsort
Se puede obtener información sobre la patición con:
sudo fatsort -i (dispositivo)

FAT, sort, fatsort, ordenar ficheros, sort files

Poner imagen en GRUB

Si queremos que nuestro GRUB tenga una imagen de fondo basta con indicarlo en /boot/grub/menu.lst mediante:

# Splash Image
splashimage=(hd0,0)/grub/imagen.xpm.gz
# Sustituir hd0,0 según la partición en que se encuentre el archivo
#+ También es habitual (hd0,0)/boot/grub/imagen.xpm.gz

La imagen debe ser tipo xpm, con una resolución de 640×480 y 14 colores, comprimida con gzip.

Con GIMP podemos indicar el número de colores de una imagen en “Imagen -> Modo -> Indexado”.

GRUB, imagen, splashimage

Postinstalación de Ubuntu 9.04 Jaunty Jackalope

Hay múltiples recetas de qué hacer tras instalar Ubuntu 9.04 Jaunty Jackalope (por ejemplo esta receta de “Cosas a hacer despues de instalar Ubuntu 9.04 Jaunty Jackalope“).
Hay que decir que ha día de hoy ya ha salido la nueva versión (Karmic Koala).

Tras consultar varias de esas guías para instalar Ubuntu a un amigo, me he quedado con esto:

sudo wget http://www.medibuntu.org/sources.list.d/jaunty.list --output-document=/etc/apt/sources.list.d/medibuntu.list
sudo aptitude update && sudo aptitude install medibuntu-keyring && sudo aptitude update && sudo aptitude upgrade
sudo aptitude install build-essential linux-headers-`uname -r`
sudo aptitude install gparted scribus blender inkscape gthumb
sudo aptitude install k3b kde-i18n-es k3b-i18n
sudo aptitude install dia gftp
sudo aptitude install gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-ffmpeg
sudo aptitude install virtualbox-ose wine
sudo aptitude install ubuntu-restricted-extras
sudo aptitude install unrar rar p7zip-full unace unzip msttcorefonts
sudo aptitude install libdvdcss2 libdvdread4
sudo aptitude install w32codecs non-free-codecs flashplugin-nonfree-extrasound

Después configuré Firefox y el explorador de archivos (Nautilus) para que se comportase más a mi gusto y en las propiedades de las imágenes indiqué “Abrir con” gthumb.

Postinstalación, instalación, Ubuntu, Jaunty Jackalope

Cuadrar cierre y apertura de ejercicio en AbanQ

AbanQ es un ERP publicado como Software Libre que funciona regularcete para PyMES.
Actualización 2011: El nuevo modelo de desarrollo que han puesto en marcha es lo más cercano al timo que se me ocurre. Recomiendo mejor usar OpenERP, que en casi todo es mejor.

Cuando se intenta hacer un movimiento automático de cierra y apertura de ejercicio, a veces da un desagradable mensaje que dice que la contabilidad no cuadra -siendo que está perfectamente cuadrada-.
Esto ocurre porque algunas de las cuentas no tienen un código de balance asociado.

Para averiguar qué cuentas no tienen código de balance asociado basta hacer la siguiente consulta (por ejemplo usando pgAdmin III):

SELECT DISTINCT c.codcuenta, cb.codcuenta, cs.saldo
	FROM co_cuentascb cb
	  RIGHT JOIN co_cuentas c ON cb.codcuenta = c.codcuenta
	  LEFT JOIN co_subcuentas cs ON c.idcuenta = cs.idcuenta
	WHERE cb.codcuenta IS NULL
	  AND cs.saldo <> 0 

Consulta enviada por Alberto García al foro de AbanQ.
 
Una vez detectadas las cuentas sin código de balance asociado, hay que ir al Área Contable y Financiera (puede tener otro nombre similar) -> Principal. El botón “Códigos de balance 08″ nos abre el formulario con los diferentes códigos de balance.
Para cada cuenta sin código de balance asociado (las que nos devuelve la consulta SQL) seleccionamos el código de balance adecuado, hacemos doble click e insertamos la cuenta.

Por ejemplo se puede ver que el programa asocia inicialmente el código de balance “PG-A-7-a” con el grupo de cuentas “62″, por lo que podremos asociar las cuentas 62x en ese mismo código de balance.
Para ello abrimos el código de balance “PG-A-7-a”, hacemos doble click e insertamos las cuentas 62x.

Una vez no queden cuentas sin código de balance asociado, el programa debe hacer correctamente el asiento de cierre y apertura.

abanq, cierre y apertura, códigos de balance

Edición de ficheros odf desde prompt (línea de comandos)

Me encuentro con que tengo un conjunto de documentos en formato odf, concretamente odt y ods, en los que me gustaría hacer una simple modificación: pongamos que quiero cambiar en todos ellos “NOMBRE_CLIENTE” por “El Cliente”.
Para ello basta con utilizar un simple script que dice así:

#!/bin/bash
#
# modifica_odf 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-06
#

####################################
tmpdir="tmp.$$"

# Hacemos un bucle para tratar todos los odf del directorio
for x in `ls *.od?`
do
  # Mostramos info
  echo "Modificando $x..."

  # Descomprimimos el odf en un directorio temporal
  unzip -q $x -d $tmpdir
  cd $tmpdir

  # Realizamos las modificaciones necesarias en styles.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' styles.xml > tmp.xml
  mv tmp.xml styles.xml

  # Realizamos las modificaciones necesarias en content.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' content.xml > tmp.xml
  mv tmp.xml content.xml

  # Borramos el fichero temporal tmp.xml
  rm tmp.xml

  # Regeneramos el odf
  zip -rq9 ../$x *

  # Salimos y borramos el directorio temporal
  cd ..
  rm -r $tmpdir
done

edición de ficheros odf desde prompt, edición masiva de ficheros odf, modificar ficheros odt ods odp odf

 

Trabajando con imágenes – BIG (Blender, Inkscape, Gimp)

La solución para el diseño gráfico con herramientas libres es BIG, es decir el conjunto de tres aplicaciones: Blender, Gimp e Inkscape.
Las principales ventajas de usar herramientas libres para el usuario son que puedes utilizarlas en cualquier sistema (GNU/Linux, Mac, Windows…) y que no necesitas pagar licencia ni piratear nada o depender de cracks con virus. Realmente tienes la libertad de hacer lo que quieras con ellos, cosa que no permiten los programas propietarios.

Blender sirve para trabajar con imágenes en 3D y no tiene nada que envidiar a herramientas propietarias como 3DS Max.

Inkscape permite dibujar “a mano alzada” gráficos vectoriales. Básicamente todos los logos, cómics y dibujos hechos por ordenador que no son tridimensionales están hechos con herramientas de este tipo. Inkscape compite perfectamente con herramientas propietarias como CorelDraw, Freehand, Adobe Illustrator…

Gimp permite retocar imágenes. Su uso más habitual es para retocar fotografías, desde símplemente redimensionarlas y modificar el brillo y el contrate hasta los famosos retoques fotográficos que ponen músculo donde no lo hay, quitan papadas, añaden fondos esplendorosos… No es una herramienta profesional pero casi. Cualquier retoque de los que realizamos en casa puede hacerse con Gimp. Realmente lo único que le falta para poder ser una herramienta profesional es el uso de CMYK y una interfaz más manejable. No llega al nivel de Photoshop para un profesional, pero si para el uso que hace de él el 90% de los usuarios (incluyendo los que no pagan la licencia).

Algunos sitios muy interesantes sobre BIG (y más) son
Berriart
El blog de Joaclintistgud

Joaclintistgud tiene un buen tutorial de iniciación visual a Blender.
También es interesante el manual de Carlos Gonzalez de Blender y Afray.

De nuevo Joaclintistgud tiene un buen tutorial llamado Inkscape Logo a Logo.

Hay mucha documentación y tutoriales de Inkscape en su web.

En IMH tienen un manual en castellano de GIMP .
Podemos encontrar varios video-tutoriales de Gimp en hachemuda.

Tutoriales específicos para Gimp: cómo eliminar ojos rojos, como pasar de foto a lapiz, como crear un gif animado…
Gimp Tutorials
Gimp Guru
El blog de Tomas Senabre

Imágenes en Linux, BIG (Blender, Inkscape, Gimp), Crear y Editar imágenes en Linux

Aniversario de GNU

El 27 de Septiembre de 1983 Richard Stallman realizó el anuncio inicial del proyecto GNU (GNU’s Not Unix) cuyo objetivo era proveer un sistema tipo UNIX completamente funcional absolutamente libre para que todo el que quisiera pudiera estudiarlo, usarlo, manejarlo y modificarlo.

El sistema necesitaría un compilador (gcc), un editor (gnu emacs que apareció en 1984), un ensamblador…
A principios de 1985 se creó la Free Software Fundation que publicó la licencia pública general (GPL).

En 1991, Linus Torvalds lanzó un núcleo tipo Unix, llamado Linux, bajo licencia GPL, y lo completó con las herramientas del sistema GNU -que aún no tenía núcleo propio- para crear un sistema completo.

Así nació GNU/Linux, el sistema operativo libre compatible con POSIX (sistemas Unix).

¡Feliz cumpleaños!

P.D.: Curiosamente, el mismo día 27 de Septiembre pero de 1998 nació Google.

Introducción a bash

El texto original es de IvanYuja. Posteriormente ha sido modificado y ampliado.

Linux presenta una interfaz de línea de comandos, llamado consola o shell, la cual permite al usuario interactuar con el sistema operativo de una forma amigable.

Algunos ejemplos de estas consolas son: bash, csh, ksh, sh, entre otros. En este texto se utilizará BASH.

BASH (acrónimo de Bourne-Again Shell) es un intérprete de comandos compatible con sh, puede leer comandos desde la entrada estándar (standar input) o de un archivo.

Una salida típica de un shell de usuario puede verse así:

~ $ _

si la salida contiene un signo de almoadilla (#), en lugar del signo de dólar, quiere decir que esta loggeado como root.

~ # _

Cuadro I: Keystrokes para editar en la línea de comandos

Teclas Descripción
Ctrl-a Mueve el cursor al inicio de la línea de entrada
Ctrl-b Mueve el cursor un espacio hacia adelante
Ctrl-f Mueve el cursor un espacio hacia atrás
Ctrl-d Borra la letra que esta inmediatamente despúes del cursor
Ctrl-e Mueve el cursor al final de la línea de entrada
Ctrl-k Corta caracteres desde la posición del cursor hasta el final de la línea
Ctrl-n Se desplaza en el histórico de comandos hacia adelante
Ctrl-p Se desplaza en el histórico de comandos hacia atrás
Ctrl-q Des-bloquea la terminal
Ctrl-r Búsqueda de comandos en el histórico
Ctrl-s Bloquea la terminal
Ctrl-t Swap entre letras. Eje: ‘jeo’ lo convierte en ‘joe’ si el cursor esta encima de la ‘o’ al momento de corregir
Ctrl-l Limpia la terminal (equivalente a clear)
Ctrl-u Corta toda la línea de entrada
Ctrl-w Borra la palabra que está antes del cursor
Ctrl-y Pega el texto que fue cortado, a partir de la posición del cursor
Tab Completa comandos o rutas, según existan
Tab-Tab Muestra opciones que cumplen con el inicio de un patrón

a. Completando comandos:

$ ls /bin/m[tab][tab] 
mkdir mkfifo mknod more mount mv 

$ ls /bin/mor[tab] 
$ ls /bin/more

b. Repitiendo el último comando que se digitó:

$ [UP]

c. Utilizando el historial:
El comando history mostará un historial ennumerado de los últimos comandos digitados.

$ history 
 1 cd /home/ 
 2 cd /mnt/cdrom/ 
 3 ls 
 4 history

para hacer uso de alguno de los comandos digitados, es posible llamarlos utilizando el signo de admiración (!) seguido del número del comando digitado en el historial, por ejemplo:

$ !3 
ls 
arch* domainname@  ln* sed* awk@ du* loadkeys* setterm* bash* echo* login* sh@ bunzip2@ ed* ls* shred*

d. Ejecutando una lista de comandos:

Para ejectuar más de un comando en la línea de entrada, solamente digite cada comando en orden separando cada comandos con un punto y coma (;). Por ejemplo para limpiar la consola y luego desloggearse del systema puede hacer:

$ clear; logout

e. Redireccionado la entrada y salida:
Utilice el operador ‘>’ para redireccionar la salida estándar de un comando a un archivo al cual se va a escribir la salida, y el operador ‘>>’ para anexar la salida a un archivo (el archivo puede existir, o no).
Por ejemplo:

$ ls > /tmp/contenido.de.bin

f. Mostrando el contenido de un archivo:
hay herramientas para ver el contenido de un archivo de texto entre ellas las más comunes son: less, more, most y cat, aunque el comando cat tiene más funcionalidad que solamente mostrar el contenido de un archivo.

Del ejemplo anterior:

$ cat /tmp/contenido.de.bin 
arch* 
awk@ 
bash* 
bunzip2@ 
bzcat@ 
bzip2* 
... 

o bien se puede direccionar la entrada de cat del archivo contenido.de.bin, de la siguiente forma:

$ cat < /tmp/contenido.de.bin 
arch* 
awk@ 
bash* 
bunzip2@ 
bzcat@ 
bzip2* 
...

g. Redireccionando mensajes de error a un archivo: para redireccionar la salida error estándar utilice el operador ‘>’ precedido de ’2′ (2 representa al archivo de error estándar) luego el archivo al cual se va a escribir el error:

$ ls archivo-que-no-existe 2 > command.error 

para redireccionar la salida estándar y el error estándar a un mismo archivo haga:

$ ls archivo-que-no-existe &> command.error

por ejemplo, si se quisiera redireccionar la salída estándar a la salida de error estándar se puede hacer lo siguiente:

$ (ls /bin/ 1>&2)>a.txt 
arch* 
awk@ 
bash* 
bunzip2@ 
bzcat@ 
bzip2* 
... 

$ cat a.txt

observará que a.txt no contiene ningún dato, ya que la redirección ‘> a.txt’ recibe la salida estándar, la cual está siendo redireccionada al error estándar, por tanto a.txt se encuentra vacío.

h. El background y foreground: usted puede ejecutar comandos sin que estos bloqueen la línea de comandos en su ejeccución, a esto se le llama background y regresarlos a la salida en la línea de comandos (foreground). Para ejecutar un comando en background solamente tiene que añadir el operador ‘&’ al final del comando:

$ ls /bin/ > contenido.de.bin & 
[1] 683 
[1] Done     ls /bin/ >contenido.de.bin 

donde 1 es el número de proceso siendo ejecutado en la shell que se utiliza y 683 es el identificador del proceso, asignado por el kernel. La última línea le informa cuando el comando finalizó su ejeccución.

Ahora bien, si yo estoy utilizando alguna aplicacion y la quiero detener para poder ejectuar otro comando, utilizo el keystroke

Ctrl-z

y para ver la lista de procesos que están siendo ejecutados bajo esa shell:

$ jobs 
[1]+ Stopped vi

de nuevo el 1 me va a mostrar el número de proceso para dicha shell y ‘Stopped’ me dice, que el comando esta detenido de ejecución en ese momento, si quiero seguir ejecutando ese proceso en el background, se utiliza el comando bg, seguido por el numero de proceso del shell. En nuestro caso (aunque no tenga mucho sentido ejecutar un editor en background) se utiliza:

$ bg %1 
[1]- vi &

para regresar un comando proceso al foreground se utiliza el comando fg, seguido por el número de proceso para la terminal. Por ejemplo:

$ fg %1

para ‘matar’ algún proceso que esté en bg puedo utilizar el comando kill seguido por el número del proceso para la shell. Ejemplo:

$ kill %1 
[1]+ Stopped vi

i. Tubería entre aplicaciones: la carácterística principal de la shell de Linux (y sistemas parecido- UNIX) es que no existen programas monolíticos para algo complejo, sin embargo la shell ofrece comandos de fin sencillo pero que uniéndolos hacen un proceso bastante complejo. Para comunicar programas entre sí, se utiliza el operador ‘|’ (pipe), esto lo que hace es comunicar la salida estándar de un comando con la entrada estándar de otro comando, por ejemplo, si quisiéramos contar la cantidad de archivos en el directorio /dev, podemos utilizar:

$ ls /dev/ | wc -l 
2561 

donde el comando `wc -l’ lo que hace es contar la cantidad de líneas que recibe de una entrada estándar, en este caso el resultado de ls dev.

j. Prioridad de los procesos:
Lo más común es tener muchos procesos a la vez ejecutándose en nuestra máquina.
Pero no todos son igual de importantes.
La forma de establecer prioridades es ejecutando desde el principio el comando interesado
mediante nice, o bien, conseguir su PID si ya se está ejecutando
y usar renice para cambiar su prioridad.

Algunos ejemplos:

$ nice -n PRIORIDAD COMANDO
$ renice PRIORIDAD PID_PROCESO

PRIORIDAD es un valor que va desde -20 a +20 (con el signo incluido). -20 es la prioridad más alta (al contrario de lo que cabría pensar), y +20 la más baja. Sólo root puede establecer un proceso a una prioridad negativa, los usuarios como máximo pueden poner un proceso en prioridad 0.

Introducción a bash, shell, línea de comandos, prompt

xplanet: Una pequeña maravilla

Estoy fascinado. xplanet es un programa disponible para linux y windows que genera una imagen de la tierra, diferenciando la parte diurna de la nocturna (si quieres), que permite añadir marcadores (las ciudades más pobladas, las maravillas del mundo, ciudades de mis amigos…), y superponer mapas, por ejemplo mapas de altitudes, mapas políticos, mapas de temperaturas o… ¡las nubes que hay ahora mismo en la tierra!
En realidad “solo” hay disponible una nueva imagen de las nubes cada tres horas.
Aunque la imagen se puede actualizar cada segundo si lo deseas, yo sugiero actualizarla cada cinco o diez minutos, pero eso va por gustos.
xplanet te permite ver la tierra como se vería desde el espacio pero también te permite realizar proyecciones. Es decir, generar un mapa. El típico mapamundi de libro suele ser una proyección Mercator o símplemente rectangular. Pero el programa admite tambien proyecciones azimutal, hemisférica, Mollweide, Lambert…

Os muestro una imagen de mi fondo escritorio (el mismo para linux y windows) que actualiza cada cinco minutos la posición del sol, muestra marcadores de sitios que me parecen interesantes y los puntos donde se encuentra el sol y la luna (puntos subsolar y sublunar).
Mi escritorio

Por si nos parece poco, también puede mostrar el resto de cuerpos del sistema solar. Lo que incluye desde los satélites artificiales de la tierra, como la estación espacial internacional, hasta los satélites naturales de Jupiter, pasando por los planetas, el sol, la luna… incluso Charon.

Os muestro una imagen generada ampliando la luna.
Luna y tierra

xplanet es un programa mantenido por Hari Nair que se inspira en xearth, un programita veterano de unix / linux.
Para instalarlo en windows basta con bajar el fichero zip de la web y descomprimirlo.
En Debian basta con “apt-get install xplanet xplanet-images”.
Además podeis bajar imágenes de distintos planetas y satélites siguiendo los enlaces de la web.
Referencias:

14 aniversario de Linux

El 5 de octubre de 1991 publicó Linus Torvald en los grupos de Usenet:
¿Echas de menos los días de minix-1.1, cuando los hombres eran hombres y escribían sus propios controladores de dispositivos? ¿Estás sin ningún buen proyecto entre manos y tienes ganas de meterle mano a un sistema operativo que puedas modificar según tus necesidades? (…)

Como mencioné hace más o menos un mes estoy trabajando en una versión libre de algo parecido a minix para ordenadores AT-386. Ya estoy en la fase en que es usable (aunque puede no serlo, dependiendo de lo que quieras hacer) y voy a empezar a publicar el código fuente para que se distribuya más ampliamente. Actualmente está en la versión 0.02 +1 pequeño parche, pero he podido ejecutar correctamente bash/gcc/gnu-make/gnu-sed/compress entre otras cosas.

El código fuente de este pequeño proyecto doméstico está en nic.funet.fi
(128.214.6.100) en el directorio /pub/OS/Linux.