CRySoL
  • About
  • Archive
  • Publish
  • Recipes
  • Users
logo

recent

  • Tutorial básico de dig
  • Mini referencia de SQL con Postgres
  • Edición de vídeo desde consola con ffmpeg
  • Volcar (y recuperar) una base de datos PostgreSQL
  • Systemd service config overwride

categories

recipe tale
new cooking
challenge opinion
enquiry script
art event
offer quote
humor

tags

networking Python
embedded Arco
linux (the kernel of course) Molinux
MySQL VCS
Debian-devel security
Debian GNESIS
ripping drivers
emacs gstreamer
gnome ocio
sugarfree scapy
multimedia gtk
shell Ice
NDS graphics
uclmwifi proselitism
C++ patterns
Hurd Oreto
ceslcam LaTeX
mercurial platanada
Chumby Java
devel INGSOFT
blender android
git sysadm
jekyll drupal
pdf doublex
agile debian
puppet printer
virtualbox sudo
augeas latex
veewee vagrant
nautilus Ogre3D
schroot apt-mirror
cron ElasticSearch
logstash kibana
GPG pgp
bash eduroam
tmux docker
systemd PostgreSQL
ffmpeg Postgres
dig DNS

admin's blog

Cumpleaños feliz!

2008-10-20 admin — [ edit | raw ]
  • new
migrated from node/1027
Bueno, pues ha pasado otro año. La web de CRySoL (tal como la conocemos hoy) cumple 3 años ya. Se inauguró el 20 de octubre de 2005. Aunque como muchos sabéis había algo parecido a una web cutre desde unos años atrás.
Leer más

Drupal 6.3

2008-08-12 admin — [ edit | raw ]
migrated from node/968

Gracias al inestimable y considerable esfuerzo de lk2, que ha incluido portar parte de algunos módulos y arreglar algún que otro bug en otros, ya tenemos el site de CRySoL migrado a Drupal-6.3. Muchas horas de pruebas y más PHP del que nos gustaría aprender. Como siempre, si encontráis cualquier anomalía en el funcionamiento del portal, o alguna feature perdida, no dudéis en dejar un comentario en este mismo post.
Saludos

Aviso a los autores de recetas

2008-06-15 admin — [ edit | raw ]
migrated from node/932

Con la reciente actualización del drupal de CRySoL hemos podido hacer el necesario upgrade a PHP5, y eso nos ha permitido instalar un módulo bastante decente para colorear listados de código con GeSHi.

Leer más

Upgrade a drupal-5.7

2008-06-06 admin — [ edit | raw ]
  • new
migrated from node/924

Después de algunos problemillas, hemos migrado el portal a drupal-5.7. Lo sentimos por las molestias que esto te haya podido causar, pero era necesario porque nos habíamos quedado bastante obsoletos. Los problemillas de última hora eran:

  • El %count
  • Bug en el módulo View-1.6
  • Renderizado de listas en Textile

Leer más

Prueba de logo

2007-03-15 admin — [ edit | raw ]
  • art
migrated from node/615
¿Qué tal? ¿Lo ponemos? Se admiten sugerencias

¡¡Estamos en obras!!

2007-02-15 admin — [ edit | raw ]
  • new
migrated from node/561
Hemos migrado a Drupal 5.1, sin embargo, no todo el trabajo está hecho. Debemos actualizar distintos módulos y herramientas que utilizábamos en la versión 4.6 y adaptar el sitio al nuevo Drupal. Disculpad por los distintos problemas y carencias que podais observar en estos momentos. En breve las subsanaremos y todo volverá a ser como antes (o mucho mejor). ¡Un saludo!

Cumpleaños feliz

2006-10-21 admin — [ edit | raw ]
  • new
migrated from node/407

Ayer fue el aniversario de la inauguración oficial de la web de CRySoL. Sin duda algunos de los que la pusimos en marcha, con más ganas que esperanzas, no creíamos que fuera a ir tan bien.

Leer más

Objetivos de la web

2006-03-17 admin — [ edit | raw ]
  • new
migrated from node/262
Uno de los objetivos de CRySoL es la defensa de la libertad del software y otras manifestaciones culturales. Cualquier otra demostracción de defensa de libertades está literalmente fuera de lugar, deberá hacerse en otros foros dedicados a tales asuntos. Por favor: aquél que quiera escribir, que tenga en mente cuál es el objetivo de esta web.
Este comentario no va por la mayor parte de vosotros, ya que existimos desde hace menos de un año y no ha habido ningún altercado digno de mención. Sin embargo, hoy he tenido que "banear" dos artículos y un usuario por su contenido. No importa si me encuentro a favor; no importa si me encuentro en contra. Lo que importa es que dicho contenido no tiene cabida en esta web. Por favor: Si alguien ve contenido fuera tono/tema, que avise a los administradores para su inmediata eliminación. Recordad que estamos utilizando los servicios de la Universidad, y necesitamos sus favores. No queremos que nos cierren el sitio por un único alborotador. Muchas gracias. -- MagMax, uno de los admin.

A todos los autores de recetas

2006-01-29 admin — [ edit | raw ]
migrated from node/208

En primer lugar quiero decir que todos los administradores y editores agradecemos que cada vez más gente empiece a escribir recetas, que son la columna vertebral de este portal.

Leer más

3 meses de estadísticas

2006-01-20 admin — [ edit | raw ]
  • new
migrated from node/199
Hoy, día 20 de enero, hace 3 meses desde que se decidió incluir el contador de visitas. Podéis encontrarlo en el extremo inferior derecho de la web.
Leer más

10.000 visitas!

2005-11-14 admin — [ edit | raw ]
  • new
migrated from node/662
Bueno, pues parece que la nueva etapa de la web de CRySoL está yendo realmente bien. Desde el día 20 de octubre que pusimos el contador de "webstats4u" (o sea, menos de un mes) hemos recibido más de 10.000 visitas.
Leer más

Cómo escribir una receta

2005-10-05 admin — [ edit | raw ]
  • recipe
migrated from node/4
Este documento define las normas de estilo que se deben aplicar a las recetas de la web de CRySoL. Se describe la estructura, el formato y típografía a utilizar. Esta receta sigue las normas que en ella se definen y sirve además como introducción a los formatos de entrada necesarios para poder escribir recetas.
Leer más

David Villa's blog

Tutorial básico de dig

2022-12-02 david.villa — [ edit | raw ]
  • recipe
  • dig
  • DNS

Algunos comandos básicos con dig para hacer consultas DNS.

Leer más

Mini referencia de SQL con Postgres

2022-10-11 david.villa — [ edit | raw ]
  • recipe
  • Postgres

Esto es sólo una pequeña referencia rápida de operaciones habituales con Postgres.

Leer más

Edición de vídeo desde consola con ffmpeg

2022-08-21 david.villa — [ edit | raw ]
  • recipe
  • ffmpeg

Edición básica de vídeo desde consola

Leer más

Volcar (y recuperar) una base de datos PostgreSQL

2022-05-07 david.villa — [ edit | raw ]
  • recipe
  • PostgreSQL

Esta receta explica una forma sencilla de hacer una copia de seguridad de una base de datos PostgreSQL completa para poderla restaurar en caso de catástrofe o mudanza.

Leer más

Systemd service config overwride

2020-11-04 david.villa — [ edit | raw ]
  • recipe
  • systemd

You may tune systemd service files without touch provided package files just with something like:

$ sudo systemctl edit bluetooth.service

Then, write your modifications:

[Service]
ExecStart=
ExecStart=/usr/libexec/bluetooth/bluetoothd --noplugin=sap

References

  • https://raspberrypi.stackexchange.com/questions/40839/sap-error-on-bluetooth-service-status/99920#99920

My git cheat-sheet

2020-09-10 david.villa — [ edit | raw ]
  • recipe
  • git

Delete all remote branches

$ git fetch -p; git branch -r | grep -v master | sed "s/origin\///" | xargs git push origin --delete

Sync remote and local branches

$ git fetch --prune

Option ‘prune’ removes local branches absent in remote.

My docker cheat-sheet

2020-07-29 david.villa — [ edit | raw ]
  • recipe
  • docker

Open a shell in container

Or exec any program inside a running container:

$ docker exec -it <container-id-or-name> sh

Remove ALL containers

$ docker rm -f $(docker ps -aq)

Remove ALL images

$ docker rmi $(docker images -aq)

Fine grain sudo

2020-05-05 david.villa — [ edit | raw ]
  • recipe
  • shell

sudo may be configured to stop requesting passwords for specific commands to specific users or groups. This is very convenient for personal computers where there is only a user (and therefore she’s the administrator).

With next file /etc/sudoers, the sudo group members will be allowed to run apt, apt-get and dpkg commands absolutelly with no password.

For other users, the sudo behaviour do not change.

Defaults        env_reset, insults
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        timestamp_timeout=15

Cmnd_Alias APT = /usr/bin/apt, /usr/bin/apt-get, /usr/bin/dpkg
%sudo   ALL = ALL, NOPASSWD: APT

Option ‘timestamp_timeout’ sets the time (in minutes) that the password will remain in cache, so it will not ask for it during that period. The value 0 disables the cache.

How to shrink VirtualBox image

2019-02-15 david.villa — [ edit | raw ]
  • recipe
  • virtualbox

Start VM and fill free space with zeros:

$ sudo dd if=/dev/zero of /zeros bs=1M

Stop VM and from host, locate VM disk image:

$ VBoxManage showvminfo VM_NAME | grep vdi

And finally:

$ VBoxManage modifyhd --compact "PATH-TO-FILE.vdi"

References

  • http://www.netreliant.com/news/8/17/Compacting-VirtualBox-Disk-Images-Linux-Guests.html

Mercurial useful commands

2018-09-11 david.villa — [ edit | raw ]
  • recipe
  • mercurial

Remove files added by mistake

$ hg forget "set:added()"

Essential git branching

2017-05-19 david.villa — [ edit | raw ]
  • recipe
  • git

List (all) branches

$ git branch -a
* master
 origin/foo
 origin/bar

Change to a existing remote branch

Make the branch locally available:

$ git branch --track foo origin/foo
Branch foo set up to track remote branch foo from origin.

Move to local branch ‘foo’:

$ git checkout foo
Switched to branch 'foo'
Your branch is up-to-date with 'origin/foo.

Ultra simple tmux recipe

2017-02-15 david.villa — [ edit | raw ]
  • recipe
  • tmux
  • shell

This is a new try to start using tmux. I am absolutly convenced about advantages of tmux, but for some strange reason, I am not able to learn its key combos…

I hope this recipe should be a way to have the very basic functions always at a glance.

Panes
horizontal split C-b %
vertical split C-b "
move cursor C-b {arrow}
close C-b x
maximize/minimize C-b z
Windows
create C-b c
change C-b {n}
Sessions
detach C-b d
attach tmux a
list tmux ls
kill tmux kill-session -t {n}

Config file

In your ~/.tmux.conf

set -g mouse on
setw -g monitor-activity on
set -g visual-activity on

eduroam en Android con certificado usando un QR code

2016-12-13 david.villa — [ edit | raw ]
  • recipe
  • android
  • eduroam

El certificado raíz que utiliza la UCLM a día de hoy (13-12-2016) es DigiCert Assured ID Root CA .

La UCLM tiene instrucciones para conectar a eduroam con Android y también explica cómo utilizar un certificado, pero indica que hay que copiar el fichero a la memoria SD.

En lugar de eso, pongo aquí un código QR para descargarlo automáticamente:

qrcode

Leer más

How to annotate/tag stdout and stderr outputs with bash

2016-11-05 david.villa — [ edit | raw ]
  • recipe
  • bash
  • shell

Lets create a test script test-std.sh:

#!/bin/bash --

echo info
echo error >&2

We will use sed to prepend some text to each output line. To perform redirection we use a less known feature called process substitution.

$ ./test-std.sh 2> >(sed 's/^/err: /g') > >(sed 's/^/out: /g')
out: info
err: error

And… it’s possible to use a different color to each of them too

How to revoke a GPG key

2016-03-04 david.villa — [ edit | raw ]
  • recipe
  • GPG
  • pgp

Generate revocation certificate:

gpg -o revocation.asc --gen-revoke F8025C91

Import the certificate to revoke the corresponding key:

gpg --import revocation.asc

Public the revoked key to servers:

gpg --keyserver pgp.mit.edu --send-keys F8025C91

ELK (Elastic + logstash + Kibana) para dummies

2016-02-16 david.villa — [ edit | raw ]
  • recipe
  • ElasticSearch
  • logstash
  • kibana

Enlazo un tutorial del colega Magmax para montar un entorno básico ELK (ElasticSearch + logstash + Kibana) como sistema de monitorización. Probablemente el que llega más lejos con menos rollo, y con screencast y todo.

Monitorización con ElasticSearch, Kibana y TopBeat

Creating VDI virtual disks for Virtualbox machines (with Vagrant)

2015-11-17 david.villa — [ edit | raw ]
  • recipe
  • vagrant
  • virtualbox

When vagrant create Virtualbox machines, disks are created with VMDK format. Therefore, the VDI format has some interesting advantages. This recipe shows a setup to create VDI disks instead VMDK.

Read more

Using an actual partition as «virtual» disk for Virtualbox with Vagrant

2015-11-17 david.villa — [ edit | raw ]
  • recipe
  • vagrant
  • virtualbox

Virtualbox can use actual partitios for its disks. This task may be simple using the virtual GUI, but in this case, we want automatize the process with Vagrant.

Read more

Installing the Ice-3.6.2 packages from ZeroC on Debian

2015-09-19 david.villa — [ edit | raw ]
  • recipe
  • devel
  • Ice
  • Debian

ZeroC provides their own (non-official) Ubuntu packages for the version 3.6. This recipe includes all steps for a successful installation on Debian jessie.

Read more

passwd/shadow inconsistencies

2015-04-24 david.villa — [ edit | raw ]
  • recipe
  • debian
  • sudo
  • cron

If your system issues messages of this type:

su: Authentication failure
(Ignored)
Authentication service cannot retrieve authentication info

Also in /var/log/syslog:

CRON[12591]: Authentication failure

and su and sudo continue working but cron fails, probably you have a /etc/passwd inconsistency respect to /etc/shadow.

Just execute:

$ pwconv
$ grpconv

..to fix them.

apt-mirror: the debian mirror that just works

2014-11-20 david.villa — [ edit | raw ]
  • recipe
  • apt-mirror
  • debian

Have a local debian package mirror may be helpful when you frequently perform recurring instalations: virtual machines, continuous integration, isolated integration testing, docker containers and so on. apt-mirror is a program that can make a perfect mirror clon in a very easy way.

Read more

schroot: snapshot chroots

2014-11-11 david.villa — [ edit | raw ]
  • recipe
  • schroot

According to its manual page “schroot allows the user to run a command or a login shell in a chroot environment”. As many others (chroot, lxc, docker, vserver) it is a OS virtualizer. Often, these “chroot environments” are known as “jails”. A jail is much faster that a full virtualizer as vmware, virtualbox, etc.

In that recipe we explore a interesting feature: jail snapshoting

Read more

nautilus: list folder before files

2014-09-28 david.villa — [ edit | raw ]
  • recipe
  • nautilus

Current nautilus Debian version (3.14) has a bug in preferences. It is not possible to set
the option “put folders before files”.

That command sets it:

$ gsettings set org.gnome.nautilus.preferences sort-directories-first true

multi machine Vagrantfile

2014-05-27 david.villa — [ edit | raw ]
  • recipe
  • vagrant

A Vagrantfile to generate several machines:

Each machine has a different configuration via salt provision.

Installing veewee on Debian sid

2014-05-20 david.villa — [ edit | raw ]
  • recipe
  • veewee
# apt-get install ruby-nokogiri libxml2-dev
# gem install veewee

Useful LaTeX packages and their main commands

2014-05-19 david.villa — [ edit | raw ]
  • recipe
  • latex
  • setspace — set space between lines
    • \singlespacing
    • \onehalfspacing
    • \doublespacing
  • textpos — absolute positioning of text on the page
    • \textbox
  • geometry — flexible and complete interface to document dimensions
  • enumitem — Control layout of itemize, enumerate, description
  • titlesec — Select alternative section titles
  • titletoc — alternative headings for toc/lof/lot (better than fancyhdr)
  • listings — typeset source code listings using LaTeX
  • versions — optionally omit pieces of text
  • acronym — expand acronyms at least once
  • crop — support for cropmarks
  • hyperref — extensive support for hypertext in LaTeX
  • multicol — intermix single and multiple columns
  • tocbibind — add bibliography/index/contents to Table of Contents
  • caption / caption2 — customising captions in floating environments
  • xcolor — driver-independent color extensions for LATEX and pdfLaTeX

[under construction]

Keep repeating a command until it fails

2014-01-22 david.villa — [ edit | raw ]
  • recipe
  • shell

That may be useful to make some kind of stress testing or to “ensure” the command is doing right.

Pretty simple:

$ while ./command; do true; done

Fixing damaged /var/lib/dpkg/available

2013-11-29 david.villa — [ edit | raw ]
  • recipe
  • debian

Sometimes the file /var/lib/dpkg/available is corrupted. When you use the package managing tools you get messages similar to these:

dpkg: warning: parsing file '/var/lib/dpkg/available' near line 1128 package 'dash':
 missing description
dpkg: warning: parsing file '/var/lib/dpkg/available' near line 2687 package 'login':
 missing description

Usually this is not a big issue but it may be annoying. To fix it, just execute next commands:

# mv /var/lib/dpkg/available /root/
# touch /var/lib/dpkg/available
# sh -c 'for i in /var/lib/apt/lists/*_Packages; do dpkg --merge-avail "$i"; done'

Seen at http://askubuntu.com/questions/109994/dpkg-error-parsing-file-var-lib-dpkg-status-near-line-6449

Reading a properties file with augeas

2013-11-15 david.villa — [ edit | raw ]
  • recipe
  • shell
  • augeas

augeas is a command line generic tool to manage configuration text files. augeas comes with many “lenses”. The lenses are files that specify rules to read and write each kind of file. This is a very good to for scripting or automatic configuration management (like puppet does).

Read more

Fine-grain sudo

2013-10-28 david.villa — [ edit | raw ]
  • recipe
  • sudo
  • shell

sudo lets a user run commands as she was a different user (usually root). The common configuration of sudo requests your password before run the command. As that is annoying, you may be tempted to write something like this in your /etc/sudoers:

john   ALL = ALL, NOPASSWD: APT

But this may be a big security issue…

Read more

git: removing files from history

2013-10-21 david.villa — [ edit | raw ]
  • recipe
  • git
  • shell

That deletes the given files from all the changesets along all the repository history, as they never were commited.

It is not a very friendly command (it’s the git style!), but at least it can be done.

$ git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' --prune-empty --tag-name-filter cat -- --all
$ rm -rf .git/refs/original
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ git gc --aggressive --prune=now
$ git push --force

Far as I know this is not possible with mercurial

References

  • http://stackoverflow.com/questions/5563564/remove-files-from-git-repo-completely
  • https://help.github.com/articles/remove-sensitive-data

Compacting .vmdk virtual disk with VirtualBox

2013-10-15 david.villa — [ edit | raw ]
  • recipe
  • virtualbox
  • shell

VirtualBox is able to compact (reduce the size) .vdi images, but it is not possible with .vmdk disk images. So…

Read more

Debian apt pinning

2013-10-12 david.villa — [ edit | raw ]
  • recipe
  • Debian

Configuración mínima para apt-pinning

Leer más

Changing primary monitor

2013-10-10 david.villa — [ edit | raw ]
  • recipe
  • drivers

When you have a dual head display one of them is the “primary monitor”. Usually, window manager put special panels or content in that monitor (gnome-shell).

To see which are your connected monitors (and their names) run:

$ xrandr | grep connected
DVI-I-0 disconnected (normal left inverted right x axis y axis)
VGA-0 disconnected (normal left inverted right x axis y axis)
DVI-I-1 connected primary 1920x1200+0+0 (normal left inverted right x axis y axis) 530mm x 300mm
HDMI-0 connected 1920x1200+1920+0 (normal left inverted right x axis y axis) 530mm x 300mm

In this case my primary monitor is DVI-I-1. To change to the other available monitor, run:

$ xrandr --output HDMI-0 --primary

Cheers

VirtualBox: import/export and cloning machines

2013-10-05 david.villa — [ edit | raw ]
  • recipe
  • virtualbox

VirtualBox supports the OVF (Open Virtualization Format) and the OVA package (an single archive format).

Read more

Converting .vmdk virtual disk to .vdi format from command line

2013-09-23 david.villa — [ edit | raw ]
  • recipe
  • devel
  • virtualbox
  • shell

When you have a functional virtual machine but you want to have the virtual disk in a different format.

Something like this should be enough. You must known the name of the virtual disk controller (“SATA” in the example):

$ VBoxManage storageattach NAME --storagectl SATA --port 0 --device 0 --type hdd --medium none
$ VBoxManage clonehd --format vdi OLD_DISK.vmdk NEW_DISK.vdi
$ VBoxManage storageattach NAME --storagectl SATA --port 0 --device 0 --type hdd --medium NEW_DISK.vdi

Installing the Ice-3.5 packages from ZeroC on Debian

2013-09-19 david.villa — [ edit | raw ]
  • recipe
  • devel
  • Ice
  • Debian

WARNING: This recipe is unnecessary in an current Debian jessie or Ubuntu trusty.

ZeroC provides their own Ubuntu/Debian packages for the version 3.5. This recipe includes all steps for a successful installation.

Read more

Undertanding the DSO Link Change

2013-09-03 david.villa — [ edit | raw ]
  • recipe
  • devel

Why (in the new GNU distros) we get “missing symbol” linking error on programs that before compile without problems?

Read more

HP LaserJet P1005 with Debian and the free driver

2013-08-11 david.villa — [ edit | raw ]
  • recipe
  • drivers
  • printer
  • Debian

Setting up the HP LaserJet P1005 printer with the free driver (the Debian way)

Read more

How to get a shell for a non-shell user

2013-07-10 david.villa — [ edit | raw ]
  • recipe
  • shell

Non shell unix users are useful to run services or daemons, but sometimes you may need a shell to test something failing…

Read more

Ensuring last version of a package with puppet

2013-07-09 david.villa — [ edit | raw ]
  • recipe
  • puppet

Puppet is a powerful software infrastructure manager. That is, a program that enable you to specify what is installed and running in each computer of your network.

Read more

Fallo de gnome-shell en debian sid

2013-07-05 david.villa — [ edit | raw ]
  • recipe
  • gnome
  • debian

Con los últimos cambios en Debian sid gnome-shell no arranca (bug #712919) por una dependencia incorrecta de pulseaudio. Al ejecutarlo vemos el siguiente error:

$ gnome-shell --replace
gnome-shell: error while loading shared libraries:
libpulsecommon-4.0.so: cannot open shared object file: No such file or directory

Para arreglarlo instala una versión anterior del paquete libpulse-mainloop-glib0. Con la versión que hay en jessie (2.0.6) funciona correctamente.

http://packages.debian.org/jessie/libpulse-mainloop-glib0

Tortitas (pancakes)

2013-06-30 david.villa — [ edit | raw ]
  • cooking

Típicas tortitas americanas.

Leer más

unfriendly commands: git dealing with a repository in other directory

2013-06-25 david.villa — [ edit | raw ]
  • git

mercurial

$ hg -R foo/bar st

git

$ git --git-dir=foo/bar/.git --work-tree=$(pwd)/foo/bar status

Pruebas de estilo en listados de código

2013-06-14 david.villa — [ edit | raw ]
  • recipe

Pruebas de estilo de los distintos tipos de listados de la web. Se muestran etiquetas HTML, soporte de liquid con highlight y gist. Echa un vistado al fuente de este post.

Leer más

Testing deterministic behavior with doublex

2013-06-07 david.villa — [ edit | raw ]
  • recipe
  • Python
  • doublex
  • agile

Sometimes you need to test that some procedure is deterministic, that is, it is done exactly the same way again and again (builder or factory method patterns are examples of that). The production code does exactly the same invocations for the same arguments. In these situations were are not checking the “right” behavior but just the invocation sequence does not change.

You may use a doublex Mock to test that. The first execution “trains” the Mock, the second time verify the same behaviour.

Read more

Reducir resolución de un PDF

2013-06-06 david.villa — [ edit | raw ]
  • recipe
  • pdf

Este comando es relativamente fácil de encontrar, pero no está mal tenerlo a mano. Obviamente la gracia del asunto es el parámetro -r200x200:

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -r200x200 -sOutputFile=output.pdf input.pdf

Getting node terms from the drupal database

2013-06-01 david.villa — [ edit | raw ]
  • recipe
  • drupal
  • jekyll

Migrating a drupal-6 site to jekyll I need to get term names to add the tags entry in the post YAML from-matter.

I am using the jekyll-import ruby gem. The modification is easy and can be added directly to the drupal6 plugin.

I apologize if this code smells. I am not a ruby programmer… yet.

Cómo publicar en CRySoL

2013-05-29 david.villa — [ edit | raw ]
  • recipe
  • jekyll

Esta receta explica cómo crear posts en tu propio blog de CRySoL o colaborar con el sitio.

Leer más

Fallo de pdflatex en debian sid

2013-05-22 david.villa — [ edit | raw ]
  • recipe
  • Debian
  • LaTeX
migrated from node/1705

Si tienes Debian sid y has actualizado hace poco probablemente pdflatex ha empezado a fallar:

$ pdflatex main.tex
This is pdfTeX, Version 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian)

kpathsea: Running mktexfmt pdflatex.fmt
I can't find the format file `pdflatex.fmt'!

Hay un bug abierto sobre esto: #709164

La solución según este hilo es instalar una versión antigua de libkpathsea6, por ejemplo:

http://ftp.de.debian.org/debian/pool/main/t/texlive-bin/libkpathsea6_2012.20120628-4_amd64.deb

emacs-pills: compilation feedback with colors

2013-04-11 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1704

Creating a virtual grid with libvirt + debian preseeds + puppet + IceGrid

2013-03-19 david.villa — [ edit | raw ]
  • recipe
  • Ice
  • Debian
migrated from node/1695

This recipe explain how to build a grid composed by 6 debian virtual machines running IceGrid. Once the setup is done, the whole process may be executed with absolutelly no user interaction. The process takes advantage from libvirt (for virtual machine installation), debian preseds (for unattended installation) and puppet (for configuration management).

The resulting virtual grid is suitable to make tesing and continuous integration for distributed applications (using ZeroC IceGrid in this case).

Leer más

Soporte mejorado para el ASUS UX32VD

2013-02-27 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1702

Las recetas anteriores sobre este portátil aún dejaban algunos problemas sin resolver:

Leer más

Instalar un módulo Python en un virtualenv

2013-02-27 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1701

Generando el .tgz de distribución de un paquete “sample” e instalándolo con pip. Esto puede servir para comprobar que un paquete Python se puede instalar y desinstalar correctamente.

~/sample$ python setup.py sdist
$ virtualenv --clear myenv
$ . myenv/bin/activate
$ pip install sample/dist/sample*
$ echo y | pip uninstall sample

Android SDK en Debian 64 bits

2013-02-20 david.villa — [ edit | raw ]
  • recipe
  • Debian
  • android
migrated from node/1699

El SDK de android (en concreto adb) requiere algunas librerías para i386. Si tienes una distribución de 64 bits necesitas instalar algunos paquetes adicionales que permiten usar dichas librerías. Simplemente ejecuta:

$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libc6:i386 libstdc++6:i386

Altavoces bluetooth en GNOME

2013-02-10 david.villa — [ edit | raw ]
  • recipe
  • gnome
  • drivers
migrated from node/1697

Algunos altavoces, auriculares u otras cosas, como el Belkin Music Receiver (belkin U15) no funcionan directamente con GNOME (al menos en Debian). La solución es simple, aunque no es fácil de encontrar. Basta con:

# aptitude install pulseaudio-module-bluetooth pulseaudio-module-gconf

Configurar apt para que no descargue traducciones

2013-02-08 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1696

Desde que los indices de paquetes en los repositorios incluyen traducciones, las actualizaciones son aún más lentas. Esos ficheros pueden tener tamaños de varios megabytes. Pero como estas traducciones no son muy necesarias que digamos podemos configurar apt para indicarle qué traducciones queremos. Para eso, escribe un fichero /etc/apt/apt.conf.d/99Translations con el siguiente contenido:

Acquire::Languages "none";

Como podrás imaginar, esta configuración hace que apt no descargue ninguna traducción. Verás que un apt-get update, y sobre todo un aptitude update, es bastante más rápido.

Virtual machine unattended Debian installations with libvirt and d-i preseeding

2012-12-25 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1694

That recipe explains how to perform an unattended Debian GNU/Linux installation (thanks to preseeds) on a virtual machine using libvirt.

Leer más

Asyncronous spy assertions with python-doublex

2012-10-26 david.villa — [ edit | raw ]
  • recipe
  • Python
  • INGSOFT
migrated from node/1688

Sometimes interaction among your SUT class and their collaborators does not meet a synchronous behavior. That may happen when the SUT perform collaborator invocations in a different thread, or when the invocation pass across a message queue, publish/subscribe service, etc.

Leer más

Distribuyendo programas Python en el PyPI (Python Package Index)

2012-10-03 david.villa — [ edit | raw ]
  • Python
migrated from node/1687

Esto es una receta rápida para tener a mano lo comandos para usar pypi (a.k.a. cheeseshop) desde consola. Todo esto y mucho más está por supuesto en el CheeseShopTutorial.

Leer más

GNU Emacs: Pestañas realmente útiles (cambiando con M-num)

2012-04-16 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1574

Hace tiempo que quería afinar la configuración del modo tabbar de emacs para poder cambiar entre pestañas usando la típica combinación de teclas alt-<número> cual si fuera navegador o emulador de terminal. Como mis conocimientos de elisp son principalmente anecdóticos, traté de buscar algo parecido de lo que poder sacar factor común, pero nada… hasta ahora.

Leer más

Separación silábica en LibreOffice

2012-03-29 david.villa — [ edit | raw ]
  • recipe
migrated from node/1570
  • Descargar el fichero correspondiente desde http://libreoffice-na.us/English/dictionary.html
  • Instalar en LibreOffice desde Herramientas → Gestor de Extensiones
  • Editar el estilo de párrafo
  • En la pestaña «Flujo de Texto» marcar «Automáticamente»

Pasta con pollo

2012-02-19 david.villa — [ edit | raw ]
  • cooking
migrated from node/1568

Leer más

GNU Emacs 24: How to install on Debian/Ubuntu

2012-02-09 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1567

GNU Emacs 24 is now available for debian/ubuntu in an unofficial package repository. You can install running that:

# echo "deb http://emacs.naquadah.org/ unstable/" > /etc/apt/sources.list.d/emacs24.list
# wget -q -O - http://emacs.naquadah.org/key.gpg | apt-key add -
# aptitude update
# aptitude install emacs-snapshot-gtk

97 Things Every Programmer Should Know

2012-02-06 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1566
  • 97 Things Every Programmer Should Know
  • Contributions

by @albertovilches

Pimientos rellenos

2012-02-05 david.villa — [ edit | raw ]
  • cooking
migrated from node/1565

Leer más

Espaguetti con brócoli

2012-01-29 david.villa — [ edit | raw ]
  • cooking
migrated from node/1564

Leer más

Mojo picón

2012-01-28 david.villa — [ edit | raw ]
  • cooking
migrated from node/1563

Ingredientes

  • 2 ajos
  • aceite de oliva
  • una cucharada sopera de tomillo
  • una cucharada sopera de pimentón dulce
  • cayena

Preparación

  • Machacar los ajos en un mortero
  • Añadir el tomillo, el pimentón y el aceite y machacar hasta obtener una mezcla homogénea.
  • Añadir un par de granitos de cayena si se quiere picante

Servir como sazón para patatas asadas o cocidas.

Configuración de thunderbird/icedove para el correo de la UCLM

2011-12-15 david.villa — [ edit | raw ]
  • recipe
migrated from node/1557

Recepción

Tipo de servidor: IMAP
Nombre del servidor: imap.mail.uclm.es
Puerto: 993
Nombre de usuario: Pepito.Grillo

Seguridad de la conexión: SSL/TLS
Método de autenticación: Contraseña normal

Envío

Nombre del servidor: smtp.mail.uclm.es
Puerto: 587
Nombre de usuario: Pepito.Grillo
Método de autenticación: Contraseña normal
Seguridad de la conexión: STARTTLS

iOS vs Android: el coste social de la eficiencia (o el coste técnico de la libertad)

2011-12-10 david.villa — [ edit | raw ]
  • opinion
migrated from node/1556

Muy interesante y didáctico el post de Ricardo Galli Android, iOS, tiempos de respuestas y por qué nada es gratis en sistemas informáticos.

Una clase magistral de sistemas operativos modernos y cómo la estrategia comercial de la plataforma puede afectar de forma determinante al rendimiento e incluso a la experiencia de usuario. Me parece muy relevante y bien argumentado cómo un sistema abierto como Android (llamarlo «libre» me parece arriesgado) sufre de limitaciones técnicas precisamente por el hecho de ser portable y abierto.

Leer más

XPWeek: mis conclusiones

2011-09-29 david.villa — [ edit | raw ]
  • opinion
migrated from node/1550

Hola:

Las semana pasada estuve en la XPWeek y como conclusión, y por petición de Carlos Ble, voy a comentar mis impresiones.

Leer más

Cambio en la configuración de sudo

2011-09-29 david.villa — [ edit | raw ]
  • recipe
migrated from node/1548

Con la versión 1.8.2-1 de sudo es necesario añadir las rutas «seguras» al fichero /etc/sudoers.

Leer más

9 reglas para una mejor orientación a objetos

2011-09-20 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1546

En las conferencias de la XPWeek, Sebastián Hermida nos explicaba los nueve reglas o (pasos) de Jeff Bay para conseguir mejores diseños orientados a objetos y, en general, código más limpio. Al loro, porque algunas te pueden sorprender:

Leer más

stdeb, o cómo crear paquetes debian de módulos Python como churros

2011-08-21 david.villa — [ edit | raw ]
  • recipe
  • Python
  • Debian-devel
migrated from node/1541

Si eres un administrador de una máquina debian/ubuntu con un poco de amor propio seguramente no harás configure/make/make install o al menos te lo pensarás dos veces.

Leer más

Referencia rápida de LVM

2011-08-02 david.villa — [ edit | raw ]
  • recipe
  • sysadm
migrated from node/1538

Comandos básicos para crear un sistema LVM

Leer más

Ejecutando un mismo comando en varias máquinas (con fabric)

2011-07-17 david.villa — [ edit | raw ]
  • recipe
  • shell
  • Python
migrated from node/1534

Os dejo aquí un script que permite ejecutar comandos predefinidos en un conjunto de máquinas. En realidad es un fabfile, es decir, un script para ejecutar con fabric.

El script que aparece en esta receta lo estoy usando para instalar un mismo paquete (debian) en varios servidores a la vez (lo cual es un latazo hacer una por una). Así que los comandos que tiene definidos son los recurrentes update, install y remove de aptitude. Obviamente se puede utilizar para ejecutar cualquier comando imaginable.

Leer más

$GA€, canon y presunción de culpabilidad

2011-07-05 david.villa — [ edit | raw ]
  • opinion
migrated from node/1530

Llevo unos días oyendo a todo tipo de periodistas, tertulianos y «opinadores» profesionales de todo tipo, color y condición hablar sobre el asunto de la detención de la cúpula de la SGAE. E independientemente de la intención que está detrás de su opinión: echar la culpa a determinado tipo de gente, profesión, partido, ministra o presidente, todos coinciden en un argumento que me provoca verdadero estupor:

Leer más

Apple Wireless Keyboard con Debian

2011-07-01 david.villa — [ edit | raw ]
  • recipe
  • drivers
migrated from node/1527

Cómo configurar este estupendo teclado inalámbrico bluetooth en Debian.

Leer más

La forma más sencilla de usar repositorios git es... mercurial

2011-06-25 david.villa — [ edit | raw ]
  • recipe
  • mercurial
  • git
  • VCS
migrated from node/1526

Cómo usar repositorios git utilizando mercurial como cliente gracias a la extensión hggit.

Leer más

Python y GTK3

2011-06-18 david.villa — [ edit | raw ]
  • recipe
  • Python
  • gtk
migrated from node/1524

Seguro que más de uno se ha dado cuenta de que con la llegada de GTK3 no han aparecido los habituales python-gtk3 y compañía. Esto se debe a que ahora se utiliza un sistema de introspección de objetos que proporciona GObject (para que luego digan que no se puede hacer OO en C). Con este sistema se pueden crear «bindings al vuelo» de cualquier librería hecha con GObject con el consiguiente ahorro que implica no tener que hacer y mantener bindings. El sistema de introspección si que necesita bindings claro (PyGI), pero están integrados en python-gobject.

Leer más

Programadores de poca fe

2011-06-18 david.villa — [ edit | raw ]
  • tale
  • INGSOFT
migrated from node/1525

Interesante autocrítica de Carlos Ble a la profesión de programador. A ver qué os parece.

  • http://www.carlosble.com/2011/06/programadores-de-poca-fe/

Clase LaTeX para escribir el PFC

2011-05-19 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/1515
Nota


El repositorio de arco-pfc está ahora en
https://bitbucket.org/arco_group/arco-pfc.

Quizá haya por aquí alguien que quiera escribir su PFC en LaTeX, pero sin liarse demasiado. Si es tu caso, instala la última versión del paquete arco-pfc incluye la clase LaTeX del mismo nombre (es decir, se usa directamente con \documentclass{arco-pfc}). Esta clase sigue el formato específico de la ESI de Ciudad Real, pero es fácil cambiarlo si estudias en otra parte.

Leer más

Pruebas web con selenium y Atheist

2011-05-14 david.villa — [ edit | raw ]
  • recipe
  • INGSOFT
migrated from node/1513

En el blog de magmax: Pruebas web: selenium + atheist

Pruebas unitarias C con el plugin CxxTest de Atheist

2011-05-14 david.villa — [ edit | raw ]
  • recipe
  • C++
  • INGSOFT
migrated from node/1512

En el blog de magmax: Atheist: Probando módulos C

Debian TDD

2011-05-04 david.villa — [ edit | raw ]
  • INGSOFT
  • Debian
migrated from node/1506
Lectura interesante para ¿debianitas ágiles? http://blog.liw.fi/posts/debian-tdd/

Principios FIRST

2011-05-03 david.villa — [ edit | raw ]
  • recipe
  • INGSOFT
migrated from node/1505

Los principios FIRST son propiedades que deberían tener las pruebas unitarias.

Leer más

Atributos con tipado estático en Python (usando un descriptor)

2011-04-25 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1500

En esta receta voy a contar cómo utilizar los «descriptores» de Python para poder crear atributos (variables de instancia) que no puedan cambiar de tipo durante la vida del objeto. Por supuesto, también es una excusa para aprender algo sobre los descriptores en sí.

Leer más

LaTeX: Ayuda «en línea» en GNU Emacs

2011-04-13 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/1495

Un par de trucos para conseguir ayuda sobre comandos y paquetes LaTeX desde GNU Emacs.

Leer más

The poor's man "dropbox"-thing

2011-04-04 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/1489

This recipe shows how to setup a basic synchronization mechanism (similar to DropBox) by means of conventional GNU/Linux tools. This does not require root privileges and no packages (except ssh-server) need to be installed in the server.

Leer más

GNU Emacs: el-get, un apt-get para Emacs

2011-03-26 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1488

Si utilizas Emacs y tienes varios PCs ¿cómo te apañas para que todos se comporten igual? Las mismas fuentes, los mismos colores, las mismas combinaciones de teclas… Realmente todo eso no es un gran problema; basta con tener tu ficherito .emacs en un repositorio personal para que todos los PCs tengan la misma configuración.

Pero ¿y los modulitos (los ficheros .el) que bajas de cualquier parte? Unos los bajas de un blog de alguien, otros de EmacsWiki, etc. etc. No es plan de subirlos también a tu repositorio de configuración, y además, aparecen nuevas versiones, sería un trabajo de chinos tenerlos actualizados. Hasta ahora yo había tomado la determinación de no utilizar ningún módulo de Emacs que no estuviera convenientemente empaquetado para Debian. Hasta ahora…

Leer más

arco-devel: toggle-split

2011-03-26 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • emacs
migrated from node/1487

ATENCIÓN: Esta receta está OBSOLETA. Ver emacs-pills

Leer más

Integración Continua de aplicaciones Python con Hudson/Jenkins

2011-03-22 david.villa — [ edit | raw ]
  • Python
  • INGSOFT
migrated from node/1485

Os dejo un enlace a un buen tutorial para sacarle todo el jugo a Hudson (o Jenkins) para integrar aplicaciones y módulos Python.

http://www.rhonabwy.com/wp/2009/11/04/setting-up-a-python-ci-server-with-hudson/

Agilismo = dejar de hacer el «gili»

2011-03-08 david.villa — [ edit | raw ]
  • opinion
  • INGSOFT
migrated from node/1478

Interesante enfoque: http://queridointernet.wordpress.com/2011/03/02/descubriendo-metodologias-agiles-el-a-gilismo/

[visto en agile-cr]

Dobles de prueba

2011-02-19 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1474

Tenía pensado escribir un post del estilo, pero como éste está bastante bien… pues os lo recomiendo.

  • Escribiendo mejores Test III: Dobles de prueba

Redmine PAM authentication plugin

2011-01-29 david.villa — [ edit | raw ]
  • recipe
migrated from node/1454

That recipe shows how to configure redmine to use PAM authentication. It includes the PAM authentication plugin code.

Leer más

«Estamos hartos de escribir mierda»

2011-01-25 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1453

Artesanía de Software: De qué va todo esto — Traducción de Software Craftsmanship: What it’s all about. de Uncle Bob

Donald Knuth galardonado con el «Premio Fronteras» de la Fundación BBVA

2011-01-19 david.villa — [ edit | raw ]
  • new
migrated from node/1449

Donald Knuth, autor de «The art of computing programing» y creador de TeX es uno de los auténticos padres de las ciencias de la computación. Me temo que mucho menos conocido de lo que se merece.

  • http://www.elmundo.es/elmundo/2011/01/18/ciencia/1295354085.html
  • http://www.elpais.com/articulo/sociedad/hombre/habla/maquinas/elpepusoc/20110118elpepusoc_2/Tes

Kōans

2011-01-04 david.villa — [ edit | raw ]
  • recipe
  • INGSOFT
migrated from node/1447

Un Kōan es, en la tradición Zen, una especie de acertijo que el maestro propone a su discípulo para averiguar en qué punto se encuentra en su camino hacia la iluminación. Se trata de un problema cuya solución no puede ser encontrada a través de la razón, si no a través de la intuición…

Ya, ya, esto suena demasiado raro incluso para CRySoL.

Leer más

accept: un decorador para type-checking versátil en Python

2010-12-27 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1443

Una de las cosas que más chocan al empezar a utilizar un lenguaje dinámico (Python, Ruby, Lua, etc.) es que las variables no se declaran o definen con un tipo concreto. Eso normalmente no es un problema y de hecho resulta bastante cómodo. Pero cuando un programa adquiere cierta envergadura empiezan a surgir problemas.

Poder forzar la interfaz de un método, sobre todo de un constructor es más que conveniente. Permite detectar muchos usos inadecuados cuando el usuario de una clase y su programador son personas distintas (o uno mismo si ha pasado demasiado tiempo). Esto es básico para cosas como el Diseño por contrato y otras metodologías en las que es imprescindible tener comprobación estricta de tipos.

Leer más

arco-devel: auto-insert

2010-12-06 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • emacs
migrated from node/1437

ATENCIÓN: Esta receta está OBSOLETA. Ver emacs-pills

Leer más

Curso de «Introducción a GNU/Linux» en la ESI de Ciudad Real

2010-11-22 david.villa — [ edit | raw ]
  • event
migrated from node/1434

La Escuela Superior de Informática en colaboración con Insula Barataria y CRySoL organizan un curso de introducción al Software Libre y GNU/Linux a partir de este mismo viernes 26 de noviembre.

El curso lo impartirán profesores de la ESI vinculados a los grupos de investigación Arco y Oreto. Son profesionales comprometidos con el uso y desarrollo de Software Libre y su difusión. Se trata de un curso muy orientado a la comunidad, que incide en las cuestiones sociales y filosóficas pero también en las importantes ventajas prácticas y tecnológicas del Software Libre.

Los ingresos de la matrícula de los alumnos se utilizarán para comprar material para los propios alumnos y en donaciones a la Free Software Fundation y otras entidades que promueven el software libre.

¡Apúntate ya, aún quedan plazas!

arco-devel: zoom para GNU Emacs

2010-11-17 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • emacs
migrated from node/1433

ATENCIÓN: Esta receta está OBSOLETA. Ver emacs-pills

Leer más

hook subversion para integración con Hudson

2010-11-09 david.villa — [ edit | raw ]
  • recipe
  • INGSOFT
  • devel
  • VCS
migrated from node/1429

Esta receta explica cómo configurar un repositorio subversion para lanzar una proyecto Hudson al hacer commit.

Leer más

Page Speed

2010-11-07 david.villa — [ edit | raw ]
  • new
  • networking
migrated from node/1427

Me entero por Fernando Rincón en http://www.technologyreview.com/web/26678/ de PageSpeed, un proyecto bastante interesante de la mano de los chicos de Google. Se trata de un mod para Apache que implementa mejoras para optimizar la velocidad del servidor web.

Si lo pruebas en tu servidor, coméntanos tus impresiones.

wii-mote: ese extraño mando a distancia

2010-11-02 david.villa — [ edit | raw ]
  • recipe
  • drivers
migrated from node/1424

Esta receta explica (a modo de recordatorio) cómo configurar wminput para usar el mando de la Wii como mando a distancia para PC.

Leer más

Alitas de muerte (a.k.a. alitas al horno)

2010-10-29 david.villa — [ edit | raw ]
  • cooking
migrated from node/1418

Las alitas de pollo más jugosas y crujientes a la vez que sanas que has probado en tu vida. Mortales de necesidad.

Leer más

arco-devel: speedbar

2010-10-20 david.villa — [ edit | raw ]
  • new
  • Arco
  • emacs
migrated from node/1414

La nueva versión del paquete arco-devel (la 0.46-1) incluye una configuración básica para el modo speedbar de emacs. Para usarla, simplemente añade lo siguiente a tu .emacs:

(add-to-list 'load-path "/usr/share/arco-tools/emacs")
(load "psgml.cfg")

Software libre y recetas de cocina

2010-10-15 david.villa — [ edit | raw ]
  • proselitism
migrated from node/1412
Esta socorrida y recurrente analogía explicada para todos los públicos
Visto en la lista de correo de linuxalbacete

arco-devel, el paquete

2010-10-13 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • emacs
migrated from node/1410

ATENCIÓN: Esta receta está OBSOLETA. Ver emacs-pills

Leer más

Empezando con mercurial

2010-09-20 david.villa — [ edit | raw ]
  • VCS
  • mercurial
migrated from node/1401
Una tutorial muy decentillo de los chicos de mercurial: http://hginit.com

Recuperar iconos perdidos en GNOME

2010-09-16 david.villa — [ edit | raw ]
  • recipe
  • gnome
migrated from node/1399

En las últimas versiones los chicos de GNOME han decidido que eliminar los iconos de menús y botones mejora la usabilidad. Si no estás de acuerdo, ésta es tu receta.

Leer más

Bilbliografía sobre métodos ágiles

2010-09-03 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1393

Aquí os pongo una lista de libros, documentos y enlaces para meterse en el mundo de los métodos ágiles y en especial en el TDD. La iremos completando. Deja tu comentario si quieres aportar alguno que conozcas.

Leer más

Python para aprender a programar

2010-08-31 david.villa — [ edit | raw ]
  • Python
migrated from node/1390

Me entero por una noticia de barrapunto de un artículo bastante interesante que explica en detalle porqué Python es una buena opción para enseñar programación a novatos.

» Why Python is a great language for teaching beginners in introductory programming classes

«ingsoft» realista

2010-08-21 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1389

Después de unas cuantas décadas desde la «crisis del software», las cosas no han mejorado demasiado en las ciencias de la computación. El desarrollo de programas de computadora dista mucho de parecerse al proceso de fabricación típico de cualquier otra ingeniería; razón ésta por la que muchos consideran, no sin falta de razón, que el prefijo «ingeniería» le viene grande a la informática.

Leer más

INGSOFT: Keep It Simple, Stupid (KISS)

2010-07-29 david.villa — [ edit | raw ]
  • INGSOFT
migrated from node/1388

El principio KISS es uno de los principios de programación y diseño más conocidos y a la vez más difíciles de seguir. Como supongo que sabéis, KISS dice que «el objetivo principal de todo diseño debe ser la simplicidad».

Leer más

INGSOFT

2010-07-14 david.villa — [ edit | raw ]
  • opinion
  • INGSOFT
migrated from node/1377

Tras el pseudo-orwelliano término «INGSOFT» me propongo escribir algunos posts (breves) sobre ingeniería de software «práctica». ¡¿Y eso existe?!

Leer más

inotify: acciones disparadas por cambios en el sistema de ficheros

2010-07-05 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1374

Esta receta explica cómo incorporar a tus programas la posibilidad de realizar acciones cuando se crean, borran, cambian, etc. ficheros o directorios concretos.

Leer más

Pequeño FAQ de Mailman

2010-07-03 david.villa — [ edit | raw ]
  • recipe
migrated from node/1528

Cambiar la URL del servidor

Leer más

Procrastinación y el «mal de la computadora»

2010-07-01 david.villa — [ edit | raw ]
  • tale
migrated from node/1371

El «centro de cálculo» del proyecto Manhattan (probablemente el primero de la historia) era una sala con un montón de grandes máquinas de IBM. Pero no eran computadores (hablamos del año 1944), eran máquinas completamente mecánicas y procesaban bloques de tarjetas perforadas.

Leer más

Configuración manual de una conexión de red en Debian (con iproute2)

2010-06-26 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/1368

Cómo configurar «a mano» (sin DHCP) los parámetros más importantes de una tarjeta de red en GNU/Linux, utilizando el comando ip del paquete iproute2.

Leer más

GNU Emacs: Cambiar fácilmente entre el .c y el .h

2010-06-05 david.villa — [ edit | raw ]
  • recipe
  • emacs
  • devel
migrated from node/1360

Cómo cambiar rápida y cómodamente entre el fichero de implementación (.c, .cc, .cpp) y el de cabecera (.h, hpp) cuando se trabaja con un proyecto C o C++ (por lo visto también funciona con Ada y VHDL).

Leer más

Reto de la semana: containers de la STL

2010-05-22 david.villa — [ edit | raw ]
  • challenge
  • C++
migrated from node/1358

El tema es sencillo (o lo parece). Cuando utilizamos un contenedor de la STL (vector por ejemplo) ¿qué pasa con el contenido cuando se destruye el contenedor?

Leer más

Installing Omnet on Debian

2010-05-15 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/1357

Ingredients

Leer más

Proxy SOCKS con SSH: más fácil imposible

2010-05-04 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/1355

Pequeña receta para montar un proxy SOCKS en tu PC para salir a internet a través de un túnel SSH.

Leer más

Configuración de claws-mail para gmail con IMAP

2010-04-21 david.villa — [ edit | raw ]
  • recipe
migrated from node/1352

Leer más

GNU Emacs: Macros de teclado

2010-04-15 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1350

Cómo definir, guardar y utilizar macros de teclado en emacs.

Leer más

Patrón ThreadPool en Python

2010-03-17 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • Python
  • patterns
migrated from node/1340

Una pequeña receta sobre el patrón ThreadPool y su implementación en Python.

Leer más

Problemas con la red en Java openjdk-6 en Debian

2010-02-24 david.villa — [ edit | raw ]
  • recipe
  • Java
migrated from node/1335

Edita el fichero /etc/sysctl.d/bindv6only.conf para que quede:

Leer más

Manipulación de ficheros MP3

2010-02-13 david.villa — [ edit | raw ]
  • recipe
  • shell
  • multimedia
migrated from node/1330

Un pequeño catálogo de herramientas (de consola) para manipulación de ficheros .mp3. Muy útiles para usar en scripts y automatizar como Dios manda.

Leer más

Autenticación PAM en Drupal

2010-01-27 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • security
migrated from node/1325

Cómo utilizar PAM para conseguir la autenticación de usuarios de un sitio Drupal

Leer más

easygit: git para gente normal

2010-01-26 david.villa — [ edit | raw ]
  • VCS
migrated from node/1324
  • web de easygit
  • easygit para usuarios de subversion

Y es paquete debian

¿Qué es eso de REST?

2010-01-11 david.villa — [ edit | raw ]
migrated from node/1320

REST es el acrónimo de REpresentational State Transfer. Dicen que es un «estilo arquitectural». Seguramente te has quedado como yo, pero es que no es fácil encontrar material para entender realmente de qué va esto. Aquí os dejo algunos enlaces:

Leer más

Escaneando a PDF con Python y SANE

2010-01-04 david.villa — [ edit | raw ]
  • script
  • Python
  • drivers
migrated from node/1319

Aquí os dejo un scriptillo muy resultón para escanear documentos de una o varías páginas y guardar el resultado directamente en PDF.

Leer más

Patrón Flyweight en Python como metaclase

2009-12-25 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • Python
  • patterns
migrated from node/1278

Esta receta incluye una implementación «comentada» del patrón de diseño «Flyweight» (peso mosca) usando una metaclase Python.

Leer más

Manipulación de ficheros PostScript

2009-12-25 david.villa — [ edit | raw ]
migrated from node/1277
Esta receta es un compendio de pequeños trucos y utilidades para manipular ficheros PostScript con los programas libres habituales en un sistema GNU En realidad pienso ir apuntando aquí las soluciones que voy encontrando a problemas que me surgen cuando tengo que hacer ciertas «operaciones imprevistas» con ficheros PS. Se admiten sugerencias para ir incorporando a la receta.

Convertir un documento a formato de varias páginas por hoja

Utilizando el programa psnup del paquete psutils:
$ psnup -2 original.ps salida.ps

Seleccionar algunas páginas

 $ psselect -p 3,7,12-23,34 original.ps resultado.ps

Usar una partición real con Virtualbox

2009-12-13 david.villa — [ edit | raw ]
  • recipe
migrated from node/1275

Virtualbox permite crear un fichero .vmdk especial que «apunta» a una partición real de un disco duro. De ese modo es posible arrancar un sistema operativo instalado realmente en la máquina pero virtualizado dentro de otro S.O. El comando para lograrlo es:

Leer más

Pasito a pasito...

2009-12-03 david.villa — [ edit | raw ]
  • tale
migrated from node/1270

…nos vamos acercando

Arrestan a una mujer por grabar el cumpleaños sorpresa de su hermana mientras veían “Crepúsculo” [ENG]

Concentrador OpenVPN en Debian GNU/Linux (o Ubuntu)

2009-11-28 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • security
  • networking
migrated from node/1266

Cómo interconectar dos redes inaccesibles entre sí ya sea porque ambas están detrás de NAT o por consecuencias de las nuevas e incomprensibles «políticas de seguridad» de la empresa.

Leer más

Creative ZEN con Debian GNU/Linux

2009-11-06 david.villa — [ edit | raw ]
  • recipe
  • drivers
migrated from node/1258

Como acceder al Creative Zen desde un PC con Debian para mover todo tipo de ficheros, playlists, etc.

Leer más

LaTeX: babel + enumitem

2009-11-04 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/1254

Hay un pequeño bug en babel que da la lata si usas también el paquete enumitem. El error dice algo como:

Leer más

Escribir caracteres Unicode en GNU/Linux

2009-11-03 david.villa — [ edit | raw ]
  • recipe
migrated from node/1253

Cómo escribir caracteres «especiales» en GNU, tanto en consola como en las aplicaciones.

Leer más

Servicios de GMX en GNU/Linux

2009-10-31 david.villa — [ edit | raw ]
  • recipe
migrated from node/1245

GMX es una empresa alemana que ofrece servicio de correo (web, POP e IMAP), jabber y WebDAV de forma gratuita y de gran calidad. No está de más tener una alternativa en un mundo cada vez más dominado por Google.

Leer más

Frases célebres perdidas

2009-10-30 david.villa — [ edit | raw ]
migrated from node/1246

Pues estaba buscando en CRySoL un enlace que yo mismo puse a una magnifica colección de Citas de Dijkstra. Pero claro, parece ser que todo lo que no esté en CRySoL resulta ser efímero y acaba por desaparecer.

Leer más

Manipulación de documentos PDF desde Python, con pyPdf

2009-10-23 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1240

pyPdf es un modulo muy interesante para manipular páginas y contenido de documentos PDF, en la receta pongo algún ejemplo

Leer más

Debian en el Acer Aspire Revo

2009-09-27 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1226

Algunos detalles para instalar Debian GNU/Linux en el Acer Aspire Revo. La conexión entre el Revo y la tele se hace con un cable HDMI 1.3.

Leer más

eduroam con network-manager (one more time)

2009-09-21 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/1224

En la pestaña “Wireless Security”:

  • Security: WPA & WPA2 Enterprise
  • Authentication: Protected EAP (PEAP)
  • CA Certificate: /etc/ssl/certs/AddTrust_External_Root.pem
  • PEAP Version: Automático
  • Inner Authentication: MSCHAPv2

Leer más

Python time

2009-09-19 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1222

Una pequeña reseña sobre las funciones de manipulación de la hora en Python mediante el módulo time.

Leer más

Atheist

2009-08-29 david.villa — [ edit | raw ]
migrated from node/1218

You need evidences, not just beliefs.

Leer más

Desactivación de pitidos varios

2009-08-16 david.villa — [ edit | raw ]
  • recipe
migrated from node/1213
  • Consola: Añadir set bell-style none al fichero $HOME/.inputrc

Leer más

La realidad (Amazon) supera a la ficción («Derecho a leer»)

2009-07-17 david.villa — [ edit | raw ]
  • new
migrated from node/1136

Pues eso, que las «actividades» de Amazon con su Kindle superan la ficción del relato de RMS «Derecho a leer»

JCCM quiere Windows 7

2009-07-14 david.villa — [ edit | raw ]
  • new
migrated from node/1131
Me he enterado de esto vía la lista de correo de Linuxalbacete. http://www.revistadeinternet.com/Negocios/2721/2009/07/10/Castilla-La-Mancha-y-Microsoft-firman-un-acuerdo
Leer más

Software libre para la docencia

2009-07-13 david.villa — [ edit | raw ]
  • new
migrated from node/1130
http://crisol.uc3m.es/index.php/top-noticias/48-cursos/98-doc-curso-swld-09

Bacula: comandos de bajo nivel

2009-07-08 david.villa — [ edit | raw ]
  • recipe
  • security
migrated from node/1127

Comandos de bajo nivel para pruebas, uso del cargador y el carrusel. Todo esto se ha probado con una unidad HP DSS-4.

Leer más

Stallman, famoso gracias a un peluche?

2009-07-05 david.villa — [ edit | raw ]
migrated from node/1125
Pues eso dice el pie de foto de esta noticia: http://www.laprovincia.es/secciones/noticia.jsp?pRef=2009070500_5_242259__Sociedad-y-Futuro-Stallman-Regalar-portatil-Windows-malevolo

¿Qué hay detrás de Opera Unite?

2009-06-18 david.villa — [ edit | raw ]
migrated from node/1123

Interesante post sobre las condiciones y el funcionamiento de Opera Unite.

http://factoryjoe.com/blog/2009/06/16/thoughts-on-opera-unite/#is-unite-really-decentralized

Es como Lego!! ;-)

2009-06-04 david.villa — [ edit | raw ]
migrated from node/1121
Atentos a la pijada:

littleBits intro from ayah bdeir on Vimeo.

Qué? Ahora si que te han entrado ganas de instalar la LPKF...

¿Software garantizado?

2009-05-10 david.villa — [ edit | raw ]
  • opinion
migrated from node/1117

¿Puede la industria del software comercial ofrecer una verdadera calidad en sus productos igual que la NASA o la ESA exige a sus proveedores? ¿Será éste el nacimiento de una auténtica ingeniería informática?

http://www.enriquedans.com/2009/05/los-fallos-del-software-y-la-responsabilidad-de-quien-lo-creo.html

Subtítulos fuera de la imagen en mplayer

2009-04-10 david.villa — [ edit | raw ]
  • recipe
  • multimedia
migrated from node/1105

Como añadir un margen para el renderizado de subtítulos en mplayer

Leer más

¿De qué me suena?

2009-03-11 david.villa — [ edit | raw ]
migrated from node/1102

El auténtico emblema de informática

2009-03-10 david.villa — [ edit | raw ]
migrated from node/1100

Hace no mucho me enteré por Paco de que el escudo/emblema/anagrama que usamos habitualmente y que usan muchas de las escuelas de informática de España está mal, principalmente porque tiene una rama de trigo y debería ser de olivo. A ver qué hago ahora con el pin tan chulo que me dieron cuando acabé… Se utiliza en documentos oficiales como la guía docente de la ESI (que por cierto el que aparece ahí es obra de Paco Moya y en el documento no se le da crédito por ello).

Leer más

Cambiar "accels" de GTK sobre la marcha

2009-03-10 david.villa — [ edit | raw ]
  • recipe
  • gtk
migrated from node/1101

Permite asignar combinaciones de teclas personalizadas a cualquier opción de un menú solo con pulsarla mientras está seleccionado. Siempre me pareció una gran feature.

$ gconftool-2 -t bool -s /desktop/gnome/interface/can_change_accels true

Google Gears works on Iceweasel (Debian, Ubuntu)

2009-02-25 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1095

How to install Google Gears on Iceweasel.

Leer más

Partición cifrada con dm-crypt en Debian

2009-02-24 david.villa — [ edit | raw ]
  • recipe
  • security
  • Debian
migrated from node/1094

Esta receta explica como utilizar dm-crypt para cifrar una partición completa y montarla/desmontarla cómodamente.

Leer más

Cómo funciona apt/dpkg

2009-02-12 david.villa — [ edit | raw ]
migrated from node/1089
http://algebraicthunk.net/~dburrows/blog/entry/a-map-of-apt-state-files/

Buenas referencias, malas terribles referencias

2009-02-07 david.villa — [ edit | raw ]
  • recipe
migrated from node/1088

Esta receta incluye unas simples pautas para decidir qué referencias son adecuadas a la hora de elaborar cualquier documento técnico. En particular voy a hablar de referencias a documentos electrónicos aunque mucho de lo que digo creo que podría aplicarse también a libros y artículos científicos. Siento que los ejemplos que voy a poner sean tan mono-temáticos pero obviamente no me atrevo a hablar de buenas o malas referencias en campos que no conozco.

Leer más

No habrá sistema de 3 amenazas a internautas en UK

2009-01-27 david.villa — [ edit | raw ]
  • new
migrated from node/1084

Parece que hay algunos problemillas legales en eso de que el gobierno intervenga las comunicaciones de los ciudadanos. A ver si aprenden de España; aquí si aparecen problemas legales para aplicar medidas antipopulares (es decir, en contra del pueblo) pues se cambia la ley, vaya problema!

Visto en: Inglaterra no desconectará a los usuarios de la redes P2P

DVB-T Realtek 2831U on Debian

2009-01-25 david.villa — [ edit | raw ]
  • recipe
  • drivers
  • Debian
migrated from node/1082

How to install the device driver for a TDT receiver based on the chipset DVB-T Realtek. In my case, it’s the Zaapa ZT- DVBTSTUSB

Leer más

Router casero con Debian en el fit-PC 1.0

2009-01-24 david.villa — [ edit | raw ]
  • recipe
  • networking
  • Debian
migrated from node/1081

El fit-PC es un computador basado en el chip Geode con un tamaño realmente pequeño (12×12×4 cm) pero con características muy interesantes. Esta receta explica como instalar Debian para sacarle el máximo rendimiento al pequeño de la casa.

Leer más

Instalar Debian desde red con PXE (nunca fue tan fácil)

2009-01-22 david.villa — [ edit | raw ]
  • recipe
  • networking
  • Debian
migrated from node/1080

La receta describe cómo preparar un servidor DHCP para instalar Debian (por PXE o Etherboot) en otras máquinas de la misma red (“netboot” lo llaman). Esto es especialmente útil cuando el PC en el que quieres instalar Debian no tiene lector de CD-ROM, como pasa en los netbooks (EeePC, Aspire One, etc) y otras cosas más “raras” como el fit-PC. Si lo pruebas verás que es más sencillo, cómodo y rápido que recurrir al arranque por USB.

Leer más

Instalar Debian GNU/Linux en el Sony VAIO VGN-SZ4XN

2009-01-21 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/649

Cómo afinar la instalación de nuestra querida Debian en este portátil.

Leer más

Soy Linux... y mi hermano, mi perro y mi coche también

2009-01-17 david.villa — [ edit | raw ]
  • humor
migrated from node/1079

Ya lo avisé, la manía (rozando la esquizofrenia) de llamar “Linux” a todo lo que pillas porque “es un nombre muy chulo” acabará siendo el fin del mejor y más importante invento del ser humano: el lenguaje. Cuando todo se llame “Linux” y sea imposible entendernos, la humanidad estará condenada a su propia extinción…

Barrapunto: " La fundación Linux presenta el concurso ‘Soy Linux’ ":http://softlibre.barrapunto.com/articles/09/01/16/1454211.shtml

Nokia 6300 como módem para Debian (con simyo)

2009-01-15 david.villa — [ edit | raw ]
  • recipe
  • networking
  • Debian
migrated from node/934

Esta receta explica cómo utilizar un móvil Nokia 6300 como módem para conectar un ordenador a Internet.

Leer más

Utilidades para medir el ancho de banda en Debian

2009-01-09 david.villa — [ edit | raw ]
  • recipe
  • uclmwifi
migrated from node/1075

Esta receta es una lista de programas de análisis de tráfico de red que están disponibles como paquetes Debian oficiales y que pueden resultar muy útiles

Leer más

Python-3.0 (a.k.a Python 3000) para Debian

2008-12-30 david.villa — [ edit | raw ]
  • Python
  • Debian
migrated from node/1074

Python 3.0 para impacientes

LaTeX: Referencias imprescindibles

2008-12-23 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/1072
Leer más

Pensar en C++: Herencia de interfaces

2008-12-22 david.villa — [ edit | raw ]
  • C++
migrated from node/1004

Voy a ir publicando como posts partes sueltas -pero con significado autónomo- de los libros Pensar en C++ I y II. La idea es darle un poco de visibilidad al proyecto, y de paso si alguien encuentra algún error o hace algún comentario puede ayudar a la revisión.

Leer más

babel: ¿cuadro o tabla?

2008-12-21 david.villa — [ edit | raw ]
  • LaTeX
migrated from node/1070

He encontrado casi por casualidad la página web de Javier Bezos (el maintainer de babel y algunos paquetes más) y me parecido muy interesante una página en la que explica las decisiones en spanish para babel que han tomado. Muy curiosa la explicación de la controversia tabla/cuadro que sé que preocupa a algunos miembros de CRySoL :-)

Encuentro digital con David Bravo

2008-12-19 david.villa — [ edit | raw ]
migrated from node/1068
David Bravo habla sobre los últimos rumores, amenazas y extorsiones, todos los años, gran ilusión. http://ecodiario.eleconomista.es/encuentro-digital/David-Bravo-2008-12-18

Copyright amazing adventures

2008-12-12 david.villa — [ edit | raw ]
  • tale
migrated from node/1064

Decía Einstein que «hay dos cosas infinitas: el universo y la estupidez humana…». Yo añadiría unas cuantas más: la inmoralidad, la codicia y la ausencia de escrúpulos de la industria del copyright. ¿Hasta dónde serán capaces de llegar? Manipular niños: HECHO. siguiente?…

Por si necesitabas algún motivo más para sentir vergüenza de ser español

[Visto en Barrapunto]

Los ilegales intentan engañarte... ¡No te dejes manipular!, para que nadie te time

2008-12-01 david.villa — [ edit | raw ]
  • opinion
migrated from node/1055

El título de este post es el slogan de la campaña Si eres legal, eres legal del Ministerio de Cultura, pero perfectamente podría ser el de cualquier ciudadano que quiera preservar su derecho a acceder libremente a la cultura. Porque mentir a la población diciendo que la ley dice cosas que no dice no debe ser muy legal, no? Al menos parece bastante inmoral.

Leer más

Instalar Debian GNU/Linux en el Acer Aspire ONE A150L

2008-11-24 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/1050

Cómo instalar nuestra querida Debian en el Acer Aspire ONE. Sé que hay varias buenas recetas sobre lo mismo, pero son efímeras y al final nos quedamos sin receta. CRySoL perdura.

Leer más

El piratear se va a acabar

2008-11-21 david.villa — [ edit | raw ]
  • opinion
migrated from node/1049

Supongo que sabréis que el Ministerio de Cultura y estamentos privados tan reputados como la SGAE, la industria de los contenidos y las empresas de comunicaciones están preparando un proyecto para acabar con el P2P en España (la semana que viene) y parece que la propuesta va a ser el sistema francés de tres amenazas avisos.

Leer más

De ingenieros informáticos y otras criaturas fantásticas

2008-11-17 david.villa — [ edit | raw ]
  • opinion
migrated from node/1045

Con todo esto de las atribuciones, las competencias, los títulos, las huelgas, la mala información y la pura y llana desinformación (incluso intencionada) es un auténtico reto enterarse de qué va todo esto y hacia dónde va (si es que va) nuestra amada/odiada, al 50%, carrera de Informática.

Leer más

Para que dices que servía esto?

2008-11-04 david.villa — [ edit | raw ]
migrated from node/1038

Dos noticias (separadas 13 meses) que le hacen a uno replantearse la auténtica finalidad de ciertas normas…

Leer más

«se trata [...] de un empecinamiento en separar el equipo del SO»

2008-10-24 david.villa — [ edit | raw ]
  • opinion
migrated from node/1030
... cuando todo el mundo sabe que son la misma cosa. http://www.publico.es/ciencias/167632/condenado/querer/windows/ordenador Acongojante, con jueces así ¿quién necesita estafadores?

Lo bueno del capitalismo

2008-10-24 david.villa — [ edit | raw ]
migrated from node/1034
http://en.zappinternet.com/video/wunTpoSruD/The-Story-of-Stuff-de-Annie-Leonard-1-3-sub-spanish Igual deberíamos pararnos un momento a pensarlo, verdad?

Mini tutorial de OO con Python

2008-10-13 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1023

Esta receta es una pequeña introducción al soporte de Python para diseño orientado a objetos. Para programadores noveles, se aconseja primero la lectura de nuestra ya veterana receta Mini tutorial de Python.

Leer más

GTK UIManager

2008-10-10 david.villa — [ edit | raw ]
  • recipe
  • Python
  • gtk
migrated from node/1022

Una breve referencia sobre gtk.UIManager y gtk.Action

Leer más

Mailman and Exim4

2008-10-09 david.villa — [ edit | raw ]
  • recipe
migrated from node/1021
Una buena recetilla sobre el tema: http://www.debian-administration.org/articles/617

El inesperado valor docente del absentismo

2008-10-01 david.villa — [ edit | raw ]
  • opinion
migrated from node/1019

Los nuevos tiempos del ECTS y el espacio europeo traen nuevos “aires” a la vida universitaria. Esta nueva metodología docente aboga por la evaluación continua y el control del progreso del alumno a lo largo del curso. Eso ya se estilaba en mi cole cuando hice la EGB, tampoco es que sea nada innovador.

Leer más

Documentación oficial de Scapy

2008-09-29 david.villa — [ edit | raw ]
  • scapy
migrated from node/1016
Versión muy preliminar, pero útil. http://permalink.gmane.org/gmane.comp.security.scapy.general/3252

Reto de la semana: "display 7 segmentos oblícuo"

2008-09-26 david.villa — [ edit | raw ]
  • challenge
migrated from node/1014
Pues nada, se trata de escribir un programilla en el lenguaje que quieras, que tome por línea de comandos un número de cualquier tamaño (menor que un googolplex) y lo represente como en el siguiente ejemplo:
$ pinta_num 1234567890
\ /\ /\  \ /  /  /\ /\ /\ /\
 \ /  /\\/\\/\\/\  \\/\\/\\ \
   \/  /     / \/    \/  / \/
Leer más

logging con colorcitos en Python

2008-09-26 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/1013

logging es un módulo de la librería estándar de Python para “imprimir” mensajes de log. En esta receta se explica cómo conseguir que cada tipo de mensaje aparezca en consola con un color diferente.

Leer más

Sub-repositorios en mercurial con Forest

2008-09-08 david.villa — [ edit | raw ]
  • recipe
  • VCS
  • mercurial
migrated from node/1002

Cómo manejar conjuntos de repositorios mercurial al estilo de los directorios de subversion o los subrepositorios de git.

Leer más

Y no es broma: el plagio se paga

2008-09-06 david.villa — [ edit | raw ]
  • platanada
migrated from node/1000

¿Desea más información? pulse aquí

Visto en: Meneame

micro reto de la semana

2008-09-06 david.villa — [ edit | raw ]
  • challenge
migrated from node/1001
Empezamos con uno muy fácil, apto para todos los públicos ¿Qué imprime esta sentencia? ¿y por qué? En C:
printf("hola" + 2);
Leer más

La Forma Canónica Ortodoxa

2008-09-03 david.villa — [ edit | raw ]
  • recipe
  • patterns
  • C++
migrated from node/999

La Forma Canónica Ortodoxa u Orthodox Canonical Form (OCF) es un modismo muy utilizado en C++ y definido por James Coplien en su libro Advanced C++: Programming Styles and Idioms. Este modismo permite que un tipo(clase) definido por el programador se comporte como un «tipo concreto de dato», es decir, tenga las mismas características que un tipo proporcionado por el lenguaje.

Leer más

25º aniversario del proyecto GNU

2008-09-02 david.villa — [ edit | raw ]
  • new
  • proselitism
migrated from node/998

Aunque ha salido en todos los medios (excepto A3 y algún despistado más) yo no podía dejar pasar la oportunidad de celebrar el 25º cumpleaños del proyecto GNU, precursor y todavía principal motor del software libre (y por muchos años), a pesar del empeño que muchos ponen en negarlo.

Felicidades también a todos los que usan el sistema operativo GNU (aunque no lo sepan)

Asignatura sobre Software Libre en la Universidad de Sevilla

2008-08-29 david.villa — [ edit | raw ]
  • new
  • proselitism
migrated from node/997

Asignatura de Libre Configuración: Software Libre, Conocimiento libre y sociedad.

Python: merge lists

2008-08-27 david.villa — [ edit | raw ]
  • script
  • Python
migrated from node/993
A simple utility function to merge several lists in a single one, using the functional programming tools:
Leer más

scapy 2.0.0.5 en Debian

2008-08-18 david.villa — [ edit | raw ]
  • scapy
migrated from node/985

Hace tan solo unos días, Phil (el autor de scapy) anunciaba en la lista de correo una nueva (y muy remodelada versión de scapy): la 2.0.0.0. Y como es menester, ya está empaquetada para Debian y disponible en los repos oficiales de Debian con el nombre python-scapy.

Leer más

Prácticas de Programación Infames: OpenJDK

2008-08-14 david.villa — [ edit | raw ]
  • new
migrated from node/971

Más de una vez (y de dos) he oído hablar sobre extrañas normas no escritas (o eso espero) sobre «buenas prácticas» de programación. De entre todas ellas, me permito destacar:

  • El break solo se puede usar en los switch (en cada case).
  • Usar el continue es un pecado capital, al infierno de cabeza.
  • El return solo puede ir en la última línea de una función o método, y únicamente para retornar algo. De lo contrario sufrirás indecible tormento.
  • Y la clásica: Usar el goto está penado con sufrimiento eterno.

Leer más

Lo único seguro es que no lo es

2008-08-14 david.villa — [ edit | raw ]
  • opinion
migrated from node/970

Con esta paradoja se puede resumir la situación de la seguridad informática últimamente. Empezamos con la clave privada predecible de SSL en Debian (y Ubuntu y derivados, que son muchos), seguramente la cagada más grande en materia de seguridad de su historia.

Leer más

Escáner EPSON V10 en Debian

2008-07-20 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/954

Cómo configurar Debian para poder utilizar el escáner EPSON V10/V100.

Leer más

Debian GNU/Linux en el Dell XPS 420

2008-07-12 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/951

Recetilla con los pormenores para instalar Debian en el Dell XPS 420.

Leer más

Prácticas de programación infames (1ª parte)

2008-06-29 david.villa — [ edit | raw ]
migrated from node/943
Como supongo que sabéis, los pobres desgraciados que osan utilizar "continue" van al infierno y arden como teas por toda la eternidad. El castigo por usar "goto" no es muy distinto:

Auctex para torpes

2008-06-28 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/942

Modo PDF-Tex

Leer más

Bindings Python de librerías C++ con Boost.Python

2008-06-22 david.villa — [ edit | raw ]
  • recipe
  • Python
  • C++
migrated from node/939

Ejemplos mínimos para empezar con Boost.Python, probablemente la mejor libreŕia de generación de bindings Python para C++.

Leer más

más canon

2008-06-21 david.villa — [ edit | raw ]
migrated from node/937

!http://sp8.fotologs.net/photo/8/5/16/jmv_/1199899226_f.jpg!:http://www.fotolog.com/_jmv/23859294

Yo plagio

2008-06-20 david.villa — [ edit | raw ]
  • opinion
  • platanada
migrated from node/936

tú plagias
él plagia
nosotros plagiamos
vosotros plagiáis
ellos plagian

Leer más

iproute2 básico

2008-06-20 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/935

Esta recetilla incluye algunos comandos sencillos para comprender y empezar a manejar el famoso pero desconocido comando ip.

Leer más

Más amigo informático

2008-05-30 david.villa — [ edit | raw ]
migrated from node/923

¿A qué huele el código?

2008-05-29 david.villa — [ edit | raw ]
migrated from node/922

Interesante artículo sobre errores de programación que cometemos todos. Está especialmente orientado a programación orientada a objetos (valga la rebuznancia).

¿A qué huele tu código?

Mercurial, por favor

2008-05-15 david.villa — [ edit | raw ]
  • recipe
  • mercurial
  • VCS
migrated from node/919

Mercurial es otro sistema de control de versiones distribuido (otro más) que no tiene nada (o poco) que envidiar a git (en lo referente a prestaciones) pero casi tan fácil de usar como subversion. Esta recetilla incluye unas nociones de su uso básico y algunas buenas referencias.

Leer más

GladeWrapper, o cómo hacer una aplicación GTK con Python en 7 líneas

2008-04-23 david.villa — [ edit | raw ]
  • recipe
  • Python
  • gtk
migrated from node/911

Esta receta explica cómo usar la clase GladeWrapper para hacer programas PyGTK + glade del modo más sencillo jamás visto.

Leer más

LaTeX: Listados de código cómodos y resultones con listings

2008-04-17 david.villa — [ edit | raw ]
  • recipe
  • LaTeX
migrated from node/909

Ingredientes

Leer más

GNU Bash para programadores Python

2008-04-07 david.villa — [ edit | raw ]
  • recipe
  • shell
  • Python
migrated from node/904

Tratamiento de cadenas

Leer más

Instalar X-Wrt en La Fonera

2008-04-05 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/901

X-Wrt (a.k.a Webif2) es una interfaz web que facilita la administración y configuración de La Fonera y otros routers que usen OpeWrt. Webif2 está disponible como paquete ipkg, así que su instalación resulta tremendamente simple.

Leer más

OpenWRT en La Fonera

2008-04-01 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • networking
migrated from node/840

Esta receta es un resumen quick & dirty de los pasos necesarios para instalar un sistema OpenWRT estándar en La Fonera. Básicamente es una traducción simplificada de las dos recetas que aparecen en las referencias.

Leer más

Gestión sencillita de tu colección de películas

2008-03-24 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/890

Esta receta explica cómo añadir de una forma muy fácil títulos a tu colección (gestionada con GCStar) mediante un scriptillo hecho en Python + amara. (menudo combo! :-))

Leer más

OpenOffice.org, la suite de productividad ofimática de... Telefónica?

2008-03-05 david.villa — [ edit | raw ]
migrated from node/877

Lo que oyes: https://oo.respuestaempresarios.datia.es/

[visto en meneame]

Actualizar firmware de XPort

2008-02-27 david.villa — [ edit | raw ]
  • recipe
migrated from node/870

Ingredientes

Leer más

Pendrive cifrado con dm-crypt en Debian

2008-02-26 david.villa — [ edit | raw ]
  • recipe
  • security
  • Debian
migrated from node/866

Esta receta explica como utilizar dm-crypt para cifrar el sistema de ficheros de un pendrive o disco USB externo y luego montarlo cómodamente.

Leer más

Borrado a conciencia de ficheros y particiones en Debian

2008-02-26 david.villa — [ edit | raw ]
  • recipe
migrated from node/867

El objetivo es borrar ficheros, directorios o incluso particiones de modo que sea imposible recuperar los ficheros originales. Eso se consigue a base de escribir datos aleatorios y normalmente ceros después. La utilidad de esto es, obviamente, que ningún listillo pueda recuperar datos sensibles de tu disco duro, disco externo, etc.

Leer más

Instalar torrenflux-b4rt en Debian

2008-02-22 david.villa — [ edit | raw ]
  • recipe
  • Debian
migrated from node/864

Se trata de un frontend para bittorrent y wget escrito en PHP. torrentflux-b4rt es un fork de torrentflux más flexible, ligero y potente que el original. En esta receta se explica cómo instalarlo sobre lighttpd y sqlite.

Leer más

"Amara" por fin en Debian

2008-02-12 david.villa — [ edit | raw ]
  • new
  • Debian
  • Python
migrated from node/853

Desde el pasado día 8 de febrero, y con la inestimable ayuda de nuestro developer local (Paco Moya), amara ya es paquete Debian oficial. Amara es un toolkit sencillísimo para tratamiento de XML, con soporte de DOM, SAX, XPath, etc y todo de una manera muy “pythonica”. Nunca fue tan fácil tratar documentos XML.

Leer más

Router «chupachups» en GNU/Linux

2008-02-10 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/852

Un “router chupachups” (más conocido como router on a stick) es una máquina que ruta tráfico entre dos o más redes que coexisten en la misma red física. Eso se consigue normalmente por medio de VLANes (aunque éste no es el caso). Es decir, es un router con una única interfaz de red.

Leer más

Java como primer lenguaje: mala idea

2008-01-23 david.villa — [ edit | raw ]
  • opinion
migrated from node/843

Un par de lecturas muy interesantes (tanto para alumnos como para profesores) sobre los estudios en Computer Science. Es la opinión contrastada de dos profesores de la Universidad de Nueva York acerca del gran daño que hacen los nuevos planes de estudios a los titulados de hoy en día. Quizá lo más chocante (aunque no para todos) de sus conclusiones es el daño que, según ellos, causa Java como lenguaje para enseñar programación.

Incluye frases tan demoledoras como:

In short, today’s Java library cobbler is tomorrow’s pizza delivery man.

Leer más

GNOME VFS con Python

2008-01-06 david.villa — [ edit | raw ]
  • recipe
  • gnome
  • Python
migrated from node/831

GNOME VFS es una librería para realizar todo tipo de operaciones sobre ficheros independientemente del método de acceso necesario para llegar a ellos (FTP, HTTP, WebDAV, SMB, etc). Esta receta muestra ejemplos de lo sencilla y potente que puede llegar a ser esta pequeña maravilla.

Leer más

Configuración básica para jed

2008-01-03 david.villa — [ edit | raw ]
  • recipe
migrated from node/829

El siguiente fichero .jedrc resuelve dos cosas que suelen ser bastante latazo en JED:

Leer más

Building Skills

2007-12-17 david.villa — [ edit | raw ]
  • Python
migrated from node/823

Serie de 3 libros electrónicos sobre programación. El propio autor explica:

How do you build skills in programming? By doing a series of programming exercises that are focused on showing language features one at a time. These books build skills without asking you to assimilate too many technical concepts in a single sitting.

Leer más

New Debian Developer

2007-12-05 david.villa — [ edit | raw ]
  • proselitism
migrated from node/814

Enhorabuena! Supongo que se celebrará como merece, no?

GNU Emacs: Reemplazar texto en múltiples ficheros

2007-11-30 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/807

Una utilidad muy interesante que incorpora el modo “dired” de Emacs

Leer más

Catálogo de Modismos y Patrones

2007-11-28 david.villa — [ edit | raw ]
  • recipe
  • patterns
migrated from node/810

Esta receta incluye únicamente una clasificación de patrones a modo de catálogo y una pequeña descripción de cada uno. Desde aquí enlazaré las recetas específicas para cada patrón.

Leer más

Patrones: Todo lo que nunca quisiste saber y siempre evitaste preguntar

2007-11-16 david.villa — [ edit | raw ]
  • recipe
  • patterns
migrated from node/806

Primera de una serie de recetas sobre patrones de diseño.

Leer más

git, el control de versiones definitivo (por ahora)

2007-10-31 david.villa — [ edit | raw ]
  • recipe
  • VCS
migrated from node/797

Una pequeña introducción a git, el sistema de control de versiones de moda.

Leer más

Sockets «raw» con Python

2007-10-30 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • Python
  • networking
migrated from node/796

Esta receta es una pequeña introducción a la programación de sockets «raw».

Leer más

Más eficaz que la porra es el miedo a la porra

2007-10-24 david.villa — [ edit | raw ]
  • opinion
migrated from node/794

El título de este post es una frase acuñada por David Bravo y de la que cada día vemos más ejemplos. Hoy, otra prueba de que la libertad de expresión es un espejismo.

Increible-ble

SQL in'y'ection

2007-10-10 david.villa — [ edit | raw ]
  • ocio
migrated from node/790

La virgulilla está muerta!

2007-09-29 david.villa — [ edit | raw ]
  • recipe
migrated from node/781

Desde hace ya algunos meses, nuestro teclado no es el que era. Me refiero a la forma de escribir el carácter virgulilla (también llamado ‘tilde’). ¿Qué ha pasado?

Leer más

python-scapy_1.1.1-3 en Debian (unstable)

2007-09-14 david.villa — [ edit | raw ]
  • new
  • Debian
  • scapy
migrated from node/776

La nueva versión del paquete de scapy ya está en los repositorios de Debian. No es una nueva release, pero corrige un bug bastante tonto aunque importante que impedía utilizar scapy como módulo.

Más info: http://packages.debian.org/sid/python-scapy

Downloading films is stealing

2007-09-13 david.villa — [ edit | raw ]
migrated from node/774
Próximamente en tu pantalla amiga: http://es.youtube.com/watch?v=-8cniOcAbDU

ZeroC Ice: Tareas periódicas en un servidor

2007-09-11 david.villa — [ edit | raw ]
  • recipe
  • Ice
  • Arco
migrated from node/773

Cómo ejecutar una (o varias) funciones periódicas en un servidor Ice.

Leer más

Micro servidor DNS con scapy

2007-09-11 david.villa — [ edit | raw ]
  • recipe
  • scapy
  • networking
migrated from node/772

Cómo crear un sencillo servidor DNS con scapy.

Leer más

Obtener la IP con scapy

2007-09-06 david.villa — [ edit | raw ]
  • recipe
  • scapy
  • networking
migrated from node/770

Un pequeño script para averiguar “la IP del equipo”

Leer más

GNU Emacs: Modo para programación en C#

2007-08-25 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/766

Cómo instalar un modo para editar C# con GNU Emacs.

Leer más

OWS: OSD Workspace Switcher

2007-08-24 david.villa — [ edit | raw ]
  • new
migrated from node/764

Por si alguien quiere probarlo, os comento que he puesto en el repo de GNESIS una utilidad a la que hace mucho que le tenía ganas. Es un applet para GNOME que indica en pantalla el nombre del escritorio actual (workspace en la jerga gnomera).

Leer más

Diez (o más) señales de que no eres tan buen programador como piensas

2007-08-12 david.villa — [ edit | raw ]
  • tale
migrated from node/759

Enlazo un post de Ricardo Galli que me ha parecido muy curioso. Seguro que todos cometemos alguno/s de estos “pecados” y que se nos ocurre alguno más.

Leer más

Gestionando preferencias con GConf y Python

2007-08-10 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/758

Esta receta es un pequeña introducción al uso de GConf desde un programa Python.

Leer más

MetaReceta: Creación de paquetes Debian

2007-08-04 david.villa — [ edit | raw ]
  • recipe
  • Debian-devel
migrated from node/751

Una colección de recetas, tutoriales y enlaces sobre cómo hacer y mantener paquetes Debian. La iré completando con el tiempo. Si encuentras algún otro enlace interesante, por favor, deja un comentario.

Leer más

Citas de Dijkstra

2007-08-04 david.villa — [ edit | raw ]
migrated from node/750

Pues eso, enlazo unas cuantas frases atribuidas a Edsger Dijkstra, un gran científico y una de las mentes más sobresalientes de la Ciencia de la Computación.

Leer más

OSD, escribiendo en el escritorio

2007-08-03 david.villa — [ edit | raw ]
  • recipe
migrated from node/749

Llevo un par de tardes mirando qué alternativas hay en GNOME para pintar texto en pantalla, es decir OSD, y he pensado ponerlo aquí en plan receta por si a alguien le resulta de utilidad y sobre todo para tenerlo a mano cuando me haga falta.

Leer más

Python + LIRC

2007-07-14 david.villa — [ edit | raw ]
  • script
  • Python
  • drivers
migrated from node/740

Se trata de un ejemplo mínimo de cómo hacer un cliente de LIRC en Python usando pyLirc.

Leer más

LIRC con la WinFast TV 2000 en Debian

2007-07-14 david.villa — [ edit | raw ]
  • recipe
  • Debian
  • drivers
migrated from node/738

Cómo configurar y usar el control remoto de la Leadtek Winfast TV 2000 en un sistema Debian GNU/Linux.

Leer más

LaTeX: Chuletario básico

2007-07-09 david.villa — [ edit | raw ]
  • recipe
migrated from node/791

Comandos habituales de LaTeX que nunca recuerdo cuando me hacen falta.

Leer más

SAI "MGE Pulsar Ellipse 600" en Debian con NUT

2007-07-04 david.villa — [ edit | raw ]
  • recipe
  • Arco
migrated from node/733

Esta receta explica cómo instalar y configurar dicho SAI en un sistema Debian GNU/Linux o derivado para sacarle el máximo partido. Te recomiendo que leas al menos la introducción de Configuración y disfrute de un SAI para que tengas una idea de lo que se puede hacer y lo que necesitas, ya que no lo voy a repetir aquí.

Leer más

Patrón Singleton en Python como metaclase

2007-06-27 david.villa — [ edit | raw ]
  • recipe
  • Python
  • patterns
migrated from node/1017

Esta receta incluye la implementación «comentada» del patrón de diseño «Singleton» usando una metaclase Python.

Leer más

Metaclase para invocación automática del "constructor" de la superclase

2007-06-27 david.villa — [ edit | raw ]
migrated from node/1018

Esta receta incluye la implementación “comentada” de una metaclase Python para conseguir que el constructor de la superclase se invoque automáticamente.

Leer más

Ahí va la virgen! Metaclases! (con Python)

2007-06-27 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/600

Esta receta es una pequeña introducción a la meta-programación, concretamente voy a contar algunas cosillas sobre uno de los mecanismos más populares y potentes: las metaclases.

Leer más

GNU Emacs: puesta a punto

2007-06-25 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/728

Configuración básica

Leer más

Dos monitores (dual-head) con xrandr

2007-06-25 david.villa — [ edit | raw ]
  • recipe
migrated from node/726

Esta receta trata algunas prestaciones interesantes que ofrece el driver intel (para tarjetas nuevas) por medio de la utilidad xrandr. Lo realmente interesante es que puedes activar y desactivar la salida externa y cambiar la resolución de ambos monitores sin tener que reiniciar el servidor X.

Leer más

Recuperar un disco duro con dd_rhelp (o intentarlo al menos)

2007-06-19 david.villa — [ edit | raw ]
  • recipe
migrated from node/697

Como ya sabrás, los discos duros no son perfectos, y cuando hacen “crash!” no hay mucho que se pueda hacer. ¿o sí? Esta receta explica cómo recuperar datos de un disco duro durante su agonía, o intentarlo al menos.

Leer más

Ethernet Bridging en GNU/Linux

2007-06-15 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/717

Cómo hacer un bridge o switch software en GNU/Linux

Leer más

Timeout de un método en C++ con Glib

2007-06-13 david.villa — [ edit | raw ]
  • recipe
  • C++
migrated from node/783

Primera aproximación

Leer más

Acelerando SSH

2007-05-18 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/691
Si usas con frecuencia ssh, habrás notado que muchas veces tarda muchísimo en conectar incluso aunque utilices autenticación por clave pública. Estos son algunos ajustes de configuración que pueden hacer que la conexión sea mucho más rápida.

Acelerando el login

DNS

Si la máquina a la que quieres conectar tiene IP fija, puedes utilizar tu fichero de configuración de ssh para indicar la IP y así te ahorras resolver la dirección de la máquina cada vez que conectes. Para eso, escribes en ~/.ssh/config:

Host example.com
     Hostname 208.77.188.166
     User Gil.Puertas

Otra cosa que hace SSH y que puede influir mucho en la duración del «login» es la opción «UseDNS». Según dice el manual:

UseDNS specifies whether sshd should look up the remote host name and check that the resolved host name for the remote IP address maps back to the very same IP address. The default is “yes”.

Y claro, si trata de hacer la resolución inversa de una IP de una conexión ADSL puede tardar bastante (suponiendo que pueda). De modo que una buena forma de ahorrar unos valiosos segundos es poner lo siguiente en el /etc/ssh/ssd_config:

UseDNS no

Recuerda que ésta es una cuestión de seguridad que estás decidiendo no usar. La seguridad tiene un coste, pero no tenerla también, tú decides.

GSSAPI

GSSAPI es un API genérico normalizado para usar mecanismos de seguridad como Kerberos o SASL. Por defecto, al menos en Debian, ssh viene configurado para utilizar autenticación GSSAPI. Si no sabías lo que era, lo más probable es que no lo necesites. Así que lo puedes desactivar comentando la línea correspondiente en /etc/ssh/ssh_config:

#    GSSAPIAuthentication yes

Esto supone una diferencia considerable en el tiempo de acceso. En una prueba ejecutando un simple “ssh example ls” en una máquina de la misma LAN, el tiempo necesario pasa de 15.2 a 0.1 segundos.

ControlMaster

Si sueles abrir varias sesiones (login, repos, sftp, etc) hacia el mismo servidor, SSH permite reutilizar una conexión establecida para sesiones adicionales. Eso supone un ahorro de tiempo considerable ya que no necesita establecer una nueva conexión. Para ello, simplemente escribe esto en un ~/.ssh/config

Host *
   ControlMaster auto
   ControlPath ~/.ssh/master-%r@%h:%p

Acelerando la transferencia

Si utilizas SCP o SFTP para copiar ficheros también hay algunas cosas que puedes hacer para mejorar la velocidad.

Compresión

SSH permite comprimir el flujo de datos, que muchas veces viene desactivado por defecto. Tienes que activarlo tanto en el servidor como en el cliente. Para el servidor edita /etc/ssh/sshd_config y añade una línea tal que:

Compression delayed

Es la opción por defecto si no se especifica. Para el cliente puedes activarlo para todo el mundo editando el /etc/ssh/ssh_config:

Compression yes

O que sólo los usuarios que lo deseen escriban esa línea en su ~/.ssh/config.

Comentarios

Si conoces otras formas de mejorar el rendimiento de SSH, por favor, deja un comentario.

Referencias

  • ssh manuals
  • http://www.linux.com/feature/54498
  • Improving SSH (OpenSSH) connection speed with shared connections

"Conferencia sobre Software Libre"

2007-05-15 david.villa — [ edit | raw ]
  • event
  • proselitism
migrated from node/686

Los responsables de la oficina electoral “nuevos tiempos” nos han invitado a dar una charla sobre software libre. Ellos lo han llamado “conferencia” aunque mi idea es que sea mucho menos formal y mucho más participativo que una “conferencia”, pero vale, intentaremos que lo parezca.

Leer más

Presentación del club.net

2007-05-08 david.villa — [ edit | raw ]
  • opinion
migrated from node/671

El próximo jueves a las 11:30 será el acto de presentación del cub.net de Ciudad Real en la ESI. No os lo perdáis, seguro que ofrece muchas y fascinantes oportunidades para todos.

Leer más

GNU Emacs: Edición «rectangular» (selección vertical)

2007-03-23 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/627

Cómo utilizar los comandos de manipulación de rectángulos de Emacs, que facilitan enormemente ciertas tareas repetitivas.

Leer más

Plataforma anti soporte gratuito a microsoft

2007-03-22 david.villa — [ edit | raw ]
migrated from node/626

Interesante propuesta muy en la línea del post Microsoft somos todos de un tal Cleto que solía escribir por aquí.

Mantener un paquete Debian con svn-buildpackage

2007-03-18 david.villa — [ edit | raw ]
  • recipe
  • Debian-devel
  • VCS
migrated from node/620

Esta receta explica cómo usar la herramienta svn-buildpackage para mantener un paquete Debian existente.

Leer más

Port-knocking: "llama antes de entrar"

2007-03-17 david.villa — [ edit | raw ]
  • recipe
  • networking
  • security
  • Arco
migrated from node/618

Cómo instalar y configurar knockd, un demonio de port-knocking

Leer más

Empaquetar un script Python para Debian (y mantenerlo)

2007-03-15 david.villa — [ edit | raw ]
  • recipe
  • Debian-devel
migrated from node/325

Esta receta explica de forma muy resumida los pasos más importantes para crear y mantener un paquetillo Debian, y cumpliendo la política de Debian.

Leer más

generate_m3u

2007-03-14 david.villa — [ edit | raw ]
  • script
migrated from node/611

Esto es tan chorra que casi me da pena ponerlo, pero bueno, igual a alguien le sirve. Pues eso, se trata de un “script” (una línea de shell) para general un fichero .m3u a partir de los ficheros .mp3 que haya en un directorio, o sea:

Leer más

GNU Emacs: Ortografía «al vuelo» con flyspell

2007-03-13 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/610

Esta receta explica cómo usar las utilidades de comprobación de ortografía «mientras escribe» que trae GNU Emacs en su distribución oficial. Por mucho que insistas, no tienes excusa para escribir mal.

Leer más

ReadyBoost: destroza tu pendrive con Windows Vista

2007-03-12 david.villa — [ edit | raw ]
  • enquiry
migrated from node/608

Microsoft nos sorprende una vez más con su innovadora tecnología. En esta ocasión se trata de ReadyBoost. Al parecer se trata de una “feature” que permite al sistema optimizar el acceso a disco usando dispositivos Flash. Aunque he leído que la idea es utilizar ese espacio del pendrive como memoria virtual me resisto a pensar que en verdad sea así.

Leer más

Imagen para el término "cocina"

2007-03-11 david.villa — [ edit | raw ]
  • art
migrated from node/607

Recientemente hemos instalado en nuestro drupal el módulo “taxonomy_images”, que permite poner una imagen alusiva a cada término de las taxonomías. En principio sólo vamos a asociar imágenes a los “tipos de nodo”, que son:

Leer más

LG L204-WT en Debian

2007-03-06 david.villa — [ edit | raw ]
  • recipe
migrated from node/579

Cómo sacar todo el partido a este monitor en XOrg.

Leer más

NexentaOS: esto es GNU, no Linux

2007-03-01 david.villa — [ edit | raw ]
migrated from node/594

NexentaOS es una distribución del sistema operativo GNU basada en Debian que utiliza el kernel OpenSolaris, es decir, 0% Linux.

Habrá que ver que se les ocurre a “los listos” para llamar “Linux” a esta distro…

Firemacs: el iceweasel intuitivo

2007-03-01 david.villa — [ edit | raw ]
  • emacs
migrated from node/595

¿Estás harto de que las solapas de Iceweasel(Firefox) se cierren cada vez que intentas cortar un trozo de texto pulsando “C-w”? Si te pasa eso es porque eres un honorable usuario de emacs y la extensión Firemacs es la solución a tus problemas.

La que más echaba de menos era el “C-s” y buscar el siguiente con otro “C-s”, qué alivio!

GSTreamer: What's new?

2007-02-28 david.villa — [ edit | raw ]
migrated from node/592
http://etud.epitech.net/~hervey_e/fosdem-gstreamer.odp

Armonizando

2007-02-27 david.villa — [ edit | raw ]
  • opinion
migrated from node/590

¿Recordáis lo que os decía sobre la pena de muerte? Nos vamos acercando…

Lentejas libres

2007-02-26 david.villa — [ edit | raw ]
  • cooking
migrated from node/586

Si quieres las tomas o si no las estudias y distribuyes las modificaciones.

Leer más

Peras en reducción de vino

2007-02-25 david.villa — [ edit | raw ]
  • cooking
migrated from node/582

Un postre para quedar bien.

Leer más

Aprende punteros con Binky

2007-02-16 david.villa — [ edit | raw ]
  • tale
migrated from node/562
Esto debe tener más años que el sol, pero yo lo vi el otro día. Se trata de material docente de la Stanford CS Education Librar sobre los punteros y la gestión de memoria. Destacan, por lo raro, los vídeos de Binky Pointer Fun Video en los que Binky (un muñeco de plastilina) explica cómo funcionan los punteros en distintos lenguajes: C, C++, Ada, Java, etc. Los punteros nunca fueron tan fáciles. Saludos

Cuando el gestor de claves de GNOME se pone pesadito

2007-02-13 david.villa — [ edit | raw ]
migrated from node/556

Leer más

WebDAV con Apache2 en Debian GNU/Linux

2007-01-30 david.villa — [ edit | raw ]
  • recipe
  • Arco
migrated from node/541

Cómo configurar Apache2 para disponer de un directorio WebDAV, accesible para lectura/escritura desde GNOME VFS, konqueror, cadaver o como una “web folder” desde el “sistema operativo más rentable de todos los tiempos”.

Leer más

Magia negra con scapy

2007-01-28 david.villa — [ edit | raw ]
  • recipe
  • security
  • scapy
  • networking
migrated from node/540

Esta receta en realidad es una traducción de un artículo de Rob Klein titulado Packet Wizardry: Ruling the Network with Python usando la magnífica herramienta scapy. Igual es un poco largo para receta, pero bueno, no tiene desperdicio.

Leer más

Software libre, copyleft y canon digital

2007-01-26 david.villa — [ edit | raw ]
  • new
migrated from node/536

A través del blog de David Bravo he sabido de un artítulo de El País, que describe de un modo bastante acertado cómo es el mundo en la ‘era de Internet’ (al menos eso me parece a mi).

Leer más

Migración de repositorios subversion

2007-01-26 david.villa — [ edit | raw ]
  • recipe
  • VCS
migrated from node/535

Esta receta explica cuales son las herramientas básicas de administración útiles para migración de repositorios

Leer más

GNU Emacs: Elegir el encoding

2007-01-22 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/529

Cómo configurar el encoding de un fichero en emacs.

Leer más

OpenOffice.org scripting

2007-01-21 david.villa — [ edit | raw ]
  • recipe
migrated from node/491

Pequeña introducción a la programación de scripts para OpenOffice.org. La receta incluye una macro para convertir a PDF desde línea de comandos.

Leer más

Mantener ficheros de configuración con Subversion

2007-01-21 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • VCS
migrated from node/516

Se trata de usar subversion para controlar los cambios en un directorio, normalmente ficheros de configuración, para que si metes la pata, puedes saber qué demonios has cambiado.

Leer más

Impresora HP LaserJet 1000 USB

2007-01-21 david.villa — [ edit | raw ]
  • recipe
migrated from node/518

Cómo configurar la impresora HP LaserJet 1000 USB en GNU/Linux

Leer más

Subversion server side scripting (hooks)

2007-01-15 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • VCS
migrated from node/503

Cómo usar el servidor subversion para ejecutar automáticamente programas personalizados. Como ejemplo, la receta explica cómo actualizar una página web mantenida en un repositorio.

Leer más

Apache2 como frontal "seguro" para Zope/Plone

2007-01-12 david.villa — [ edit | raw ]
  • recipe
  • Arco
migrated from node/494

Cómo configurar Apache para mejorar la seguridad de un sitio Zope, utilizando mod_proxy y VirtualHostMonster.

Leer más

Servidor TFTP con inetd en Debian

2007-01-09 david.villa — [ edit | raw ]
  • recipe
migrated from node/492

Cómo instalar y configurar servidor y cliente en Debian GNU/Linux y derivados

Leer más

Poner etiquetas a los discos en GNU/Linux

2007-01-04 david.villa — [ edit | raw ]
  • script
migrated from node/482

Un pequeño programa para ver y cambiar la etiqueta de volumen de tus discos y pen drives

Leer más

Compartir una impresora CUPS automágicamente

2007-01-02 david.villa — [ edit | raw ]
  • recipe
migrated from node/481

Cómo configurar CUPS para que sirva una impresora a toda una red sin que los clientes la conozcan de antemano.

Leer más

HP Deskjet 720 en Debian GNU/Linux

2006-12-25 david.villa — [ edit | raw ]
  • recipe
migrated from node/477

Ingredientes

  • cupsys
  • foomatic-filters-ppds
  • pnm2ppa

cups

localhost:631

Modelo: HP Deskjet 720C Foomatic/pnm2ppa

Fichero /etc/pnm2ppa.conf

version  720
# /etc/init.d/cups restart

Módem Comtrend CT-350 con el driver ueagle-atm (remake)

2006-12-24 david.villa — [ edit | raw ]
  • recipe
migrated from node/476

Esta receta es un “remake” de la que hizo Nacho (con su permiso) sobre el mismo tema. Sólo tiene algunos añadidos y alguna pequeña corrección.

Ingredientes

  • Módem ADSL Contrend CT-350 USB de Telefónica “el azulito”.
  • Debian GNU/Linux
  • Linux >= 2.6.10
  • subversion
  • unp
  • br2684ctl
  • ppp
  • pppoe

Módulos

Descarga los fuentes con subversion:

 $ svn co svn://svn.gna.org/svn/ueagleatm/trunk/ueagle-atm
A    ueagle-atm/usbatm.h
A    ueagle-atm/ueagle-atm.c
A    ueagle-atm/COPYING
A    ueagle-atm/usbatm.c
A    ueagle-atm/Makefile
Revisión obtenida: 323

Compila los drivers:

~# cd ueagle-atm
~/ueagle-atm# make install

Firmware

Descárgalo y colócalo en su sitio con:

# cd /lib/firmware
/lib/firmware# wget http://eagle-usb.org/ueagle-atm/non-free/ueagle-data-1.1.tar.gz
/lib/firmware# unp ueagle-data-1.1.tar.gz
/lib/firmware# mv ueagle-data-1.1 ueagle-atm

Esta es la última versión estable en el momento de la receta. Echa un vistazo en http://eagle-usb.org/ueagle-atm/non-free/ por si hay alguna versión posterior.

Cargando los módulos/firmware

Ahora, si enchufas el módem, deberían cargarse los módulos usbatm y ueagle-atm automáticamente. Puedes comprobarlo con:

$ lsmod | grep usbatm
$ lsmod | grep ueagle

Si no están cargados, cárgalos tú con:

# depmod -ae
# modprobe usbatm
# modprobe ueagle-atm

Puedes echar un vistazo a /var/log/syslog para comprobar que todo ha ido bien. Debe aparecer algo como:

[ueagle-atm] driver ueagle 1.3 loaded
usb 2-2: [ueagle-atm] ADSL device founded vid (0X1110) pid (0X9021) : Eagle II
usb 2-2: reset full speed USB device using uhci_hcd and address 3
usb 2-2: [ueagle-atm] using iso mode
usb 2-2: [ueagle-atm] (re)booting started
usbcore: registered new driver ueagle-atm
usb 2-2: [ueagle-atm] modem operational
usb 2-2: [ueagle-atm] ATU-R firmware version : 44e2ea17

Bridge RFC-2684

El programa br2684 es un puente para transportar diferentes protocolos sobre una conexión ATM, que es lo que suelen hacer los proveedores de ADSL. Para arrancarlo, ejetucta:

# br2684ctl -c 0 -b -a 8.32
br2684ctl[2508]: Interface "nas0" created sucessfully
br2684ctl[2508]: Communicating over ATM 0.8.32, encapsulation: LLC
br2684ctl[2508]: Interface configured

El 8.32 son el VPI y el VCI de tu ISP. Estos corresponden a Telefónica con IP dinámica. Si tienes otra cosa, tendrás que usar los adecuados.

Usuario/contraseña

Tienes que añadir el nombre de usuario y contraseña al final del fichero /etc/ppp/pap-secrets. Si tienes la ADSL de Telefónica, la línea es:

 adslppp@telefonicanetpa * adslppp 

Proveedor

También para Telefónica ADSL, escribe un fichero /etc/ppp/peers/adsl:

user "adslppp@telefonicanetpa"
mtu 1412     # IMPORTANTE: imprescindible si vas a compartir la conexión, en caso contrario puedes quitarlo
plugin rp-pppoe.so
nas0
noipdefault
usepeerdns
defaultroute
persist
noauth

Para levantar la interfaz

Y si todo ha ido bien, al ejecutar lo siguiente deberías tener una conexión perfectamente funcional:

# ifconfig nas0 up
# pon adsl

Y para desactivar la conexión

# poff
# killall br2684ctl

Automatizar la conexión:

Añade la siguiente sección al fichero /etc/network/interfaces:

auto ppp0
iface ppp0 inet ppp
      pre-up br2684ctl -c 0 -b -a 8.32
      pre-up ifconfig nas0 up
      provider adsl

Referencias

  • man br2684ctl

Samsung SyncMaster 203b con GNU/Linux

2006-12-16 david.villa — [ edit | raw ]
  • recipe
migrated from node/472

Cómo configurar este monitor con xorg7 y sacarle todo el jugo.

Leer más

Restart your system!

2006-12-16 david.villa — [ edit | raw ]
  • opinion
migrated from node/473

Seguro que más de una vez, y de 20, se os ha colgado el firefox (a.k.a iceweasel), lo matas (o se muere solo) y a veces al volverlo a ejecutar sale un mensajito como este:

Leer más

Enviar correo no-ASCII desde un programa Python

2006-12-14 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • Python
migrated from node/471

Cómo enviar correo con cuerpo o cabeceras no-ASCII desde un programa Python

Leer más

Lo nuevo de emacs22

2006-12-11 david.villa — [ edit | raw ]
  • new
migrated from node/469

Un enlace interesante que cuenta algunas de las nuevas features de emacs 22 aunque creo que hay muuuchas más.

GLib IO Channels con Python

2006-12-05 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/465

Cómo utilizar los IO-Channels de GLib desde Python para implementar el patrón reactor.

Leer más

Convertir subtítulos de DVD a formato VobSub

2006-11-25 david.villa — [ edit | raw ]
  • recipe
  • ripping
migrated from node/459

Esta receta explica cómo convertir subtítulos de un DVD a formato VobSub con herramientas libres.

Leer más

Ser "linuxero" está de moda

2006-11-23 david.villa — [ edit | raw ]
  • opinion
migrated from node/458

Cuesta mucho hacer entender a un neófito “de Linux” cuáles son los motivos por los que vale la pena sufrir el software libre. Lo habitual hace un par de años era que sólo los que estaban dispuestos a currárselo se acercaran a este mundillo. Pero todo eso ha cambiado, gracias a (o por culpa de) cosas como Ubuntu o Beryl, una nueva horda ávida de nuevas experiencias (o cansada de las experiencias de su Windows) se lanza de cabeza a probar la última y supermolona live de Ubuntu. ¡La informática chachi (y gratis) ha llegado! pero no borres todavía el XP, que el “Dead or Alive” no tira en Ubuntu.

Leer más

Unicode/UTF-8 con Python

2006-11-19 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/454

Cómo usar y aprovechar el soporte de Unicode que Python trae de serie. Si no tienes muy claro de que va esto del Unicode, te recomiendo leer primero la receta Unicode y UTF-8.

Leer más

Introducción a Unicode y UTF-8

2006-11-18 david.villa — [ edit | raw ]
  • recipe
migrated from node/453

Pequeña introducción sobre Unicode y la codificación UTF-8.

Leer más

Ensalada de queso de cabra con anchoas

2006-11-17 david.villa — [ edit | raw ]
  • cooking
migrated from node/450

Ensalada rápida y sabrosa a la vez que sana, y con ingredientes de la Tierra.

Leer más

Averiguar la IP de un 'chisme', que la consigue por DHCP

2006-11-08 david.villa — [ edit | raw ]
  • recipe
  • Arco
  • scapy
  • networking
migrated from node/435

Cómo averiguar la IP asignada a un dispositivo empotrado, conocida su MAC.

Leer más

Instalar Debian GNU/Linux en un Compaq tc 1100

2006-11-04 david.villa — [ edit | raw ]
  • recipe
migrated from node/432

Interfaces de red

Leer más

Sacando jugo a EXIF, en consola (y en nautilus)

2006-11-01 david.villa — [ edit | raw ]
  • recipe
migrated from node/429

Esta receta recoge algunas herramientas que pueden resultar interesantes para trabajar con las cabeceras EXIF de los JPEG. Si lo que buscas es modificar la imagen propiamente dicha, mira la receta titulada Edición de imágenes en consola, con ImageMagick.

Leer más

Compilación de paquetes Debian con svn-buildpackage

2006-08-31 david.villa — [ edit | raw ]
  • recipe
  • Debian-devel
  • VCS
migrated from node/389

svn-buildpackage es una herramienta para construir y mantener paquetes Debian utilizando un repositorio subversion.

Leer más

La enésima receta de iptables

2006-08-30 david.villa — [ edit | raw ]
  • recipe
migrated from node/339

Esta receta explica los usos más habituales de iptables. No trata de ser un manual de uso, sólo son unos cuantos comandos que solucionan problemas frecuentes.

Leer más

Imprímelo todo con GNU a2ps

2006-08-27 david.villa — [ edit | raw ]
  • recipe
migrated from node/386

Esta receta recoge algunas posibilidades interesantes del programa a2ps. Por cierto, el título es sólo un juego de palabras, no abuses de la impresora que quedan pocos árboles y la tinta está muy cara ;-)

Leer más

Motorola V3 y Debian GNU/Linux

2006-08-25 david.villa — [ edit | raw ]
  • recipe
migrated from node/384

Programas disponibles en Debian para acceder al Motorola V3

Leer más

Arreglar subtítulos SRT desincronizados

2006-08-15 david.villa — [ edit | raw ]
  • recipe
  • ripping
migrated from node/375

Esta receta explica cómo ajustar un archivo de subtítulos que van “descompasados” con la película a la que acompañan.

Leer más

Concurso Universitario de Software Libre

2006-08-11 david.villa — [ edit | raw ]
  • new
migrated from node/372
concurso

Cita extraida de la página web del concurso de SL

El principal objetivo de este concurso es estimular a los estudiantes universitarios para que se involucren en la participación y creación de proyectos SL. De esta forma se crearán las condiciones idóneas para generar un tejido tecnológico de futuros profesionales que serán capaces de dar soporte de soluciones basadas en SL a empresas y a la administración.

El primer premio son 1000€ ¿Alguien se anima?

El diccionario de la RAE siempre a mano

2006-08-10 david.villa — [ edit | raw ]
  • recipe
migrated from node/371

En esta mini recetilla explico un par de “features” para tener el diccionario de la RAE siempre a mano.

Leer más

La ESI de Ciudad Real distribuirá GNESIS a sus alumnos

2006-08-05 david.villa — [ edit | raw ]
  • new
  • GNESIS
migrated from node/369

Según parece, el próximo curso se entregará una copia de GNESIS 2.0, en su versión DVD Live, a todos los alumnos en el momento de formalizar su matrícula. El DVD incluye el software necesario para las prácticas de muchas de las asignaturas, además de la Guía Docente del centro. Hablamos de qué es GNESIS no hace tanto.

GNU Emacs como editor XML (o DocBook), con psgml

2006-08-04 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/368

GNU Emacs puede ser un excelente editor (como no?) también para SGML, XML, o derivados tan populares com XHTML o DocBook. Esta receta concretamente introduce el uso del paquete psgml, aunque hay otros.

Leer más

Publicar los "homes" con Apache2

2006-08-01 david.villa — [ edit | raw ]
  • recipe
migrated from node/366

Cómo configurar Apache para que todos los usuarios de la máquina sobre la que se ejecuta puedan tener su propio espacio web.

Leer más

La SDAE desarrolló el mp3 cuando los modem iban a 9.600 voltios!

2006-07-28 david.villa — [ edit | raw ]
  • tale
migrated from node/362

La etiqueta de este nodo es “historia” aunque creo que le iría mejor otra como “scifi”. Nada que comentar del tema, podéis verlo y oirlo vosotros mismos… espeluznante…

Blog de David Bravo: José Neri, de SDAE, en el CCCB de Barcelona

¿Quién dice que no hay arte en la programación?

2006-07-25 david.villa — [ edit | raw ]
migrated from node/356

Romantic love poem in Python

Guía del aspirante a mal programador

2006-07-21 david.villa — [ edit | raw ]
migrated from node/354

Me ha llamado la atención esta guía de malas prácticas. Es curioso hasta qué punto muchos de nosotros seguimos o hemos seguido alguna vez estos consejos… ¿tú no? ¿seguro?

Saludos

Primeros pasos con MySQL

2006-07-19 david.villa — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/350

Esta receta explica cómo poner en marcha un servidor MySQL recién instalado.

Leer más

Usando gphoto2 desde consola

2006-07-02 david.villa — [ edit | raw ]
  • recipe
migrated from node/341

Esta receta recoge algunas features interesantes del frontend de consola de gphoto2

Introducción

gphoto2 es una librería que soporta un montón de modelos de cámaras fotográficas digitales. Además dispone de un pequeño frontend que permite usar la mayor parte de sus posibilidades desde consola, algo que puede resultar muy útil para automatizar tareas.

Ingredientes

  • gphoto2
  • una cámara digital soportada por gphoto2

Copiar todas las fotos con su fecha y hora

Situados en un directorio creado al efecto simplemente ejecuta:

 $ gphoto2 -P ==--filename "%Y-%m-%d_%H:%M_%n.%C"==

Y gphoto2 descargará y renombrará todas las fotos y vídeos que tengas en la cámara, sin borrarlos de ésta. Dependiendo del modelo de tu cámara quizá tengas que indicar algún parámetro adicional como el puerto o similar; mira la documentación.

Si no te gusta tener tooodas las fotos en el mismo directorio, puedes utilizar este pequeño script Python para clasificar los ficheros en directorios por fecha.

Echa un ojo a la receta de Sacando jugo a EXIF, en consola que tiene algunos trucos útiles para clasificar y organizar fotos.

Referencias

  • gPhoto

Compartir ficheros con Samba/CIFS

2006-06-25 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/338

Esta receta explica cómo utilizar SAMBA para servir ficheros y cómo acceder a ellos desde otro ordenador. Supondremos que en ambos equipos tienes Debian o sucedáneos.

Leer más

Afina tus discos con hdparm

2006-06-17 david.villa — [ edit | raw ]
  • recipe
migrated from node/334

hdparm es una pequeña herramienta que sirve para manipular la configuración de las unidades de disco. El objetivo es optimizar el tiempo de acceso o la velocidad de transferencia.

Leer más

Windows Vista, ideal si tu portátil va sobrado de batería

2006-06-04 david.villa — [ edit | raw ]
  • new
migrated from node/323

No creo que sea un problema para muchos de los que andamos por aquí, que dudo que vayamos a poner “el Vista” es nuestro portátil, pero me ha parecido curioso un artículo titulado Vista beta sucks up battery juice por el “precio” que tendrán que pagar muchos por tener un escritorio super-pijo. Cada día más motivos para pasarse a Windows…

Leer más

Ver DVDs en Ubuntu o Debian GNU/Linux

2006-06-02 david.villa — [ edit | raw ]
  • recipe
migrated from node/322

Esta receta explica qué hacer para poder reproducir DVD en nuestro sistema operativo favorito. Puede resultar trivial para un iniciado pero como ya me lo han preguntado alguna que otra vez lo dejo aquí para la posteridad :-)

Leer más

"El reto de la semana", 3ª edición

2006-05-29 david.villa — [ edit | raw ]
  • challenge
migrated from node/314

Éste es fácil. Se premiara la claridad y elegancia del código. Pero que quede claro que la programación no es arte :-)

Hacer un programa que cuente las funciones (no prototipos) que hay en un fichero C. Debe imprimir el resultado por salida estándar. Puedes utilizar cualquier lenguaje. No se veta el uso de NINGUNA característica de ningún lenguaje.

Leer más

Mini tutorial de GNU Make

2006-05-28 david.villa — [ edit | raw ]
  • recipe
migrated from node/312
Mini tutorial de GNU Make

Mini tutorial de GNU GDB

2006-05-28 david.villa — [ edit | raw ]
  • recipe
migrated from node/313
Mini tutorial de GNU gdb

Hacer un «latiguillo» Ethernet - cable cruzado - cross over

2006-05-28 david.villa — [ edit | raw ]
  • recipe
migrated from node/308

Esta receta indica cuál es la configuración de los hilos de un cable UTP para construir una cable directo o cruzado, tal como mandan los estándares.

Leer más

Creación de plugins en GNU/Linux

2006-05-28 david.villa — [ edit | raw ]
  • recipe
migrated from node/311
Creación de plugins en GNU/Linux

Creación de librerías en GNU/Linux

2006-05-28 david.villa — [ edit | raw ]
  • recipe
migrated from node/310
Enlace externo: Creación de librerías

Canon IXUS 55 con gphoto2 en Debian GNU/Linux

2006-05-20 david.villa — [ edit | raw ]
  • recipe
migrated from node/305

Esta receta explica qué hacer para poder utilizar dicha cámara con gphoto2. La cuestión es que esta cámara no es reclamada por ningún driver, a pesar de que está soportada por libgphoto2. De modo que el motivo real de esta receta es explicar lo qué puedes hacer en estos casos, sea con ésta o con cualquier otra cámara en las mismas circunstancias.

Leer más

Petición de talleres y actividades para la Party Quijote 2006

2006-05-16 david.villa — [ edit | raw ]
  • opinion
migrated from node/298

Como supongo que sabéis, la ESI de Ciudad Real está preparando la Party Quijote de este año.

Leer más

Mini referencia de SQL con MySQL

2006-05-16 david.villa — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/299

Esto es sólo una pequeña referencia rápida de operaciones habituales con MySQL. Siéntete libre de añadir otras como comentarios si te apetece.

Leer más

LinuxAlbacete organiza las "II Jornadas de Software Libre"

2006-04-19 david.villa — [ edit | raw ]
  • new
migrated from node/286

Como el año pasado, la asociación “linux Albacete” organiza las Jornadas de Software Libre. Tendrán lugar los días 20, 21 y 22 de abril en la Escuela Politécnica de Albacete.

Leer más

El sistema operativo "Núcleo 2.6.12"?

2006-04-10 david.villa — [ edit | raw ]
  • tale
migrated from node/282

Esto pasa por no llamar a las cosas por su nombre:

Mirad las características del ordenador a 400€ de Carrefour

GNU Emacs: Todos los comandos que necesitas y nunca recuerdas

2006-04-09 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/279

No te voy a engañar, emacs es complejo pero ¿qué hay que merezca la pena y no lo sea?. Si algo tiene emacs son opciones y comandos, cienes y cienes de ellos. Y claro, cuando necesitas hacer algo, no te acuerdas de cuál era el maldito comando y tienes que ponerte a mirar la documentación, aunque en realidad siempre acabas buscando las mismas cosas. O quizá sólo me pasa a mi. Pues en esta receta voy a poner los comandos que suelo necesitar y que siempre se me olvidan, que son casi todos.

Leer más

GNU Emacs: The kill ring

2006-04-09 david.villa — [ edit | raw ]
  • recipe
  • emacs
migrated from node/1383

Aunque parece el título de una película de miedo, el «kill ring» es la peculiar manera que tiene emacs de entender el ‘portapapeles’. En lugar de tener un único espacio de almacenamiento donde cortar y pegar, emacs tiene una pila; la verdad es que de entrada sí que acojona un poco… :-P

Leer más

Recuperar la clave de administrador de Drupal

2006-04-06 david.villa — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/278

O lo que es lo mismo, cómo editar el valor de un registro en MySQL

Leer más

ATI Radeon 9600 en Debian GNU/Linux, con el driver privativo fglrx

2006-03-31 david.villa — [ edit | raw ]
  • recipe
migrated from node/272

Esta receta explica cómo instalar el driver fglrx en una Debian etch o sid

Leer más

Pena de muerte para los delitos contra la Propiedad Intelectual

2006-03-28 david.villa — [ edit | raw ]
  • opinion
migrated from node/269

No, no, tranquilo, el título de la noticia es ficticio, por el momento al menos. Sin embargo, cada día tengo más razones para pensar que no pasará mucho tiempo hasta que se haga realidad y lo veamos en un periódico de tirada nacional y/o televisión.

Leer más

Convertir subtítulos de DVD a formato .srt

2006-03-11 david.villa — [ edit | raw ]
  • recipe
  • ripping
migrated from node/257

Esta receta explica cómo extraer los subtítulos de un DVD y convertirlos en formato SRT.

Leer más

Manipulación de DVD Video

2006-03-05 david.villa — [ edit | raw ]
  • recipe
  • ripping
migrated from node/248

Esta receta pretende ser una chuleta de pequeños trucos y utilidades para manipular DVD Video, usando los programas libres habituales en un sistema GNU

Leer más

Por lo menos hay alguno...

2006-03-03 david.villa — [ edit | raw ]
  • opinion
migrated from node/245

…que sabe cómo está el tema.

Copiopego de la entrevista en barrapunto a Ricardo Galli. Me ha parecido curioso que alguien le preguntara esto:

9) Profesores universitarios
por HaCHa

¿Qué opinas de la situación y las condiciones laborales bajo las que ejercen su profesión los profesores asociados de las universidades públicas este país?

Ricardo:

Están fatalmente pagados, salarios de miseria, casi vergonzosos. Al igual que los ayudantes y un poco en menor medida los colaboradores.

Leer más

La que nos espera...

2006-03-02 david.villa — [ edit | raw ]
  • opinion
migrated from node/243

No sé si estáis informados sobre los detalles de la nueva Ley de Propiedad Intelectual= que, como era de esperar y conociendo como conocemos a los “entusiastas” del copyright, es aún más restrictiva que la anterior. La ley aún no es definitiva, pero es poco probable que el texto sufra modificaciones importantes. No parece que haya habido mucho debate, todos los partidos han estado bastante de acuerdo desde el principio; sólo se han negociado pequeños detalles. Unanimidad a la hora de hacer una ley que antepone el beneficio económico de una minoría al beneficio cultural de la gran mayoría.

Leer más

Manipulación de ficheros AVI

2006-02-25 david.villa — [ edit | raw ]
  • recipe
  • ripping
migrated from node/236

Esta receta es (o será) un compendio de pequeños trucos y utilidades para manipular ficheros AVI usando los programas libres habituales en un sistema GNU.

Leer más

La ESI organizará la Party Quijote 2006

2006-02-24 david.villa — [ edit | raw ]
  • new
migrated from node/233

La primera edición de la Party Quijote se celebró el año pasado en Albacete y fue organizada por la EPSA. Asistieron más de 400 personas que participaron durante 3 días en numerosos talleres, concursos, juegos y actividades de toda índole informática, incluyendo promoción y uso de software libre.

Leer más

Gnesis 2.0 RC1 disponible para descarga

2006-02-24 david.villa — [ edit | raw ]
  • new
  • GNESIS
migrated from node/235

Leer más

Van a cambiar los escritorios 3D la manera de usar el ordenador?

2006-02-21 david.villa — [ edit | raw ]
  • opinion
migrated from node/231

[modo flame=ON]

Leer más

Usar un repositorio CVS

2006-02-15 david.villa — [ edit | raw ]
  • recipe
  • VCS
migrated from node/226

CVS es un sistema de control de versiones concurrente. Era hasta hace poco el más utilizado en proyectos de software libre, está siendo rapidamente reemplazado por subversion por sus evitentes ventajas prácticas. En esta receta se explica cómo realizar las operaciones básicas con un repositorio CVS.

Leer más

Save (and restore) a MySQL data base

2006-02-05 david.villa — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/1097

This recipe explain how to make a backup of a complete database in a easy way. Then, the backup file can be restored when a disaster occurs.

Leer más

Salvar (y recuperar) una base de datos MySQL

2006-02-05 david.villa — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/219

Esta receta explica una forma sencilla de hacer una copia de seguridad de una base de datos MySQL completa para poderla restaurar en caso de catástrofe o mudanza.

Leer más

Firefox y flash

2006-02-05 david.villa — [ edit | raw ]
  • recipe
migrated from node/220

Solución a dos problemas habituales con Firefox y el plugin de Macromedia Flash

Leer más

Visita virtual al Hospital General de Ciudad Real

2006-01-27 david.villa — [ edit | raw ]
  • new
migrated from node/204

Supongo que todos lo habéis visto en Barrapunto, pero lo pongo de todos modos para que quede constancia. Está bien que se vea que en Castilla La-Mancha hay gente que de verdad usa y contribuye al software libre, y no sólo dice que lo usa. Mi enhorabuena desde aquí para Carlos González Morcillo, profesional donde los haya, y también para su equipo. Si todos los profesores hicisemos nuestro trabajo la mitad de bien que Carlos, seríamos la mejor universidad de España, como poco.

Leer más

Crear un sitio web SSL con Apache2

2006-01-19 david.villa — [ edit | raw ]
  • recipe
migrated from node/198

Cómo activar el soporte SSL de apache-2 para utilizar HTTPS y navegación segura. Los pasos que se describen son para una Debian o sucedaneos, pero supongo que no será muy distinto a otra distro.

Leer más

Módem Comtrend CT-351 con ADSL de Telefónica en Debian GNU/Linux

2006-01-15 david.villa — [ edit | raw ]
  • recipe
migrated from node/189

No es que sea nada complicado, pero tampoco está de más por si se te olvida algún detalle.

Leer más

Compartir la conexión mediante un módem ADSL Comtrend CT-351

2006-01-15 david.villa — [ edit | raw ]
  • recipe
migrated from node/188

Esta receta trata únicamente de las peculiaridades de este módem a la hora de compartir la conexión. Quizá te interese nuestra receta sobre Compartir la conexión s Internet con GNU/Linux para cuestiones más generales.

Leer más

Usar un repositorio subversion

2006-01-11 david.villa — [ edit | raw ]
  • recipe
  • VCS
migrated from node/181

Subversion es un sistema de control de versiones concurrente. Su objetivo es muy similar al de CVS aunque tiene grandes ventajas sobre éste, y por eso, cada día muchos proyectos de desarrollo de software cambian a subversion.

Leer más

Magnatuneasy vuelve a la vida

2006-01-10 david.villa — [ edit | raw ]
  • tale
migrated from node/176

Hola:

Leer más

Autenticación de paquetes para repositorios Debian

2006-01-09 david.villa — [ edit | raw ]
  • recipe
migrated from node/169

Cómo configurar adecuadamente la autenticación de repositorios en Debian, Ubuntu y derivados.

Leer más

Debian en cualquier parte con un CD y un disco USB?

2006-01-05 david.villa — [ edit | raw ]
  • tale
migrated from node/170

Algunas de las miles de distribuciones live que ruedan por ahí tienen una característica muy interesante; consiste en montar tu home desde un disco USB. De ese modo vayas donde vayas puedes tener un sistema decente. Pero a esto le veo varios problemas.

Leer más

Servir un repositorio subversion con Apache-2.0

2005-12-24 david.villa — [ edit | raw ]
  • recipe
  • VCS
migrated from node/162

Cómo montar un repositorio subversion, con Apache, para que sea accesible remotamente

Leer más

Averigua tu IP externa (pública)

2005-12-24 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/83

<?php
$ip = $SERVER[’REMOTEADDR’];
echo “Tu dirección IP externa: $ip”;
?>

Esta receta explica formas de conocer la IP pública con la que te estás concectando a Internet

Si utilizas un router o algo del estilo que incorpore un servidor DHCP, la dirección asignada a tu ordenador con toda seguridad será una dirección IP privada Pero a veces, es necesario conocer cuál es la IP pública con la que sales a Internet, con el fin de configurar un cliente DNS dinámico u otro tipo de aplicación específica.

Para conocerla puedes usar alguno de estos métodos:

  • checkip.dyndns.org
  • www.whatismyip.com
  • www.showmyip.com
  • www.ipchicken.com

Shell

lynx -dump http://checkip.dyndns.org/ | grep IP | awk {'print $4'}
$ curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+'

Shell (avisa por mail)

#!/bin/bash
# Requiere los paquetes "mailx" y "lynx"
# Te envía un email cada vez que te cambia la IP pública. Ejecutar en background

while true
do
    old_ip="`cat ~/public.ip 2> /dev/null`"
    new_ip="`lynx -source http://www.whatismyip.com/ | grep '&lt;TITLE>' | awk '{print $4}'`"

    if [ "$old_ip" != "$new_ip" ]; then
        echo $new_ip | mail tu@email.com -s "Tu IP ha cambiado"
        echo $new_ip > ~/public.ip
    fi
    sleep 60
done

PHP

<?php
echo "Tu dirección IP externa es: ", $_SERVER['REMOTE_ADDR'];
?>

¿Propietarios de ideas? Nos toman el pelo

2005-12-21 david.villa — [ edit | raw ]
migrated from node/161

Acabo de ver en la tele la nueva campaña de “concienciación” y en contra de la piratería. El anuncio apela a los sentimientos del cuidadano instándole a preservar nuestra cultura “no pirateando”. Pero la cultura no se protege encerrándola bajo llave. La cultura se preserva sacándola a la luz y haciéndola llegar al mayor número posible de personas, compartiéndola. Las lenguas muertas lo están porque nadie las usa (sus respectivos propietarios deben estar muy contentos :-) )

Leer más

Ha salido Molinux 2.0

2005-12-16 david.villa — [ edit | raw ]
  • new
  • Molinux
migrated from node/157

Yo aún no la he probado, pero la 1.2 estaba muy bien y si ésta está basada en Breezy merece la pena echarle un vistazo. Se puede descargar directamente. Más información en la página de Molinux

Generar libros para devhelp

2005-12-08 david.villa — [ edit | raw ]
  • recipe
migrated from node/135

devhelp es un brower de documentación técnica. Hay disponibles libros para instalar en devhelp. Un libro es la documentación empaquetada de algún programa o herramienta concreta. Esta receta explica como hacer tus propios libros.

Leer más

Mantener limpia tu Debian

2005-12-06 david.villa — [ edit | raw ]
  • recipe
migrated from node/144

En esta recetilla se explica el uso de alguos programamas de Debian (o distros derivadas) que pueden ayudar a mantener el sistema limpio y no tener más basura de la deseada

Leer más

Arroz con pollo al curry

2005-12-06 david.villa — [ edit | raw ]
  • cooking
migrated from node/140

Un plato sencillo a la vez que sabroso y resultón

Leer más

Proponiendo actividades

2005-12-01 david.villa — [ edit | raw ]
migrated from node/134

Recogiendo las sugerencias que muchos habéis hecho después de la party, creo que una buena opción es hacer algo parecido a lo que apuntaba Tobías. Me explico:

Se trata de reunirnos en un aula o laboratorio (dependiendo de la disponibilidad). Alguien cuenta a los demás el uso de alguna herramienta o cualquier otra cosa curiosa, o que consiedere útil o divertida. Es una especie de receta en vivo, aunque también debería pasar a ser una receta escrita para que quede constancia.

Leer más

Ver ficheros fuente coloreados en consola

2005-11-27 david.villa — [ edit | raw ]
  • recipe
migrated from node/123
Como usar GNU less para ver ficheros fuente con resalte de sintaxis en consola
Aprovechando lesspipe es sencillo conseguir que less se comporte de modo distinto dependiendo del tipo de fichero que se abre y de ese modo integrarlo con highlight o GNU source-highlight para conseguir resaltado sintáctico en consola.

1. lesspipe

lesspipe es un programa que permite modificar el comportamiento de less de un modo muy sencillo. Primero debes escribir un fichero $HOME/.lessfilter. Este fichero normalmente es un script bash que debe tener permisos de ejecución. En los próximos apartados se incluyen ejemplos de lessfilter para highlight y souce-highlight que se utilizan para colorear código, aunque en realidad se puede usar less para todo tipo de ficheros, como listado de archivos comprimidos, imágenes, ps, html, etc. Para que funcione es necesario además incluir lo siguiente en tu fichero $HOME/.bashrc:
eval $(lesspipe)
export LESS=-r

2. hightlight

Es una utilidad que permite colorear ficheros fuente de varios lenguajes y generar varios formatos de salida, como HTML, LaTeX o secuencias de escape ANSI. La posibilidad de generar salida para la consola (opción -A) se incorporó en la versión 2.1, así que asegúrate que tienes una versión igual o superior.

Fichero .lessfilter

  #!/bin/sh

  set -e
  file "$1" | grep text > /dev/null
  highlight -A "$1"
  exit 0
Si usas highlight 2.2-4 o posterior el script es aún más sencillo:
  #!/bin/sh

  set -e
  highlight -A "$1"
  exit 0

3. source-highlight

Es un programa muy similar a highlight pero más limitado. Necesitas la versión 1.8 como mínimo

3.1. Fichero .lessfilter

#!/bin/sh

case "$1" in
*.c)
source-highlight -s cpp -f esc "$1" -o STDOUT
;;
*.cc)
source-highlight -s cpp -f esc "$1" -o STDOUT
;;
*.py)
source-highlight -s python -f esc "$1" -o STDOUT
;;
*)
# We don't handle this format.
exit 1
esac

exit 0
Puedes utilizar este fichero .lessfilter para source-highlight.

Referencias

  • less
  • lesspipe
  • hightlight
  • GNU source-highlight

Instalar el driver privativo de nVidia en Debian GNU/Linux

2005-11-27 david.villa — [ edit | raw ]
  • recipe
migrated from node/121

Cómo utilizar module-assistant para instalar el driver propietario para las tarjetas gráficas de nvidia en Debian GNU/Linux, Ubuntu y demás distros derivadas.

Hay varias alternativas para instalar este driver. Esta receta explica la forma más sencilla, que es también la más “Debian compliant”. Consulta las referencias si quieres probar las otras alternativas.

Actualiza tu Linux

Instalar el driver de nvidia es una buena oportunidad para aprovechar y actualizar el núcleo. Se supone que vas a utilizar un Linux precompilado y empaquetado por Debian. Por ejemplo:

# apt-get install linux-image-2.6.22-1-386

También vas a necesitar las cabeceras, que es un paquete con el mismo nombre, cambiando image por headers.

# apt-get install linux-headers-2.6.22-1-386

Si usas grub, no olvides hacer el update-grub correspondiente. Y ahora reinicia para usar el núcleo recién instalado.

Ahora… lo divertido

Esto es tan fácil que casi no tiene gracia. Primero instala module-assistant y nvidia-kernel-common:

# apt-get install module-assistant nvidia-kernel-common

Y a continuación ejecuta:

# module-assistant auto-install nvidia

O lo que es lo mismo, pero más cortito y fácil de recordar:

# m-a a-i nvidia

Y ese programilla se encarga de compilar, crear el paquete Debian correspondiente y hasta de instalarlo. No viene mal un:

# depmod -a
# modprobe nvidia

Si todo ha ido bien deberías tener tu driver funcionando.

Y el GLX

También tienes que instalar:

# apt-get install nvidia-glx

Cambio en la configuración del servidor X

Edita tu /etc/X11/xorg.conf y busca el apartado Section “Device”. Cambia la línea driver para que quede algo como:

        Driver  "nvidia"

Sólo queda reiniciar tu gestor de acceso. Por ejemplo:

# /etc/init.d/gdm restart

Referencias

  • Andrew’s Debian-nVidia HOWTO

  • Módulos de nvidia en Debian

Generar un certificado SSL para apache

2005-11-27 david.villa — [ edit | raw ]
  • recipe
migrated from node/122

Cómo generar el certificado que utiliza el servidor web Apache para el servicio SSL a través de HTTPS.

Ejecuta lo siguiente:

# apache2-ssl-certificate --force -days 365 -set_serial 2

Esto crea el /etc/apache2/ssl/apache.pem que contiene el certificado y la clave del servidor. El número de serie debería ser uno más de lo que haya en el certificado anterior.

En /etc/apache2/ssl.crt/ hay sendos enlaces simbólicos (server.key y server.crt) que apuntan al fichero generado.

Sólo queda reiniciar apache:

# /etc/init.d/apache2 restart

Referencias

  • HTTPD – Servidor Web Apache2
  • Install and Configure Apache2 with PHP5 and SSL Support in Debian Etch

Ejecutar programas X en otra máquina viéndolos en local

2005-11-27 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/119

A veces se necesita ejecutar un programa con interfaz gráfica que reside en una máquina distinta y queremos verlo en la máquina que estamos. Esta receta explica cómo conseguirlo sin tener que abrir una sesión X ni tener que utilizar un “escritorio remoto” como vnc.

Método 1: Exportar display

El método ‘clásico’ cuando queremos ejecutar un programa en una máquina remota y ver su interfaz en nuestro cliente X local es:

user@local:~$ xhost remoto
remoto being added to access control list
user@local:~$

Con eso se consigue que el servidor X, que corre en nuestra máquina, acepte conexiones externas de la máquina “remoto”. Pero si queremos que admita conexiones de cualquier máquina hay que poner:

user@local:~$ xhost +
access control disabled, clients can connect from any host
user@local:~$

Aunque esto puede suponer un problema de seguridad grave.

Ahora accede a la máquina remota con telnet o algo similar y exporta el ‘display’ para aplicaciones X.

user@remoto:~$ export DISPLAY=local:0
user@remoto:~$

La instrucción export declara una variable de entorno de la shell (no tiene nada que ver con la expresión exportar display).

Con esto, la aplicación X sabrá que debe utilizar el servidor X de la máquina llamada ‘local’ en lugar de usar el de la máquina en la que se ejecuta. Puedes comprobar que funciona con algo como:

user@remoto:~$ xeyes
user@remoto:~$

Con lo que deberías ver el clásico programilla de los ojos en la máquina local.

Método 2: ssh

El servidor ssh es capaz de gestionar automáticamente la conexión X siempre que servidor y cliente estén configurados adecuadamente.

Edita el fichero /etc/ssh/sshd_config del servidor y haz la siguiente modificación, que sirve para que el servidor ssh remoto devuelva el tráfico X11.

  X11Forwarding = yes

Edita el fichero /etc/ssh/ssh_config del cliente y haz la siguiente modificación, Esto hace que el cliente ssh local solicite el tráfico X11.

  ForwardX11 = yes

Como alternativa a esto, el usuario puede solicitarlo por línea de comando al hacer la conexión:

ssh -X <em>remoto</em>

Si lo haces en las dos máquinas, podrás utilizar este mecanismo en ambos sentidos. Sólo queda reiniciar el servidor con:

root@remoto:~# /etc/init.d/ssh restart
root@remoto:~#

Y ya tienes el efecto deseado, compruébalo con xeyes… (por ejemplo)

Enlaces

  • SSH y SCP para acceder a equipos remotos sin necesidad de clave

Presumiendo de aceleración 3D en GNU/Linux, con 3ddesktop

2005-11-26 david.villa — [ edit | raw ]
  • recipe
migrated from node/112

ATENCIÓN: Aunque los efectos visuales de 3ddesktop pueden seguir resultando interesantes para alguno, XGL deja a este programa bastante obsoleto. Mira la receta de XGL y Beryl en Ubuntu Dapper si de verdad quieres increibles efectos 3D en tu escritorio libre.

Leer más

"BookCrossing" ¿también en Ciudad Real?

2005-11-19 david.villa — [ edit | raw ]
  • tale
migrated from node/108

Acabo de ver esta noticia en barrapunto de nuestros colegas de Albacete sobre el fenómeno BookCrossing y era algo a lo que hace tiempo que llevaba dándole vueltas. Creo que es un mecanismo sencillo y barato para difusión de cultura libre. ¿Qué te parece? ¿Crees que podría funcionar aquí? ¿Estarías dispuesto a ayudar a poner el tema en marcha?

Leer más

Compartir ficheros con SHFS

2005-11-16 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/100

Esta receta es muy similar a esta otra de SSHfs + FUSE. La diferencia es que aquí se usa un driver específico llamado SHFS. Igualmente se trata de acceder a ficheros de una máquina remota a través de SSH.

Leer más

Manipulación de ficheros PDF

2005-11-15 david.villa — [ edit | raw ]
  • recipe
migrated from node/98

Esta receta es un compendio de pequeños trucos y utilidades para manipular ficheros PDF con los programas libres habituales en un sistema GNU

En realidad pienso ir apuntando aquí las soluciones que voy encontrando a problemas que me surgen cuando tengo que hacer ciertas «operaciones imprevistas» con ficheros PDF. Se admiten sugerencias para ir incorporando a la receta.

Unir varios documentos

Con pdfjoin del paquete pdfjam (visto en Linuca).

$ pdfjoin --fitpaper true fichero1.pdf fichero2.pdf fichero3.pdf --outfile final.pdf

Con GNU/GhostScript (por Gufete):

 $ gs -dColorImageFilter=/LZWEncode -dAutoFilterColorImages=false -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=pre_final.pdf fichero1.pdf fichero2.pdf fichero3.pdf
$ pdfopt pre_final.pdf final.pdf

Seleccionar algunas páginas

Con pdfjam

 $ pdfjam --no-landscape original.pdf  3,7,12-23,34 --outfile resultado.pdf

Con pdftk

 $ pdftk original.pdf cat 1-8 output resultado.pdf

Rotar páginas

Con pdfjam

 $ pdf90 original.pdf

También hay comandos pdf180 y pdf270.

Con pdftk:

 $ pdftk original.pdf cat 1-end<b>X</b> output resultado.pdf

Donde ‘X’ puede ser:

  • N: 0
  • E: 90
  • S: 180
  • W: 270
  • L: -90
  • R: +90
  • D: +180

Convertir un documento a formato de varias páginas por hoja

Utilizando el programa pdfnup del paquete pdfjam:

$ pdfnup --nup 2x1 --outfile salida.pdf original.pdf

Por ejemplo, para pasar transparencias apaisadas a página completa a formato de 3 páginas por hoja alineadas a la izquierda y con márgenes usa:

$ pdfnup --nup 1x3 --offset "-3cm 0" --trim "-2cm -2cm -2cm -2cm" original.pdf

«Escalar» el tamaño de la página

En realidad se trata de aumentar los márgenes reduciendo el tamaño del área impresa. También con pdfnup:

 $ pdfnup --nup 1x1 --scale 0.9 original.pdf

Cambiar el formato de página

Si tienes que imprimir un .pdf cuyo formato de página no es A4 probablemente acabarás desperdiciando gran parte de la hoja porque por aquí todas las impresoras domesticas son A4. Con los siguientes comandos puedes convertir el formato de página:

$  pdftk original.pdf cat output sin_xrefs.pdf
$ gs -r600 -dDITHERPPI=120 -dNOCIE -dFIXEDMEDIA -sPAPERSIZE=a4 -sDEVICE=pdfwrite -q -dNOPAUSE -dSAFER -dBATCH -dPDFFitPage -sOutputFile=resultado.pdf pdfopt.ps sin_xrefs.pdf

Manipulación de metadatos

Con pdftk

Para leer los metadatos de un PDF:

$ pdftk original.pdf dump_data output data.txt
$ cat data.txt
InfoKey: Creator
InfoValue: Writer&#0;
InfoKey: Producer
InfoValue: OpenOffice.org 3.1&#0;
InfoKey: CreationDate
InfoValue: D:20090923135542+02'00'
PdfID0: e5d831c33f77ac694b32456732f2c86
PdfID1: e5d831c33f77ac694b32456732f2c86
NumberOfPages: 1

Si se omite el output data.txt, imprime los datos a la salida estándar (la consola) en lugar de en el fichero.

Para modificar los metadatos se debe escribir un fichero con el mismo formato que el data.txt anterior (o modificar uno generado así) y ejecutar:

$ pdftk original.pdf update_info data.txt output resultado.pdf

Con exiftool

Para mostrar los metadatos escribe una cadena con variables tipo-shell (atento a las comillas simples):

$  exiftool fichero.pdf -p '$Title $Author'

Para modificarlos utiliza esos mismas claves como opciones:

$ exiftool fichero.pdf -Title="Algún cuento chino"

Convertir a escala de grises

[visto en http://handyfloss.net/2008.09/making-a-pdf-grayscale-with-ghostscript/]

$ gs -sOutputFile=grayscale.pdf -sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH color.pdf < /dev/null

Convertir a «raster»

Con Ghostscript

[visto en commandlinefu.com]

$ gs -dNOPAUSE -sDEVICE=jpeg -r144 -sOutputFile=p%03d.jpg file.pdf

Con convert

[visto en linuxquestions]

$ convert -density 300x300 file.pdf salida.png

Crear un PDF con fuentes empotradas

Si has hecho un .pdf con pdflatex lo más probable es que no incluya las fuentes, de modo que el programa pueda renderizar el documento con las fuentes del sistema. Sin embargo, a veces se requiere disponer de un .pdf auto-contenido para garantizar que se verá del mismo modo en cualquier parte. Para lograrlo ejecuta lo sisguiente:

$ pdf2ps original.pdf
$ ps2pdf14 -dPDFSETTINGS=/prepress -dEmbedAllFonts=true original.ps resultado.pdf

Como es lógico, el fichero resultante ocupará mucho más que el original (de 5 a 10 veces).

Compartir ficheros con SSHfs

2005-11-15 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/99

Cómo montar un directorio de otra máquina que tenga un servidor de SSH utilizando el paquete sshfs

Leer más

Compartir la conexión a Internet (router doméstico) con GNU/Linux

2005-11-13 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/96
Esta receta explica cómo configurar un ordenador con Debian (también Ubuntu y sucedáneos) para que sirva como router de tu pequeña red doméstica. La idea es que varios equipos puedan salir a Internet por medio de una sola conexión y con una única IP pública. Una vez consigas esto, hay varias cosas más que puedes hacer con él...

Ingredientes

  • Un ordenador:

    Este equipo hará de router. Sirve cualquier cosa mayor de un Pentium. Un K6 o un PII con 64 MB de RAM es más que suficiente para los servicios básicos. Es una buena oportunidad para reciclar tu viejo sobremesa, una vez instalado le sobre el monitor, teclado, ratón, CD-ROM y tarjeta de sonido; la de vídeo déjala puesta por si acaso.

  • iptables:

    Herramienta de administración de filtrado de paquetes IP.

  • Un Linux "de los nuevos":

    Como vas a utilizar iptables necesitas un Linux-2.6 o superior (aunque también serviría un 2.4).

  • dnsmasq >= 2.46:

    Es un servidor DHCP y caché DNS muy versátil y fácil de configurar.

Configuración de las interfaces de Red

Ese ordenador "de desecho" del que hablaba antes lo llamaremos a partir de ahora con el original nombre de Router. Bien, Router debe tener, al menos, dos interfaces de red:
  • Una conexión a Internet (eth0).

    Debe ser algún tipo de conexión a Internet, que puede ser RTC, ADSL, cable-modem, etc. Supondremos para esta receta que usas un modem ADSL con conexión Ethernet.

    Conste que podría ser RDSI, ppp o cualquier otro tipo de interfaz de red sin que ello afecte al resto del procecimiento. Supondremos que esta interfaz ya la tienes configurada conforme a las instrucciones de tu ISP.

  • Una conexión a tu red local (eth1):

    Será una tarjeta de red Ethernet 10/100. Esto permitirá que puedas enchufarle un conmutador y conectar "cienes y cienes" de ordenadores si quieres.

    Esta interfaz debes configurarla de forma estática, con una dirección IP privada, por ejemplo 192.168.0.1.

Aquí puedes ver un fichero completo /etc/network/interfaces para el caso en que eth0 se configure por DHCP contra tu ISP.
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
      address 192.168.0.1
      netmask 255.255.255.0
      broadcast 192.168.0.255

Activa el forwarding (reenvío)

Normalmente un ordenador conectado a una red TCP/IP descarta todos los paquetes IP que le llegan pero no van dirigidos a él, es decir, aquellos cuya direcci IP no corresponde a ninguna de las interfaces de la máquina. Sin embargo, un router debe tratar paquetes IP que no son para él. Para conseguir esto debes activarlo explícitamente con:
Router:~# echo 1 > /proc/sys/net/ipv4/ip_forward
O mejor aún, como queremos que ocurra la siguiente vez que arranque el equipo, modifica el fichero /etc/sysctl.conf para que quede así:
net.ipv4.ip_forward=1

Activa el NAT

El NAT es una técnica que permite que varios ordenadores puedan acceder a Internet aunque sólo se disponga de una IP pública. El NAT se encarga de "traducir" las direcciones IPs privadas por la única pública al enviar y realiza el proceso inverso al recibir las respuestas. Para activarlo escribe:
Router:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Con esto, los equipos conectados a la interfaz eth1 de Router ya tienen conexión a Intenet, aunque sus IPs habría que configurarlas "a mano" y no son capaces de resolver nombres. Vamos a ver cómo solucionar esas dos cuestiones.

Servidor DHCP y caché DNS

Una vez instalado dnsmasq, haz las siguientes modificaciones en el fichero /etc/dnsmasq.conf:
listen-address=192.168.0.1
bind-interfaces
dhcp-range=192.168.0.2,192.168.0.254,12h
Si usas una versión de dnsmasq más antigua quizá tengas que poner también
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1
Este fichero está muy bien documentado con comentarios e incluye ejemplos de todas las posibilidades. Después de realizar las modificaciones reinicia el servicio con:
Router:~# /etc/init.d/dnsmasq restart
Restarting DNS forwarder and DHCP server: dnsmasq.
Simplemente con eso, dnsmasq te da los siguientes servicios:
  • Si configuras los clientes de tu red local para usar DHCP obtendrán una IP del rango 192.168.0.[2-254]
  • Se configuran automáticamente para usar tu Router como pasarela y como DNS.
  • Router cachea todas las peticiones DNS que realicen los clientes y las redirije a los servidores DNS configurados en el /etc/resolv.conf de Router.
  • Dispone de DNS dinámico local. Si los clientes especifican un nombre al hacer su petición DHCP, el resto de los clientes podrán usar ese nombre para resolver su IP.
Además dnsmasq permite asignar IPs fijas (del rango) y nombres dependiendo de la MAC y otras muchas opciones avanzadas.

Nombre público para el Router (opcional)

Puedes configurarlo siguiendo la receta de DNS dinámico público.

Proxy web (opcional)

Por hacer. Una receta sobre squid?

Firewall, proteger los equipos de la red local (opcional)

Ver la Receta de iptables

Servidores en la red local accesibles desde el exterior (opcional)

Ver la Receta de iptables

Guardar la configuración de iptables

Para guardar las reglas activas (las que has ido poniendo hasta ahora) ejecuta:
Router:~# iptables-save > /etc/iptables.up.rules
Y ahora hay que hacer que esa configuración se cargue automáticamente al levantar la interfaz de red principal (la externa). Para ello, edita de nuevo el fichero /etc/network/interfaces para que la entrada de eth0 quede así:
auto eth0
iface eth0 inet dhcp
      pre-up iptables-restore < /etc/iptables.up.rules

Referencias

  • Cómo Balancear conexiones a Internet
  • Enrutado en base a marcas de paquetes. Iproute + Iptables
  • Ponle un Firewall a tu Linux. Iptables
  • iptables y NAT para vagos
  • The Perfect Setup - Debian Sarge (3.1)

Configuración y disfrute de un SAI: NUT en Debian

2005-11-05 david.villa — [ edit | raw ]
  • recipe
migrated from node/82

Esta receta explica cómo instalar y configurar la herramienta NUT para aprovechar al máximo las posibilidades de un SAI en un sistema Debian GNU/Linux. Concretamente, los pasos son para un MGE Pulsar Extreme 1500C

Introducción

Instalar un software de control para un SAI sólo tiene sentido si podemos hablar con él para obtener datos de su estado y funcionamiento. Si el SAI no tiene ningún tipo de conexión de datos (tal como serie o USB) esta receta no te sirve. En cualquier caso, un SAI que no dice nada sobre su estado es de muy poca utilidad. Si estás pensado en comprar un SAI, elige uno con el que puedas hablar. En la página de nut hay una lista de las marcas y modelos compatibles.

Instalación

Si tienes una distro compatible Debian, instalar el paquete nut es así de fácil:

 # apt-get install nut

Descripción

Este software tiene una arquitectura cliente/servidor. Esta configuración permite que varios equipos alimentados por un único SAI (y que ejecutan un cliente) puedan hablar, a través de la red, con el equipo que tiene la conexión de datos del SAI (y que ejecuta el servidor). De este modo, ante un corte de corriente, todos los equipos quedan informados y pueden actuar en consecuencia.

Por este motivo, aunque el SAI dé servicio a una sola máquina, será necesario instalar un servidor y un cliente.

Funcionalidad

Lógicamente, la función de un SAI o UPS (mantener la alimentación durante cortes de luz) es insuficiente para un servidor, ya que es muy probable que no haya nadie para apagar el equipo durante el tiempo de duración de las baterías. El software nut ofrece servicios mucho más interesantes:

  • Fijar un umbral de bateria, por debajo del cual el equipo conectado al SAI se apaga automáticamente.
  • Desconexión del SAI. De este modo las baterías no se agotan inútilmente, pues ya no hay nada que alimentar.
  • Fijar umbrales de carga máxima.
  • Monitorización y configuración remota (por medio de CGI).

Con esa configuración, ante un corte de luz, ocurre lo siguiente:

  • El SAI pasa a modo batería.
  • Al bajar el nivel de carga de la batería al umbral fijado, el driver que corre en el servidor lo detecta e informa a todos los clientes.
  • Los clientes inician el proceso de apagado de cada equipo.
  • Justo antes de apagarse, el servidor envía al SAI el comando de desconexión.
  • El SAI recibe el comando, espera un tiempo prefijado y después se apaga.

Al volver la corriente:

  • El SAI enciende automáticamente.
  • Cuando la fuente de alimentación del PC detecta voltaje (procedente del SAI) arranca el equipo. Para esto es necesario configurar el BIOS Setup de cada ordenador.

No todos los SAIs pueden hacer todo lo que se índica. Tendrás más o menos posibilidades dependiendo de la gama y precio del SAI.

Configuración

Configuración común

Lo primero, y antes de que se nos olvide, será cambiar los permisos del puerto serie (/dev/ttyS0 o /dev/ttyS1), pues nos debe dejar leer y escribir en él como root. En Debian, los puertos serie suelen pertenecer al grupo dialout, así que la manera más fácil de conseguir permiso es:

# addgrp nut dialout

En /etc/nut/ups.conf habrá que realizar algunos cambios (tanto en cliente como en servidor). Aquí es donde se añade el driver (cada familia de SAIs tiene su propio driver):

[id]
   driver = (driver)
   port = (port)
   (options)

Por ejemplo, para un SAI “MGE Pulsar Extreme” será:

[mge]
   driver = mge-utalk
   port = /dev/ttyS0
   LowBatt = 90

Configuración del servidor

Edita el fichero /etc/default/nut modificando la línea “START_UPSD=no” por “START_UPSD=yes”

En el fichero /etc/nut/upsd.conf tienes que crear la lista de control de acceso (ACL). Para ello incluye (si no existe ya):

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32                  # host actual
ACL [NombreMáquina] 192.168.0.0/24    # toda la red

ACCESS grant login localhost [password]
ACCESS grant monitor localhost [password]

ACCESS grant login [NombreMaquina] [password]
ACCESS grant monitor [NombreMáquina] [password]
ACCESS deny all all

Por último, edita el fichero /etc/nut/upsd.users para dar acceso a los usuarios. Para ello, añade las líneas:

[monuser]
        password = [password]
        allowfrom = localhost 192.168.0.0/24     # tu red

Configuración del cliente

Edita el fichero /etc/default/nut modificando la línea “START_UPSMON=no” por “START_UPSMON=yes”

Lo siguiente será /etc/nut/upsmon.conf. Éste es el fichero de configuración del cliente. La línea obligatoria a añadir es la del monitor:

MONITOR [id]@[ip] 1 [password] slave|master

Lo normal para el equipo que tiene la conexión de datos al SAI es que funcione en modo “master”. Eso significa que debe esperar a que los “slaves” apaguen antes de hacerlo él. Así que quedará algo como esto:

MONITOR mge@192.168.0.1 1 [password] master

Ahora debes reniciar el servicio de la forma habitual:

# /etc/init.d/nut restart

Consejos

Lo mejor es que la primera vez se arranque todo a mano, pues el script descrito en la sección anterior redirige todos los errores a /dev/null. Para ello se hará:

# upsdrvctl start
Network UPS Tools - UPS driver controller 1.2.1
Network UPS Tools - MGE UPS SYSTEMS/U-Talk driver 0.51.0 (1.2.1)
#
# upsd
Network UPS Tools upsd 1.2.1
#
# upsmon
UPS: mge@192.168.0.1 (slave) (power value 1)
Using power down flag file /etc/killpower
#

Puedes ver que la monitorización funciona adecuadamente con el comando upsc:

# upsc mge
UPS: localhost
MFR: MGE UPS SYSTEMS
STATUS: OL CHRG
UPSIDENT: EXtreme 1500C 15
MODEL: EXtreme 1500C
FIRMREV: 15
UTILITY: 230.0
BATTPCT: 100.0
BATT_RUNTIME: 01890
ACFREQ: 50.00
LOADPCT: 026.0
WAKEDELAY: 001
GRACEDELAY: 120
SLFTSTINT: 10080
OUTVOLT: 230.5
BATTVOLT: 054.6
LOBATTPCT: 90
NOMBATVLT: 048.0
CURRENT: 001.2

Y eso es todo.

Referencias

  • Network UPS Tools
  • MGE and NUT How-To
  • Gestionando un SAI desde OpenBSD con NUT
  • Monitorizar un SAI con Debian

El gestor de arranque GRUB

2005-11-04 david.villa — [ edit | raw ]
  • recipe
migrated from node/79
GNU Grub es mucho más que un gestor de arranque. Es el sustituto perfecto para LILO. es más potente, fiable y fácil de usar.

Instalación del paquete

Si tienes una distribución GNU/Linux basada en Debian es tan fácil como:
# apt-get install grub
En caso contrario puedes bajartelo de GNU.

Instalación del gestor de arranque

Para instalar grub en el arranque del disco debes ejecutar:
# grub-install /dev/hda
siempre que tu disco de arranque sea /dev/hda.

Configuración

Grub puede crear un fichero de configuración por defecto...
# update-grub
Este programa averigua qué kernels tienes instalados y modifica o crea (si no existe) un fichero menu.lst con los datos necesarios. Hazlo también después de instalar un nuevo kernel.

El fichero menu.lst

Su aspecto típico es:
timeout 4
color black/cyan yellow/cyan
default 0

title Debian GNU/Linux [2.4.19-686 precompiled]
root (hd0,4)
kernel /boot/vmlinuz-2.4.19-686 root=/dev/hda5
initrd /boot/initrd.img-2.4.19-686

title Debian single-user (kernel 2.2.18)
root (hd0,4)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda5 ro single
initrd /boot/initrd-2.2.18.gz

title Windows 98
rootnoverify (hd0,0)
makeactive
chainloader +1

Instalar programas con STOW

2005-10-25 david.villa — [ edit | raw ]
  • recipe
migrated from node/67
Cómo utilizar el gestor de instalación de paquetes GNU stow

Introducción

stow es una pequeña herramienta que sirve para instalar paquetes (normalmente a partir de sus fuentes). Permite que los binarios, ficheros de cabecera y de ayuda del paquete estén accesibles; pero teniendo controlado dónde va a parar cada fichero, de modo que la desistalación elimina TODO lo instalado. En cualquier caso, siempre es preferible utilizar el sistema de paquetes de la distribución (deb, rpm,) pues suele permitir un mejor control del sistema.

Instalación de stow

Suele estar disponible como paquete en las distribuiciones de GNU/Linux más extendidas. En Debian GNU/Linux y distribuciones derivadas (como Ubuntu) es tan fácil como:
# apt-get install stow

Instalación de un paquete usando stow

Supongamos que vas a instalar un paquete a partir de sus fuentes, por ejemplo, gnome-commander-1.1.5.tar.gz. Primero se descomprime:
$ unp gnome-commander-1.1.5.tar.gz
$ cd gnome-commander-1.1.5/<br/>
A continuación "configuramos" el sistema de compilación. Con prefix se indica a configure el directorio en el que se va a instalar el programa. Lo más aconsejable es utilizar un subdirectorio que cuelgue de /usr/local/stow es un buen sitio. Si ese directorio no hay que crearlo. El grupo propietario del directorio stow debería ser staff. Resulte este punto puedes proceder:
$ ./configure --prefix=/usr/local/stow/gnome-commander
$ make
$ make install
Con esto, los binarios quedan instalados en el directorio indicado. Sin embargo, esos directorios no están en el PATH y el programa no se puede invocar a menos que se indique la ruta completa. Aquí es donde entra en juego stow. Una vez instalado hacemos lo siguiente. Es importante cambiar al directorio /usr/local/stow o de lo contrario habría que indicar las rutas explícitamente.
/usr/local/stow$ stow gnome-commander
stow crea enlaces a los ficheros de modo que son accesibles desde /usr/local/bin, /usr/local/lib, etc. Para poder hacer esto hay que ser root, o mejor, hacer que tu usuario pertenezca al grupo staff (el propietario del directorio).

Des-intalar un paquete gestionado con stow

Si quieres que stow elimine los enlaces que creó para un paquete concreto simplemente ejecuta:
/usr/local/stow$ stow -D gnome-commander
Después de esto puedes borrar el directorio /usr/local/stow/gnome-commander sin problema, y todo habrá quedado tan limpito como antes de instalarlo.

Referencias

  • GNU Stow

apt-get y dpkg

2005-10-21 david.villa — [ edit | raw ]
  • recipe
migrated from node/59

Algunas posibilidades de las herramientas apt-get y dpkg de Debian GNU/Linux

Listar todos los ficheros de un paquete

$ dpkg -L nombre_paquete

Instalar un paquete de una release concreta

# apt-get install -t unstable nombre_paquete

Bloquear (hold) un paquete para que no se actualice en los upgrades

# echo nombre_paquete hold | dpkg --set-selections

Quitar el bloqueo a un paquete

# echo nombre_paquete install | dpkg --set-selections

Ver la versión de un paquete instalado

$ apt-cache policy nombre_paquete | grep Installed

Listar los paquetes que contienen cierta cadena en su nombre

$ COLUMNS=120 dpkg -l | grep string

Obtener el estado(hold, purge) de un paquete

$ dpkg --get-selections nombre_paquete

Eliminar un paquete y sus ficheros de configuración

# dpkg --purge nombre_paquete

Ver las dependencias de un paquete y su descripción

$ apt-cache showpkg nombre_paquete

Buscar paquetes relacionados con un término

$ apt-cache search string

Posibles problemas

Al instalar un paquete, puede ocurrir que su script de post-instalación falle por alguna razón, lo cual impide que el paquete se instale correctamente. Si eso ocurre puedes editar su script correspondiente en /var/lib/dpkg/info/nombre_paquete.postinst e intentar arreglarlo. Después simplemente ejecuta:

 # dpkg --configure -a

Reinstalar todos los paquetes instalados

Útil para limpiar los binarios si el sistema ha sido infectado con un virus o un rootkit. USAR CON PRECAUCIÓN.

# for i in $(dpkg --get-selections | grep -v deinstall | awk '{print $1}'); do apt-get install -y --reinstall $i; done

Enlaces

  • Configurar paquetes Debian
  • Debian Tutorial

  • Cómo buscar software y paquetes asociados en Debian

  • apt/dpkg

  • apt y dpkg. Herramientas de gestión de paquetes para Debian

  • A Concise apt-get / dpkg primer for new Debian users

Java Blackdown en Debian

2005-10-19 david.villa — [ edit | raw ]
  • recipe
migrated from node/52

Cómo instalar la máquina virtual Java de Blackdown en Debian GNU/Linux

Leer más

Cambiar la dirección MAC de una tarjeta de red

2005-10-18 david.villa — [ edit | raw ]
  • recipe
migrated from node/46

En determinadas «circunstancias especiales» puede ser necesario que un PC tenga una tarjeta de red con una dirección MAC específica. Esta receta explica cómo conseguirlo con ifconfig, iproute o macchanger

Leer más

Mini tutorial de Python 3

2005-10-17 david.villa — [ edit | raw ]
  • recipe
  • Python
migrated from node/43
Un minúsculo tutorial para quién necesite o simplemente le apetezca aprender Python.

Introducción

Python es un lenguaje interpretado, interactivo y orientado a objetos. Se le compara con C++. Java o Perl. Tiene variables, clases, objetos, funciones y todo lo que se espera que tenga un lenguaje de programación «convencional». Cualquier programador puede empezar a trabajar con Python con poco esfuerzo. Según muchos estudios, Python es uno de los lenguajes más fáciles de aprender y que permiten al novato ser productivo en tiempo record, lo cual lo hace ideal como primer lenguaje.

Python es perfecto como lenguaje «pegamento» y para prototipado rápido de aplicaciones (aunque finalmente fuera necesario rehacerlas en otros lenguajes), aunque eso no implica que no se puedan ser definitivos. Dispone de librerías para desarrollar aplicaciones multihilo, distribuidas, bases de datos, con interfaz gráfico, juegos, gráficos 3D, cálculo científico, machine learning y una larga lista.

Este pequeño tutorial utiliza la versión actual de Python (3.9) y presupone que el lector tiene nociones básicas de programación con algún lenguaje como C, Java o similar.

Empezamos

Nada como usar algo para aprender a usarlo. El intérprete de Python se puede utilizar como una shell (lo que se llama modo interactivo), algo que viene muy bien para dar nuestros primeros pasos.

$ python3
Python 3.9.1+ (default, Jan 20 2021, 14:49:22)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Variables y tipos

Las variables no se declaran explícitamente, se pueden usar desde el momento en que se inicializan. Y normalmente no hay que preocuparse por liberar la memoria que ocupan, tiene un «recolector de basura» (como Java).

$ python3
>>> a = "hola"

En el modo interactivo se puede ver el valor de cualquier objeto simplemente escribiendo su nombre:

>>> a
'hola'

Python es un lenguaje de tipado fuerte, pero dinámico. Eso significa que no se puede operar alegremente con tipos diferentes (como se hace en C). Las operaciones están definidas para trabajar con los tipos previstos.

>>> a + 1
Traceback (most recent call last):
  File "", line 1, in 
TypeError: Can't convert 'int' object to str implicitly

Esa operación ha provocado que se dispare la excepción TypeError. Las excepciones son el mecanismo más común de notificación de errores.

Pero se puede cambiar el tipo de una variable sobre la marcha:

>>> a = 3

En realidad no hemos cambiado el tipo de a, sino que hemos creado una nueva variable que reemplaza la anterior.

Tipos de datos

Valor Nulo

Una variable puede existir sin tener valor ni tipo, para ello se asigna el valor None. Es el valor adecuado cuando se quiere indicar que una variable no se refiere a ningún objeto:

>>> a = None
>>> a

>>>

Booleanos

Lo habitual:

>>> a = True
>>> a
True
>>> not a
False
>>> a and False
False
>>> 3 > 1
True
>>> b = 3 > 1
>>> b
True

Numéricos

Python dispone de tipos enteros de cualquier tamaño que soportan todas las operaciones propias de C, incluidas las de bits. También hay reales como en cualquier otro lenguaje. Ambos tipos se pueden operar entre si sin problema. Incluso tiene soporte para números complejos de forma nativa.

>>> a = 2
>>> b = 3.0
>>> a + b
5.0
>>> b - 4j
(3-4j)

Secuencias

No hay tipo carácter, se utilizan cadenas de tamaño 1. Las cadenas admiten operaciones como la suma y la multiplicación.

>>> greeting = 'hola '
>>> greeting + 'mundo'
'hola mundo'
>>> greeting * 3
'hola hola hola '

El tipo bytes permite manejar secuencias de bytes. Es especialmente útil para serialización de datos. Por ejemplo, podemos convertir una cadena de caracteres UTF-8 a bytes y viceversa:

>>> word = 'ñandú'
>>> coded = word.encode()
>>> coded
b'\xc3\xb1and\xc3\xba'
>>> coded.decode()
'ñandú'

Las tuplas son una agrupación de valores similar al concepto matemático de tupla. Se pueden empaquetar y desempaquetar varias variables (incluso de tipo diferente).

>>> x = greeting, 'f', 3.0
>>> x
('hola ', 'f', 3.0)
>>> v1, v2, v3 = x
>>> v2
'f'

Las Listas son similares a los vectores o arrays de otros lenguajes, aunque en Python se pueden mezclar tipos.

>>> x = [1, 'f', 3.0]
>>> x[0]
1

Las listas también se pueden sumar y multiplicar:

>>> x = [1, 'f', 3.0]
>>> x + ['adios']
[1, 'f', 3.0, 'adios']
>>> x * 2
[1, 'f', 3.0, 1, 'f', 3.0]

Cualquier secuencia se puede indexar desde el final o mediante «rodajas» (slices):

>>> greeting = 'holamundo'
>>> greeting[-1]
'o'
>>> greeting[1:6]
'olamu'
>>> greeting[:3]
'hol'
>>> greeting[3:]
'amundo'
>>> greeting[-6:-2]
'amun'

Los diccionarios son tablas asociativas:

>>> grades = {'antonio':6, 'maria':9}
>>> grades['antonio']
6

Python dispone de otros tipos de datos nativos como conjuntos (sets), pilas, colas, listas multidimensionales, etc.

Type checking

Aunque Python es un lenguaje de tipado dinámico, en la versión 3.0 ya se daba la opción de hacer anotaciones sobre las variables y sus tipos, y actualmente (se introdujo con el PEP 484) existe un módulo donde se definen la semántica y convenciones para especificar de forma opcional esas anotaciones o hints.

>>> pi: float = 3.14

Las anotaciones de las variables se almacenan en el atributo __annotations__:

>>> a = "hola"
>>> pi: float = 3.14
>>> __annotations__
{'pi': }

El comportamiento del lenguaje es el mismo, y las variables puede cambiar el tipo de valor que almacenan independientemente de su definición sin producir errores:

>>> pi: float = 3.14
>>> pi = "Tres coma catorce"

Sirve principalmente para facilitar la comprensión del código y poder llevar a cabo comprobaciones de tipos o type checking sobre el código escrito con herramientas como MyPy.

Orientado a objetos

Casi todo en Python está orientado a objetos, incluyendo las variables de tipos básicos, y hasta los literales!

>>> cad = 'holamundo'
>>> cad.upper()
'HOLAMUNDO'
>>> 'ADIOS'.lower()
'adios'

Módulos

Los módulos son análogos a las 'librerías' o 'paquetes' de otros lenguajes. Para usarlos se utiliza la sentencia import:

>>> import sys
>>> sys.exit(1)

Estructuras de control

Están disponibles las más habituales: for, while, if, if else, break, continue, return, etc. Todas funcionan de la forma habitual excepto for. El for de Python no es un while disfrazado, como ocurre en algunos lenguajes. Este for hace que, en cada iteración, la variable de control tome los valores que contiene una secuencia, es decir, que itere sobre ella. Ejemplo:

>>> for c in "hello":
...    print(c)
...
'h'
'e'
'l'
'l'
'o'

Indentación estricta

En muchos lenguajes se aconseja «tabular» de determinada manera para facilitar su lectura. En Python este estilo es obligatorio porque el esquema de indentación define los bloques. Es una importante peculiaridad de este lenguaje. Se aconseja tabulación blanda de 4 espacios. Mira el siguiente fragmento de un programa Python:

total = 0
passed = 0
grades = {'antonio':6, 'maria':9}
for i in grades.values():
   total += i
   if i >= 5:
      passed += 1

print('Average:', total / len(grades))

El cuerpo del bloque for queda definido por el código que está indentado un nivel debajo de él. Lo mismo ocurre con el if. La sentencia que define el bloque siempre lleva un ':' al final. No se utilizan llaves ni ninguna otra cosa para delimitar los bloques.

Funciones

Nada mejor para explicar su sintaxis que un ejemplo:

def factorial(n):
    if n == 0:
       return 1
    return n * factorial(n-1)

# y su invocación
print(factorial(10))

Python is different

Como cualquier lenguaje, Python tiene sus peculiaridades, y conocerlas puede ayudar a sacarle el máximo potencial. Siempre hay una manera más «pythónica» de hacer las cosas, utilizando por ejemplo las características de programación funcional que incorpora. Como ejemplo, el factorial se puede hacer aún más compacto con algo como:

from functools import reduce
from operator import mul
factorial = lambda x: reduce(mul, range(1, x+1), 1)
print(factorial(10))

Muy aconsejable Python Is Not Java

Hacer un fichero «ejecutable»

Lo normal es escribir un programa en un fichero de texto con extensión .py, utilizando algún buen editor (como code). Después ese fichero se puede ejecutar como cualquier otro programa. Para eso, la primera línea del fichero debe tener un «shebang», es decir, algo como:
#!/usr/bin/python3

Y no olvides darle permisos de ejecución al fichero:

$ chmod +x fichero.py

¿Y ahora qué?

  • Python koans
  • Empieza por el el tutorial oficial.
  • Incluso hay varios libros libres:
    • Inmersión en Python 3
    • Byte of Python
    • Learning Python
    • Codeacademy
    • Introducción a la programación en Python 3/a>
  • Si necesitas la referencia oficial, pues la la página de Python

Descargar las ISO de los DVD de Debian, con jigdo

2005-10-14 david.villa — [ edit | raw ]
  • recipe
migrated from node/35

Cómo utilizar la herramienta jigdo para descargar las ISO de los CDs y DVDs de Debian.

Leer más

Túneles, canales y puertos con SSH

2005-10-12 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/32

ssh (entre otras muchas cosas) también sirve para crear túneles entre máquinas o simplemente redireccionar puertos en un misma máquina.

Leer más

Netcat, la navaja suiza de TCP/IP

2005-10-10 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/28

Netcat es una de las herramientas más potentes y flexibles que existen en el campo de la programación, depuración, análisis y manipulación de redes y servicios TCP/IP. Es un recurso imprescindible tanto para expertos en seguridad de redes como para hackers. Esta receta incluye varios ejemplos de uso de GNU netcat.

Introducción

Aunque netcat puede hacer muchas cosas, su función principal es muy simple:

  1. Crea un socket con el destino indicado si es cliente, o en el puerto indicado, si es servidor
  2. Una vez conectado, envía por el socket todo lo que llegue en su entrada estándar y envía a su salida estándar todo lo que llegue por el socket

Algo tan simple resulta ser extraordinariamente potente y flexible como vas a ver e continuación. Por simplicidad se utilizan conexiones locales aunque, por supuesto, se pueden utilizar entre máquinas diferentes.

Ingredientes

  • netcat
  • bash (o equivalente)
  • utilidades GNU básicas

Sintaxis

nc [-options] hostname port[s] [ports]
nc -l -p port [-options] [hostname] [port]

Parámetros básicos

  • -l: modo ‘listen’, queda a la espera de conexiones entrantes.
  • -p: puerto local
  • -u: modo UDP
  • -e: ejecuta el comando dado después de conectar
  • -c: ejecuta órdenes de shell (hace /bin/sh -c [comando] después de conectar

Un chat para dos

Servidor

$ nc -l -p 2000

Cliente

$ nc localhost 2000

Transferencia de ficheros

La instancia de nc que escucha recibe el fichero. El receptor ejecuta:

$ nc -l -p 2000 > fichero.recibido

Y el emisor:

$ nc localhost 2000 &lt; fichero

Servidor de echo

Ponemos un servidor que ejecuta cat de modo que devolverá todo lo que
se le envíe

$ nc -l -p 2000 -e /bin/cat

Y en otra consola:

$ nc localhost 2000
hola
hola
...

Servidor de daytime

Exactamente lo mismo que el ejemplo anterior pero ejecutando date en lugar de cat.

$ nc -l -p 2000 -e /bin/date

Y en otra consola:

$ nc localhost 2000
lun feb 23 21:26:48 CET 2004

shell remota estilo telnet

Servidor

$ nc -l -p 2000 -e /bin/bash

Cliente

$ nc localhost 2000

Telnet inverso

En esta ocasión es el cliente quien pone el terminal remoto

Servidor

$ nc -l -p 2000

Cliente

$ nc server.example.org 2000 -e /bin/bash

Cliente de IRC

$ *nc irc.freenode.net 6666*
NOTICE AUTH :*** Looking up your hostname...
NOTICE AUTH :*** Found your hostname, welcome back
NOTICE AUTH :*** Checking ident
NOTICE AUTH :*** No identd (auth) response
*NICK nadie*
*USER nadie nadie nadie :nadie*
:kubrick.freenode.net 001 nadie :Welcome to the freenode IRC Network nadie
:kubrick.freenode.net 002 nadie :Your host is kubrick.freenode.net[kubrick.freenode.net/6666], running version hyperion-1.0.2b
[...]

y a partir de ahí puedes introducir cualquier comando de IRC:

  • LIST
  • JOIN #canal
  • PART #canal
  • PRIVMSG #canal :mensaje
  • WHO #canal
  • QUIT

Cliente de correo SMTP

Podemos usar netcat para enviar correo electrónico por medio de un servidor SMTP, utilizando el protocolo directamente:

~$ nc mail.servidor.com
220 mail.servidor.com ESMTP Postfix
HELO yo
250 mail.servidor.com
MAIL FROM:guillermito@microchof.com
250 Ok
RCPT TO:manolo@cocaloca.es
250 Ok
DATA
354 End data with &lt;CR>&lt;LF>.&lt;CR>&lt;LF>
Aviso: su licencia ha caducado. Me deben un pastón.
.
250 Ok: queued as D44314A607
QUIT
221 Bye

HTTP

Es sencillo conseguir un cliente y un servidor HTTP rudimentarios.

Servidor

$ nc -l -p http -c "cat index.html"

Al cual podemos conectar con cualquier navegador HTTP, como por ejemplo firefox.

Cliente

$ echo "GET /" | nc www.google.com 80 > index.html

Streaming de audio

Un sencillo ejemplo para hacer streaming de un fichero .mp3:

Servidor

$ nc -l -p 2000 < fichero.mp3

y para servir todos los .mp3 de un directorio:

$ cat *.mp3 | nc -l -p 2000

Cliente

$ nc server.example.org 2000 | madplay -

Streaming de video

Servidor

$ nc -l -p 2000 < pelicula.avi

Cliente

$ nc server.example.org 2000 | mplayer -

Proxy

Sirva para redirigir una conexión a otro puerto u otra máquina:

$ nc -l -p 2000 -c "nc example.org 22"

El tráfico recibido en el puerto 2000 de esta máquina se redirige a la máquina example.org:22. Permite incluso que la conexión entrante sea UDP pero la redirección sea TCP o viceversa!

Clonar un disco a través de la red

Esto se debe usar con muchísima precaución. ¡Si no estás 100% seguro, no lo hagas! No digas que no te avisé.

Es este ejemplo voy a copiar un pen drive USB que está conectado al servidor a un fichero en el cliente y después lo voy a montar para acceder al contenido.

Servidor

$ dd if=/dev/sda1 | nc -l -p 2000

Cliente

$ nc server.example.org 2000 | dd of=pendrive.dump
$ mount pendrive.dump -r -t vfat -o loop /mnt/usb

Ratón remoto

Es decir, usar el ratón conectado a una máquina para usar el entorno gráfico de otra. El ejemplo está pensado para Xorg.

Servidor

# nc -l -p 2000 < /dev/input/mice

Cliente

Editar el fichero /etc/X11/xorg.conf y modificar la configuración del ratón para que queda así:

Section "InputDevice"
    Driver     "mouse"
    ...
    Option    "Device"    "/tmp/fakemouse"
    ....
EndSection
$ mkfifo /tmp/fakemouse
$ nc server.example.org 2000 > /tmp/fakemouse
# /etc/init.d/gdm restart

Medir el ancho de banda

Servidor

$ nc -l -p 2000 | pv > /dev/null

Cliente

$ nc server.example.org 2000 < /dev/zero

Imprimir un documento en formato PostScript

Funciona en impresoras que soporten el estándar AppSocket/JetDirect, que son la mayoría de las que se conectan por Ethernet.

$ cat fichero.ps | nc -q 1 nombre.o.ip.de.la.impresora 9100

Ver «La Guerra de las Galaxias»

$ nc towel.blinkenlights.nl 23

Otros "netcat"s

  • cryptcat – netcat cifrado.
  • socat – Cuando netcat te queda corto.
  • socket
  • ncat

Referencias

  • The GNU Netcat project
  • Netcat – network connections made easy
  • Play with the Lovely Netcat
  • Usando la herramienta netcat en GNU/Linux. La navaja suiza del protocolo TCP/IP
  • Netcat o nc
  • Tutorial de netcat

Grabar CDs y DVDs fácilmente desde consola

2005-10-07 david.villa — [ edit | raw ]
  • recipe
migrated from node/26

Uso básico de mkisofs y cdrecord para copiar y grabar CDs desde consola.

Leer más

ddclient, cliente de DNS dinámico para todos

2005-10-07 david.villa — [ edit | raw ]
  • recipe
migrated from node/25
Tienes tarifa plana en casa pero tu IP es dinámica. A pesar de eso te gustaría tener un servidor web y tus "cosillas" accesibles desde cualquier sitio. La solución a tus problemas es un servicio de DNS dinámico.

Ingredientes

  • Una conexión a internet
  • Debian GNU/Linux o derivados
  • ddclient

Servidor de DNS dinámico

Lo primero es crearte una cuenta en uno de los muchos sitios que tienen un servicio de DNS dinámico, muchos son gratuitos. Por ejemplo, DynDNS.org. Hay otros:
  • www.easydns.com
  • www.dslreports.com
  • www.zoneedit.com
  • hn.org
  • etc
Al crear tu cuenta tendrás que indicar cómo se va a llamar tu máquina, por ejemplo, miservidor.dyndns.org.

Instalar ddclient

Simplemente:
# apt-get install ddclient

Configuración

El propio sistema de instalación de paquetes de Debian te preguntará los parámetros de configuración. A continuación se ponen unos valores de ejemplo figurados.
  • servidor? www.dyndns.org
  • host? miservidor.dyndns.org
  • usuario? dnsuser
  • clave? miclave
  • interface? eth0
  • ppp? no
  • daemon? sí
  • intervalo? 300
Cuando lo quieras reconfigurar puedes usar:
# dpkg-reconfigure ddclient
o editar directamente el fichero /etc/ddclient.conf:
pid=/var/run/ddclient.pid
protocol=dyndns2
use=if, if=eth0
server=members.dyndns.org
login=pepito_grillo
password=clave_de_pepito
pepito.dyndns.org
Recuerda reiniciar el demonio para activar los cambios:
# /etc/init.d/ddclient restart
Y eso es todo, cada cierto tiempo, tu demonio ddclient se conectará al servidor y le indicará tu nueva IP, así que no importa que cambie.

Referencias

  • ddclient
  • DynDNS

Arrancar como root sin conocer la clave (usando GRUB)

2005-10-07 david.villa — [ edit | raw ]
  • recipe
migrated from node/19
Si metes la pata y te cargas la cuenta de root o simplemente has olvidado la clave, esta receta explica cómo recuperar la cuenta de root sin conocer la clave, siempre que uses GRUB como gestor de arranque.
Cuando aparezca el menu de grub, tras encender la máquina, situate con los cursores en la línea del kernel que quieres usar. Pulsa 'e' para editar la entrada y edita la línea kernel (pulsando 'e' de nuevo). Añade al final de la línea lo siguiente:
init=/bin/bash
Esto hace que el sistema arranque una shell root sin pedir password. Es posible que el teclado esté en inglés y no puedas escribir el '=' y la '/', prueba '¡' y '-'. Pulsa 'b' para comenzar el arranque del kernel. La partición raíz suele montarse como sólo lectura, asi que si olvidaste la clave de root y quieres cambiarla primero deberás remontarla como lectura/escritura. Para ello:
# mount -o remount,rw /dev/hda3
suponiendo que /dev/hda3 es tu partición raíz. Puedes averiguarlo ejecutando simplemente mount. Por último, cambia la clave de root ejecutando:
# passwd root
# sync
# reboot

Enlaces

  • GRUB Cómo
  • Grub Manual

SSH y SCP para acceder a equipos remotos sin escribir la clave (public key authentication)

2005-09-13 david.villa — [ edit | raw ]
  • recipe
  • networking
migrated from node/6

Cómo configurar SSH para poder usar ssh y scp para acceder a otras máquinas autorizadas sin necesidad de indicar la clave de usuario cada vez que se conecta. También muy útil cuando se usan repositorios remotos que se acceden por SSH.

Leer más

magmax's blog

Plugins en Python

2016-11-20 magmax — [ edit | raw ]
  • recipe
  • Python

Siempre me ha gustado escribir aplicaciones extensibles, pero picarme todo un sistema de plugins me ha parecido tedioso.

Por eso he intentado buscar librerías que me ayuden a crear plugins, aunque siempre he tenido problemas para la distribución de éstos, como me ha pasado con Yapsy.

La verdad es que me he sentido como un auténtico estúpido al descubrir que Python tiene un sistema para escribir plugins muy sencillo de usar. Vamos a ver cómo.

Puedes encontrar el artículo original en: MagMax Blog.

Leer más

Creación de un módulo Drupal

2009-11-24 magmax — [ edit | raw ]
  • recipe
migrated from node/1264
Atención: Este artículo se ha copiado de la web de MagMax(que es su autor). Es posible que sufra cambios. Podéis encontrar la última versión de este artículo en su ubicación original. Muchas gracias.
Leer más

Java, Ice, Netbeans, Eclipse y otras malas hierbas

2009-10-01 magmax — [ edit | raw ]
  • recipe
  • Ice
  • networking
migrated from node/1228
Últimamente he estado cotilleando en el mundo ICE con Java, así que aquí os dejo mis conclusiones. Si alguna de ellas es errónea, os agradecería vuestros comentarios. Por supuesto... Java + IDE (Netbeans o Eclipse)
Leer más

Gimp: recortar una imagen en línea de órdenes

2009-01-07 magmax — [ edit | raw ]
  • script
  • graphics
migrated from node/1076
A menudo he necesitado este script y por fin me he puesto a implementarlo. Consiste en un script-fu que se le puede pasar a gimp para recortar una imagen de forma automática. Contaré los pasos que he seguido y al final hay un resumen para 'ir más rápido'.

Ingredientes

No os lo vais a creer: gimp.
 # apt-get install gimp
Seguro que en Mindows es más fácil de instalar.

Mi primer script

Lo primero que necesitado ha sido una manera de ejecutar un script. Para ello, he abierto mi imagencilla con Gimp de la forma habitual:
$ gimp tab1.png
Después hay que irse a la ventana principal de Gimp, donde están las herramientas, y acceder a "Exts"->"Script-fu"->"Consola de Script-fu". Se nos abrirá una ventana bastante fea. Antes de avanzar, pulsamos el botón "examinar". Se nos abrirá la ventana de ayuda que podemos tener danzando por ahí mientras nos damos cabezazos contra la pared con nuestro script. Vamos con mi "hola mundo". En esta ocasión, consistió en seleccionar toda la imagen :-D
(gimp-selection-all 1)
Ahora lo explico: estoy llamando a la función "gimp-selection-all" con el parámetro "1", que es el identificador de la imagen (como la acabamos de abrir, debería ser el 1 :D). Para comprobar el resultado, vamos a la ventana de la imagen y debería estar seleccionado todo.

El Script

Ahora que sabemos usar perfectamente script-fu, vamos con el script que recorta una imagen:
(let* \
    ( \
        ( img (gimp-file-load 0 "/ruta_hasta_la_imagen/tab1.png" "tab1.png") ) \
        ( drw (gimp-image-get-active-drawable (car img)) ) \
    )  \
    (plug-in-autocrop 0 (car img)  (car drw)  )\
    (plug-in-colortoalpha 1 (car img) (car drw) '(0 0 0) )  \
    (gimp-file-save 1 (car img) (car drw )   "/ruta_hasta_la_imagen/ejemplo.png" "ejemplo.png") \
)
Lo he separado en líneas para que lo veáis bonito :D. La barra invertida: "\" sólo sirve para indicar que va todo en la misma línea. Ahora explico: "let*" me permite definir variables. Así defino dos: una es "img" y otra "drw". Casi todas las funciones requieren estos parámetros, así que me los guardo "para luego" y así es más fácil todo. Al declarar "img" le asigno el valor devuelto por la función "gimp-file-load", que me ha cargado la imagen, pasándole un "0" ("no interactivo"), la ruta hasta la imagen y "el nombre dado por el usuario", que creo que es el nombre de la imagen sin el path. Igualmente, a "drw" le asigno el resultado de "gimp-image-get-active-drawable", donde " (car img)" es una llamada a una función que me da el primer elemento del vector "img" (no sé explicarlo mejor. No he conseguido quitarme de encima el "car" ése). Con eso ya tengo las dos variables locales que, como locales que son, sólo existirán hasta que cierre el "let*" (por eso lo cierro al final). El primer argumento del resto de funciones siempre es el modo interactivo, el problema es que de homogeneidad nada: unas funciones toman el 0 como "interactivo" y otras como "no-interactivo". En el ejemplo todas están a "no-interactivo". Por orden, hago: Cargar la imagen (como hemos visto), recortar la imagen, transformar el color blanco a alpha (éste es un bonus track) y guardar la imagen. No me enrollo más.

Batch mode

Claro, nada de esto tiene gracia si tengo que estar abriendo el gimp para cada una de mis 159 imágenes que quiero procesar... Así que a currarme la línea de órdenes:
$ gimp -i -b '(let* ( ( img (gimp-file-load 0 "/ruta_hasta_la_imagen/tab1.png" "tab1.png") ) ( drw (gimp-image-get-active-drawable (car img)) ) )  (plug-in-autocrop 0 (car img)  (car drw)  ) (plug-in-colortoalpha 1 (car img) (car drw) '(0 0 0) )   (gimp-file-save 1 (car img) (car drw )   "/ruta_hasta_la_imagen/ejemplo.png" "ejemplo.png") )  (gimp-quit 0)'
A gimp tengo que pasarle la orden "-i" (no interactivo) y "-b" (ejecútame este batch) con la ristra que hemos comentado antes. Tan sólo le he añadido un detallito, que es la orden "gimp-quit" para que no se quede en "modo gimp". Hay una forma de hacer que me procese todas las imágenes de golpe... Pero eso lo dejaré para otra receta, ya que yo voy a utilizar un precioso Makefile que me va a ir transformando todas las imágenes y me las va a actualizar cuando las modifique (mientras que con gimp tendría que volver a procesar todas), así que lo dejaré en el tintero.

Y fin

No sé si esto resultará útil para alguien, pero puedo asegurar que para mí sí, y como no sabía dónde ponerlo y el script-fu es infernal, lo he plantao aquí, que hacía mucho que no saba señales de vida.

Referencias

Pues un poco de aquí y otro de allá:
  • javielinux
  • Manual de gimp
  • Tutorial de gimp
  • Documentación de gimp
  • Plugins de gimp

Politonos gratis

2008-05-18 magmax — [ edit | raw ]
  • recipe
  • ocio
migrated from node/921

Hasta las narices de que me quieran sajar por un minuto de canción más o menos lo mismo que por una canción completa (con una calidad ridícula), aquí tenéis un manual para reducir el tamaño y la calidad de vuestras canciones favoritas. Eso sí: siempre y cuando tengáis un “título de propiedad” de la canción…

Paso 0: A WAV

Lo primero que hago es obtener el wav. Como lo tengo en CD uso grip (paquetito debian y tal). Si lo tenéis ya en mp3, saltaros este paso.

Paso 1: Recortando

Pues yo uso mhwaveedit. Abre tanto el mp3 como el wav. Recortas, pruebas, recortas, pruebas, pruebas, recortas, pruebas, deshaces, recortas, pruebas… Ale, ya tienes el trocito que te gusta.

Paso 2: Calidad paupérrima

¿Vas a difrutar de la música? La respuesta es: NO. Un montón de investigación para obtener mejor calidad y al final lo que queremos es basura. ¿Qué se le va a hacer? Pero… ¡No hay problema!

$ lame -m m -b 56 ficherito.wav ficherito.mp3

Con esto conseguiréis una calidad regulera, pero un tamaño enano. Para un wav de 5Mb he conseguido un mp3 de 200Kb. Podéis jugar con el parámetro de -b hasta encontrar lo que queréis (si ponéis un valor inválido, os avisa de cuáles son los buenos).

Ironic mode: ON

Ale… a difrutar de la música

Ironic mode: OFF

—

20070522 – Añadida opción “-m m” para transformar a Mono. Gracias, Paco; se me había pasado al transcribirlo.

Sabías que... "cp" no tiene porqué borrar tus ficheros.

2008-03-10 magmax — [ edit | raw ]
  • recipe
  • shell
migrated from node/881
Minirreceta sobre cómo evitar que CP sobreescriba tus ficheros.

Leer más

Grandes inventos de Microsoft: El ratón y la interfaz gráfica.

2007-08-25 magmax — [ edit | raw ]
  • tale
  • ocio
migrated from node/765
Cualquiera que lea el título puede caer en la desgracia de creérselo. Sin embargo, son afirmaciones que cualquiera que no sepa un poquitín de historia cree. He aquí una pequeña historieta con lo que me ha pasado a mí para descubrir al inventor del ratón.
Leer más

Recuperar Grub

2007-06-14 magmax — [ edit | raw ]
  • recipe
  • Debian
migrated from node/714
A menudo, después de liar una buena o bien de instalar sistemas operativos no permisivos y totalitaristas, nos encontraremos que se han cargado GRUB y no podemos volver a iniciar nuestro GNU/*. Siempre olvido alguno de los pasos, así que voy a ponerlos aquí y así a lo mejor le viene bien a alguien.
Leer más

Trucos y cosas: Gnome y cambio de ventanas

2007-06-01 magmax — [ edit | raw ]
migrated from node/708
A menudo necesitamos cambiar de aplicación y lo hacemos rápidamente mediante una combinación de teclas "ALT+TAB". Este cambio, además, muestra una pequeña ventanita que nos indica la aplicación que se va a abrir.
Leer más

Un millón de gracias

2007-05-14 magmax — [ edit | raw ]
  • new
migrated from node/682
Ayer, domingo 13 de mayo, cerca de las 12 de la noche, superamos el millón de visitas (según nuestro contador).
Leer más

GNU Emacs: Mejorando Tabbar

2007-05-14 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/683
Ya vimos cómo Añadir pestañas a Emacs. Ahora veremos cómo cambiar las agrupaciones.

Ingredientes

Nuevamente, Emacs y emacs-goodies-el.

Agrupaciones

A menudo me ha ocurrido que he tenido que abrir ficheros Makefile. Realmente es un fastidio que tabbar agrupe por extensiones: a mí me gustaría tener disponibles mi Makefile, los .C y los .CPP que utilizo constantemente. Hoy editaremos a mano, una vez más, nuestro queridísimo .emacs (_emacs para los Windozes). Ahí va un ejemplo de hacer lo que he descrito:
(defun tabbar-buffer-groups (buffer)
  (with-current-buffer (get-buffer buffer)
    (cond
     ((eq major-mode 'dired-mode) '("Main") )
     ((memq major-mode '(c-mode c++-mode makefile-mode)) '("Coding") )
     )
    )
  )
Claro, que suele ser un fastidio tener todas las pestañitas ésas: scratch, Messages, ... Ahí va mi configuración:
(defun tabbar-buffer-groups (buffer)
  "Return the list of group names BUFFER belongs to.
Return only one group for each buffer."
  (with-current-buffer (get-buffer buffer)
    (cond
     ((member (buffer-name) '("*scratch*")) '("Misc") )
     ((member (buffer-name) '("*Messages*")) '("Misc") )
     ((member (buffer-name) '("*Completions*")) '("Misc") )
     ((member (buffer-name) '("*Ediff Registry*")) '("Misc") )
     ((eq major-mode 'dired-mode) '("Main") )
     ((memq major-mode '(c-mode c++-mode makefile-mode)) '("Coding") )
     (t '("Main") )
     )
    )
  )
Como podéis ver, tengo 3 grupos principales: Misc, Coding y Main. Por defecto lo mete todo en "Main", salvo los ficheros de c, c++ y Makefiles que son "Coding", y los buffers habituales van a "Misc". Con esta base y un poco de imaginación, se pueden hacer muchas cosas muy apañadas...

Referencias

Mike's Emacs Help Page (y ese Mike no soy yo :D).

Próxima semana:

Bueno... Podéis observar que he roto lo habitual de escribir cada semana. A parte de que estoy muy liado, ¡se me están acabando las ideas!. David ha proporcionado unos cuantos TES y Brue también ha puesto su granito de arena. Si alguien más participa, ¡estupendo! pero, por mi parte, se acaban los TES. De todas maneras, podéis poner vuestros trucos y marcarlos como "emacs" en la pestaña "Tema". Siempre son bienvenidos ;)

Bogoutil: completa bogofilter

2007-04-21 magmax — [ edit | raw ]
  • recipe
  • Debian
migrated from node/651
Bogofilter es un filtro antispam que es muy sencillo de combinar con sylpheed y otros clientes de correo. El paquete bogoutils nos permite acceder a las estadísticas y opciones de la base de datos de bogofilter para obtener información adicional. Aquí se muestran algunas de las opciones

Ingredientes

Evidentemente, nos hará falta bogofilter (que ya incluye bogoutil), algún cliente de correo configurado con bogofilter y varias semanas de filtrado de spam.

Notas y cosas

Una nota aclaratoria para todos los ejemplos que se vean en este artículo: He reutilizado la base de datos que tuve hace tiempo, donde no filtré correctamente todos los mailes que me llegaron. Eso ha repercutido en algunas de las estadísticas que mostraré a continuación (como por ejemplo, en la cantidad de mailes que muestran como ham algunas de las palabras, cuando son claramente spam). Otra cosa: las estadísticas que se muestran aquí sólo son de 3 meses, por lo que no se pueden generalizar (harían falta años para eso).

Ham vs. Spam

Como nota aclaratoria, diré que siempre que me refiera a "Ham" (jamón) me referiré a los mails deseados, mientras que "Spam" (la historia tiene algo que ver con una marca que hacía "Ham" malo) hace referencia a todo mail no deseado.

Cómo funciona

Bogofilter es un filtro bayesiano. Ni idea de qué significa eso, pero por lo que he podido ir observando, utiliza un sistema para puntuar cada palabra, y después calcula algún tipo de media con respecto a las palabras que hay (o algo así). Por ello, cada palabra recibe una puntuación. Este articulillo hará referencia a estas puntuaciones.

Histórico

¿No sentís curiosidad por saber si realmente se puede decidir si un mail es bueno o no por un conjunto de palabras? ¿No encontraremos palabras que son Ham y Spam al mismo tiempo? ¿Será eso lo corriente? Bueno, pues la manera de saberlo es simple:
 $ bogoutil -H ~/.bogofilter/wordlist.db
Histogram
score   count  pct  histogram
0.00   122021 61.10 ################################################
0.05      434  0.22 #
0.10      521  0.26 #
0.15      679  0.34 #
0.20     1118  0.56 #
0.25     1977  0.99 #
0.30      924  0.46 #
0.35     1845  0.92 #
0.40      712  0.36 #
0.45     4503  2.25 ##
0.50      558  0.28 #
0.55     5490  2.75 ###
0.60      507  0.25 #
0.65      577  0.29 #
0.70     1174  0.59 #
0.75      788  0.39 #
0.80      522  0.26 #
0.85      570  0.29 #
0.90      392  0.20 #
0.95    54405 27.24 ######################
tot    199717
hapaxes:  ham  109390 (54.77%), spam   31986 (16.02%)
   pure:  ham  121951 (61.06%), spam   54197 (27.14%)
Resulta curioso observar que el 61.20% de las palabras que recibo sólo se encuentran en correos Ham, y que el 27.24% sólo están en correos Spam. Así que se puede observar que es cierto que hay palabras que, directamente, deciden cuándo un correo es Spam. Fijaros que las concentraciones principales están en los extremos y el centro. Es lógico: los conectores (preposiciones, artículos, pronombres, ...) no serán decisorios.

¿Qué probabilidad hay de que "Sexo", "sex", "viagra", "ordenador" estén entre el spam

$ bogoutil -p ~/.bogofilter/wordlist.db
                                spam    good    Fisher
sexo
sexo                                3       3  0.558117
sex
sex                                25       0  0.999658
viagra
viagra                              2       3  0.457457
ordenador
ordenador                          21      48  0.356059
En cuanto introduzcáis la orden arriba citada, el cursor se quedará esperando que tecleéis las palabras a buscar o bien que pulséis CTRL+D para salir. Observando las estadísticas de arriba se observa que 3 buenos y 3 malos no son un 50%... Bueno, dije que bogofilter hacía "algún tipo de media", no la media aritmética :-D

Despedida

He escrito esto porque me parece curioso, no excesivamente útil. De todas maneras, permite comprobar que nuestro filtro bogofilter está funcionando realmente (y si no lo creéis, probad a mirar las posibilidades de una palabra y después marcad como spam un mail que la contenga). Espero que a alguien más también le parezca algo en lo que perder un ratejo ;)

Referencias

 $ man bogoutil

Cruzar el atlántico a nado... No tiene precio.

2007-03-30 magmax — [ edit | raw ]
  • tale
migrated from node/630
Sigamos la siguiente secuencia:
Leer más

TES: Emacs Server

2007-03-08 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/604
A menudo se nos abren muchos Emacs cuando sólo queremos tener uno, y se termina haciendo inusable. Si ya tenemos pestañas con el paquete tabbar, ¿para qué queremos tener varios emacs abiertos?

Ingredientes

Emacs ya trae los ingredientes que nos hacen falta hoy.

Servidor

Vamos a comenzar por la manera fácil: abrimos un Emacs y lanzamos la orden siguiente:
M-x server-start
Ya hemos arrancado un servidor en Emacs. También podemos ponerlo en nuestro .emacs haciendo que se arranque automáticamente mediante:
(server-start)

Cliente

Si tenemos un servidor es porque vamos a tener un cliente, como es lógico. En este caso se llamará emacsclient. En lugar de editar con "emacs", lo haremos con "emacsclient" y arreglado.

Cliente-Servidor todo en uno

Es un rollo eso de tener que decidir si vamos a utilizar emacs o emacsclient... ¡Yo sólo quiero un editor! Además el nombre de "emacsclient" es demasiado largo... Vamos a probar a hacer lo siguiente: Primero cerramos todos los emacs que tengamos abiertos, y después lanzamos las órdenes siguientes (espero que hayáis puesto el (server-start) en vuestro .emacs):
$ emacsclient -n -a /usr/bin/emacs  ~/.bashrc &
$ emacsclient -n -a /usr/bin/emacs  ~/.bash_profile &
¡La primera vez se ha abierto un Emacs y la segunda se ha reutilizado! Esto va mejorando, ¿no? Por cierto.. el -n es equivalente a --no-wait, para que no se quede pillao esperando a que cerréis el buffer y se os devuelva el control.

Más fácil. Más rápido

Ahora nos enfrentamos a una línea de órdenes atroz e insufriblemente larga que no vamos a volver a teclear en la vida. No problem. Siempre podemos hacernos un alias en nuestro .bashrc:
alias emacs=emacsclient -n -a /usr/bin/emacs
Existen otras dos formas que no he probado. La primera es utilizar la variable de entorno ALTERNATE_EDITOR y lanzar emacsclient todas las veces. La segunda está en un fichero que no sé cómo funciona llamado /etc/emacs.bash .

Referencias

El manual de Emacs.

Próxima semana:

La semana que viene veremos cómo funciona el sistema de comprobación ortográfica "al vuelo" que incorpora Emacs.

TES: Eliminar ficheros basura generados por Emacs

2007-02-26 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/589
Estaba harto de encontrarme ficheros ~, ## y .semantic por todas partes, y puede llegar a ser muy aburrido borrarlos periódicamente. ¡Tiene que haber alguna manera de optimizar esto! Y, efectivamente...

Ingredientes

Pues el Emacs. No más.

backups

Hoy vamos a tocar a saco el .emacs (recordad que en Windón es _emacs). Para empezar, veamos los backups, es decir, los ficheros ~. Éstos se crean como medida de recuperación ante fallos. Hay gente a la que le gustaría que no existieran. Hay gente que quiere más backups. Existe una variable llamada version-control que nos permite crear ficheros loquesea~1~ de tal manera que podamos tener más de 1 backup. Sus valores son t para que se hagan; nil para que no se hagan y t never que es lo mismo pero así, como con más énfasis: ¡que no pongas versiones!. Yo me quedo con una única versión, así que tengo:
(setq version-control t never)
Por si acaso, le digo también que me borre las versiones viejas:
(setq delete-old-versions t)

Situar ficheros

Vale, ahora ya se hacen los backups que yo quiero... Pero sigo teniendo los *~, #*# y *.semantic por todas partes:
(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))
(setq semanticdb-default-save-directory "~/.emacs_semantic/")
La primera instrucción indica dónde quiero que me deje los ~ y la segunda, dónde los .semantic. Es MUY IMPORTANTE que estos directorios existan. Además, hago que comiencen por punto, para que así existan, pero yo no los veo ;) La segunda de las instrucciones indica dónde debe dejar los .semantic, como es evidente. Y con esto tengo los directorios limpitos de basura (vamos, con la justa ;D )

Referencias

Aunque aún no lo he puesto, la referencia es obvia: El manual de Emacs.

Próxima semana:

A veces es un poco aburrido encontrarse con 20 Emacs diferentes abiertos, sobre todo cuando activamos la opción tabbar. Bien, pues hay una manera de hacer que se reutilice siempre el mismo...

Usar la librería libxml2

2007-02-20 magmax — [ edit | raw ]
  • recipe
migrated from node/522

libxml2 es una librería que facilita el manejo de los XMLs. La librería permite el acceso tanto para lectura como para escritura. Si dispones de DTD, también trae funciones para su uso.

Leer más

TES: Emacs bonito

2007-02-20 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/572
A menudo hay cosas que hacen de un editor algo más bonito: iluminar la línea actual, cambiar el color de fondo, algún iconillo... Pues Emacs no iba a ser menos, claro.
Leer más

Filtrar spam con Sylpheed y Bogofilter

2007-02-20 magmax — [ edit | raw ]
  • recipe
migrated from node/513

Leer más

afbackup

2007-02-20 magmax — [ edit | raw ]
  • recipe
  • Arco
migrated from node/509

Instalar una unidad de Backup con afbackup

Leer más

TES: Emacs Code Browser (ecb)

2007-02-12 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/553
Un IDE para unirlos a todos. Muy útil para C, C++, Java, ... Consiste en un conjunto de ventanas que nos permiten acceder directamente a código.

Ingredientes

Emacs, por supuesto, y el paquete ecb.

Activación

Escribiremos una orden Emacs. Para ello podemos pulsar ESC+x o bien M+x (que es, realmente, lo mismo) y después escribir:
M-x ecb-activate
Y veremos las pantallitas nuevas.

Más bonito

Existen distintos tipos de ventanas. Podemos cambiar entre ellos en "Options"->"Customize Emacs"->"Specific Option"->"ecb-layout-name". Si miráis abajo veréis todas las posibilidades. A mí me gusta "top1", aunque podéis ir probando...

Más rápido

A menudo es un rollo tener que estar activándolo y desactivándolo. Por ello me gusta tener accesos de teclado para estos menesteres. Para ello sólo hay que editar nuestro .emacs (al final, por ejemplo):
; Mis atajos de teclado
(global-set-key [f12] 'ecb-toggle-ecb-windows)
(global-set-key [C-f12] 'ecb-activate)
(global-set-key [M-f12] 'ecb-deactivate)
Las teclas que seleccionéis son opcionales. Con éstas podréis:
  • f12 Me permite mostrar/ocultar las ventanas cuando el modo ecb está activo.
  • C-f12 Me permite cargar el modo ECB sólo cuando yo quiero (así Emacs es más rápido en general).
  • M-f12 Sirve para descargar el modo ECB cuando me arrepiento (suelen ser pocas veces).

Referencias

Emacs Tips & Tricks

Próxima semana:

Suele ser útil saber en qué línea nos encontramos. Veremos cómo colorearla y otras opciones de color.

Fe de erratas

Gracias a Arturo: los comentarios del .emacs son con punto y coma (";"), no con la almohadilla ("#") que había anteriormente.

TES: Emacs con pestañas

2007-02-05 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/554
Con el epígrafe "TES" comenzaré una serie de articulillos sobre emacs. Se corresponden con las siglas "Truco Emacs de la Semana". Procuraré escribirlo todos los lunes, pero no aseguro nada. En esta ocasión, os explicaré cómo activar las pestañas (tabbar).
Leer más

Richard Stallman, socio del Betis (broma del 28-diciembre?)

2006-12-28 magmax — [ edit | raw ]
  • new
migrated from node/478

Básicamente es que si no pongo aquí la tontá, reviento.

Leer más

"¿Cree que la administración debería usar software libre en vez de programas comerciales?"

2006-11-18 magmax — [ edit | raw ]
  • tale
migrated from node/452
El periódico "El país" está haciendo una encuesta sobre la pregunta "¿Cree que la administración debería usar software libre en vez de programas comerciales?.
Leer más

Comparar ficheros

2006-09-04 magmax — [ edit | raw ]
  • tale
migrated from node/391
A menudo es necesario comparar ficheros. Existen numerosos programas; pero me encuentro con que cada uno de ellos tiene un problema que hace que no me solucione la vida en todas las ocasiones. Se me ha ocurrido comentarlo aquí para ver si entre todos podemos aportar ideas.

DIFF

  • Paquete Debian.
  • Interfaz: ascii. No es interactivo.
  • Repositorios: No.
  • Compara binarios: Sí (-a)
  • Máximo ficheros: 2
  • Hexadecimal: No?
  • Ebcdic: no
  • Licencia: GPL
  • Permite edición: No
  • Automatizable: Sí
  • Genera patches: Sí

MELD

  • Paquete Debian.
  • Interfaz: GTK
  • Repositorios: CVS/SVN (limitado)
  • Compara binarios: No
  • Máximo ficheros: 3
  • Hexadecimal: no
  • Ebcdic: no
  • Licencia: GPL
  • Permite edición: Sí
  • Automatizable: No
  • Genera patches: No?

VBINDIFF

  • Paquete Debian.
  • Interfaz: ascii
  • Repositorios: no.
  • Compara binarios: Sí
  • Máximo ficheros: 2
  • Hexadecimal: Sí
  • Ebcdic: sí
  • Licencia:GPL
  • Permite edición: No
  • Automatizable: No
  • Genera patches: No?
  • Bugs: da problemas con más de 4Gb

Tabla comparativa

.deb Ifaz Repos Bin Max Fich Hex EBCDIC Licencia Edit Auto Patch Comentarios
DIFF sí ascii no sí (-a) 2 no? no GPL no sí sí
MELD sí GTK CVS/SVN no 3 no no GPL sí no no
VBINDIFF sí ascii no si 2 sí sí GPL no no no? Puede dar problemas con más de 4 Gb.
(aquí me falta una leyenda de lo que he puesto en la tablica)

Otras notas

Se agradece vuestra colaboración, aportando nuevos comparadores así como otras características por la que compararlos entre sí (qué paradoja ;)). Poco a poco los iré añadiendo al artículo. En cuanto pueda haré una tablita comparativa.

Enlace

Hace ya algún tiempo que comencé esta receta... y hoy me encuentro esto en la wikipedia, que no deja de sorprenderme. Ale, el trabajo ya estaba hecho ;)

Agradecimientos y colaboradores

  • Arturo

Recordar fechas y cumpleaños con 'birthday'

2006-07-28 magmax — [ edit | raw ]
  • recipe
migrated from node/361
¿Se os olvidan los cumpleaños de vuestros amigos? ¿No recordáis cuándo son las fiestas? ¡En 5 minutos podéis solucionarlo!

Material

Necesitaremos instalar el paquete birthday en la máquina que más habitualmente utilicemos:
# apt-get install birthday

Configuración

Editaremos un fichero que no existe aún: ~/.birthdays. Yo recomiendo crear una carpeta (por ejemplo ~/.birthday) donde organizar un poco mejor todos los cumpleaños y eventos. Luego comentaré cómo lo tengo yo configurado. El formato de este fichero es lo mejor: sencillo. consiste en poner lo que quieras, un igual (=) y la fecha en formato dd/mm, dd/mm/yy o bien dd/mm/yyyy. Ya está. Acordaros de pulsar un intro al final o se os comerá la última de las letras :-D. Ejemplito:
Pepito=15/12/1978
Fulanito=01/09/1977
Cuando hayáis metido 2 ó 3 (que sucendan en las próximas 3 semanas, por favor), probad a ejecutar
$ birthday
Os mostrará los eventos de las próximas 3 semanas.

Mi configuración

Dado que el ficherito ~/birthdays te permite incluir ficheros, el mío sólo contiene inclusiones. Las fechas se encuentran en varios ficheros dentro del directorio ~/birthday, donde tengo los ficheros "amigos", "familia" y "fiestas" (éste último os lo podéis bajar más abajo). ¿Y cómo hago para que no sea muy pesado pero me avise antes de que ocurran las cosas? Pues metiéndolo en mi .bashrc. De esa manera, cada vez que abro una consola me aparecen 3 ó 4 líneas con los próximos eventos :-D.

Comentarios

Vaaaale, sí. Ya sé que este truco no os va a salvar la vida y que posiblemente no os importe un carajo, ¿pero cuántos de vosotros conocíais este paquetito? El caso es que me he picao y ya he comenzado a hacer un programita similar, con idiomas, compatible pero ampliable. En python, por supuesto. Le meteré alguna opción para colorines y esas cosas.

Referencias

Pues.... las páginas man de birthday.

Arreglar gnome-terminal que no muestra tildes ni eñes

2006-07-27 magmax — [ edit | raw ]
  • recipe
  • gnome
migrated from node/360
Desde hace algún tiempo (acabo de descubrir que muy posiblemente desde GNOME 2.14), el terminal de GNOME me muestra las tildes, eñes y otros caracteres como caritas. Aunque al principio resulta gracioso, terminas cansándote :-D. Aquí lo arreglaremos de la manera más sencilla.

Arreglarlo

Para arreglarlo basta con editar el fichero ~/.dmrc y añadir al final la línea Language=es_ES.iso88591. Si lo preferís, basta con ejecutar lo siguiente:
$ echo "Language=es_ES.iso88591" >> .dmrc

¿Qué estaba pasando?

Lo que pasa es que en los GNOMEs anteriores se tomaban las locales del sistema, pero parece que en las últimas no lo hace muy bien. Por ello, al fallar la carga, tomaba las locales por defecto, es decir, ANSI_X3.4-1968 que no tiene tildes y demás. Yo sabía que se podía cambiar en el menú del gnome-terminal, en "terminal"->"Establecer codificación de caracteres", pero es un rollo tener que hacerlo para cada pestaña del gnome-términal. Así, sólo lo hacía cuando tenía que leer algo un poco grande :-D Editando el fichero .dmrc le decimos a GDM cuál es el "encoding" que queremos utilizar, puediendo elegir entre los que configuramos con el paquete locales. Para cambiar los "encodings" compilados en "locales", se hace así (los chicos de UBUNTU no sé cómo leches lo hace, pero en Debian se hace así):
# dpkg-reconfigure locales
Y para saber cuáles son los disponibles (qué cadenitas poner en "Language=XXXXXXX"), basta con hacer:
$locale -a

Enlaces

Llevo buscando bastante tiempo, y al final lo encontré en el blog de David Pashley. Este documento es, básicamente, una transcripción de lo que se comenta en el enlace.

Introducción al Proceso Software Personal (Humphrey)

2006-07-17 magmax — [ edit | raw ]
  • recipe
migrated from node/347
Desde hace bastante tiempo estoy tratando de iniciarme en el Proceso de Software Personal. Estuve leyendo un libro bastante pesadete sobre este tema y, aunque me motivó bastante, no conseguí llevarlo a cabo. Parece que he encontrado un nuevo libro que me ha facilitado el paso. Trataré de escribir aquí mis conclusiones y facilidades para seguirlo.
Leer más

La UCLM llega a UBUNTU.

2006-06-23 magmax — [ edit | raw ]
  • new
migrated from node/337
Cuando he abierto mi aptitude en UBUNTU para actualizarme y he visto los paquetes nuevos que han metido en EDGY me he llevado una grata sorpresa al descubrir que el maintainer tenía una dirección @uclm.es.
Leer más

Backup para móviles Siemens

2006-06-13 magmax — [ edit | raw ]
  • recipe
migrated from node/331
Tengo un siemens, y me gusta hacer backups periódicos. La perioricidad es variable (cuando me quedo sin memoria para los mensajes), pero me gusta que sea sencillo. Aquí tienes un pequeño script que usa scmxx.

Qué necesitamos

Necesitamos un cable y un móvil soportado por scmxx. También necesitaremos scmxx, por supuesto.

El script

Sin más, ahí va:
#!/bin/bash

DIR=`date +"%Y%m%d"`
SCMXX_TTY=/dev/ttyUSB0

MEMS="FD SM ON LD MC RC OW SD MS CD BL RD CS VCF"

mkdir $DIR

scmxx --get --pbook --sms --slot=all --out=$DIR/sms.p

for i in $MEMS;
do
  scmxx --get --pbook --mem=$i --out=$DIR/$i.p ;
done

Configurar el script

Como podéis ver, el script crea un directorio con la fecha actual, dentro de la que meterá un montón de ficheritos terminados en .p. Éstos tendrán el contenido de cada una de las memorias. Pero... ¿Cómo sabemos qué memorias debemos consultar? Es fácil: basta con hacer:
$ scmxx --info
En caso de que no encuentre nuestro móvil, el problema está en el puerto donde lo conectamos. Por ello, recomiendo que establezcamos la variable de entorno SCMXX_TTY. Como en mi caso está en el USB, el valor de esta variable debe ser /dev/ttyUSB0. Se puede indicar en línea de órdenes, pero me falla bastante. Poco más que decir. Existe un GUI para scmxx (gscmxx) pero es "más malo" que un dolor de muelas (por el momento).

El día de la bestia.

2006-06-06 magmax — [ edit | raw ]
migrated from node/326
A menudo nos encontramos con noticias del tipo "hoy se acaba el mundo", debido a diferentes motivos sumamente importantes como que la fecha es el 1999-12-31, un eclipse lunar o a que ayer nos cruzamos con un gato negro. En fin... Que resulta sorprendente que no haya ninguna noticia del fin del mundo para hoy, día 2006-06-06 :-D Pues eso, chicos, que hoy es día 666. ¡Pasad un buen día!
Leer más

Defectuoso por diseño

2006-06-06 magmax — [ edit | raw ]
  • new
migrated from node/327
Me hago eco de una noticia de gnuticias.com: defective by design. La Free Software Fundation (FSF) ha lanzado una campaña denominada "defective by design" ("defectuoso por diseño") donde os podéis bajar diseños de pósters, camisetas, ... en contra del DRM.
Leer más

Arreglar Emacs sin fuentes

2006-04-28 magmax — [ edit | raw ]
  • recipe
  • emacs
migrated from node/292
Recientemente he perdido las fuentes de mi querido Emacs. Estaban ahí, y de repente sólo me aparecían cuadritos de colores (muy monos, eso sí, de colores y todo). Sin embargo, por fin, he encontrado una solución, aunque sea temporal.

Solución provisional

Qué fuentes tienes en el sistema

Lo primero es saber qué fuentes tienes en el sistema. Para ello basta ejecutar:
xlsfonts
Eso sí... preparaos para una salida laaaaarga.

Una fuente para Emacs

Ahora basta con decirle a Emacs la fuente que quieres. A mí me ha gustado una courier (se parecía bastante a la que tenía antes):
emacs -font -adobe-courier-medium-o-normal--12-120-75-75-m-70-iso8859-1

Escribir menos

Como escribir esa parrafada cada vez es un rollo... pues vamos a hacerle un alias. Para ello editamos el fichero .bashrc y le añadimos la línea siguiente:
alias emacs="emacs -font -adobe-courier-medium-r-normal--14-140-75-75-m-90-iso10646-1"
Y conseguimos que Emacs se abra con esa fuente. No es lo mejor, pero funciona.

Tu GNU/Linux siempre en hora (y con tiempo contínuo) con NTP

2006-04-27 magmax — [ edit | raw ]
  • recipe
migrated from node/291

Ciertas tareas dependen del tiempo para funcionar (por ejemplo, el salvapantallas, make, cron, …). Es interesante no tener que preocuparse de la hora del sistema, así como que la hora no cambie bruscamente. ¡Y es muy fácil!

Paquetes necesarios

Sólo necesitaremos un paquete: ntpdate. En nuestro sistema basado en Debian es tan sumamente complicado como de costumbre:

# apt-get install ntpdate

Explicación

En el mundo hay una serie de relojes de alta precisión (relojes atómicos) que son los que de verdad llevan la hora del mundo (¿u os pensábais que lo hacía el reloj de la Puerta del Sol? :P). Mediante fibra óptica, están conectados una serie de servidores de acceso restringido. A éstos, se les conectan una serie de servidores de acceso restringido… y así un par de niveles más, hasta que llegan los servidores públicos. Así hay muchos y no los sobrecargamos.

Cada vez que un host intenta sincronizarse lo que se hace es lanzar varias peticiones, calcular el tiempo de retardo existente debido a la red, tomar en cuenta varios factores y estimar la hora real. El error es mínimo (salvo algunas veces que casca todo el sistema y te pone la hora del día anterior, como me ha pasado hace un rato).

Así, groso modo -como mandan las recetas- es como funciona.

Tiempo lineal

Algunos programas pueden tener problemas con los saltos de tiempo misteriosos. Este es el caso del salvapantallas, por ejemplo: si lo tenemos puesto cada 10 minutos y adelantamos el reloj 1 hora, salta. Cron también puede tener problemas: si en nuestro PC de casa tenemos la tarea “salvar_el_mundo” programada para las 13:45 y a las 13:30 cambiamos la hora a las 14:30, la tarea no se ejecutará, con resultados desastrosos.

Por ello conviene que nuestro PC no se salte ni un minuto, ¿no creéis?

Pues hacerlo es tan sencillo como cambiar la configuración de ntpdate, que se encuentra en el fichero /etc/default/ntpdate, y añadirle a la línea “NTPOPTIONS” la opción “-B”. A mí me quedaría así:

# servers to check.   (Separate multiple servers with spaces.)
NTPSERVERS="pool.ntp.org"
#
# additional options for ntpdate
#NTPOPTIONS="-v"
NTPOPTIONS="-u -B"

Y, ahora, el mundo está a salvo (aunque en algunos casos nuestro PC puede tardar horas semanas en sincronizarse…) ;D

Lo que ocurre ahora es que los minutos de nuestro PC son más lentos/rápidos que los habituales, pero eso no significa que nos saltemos ni un segundo ;)

rdate

Servidores:

  • tick.uh.edu

Referencias

  • Managing Accurate Date and Time

Usuario de Evolution harto de spam.

2006-03-29 magmax — [ edit | raw ]
  • recipe
migrated from node/271
¿Usas Evolution y aún tienes Spam? ¿Quieres eliminarlo de una vez por todas? Bien... La verdad es que aún no lo he conseguido, pero estoy tras la pista. A ver si entre todos conseguimos quitarnos de enmedio el molesto spam.
Leer más

Depurar un programa (C, C++, ...)

2006-03-25 magmax — [ edit | raw ]
  • recipe
migrated from node/267
Ante las preguntas realizadas por Oscar sobre el uso de GDB y problemas con el famoso "segmentation fault", me he decidido a hacer un pequeño manual de GDB y otras herramientas útiles para el depurado. Seguramente se me queden muchas cosas en el tintero, pero todos sabemos que las recetas no están cerradas cuando se publican. Se agradecerán todos los comentarios.

gdb

GDB o el GNU DeBugger, es el programa usado para depurar los programas en GNU/Linux. No es el único, pero sí uno de los más potentes, sobre todo para programas escritos en C y C++. Para poder utilizar todas sus características, será necesario que, durante la compilación, dejemos información de depurado en el ejecutable. Si estamos utilizando gcc o cc, esto se hace mediante la opción -ggdb. ¡Ya tenemos nuestro fichero preparado para ser depurado! Ahora basta utilizar la orden:
 $ gdb ejecutable
y se nos abrirá la línea de órdenes de gdb (todo en modo texto, claro). Hay que tener en cuenta una cosa: cuando un programa falla, puede deberse a un error o bien a los efectos colaterales de un error. Me explico con un ejemplo: si tenemos un puntero no inicializado y le asignamos un valor, puede que dé error o puede que no (depende de dónde esté apuntando); por ello puede dar el problema más adelante (esto se conoce como el "Síndrome del puntero loco" entre los coleguitas :-D). Por ello, es interesante no pensar que gdb te dice "aquí está el problema", sino "el problema está por aquí", que es muy diferente.

Uso de GDB

gdb es bastante complejo, y sólo detallaré aquí los pasos iniciales para debugar el típico "hola mundo". Primero, cargaremos el ejecutable compilado con las opciones de debug "-ggdb":
 gdb ejecutable
Se nos inicia la línea de órdenes gdb. Lo primero, será poner un punto de ruptura ("Breakpoint"). Se puede poner en una línea determinada o bien en una función. Dado que nuestro programa "hola mundo" es pequeñín y no sabemos dónde pusimos el main, plantamos la ruptura en el propio main:
 gdb> br main
Y lo siguiente es ejecutar el programa:
 gdb> r
Así que se parará en la primera instrucción del main. Ahora podemos utilizar una serie de argumentos que explicaré brevemente:
  • p "print" imprime el valor de una variable.
  • d "display" igual que print, pero se muestran cada vez que pulsemos "s" o "n".
  • n "next" Continúa con la siguiente instrucción de la función actual
  • s "step" Continúa con la siguiente instrucción de la que se tiene información de depurado (si hay una llamada a función, entrará dentro).
  • c "continue" continúa la ejecución del programa.
  • h "help" muestra la ayuda

GNU/Emacs

GDB sólo es muy poco amigable, así que yo prefiero utilizarlo junto con GNU/Emacs. Gano dos cosas, principalmente: ver el código y coloreado del mismo. Para ello, basta con pulsa ESC+x (o M+x) y escribir la orden "gdb". Emacs nos pedirá el resto de la línea de órdenes, donde pondremos el nombre del ejecutable y del core (si es que existe). Cuando lo tengamos, nos aparecerá una pantalla tipo terminal igual que si hubiéramos iniciado gdb en una consola, pero cuando comencemos a trazar el código se nos dividirá la pantalla en dos, mostrando en el otro lado el código (con una flechita muy molona que nos cuenta por dónde vamos).

ddd

Aunque muchas veces uso Emacs con gdb, debo admitir que mi favorito es ddd. Su instalación es realmente compleja:
 # apt-get install ddd
Seguro que los de Windows lo tienen más fácil. Bien. El caso es que la pantalla se divide en tres partes (si no es así mira las opciones del menú "View") en las que tenemos, de arriba abajo: datos, código y terminal gdb. Precioso. Si cargamos un programa con opciones de debug ("-ggdb") podremos ver cómo se mueven los punteritos, cómo cambian las direcciones a las que apuntan, cómo se construyen las estructuras, ... Vamos, muchas cosas que nos cuentan pero no se ven ;) Y, a parte de los menús TK pseudo-molones, siempre tenemos la parte de abajo con un gdm normal. NOTA He observado un comportamiento extraño al pulsar con el ratón en la zona de datos o en la de GDB, ya que toma las teclas que pulses como entradas de la pantalla GDB, pero no funcionará el intro. Sin embargo, si pulsas directamente sobre la ventana de código, te funciona todo igual y el intro sí va. No me preguntéis porqué es así, pero ocurre. Seguramente esto sea así porque lo tenéis configurado de esta manera. Para solucionarlo, tenéis que ir a "Edit"->"Preferences", y en la pestaña "Startup" veréis que pone "Keyboard focus a)Point to Type b) Click to Type". Os podéis imaginar: seleccionáis si queréis que el foco se obtenga cuando el puntero del ratón está justo encima (bastante molesto) o os hace falta hacer click para dar el foco (molesto, pero no tanto).

COREs

Una gran ayuda frente a los "segmentation faults" son los archivos COREs. Te preguntarás dónde andan, claro :-D pues no andan por ningún sitio porque los tienes desactivados. Para activarlos, sólo tienes que hacer:
 $ ulimit -c unlimited
Cuando vuelvas a ejecutar el programa te pondrá "segmentation fault (core dumped)". Genial. Ahora ejecuta gdb de la siguiente manera:
 $ gdb ejecutable core
y puedes ver dónde cascó exactamente con la orden de gdb "whereis", que te mostrará la pila. Acuérdate de volver a quitar el límite de los cores o te ocuparán espacio en el disco duro (y no poco):
 $ ulimit -c 0

Más información

  • Páginas "man" de gdb, ddd, ...

El reto de la semana (3)

2006-03-07 magmax — [ edit | raw ]
  • challenge
migrated from node/252
A ver... que estamos muy paradetes... El problema consiste en hacer un programa C que permita conocer el endian de la máquina en que se ejecuta. Fácil, fácil, ¿eh? ¿Sabríais hacerlo en otros lenguajes (Java, por ejemplo)?
Leer más

Nautilus con samba

2006-03-06 magmax — [ edit | raw ]
migrated from node/249
Necesitaba acceso a samba desde nautilus y no lo conseguía. Ya tengo la solución:
# apt-get install libsmbclient libgnomevfs2-extra
Y ya se puede acceder a las anticuadas redes Mindows mediante smb:// en en queridísimo nautilus :-D

Aplicaciones multilingües: gettext

2006-01-26 magmax — [ edit | raw ]
  • recipe
migrated from node/203

A menudo se piensa que una aplicación estaría mucho mejor si se encontrara en varios idiomas. Podemos pensar en distintas formas de soportar esto, pero otros ya lo han pensado por nosotros y han creado las fabulosas herramientas gettext. Este documento pretende ser una guía para el uso rápido (rápido de verdad) de estas herramientas.

Ingredientes

  • gettext

Modificaciones en el código

Lo primero es acordarse de evitar cadenas sin más (al menos las que se muestran) en nuestro código. Ahora importaremos la librería gettext y utilizaremos la función gettext. Se encuentra disponible para numerosos lenguajes, aunque aquí se explicará con ejemplos en python (las diferencias serán mínimas en el resto de lenguajes).

En Python queda así:

import gettext
gettext.textdomain("programita")
gettext.bindtextdomain("programita", "./mo")
gettext.gettext("hello, world!")

No os asustéis: Las funciones “textdomain” y “bindtextdomain” sirven para decirle a gettext dónde se encuentran las traducciones. Aquí se está poniendo un ejemplo, así que sustituid “programita” por el nombre de vuestro programa, y “./mo” por el directorio donde vamos a meter las traducciones.

A menudo, además, se suele importar la función gettext cambiándole el nombre a algo más sencillo como la barra baja. De esta manera, nos evitamos tener que escribir “gettext.gettext” cada vez. Para hacer esto hay distintas maneras, una de ellas es durante la importación:

from gettext import gettext as _

Generación de la plantilla de traducción (.pot)

Podemos obtener la plantilla del código en casi cualquier lenguaje: C, C++, Python, Perl, Glade, Java, … Y se hace así:

$ xgettext --language=Python -j programita.py

Las opciones son: —language indicando el lenguaje del código, y -j que indica que, si hay ya un .pot existente, se deben mezclar los mensajes.

Si hemos usado algún cambio y no aparece la función como “gettext”, será necesario usar también la opción —keyword. Por ejemplo:

$ xgettext --language=Python -j -k _ programita.py

Ale, ya tenemos el messages.pot.

Generar el fichero de traducciones (*.po)

Ahora se utiliza el messages.pot para generar cada plantilla. Nosotros queremos la traducción al castellano, así que será es.po:

$ msginit -i messages.pot -o es.po

Ahora viene la parte en la que editamos el fichero es.po (yo suelo usar gtranslator o kbabel) y demás.

Mezclar el fichero de traducciones (.po) con una nueva plantilla (.pot)

Este sistema sería poco eficiente si tuviéramos que traducirlo todo de nuevo cada vez que se cambie el fuente. Por ello, hay un sistema por el que se mezcla el fichero ya traducido con la plantilla nueva (es decir: volvemos al paso de creación de plantilla y después ejecutamos esto):

$ msgmerge -U es.po messages.pot

Y, nuevamente, volvemos a traducir :-D

Creación del fichero de equivalencias (.mo)

Realmente, el ficherito .po no se utiliza en el ejecutable. Es necesario utilizar un ficherito .mo. Aquí crearemos nuestro es.mo, como es lógico:

$ msgfmt es.po mo/es/LC_MESSAGES/programita.mo

Como podéis observar, el resultado lo dejamos en mo/es/LC_MESSAGES/. Eso lo hacemos así porque en el código fuente dijimos que las traducciones colgarían del directorio mo, el idioma es Español (las locales son “es”), y porque todos los .mo deben colgar de un directorio LC_MESSAGES dentro de las locales para que sea encontrado correctamente.

Utilización

Ya está. No hay nada más que contar. Si las locales son “es”, escribirá nuestra traducción, y si son “en”, lo escribirá en inglés. Eso es todo.

Ejemplo

Veamos un ejemplo, sugerencia hecha por david.villa:

#!/usr/bin/python

import gettext

APP = "hello"

gettext.textdomain ( APP )
gettext.bindtextdomain ( APP, "./mo" )

_ = gettext.gettext

print _("hello, world!")

Como requisito, necesitaremos el directorio donde vamos adejar las cosas. En el código hemos puesto “./mo”, así que hay que ser consecuentes:

$ mkdir -p  mo/es_ES/LC_MESSAGES

Ahora inicializamos (llamaremos al .pot "messages.pot:

$ xgettext --language=Python --keyword=_ -o messages.pot hello.py

Y generamos nuestro primer .po:

$ msginit -i messages.pot -l es_ES

Editamos el archivo es.po que se nos habrá creado, traduciendo la única cadena. Mi archivo pinta así:

# Spanish translations for PACKAGE package.
# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# miguel <miguelangel.garcia@gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-05-25 07:31+0200\n"
"PO-Revision-Date: 2010-05-25 07:32+0200\n"
"Last-Translator: miguel <miguelangel.garcia@gmail.com>\n"
"Language-Team: Spanish <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#: hello.py:12
msgid "hello, world!"
msgstr "hola, mundo!"

Por ahora no nos fijaremos mucho en las cosa que deberíamos cambiar, como el PACKAGE y demás. Sólo nos queda compilar:

$ msgfmt -o mo/es_ES/LC_MESSAGES/hello.mo es.po

y probarlo:

$ LANG=es_ES ./hello.py
hola, mundo!
$ LANG=en_US ./hello.py
hello, world!
$

¡¡Gracias, David, por tu propuesta!!

Referencias

  • Manual de gettext
  • Traducir aplicaciones PyGTK/Glade

"El reto de la semana", 1ª edición

2006-01-16 magmax — [ edit | raw ]
  • challenge
migrated from node/191
Hola a todos.
Leer más

Creación de paquetes Debian binarios

2006-01-11 magmax — [ edit | raw ]
  • recipe
  • Debian-devel
migrated from node/177
A menudo resulta interesante crear un paquete debian de un programa, para su sencilla instalación/desinstalación. Esta receta, inicialmente escrita por Fernando Rincón, explica cómo hacer lo básico en pocos pasos.

Generación de la estructura de directorios

En primer lugar debe crearse un directorio de trabajo (debian), a partir del cual se generará la estructura de directorios del paquete, considerando que el directorio de trabajo es el directorio raíz. A continuación se distribuirán los archivos que forman parte del paquete en los subdirectorios correspondientes. Si se desea instalar el fichero mi_ejecutable en la ubicación /usr/bin/mi_ejecutable, la estructura del directorio de trabajo debería ser la siguiente:
./debian/usr/bin/mi_ejecutable

Generación de los ficheros de control

Hay varios tipos de ficheros de control. El fichero control propiamente dicho indica las características y dependencias del paquete. Los ficheros preinst, postinst, prerm y postrm son los scripts que se ejecutan durante la instalación, la actualización y el borrado de un paquete, para la configuración/desconfiguración de los programas incluidos en el paquete (Ver sección 6 de [3]). Los ficheros de control deben almacenarse en la siguiente ubicación:
debian/DEBIAN

El fichero Control

Para la generación del paquete es imprescindible la creación de un fichero de control (también llamado control), en el que se indicará el nombre del paquete, la versión, la sección a la que pertenece, la prioridad de instalación, etc ... La descripción exacta del contenido de cada campo puede encontrarse en la sección 3 de [3]. Por ejemplo:
Package: linuxstatus
Version: 1.1-1
Section: base
Priority: optional
Architecture: all
Depends: bash (>= 2.05a-11), textutils (>= 2.0-12), awk, procps (>= \
1:2.0.7-8), sed (>= 3.02-8), grep (>= 2.4.2-3), coreutils (>= 5.0-5)
Maintainer: Chr. Clemens Lee 
Description: Linux system information
 This script provides a broad overview of different
 system aspects.

Configuración mediante debconf

Debconf proporciona una base de datos con un frontend que facilita el proceso de configuración de un paquete recién instalado o actualizado. Se basa en el uso de una serie de reglas que definen las preguntas a realizar al usuario, y el tipo de valores que

Construcción del paquete

Desde el directorio inmediatamente superior al directorio de trabajo debian debe ejecutarse:
$ fakeroot dpkg-deb --build debian .
Esto generará un paquete con el nombre __.deb.

Referencias

  • [1] Debian Binary Package Building HOWTO [en]
  • [2] Debian New Maintainers' Guide [en]
  • [3] Debian Policy Manual [en]
  • [4] The Debconf Programmer's Tutorial [en]
  • Debian Packaging [en]
  • Creación de paquetes de Debian [es]
  • Create Debian Linux packages [en]
  • Como crear un paquete de Debian sin software de ayuda [es]

Más información

El manual para mantenedores Debian está disponible en castellano y es paquete deb: maint-guide-es.

Autoría

La receta original se publicó en la web del Grupo ARCO. Su autor fue Fernando Rincón. Yo tan sólo la he transcrito a Crysol.

Tonterías de la propiedad intelectual.

2006-01-07 magmax — [ edit | raw ]
  • tale
migrated from node/173
Mirando en la biblioteca de mi padre me he llevado una sorpresa mayúscula al encontrarme un libro sobre las leyes de Murphy. En el prefacio, te explica que han hecho recopilación de todas las que han encontrado (y se ve claramente que han buscado en google). El libro consiste en una lista interminable de frases relacionadas con la ley de Murphy, pero, en la primera página pone eso de "El contenido de este libro no podrá ser reproducido, ni total ni parcialmente, sin el previo permiso del editor". ¿Significa ésto que no puedo utilizar las frases que vienen dentro, aunque éstas no sean del autor del libro?
Leer más

Sistema Híbrido: Paquetes de distintas "releases" con apt

2006-01-07 magmax — [ edit | raw ]
  • recipe
migrated from node/172
¿Nunca habéis deseado probar un programa de una distribución más inestable sabiendo que podéis volver atrás? ¿Nunca habéis tenido que recurrir a una versión anterior de ningún paquete? Pues existía una manera más fácil, y aquí os explico cómo.

Asunciones

Asumiremos que tenemos instalada una "unstable", pero queremos tener acceso a algunos paquetes de "experimental" y... bueno, ya que nos ponemos, también de "stable" y "testing", pero con menor prioridad.

Configurar la "release" por defecto

Editáis el fichero (si no existe lo creáis) /etc/apt/apt.conf y añadís la línea:
APT::Default-Release "unstable";

Configurar las otras distros

APT ya sabe cuál es la distro que queremos tener instalada, pero hay que decirle que existe más mundo. Para ello se utiliza el fichero /etc/apt/preferences:
Package: *
Pin: release o=Debian,a=unstable
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 400

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 300

Package: *
Pin: release o=Debian,a=stable
Pin-Priority: 200

Package: *
Pin: release o=Ubuntu
Pin-Priority: -1
NOTA: No, aún no lo he probado. Debo advertir que las prioridades son bastante curiosas y hay que tener cuidadín:
  • < 0: La versión no se instalará jamás.
  • 0 - 100: El paquete no se reemplazará por una versión superior. Los paquetes instalados tienen prioridad 100.
  • 101-500: La versión se instala si es más moderna que la existente y no existe ningún ejemplar en la versión objetivo.
  • 501-1000: La versión se instala aunque no esté en la distro por defecto.
  • 1000: La versión se instalará a toda costa, incluso si es inferior a la actual.
Típicamente se utilizan los valores -1, 100, 500, 900 y 1001. Lo de bloquear Ubuntu no es por mala leche: a menudo suele dar problemas mezclar paquetes. Cada uno que haga lo que quiera.

Editar sources.list

Claro, nos falta editar el sources.list y añadir todos los repositorios que nos dé la gana. Ya sabemos que no se va a instalar nada "extraño" (siempre que no metáis repositorios "extraños").

Cómo usarlo

Muy fácil: Para los paquetes de la distribución por defecto, como siempre:
apt-get install lo-que-sea
Para el resto, también fácil (donde pongo "experimental" poner el nombre de la distro):
apt-get install -t experimental lo-que-sea
Todos ellos se "updatean" a la vez por el método habitual.

Otras referencias

Me disponía a escribir esta receta basándome en un ejemplo que tenía por algún lado. No he encontrado el ejemplo, pero sí un documento titulado Jugando con APT, que explica cómo hacer lo mismo para Ubuntu. También están interesantes el Manual de APT y un documentillo que he encontrado titulado Using APT with more than 2 sources, este último en inglés, claro.
  • http://www.esdebian.org/articulos/24672/apt-pinning

Usabilidad que no entiendo.

2006-01-05 magmax — [ edit | raw ]
migrated from node/168
Llevo utilizando ordenadores casi toda mi vida, y a veces me parece increíble que aún se sigan cometiendo fallos de usabilidad tan simples. Se me ha ocurrido que puede ser buena idea exponerlos aquí. Por ello, he creado una lista con los primeros que se me han ocurrido; la intención es hacer crecer esta lista con aquéllos que pongáis en los comentarios y con los nuevos que me vaya encontrando.
Leer más

SQL básico

2005-12-23 magmax — [ edit | raw ]
  • recipe
  • MySQL
migrated from node/163
Pretendo ofrecer una lista de los formatos de las instrucciones más comunes en SQL.
Leer más

Increíble, pero cierto.

2005-12-20 magmax — [ edit | raw ]
  • tale
migrated from node/160
A veces lo flipo. No suelo comentar lo que veo, pero esta vez ha podido conmigo.
Leer más

Merry Chrismas and a happy GNU year!!!

2005-12-13 magmax — [ edit | raw ]
migrated from node/152
Pues eso, que Merry Chrismas y que un happy GNU year a todos, por si se me pasa luego :-D

Pollo a la cebolla

2005-12-06 magmax — [ edit | raw ]
  • cooking
migrated from node/142
Bueno, bonito, barato y rápido de hacer.

Ficha

  • Tiempo: 20 Minutos
  • Coste: 5 Euros.
  • Comensales: 4
Leer más

Berenjenas rellenas

2005-12-06 magmax — [ edit | raw ]
  • cooking
migrated from node/141
Si le cogéis un poco el tranquillo, os chuparéis los dedos.

Tiempo requerido

90 Minutos

Coste

8 Euros.
Leer más

Abrir una sesión X en otra máquina

2005-11-27 magmax — [ edit | raw ]
  • recipe
migrated from node/120
Las X-Windows de los sistemas Unix tienen una arquitectura cliente-servidor. Aunque lo habitual es que los programas que vemos se ejecuten en nuestra máquina, es perfectamente posible abrir una sesión X en una máquina distinta mediante XDMCP

Configuración

Edita el fichero /etc/gdm/gdm_conf de la máquina que ejecuta el servidor X. Busca la sección [xdmcp], y activa la opción enable=true. Es muy recomendable dejar la opción: AllowRemoteRoot=false para evitar problemas de seguridad. Esto es válido si se usa gdm como gestor de conexión. Si usas kdm o xdm la configuración puede variar. Ahora busca la sección [server-Standard] y edita la opción command para que NO incluya el argumento -nolisten tcp. Quedará algo como:
command=/usr/X11R6/bin/X -deferglyphs 16 -audit 0

Conexión

Para conectar, bastará con escribir en la consola:
user@client:~$ X :0.1 -query [server_host]
user@client:~$
El 0.1 indica el display y el screen. Normalmente variará entre 0.0, 1.0, 2.0 y 3.0, y se podrá acceder, respectivamente, con F7, F8, F9 y F10.

Varias sesiones X en la misma máquina

Puede ser interesante tener una o varias sesiones X adicionales en la máquina local. Por ejemplo, con:
$ xinit -- :1
se abre un segundo cliente X (en F8) que ejecuta únicamente un x-terminal, pero sin gestor de ventanas ni de escritorio.

Sesión X anidada

Si en lugar de utilizar el comando X usa Xnest consigue el mismo efecto que en los ejemplos anteriores, pero en lugar de tener un terminal gráfico a pantalla completa obtiene una ventana del tamaño adecuado.
user@client:~$ Xnest :1 -query [server_host]

Referencias

  • Ejecución de aplicaciones X remotas y configuración de un X Terminal
  • Wikipedia :: XDMCP

Empezar en Zope (Plone)

2005-11-20 magmax — [ edit | raw ]
  • recipe
migrated from node/109
OBSOLETA: Mira Debian Plone en 5 minutos
Leer más

Dashboard Process: ayuda para PSP

2005-11-19 magmax — [ edit | raw ]
  • recipe
migrated from node/106
Uso de Dashboard Process como ayuda para seguir PSP (Personal Software Proccess)
Leer más

Configurar Eclipse

2005-11-18 magmax — [ edit | raw ]
  • recipe
migrated from node/103
El documento pretende ser un manual "paso a paso" que permita configurar un proyecto Java con Eclipse. Se utilizará Eclipse 3.1 y el proyecto creado será un "tomcat project".
Leer más

Comprar un portátil

2005-11-12 magmax — [ edit | raw ]
  • tale
migrated from node/94
¿Tanto cuesta buscar un portátil? Pues sí. Sobre todo si lo que buscas es tan específico como lo que busco yo. ¿Qué le pedirías a un portátil? Bien... Pues aquí os dejo lo que YO le pido a un portátil:
  1. Peso. Para mí lo más importante es el peso. No quiero un portátil que pese 3 Kg.
  2. Batería. Esto no consigo verlo en ninguna oferta: ¿Cuál es su tamaño? ¿Y su peso? ¿De qué me sirve un portátil de 1,1 Kg si su batería va a pesar otro 1.1 Kg, o bien es más grande que el propio portátil? También es importante la duración: ¿4 horas? ¿Más?
  3. RAM. Ya que me pongo... 1Gb.
  4. Disco duro. Con 60Gb me conformo.
  5. Precio. En principio, debería ser lo más importante, pero como no hay manera de encontrar todo lo anterior, he decidido bajarlo en el "ranking".
  6. Grabadora de DVD. Hay que amortizar el cánon.
  7. Pantalla. Luego dirán que el tamaño no importa...
  8. Microprocesador. Sí, bueno... Habrá que mirarlo. Sobre todo por la tecnología: los céleron ni en pintura. La velocidad te puede dar una idea del tiempo que llevan en el mercado, pero no creo que sea algo determinante: cualquier portátil hoy día te da potencia de sobra (A no ser que quieras jugar al Doom 3, claro).
  9. Puertos y otras tonterías. Total, hoy en día todos los portátiles te traen 20.000 puertos, wifi, módem, cafetera, altavoces, microondas, refrigerador, ...
¿Se me olvida algo? Supongo que cada uno tiene sus preferencias. Las mías son muy claras: quiero un portátil portable, no un portátil de sobremesa. Quiero algo que pueda mover sin necesitar una carretilla o un coche. Aun así, ¿Cambiaríais algo? -- Amortiza el cánon siendo legal: copia música y películas.
Leer más

Aprender a escribir en la web

2005-11-12 magmax — [ edit | raw ]
migrated from node/95
Soy el primero que debería aprender lo que voy a poner en este blog. Es importante aprender a escribir correctamente en la web, y donde digo web, quiero decir foros, blogs, mail, ... . No vale todo, como solemos pensar. ¡Intentémoslo!
Leer más

Tarta de manzana

2005-10-30 magmax — [ edit | raw ]
  • cooking
migrated from node/75
Un postre fácil de realizar y con un resultado excelente.
Leer más

Cómo escribir una receta... de cocina

2005-10-04 magmax — [ edit | raw ]
  • recipe
migrated from node/17
Porque también hay amantes del software libre a los que les gusta comer bien, igual que puedes escribir recetas informáticas, puedes escribir recetas de cocina (¿o era al revés?). Este documento trata de establecer unas pautas que permitan dos cosas: que no se nos olvide poner nada y que todos tengan un estilo similar.

Apartados

El título va fuera del área de texto. Debe ser claro y conciso: "Macarrones boloñesa de Luis" Los apartados que debe tener son los siguientes:
  1. Ficha
    • Tiempo requerido: Aproximado, claro. "45 minutos".
    • Dificultad: Novato, Experto, etc
    • Coste: La pela es la pela. Aproximado. "Unos 5 euros".
    • Comensales: Para cuántas personas está pensada la receta.
  2. Ingredientes: Lista con los ingredientes necesarios.
  3. Preparación: Pasos a realizar indicando tiempos de cocción y cosas por el estilo. Cuanto más precisa mejor. Evitar las generalidades como "un poco", "una pizca". Se trata de hacer recetas para los que no tenemos ni idea. Ejemplo: "un poco de sal, pégale un pellizco al salero y lo que se te quede entre los dedos".
  4. Comentarios: Aquí podéis contar lo que queráis: "con esta receta ligué con mi novia", "ideal para cuando llegas de resaca", "muy útil para quedar bien". También se admiten anécdotas.

Estilo

Como se trata de que sea todo muy sencillito, símplemente poned los apartados como títulos ("h1"), los ingredientes como una lista no ordenada("ul") y los puntos de la preparación como párrafos. Los comentarios quedan completamente a vuestra disposición.

¡Que no se os olvide...

...etiqueta el post como "::cocina"!

felix's blog

La comisaria europea de Agenda Digital a favor del software libre en las Administraciones Públicas

2010-06-15 felix — [ edit | raw ]
  • new
migrated from node/1363
En la versión digital de cinco días

Contenidos libres

2009-05-12 felix — [ edit | raw ]
migrated from node/1119
http://blogs.cincodias.com/la-nueva-cultura/2009/05/consuma-gratis-y-con-calidad-ojo.html#more

El 'software' libre favorece a la empresa (www.expansion.com)

2009-05-06 felix — [ edit | raw ]
migrated from node/1115
El software libre desde un punto de vista económico: http://www.expansion.com/2009/05/05/empresas/tecnologia/1241556623.html

Doble Monitor con ATI Radeon HD 3870

2008-10-24 felix — [ edit | raw ]
  • recipe
  • Arco
  • drivers
  • Debian
migrated from node/1033

Configurar la tarjeta gráfica ATI radeon HD 3870 con dos monitores

Ingredientes

  • module-assistant
  • linux-headers de la versión de Linux que tengas corriendo
  • fglrx-control
  • fglrx-kernel-src
  • fglrx-driver
  • mesa-utils
  • Una tarjeta ATI radeon HD 3870 :-)

Configurar la tarjeta

Para la configuración inicial de la tarjeta seguimos los pasos listados aquí, relativos al driver FGLRX. Podemos resumir estos pasos en:

Utilizamos el module assistant:

# m-a update
# m-a a-i fglrx-kernel-src

Generamos el archivo xorg.conf con (se hace una copia de seguridad):

# aticonfig --initial

Lo único que tienes que añadir, al final del archivo:

Section "Extensions"
          Option "XVideo" "Enable"
EndSection

Con esto ya deberías tener funcionando la ATI con un solo monitor. Para comprobar si el 3d te rula, ya sabes:

#glxinfo | grep direct
direct rendering: Yes

Antes de hacer esto, he probado con el instalador de la ATI (bajandolo de su página web) y no rula.

Doble monitor

Para el doble monitor:

#aticonfig --initial=dual-head

Con el xorg.conf que te genera, tienes dos escritorios distintos en cada monitor, puedes cambiar iconos de uno a otro pero no cambiar aplicaciones entre ellos. Si quieres verlo todo como un único monitor debes habilitar la opción Xinerama dentro del ServerLayout del xorg.conf:

Section "ServerLayout"
        Identifier     "aticonfig Layout"
        Screen      0  "aticonfig-Screen[0]-0" 0 0
        Screen         "aticonfig-Screen[0]-1" RightOf "aticonfig-Screen[0]-0"
        Option         "Xinerama" "on"
EndSection

Y ya esta todo, con eso debería funcionar.

Saludos

Emulador de Cisco IOS: Dynamips y Dynagen

2007-12-13 felix — [ edit | raw ]
  • recipe
  • networking
  • Arco
migrated from node/821

Esta receta es una introducción al uso de los programas libres dynamips y dynagen que nos permiten emular Cisco IOS. Las posibilidades son infinitas, aqui damos los pasos para poder empezar a trabajar de una forma básica.

Si alguna vez has querido aprender a configurar redes seguramente te has encontrado con un problema para encontrar entornos reales que te permitan aprender los comandos y configuraciones que se necesitan para echar a andar una red real.

Entre los equipos de mayor calidad nos podemos encontrar la gama de routers Cisco. Tener acceso a routers cisco para prácticar es díficil y caro. Afortunadamente existen dos programas que nos pueden simplificar la vida extraordinariamente. Dynamips y Dynagen son dos programas que te permiten configurar una red medianamente compleja y configurar cada uno de los routers presentes en dicha red mediante un emulador que carga una imagen real del sistema operativo de Cisco IOS, es decir, exactamente el mismo sistema operativo que se ejecuta en los equipos reales.

Las ventajas se ven de forma clara, la imagen que carga el dynamips es exactamente la misma que se ejecuta en un router real por lo que el realismo va mucho mas allá del que puedes conseguir con programas como el PacketTracer. PacketTracer es un programa (la licencia no es libre) que te permite modelar redes y configurarlas.

Instalación

Bueno, al tema, los programas dynamips y dynagen son paquetitos debian, asi que, simplemente, apt-get install dynamips y apt-get install dynagen.

En realidad el programa de emulación es dynamips que puede emular los modelos de routers 7200/3600/3725/3745/2600/1700 mientras que dynagen es un front-end basado en texto que te permite crear redes virtuales y trabajar con ellas.

Estos programas han sido creados para prácticar con la configuración de los routers pensando en las certificaciones CCNA/CCNP/CCIE.

Emulando redes virtuales

Una vez instalados, empezar a trabajar con ellos es sumamente sencillo, arrancas dynamips con las opciones que necesites, por ejemplo, en nuestro caso le indicamos que el puerto va a ser el 7200 :

# dynamips -H 7200
Cisco Router Simulation Platform (version 0.2.8-RC2-x86)
Copyright (c) 2005-2007 Christophe Fillot.
Build date: Oct 17 2007 06:50:15
ILT: loaded table "mips64j" from cache.
ILT: loaded table "mips64e" from cache.
ILT: loaded table "ppc32j" from cache.
ILT: loaded table "ppc32e" from cache.
Hypervisor TCP control server started (port 7200).

A ese puerto se conectará dynagen para pasarle los parámetros de configuración de la simulación.

A continuación arrancamos dynagen indicandole el escenario que queremos crear. El paquete debian tiene unos cuantos ejemplos, veamos uno sencillito creado por nosotros:

# Ejemplo

autostart = False

[localhost]

    [[7200]]
        image = /home/pepe/ciscoios/c7200-advsecurityk9-mz.124-15.T1.bin
        npe = npe-400
        ram = 160

    [[ROUTER R1]]
        s1/0 = R2 S1/0
        model = 7200


    [[ROUTER R2]]
        model = 7200

La primera sección [ [ 7200 ] ] nos indica la configuración general de los routers, hay muchos parámetros pero el mas importante y que no puede faltar es la imagen, este parámetro determina la imagen del sistema operativo IOS que debe cargar. Aqui hay un problema, el sistema operativo Cisco IOS es privativo por lo que debemos obtener una imagen de algún sitio autorizado. Y aviso a navegantes YO NO PUEDO DISTRIBUIR CISCO IOS por lo que tendrás que conseguirla por tus propios medios. (ACTUALIZACIÓN: Parece que hay gente que puede distribuirlas, mira al final de esta receta).

A continuación se definen dos routers [[ROUTER R1]] y [[ROUTER R2]] ambos con
el modelo 7200 (que debe coincidir con la imagen de sistema operativo que cargamos), el atributo model proporciona el modelo de router (7200 en nuestro caso) mientras que tambien debemos especificar las conexiones:

        s1/0 = R2 S1/0

Esta sentencia nos indica que la linea serial del router R1 la conectamos a la linea serial S1/0 del router R2.

Si arrancamos el dynagen pasándole como argumento este archivo, que llamaremos simple.net, obtenemos una consola de texto:

$ dynagen simple.net
Reading configuration file...
Network successfully loaded
Dynagen management console for Dynamips
Copyright (c) 2005-2007 Greg Anuzelli
=>

La cantidad de opciones y configuraciones posibles son infinitas, lo mas básico para empezar a trabajar es observar los dispositivos que existen en la red con el comando list:

=> list
Name       Type       State      Server          Console
R1         7200       stopped    localhost:7200  2000
R2         7200       stopped    localhost:7200  2001
=>

Arrancar los routers:

=> start /all
Warining: Starting R1 with no idle-pc value
100-VM 'R1' started
Warining: Starting R2 with no idle-pc value
100-VM 'R2' started

y obtener una consola para trabajar con los distintos routers:

=> console /all
=>

Al ejecutar este comando deben aparecer dos consolas, cada una de ellas representa un router y puedes ver como carga la imagen del sistema operativo y podremos empezar a trabajar con comandos reales.

Para terminar varios consejos, dynamips y dynagen consumen muchos recursos, si quieres optimizar y que no consuma tanto mira la opción idle-pc.

Entre las características de dynagen te permite capturar paquetes en distintas interfaces de tu red virtual en el formato .cap que con posterioridad puedes visualizar con programas como wireshark.

Si quieres echarle un vistazo a las posibilidades de estos programas:

http://www.dynagen.org/tutorial.htm

y David se ha encontrado una página con imágenes de Cisco IOS para bajárselas aquí

Instalación de TinyOS 1.x en Debian

2007-06-05 felix — [ edit | raw ]
  • recipe
  • embedded
  • Arco
migrated from node/710

Esta receta explica cómo instalar TinyOS 1.1.15

Leer más

Marcar y clasificar tráfico con iptables y tc

2007-05-23 felix — [ edit | raw ]
  • recipe
  • networking
  • Arco
migrated from node/692
Siguiendo el hilo de la receta anterior, vamos a ver cómo podemos clasificar el tráfico que generamos para meterlos en las colas que vamos a crear y así clasificar el tráfico. Para ello, aunque existen multitud de formas de clasificar el tráfico vamos a utilizar el campo TOS (type of service) del protocolo IP.

Clasificando paquetes

Bueno, esta claro que si queremos establecer clases de tráfico podemos hacer dos cosas, una marcar el tráfico de paquetes en el origen y sólo clasificar en el nodo que hace de enlace con, por ejemplo, Internet y otra, no marcar en el origen y filtrarlo (ademas de clasificar) todo en el nodo que hace de enlace. Si nos imaginamos un nodo con dos interfaces, una conectada a Internet y otra a una red ethernet través de la cual se conectan otros nodos podemos establecer reglas de marcado en esos nodos mientras que en el enlace simplemente clasificamos el tráfico que le llega en el sistema de colas. El problema de tener que marcar en el origen, es que pueden existir nodos que no marcan sus paquetes o que los marcan mal para obtener el ancho de banda asociado a un tráfico de prioridad mas alta. Vamos a considerar que todos los nodos son buenos y marcan sus paquetes. Para marcar un paquete debemos usar iptables. Si observamos una regla de iptables para marcar paquetes:
#iptables -t mangle -I POSTROUTING 1 -p tcp -s 111.11.11.105 -j TOS --set-tos 16
Vemos que lo primero que nos encontramos es el "-t mangle" , que le indica la tabla dónde vamos a operar, por la tabla mangle pasan todos los paquetes por lo que no se nos escapa ninguno, si quieres ver una descripción de las tablas, y su uso mira aquí. Lo siguiente que viene es "-I POSTROUTING" que nos indica dónde vamos a aplicar la clasificación, como hemos dicho antes, estamos marcando el tráfico que el nodo genera por lo que lo marcamos despues del enrutado de los paquetes. En este punto hay que hacer una pequeña parada, el sitio ideal para marcar el paquete que ha sido originado en un sistema es en OUTPUT, ya que por ahí pasa todo el tráfico generado en un nodo, no obstante a mi me interesa hacerlo en POSTROUTING por que me interesa marcar tráfico que pasa por mi sistema y que no esta marcado (cosas del curro:-)). El 1 que viene a continuación es el número de la regla que vas a crear, acuerdate de esto si quieres borrarla luego. A continación vienen las reglas que debe cumplir el paquete para marcarlo, en nuestro caso buscamos todo el tráfico tcp que viene de la dirección 111.11.11.105, "-p tcp -s 111.11.11.105". Y por último especificamos qué queremos hacer con esos paquetes, en nuestro caso vamos a poner el valor 16 en el campo TOS. Si queremos ver como queda la regla despues de que la ejecutemos en nuestro sistema:
# iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
TOS        tcp  --  111.11.11.105        anywhere            TOS set Minimize-Delay
Para borrar todas las reglas de marcado, en el caso de la tabla mangle:
#iptables -F -t mangle
Obviamente podemos especificar el marcado de los paquetes como queramos y atendiendo a multitud de parámetros. Veamos algunos ejemplos: Especificar que todo el tráfico de salida de un host que sale del puerto 12345 se marque con el valor 4 en el campo TOS:
#iptables -t mangle -I OUTPUT -p tcp --sport 12345 -s localhost -j TOS --set-tos 4
En general, despues de la opción -p puedes poner cualquier tipo de protocolo (si esta incluido en /etc/protocols), tambien existe la posibilidad de marcar los paquetes que van a un destino específico (con -d), que entraron por un interfaz específico o van a salir etc. existen módulos asociados a protocolos que enriquecen las posibilidades, pero vamos estudiando un poco seguro que puedes marcar y filtrar lo que quieras. Por ejemplo un paquete muy majo es este que te permite filtrar de forma cómoda por protocolos de la capa de aplicación y habilitar reglas como esta:
#iptables -t mangle -A FORWARD -p tcp -m ipp2p --kazaa ... acción
Vamos, te marca los paquetes de kazza.

Creando colas

Como vimos en la receta anterior, para crear colas, usamos la herramienta tc. Por ejemplo si queremos establecer cuatro colas, cada una para un tipo de tráfico distinto, y que tengan el mismo ancho de banda, una estructura como esta sería apropiada:
#tc qdisc add dev eth0 root handle 1: htb default 1
#tc class add dev eth0 parent 1: classid 1:1 htb rate 3125kbps
#tc class add dev eth0 parent 1: classid 1:2 htb rate 3125kbps
#tc class add dev eth0 parent 1: classid 1:3 htb rate 3125kbps
#tc class add dev eth0 parent 1: classid 1:4 htb rate 3125kbps
Tal y como hemos creado las estructuras, el ancho de banda es dividido, es necesario resaltar que para que compartieran el ancho de banda deberíamos crear una cola hija de root de la cual "colgar" la clasificación. De esta forma si una clase de tráfico no ocupa su ancho de banda, el que sobra, es repartido en las otras clases de tráfico. Nuestras colas, quedan, por lo tanto:
#tc qdisc show dev eth0
class htb 1:1 root prio 0 rate 25000Kbit ceil 25000Kbit burst 14096b cburst 14096b
class htb 1:2 root prio 0 rate 25000Kbit ceil 25000Kbit burst 14096b cburst 14096b
class htb 1:3 root prio 0 rate 25000Kbit ceil 25000Kbit burst 14096b cburst 14096b
class htb 1:4 root prio 0 rate 25000Kbit ceil 25000Kbit burst 14096b cburst 14096b
qdisc htb 1: r2q 10 default 1 direct_packets_stat 0

Clasificando paquetes

Una vez que tenemos el tráfico marcado y las clases de tráfico creado, debemos establecer las reglas para encolar el tráfico en su clase correspondiente, dentro de la clasificación de colas preestablecida. Para ello, de nuevo utilizamos la herramienta tc:
#tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:4
#tc filter add dev eth0 parent 1:0 protocol ip prio 9 u32 match ip tos 0x08 0xff flowid 1:3
#tc filter add dev eth0 parent 1:0 protocol ip prio 8 u32 match ip tos 0x04 0xff flowid 1:2
#tc filter add dev eth0 parent 1:0 protocol ip prio 7 u32 match ip tos 0x02 0xff flowid 1:1
Con estas instruciones le indicamos que vamos a crear un filtro "tc filter" y asociarlo a la interfaz eth0 "add dev eth0" y a la clase root "parent 1:0" (la qdisc que hemos creado antes). Este filtro es sobre el protocolo ip "protocol ip" y le fijamos una prioridad para indicar en que orden se aplican los filtros "prio 10" (mayor número, mayor prioridad). A continuación viene qué condiciones debe cumplir nuestro paquete (con el filtro u32), en nuestro caso, como hemos utilizado el campo TOS, lo especificamos con "match ip tos 0x10 0xff" y por último el flujo al que pertenece si cumple los criterios "flowid 1:4". Si queremos ver que todo se ha configurado bien:
# tc filter show dev eth0
filter parent 1: protocol ip pref 7 u32
filter parent 1: protocol ip pref 7 u32 fh 803: ht divisor 1
filter parent 1: protocol ip pref 7 u32 fh 803::800 order 2048 key ht 803 bkt 0 flowid 1:1
  match 00020000/00ff0000 at 0
filter parent 1: protocol ip pref 8 u32
filter parent 1: protocol ip pref 8 u32 fh 802: ht divisor 1
filter parent 1: protocol ip pref 8 u32 fh 802::800 order 2048 key ht 802 bkt 0 flowid 1:2
  match 00040000/00ff0000 at 0
filter parent 1: protocol ip pref 9 u32
filter parent 1: protocol ip pref 9 u32 fh 801: ht divisor 1
filter parent 1: protocol ip pref 9 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:3
  match 00080000/00ff0000 at 0
filter parent 1: protocol ip pref 10 u32
filter parent 1: protocol ip pref 10 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:4
  match 00100000/00ff0000 at 0
#

Comprobando que todo funciona

Vale, y todo esto, ¿cómo comprobamos que funciona?, bueno, hay un script en perl que te permite visualizar las clases de tráfico que hay en tu sistema, el dispositvo y el tráfico que entra por cada clase en tiempo real:
#./monitor_tc_top.pl
 18:49:55 up 1 day,  2:09,  5 users,  load average: 0.20, 0.17, 0.17
                                          Interval    Cumulated Total
Dev  Classid   Tokens   Ctokens Rate      Speed       Send      Send
-------------------------------------------------------------------------
eth0 1:1       4558     4558    24.47KB   147B/s      103.17KB  333.33KB
eth0 1:2       4620     4620    0B        0B/s        0B        0B
eth0 1:3       4620     4620    0B        0B/s        0B        0B
eth0 1:4       4620     4620    0B        0B/s        0B        0B
Puedes bajártelo de aquí. El script no está mantenido pero de momento funciona bastante bien. Si observais, en la ejecución del comando sólo va tráfico a la clase 1 que es por defecto, se pueden generar tráfico con una herramienta (tipo scapy) para comprobar qué tráfico va a cada una de las colas.

Traffic shaping y QoS en GNU/Linux

2007-05-17 felix — [ edit | raw ]
  • recipe
  • networking
  • Arco
migrated from node/685
Vamos a describir en esta receta algunos de los comandos útiles para lo que se ha venido a denominar traffic shaping, en cristiano, control de nuestro ancho de banda. Aviso a navegantes, este tema es un poco lioso y yo no soy ni mucho menos un experto por lo que, primero, espero comentarios, correcciones, mejoras, etc. y segundo, ojo con lo que haces!!

Enviando paquetes a la red

Bueno vamos con algunos comandos y de paso vamos introduciendo algunos conceptos:

# ip link show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:e0:4c:00:84:bb brd ff:ff:ff:ff:ff:ff

Este comando muestra los “enlaces” presentes en un computador, en esta información va incluida alguna información muy útil, dejando aparte la interfaz loopback, nos centramos en el enlace número dos, es decir la eth0 que es una interfaz ethernet. Despues de la información relativa a la mtu (Maximum transmission unit) que en una ethernet es 1500 tenemos la disciplina de colas (qdisc). Para que nos entendamos, todos los paquetes que se envían son almacenados en un sistema de colas hasta la entrega a la red.

Ahora bien, cómo se gestionan las colas y qué algoritmo se utiliza para decidir qué paquete desencolamos es un mundo un poco complejo que trataremos de introducir en esta receta.

Antes de continuar hay que indicar que, aparte de las colas, están las clases de tráfico y los filtros. Generalmente (esto depende mucho del tipo de colas que estamos usando) se definen clases de tráfico y los filtros clasifican el tráfico en esas clases atendiendo al protocolo, ip, etc..

Tipos de Colas

El algoritmo por defecto es “pfifo_fast”, que es el más sencillo, el primer paquete que llega es el primero que sale y lo más rápido posible, esto no tiene ningún misterio. Con esta política todo el mundo es feliz y todos los paquetes son tratados exactamente igual buscando las máximas prestaciones. No obstante estaremos de acuerdo en que no todas las aplicaciones y ordenadores son de igual importancia por lo que asignar un recurso tan escaso como el ancho de banda, puede ser una buena idea y muy útil.

Hay mas disciplinas de colas, entre las cuales podemos enumerar:

  • FIFO – simple FIFO (packet (p-FIFO) or byte (b-FIFO) ): la que hemos visto, tambien hay ha nivel de byte.
  • PRIO – n-band strict priority scheduler: En esta disciplina tenemos un sistemas de encolado basado en clases de tráfico a las cuales se les asigna una prioridad, Las clases de tráfico son desencoladas en funcíon de la prioridad (el 0 es la mayor prioridad y cuanto mayor es el número menor prioridad).
  • TBF – token bucket filter: Esta es una disciplina para establecer límites en el ratio de entrega de paquetes para las distintas colas. Si quieres limitar el ancho de banda de una interfaz, esto es lo que necesitas.
  • CBQ – class based queue: Otro sistema basado en colas un poco mas complejo que el PRIO, aquí puedes establecer jerarquías de clases y prioridades. Hay que resaltar que dentro de cada una de las clases hay una qdisc que, por defecto es una pfifo pero que puede ser configurada por lo que la cantidad de combinaciones es enorme.
  • CSZ – Clark-Scott-Zhang: Para que nos entendamos garantiza el ancho de banda de los servicios garantizados y el resto lo deja para los paquetes que no se clasifican (best-effort traffic), la teoría de esto es compleja.
  • SFQ – stochastic fair queue: Tienes diferentes colas asociadas a flujos y vas sacando de cada cola un paquete a la vez (round robin) para que todas los flujos tengan el mismo ancho de banda, el tema es que si una aplicación establece muchos flujos obtiene mas ancho de banda.
  • RED – random early detection: Esto esta diseñado para backbones, el tema es que trata de aprovechar las características de control de flujo del protocolo TCP para ajustar los parámetros de entrega de los paquetes y evitar la congestión antes de que se produzca. Lo que hace es eliminar aleatoriamente paquetes cuando las colas empiezan a llenarse, cuanto mas llena esta la cola, va aumentando la probabilidad de eliminar un paquete de forma aleatoria. TCP cuando pierde paquetes reduce su tasa de envío por lo que reduce la posibilidad de congestiones, hay que ajustar muy bien los valores para que no perdamos mas paquetes de los que perderíamos en congestión (vamos eliminando paquetes por que la red no da mas de si). Esto plantea un problema ya que UDP no implementa un mecanismo similar con lo que los flujos UDP no se ajustan.
  • GRED – generalized random early detection: El tema es que RED descarta aleatoriamente paquetes cuando hay una posible congestión y de forma aleatoria tratando todos los flujos igual, como en el campo del señor no todos somos iguales, GRED crea una serie de colas virtuales y establece políticas RED distintas (como por ejemplo la probabilidad de eliminar un paquete cuando se empieza a llenar la cola) a cada una de ellas.
  • TEQL – traffic equalizer: Esta se usa cuando entre dos redes distintas tenemos dos enlaces directos, para balancear la carga entre ellos. Aquí hay un ejemplo sencillo: http://www.roseindia.net/linux/tutorial/linux-howto/Adv-Routing-HOWTO/lartc.loadshare.html
  • ATM – asynchronous transfer mode: Esto es para que emules el comportamiento de una red ATM transmitiendo unidades de información en celdas.
  • DSMARK – DSCP (Diff-Serv Code Point)marker/remarker: Esto mas que una disciplina es una política de marcado de paquetes en función de reglas específicas.
  • Hierarchical Token Bucket (HTB): Podemos dividir el ancho de banda especificando el mínimo y el máximo, si alguien no esta usando su ancho de banda, se asigna al resto de clases. Este se considera mas sencillo que el CBQ y bastante flexible por lo que lo usaremos para los ejemplitos.

La herramienta tc: comándos básicos

Vamos con algunos comandos, de aqui en adelante si queremos ver como van nuestras colas:

 $ tc -s qdisc ls dev eth0
qdisc pfifo_fast 0: root bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
 Sent 287345331 bytes 846853 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0

Un comandito muy útil para eliminar todo y dejarlo con la configuración por defecto:

 $ tc qdisc del dev eth0 root

Vamos con un ejemplo, si queremos limitar el tráfico ip de salida a 5 kbps debemos realizar los siguientes pasos:

Primero añadimos la gestión de colas htb a la raíz de nuestro dispositivo (en este caso eth0):

 $ tc qdisc add dev eth0 root handle 1: htb default 1

Este primer comando define una cola que se añade a la raiz (root) con un manejador handle 1: y que
por defecto manda el tráfico a la clase de tráfico 1.

Ahora creamos la clase de tráfico:

 $ tc class add dev eth0 parent 1: classid 1:1 htb rate 1kbps ceil 5kbps

Para esta clase de tráfico, el padre es la qdisc que acabamos de crear (parent 1:) y cuyo identificador es 1 (classid 1:1). Por último, la parte de comando que delimita el ancho de banda que pueden consumir viene determinado por la parte del comando “rate 1kbps ceil 5 kbps” que le dice al kernel, que, asegure una tasa de 1kbps en caso de congestión y que como mucho esa clase puede llegar a 5 kbps. Si no ponemos la parte ceil, la clase consumirá todo el ancho de banda sobrante que quede (esto es así por que estamos usando HTB).

En teoría ya esta todo, al indicarle al crear la cola que la clase por defecto es la 1, todo el tráfico es dirigido a esa clase que ya esta limitada. Ahora bien, si queremos indicarle explícitamente que mande todo el tráfico ip a esa clase debemos crear un filtro:

 $ tc filter add dev eth0 protocol ip parent 1: handle 1 fw classid 1:1

De nuevo le indicamos que el parent es la qdisc htb root (parent 1:), el manejador de este filtro es el 1 y la acción es forwardear todo el protocolo ip (protocol ip) a la clase 1:1 (fw classid 1:1).

Varios temas, primero sólo podemos controlar el tráfico que sale por eth0, para controlar el tráfico de entrada hay que trabajar con la cola de entrada (ingress). A menos que estes probando cosas, es recomendable meter tu configuración (lista de comandos) en un script ya que es frecuente cometer errores, y aunque se pueden cambiar las especificaciones, muchas veces puede ser lioso.

Viendo como va nuestra configuración

Si queremos ver como va nuestra configuración de filtros:

 # tc filter show dev eth0
filter parent 1: protocol ip pref 49152 fw
filter parent 1: protocol ip pref 49152 fw handle 0x1 classid 1:1

Nuestras clases:

 # tc class show dev eth0
class htb 1:1 root prio 0 rate 8000bit ceil 40000bit burst 1603b cburst 1619b

El rate es en bit, le pusimos 1kb es decir 1000*8 bits (lo coge en bytes).

Y las colas:

 # tc qdisc show dev eth0
qdisc htb 1: r2q 10 default 1 direct_packets_stat 294

Cada sistema de colas diferentes tiene comandos y parámetros específicos , en algunos casos puedes añadirle a las clases de tráfico qdisc propias que tienen nuevas clases (en forma de árbol) por lo que las combinaciones son múltiples.

Algunas referencias:

  • http://www.roseindia.net/linux/tutorial/linux-howto/Adv-Routing-HOWTO/lartc.loadshare.html
  • http://tldp.org/HOWTO/Traffic-Control-HOWTO/classless-qdiscs.html
  • http://www.rns-nis.co.yu/~mps/linux-tc.html

Programando una MICA2

2007-01-19 felix — [ edit | raw ]
  • recipe
  • embedded
  • Arco
migrated from node/505
Vamos a tratar de describir el proceso de programación de un nodo Mica2 con un ejemplo mínimo. Para ello vamos a usar el equivalente para sistemas empotrados del hola mundo que es la aplicación Blink para el tinyOS. Adicionalmente iremos ampliando este tema con las herramientas que nos proporciona la toolchain.

Hardware

Los equipos adquiridos en el grupo Arco son las micas2 uno de los equipos mas ampliamente usados en Wireless Sensor Networks junto con el tinyOS.

Hay dos tipos de dispositivos, las micas2 (4 nodos) y las micas2dot (4 nodos) ademas de un programador MIB510.

Las micas2 cuentan con un puerto de extensión dónde se le pueden conectar plaquitas con sensores, nuestras micas2 tienen las placas MTS310CA que cuentan con sensor de luz, temperatura, micrófono y un pequeño altavoz ademas
de un acelerómetro y un sensor magnético.

El procesador y la radio de las micas2 cuenta con un MPR400CB que esta basado en el procesador Atmel ATmega128L, para mas datos mirar el datasheet

Las micas2dot son algo mas limitadas como podemos ver en su página web

Programando la Mica2

La instalación del tinyOS y del toolchain ya lo vimos en la receta anterior

Esta aplicación basicamente lo que hace es encender y apagar el led rojo de la mota a una frecuencia de 1Hz. La aplicación se encuentra en el directorio:

/opt/tinyos-1.x/apps/Blink

El compilador que vamos a usar es el de NesC que es el ncc:

 ncc --help
Usage: avr-gcc [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase
  --help                   Display this information
  --target-help            Display target specific command line options
  (Use '-v --help' to display command line options of sub-processes)
  -dumpspecs               Display all of the built in spec strings
  -dumpversion             Display the version of the compiler
  -dumpmachine             Display the compiler's target processor
  -print-search-dirs       Display the directories in the compiler's search path
  -print-libgcc-file-name  Display the name of the compiler's companion library
  -print-file-name=<lib>   Display the full path to library <lib>
  -print-prog-name=<prog>  Display the full path to compiler component <prog>
  -print-multi-directory   Display the root directory for versions of libgcc
  -print-multi-lib         Display the mapping between command line options and
                           multiple library search directories
  -print-multi-os-directory Display the relative path to OS libraries
  -Wa,<options>            Pass comma-separated <options> on to the assembler
  -Wp,<options>            Pass comma-separated <options> on to the preprocessor
  -Wl,<options>            Pass comma-separated <options> on to the linker
  -Xlinker <arg>           Pass <arg> on to the linker
  -save-temps              Do not delete intermediate files
  -pipe                    Use pipes rather than intermediate files
  -time                    Time the execution of each subprocess
  -specs=<file>            Override built-in specs with the contents of <file>
  -std=<standard>          Assume that the input sources are for <standard>
  -B <directory>           Add <directory> to the compiler's search paths
  -b <machine>             Run gcc for target <machine>, if installed
  -V <version>             Run gcc version number <version>, if installed
  -v                       Display the programs invoked by the compiler
  -###                     Like -v but options quoted and commands not executed
  -E                       Preprocess only; do not compile, assemble or link
  -S                       Compile only; do not assemble or link
  -c                       Compile and assemble, but do not link
  -o <file>                Place the output into <file>
  -x <language>            Specify the language of the following input files
                           Permissible languages include: c c++ assembler none
                           'none' means revert to the default behavior of
                           guessing the language based on the file's extension
Options starting with -g, -f, -m, -O, -W, or --param are automatically
 passed on to the various sub-processes invoked by avr-gcc.  In order to pass
 other options on to these processes the -W<letter> options must be used.
For bug reporting instructions, please see:
<URL:http://gcc.gnu.org/bugs.html>.

Esta aplicación se compone de:

# ls
BlinkM.nc  Blink.nc  Makefile  README  SingleTimer.nc

Si analizamos el proceso de compilación que ya usamos para comprobar que la toolchain estaba correctamente instalada:

$make mica2
mkdir -p build/mica2
    compiling Blink to a mica2 binary
ncc -o build/mica2/main.exe -Os -finline-limit=100000 -Wall -Wshadow -DDEF_TOS_AM_GROUP=0x7d -Wnesc-all -target=mica2 -fnesc-cfile=build/mica2/app.c -board=micasb -I%T/lib/Deluge -DIDENT_PROGRAM_NAME=\"Blink\" -DIDENT_USER_ID=\"root\" -DIDENT_HOSTNAME=\"homer\" -DIDENT_USER_HASH=0xbc4a9a92L -DIDENT_UNIX_TIME=0x45b09151L -DIDENT_UID_HASH=0x04c03c51L Blink.nc -lm
    compiled Blink to build/mica2/main.exe
            1632 bytes in ROM
              49 bytes in RAM
avr-objcopy --output-target=srec build/mica2/main.exe build/mica2/main.srec
avr-objcopy --output-target=ihex build/mica2/main.exe build/mica2/main.ihex
    writing TOS image

Vemos que lo primero crea un directorio para meter los binarios y que todo lo va a meter en main.exe, las opciones le indican diversos parámetros para la generación del código entre los cuales podemos ver el target, en nuestro caso la mica2, el usuario y el host, y al final nos aparece los bytes generados para la RAM y para la ROM.

Si echamos un vistazo al directorio build/mica2 vemos los siguientes archivos:

#ls
app.c  ident_flags.txt  main.exe  main.ihex  main.srec  tos_image.xml

donde aparecen diversos archivos como las imágenes generadas por avr-objcopy como són el formato de intel (.ihex) y el de motorola (.srec)

Para instalarlo concectar físicamente el nodo a la interfaz de programación (la placa mib510) y esta al puerto serie mediante un cable RS232, por último ejecutar el siguiente comando:

# make mica2 reinstall mib510,/dev/ttyS0
cp build/mica2/main.srec build/mica2/main.srec.out
    installing mica2 binary using mib510
uisp -dprog=mib510 -dserial=/dev/ttyS0 --wr_fuse_h=0xd8 -dpart=ATmega128 --wr_fuse_e=ff  --erase --upload if=build/mica2/main.srec.out
Firmware Version: 2.1
Atmel AVR ATmega128 is found.
Uploading: flash
Fuse High Byte set to 0xd8
Fuse Extended Byte set to 0xff
rm -f build/mica2/main.exe.out build/mica2/main.srec.out
    installing mica2 bootloader using mib510
uisp -dprog=mib510 -dserial=/dev/ttyS0 --wr_fuse_h=0xd8 -dpart=ATmega128 --wr_fuse_e=ff  --upload if=/opt/tinyos-1.x/tos/lib/Deluge/TOSBoot/build/mica2/main.ihex
Firmware Version: 2.1
Atmel AVR ATmega128 is found.
Uploading: flash
Fuse High Byte set to 0xd8
Fuse Extended Byte set to 0xff

Y ya esta, tanto el led rojo de la placa de programación (la MIB510) como el de la mota parpadean a una frecuencia de 1 Hz, a continuación puedes desconectar la mica de la placa de programación y el led continua parpadeando.

No es mucho, pero como ya comentamos es el hello world de las micas y la prueba definitiva de que todo el toolchain funciona correctamente.

Existen dentro del directorio apps bastantes ejemplos que podeis probar y sobre todo, podeis mirar como ejemplos de programación:

#/opt/tinyos-1.x/apps# ls
Blink            CountRadio             Ident         MicaWBVerify    RfmToLeds        SenseToLeds  TelosADC     TestMatchbox   TestTinyViz
BlinkTask        GenericBase            Makefile      Oscilloscope    SecureTOSBase    SenseToRfm   TelosPWM       TestNewFlash   TestUart
CntToLeds        GlowLeds               Makerules     OscilloscopeRF  Sense            SimpleCmd    TestDeluge     TestSnooze     TestWDT
CntToLedsAndRfm  GlowRadio              MicaHWVerify  Pong            SenseLightToLog  Surge        TestDripDrain  TestTinyAlloc  TOSBase
CntToRfm         HighFrequencySampling  MicaSBVerify  ReverseUART     SenseTask        SurgeTelos   TestEEPROM     TestTinySec    TransparentBase

Lo siguiente es echarle un vistazo a NesC y ver como desarrollar nuestros propios programas, tambien veremos como usar las herramientas de depuración y el simulador TOSSIM, pero eso para las siguientes entregas.

Enlaces

Los enlaces básicos son los de la receta anterior:

  • http://www.tinyos.net/tinyos-2.x/doc/html/tutorial/lesson1.html

felixjesus.villanueva(la arroba)uclm.es
Mi web

TinyOS 2.0, un sistema operativo libre para dispositivos empotrados

2006-10-20 felix — [ edit | raw ]
  • recipe
  • embedded
  • Arco
migrated from node/405
Por que no sólo de GNU/Linux vive el hombre, vamos a describir brevemente la instalación y el uso de un sistema operativo libre denominado TinyOS. Este sistema operativo esta destinado a redes inalámbricas de sensores por lo que necesitaremos para probarlo alguna de las plataformas soportadas por el sistema operativo o el simulador TOSSIM.

Instalación TinyOS 2.0

Vamos a aprender su instalación y dejaremos para más adelante la construcción de un pequeño hello world o incluso la instalación del propio simulador.

Se va a instalar todo en una debian con kernel 2.6.15.7

Los pasos a seguir son los siguientes (http://www.tinyos.net/tinyos-2.x/doc/html/install-tinyos.html):

JDK

Instala Java 1.5 JDK. Se necesita para comunicarse con el nodo desde el PC.

Compilador cruzado

Esto va a depender del dispositivo para el cual quieras desarrollar una aplicación y concretamente del procesador con el que estén desarrollados. Por ejemplo, para la familia de las MICAs (dispositivos para redes de sensores) se necesita la toolchain AVR, ya que llevan unos procesadores ATMEL. En la receta supondremos que vamos a trabajar con estas motas, por lo que instalamos todo lo relativo a la citada toolchain. En debian esto implica, instalar los siguientes paquetes:

  • gcc-avr, el gcc para los atmel
  • gdb-avr, el gdb para los atmel
  • binutils-avr, utilidades binarias.
  • avr-libc, la librería estándar de C
  • avarice, para utilizar el gdb con JTAG (sistema para depuración típico de sistemas empotrados)

Si peiensas utilizar el apt-get para instalar todo eso será mejor que eches un vistazo a esta página de tinyOS. En resumen dice que no es buena idea, ya que necesitamos versiones muy concretas. Lo mejor es bajarse los rpm y pasar los paquetes a .deb con alien, para luego instalarlos. Un tema importante, primero desinstala todo lo que tengas de avr y no te olvides de bloquear todos los paquetes para que no se actulicen cuando hagas un “upgrade”.

Una vez que tengas los compiladores cruzados (necesarios para compilar el sistema operativo TinyOS) necesitas el compilador de nesC. nesC es el lenguaje en el que está escrito tiniyOS y que se usa también para escribir las aplicaciones. En la página web tienes paquetes rpm para el nesC (que usará los compiladores y para la toolchain de tinyOS por lo que, como esto en una debian tienes que tirar de alien para convertir los paquetes.

 # alien nesc-1.2.7a-1.i386.rpm
nesc_1.2.7a-2_i386.deb generated
# alien tinyos-tools-1.2.2-1.i386.rpm
tinyos-tools_1.2.2-2_i386.deb generated

y luego ya sabes: dpkg -i <paquete generado>

Con alien tendrás este problema:

# alien tinyos-tools-1.2.2-1.i386.rpm
Warning: Skipping conversion of scripts in package tinyos-tools: postinst prerm
Warning: Use the --scripts parameter to include the scripts.
tinyos-tools_1.2.2-2_i386.deb generated
# dpkg --force-overwrite -i  tinyos-tools_1.2.2-2_i386.deb
(Leyendo la base de datos ...
161803 ficheros y directorios instalados actualmente.)
Desempaquetando tinyos-tools (de tinyos-tools_1.2.2-2_i386.deb) ...
dpkg - aviso, no se tendrá en cuenta el problema por estar activa
una opción --force:
intentando sobreescribir `/usr/share/man/man1/uisp.1.gz', que está también en el paquete uisp
dpkg - aviso, no se tendrá en cuenta el problema por estar activa
una opción --force:
intentando sobreescribir `/usr/bin/uisp', que está también en el paquete uisp
Configurando tinyos-tools (1.2.2-2) ...

El sistema operativo

Un paso similar se realiza para instalar el sistema operativo propiamente dicho, es decir el tinyOS. Se coge el paquete .rpm se pasa a .deb con alien y se instala con el dpkg.

Configuración del entorno

Configurar las variables de entorno (mételo en un script para configurarlo de forma automática), por ejemplo en ~/bin/tinyos-setup.sh:

export TOSROOT=/opt/tinyos-2.x
export TOSDIR=$TOSROOT/tos
export CLASSPATH=$CLASSPATH:$TOSROOT/support/sdk/java/tinyos.jar:.
export MAKERULES=$TOSROOT/support/make/Makerules

Y ejecuta lo siguiente cuando vayas a compilar para TinyOS:

$ . ~/bin/tinyOS.sh

Cambia el propietario del directorio donde esta el tinyOS:

$ chown -R felix /opt/tinyos-2.x

y no olvides cambiar los permisos del dispositivo (puerto serie, paralelo, USB) que uses para comunicarte con las motas.

 chmod 666 /dev/<devicename>

graphviz

Instalar Graphviz desde su paquete debian correspondiente con

 # apt-get install graphviz

Probando

Bueno, enhorabuena, si has hecho todos estos pasos, ya tienes el tinyOS instalado en tu ordenador, ahora necesitas probar todo esto que hemos hecho. No está de más echarle un vistazo a la estructura general del SO para entender como está estructurado y sus posibilidades.

La mejor forma de ver si todo esta correctamente instalado es tratar de compilar y probar algunas de las aplicaciones de ejemplo que vienen con el propio sistema operativo. Como ya habrás notado el sistema operativo se ha instalado por defecto en el directorio /opt/tinyos-2.x

Dentro de este directorio a su vez puedes encontrar los siguientes directorios:

  • apps: Aplicaciones de ejemplo del tinyOS
  • support: código fuente del toolchain
  • tos: el sistema operativo propiamente dicho.

Puedes probar que todo está correcto compilado una aplicación de prueba que viene con el sistema. Copia el directorio apps/Null a algún sitio de tu home. Este directorio es un esqueleto de aplicación para tinyOS, que si bien no hace nada útil, te permite comprobar que has realizado correctamente todos los pasos anteriores.

Dentro de ese directorio, ejecuta el siguiente comando:

 $ make <plataforma_destino>

donde plataforma_destino puede ser uno de los siguientes:

 Valid targets: all clean eyesIFX eyesIFXv1 eyesIFXv2 intelmote2 mica2 mica2dot micaz null telos telosb tinynode tmote

que son plataformas hardware disponibles en el mercado (la mayoría de ellos como prototipos) para redes de sensores inalámbricas.

Tiny-OS en Windows

Con el cd de crosbow es muy windoze, ejecutar el instalador y ya sabeis, yes yes yes, I agree, yes yes :-)

Enlaces

  • Web de TinyOS
  • TOSSIM: El simulador
  • http://thomer.com/tinyos/
  • http://www.stoecklin.net/technology/tinyos/setup-howto/
  • http://www.moteiv.com/community/Moteiv_Boomerang_Fixes#TinyOS_1.x_upgrade.2C_nesC_fails
  • http://www.comnets.uni-bremen.de/typo3site/index.php?id=48
  • http://www.pages.drexel.edu/~kws23/
  • http://wass.homelinux.net/howtos/Comm_How-To.shtml

felixjesus.villanueva(la arroba)uclm.es
Mi web

Gráficas con gnuplot

2006-05-18 felix — [ edit | raw ]
  • recipe
migrated from node/302
Vamos a describir una serie de comandos básicos para el uso de gnuplot. Un programa para generar gráficas 2D y 3D a partir de datos "crudos" y funciones matemáticas.
Los usos y aplicaciones de esta herramienta son infinitas y lo más interesante, bastante simple de usar mediante comandos.

Instalación

La instalación no tiene ningún misterio y creo que está empaquetado para todas las distribuciones que generalmente usamos. No obstante en su página web se encuentra toda la información necesaria para la instalación y algunas gráficas de muestra de lo que se puede realizar con este sistema.

Gráficas a partir de datos

Creo que lo mejor es echarle un vistazo a un ejemplo e ir comentando los detalles. En el siguiente ejemplo sacamos una gráfica con el consumo de energía medio de un nodo a partir de una simulación del ns2.
set terminal postscript eps color
set grid
set xlabel "Node ID"
set xrange [0:50.0]
set ylabel "Energy(Joules)"
set yrange [0:20.0]
set title "Average energy consumed by Node"
plot "average-consume-bynode.data" with boxes
Todos los comandos tienen opciones varias para variar la presentación, tipo de gráfica, límites de la gráfica, etc. Sería imposible verlas todas por lo que os remito al manual :-). Volvamos con el ejemplo, la primera línea indica cómo queremos que nos saque la gráfica, le decimos que la saque por terminal, en postcript, eps y a todo color. Con "set grid" le indicamos que nos muestre la regilla en la gráfica. A continuación vamos con el eje de las X (es una gráfica 2D), primero indicamos con xlabel, la etiqueta que le queremos poner, y a continuación el rango. finalmente establecemos lo mismo con el eje de las Y. Para terminar de modelar nuestra gráfica le ponemos el titulo con "set title". Vale, lo último es indicarle dónde estan los datos a representar y cómo queremos que nos lo pinte, en este caso le decimos (última linea del ejemplo) que nos pinte los datos en average-consume-bynode.data con cajas (boxes). El archivo de los datos tiene esta pinta:
0 17.9791017
1 17.3219788
2 16.9751424
3 16.0370256
4 17.2629318
5 16.2645002
6 16.5181991
7 17.3706168
8 18.2454446
9 17.2866098
10 15.8625805
11 16.2917952
12 16.2480647
.. ........
La primera columna son las X y la segunda las Y. Bueno, pues vamos a pintar, podemos teclear los comandos anteriores aunque os recomiendo que los metais en un archivo (en nuestro caso en el archivo average-consume-bynode.dem), con lo cual si ejecutamos:
$ gnuplot average-consume-bynode.dem > grafica.ps
En gráfica.ps tendremos nuestra gráfica:
$ gv grafica.ps
con solo cambiar el estilo (palabra a la derecha del with en la última linea) podeis tener diferentes tipos de gráficas para adaptarla a aquellas que mejor representen vuestros datos. Concretamente se pueden usar:
`lines`, `points`, `linespoints`, `impulses`,
 `dots`, `steps`, `fsteps`, `histeps`, `errorbars`, `xerrorbars`,
 `yerrorbars`, `xyerrorbars`, `errorlines`, `xerrorlines`, `yerrorlines`,
 `xyerrorlines`, `boxes`, `filledcurves`, `boxerrorbars`,
 `boxxyerrorbars`, `financebars`, `candlesticks`, `vectors` or `pm3d`

Gráficas de funciones

Otra posible aplicación es obtener datos de funciones matemáticas. Vamos a ver un ejemplo extraido de la demo gallery, dónde hay un montón de ejemplos que os pueden servir como referencia de lo que se puede hacer. Ahora lo vamos ha realizar desde la línea de comandos ejecutando gnuplot estableciendo la rejilla y utilizando la función splot (usada para funciones 3D y superficies). Esta genera una gráfica con las funciones que le especifiques. Si quieres representar mas de una función no te olvides de separarlas por comas. Aqui esta el ejemplo tal y como se ejecuta:
felix$ gnuplot

        G N U P L O T
        Version 4.0 patchlevel 0
        last modified Thu Apr 15 14:44:22 CEST 2004
        System: Linux 2.6.14-2-386

        Copyright (C) 1986 - 1993, 1998, 2004
        Thomas Williams, Colin Kelley and many others

        This is gnuplot version 4.0.  Please refer to the documentation
        for command syntax changes.  The old syntax will be accepted
        throughout the 4.0 series, but all save files use the new syntax.

        Type `help` to access the on-line reference manual.
        The gnuplot FAQ is available from
                http://www.gnuplot.info/faq/

        Send comments and requests for help to
                <gnuplot-info@lists.sourceforge.net>
        Send bugs, suggestions and mods to
                <gnuplot-bugs@lists.sourceforge.net>


Terminal type set to 'x11'
gnuplot> set grid
gnuplot> splot x**2+y**2, x**2-y**2
gnuplot>
Y ya tienes tu primera gráfica en 3D.

La ayuda

Las combinaciones son infinitas para lo cual gnuplot nos da una ayuda por comandos bastante extensa. generalmente con un help te muestra una ayuda en secciones para que veas las distintas posibilidades. Como ya he dicho arriba, en mi opinión la mejor fuente de ayuda son los ejemplos, simplemente busca el tipo de gráfico que quieres y fijate en como lo han diseñado.

Manos libres Bluetooth con GNU/Linux

2006-03-23 felix — [ edit | raw ]
  • recipe
  • Arco
migrated from node/266
Una de las aplicaciones más útiles a realizar con los móviles Bluetooth es poder atender una llamada mediante el micrófono y los altavoces del PC o portátil. Lo que vulgarmente se denomina un "manos libres". En esta receta vamos a configurar nuestro GNU/Linux para poder ser utilizado de esta forma.

Compilando el servicio

Lo primero que hay que reconocer es que el servicio está un poco verde y no va a sonar todo lo bien que esperais, con paciencia y buceando en el código supongo que se puede ajustar, pero eso, simplemente supongo.. Bueno, lo primero que hay que hacer es bajarse el servicio handsfree de su página web. Básicamente hay que seguir las instrucciones de la página web para compilar el servicio y como pre-requisitos :
  • Tener instalada la pila bluez y las herramientas asociadas. En la anterior receta ya se daban unas nociones básicas de cómo usar estas herramientas.
  • Tenemos que tener instalado las librerias de desarrollo. En debian el paquete es libbluetooth1-dev.
  • Otra cosa a tener correctamente configurado es el sistema alsa así como sus librerías de desarrollo (libsound2-dev) para el tema del sonido.
La aplicacion handsfree viene con un Makefile por lo que salvo errores de librerias y rutas con un simple make deberíais tener el servicio compilado.

Ejecutando el servicio

Bueno, ahora viene la parte de ejecución del servicio, lo primero es asociar el móvil con el PC, generalmente te pedirá el pin. Este paso no es necesario y siempre puedes introducir el pin cada vez que uses el servicio, pero vamos, lo más cómodo es asociarlo (bluez-pin es la herramienta para gestionar los PIN desde la parte del PC). A continuación es necesario añadir dos servicios al registro de servicios del PC, el serial port y el handsfree. Esto se realiza con sdptool, por lo tanto:
felix#:sdptool add SP
felix#:sdptool add HF
A continuación ejecutamos el servicio con:
felix#:./handsfree ADDR 3
ADDR es la dirección de tu móvil y 3 el canal del handsfree. Para ver cuales son tus parámetros lo mejor es realizar un escaneo:
felix:hcitool scan
Scanning ...
        00:15:A0:42:34:8D       Nokia 6680
En cuanto al canal, pues mostrar todos los servicios de tu móvil y fijarnos en el canal (Channel) con:
felix:~# sdptool browse 00:15:A0:42:34:8D

Browsing 00:15:A0:42:34:8D ...

...todos los servicios
y ya esta todo, en teoría cuando recibas una llamada descuelgas y se escucha por los altavoces y hablas por el micro. Eso si, como dije al principio y dependiendo de la tarjeta de sonido puede sonar como los teleñecos :-). Es posible descolgar mediante comandos AT directamente desde el PC y utilizando el propio programa. Con esto y un poquito de shell puedes tener tu GNU/Linux siempre listo para atender llamadas. un saludo

Simulador ns2. Principios básicos.

2006-02-10 felix — [ edit | raw ]
  • Arco
migrated from node/224
Probablemente NS2 es el simulador de redes open source más extendido tanto en investigación como para propósitos docentes, en esta receta vamos a aprender a instalarlo y a simular un escenario para MANET's muy simple.
Leer más

Bluetooth en GNU/Linux

2006-01-19 felix — [ edit | raw ]
  • recipe
  • Arco
migrated from node/197

Esta receta pretende ser un pequeño tutorial de uso de Bluetooth en GNU/Linux

Usaremos básicamente las utilidades instaladas por el paquete bluez-utils empleadas en el desarrollo de aplicaciones bluetooth.

Ingredientes

Todos ellos paqutes Debian/Ubuntu

  • bluetooth: la pila propiamente dicha
  • bluez-pin: para gestionar los PIN
  • bluez-utils: servidores y utilidades
  • bluez-hcidump sniffer de tráfico HCI

Comandos

Entre los comandos que nos instalan estos paquetes, puedes encontrar:

Examinar la interface

# hciconfig -a
hci0:   Type: USB
        BD Address: 00:08:1B:03:05:25 ACL MTU: 192:8 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:385 acl:0 sco:0 events:18 errors:0
        TX bytes:319 acl:0 sco:0 commands:17 errors:0
        Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'homer'
        Class: 0x3e0100
        Service Classes: Networking, Rendering, Capturing
        Device Class: Computer, Uncategorized
        HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d
        Manufacturer: Cambridge Silicon Radio (10)

Escaner (usando una iface determinada)

 $ hcitool -a hci0 scan

Sniffer de HCI

 hcidump

Servidor hci (hcid)

Su configuración está en /etc/bluetooth/hcid.conf y la base de datos con los pin en /etc/bluetooth/pinDB

Descubrimiento de servicios

El demonio del protocolo de descubrimiento de servicios SDP (Service discovery protocol) es sdpd

Gestión de SDP

# sdptool
sdptool - SDP tool v2.24
Usage:
        sdptool [options] <command> [command parameters]
Options:
        -h              Display help
        -i              Specify source interface
Commands:
        search          Search for a service
        browse          Browse all available services
        records         Request all records
        add             Add local service
        del             Delete local service
        get             Get local service
        setattr         Set/Add attribute to a SDP record
        setseq          Set/Add attribute sequence to a SDP record

Services:
        DID SP DUN LAN FAX OPUSH FTP HS HF SAP NAP GN PANU HID CIP CTP
        A2SRC A2SNK AVRCT AVRTG SR1 SYNCML ACTIVESYNC HOTSYNC PALMOS
        NOKID PCSUITE

Es importante resaltar que para que un servicio sea descubierto, debes añadirlo mediante un sdptool add &lt;servicio>, la lista de abajo del comando anterior nos muestra los servicios disponibles.

Algunos comando útiles

Con hcitool scan obtendrás una lista de los dispositivos presentes a tu alrededor.

$ hcitool scan
Scanning ...
        00:15:A0:42:34:8D       Nokia 6680

Muestra la dirección bluetooth y el nombre, puedes comprobar la dirección bluetooth en los nokia 66** tecleando el código “*#2820#”

Para obtener una lista de los servicios que ofrece cada dispositivo usamos la herramienta sdptool, en nuestro caso, y para ver lo que ofrece el móvil:

# sdptool browse 00:15:A0:42:34:8D

Browsing 00:15:A0:42:34:8D ...
Service Name: Hands-Free Audio Gateway
Service RecHandle: 0x10003
Service Class ID List:
  "Handfree Audio Gateway" (0x111f)
  "Generic Audio" (0x1203)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 2
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Handfree Audio Gateway" (0x111f)
    Version: 0x0101

Service Name: Headset Audio Gateway
Service RecHandle: 0x10004
Service Class ID List:
  "Headset Audio Gateway" (0x1112)
  "Generic Audio" (0x1203)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 3
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Headset" (0x1108)
    Version: 0x0100

...todos los servicios

Esto proporciona toda la información que necesitas acerca de todos los servicios presentes en el dispositivo, en este caso el teléfono móvil.

Servicio dial-up networking

Nos vamos a centrar en el servicio dial-up networking, para ello observamos que la salida del comando anterior nos presenta la siguiente información:

Service Name: Dial-Up Networking
Service RecHandle: 0x1000e
Service Class ID List:
  "Dialup Networking" (0x1103)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 3
Language Base Attr List:
  code_ISO639: 0x454e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100

Para indicarle al ordenador que vamos a usar ese servicio necesitas editar el archivos /etc/bluetooth/rfcomm.conf e insertar una entrada tal que:

rfcomm1 {
        bind no;
        device 00:15:A0:42:34:8D;
        channel 3;
        comment "Dial-up networking";
        }

donde el device es el identificador del movil y el channel el que nos indica el registro obtenido con sdptool, justo despues de “RFCOMM” (0×0003).

Reinicia para cargar la nueva configuración:

# /etc/init.d/bluez-utils restart
Restarting bluez-utils: hcid sdpd rfcomm.

# rfcomm release 1

# rfcomm connect 1
Connected /dev/rfcomm1 to 00:15:A0:42:34:8D on channel 10
Press CTRL-C for hangup

Ya tienes una conexión lista, con lo cual, por ejemplo, si estas en un portátil en mitad del campo y quieres conectarte a internet con tu
portátil a través de tu móvil tienes que configurar un enlace ppp a través del móvil.

Para eso, tienes comandos muy interesantes:

  • pand: TCP/IP sobre Bluetooth
    • —listen para el servidor
    • —connect para el cliente
  • /etc/bluetooth/pan/dev-up: pand ejecuta este script al levantar TCP/IP.
  • dund: Ejecutar PPP sobre Bluetooth RFCOMM
    • —listen para el servidor
    • —connect para el cliente

Si no has establecido una “relación de confianza” entre tu móvil y tu
portátil te pedirá en ambos dispositivos el pin.

Protocolo OBEX

Si quieres mandarle un archivo a tu teléfono puedes utilizar el protocolo OBEX. Con gnome-obex-send puedes mandarle un archivo y con gnome-obex-server debe aparecer una opción en nautilus, de forma que, si haces click en el botón derecho sobre un archivo debería aparecer una opcion para enviarlo via bluetooth.

Configurando un Headset

Una interesante aplicación es la de poder usar uno de esos micrófonos y auriculares bluetooth. Estos dispositivos implementan un servicio denominado headset.

Para ello existe un interesante proyecto basado en Alsa, lo puedes encontrar en bluetooth-alsa (no es paquete debian).

Dos errores que surgieron en la configuración son:

felix:# btsco
Error: control open (hw:0): No such device
Error: Can't find device. Bail

Esto indica que no tienes configurados los drivers de alsa y no encuentran los dispositivos. Prueba a instalar y ejecutar el alsaconf para instalar alsa.

Otro problema, despues de instalar los drivers de alsa puede ser:

felix:# btsco
Error: hwdep next device (hw:0): Operation not permitted
Error: control open (hw:1): No such device
Error: Can't find device. Bail

No tienes cargado el modulo del kernel snd-bt-sco, está en el directorio kernel del programa btsco, tienes que ejecutar make; make install en dicho directorio.

Si al hacer modprobe snd-bt-sco, no lo encuentra (y se te ha compilado todo bien) copia el .ko a mano a /lib/modules/2.6.14-2-386/kernel/drivers/ poniendo la versión del kernel que tengas (la mia es una 2.6.14-2-386).

Comentarios

Esta receta se irá ampliando conforme se prueben mas servicios y utilidades.

Referencias

  • bluetooth-alsa
  • handset
  • Bluez

Bilo y Nano te necesitan

2005-12-16 felix — [ edit | raw ]
  • tale
migrated from node/156
Si te gusta la tira Ecol, ahora puedes devolverle a su autor, algunas de las carcajadas con un pequeño favor, te necesita para llevarse unas pelas en el concurso de 20minutos por su blog (es tan bueno o mas que la tira).
Leer más

Redes inalámbricas multisalto en GNU/Linux

2005-11-17 felix — [ edit | raw ]
  • recipe
  • Arco
migrated from node/102
Esta receta describe cómo configurar una red inalámbrica multisalto (MANET) bajo GNU Linux totalmente func