<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-05-03/principios-first.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-11/wifi-de-la-uclm-bajo-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-06-13/backup-para-mviles-siemens.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-10-21/cumpleaos-feliz.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-12-13/convertidor-de-video.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2012-01-07/wm8650.html
---
<file_sep>---
layout: post
title: "How to annotate/tag stdout and stderr outputs with bash"
author: david_villa
category: recipe
tags: bash shell
lang: en
comments: true
---

Lets create a test script `test-std.sh`:

<pre class="bash">
#!/bin/bash --

echo info
echo error >&2
</pre>

We will use `sed` to prepend some text to each output line. To perform redirection we use a less known feature called [process substitution](https://www.gnu.org/software/bash/manual/html_node/Process-Substitution.html).

<pre class="console">
$ ./test-std.sh 2> >(sed 's/^/err: /g') > >(sed 's/^/out: /g')
out: info
err: error
</pre>

And... it's possible to use a different color to each of them too
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-13/compartir-la-conexin-a-internet-router-domstico-con-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-11-11/instalar-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-08-16/desactivacin-de-pitidos-varios.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-01-23/java-como-primer-lenguaje-mala-idea.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-06-14/nuevo-sistema-wifi-en-la-uclm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-21/mantener-ficheros-de-configuracin-con-subversion.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-10-10/steve-jobs-and-sus-isubnormales-diciendo-que-fu-un-genio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-28/concentrador-openvpn-en-debian-gnu-linux-o-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-25/dvb-t-realtek-2831u-on-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/configurar-mltiples-interfaces-de-red.html
---
<file_sep>---
migrated: node/1354
layout: post
title: Instalación de un servidor Apache, PHP y MySQL en Debian
created: 1272971234
author: Trini
comments: true
category: recipe
---
<h2>Introducción</h2>

<!--break-->




Cuando queremos crear una web dinámica y orientada al contenido, podemos hacer uso de lo que conocemos como gestor de contenidos o CSM (Content Management System). Drupal es un CMS que ofrece gran modularidad y una serie de ventajas que lo caracterizan. Es por ello que en este documento nos centraremos en la instalación de esta herramienta para demostrar, a pesar de lo que pueda parecer a primera vista, la sencillez de su configuración.


<h2>Instalación de Drupal</h2>



Para realizar la instalación de esta herramienta tiene que tener en cuenta una serie de requisitos previos como, por ejemplo, la instalación de unos determinados paquetes como son:

<ul>
  <li> apache2: es un servidor web de código abierto y se desarrolla dentro del proyecto HTTP Server de la Apache Software Foundation.</li>
  <li> php5: es un lenguaje de programación interpretado que utilizará para la creación de páginas web dinámicas. </li>
  <li> mysql-server: es el servidor de bases de datos de MySQL</li>
  <li> php5-mysql: es el módulo de MySQL para php5</li>
</ul>

Una vez que tiene disponibles todos estos paquetes, tendrá que instalarlos. Para llevar a cabo esta instalación, el comando que utilizará es 	<em>aptitude</em> y lo haremos de la siguiente forma:


<div class="console">
{% highlight console %}
aptitude install apache2 php5 mysql-server php5-mysql 
{% endhighlight %}
</div>


<h2>Referencias</h2>



<a href="http://drupal.org/">Página oficial de DRUPAL</a>





<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-28/magia-negra-con-scapy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-02/usando-gphoto2-desde-consola.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-18/scapy-2-0-0-5-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-10-29/pgina-web-rplica-en-espaol-de-emms.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-19/unicode-utf-8-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-09-29/xpweek-mis-conclusiones.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-06-25/la-forma-ms-sencilla-de-usar-repositorios-git-es-mercurial.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-21/router-nat-proxy-firewall.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-09-13/lexmark-e250d-en-debian-y-gnu-linux-en-general.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-09/creacin-de-un-parser-con-flex-y-bison-en-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-02-24/problemas-con-la-red-en-java-openjdk-6-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-05-12/notificacin-de-eventos-con-pynotify.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-27/la-informtica-dejar-de-ser-una-ingeniera.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2009-02-26/install-party-v-4.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-25/exposicin-por-tierras-de-molinux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-05-17/cairo-tutorial-en-castellano.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-08-29/real-como-la-vida-misma.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-21/xplanet-como-salvapantallas-con-gnome-screensaver.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-18/grficas-con-gnuplot.html
---
<file_sep>---
migrated: node/50
layout: post
title: "¡Usuarios Ubuntu!, ¿quereis Howto's?"
created: 1129715028
author: cleto
comments: true
category: new
---
¡Pues tomad Howto's! :-)

Es para la versión Hoary pero hay ciertas cosas que no dependen ni de que sea Hoary, ni que de sea Ubuntu. Muy chulo y muy completo. <a href="http://ubuntuguide.org/">AQUÍ LO TENEIS</a>.

Un saludo!
<file_sep>---
migrated: node/1436
layout: post
title: Archivos nuevos con el mismo grupo que el directorio padre
created: 1291501744
author: luis_munoz
comments: true
---
ASIGNAR UN GRUPO POR DEFECTO A LOS ARCHIVOS NUEVOS

<!--break-->

<a href="http://www.ssc.wisc.edu/sscc/ssccnews/linuxgroups.htm">http://www.ssc.wisc.edu/sscc/ssccnews/linuxgroups.htm</a>
<a href="http://es.wikipedia.org/wiki/Chmod">http://es.wikipedia.org/wiki/Chmod</a>

MÁSCARA CONCRETA PARA LOS ARCHIVOS
<a href="http://es.wikipedia.org/wiki/Umask">http://es.wikipedia.org/wiki/Umask</a>
<a href="http://www.escomposlinux.org/iarenaza/articulo-acls/acls-linux-samba.html">http://www.escomposlinux.org/iarenaza/articulo-acls/acls-linux-samba.html</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-11-21/el-piratear-se-va-a-acabar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-11/monitorizacin-de-los-sensores-de-tu-pc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-18/adaptador-wifi-usb-zyair-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-17/crear-un-iconview.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/recuperar-grub-despus-de-instalar-windows.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-09-03/gnu-emacs-el-cliente-de-twitter-definitivo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-02-28/compilacin-cruzada-de-iceservices-para-arquitecturas-arm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-24/uboot-arm-levntate-y-anda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-11-12/aprender-a-escribir-en-la-web.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-11/una-curiosidad-huevo-de-pascua.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-05-10/rabietas-de-patio-de-colegio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-04-04/nueva-web-contra-el-canon-digital.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-02-09/tele-enseanza-en-terminales.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-19/televisin-digital-terrestre-tdt-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2007-01-06/slax-qemu-y-cintas-de-video.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-03-30/freeband-guitarra-y-batera-ms-arcade-que-nunca.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-20/iii-jornadas-de-software-libre-en-albacete.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-04-10/subttulos-fuera-de-la-imagen-en-mplayer.html
---
<file_sep>---
migrated: node/193
layout: post
title: '"El reto de la semana", 2ª edición'
created: 1137530448
author: paco
comments: true
category: challenge
---
Vale, hora del siguiente reto (aunque sea la misma semana)

<h2>Subreto 1:</h2>

El fácil: Codificar un programa que admita una cadena de texto como argumento y detecte si esa cadena de texto es un palíndromo o no.


<!--break-->


Un palíndromo es un texto que se lee igual al derecho que al revés (ej: Dábale arroz a la zorra el abad).

Nótese que las tildes y las mayúsculas no cuentan.

<h2>Subreto 2</h2>

Mismo programa que antes pero ahora imprime por pantalla el mayor palíndromo que pueda extraer desde el comienzo de la cadena de texto.

Ale, a currelar.
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-07-21/gua-del-aspirante-a-mal-programador.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-03-28/kicad-resultado-final.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2009-01-17/soy-linux-y-mi-hermano-mi-perro-y-mi-coche-tambin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-04/gnu-linux-y-nintendo-ds-2-parte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-03-01/nexentaos-esto-es-gnu-no-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-28/mini-tutorial-de-gnu-make.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-04-19/abierta-inscripcin-a-da-de-software-libre-en-la-esii.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-17/pygtk-tips-n-tricks.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-14/la-pgina.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2010-06-17/por-qu-el-programador-no-es-la-estrella.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-06/configurar-adaptador-inalmbrico-de-red-usb-con-ndiswrapper.html
---
<file_sep>---
migrated: node/790
layout: post
title: SQL in'y'ection
created: 1192056756
author: david_villa
comments: true
tags:
- ocio
---
<center>
<a href="http://xkcd.com/327/"><img src="http://imgs.xkcd.com/comics/exploits_of_a_mom.png"/></a>
</center>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-03/solucin-al-problema-de-captura-por-firewire.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-07-23/el-put-canon.html
---
<file_sep>---
migrated: node/393
layout: post
title: Resucitando PentiumII
created: 1158319375
author: ixmith
comments: true
category: enquiry
---
Ahora que los exámenes han terminado he tenido tiempo para plantearme muchos interrogantes. Entre los más mundanos se encuentra el de qué hacer con mi viejo PII(mmx :-P)a 333Mhz, 128MB de RAM y 3,2GB de disco.

<!--break-->


En principio había pensado que me sería muy provechoso montarmelo "guay" utilizándolo como firewall en casa para los otros dos ordenadores con los que nos conectamos, y en un futuro ampliar como servidor Apache con web en plan amateur para colgar y tener a mano mis historias de la uni desde cualquier sitio. Aparte de compar tarjetas de red, cable cruzado etc. Necesito una distribución que pueda correr agusto. Algunos me diréis que Debian Sarge en modo consola (o al menos es lo que tengo pensado) pero sería preferible que también pudiera utilizar algún entorno gráfico, y no sé si de "correr", que era lo que pretendía, pasaría a "arrastrarse"...

Por ello os pido consejos, opiniones, experiencias parecidas, anécdotas y lo que se os ocurra :D

Saludos
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-08-21/stdeb-o-cmo-crear-paquetes-debian-de-mdulos-python-como-churros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-01/caducidad-de-las-claves-gpg-de-los-repositorios-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2009-12-03/pasito-a-pasito.html
---
<file_sep>jekyll website source for http://CRySoL.github.io

<file_sep>---
layout: refresh
refresh_to_post_id: /2005-11-25/consulta-sobre-distro.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-07-11/cmo-instalar-opencv-en-ubuntu-9-04.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-10-11/abierta-inscripcin-al-vi-concurso-universitario-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-04-17/fotos-de-las-jornadas-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-24/la-esi-organizar-la-party-quijote-2006.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-02-03/enviar-correo-a-travs-de-gmail-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-17/arranque-remoto-de-un-ordenador-con-debian-usando-wake-on-lan.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-11-07/introduccin-a-la-programacin-en-emacs-lisp-de-chassell.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-08/carga-dinmica-de-contenido-html-con-xmlhttprequest.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-03-10/cambiar-accels-de-gtk-sobre-la-marcha.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-11/gnu-emacs-construir-un-major-mode-paso-a-paso.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-10-31/soy-nuevo-en-esta-comunidad-saludos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-10-18/necesito-ayuda-con-la-compilacion-en-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-04-01/dinerocracia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-10-17/novato-en-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-27/un-10-para-la-install-party.html
---
<file_sep>---
migrated: node/965
layout: post
title: Patrones de diseño en Python
created: 1218306829
author: Vigilante
comments: true
tags:
- Python
---
Navegando por la red me he encontrado este par de vídeos que me parecen muy interesantes, considerando que por aquí hay muchos amantes de los patrones de diseño y del lenguaje de programación Python.

<!--break-->


Los vídeos son de una charla de Google TechTalks por <NAME> (el autor de Python Cookbook y Python in a Nutshell).


<a href="http://video.google.com/googleplayer.swf?docId=-3035093035748181693">Part I</a>


<a href="http://video.google.com/googleplayer.swf?docId=-288473283307306160">Part II</a>


<file_sep>---
migrated: node/1490
layout: post
title: Antiprogramación
created: 1302168376
author: nacho
comments: true
tags:
- platanada
---
Muchas veces se habla sobre cómo deberían hacerse las cosas, pero a veces no se muestran los <em>contraejemplos</em>. A raíz de una conversación en la <a href="/listas">lista de correo</a> se me ha ocurrido que podría ser útil tener una lista de ejemplos de malas prácticas de programación, cosas a evitar, desde fallos de novato hasta cosas más complejas.


<!--break-->


Empezaré con un par de ejemplos sencillos que me vienen a la cabeza, ejemplos <b>reales</b> que he visto, y espero que os animéis y publiquéis los que recordéis. Aquí los que más aportarán serán los profesores, que corrigen nuestras prácticas y seguro que más de una vez se llevan las manos a la cabeza (ahora los modernos lo llaman <em>facepalm</em>):

<h2>Condición múltiple</h2>
Este contraejemplo apareció en una práctica sobre un juego de ajedrez. Se trataba de comprobar las coordenadas de la pieza:
 

<div>
{% highlight java %}
if (row==1 || row==2 || row==3 || row==4 || row==5 || row==6 || row==7 || row==8) {
    if (col=='A' || col=='B' || col=='C' || col=='D' || col=='E' || col=='F' || col=='G' || col=='H' ){

        // coordenadas correctas, hacer cosas

    } else {
        // columna incorrecta
    }

} else {
    // fila incorrecta
}
{% endhighlight %}
</div>


Una solución mejor habría sido algo como:

<div>
{% highlight java %}
if (row<1 || row>8 || col<'A' || col>'H'){
    throw new InvalidCoordException(row, col);
}

// todo correcto, hacer cosas
}
{% endhighlight %}
</div>


<h2>Condición inversa</h2>
En la misma práctica también encontré esto:

<div>
{% highlight java %}
if (condición) {
} else {
    // hacer cosas
}
{% endhighlight %}
</div>

No recuerdo exactamente cuál era la condición, pero la idea era esa. Obviamente, hubo que sustituirlo por:

<div>
{% highlight java %}
if(!condición){
    //hacer cosas
}
{% endhighlight %}
</div>
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-03-08/la-docencia-en-secundara-no-ser-una-salida-profesional-para-los-titulados-universitarios-en-informtica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-11-13/aboutmozilla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-14/un-milln-de-gracias.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-04-03/el-sndrome-del-amigo-informtico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-28/arreglar-emacs-sin-fuentes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-27/grabar-cd-y-dvd-ms-rpido.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-03-20/intel-core-duo-34-fallos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-22/convertir-ficheros-ape-a-formato-wav-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-10-24/comienza-el-desarrollo-de-gnesis-3-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2012-02-19/pasta-con-pollo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-06-06/el-da-de-la-bestia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-09-06/y-no-es-broma-el-plagio-se-paga.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-04-21/configuracin-de-claws-mail-para-gmail-con-imap.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-07/buenas-referencias-malas-terribles-referencias.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-11-17/de-ingenieros-informticos-y-otras-criaturas-fantsticas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-04-15/patentes-inconcebibles-y-basura-espacial.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2011-03-17/un-pequeo-script-para-tener-un-jukebox-de-modarchive-org.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-17/gnu-linux-venezuela.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-12-06/pollo-a-la-cebolla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-10/simulador-ns2-principios-bsicos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2013-02-14/debian-gnu-linux-install-party-v-7.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-05-19/clase-latex-para-escribir-el-pfc.html
---
<file_sep>#!/bin/bash --
# -*- mode:shell-script; coding:utf-8; tab-width:4 -*-

set -e

if [ ! -e _site ]; then
    git clone https://github.com/CRySoL/CRySoL.github.io _site
fi
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-20/cambiar-el-timezone-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-01-25/dell-vende-porttiles-con-ubuntu-linux-de-serie-pero.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-02-07/updated-debian-packages-for-devkitpro.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-12/drupal-6-3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-29/charlas-sobre-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-13/gnu-emacs-ortografa-al-vuelo-con-flyspell.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-15/cmo-hacer-una-metadistro-usb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-26/nohands-convirtiendo-nuestro-pc-en-un-manos-libres-bluetooth.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-25/cmake-construir-una-librera-esttica-y-o-dinmica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-15/correr-programas-dos-en-molinux-con-dosemu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-06/mezclador-de-audio-por-software-con-alsa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-15/aceleracin-de-video-por-hardware-en-powerpc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-10-09/http-unidadlocal-com-nos-plagia-y-quiz-a-ti-tambin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-04-01/anti-hoygan-en-desarrollo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-09-20/empezando-con-mercurial.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/afbackup.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-09/instalar-un-sistema-bacula-en-gnu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-16/bilo-y-nano-te-necesitan.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-05/salvar-y-recuperar-una-base-de-datos-mysql.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-03-09/energa-en-ns2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-02-28/arte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-17/port-knocking-llama-antes-de-entrar.html
---
<file_sep>---
migrated: node/1346
layout: post
title: 'CMake: Enlazado de librerías'
created: 1269625517
author: cleto
comments: true
category: recipe
tags:
- Arco
- devel
---
<blockquote>En esta receta se explica cómo linkar binarios con librerías estáticas y dinámicas.</blockquote>

<h2>Linkado básico</h2>
A estas alturas ya conocemos cómo construir archivos binarios y librerías en CMake. Ahora supón que la librería dummy que se viene utilizando en los ejemplos está instalada en un path accesible y que el programa hello.cpp hace uso de la librería de forma dinámica. Una posible implementación de este escenario sería la siguiente:

<div>
{% highlight text %}
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(hello)

# Para includes
FIND_PATH(dummy_path dummy.h)  

IF(NOT dummy_path)
   MESSAGE(FATAL_ERROR "** Falta la cabecera dummy.h, dummy!")
ENDIF()

INCLUDE_DIRECTORIES(${dummy_path})

# Búsqueda del .so
FIND_LIBRARY(dummy_lib dummy)

IF(NOT dummy_path)
   MESSAGE(FATAL_ERROR "** Falta la librería dummy, dummy!")
ENDIF()

ADD_EXECUTABLE(hello hello.cpp)
TARGET_LINK_LIBRARIES(hello ${dummy_lib})
{% endhighlight %}
</div>

En primer lugar, se comprueba que es posible acceder a la librería dummy (tanto la cabecera como el archivo .so). Utilizando el comando TARGET_LINK_LIBRARIES se indica a CMake que el objetivo <tt>hello</tt> debe ser linkado con la librería <tt>dummy_lib</tt>.

Para una librería estática, sería muy similar el código ya que CMake detecta que se trata de un tipo u otro y genera el código necesario para linkar estática o dinámicamente según la librería encontrada.

<h2>FindPkgConfig</h2>
Habitualmente, muchas librerías que se utilizan en sistemas como GNU utilizan la herramienta pkg-config que ayuda a obtener las distintas variables necesarias (CFLAGS, LDFLAGS, etc).

CMake proporciona un módulo llamado FindPkgConfig que incluye comandos útiles para encontrar librerías que utilizan pkg-config. Pese a que se incluye en la distribución estándar, CMake no recomienda el uso de este módulo porque es posible que haya sistemas privativos que no tengan instalada la aplicación pkg-config. Pero eso, no nos preocupa... ¿verdad? :-)

Supón que el programa <tt>hello</tt> utiliza glib. Podríamos comprobar que está instalado y enlazarlo como sigue:


<div>
{% highlight text %}
#Carga del módulo
include(FindPkgConfig)
PKG_CHECK_MODULES(glib REQUIRED glib-2.0) # REQUIRED=Fallará si no lo encuentra

# En "glib_INCLUDE_DIRS" se han cargado los directorios (-I del compilador)
INCLUDE_DIRECTORIES(${glib_INCLUDE_DIRS})

ADD_EXECUTABLE(hello hello.cpp)

# En "glib_LIBRARIES están el nombre de las librerías (-l del compilador)
TARGET_LINK_LIBRARIES(hello ${glib_LIBRARIES}
{% endhighlight %}
</div>

¿Y cómo es que en glib_LIBRARIES y glib_INCLUDE_DIRS se guardan esos datos?. Los módulos Find* de CMake crean variables para que el usuario las pueda utilizar en caso de encontrar la librería o el objeto que se esté buscando. Una buena forma de saber sobre qué variables se dispone es consultando la documentación. En la cabecera de los módulos también viene esta información (en Debian <tt>/usr/share/cmake2.8/Modules/*.cmake</tt>).
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-06/uimanager-con-actions-avanzadas-en-pygtk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-21/svn-externals-dependencias-entre-repos-subversion.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-04-15/gnu-emacs-macros-de-teclado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-28/gran-acogida-de-la-plataforma-de-formacin-de-la-junta-con-el-ceslcam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/ejecutar-programas-x-en-otra-mquina-vindolos-en-local.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-25/manipulacin-de-ficheros-avi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-09/gnu-emacs-the-kill-ring.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-22/bindings-python-de-libreras-c-con-boost-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-02-12/cmo-funciona-apt-dpkg.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-24/particin-cifrada-con-dm-crypt-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-11-13/libro-de-pegatinas-sobre-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-02/ejecutar-un-comando-como-si-fueras-otro-usuario-sudo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2011-07-24/la-historia-de-opengl-vs-direct3d.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-02-27/mas-librerias-para-kicad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-09-15/resucitando-pentiumii.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-02-12/preguntas-inteligentes-lectura-obligatoria.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-01-07/nuevo-window-xp-le-acercamos-al-holocausto-nuclear.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-23/mini-watchdog-en-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-12-02/manifiesto-en-defensa-de-los-derechos-fundamentales-en-internet.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-05-12/contenidos-libres.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-06/gracias-al-canon.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-12-01/los-ilegales-intentan-engaarte-no-te-dejes-manipular-para-que-nadie-te-time.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-06-01/trucos-y-cosas-gnome-y-cambio-de-ventanas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2010-07-01/procrastinacin-y-el-mal-de-la-computadora.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-12-19/encuentro-digital-con-david-bravo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-01-20/3-meses-de-estadsticas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-25/arranque-desde-red-sin-disco-duro.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-24/reproductores-gstreamer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-07-01/apple-wireless-keyboard-con-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-25/montar-un-repositorio-estndar-de-paquetes-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2011-07-05/nombres-de-teclas-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-10-29/visita-guiada-a-emacs-rplica-en-castellano.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-09/para-reir-un-poco.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2006-11-17/ensalada-de-queso-de-cabra-con-anchoas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-13/emulador-de-cisco-ios-dynamips-y-dynagen.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-12-25/virtual-machine-unattended-debian-installations-with-libvirt-and-d-i-preseeding.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-02-17/por-qu-no-me-va-el-compilador-de-c-gcc-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-07-05/inotify-acciones-disparadas-por-cambios-en-el-sistema-de-ficheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-05-05/plugin-de-bsqueda-para-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-05/configuracin-y-disfrute-de-un-sai-nut-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-24/lantronix-xport.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-10/mdem-comtrend-ct-350-en-gnu-linux-con-el-driver-ueagle-atm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-19/recuperar-fotos-y-videos-borrados-de-una-cmara-digital.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-19/ati-y-libgl-so-1.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-09/subir-gnesis-a-www-espaciolinux-com.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-15/mdem-comtrend-ct-351-con-adsl-de-telefnica-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-01-25/inyeccin-de-trfico-en-chipsets-atheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-26/grub-perdido.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-01-17/ver-eventos-deportivos-usando-sopcast-y-xbmc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-08-21/el-fin-del-ethereal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-02-01/cambiar-contrasea-en-particin-cifrada.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /offer/2007-11-14/bolsa-de-trabajo-ceslcam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-10/libremeeting-en-miraflores-de-la-sierra-madrid.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-05-08/presentacin-del-club-net.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-07-05/ga-canon-y-presuncin-de-culpabilidad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-11-10/el-supremo-de-ee-uu-decide-qu-invenciones-son-patentables.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-08-19/microsoft-somos-todos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-24/servir-un-repositorio-subversion-con-apache-2-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-08-05/la-esi-de-ciudad-real-distribuir-gnesis-a-sus-alumnos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-16/samsung-syncmaster-203b-con-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-11/como-aprovechar-la-ram-al-mximo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2008-09-26/reto-de-la-semana-display-7-segmentos-oblcuo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-11-16/widows-vista-rtm-leaked-y-activado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-06-04/windows-vista-ideal-si-tu-porttil-va-sobrado-de-batera.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-18/m-libera-la-especificacin-del-formato-de-los-ficheros-de-office.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-04-11/gaim-cambia-de-nombre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-09-29/probando-os.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-03-19/adios-google-reader-hola-tiny-tiny-rss.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-09-29/eduroam-en-android-con-certificado-usando-un-qr-code.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-03-24/si-es-legal-es-legal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-10/configurar-paneles-de-gnome-con-doble-monitor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-12/oscilador-interno-del-pic16f690.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-10/analizador-lxico-sintctico-y-semntico-con-jflex-y-cup.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-06-10/crysol-en-baquia-tv.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-05/comienzan-los-preparativos-para-la-fase-final-del-i-concurso-de-sl-de-c-lm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-05-04/instalacin-de-un-servidor-apache-php-y-mysql-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-01-26/easygit-git-para-gente-normal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-27/tcpstat-estadsticas-de-la-red.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-06/instalar-debian-gnu-hurd-bajo-qemu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-10-29/redes-neuronales-eso-es-todo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-17/conectar-por-ssh-a-travs-de-un-proxy-http.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-03/utilizar-un-mando-wii-con-tu-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-11-16/al-parecer-utilizar-gnu-linux-es-delito-en-la-universidad-de-boston.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-05-06/el-software-libre-favorece-a-la-empresa-www-expansion-com.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-31/crear-un-instalador-auto-extraible-para-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-04/control-de-acceso-con-pam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-05-02/fluendo-busca-gente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-08/cintas-de-backup-y-cargadores-mt-y-mtx.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-17/patrn-threadpool-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-28/gstreamer-whats-new.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2008-11-21/ayuda-con-mail-sendmail.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-09-27/acceso-a-red-cmpus-con-firefox-y-greasemonkey.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-25/nueva-versin-de-uclmwifi-1-5-5.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-19/arreglar-fuentes-pequeas-en-aplicaciones-gtk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2007-01-04/poner-etiquetas-a-los-discos-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-10-15/software-libre-y-recetas-de-cocina.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-22/recuperacin-de-un-sistema-completo-mondo-y-bacula.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-06-18/qu-hay-detrs-de-opera-unite.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-01-16/sesin-tcnica-sun-opensource-technologies-en-la-esi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-14/gnu-emacs-mejorando-tabbar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-01-29/redmine-pam-authentication-plugin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-05-04/proxy-socks-con-ssh-ms-fcil-imposible.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-19/unos-tests-de-logo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-07/cups-o-dnde-est-mi-cola.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-06-20/yo-plagio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2006-08-13/el-reto-de-la-semana-5-edicin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-07-24/linus-tolvards-eres-mu-tonto-tontismo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2010-11-11/manual-de-auctex-para-gnu-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-20/empezar-en-zope-plone.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-10-30/tarta-de-manzana.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-11-10/introduccin-a-los-hilos-con-la-librera-glib.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-07/conectar-a-internet-por-medio-de-un-mvil-3g-editado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-12-07/entrevista-a-ana-mara-mndez-apemit.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-06/creative-zen-con-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-10-25/grupo-de-usuarios-de-gnu-linux-de-boston-usa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-16/gaim-2-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-20/canon-ixus-55-con-gphoto2-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-04/quin-teme-al-lobo-feroz.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-21/bogoutil-completa-bogofilter.html
---
<file_sep>---
migrated: node/1380
layout: post
title: 'FoxG20 '
created: 1279288389
author: icaro
comments: true
tags:
- embedded
---

<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-26/cmake-compilando-aplicaciones-zeroc-ice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-09/hacer-un-makefile-para-paquete-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-09-26/buenas-a-tods.html
---
<file_sep>---
migrated: node/1438
layout: post
title: Kit de desarrollo libre para PS3
created: 1291925549
author: int-0
comments: true
category: recipe
tags:
- embedded
---
<blockquote>Hola amigüitos! si sois alegres poseedores de una PS3 con FW3.50 o anterior y tenéis a vuestra disposición algún dispositivo <em>jailbreaker</em> sabréis que la ejecución de programas caseros o <em>homebrew</em> está en vuestras manos. Pero claro, eso para está web no es nada... a nosotros nos gusta más <em>desarrollar</em> esos programas caseros. Existen por internet varios <em>SDK's</em> oficiales filtrados, pero que no debéis usar (ni, por tanto, publicar aplicaciones compiladas con esos kits). Es ilegal que los uséis porque no tenéis la licencia, así que si encontráis alguno, como material didáctico están muy bien, pero hasta ahí su utilidad práctica. En esta receta explicaremos cómo compilarnos nuestro propio kit de desarrollo legal para hacer nuestras aplicaciones caseras legales que correrán en cosolas <em>jailbreakadas</em>.</blockquote>

<h2>Qué necesitamos</h2>
Bueno, nuestra distro tiene que contar con los siguientes paquetes:

<div class="console">
{% highlight console %}
# aptitude install git libelf-dev python zlib-dev autotools autoconf automake bison flex gcc make autotools patch subversion wget texinfo
{% endhighlight %}
</div>
Lamentablemente puede que se me olvide alguno, si es así rogaría que me lo comentaseis.

Ahora necesitamos un sitio donde meterlo todo, es decir, <tt>/usr/local/</tt>. Ahí crearemos un directorio y le daremos permisos de escritura al grupo <em>staff</em> (al que perteneceremos) para no tener que hacer las cosas como <em>root</em>:

<div class="console">
{% highlight console %}
# cd /usr/local
# mkdir ps3dev
# chown root:staff ps3dev
# chmod 775 ps3dev
{% endhighlight %}
</div>

Vale y ahora ajustaremos las variables de entorno para que todo quede bien organizadito (estas lineas, además de ejecutarlas, añadirlas en vuestro <tt>~/.bashrc</tt> o similar) (esto hacedlo ya como vuestro usuario):

<div class="console">
{% highlight console %}
$ export PS3DEV=/usr/local/ps3dev
$ export PATH=$PATH:$PS3DEV/bin
$ export PATH=$PATH:$PS3DEV/ppu/bin
$ export PATH=$PATH:$PS3DEV/spu/bin
{% endhighlight %}
</div>

Bien, con esto podremos compilarnos e instalar la <em>toolchain</em>, pero nos hará falta el <em>SDK</em> para poder crear nuestros ejecutables para la PS3. Le haremos sitio al <em>SDK</em> de la siguiente manera:

<div class="console">
{% highlight console %}
$ cd $PS3DEV
$ mkdir psl1ght
{% endhighlight %}
</div>

Y de la misma manera que antes, creamos la variable de entorno (meted esto también en vuestro <tt>~/.bashrc</tt>):

<div class="console">
{% highlight console %}
$ export PSL1GHT=$PS3DEV/psl1ght
{% endhighlight %}
</div>

Vale, ya lo tenemos todo listo... ahora a descargar y compilar...

<h2>Compilar e instalar la <em>toolchain</em></h2>

Bueno, yo tengo mi directorio <tt>~/repos</tt> donde guardo todas estas cosas, vosotros podéis meterlo donde os plazca... si lo hacéis como yo:

<div class="console">
{% highlight console %}
$ cd ~/repos
{% endhighlight %}
</div>

Y a descargar:

<div class="console">
{% highlight console %}
$ git clone https://github.com/ooPo/ps3toolchain.git
{% endhighlight %}
</div>

Cuando esto termine: a compilar, parchear e instalar, es decir:

<div class="console">
{% highlight console %}
$ cd ps3toolchain
$ ./toolchain.sh
{% endhighlight %}
</div>

Y esto tardará la vidaaaa... (bueno, según vuestros sistemas...) el caso es que tiene que crear dos <em>toolchains</em> una para el <em>PowerPC</em> (conocido como <em>PPU</em>) y otra para los <em>Synergistic Processors</em> (conocidos como <em>SPU's</em>).

<blockquote>Atención: debido a que algunas URL's que utiliza el script pueden estar <em>offline</em>, habría que realizar los siguientes cambios en estos scripts: <tt>scripts/002-gcc-4.5.1-PPU-stage1.sh</tt>, <tt>scripts/004-gcc-4.5.1-PPU-stage2.sh</tt>, <tt>scripts/007-gcc-4.5.1-SPU-stage1.sh</tt> y <tt>scripts/009-gcc-4.5.1-SPU-stage2.sh</tt>
La línea:
<pre>wget --continue http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2 || { exit 1; }</pre>
sustituirla por:
<pre>wget --continue http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2 || {exit 1; }</pre>
</blockquote>

Si todo ha salido bien podréis hacer algo como:

<div class="console">
{% highlight console %}
$ ppu-gcc --version
ppu-gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
{% endhighlight %}
</div>

<div class="console">
{% highlight console %}
$ spu-gcc --version
spu-gcc (GCC) 4.5.1
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
{% endhighlight %}
</div>

<h2>Compilar e instalar el <em>SDK</em>: <em>PSL1GHT</em></h2>

Bueno, como antes, si tenéis vuestros repos en <tt>~/repos</tt> haced lo siguiente y si no, hacedlo donde queráis:

<div class="console">
{% highlight console %}
$ cd ~/repos
{% endhighlight %}
</div>

Descargamos el <em>SDK</em>:

<div class="console">
{% highlight console %}
$ git clone https://github.com/HACKERCHANNEL/PSL1GHT.git
{% endhighlight %}
</div>

Cuando esto termine: a compilar, parchear e instalar, es decir:

<div class="console">
{% highlight console %}
$ cd PSL1GHT
$ make
$ make install
{% endhighlight %}
</div>

Como su nombre indica... es ligerito así que no tardará mucho... después de esto ya estaréis en condiciones de crear vuestros programas para la PS3... peero...

<h2>Algunas librerías útiles</h2>
Si queremos instalarnos algunas librerías portadas a la PS3 como <em>zlib</em>, <em>libpng</em>, <em>libjpeg</em>, <em>freetype</em>, <em>pixman</em>, <em>libogg</em>, <em>libvorbis</em>, <em>libzip</em> o incluso <em>cairo</em>, haremos lo siguiente:


<div class="console">
{% highlight console %}
$ cd ~/repos
{% endhighlight %}
</div>

Descargamos los scripts de <em>ooPo</em> que es muy majo:

<div class="console">
{% highlight console %}
$ git clone https://github.com/ooPo/ps3libraries.git
{% endhighlight %}
</div>

Y a compilar e instalar, es decir:

<div class="console">
{% highlight console %}
$ cd ps3libraries
$ ./libraries.sh
{% endhighlight %}
</div>

Ya tenemos bastantes cositas para empezar a programar un <em>hola mundo</em> y algo más... pero como ya os dije antes, hay muchas librerías útiles por ahí que podemos ir instalando según nuestra necesidad.

<h2><em>vpcomp:</em> compilador de <em>programas</em> de vértices</h2>
Primero: ¿qué <em>demonios</em> es esto? pues más o menos lo siguiente: resulta que para mover vértices y todo ese rollo, los señores de <em>NVIDIA</em> han creado una especie de "máquina virtual", la cual interpreta una serie de <em>opcodes</em> para trabajar con datos escalares y vectoriales. En la PS3 esta máquina virtual puede interpretarse mediante una <em>SPU</em>, pero claro, alguien debe compilar esos <em>programas de vértices</em> en estos opcodes para la <em>SPU</em>, esto es: <b>vpcomp</b>

<h3>Requisitos no muy libres</h3>
Bueno, esto necesita el <em>NVidia Cg Toolkit</em> que es un compilador/intérprete de una especie de lenguaje ensamblador para <em>OpenGL</em>, podemos descargarnos <em>gratis</em> del <a href="http://developer.nvidia.com/page/cg_main.html">NVIDIA Cg website</a>. Descargaros el <b>tgz</b> de vuestra arquitectura (x86 o x86/64).

Ahora viene una cutrez: no vamos a instalar este paquete en nuestro sistema (bueno, si vosotros queréis dadle caña, lo tenéis también como paquete Debian). Como sólo necesitamos una biblioteca, vamos descomprimir el tgz y a copiar sólo lo que necesitamos en <tt>/usr/local</tt> (suponemos que estamos en el directorio donde descargamos el fichero):

<div class="console">
{% highlight console %}
$ unp Cg-3.0_November2010_x86.tgz
$ cp usr/lib/libCg.so /usr/local/lib/
$ cp -r usr/lib/include/Cg /usr/local/include/
$ sudo ldconfig
{% endhighlight %}
</div>

La última línea refresca la caché de bibliotecas, para asegurarnos que la tenemos "disponible".

<h3>Compilar e instalar</h3>
Bien, ya podemos volver al repositorio de <em>PSL1GHT</em> para compilarnos el <em>compilador</em>...

<div class="console">
{% highlight console %}
 $ cd PSL1GHT/psl1ght/tools/vpcomp
$ make
{% endhighlight %}
</div>

Se siente, el <tt>Makefile</tt> no tiene el target <em>install</em>, así que a <em>manímetro</em>:

<div class="console">
{% highlight console %}
 $ cp vpcomp $PSL1GHT/bin/
{% endhighlight %}
</div>

Y ya tenemos listo nuestro compilador de vértices... ;)

<h2><em>Tiny3D:</em> algo parecido al <em>OpenGL</em> en la PS3</h2>
Si, el <em>RSX</em> devora <em>OpenGL</em> que da gusto... pero para explotar eso (por ahora) tendríamos que echar mano del <em>SDK oficial</em> así que por ahora nos contentaremos con el magnífico <em>Tiny3D</em> de <em>Hermes</em>.

<h3>Requisitos</h3>
Todos los pasos anteriores, incluído el <em>vpcomp</em>.

<h3>Compilación e instalación</h3>
Pues nada, en nuestro directorio de repositorios:

<div class="console">
{% highlight console %}
$ git clone https://github.com/hermesEOL/tiny3d.git
$ cd tiny3d
$ make all

{% endhighlight %}
</div>

Si no hay ningún error, estaremos listos para usar la biblioteca. En <tt>tiny3d/docs</tt> tenéis un documentillo sobre la biblioteca y el <em>RSX</em> de la PS3.

<h2><em>ps3soundlib:</em> audio fácil para nuestros programas</h2>
También gracias a <em>Hermes</em> tenemos esta biblioteca que nos permite utilizar samples de 8 y 16 bits en mono y stereo. Reproducir los samples en <em>loop</em>, una vez , o incluso llamando a un <em>callback</em> al finalizar. En fin... más cositas útiles.
<h3>Requisitos</h3>
Los pasos para obtener la <em>toolchain</em> y el <em>PSL1GHT</em>, con eso es suficiente...
<h3>Compilar e instalar</h3>
Desde nuestro directorio de repositorios:

<div class="console">
{% highlight console %}
$ git clone https://github.com/hermesEOL/ps3soundlib.git
$ cd ps3soundlib
$ make
$ make install
{% endhighlight %}
</div>

Al igual que antes, si no obtuvimos ningún error, ya tendremos la biblioteca lista para usar en nuestros <em>homebrews</em>.

<h2>Guinda: la librería <em>SDL</em></h2>
<blockquote>Antes de que alguien se lleve a equívocos, hace tiempo que <em>SDL</em> fue oficialmente portado a PS3, entonces: <em>¿para qué todo esto?</em>. Pues fácil, el <em>port</em> en realidad es para el <em>OtherOS</em>, es decir, algún <em>GNU/Linux</em> que tengáis corriendo en aquellas PS3 con un FW que disponga de esa opción. Y os permitiría crear aplicaciones para <em>esa</em> distribución. En cambio este <em>port</em> os permitirá crear aplicaciones que utilicen <em>SDL</em> de forma <em>nativa</em> en la PS3. Es decir, sin necesidad de <em>OtherOs</em> ni nada por el estilo: compiláis, obtenéis un <tt>PKG</tt> que podréis instalar y a funcionar... ;)</blockquote>

<h3>Requisitos</h3>
Los pasos para obtener la <em>toolchain</em>, el <em>PSL1GHT</em> y las <em>ps3libraries</em> (ya sabéis: <em>Algunas librerías útiles</em>).

<h3>Compilación e instalación</h3>
Como siempre, desde nuestro directorio de repositorios:

<div class="console">
{% highlight console %}
$ git clone https://github.com/cebash/SDL_PSL1GHT.git
$ cd SDL_PSL1GHT
$ ./script.sh
$ make
$ make install
{% endhighlight %}
</div>

Y si no tuvimos ningún error tendremos <em>libSDL</em> listo para usar en nuestras aplicaciones <em>homebrew</em>.

Y ya está... creo que con esto podremos empezar a hacer nuestras aplicaciones caseras. De todas formas existen más librerías y utilidades por ahí que según vaya probando iré añadiendo en la receta, ok?

<h2>Para terminar: <tt>Makefile</tt></h2>
Os pongo un <tt>Makefile</tt> típico para que os cree los <em>targets</em> automáticos para generar los archivos <em>PKG</em> que contienen nuestras aplicaciones y que podremos instalar en la consola para ejecutar/distribuír nuestras creaciones.
<pre>.SUFFIXES:
ifeq ($(strip $(PSL1GHT)),)
$(error "PSL1GHT must be set in the environment.")
endif

include $(PSL1GHT)/Makefile.base

TARGET		:=	$(notdir $(CURDIR))
BUILD		:=	build
SOURCE		:=	source
INCLUDE		:=	include
DATA		:=	data
LIBS		:=	-lzip -lz -lgcm_sys -lreality -lsysutil -lio -ljpgdec -lnet -lsysmodule

TITLE		:=	Hello World - PSL1GHT
APPID		:=	TEST00003
CONTENTID	:=	UP0001-$(APPID)_00-0000000000000000

CFLAGS		+= -g -O2 -Wall --std=gnu99
CXXFLAGS	+= -g -O2 -Wall

ifneq ($(BUILD),$(notdir $(CURDIR)))

export OUTPUT	:=	$(CURDIR)/$(TARGET)
export VPATH	:=	$(foreach dir,$(SOURCE),$(CURDIR)/$(dir)) \
					$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export BUILDDIR	:=	$(CURDIR)/$(BUILD)
export DEPSDIR	:=	$(BUILDDIR)

CFILES		:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.c)))
CXXFILES	:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES		:= $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.S)))
BINFILES	:= $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.bin)))

export OFILES	:=	$(CFILES:.c=.o) \
					$(CXXFILES:.cpp=.o) \
					$(SFILES:.S=.o) \
					$(BINFILES:.bin=.bin.o)

export BINFILES	:=	$(BINFILES:.bin=.bin.h)

export INCLUDES	:=	$(foreach dir,$(INCLUDE),-I$(CURDIR)/$(dir)) \
					-I$(CURDIR)/$(BUILD)

.PHONY: $(BUILD) clean pkg run

$(BUILD):
	@[ -d $@ ] || mkdir -p $@
	@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile

clean:
	@echo Clean...
	@rm -rf $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).a $(OUTPUT).pkg

pkg: $(BUILD)
	@echo Creating PKG...
	@mkdir -p $(BUILD)/pkg
	@mkdir -p $(BUILD)/pkg/USRDIR
	@cp $(ICON0) $(BUILD)/pkg/
	@$(FSELF) -n $(BUILD)/$(TARGET).elf $(BUILD)/pkg/USRDIR/EBOOT.BIN
	@$(SFO) --title "$(TITLE)" --appid "$(APPID)" -f $(SFOXML) $(BUILD)/pkg/PARAM.SFO
	@$(PKG) --contentid $(CONTENTID) $(BUILD)/pkg/ $(OUTPUT).pkg

run: $(BUILD)
	@$(PS3LOADAPP) $(OUTPUT).self

else

DEPENDS	:= $(OFILES:.o=.d)

$(OUTPUT).self: $(OUTPUT).elf
$(OUTPUT).elf: $(OFILES)
$(OFILES): $(BINFILES)

-include $(DEPENDS)

endif</pre>

Está sacado del ejemplo <em>Hola mundo</em> del PSL1GHT.

<h2> Ps3sdk Builder</h2>
Bueno, aquí podréis encontrar un proyecto propio en fase ultrabeta quick & dity pero que instala (probado) el <em>toolchain</em>, el <em>psl1ght</em>, las <em>ps3libraries</em> y la <em>sdl_psl1ght</em> configurando las variables de entorno y todo ese rollo. <b>¡Cuidado porque no comprueba que tengáis los paquetes necesarios comentados en la receta!</b>.
<a href="http://github.com/int-0/Ps3sdk-Builder">Ps3sdk-Builder at github.com</a>

Disfruten! :D
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-08/configurar-el-superservidor-inetd.html
---
<file_sep>---
migrated: node/963
layout: post
title: 'Truco tonto: engañar a wget'
created: 1217975009
author: int-0
comments: true
category: recipe
tags:
- networking
---
<blockquote>Hola majetes! quizá alguna vez hayáis intentado descargar una página completa con <em>wget -r</em> y sin ningún motivo aparente se ha negado a llevar a cabo tal tarea... quizás podáis con este <em>cutre truco</em></blockquote>

<!--break-->



<h2>Quien necesita este truco</h2>
Veamos... suponed que queréis descargar todo un sitio <b>completo</b> con <em>wget</em>. El sitio detecta que intentáis conectar con un navegador <em>extraño</em> y os deniega las páginas. Cambiáis el <em>user agent</em> del <em>wget</em> con la opción adecuada... ¡y tampoco funciona!... pero esta vez habéis obtenido un fichero más: <b>robot.txt</b>. Este es un fichero que envían los servidores a los <em>robots</em> webs (<em>spiders</em>) con información sobre qué pueden y qué no pueden descargar (por ejemplo para evitar que un <em>spider</em> se quede mandando peticiones <em>php</em> sin fin).

Dado que este <tt>robots.txt</tt> se supone que es para hacerle caso, <em>wget</em> se compromete a usarlo y no ofrece ninguna opción para ignorarlo... (en la página <em>man</em> te vienen a decir que es compromiso de los desarrolladores) así que si la página que quieres descargar manda un <tt>robots.txt</tt> como el siguiente:
<pre>User-Agent: *
Disallow: /</pre>

Pues ya la hemos liado porque nuestro <em>wget</em> va a negarse a descargar nada...

<h2>El cutre truco</h2>
Vale... supongamos que queremos descargar completamente el dominio <em><a href="http://www.listillos.com">www.listillos.com</a></em> y al intentarlo hemos obtenido un directorio <tt>\<a href="http://www.listillos.com">www.listillos.com</a></tt> dentro del cual tenemos el temido archivo <tt>robots.txt</tt> que comentábamos anteriormente. Pues bien, si al <em>wget</em> le damos la opción <b>-c</b> (<em>continue</em>), cuando intente descargar <tt>robots.txt</tt> no lo hará porque ya se descargó uno (y será el que use), así pues sólo tendremos que modificar el archivo por algo parecido a:
<pre>User-Agent: *
Allow: *
Disallow: /nada_de_nada_hombre_que_las_cosas_son_pa_compartirlas</pre>

Es importante la última línea, porque si sólo cambiamos el <em>Disallow</em> por el <em>Allow</em> nuestro <tt>robots.txt</tt> ocupará menos que el que hay en el servidor y entonces <em>wget</em> lo volverá a descargar. Con la última línea inútil final nos aseguramos que <em>wget</em> no se descargue el fichero real... entonces... ¿cuál usa? pues el nuestro :P.

Como veis el truco es tan tonto que casi me da vergüenza ponerlo, pero quizá ayude a alguien... :). De todas formas los autores de <em>wget</em> podrían corregir esto de una forma bastante sencilla: descargando <tt>robots.txt</tt> y procesándolo directamente en memoria, sin necesidad de grabarlo en disco...
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-30/instalar-gnesis-en-un-usb-desde-windows-con-perdn.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-06-01/gnu-linux-como-espantapjaros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-05/programacin-de-usb-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-06/implementacin-de-cifrado-rc4-en-awk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-13/configuracin-manual-de-una-conexin-de-red-en-gnu-linux-con-net-tools.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-08/tes-emacs-server.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-15/nokia-6300-como-mdem-para-debian-con-simyo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-24/entorno-de-desarrollo-para-el-chumby.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-30/gnu-emacs-reemplazar-texto-en-mltiples-ficheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-12-25/manipulacin-de-ficheros-postscript.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2006-05-29/el-reto-de-la-semana-3-edicin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-27/pygtk-y-glade-guis-instantneas.html
---
<file_sep><div class="sidebar span3">
  {% include custom/logo %}
  {% include sidebar/for_posts %}
</div>

<div class="node span9">
  <div class="page-header">
    <h1>{{ page.title }} {% if page.tagline %}<small>{{page.tagline}}</small>{% endif %}</h1>
  </div>

  <div class="row-fluid post-full">
    <div class="span12">
      <div class="content">
	{{ content }}
      </div>

      {% for link_hash in page.links %}
        {% for link in link_hash %}
          {{ link[0] }}
        {% endfor %}
      {% endfor %}

      <hr/>

      {% include custom/post_embedded_paginator %}

      <hr/>

      {% include JB/comments %}

    </div>
  </div>
</div>
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2010-11-22/curso-de-introduccin-a-gnu-linux-en-la-esi-de-ciudad-real.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-26/hacer-paquetes-deb-a-partir-de-rpm-y-tar-gz.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-10-24/el-colmo-del-colmo-especulando-con-el-contenido-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-18/configurar-eclipse.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-01/proponiendo-actividades.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-10-25/zeroc-icestorm-gestionando-eventos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-02-08/configurar-apt-para-que-no-descargue-traducciones.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-05-05/comparaciones-odiosas-git-contra-el-mundo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2010-12-28/tomates-piratas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-08-21/utilizar-htc-magic-g2-como-mdem-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-29/solucin-al-problema-con-los-overlays-en-monitores-secundarios.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2011-05-09/liberado-el-cdigo-de-adventure-game-studio-ags.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-02/error-de-pmount-en-ubuntu-5-10.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-04-25/nintendo-wii-y-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-26/administrar-scripts-de-arranque.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-09-16/recuperar-iconos-perdidos-en-gnome.html
---
<file_sep>---
migrated: node/93
layout: post
title: Animo chicos
created: 1131707974
author: sqater07
comments: true
category: tale
---
Animo chicos con la party.
Soy un antiguo alumno, de informática de gestion.
Mola ver como os moveis.

Animo de <a href="http://www.lacoctelera.com/quijote/">quijote</a>

Si yo pudiera, instalaria y probaría molinux a fondo.
Creo que en inalambricas habría que meter algun .deb mas para que lo configurara antes.

Suerte.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-11/crear-un-paquete-debian-binario-sencillito.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-21/ice-en-la-fonera-ice-e-en-openwrt.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-07-17/la-realidad-amazon-supera-a-la-ficcin-derecho-a-leer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-28/tontuna-sobre-gates.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-11/micro-servidor-dns-con-scapy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-10/edicin-de-imgenes-en-consola-con-imagemagick.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-03-19/m-utiliza-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-21/tabletas-wacom-en-x-org.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-23/sacando-el-jugo-a-las-tarjetas-atheros-madwifi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-06-27/metaclase-para-invocacin-automtica-del-constructor-de-la-superclase.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/tes-emacs-bonito.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-10-10/editar-men-de-gnome-y-solucin-al-men-debian-desaparecido.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-04/metareceta-creacin-de-paquetes-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-09/servidor-tftp-con-inetd-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-10-01/el-inesperado-valor-docente-del-absentismo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-20/increble-pero-cierto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-01-21/wuming-la-guerrilla-cultural.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-06/respuesta-de-m-a-los-porttiles-a-100-para-el-tercer-munndo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-07-26/intro-psp-pseudo-demoscene-a-k-a-respuesta-a-nuestro-int-0.html
---
<file_sep>---
migrated: node/655
layout: post
title: Streaming RTP usando GStreamer
created: 1177438611
author: diego
comments: true
category: recipe
tags:
- gstreamer
---
<blockquote class="head">
Veremos como podemos hacer streaming utilizando el protocolo RTP (Real Time Protocol), usando tuberías GStreamer. Transmitiremos tanto audio como vídeo a través de las tuberías.
</blockquote>


<h2>Introducción</h2>
Necesitas tener instalados los paquetes gstreamer0.10-tools y los plugins necesarios: gstreamer0.10-plugins-base, gstreamer0.10-farsight, gstreamer0.10-plugins-good, gstreamer0.10-plugins-ugly, gstreamer0.10-alsa, gstreamer0.10-ffmpeg y gstreamer0.10-x.

El soporte de RTP en GStreamer actualmente es parcial, aún así, ya es posible ejecutar algunas tuberías que nos transmiten vídeo y audio utilizando RTP encima de UDP.

RTP se compone de dos protocolos: RTP y RTCP. RTP es el encargado de transmitir los datos del flujo multimedia, y RTCP se encarga del control de flujo. En los elementos udpsrc y udpsink de la tubería es necesario especificar un puerto par, que será usado por RTP. RTCP usará justo el siguiente, un puerto impar. También puede especificarse un host opcional para especificar la interfaz por donde mandaremos los paquetes.

<h2>Vídeo MPEG4</h2>
Ejecuta la siguiente tubería (emisor) con la opción verbose:

<pre class="console">$ gst-launch-0.10 -v filesrc location=~/streams/sincity.mp4 ! ffdemux_mov_mp4_m4a_3gp_3g2_mj2 ! rtpmp4vpay ! udpsink port=5000
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/pipeline0/rtpmp4vpay0.src: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, ssrc=(guint)2642861434, clock-base=(guint)3234275225, seqnum-base=(guint)52397, profile-level-id=(string)0, config=(string)000001200086c5d4c307d314043c1463000001b25876694430303334
/pipeline0/rtpmp4vpay0.sink: caps = video/mpeg, width=(int)640, height=(int)480, framerate=(fraction)30000/1001, systemstream=(boolean)false, mpegversion=(int)4, codec_data=(buffer)000001200086c5d4c307d314043c1463000001b25876694430303334
/pipeline0/rtpmp4vpay0.src: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, ssrc=(guint)2642861434, clock-base=(guint)3234275225, seqnum-base=(guint)52397, profile-level-id=(string)3, config=(string)000001b003000001b50900000100000001200086c5d4c307d314043c1463000001b25876694430303334
/pipeline0/udpsink0.sink: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, ssrc=(guint)2642861434, clock-base=(guint)3234275225, seqnum-base=(guint)52397, profile-level-id=(string)3, config=(string)000001b003000001b50900000100000001200086c5d4c307d314043c1463000001b25876694430303334
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock</pre>

Presta atención a las Capabilities (caps) de udpsink, es el tipo de datos que se transmitirán por la red. Copia los caps del elemento udpsink. Los caps cambian cada vez que se ejecuta el emisor.

A continuación, lanza el receptor, especificando los caps en el udpsrc

<pre class="console">$ gst-launch-0.10 udpsrc port=5000 caps ="application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, ssrc=(guint)2642861434, clock-base=(guint)3234275225, seqnum-base=(guint)52397, profile-level-id=(string)3, config=(string)000001b003000001b50900000100000001200086c5d4c307d314043c1463000001b25876694430303334" ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink sync=false</pre>

En el receptor, la opción "sync=false" en los sink finales (xvimagesink, alsasink, etc) es importante, puesto que aún no hay implementado un gestor de la sesión RTP que controle la sincronización en la tubería.

Puedes especificar en el udpsrc una URI del tipo "udp://host:puerto" de donde debe coger los datos.

<h2>Audio Vorbis</h2>

La forma de proceder es la misma. Primero ejecuta el emisor:

<pre class="console">$ gst-launch-0.10 -v audiotestsrc ! audioconvert ! vorbisenc ! rtpvorbispay ! udpsink port=5000</pre>

Ahora debes copiar los caps en la tubería del receptor, y ejecutar el receptor.

<pre class="console">$ gst-launch-0.10 udpsrc port=5000 caps="CAPS_DEL_EMISOR" ! rtpvorbisdepay ! vorbisdec ! audioconvert ! alsasink sync=false</pre>

Todo esto teóricamente se podría utilizar para transmitir en directo el escritorio de nuestro equipo a numerosos equipos mediante multicast, útil por ejemplo, para que los alumnos vean la pantalla del profesor en su ordenador.
También hay soporte para transmitir vídeo Theora y vídeo H.263, pero no está suficientemente probado.

<h2>Referencias</h2>
<a href="http://gstreamer.freedesktop.org/documentation/rtp.html">GStreamer: RTP support</a>
<a href="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-0.10.5.tar.gz">Código fuente de los plugins Good, donde se encuentra RTP, versión 0.10.5</a>
<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-udpsrc.html">Elemento udpsrc</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-03/configuracin-bsica-para-jed.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-04-24/el-software-es-un-producto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/crear-y-editar-huellas-para-componentes-con-pcb.html
---
<file_sep>---
migrated: node/262
layout: post
title: Objetivos de la web
created: 1142614101
author: admin
comments: true
category: new
---
<blockquote>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 <a href="/?q=quees">objetivo de esta web</a>.
</blockquote>


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.
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-09-09/una-curiosidad-que-me-pas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-27/montar-y-desmontar-una-psp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-08-12/sincronizacin-del-calendario-de-gnome-con-google-calendar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-08-26/hasta-nunca-ati.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-08-29/asignatura-sobre-software-libre-en-la-universidad-de-sevilla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2012-10-03/distribuyendo-programas-python-en-el-pypi-python-package-index.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-04-03/neutralidad-tecnolgica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-04-21/ayuda-audio-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-05-20/cmo-realizar-bsquedas-con-el-emule-descargar-desde-otro-ordenador.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-09-05/ghdl-vhpidirect-o-como-crear-compilar-y-ejecutar-un-programa-vhdl-con-llamadas-a-cdigo-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-08-24/ows-osd-workspace-switcher.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-09-03/bilbliografa-sobre-mtodos-giles.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-31/ati-radeon-9600-en-debian-gnu-linux-con-el-driver-privativo-fglrx.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-28/synergy-una-consola-para-dominarlas-todas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2009-04-15/fase-final-concurso-univ-software-libre-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-13/acer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-02-04/ejecutar-acciones-disparadas-por-eventos-en-repositorios-mercurial-hooks.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-15/acerca-de-novell-y-microsoft.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-12-06/berenjenas-rellenas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2008-03-25/se-buscan-colaboradores-para-talleres-en-fase-final-del-i-concurso-sl-de-c-lm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-06/gnu-emacs-enviar-emails.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-05-13/unas-reflexiones-sobre-sintactic-sugar-y-el-goto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-13/cambia-el-aspecto-de-google.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-05/instalacin-de-tinyos-1-x-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2012-01-29/espaguetti-con-brcoli.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-14/planificacin-manual-de-cpus-con-taskset.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/instalar-el-driver-privativo-de-nvidia-en-debian-gnu-linux.html
---
<file_sep>---
migrated: node/1498
layout: post
title: Ayuda
created: 1303686431
author: Marot77
comments: true
---
Buenas crysoleros,antes de empezar quiero dar la enhorabuena a todos los componentes,por su maravillosa organización el día del software libre cuando asistió R.stallman,no pude asistir anteriores por falta de transporte y estudios,pero aquí estaba la ansiosa y esperada foto <a href="http://arco.esi.uclm.es/~cleto.martin/fotos_jornadas/IMG_4103_900x677.html">http://arco.esi.uclm.es/~cleto.martin/fotos_jornadas/IMG_4103_900x677.html</a> que muchas gracias por publicarla bueno,al grano;

<!--break-->

Tengo un router livebox  V1.1 ST que encontré en el punto limpio de mi pueblo(Suelo ir para componerme servidores a pura terminal y aprender a comandos) y lo estuve probando y tal y parece ser que funciona perfectamente,tiene una entrada USB,he pensado si se podía poner en esa entrada usb un modem usb y que el router de la señal inalámbrica del modem usb,este router tiene una entrada USB2 el cual tengo un cable,el router va por linux claramente,asique he pensado acceder desde SSH o telnet(no se si desde Gnu/Linux se pueda) y configurarlo de alguna manera...etc ¿Alguna idea o algo por el estilo? Un saludo.
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-24/patentes-esta-vez-paga-microoft-1-5-millones-de-millones-de-dlares.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-03-06/nautilus-con-samba.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-12-04/un-googol-para-dominarlos-a-todos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-12-30/python-3-0-a-k-a-python-3000-para-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-07-14/jccm-quiere-windows-7.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/abrir-una-sesin-x-en-otra-mquina.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-10-30/frases-clebres-perdidas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-27/imprmelo-todo-con-gnu-a2ps.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-12-15/prohiben-el-software-libre-en-francia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-06/ya-est-disponible-en-la-plataforma-de-formacin-del-ceslcam-el-curso-molinux-3-2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2007-03-13/i-jornadas-sobre-piratera-en-la-uclm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-06-06/pluin-de-tomcat-en-eclipse.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-18/mantener-un-paquete-debian-con-svn-buildpackage.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-09/fallos-en-el-repositorio-de-mesa-a-da-9-de-febrero-de-2007-drm_vblank_secondary.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-03/escribir-caracteres-unicode-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-10-29/para-los-que-tengan-amd64.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-05-02/bindings-python-de-libreras-c-con-sip.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-17/latex-listados-de-cdigo-cmodos-y-resultones-con-listings.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-04-16/gnu-emacs-pestaas-realmente-tiles-cambiando-con-m-num.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-06/obtener-la-ip-con-scapy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-09-13/ssh-y-scp-para-acceder-a-equipos-remotos-sin-escribir-la-clave-public-key-authentication.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-09-19/i-concurso-universitario-de-software-libre-de-c-lm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-08-25/grandes-inventos-de-microsoft-el-ratn-y-la-interfaz-grfica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-05-23/configurar-las-impresoras-de-la-esi-en-tu-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-05-27/la-arquitectura-de-aplicaciones-software.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-23/manipulacin-de-documentos-pdf-desde-python-con-pypdf.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-01-24/actualizado-el-manual-de-gnu-emacs-a-22-2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-06/problemas-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-10/router-chupachups-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-07-21/tutorial-para-montar-un-hub-de-direct-connect.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-10-20/arco-devel-speedbar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-26/logging-con-colorcitos-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-03-03/por-lo-menos-hay-alguno.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-16/compartir-ficheros-con-shfs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-14/descargar-las-iso-de-los-dvd-de-debian-con-jigdo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-05/save-and-restore-a-mysql-data-base.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-02-20/campaa-para-la-candidatura-de-la-comunidad-del-software-libre-a-los-premios-prncipe-de-asturias.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-02-01/eth2_rename-el-problema-de-udev.html
---
<file_sep>---
migrated: node/180
layout: post
title: Instalación de NINO en Debian GNU/Linux
created: 1137003786
author: KO_mOd_O
comments: true
category: recipe
tags:
- security
- networking
- Debian
---
<blockquote  class="head">

Esta receta explica la instalación y configuración inicial de NINO (NINO is not Openview) en Debian GNU/Linux. Concretamente se ha realizado la instalación en Debian Sid con núcleo Linux 2.6.14.

NINO es una solución para la gestión de red vía interfaz web que emplea SNMP, WMI, y SNMP para monitorizar equipos y dispositivos de red.

Para más información visitar la página oficial de <a href="http://nino.sourceforge.net/nino/index.html">NINO</a>.

</blockquote>

<!--break-->



<h1> 0.- Requerimientos. </h1>

<ul>
<li>Perl 5.8 o superior.</li>
<li>MySQL (cliente y servidor).</li>
<li>Net-SNMP.</li>
<li>Apache y módulos Perl para Apache.</li>
<li>Módulos Perl DBD/DBI, Time Hires, y Net-SNMP.</li>
</ul>

<h1> 1.- Instalación. </h1>

Usando un gestor de paquetes como apt:


<div class="console">
{% highlight console %}
 # apt-get update
# apt-get install perl mysql-client mysql-server
# apt-get install snmp snmpd
# apt-get install apache2 apache-perl libapache2-mod-perl2
# apt-get install libdbd-mysql-perl
# apt-get install libsnmp-perl

{% endhighlight %}
</div>

<h1> 2.- Configurar la base de datos. </h1>

Para ello debemos de tener creado un usuario. En este ejemplo y como superusuario se crea un usuario con todos los privilegios para acceder de forma local y remota:


<div class="console">
{% highlight console %}
 mysql> GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'localhost'
      -> IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%
       -> IDENTIFIED BY 'password' WITH GRANT OPTION;

{% endhighlight %}
</div>

<h1> 3.- Instalar NINO. </h1>

Podemos obtener el código fuente <a href="http://prdownloads.sourceforge.net/nino/nino-4.1.8.tar.bz2?download"> aquí
</a>.


<div class="console">
{% highlight console %}
 # tar xjvf nino-4.1.8.tar.bz2
# mv nino-4.1.8/var/nino /var
# cd /var/nino/scripts
# ./install

{% endhighlight %}
</div>

Antes de instalar NINO es necesario modificar la línea 27 del script de instalación eliminando la opción -v, de manera que quede de la siguiente forma:


<div class="console">
{% highlight console %}
 HTTP_VERSION=` ${HTTPD} | grep "version" `

{% endhighlight %}
</div>

<h1> 4.- Volver a arrancar servicios. </h1>


<div class="console">
{% highlight console %}
 # /etc/init.d/mysql restart
# /etc/init.d/apache2 restart

{% endhighlight %}
</div>

<h1> 5.- Configuración inicial de NINO. </h1>

En un navegador web:


<div class="console">
{% highlight console %}
 http://localhost/nino/install.html

{% endhighlight %}
</div>

El usuario y la clave por defecto son admin, admin.

Llegados a este punto deberemos indicar los parámetros básicos de configuración, como el e-mail en el cual se notificarán los eventos, dónde se encuentra la base de datos a usar (por ejemplo, en localhost), el usuario de la base de datos, y la clave de la base de datos.

Tras pinchar en Submit nos aparecerá una ventana confirmando que las tablas han sido creadas. Por último pinchamos en el botón Next.

<h1> 6.- Arrancar los servicios de NINO. </h1>


<div class="console">
{% highlight console %}
 # /etc/init.d/nino start

{% endhighlight %}
</div>

<h1> 7.- Disfrutar de NINO. </h1>

En un navegador web:


<div class="console">
{% highlight console %}
 http://localhost/nino/main.html

{% endhighlight %}
</div>
<file_sep>---
migrated: node/214
layout: post
title: WiFi RT2500 de Ralink en GNU/Linux
created: 1138886434
author: javieralso
comments: true
category: recipe
---
<blockquote>Cómo compilar e instalar los drivers para las tarjetas WiFi RT2500 de Ralink en GNU/linux
</blockquote>

<h2>Introducción</h2>

Las tarjetas wifi con chipset Ralink RT2500 cada vez son más comunes. Se encuentran integradas en muchos equipos portátiles y como tarjetas PCMCIA para portátiles, por ejemplo. Por desgracia, los núcleos Linux no traen soporte para este chipset. Poe eso hay tienes que añadirlo tú, aunque la tarea es bastante más fácil de lo que puede parecer.

<h2>Lo primero, ¿Tienes una RT2500?</h2>

Bueno, para los menos versados en este tema, la forma de saber qué chipset utiliza tu interfaz wireless (así como cualquier hardware de nuestro equipo) es con el comando <tt>lspci</tt>.

Cuando ejecutes este comando, podrás ver una lista de todos los dispositivos PCI que tienes en tu sistema (si tienes insertada alguna PCMCIA en tu también aparecerá). Ahora solo queda buscar el dispositivo de red que tengas instalado y si ves que su chipset es RT2500 puedes continuar.

<h2>Qué necesitamos</h2>

Necesitas los fuentes del driver. Éstos se pueden obtener de varias maneras:
<ul>
<li>Paquete debian:
<pre class="console">
$apt-get -f install rt2500-source
</pre>
</li>
<li>
Bajarte el <a href="http://sourceforge.net/projects/rt2400">Código Fuente</a> del driver directamente de internet. De esta forma podrás conseguir la última versión disponible.</li>
</ul>

También necesitas los <em>headers</em> del núcleo que estés utilizando. En Debian:

<pre class="console">
# apt-get -f install linux-headers-$(uname -r)
</pre>

Ahora ya puedes continuar con la compilación.


<h2>Compilación e instalación</h2>

En primer lugar deberemos crear un enlace hacia el directorio en el que están nuestros headers que se llame <em>linux</em> para que a la hora de compilar se encuentren todas las librerias necesarias:

<pre class="console">
$ cd /usr/src/
$ ln -s kernel-headers-2.6.8-1-686 linux
</pre>

Otra cosa importante es que debes compilar este driver con la versión 3.4 de gcc, si no, es muy probable que surjan problemas. Si no lo tienes instalado:

<pre class="console">
# apt-get -f install gcc-3.4
</pre>

Ahora ya estás en condiciones de descomprimir los fuentes y compilarlos. Si has descargado los fuentes con apt, éstos se encontrarán en <tt>/usr/src/rt2500.tar.gz</tt>. Descomprímelos y compílamos:

<pre class="console">
$ tar -zxvf rt2500.tar.gz
$ cd modules
$ make CC=gcc-3.4
</pre>

Una vez compilado todo sin problemas, puedes proceder con la instalación:

<pre class="console">
$ make install
</pre>

La instalación habrá creado el fichero <tt>/etc/modprobe.conf</tt>. Dentro de este fichero habrá algo del estilo '<em>alias ra0 rt2500</em>'. Tienes que copiar esa línea dentro del archivo <tt>/etc/modules.conf</tt> y después borrar el archivo <tt>/etc/modprobe.conf</tt>.

Con esto, se supone que el driver ha quedado instalado. Ahora tan solo queda cargar el módulo:

<pre class="console">
# modprobe rt2500
</pre>

Si esto no funciona (que debería), puedes probar esto otro (dentro del directorio donde has compilado el driver):

<pre class="console">
# insmod rt2500.ko
</pre>

y con esto el driver deberia quedar perfectamente instalado y tu dispositivo de red detectarse como <tt>ra0</tt>.
A veces (sobre todo con las versiones más nuevas de Linux) el comando <tt>depmod</tt> parece no funcionar bien, por ello, es conveniente, después de tener el módulo cargado ejecutar:

<pre class="console">
# update-modules
</pre>

Con ello habrás actualizado correctamente la lista de módulos y el correspondiente a tu WiFi se cargará durante el arranque.

<h2>Enlaces</h2>
<ul>
<li>
<a href="http://sourceforge.net/projects/rt2400">RT2400/2500 para GNU/Linux</a>
</li>
<li>
<a href="http://rt2x00.serialmonkey.com/wiki/index.php/Main_Page">Web del proyecto en serialmonkey.com</a>
</li>
<li>
<a href="http://www.esdebian.org/forum/viewtopic.php?forum=7&showtopic=61164">dichosa wireless ralink rt2500</a>
</li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-15/contenedores-y-downcasting-en-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-11-28/el-sistema-de-3-avisos-funciona-en-uk.html
---
<file_sep>---
migrated: node/666
layout: post
title: Fluendo busca gente
created: 1178086479
author: fsancho
comments: true
category: tale
tags:
- gstreamer
---
Esto es solo un apunte para los que puedan estar interesados. <a href="http://www.fluendo.com/">Fluendo</a>, una compañía asentada en Barcelona, que se dedica al desarrollo y consultoría de sistemas multimedia sobre Unix y GNU/Linux y aporta bastante al desarrollo de Gstreamer, está buscando gente. Hoy me he encontrado <a href="http://elisa.fluendo.com/2007/04/24/were-hiring/">la oferta</a> en el blog de <a href="http://elisa.fluendo.com/">Elisa</a>, el media center de Fluendo.

Se requiere en primer lugar conocimientos de Inglés, ya que no es una empresa española si no europea, se trabaja en inglés. El resto lo podéis ver en la propia página.


<!--break-->

<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-20/debian-xen-3-0-en-5-minutos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2009-04-28/stallman-devuelve-el-dinero-de-los-pisos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-15/compartir-la-conexin-mediante-un-mdem-adsl-comtrend-ct-351.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-10-07/el-juego-hexglass.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-25/gnu-emacs-modo-para-programacin-en-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-04/plugin-opacity-en-xgl-compiz.html
---
<file_sep>---
migrated: node/769
layout: post
title: Molinux en la UCLM
created: 1189075105
author: ottoreuss
comments: true
category: new
tags:
- Molinux
---
Supongo que vosotros ya lo sabréis, pero lo he leído hoy y lo pongo aquí por si alguien no lo sabe. Parece que la Consejería de Industria y Sociedad de la Información impartirá durante el curso 2007/2008 formación avanzada Molinux, el software libre de Castilla-La Mancha, a los alumnos de la Escuela Politécnica de Cuenca y de la Escuela Superior de Informática de Ciudad Real.

<!--break-->


La info entera podéis verla aquí:  <a href="http://www.lanzadigital.com/diariolanza/pb/periodico/periodicodetalle.asp?REG=12169&sec=CIUDADREAL">http://www.lanzadigital.com/diariolanza/pb/periodico/periodicodetalle.asp?REG=12169&sec=CIUDADREAL</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-11/sincronizacin-remota-en-4-pasos-con-rsync.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-27/servir-un-repo-mercurial-por-http-solo-lectura.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-16/crear-nuevos-elementos-para-gstreamer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-12-28/richard-stallman-socio-del-betis-broma-del-28-diciembre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-04-13/latex-ayuda-en-lnea-en-gnu-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-11/animo-chicos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-11-04/para-que-dices-que-serva-esto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-02-16/curiosidades.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-09/utilidades-para-medir-el-ancho-de-banda-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-09-16/comprar-un-porttil.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2006-10-28/lasaa-a-la-boloesa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-07-07/gnu-emacs-cursor-en-forma-de-lnea-vertical-delgada.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-07-10/ayuda-con-visin-por-computador.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-03-28/pena-de-muerte-para-los-delitos-contra-la-propiedad-intelectual.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-18/empezar-con-zeroc-ice-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-02-27/armonizando.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-01-11/qu-es-eso-de-rest.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-11/escribir-en-chino-en-gnu-linux.html
---
<file_sep>---
migrated: node/1460
layout: post
title: Tele-enseñanza en terminales
created: 1297259678
author: int-0
comments: true
category: recipe
tags:
- shell
---
<blockquote>Seguramente alguna vez habréis tenido que explicar a alguien (via pidgin o teléfono) cómo hacer tal o pascual en su terminal, pegando los comandillos para que los ejecute y tal... bueno pues, como siempre, hay una forma más fácil y divertida de hacerlo.</blockquote>

<!--break-->

<h2>Qué necesitamos</h2>
Probablemente ya lo tengáis instalado y si no pues lo instaláis:

<div class="console">
{% highlight console %}
 # aptitude install bsdutils
{% endhighlight %}
</div>

Este paquetillo tiene algunas herramientas interesantes, entre ellas la que usaremos: <em>script</em>. Esta herramienta está pensada para la teleenseñanza (o aprendizaje) aunque son muchas las aplicaciones que podría tener (como podréis comprobar).

<h2>Al grano</h2>
Supongamos que nuestro alumno <em>tobias</em> necesita de un empujoncito. Nos conectaremos (via <em>ssh</em> por ejemplo) a la máquina donde esté trabajando y averiguaremos cuantos terminales tiene (para saber con cuál trabajaremos):

<div class="console">
{% highlight console %}
$ who
tobias   tty7         2011-02-09 09:10 (:0)
tobias   pts/0        2011-02-09 09:11 (:0.0)
tobias   pts/1        2011-02-09 10:01 (:0.0)
tobias   pts/2        2011-02-09 10:49 (:0.0)
{% endhighlight %}
</div>

Supongamos que queremos "conectarnos" con su terminal 0 (debemos ser el propio usuario o el señor don <em>root</em>):

<div class="console">
{% highlight console %}
# script -f /dev/pts/0
{% endhighlight %}
</div>

Al almuno <em>tobias</em> le aparecerá lo siguiente por pantalla:

<div class="console">
{% highlight console %}
 $ Script iniciado (mié 09 feb 2011 12:38:30 CET)
$
{% endhighlight %}
</div>

Y nosotros entraremos en una nueva <em>shell</em>... <b>su</b> <em>shell</em>... ;) . Ahora ya podemos explicarle en vivo qué comandos tiene que lanzar, etc. Cuando hayamos terminado:

<div class="console">
{% highlight console %}
 $ exit
Script terminado; el fichero es /dev/pts/0
{% endhighlight %}
</div>

Y habremos terminado nuestras enseñanzas... :)

<h2>¿Más cosillas?</h2>
Pues claro, <em>script</em> permite "grabar" las sesiones y reproducirlas después... aunque todo eso os lo dejo a vosotros :P (sólo tenéis que echar un vistazo a la página del manual)
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/instalar-debian-sarge-en-un-porttil.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-17/programacin-de-tareas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-03-10/que-te-cambies-ya-coiiio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-02-22/configurar-altavoces-auriculares-bluetooth-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-08/averiguar-la-ip-de-un-chisme-que-la-consigue-por-dhcp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-11/video-streaming-en-flash-con-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-04-27/aadir-soporte-multimedia-en-openoffice-org.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-03-01/firemacs-el-iceweasel-intuitivo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-09-13/downloading-films-is-stealing.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-06-26/configuracin-manual-de-una-conexin-de-red-en-debian-con-iproute2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-01/java-ice-netbeans-eclipse-y-otras-malas-hierbas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-04/redcampus-desde-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2011-06-18/programadores-de-poca-fe.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2008-08-20/primeras-reacciones-al-banner-anti-software-privativo-de-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-12/microsoft-paga-por-publicitarse-bajo-la-palabra-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-24/streaming-rtp-usando-gstreamer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-08-11/concurso-universitario-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-09-02/microsoft-patenta-el-apagado-del-sistema-operativo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-27/tu-gnu-linux-siempre-en-hora-y-con-tiempo-contnuo-con-ntp.html
---
<file_sep>---
migrated: node/127
layout: post
title: En Nautilus también tenemos "Abrir terminal aquí"!
created: 1133168714
author: int-0
comments: true
category: recipe
---
<blockquote>Esta receta está dedicada a todas aquellas personas que van por ahí diciendo que su KDE o su file-roller son mejores que Nautilus por el simple hecho de que no tiene la opción "Abrir terminal aquí"... bueno pues nada, buscad nuevos argumentos porque ese hace tiempo que no os vale... Debéis saber que a Nautilus se le pueden añadir toda la funcionalidad que queráis de una forma muy sencilla: Nautilus-scripts (o G-scripts).</blockquote>


<h1>Nautilus-scripting</h1>
Nautilus permite al usuario crear sus propios scripts en cualquier lenguaje, ya sea python, perl, bash-script, etc. Para ello, lo único que debemos hacer es copiarlos en el siguiente directorio:


<div class="console">
{% highlight console %}
~/.gnome2/nautilus-scripts
{% endhighlight %}
</div>

La primera vez que ponemos un script debemos reiniciar nautilus para que nos aparezca la nueva entrada en el menú contextual, después se actualizará dinámicamente con los scripts y directorios que creemos en dicha carpeta.

<h1>Abrir terminal aquí</h1>
Además, nautilus crea unas variables de entorno para facilitar más aún escribir scripts útiles, una de ellas nos permite obtener la lista de ficheros seleccionados, si seleccionamos una carpeta y abrimos una shell ahí tendremos lo que queremos... en bash-script esto es extremadamente fácil: creamos el archivo "terminal aqui" con el siguiente contenido:

<pre>
#!/bin/bash
cd $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
gnome-terminal
</pre>

Cambiamos los permisos y lo movemos a la carpeta de scripts de nautilus:


<div class="console">
{% highlight console %}
$ chmod +x "terminal aqui"
$ mv "terminal aqui" ~/.gnome2/nautilus-scripts/

{% endhighlight %}
</div>

Reiniciamos nautilus (esto no parece muy elegante...):


<div class="console">
{% highlight console %}
$ killall nautilus
{% endhighlight %}
</div>

Si ahora pinchamos con el botón derecho sobre una carpeta nos aparecerá una nueva opción en el menú contextual y ahí la opción "terminal aqui". Podeis crear subcarpetas para hacer subsecciones, etc. Hay muchos <a href="http://g-scripts.sourceforge.net/">scripts útiles</a> (aunque algunos ya están un poco obsoletillos...)

<h1>Referencias</h1>
<ul>
<li><a href="http://g-scripts.sourceforge.net/">http://g-scripts.sourceforge.net/</a></li>
</ul>

<file_sep>---
layout: refresh
refresh_to_post_id: /2010-02-23/empezando-con-systemc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-03-15/dot-net-club-dont-set-club.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-02-18/dependency-injection-and-mocking-classes-using-c-and-google-mock-library.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-10-26/crema-de-calabacn.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-04-14/abierto-plazo-de-inscripcin-fase-final-concurso-software-libre-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-26/zeroc-icee-para-el-chumby.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-03/en-mi-tintero-personal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-26/tes-eliminar-ficheros-basura-generados-por-emacs.html
---
<file_sep>---
migrated: node/574
layout: post
title: Tabletas Wacom en X.Org
created: 1172063119
author: int-0
comments: true
category: recipe
tags:
- drivers
---
<blockquote>Hola! Dado que en GNU tenemos estupendísimos programas como <em>Inkscape</em> o <em>The Gimp</em> es cada vez más común el querer disponer de una tableta digitalizadora chula para poder trabajar con gráficos de una forma más cómoda y fácil. Si habéis pensado en comprar alguna y tenéis miedo del soporte que linux os pueda brindar, os recomiendo las <em>Wacom</em>, tienen un soporte estupendo (parece ser que wacom colabora con el desarrollador de los drivers). </blockquote>

<h2>Instalando software necesario</h2>
Los drivers soportan tanto linux 2.4.x como 2.6.x, nosotros explicaremos como instalarlo y configurarlo en linux de la rama 2.6. En Debian (como no podía ser de otra forma):


<div class="console">
{% highlight console %}
$ m-a ai wacom
{% endhighlight %}
</div>

Y ya tenemos los módulos para el linux, ahora debemos instalar el driver para X.Org:


<div class="console">
{% highlight console %}
$ apt-get install xserver-xorg-input-wacom
{% endhighlight %}
</div>

También puede ser útil contar con:


<div class="console">
{% highlight console %}
$ apt-get install wacom-tools
{% endhighlight %}
</div>

Bien, ya tenemos todo listo para configurarlo, vamos a ello...

<h2>Configurando X.Org</h2>
<blockquote>Si todavía queda alguien que use Xfree86, esto es completamente compatible... ;)</blockquote>

Las wacom disponen de varios dispositivos físicos apuntadores: el lápiz, un ratón, etc. Son capaces de detectar qué dispositivo estamos usando, es decir: si estamos utilizando el lápiz o el ratón (en mi caso). En el archivo de configuración de X.Org configuraremos los distintos tipos que soporta el driver y podremos tener configuraciones específicas para cada uno, así por ejemplo el puntero se comportará de una forma si usamos lápiz o de otra si estamos con el ratón (esto es genial!). Pues aquí va mi código para el archivo <tt>/etc/X11/xorg.conf</tt>:

<pre>## Wacom Volito
#
Section "InputDevice"
        Driver          "wacom"
        Identifier      "stylus"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "stylus"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection

Section "InputDevice"
        Driver          "wacom"
        Identifier      "eraser"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "eraser"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection

Section "InputDevice"
        Driver          "wacom"
        Identifier      "cursor"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "cursor"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection</pre>

...y añadiremos en la <em>Section "ServerLayout"</em> del mismo fichero:

<pre>        InputDevice     "stylus"                "SendCoreEvents"
        InputDevice     "eraser"                "SendCoreEvents"
        InputDevice     "cursor"                "SendCoreEvents"</pre>

En las opciones de los dispositivos se puede controlar TODO, hay muchísimos parámetros (consultad el manual). Pincipalmente tenemos <em>Threshold</em> (sensibilidad) y <em>Mode</em>, que puede ser <em>Relative</em> o <em>Absolute</em> (por defecto). El modo absoluto significa que las esquinas de la tableta son las esquinas de la pantalla, recorrer la tableta es recorrer la pantalla. El modo relativo sirve para trabajar con mayor precisión, pero es más incómodo y necesitaremos usar un ratón también.

<h3>El dispositivo /dev/input/wacom</h3>
Si instaláis en Debian (y supongo que en otras igual) os aparecerá un dispositivo <tt>/dev/input/wacom</tt> que será un enlace simbólico débil a <tt>/dev/input/eventX</tt>, siendo X un número de 1 al que sea. Esto es así porque debe existir una regla para <em>udev</em> tal que así (archivo <tt>/etc/udev/rules.d/10_wacom.rules</tt>):

<pre>KERNEL="event*", SYSFS{idVendor}="056a", NAME="input/%k", SYMLINK="input/wacom%e"</pre>

Con este archivo ahí y ejecutando lo que tenéis en la sección <em>Comportamiento errático del puntero</em> os debería aparecer ese enlace. De todas formas, si no os aparece esta es mi cutre-solución<em>-o-matic-2000</em>:

Mediante <em>wacdump</em> averiguaremos el dispositivo de nuestra wacom:

<div class="console">
{% highlight console %}
 $ wacdump /dev/input/event2
{% endhighlight %}
</div>

Si <em>eso</em> se trata de una wacom aparecerá algo como:

<pre>MODEL=Wacom Volito                      ROM=1.4-1
CLS=USB  VNDR=Wacom  DEV=Volito  SUB=MODEL-VOL</pre>

Pulsáis Ctrl+C (o Ctrl+X+Alt+Esc+X+F+win+5+Ctrl+Esc+U si fuese <em>emacs</em>) para salir y hacéis el enlace:


<div class="console">
{% highlight console %}
$ ln -s /dev/input/event2 /dev/input/wacom
{% endhighlight %}
</div>

Ahora, si reinciamos X.Org, tendremos la tableta funcionando... casi...

<h2>Comportamiento errático del puntero</h2>
Lo más normal es que mováis un poco el lápiz y el puntero se vuelva loco y se empiece a cliquear todo y se os quede la sesión "medio muerta" y me mandéis un mail poniéndome verde... pues bien, os comento el problema: cuando conectáis la tableta, el módulo <em>usbmouse</em> reclama el nuevo hardware y lo maneja él... MAL! Debemos hacer que se cargue primero el módulo <em>wacom</em> y luego lo que tenga que venir. También se puede configurar <em>udev</em> para ello... pero como tampoco me he pegado con eso, ahí va mi solución cutre:


<div class="console">
{% highlight console %}
$ /etc/init.d/udev stop
$ rmmod wacom usbmouse ehci_hcd ohci_hcd usbhid
$ modprobe wacom
$ /etc/inid.d/udev start
{% endhighlight %}
</div>

...y ya podemos reiniciar X.Org y disfrutar de nuestra tableta! :)

<h2>Apéndice A: instalación y compilación <em>from scratch</em></h2>
Pues nada... nos gusta vivir al límite... eh? vayamos a la página del proyecto <a href="http://linuxwacom.sourceforge.net/">Linux Wacom</a> y pinchamos en <em>Project Status</em> en la versión en desarrollo (actualmente 0.7.7-4), guardamos el archivo en disco y lo descomprimimos:


<div class="console">
{% highlight console %}
 # unp linuxwacom-0.7.7-4.tar.bz2
#cd linuxwacom-0.7.7-4
{% endhighlight %}
</div>

Veamos qué conseguiremos con esto:


<div class="console">
{% highlight console %}
 # ./configure
...morralla sin significado aparente para nosotros...
----------------------------------------
  BUILD ENVIRONMENT:
       architecture - i486-linux-gnu
       linux kernel - yes 2.6.18
  module versioning - yes -DCONFIG_MODVERSIONS -DMODVERSIONS -include /lib/modules/2.6.18-3-686/build/include/linux/modversions.h
      kernel source - yes /lib/modules/2.6.18-3-686/build
           Xorg SDK - yes /usr/include/xorg
          XSERVER64 - no
           dlloader - yes
               XLib - yes /usr/lib
                TCL - yes /usr/include/tcl8.4/
                 TK - yes /usr/include/tcl8.4/
            ncurses - yes
  BUILD OPTIONS:
            wacom.o - no
            wacdump - yes
             xidump - yes
        libwacomcfg - yes
         libwacomxi - yes
          xsetwacom - yes
              hid.o - no
         usbmouse.o - no
            evdev.o - no
         mousedev.o - no
            input.o - no
        tabletdev.o - no
       wacom_drv.so - yes /usr/lib/xorg/modules/input
        wacom_drv.o - no
----------------------------------------
{% endhighlight %}
</div>

Aquí nos dice que elementos nos va a generar y de cuáles va a pasar olímpicamente. Nos interesa (sobre todo) que genere <em>wacom.o</em> (el módulo para el kernel) y <em>wacom_drv.so</em> (el driver para X.Org). Si no os aparece a <em>yes</em> puede ser por dos causas: por defecto no se generá (ejecutar <em>./configure --help</em> y os indicarán los parámetros) o porque os falten librerías de desarrollo de las X o las cabeceras del núcleo. El resto de elementos a generar son módulos más o menos útiles cuya utilidad queda fuera de esta receta...
Una vez hayamos ejecutado el <em>configure</em> y esté todo a nuestro gusto:


<div class="console">
{% highlight console %}
 # make
$ make install
{% endhighlight %}
</div>

Y si nada de esto da error... ya podemos empezar con la receta como si tal cosa... :)

<h2>Enlaces</h2>
Página del proyecto <a href="http://linuxwacom.sourceforge.net/">Linux Wacom</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-28/mini-tutorial-de-gnu-gdb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-08-01/m-surface-no-esto-no-es-de-m.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-05-19/megabox-linux-media-center.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-12-05/parted-y-python-pyparted.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-06-21/bill-gates-se-retira-oh-que-pena-ms-grande.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-22/avances-en-gnesis-3-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-31/servicios-de-gmx-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-05/aprende-linux-con-el-ministerio.html
---
<file_sep>---
layout: post
title: "Testing deterministic behavior with doublex"
category: recipe
tags: Python doublex agile
author: david_villa
lang: en
---

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.

<!--break-->

An example:

{% gist 5728565 %}


## References

* "python-doublex":https://bitbucket.org/DavidVilla/python-doublex
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-01-26/reconfigurando-el-xport-al-vuelo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-05/manipulacin-de-dvd-video.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-07/nueva-versin-de-uclm-wifi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-05/utilizar-un-servidor-ftp-remoto-como-backup.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-09-06/molinux-en-la-uclm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-01-19/donald-knuth-galardonado-con-el-premio-fronteras-de-la-fundacin-bbva.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-01/openwrt-en-la-fonera.html
---
<file_sep>---
migrated: node/281
layout: post
title: Script para escuchar emisoras de radio por internet
created: 1144700740
author: aledelgal
comments: true
category: script
---
<blockquote>
Esta pequeña pequeñísima receta trata sobre cómo hacer un script para escuchar las radios que más nos gusten por internet sin tener que estar mirando cual era la dirección .asx que tenía tal radio.
</blockquote>

<!--break-->



<h1>Introducción</h1>
Este script es muy tonto, lo pongo aquí sólo para que nadie tenga que molestarse en hacerlo,o por si a alguien no se le había ocurrido,  ya que lo veo algo de utilidad, porque ahora con un solo comando vamos a tener acceso a todas las radios que nosotros queramos. Es totalmente personalizable, sólo hay que añadirle las radios que nosotros queramos. <a href="/node/158#comment-666">Aquí</a> hay muchas más para quien quiera añadirlas a su script personalizado, el mío es sólo una sugerencia.

<h1>A ver ese script...</h1>

<pre>
#!/bin/bash
echo ""
echo "Script para seleccionar qué radio queremos escuchar"
echo""
echo " 1 -> Los 40 principales"
echo " 2 -> Cadena dial"
echo " 3 -> Europa FM"
echo " 4 -> Cadena Ser"
echo " 5 -> Onda Cero"
echo " 6 -> Kiss FM"
echo " 7 -> RNE 1"
echo " 8 -> COPE"
echo " 9 -> RNE clásica"
echo " 10 -> m80 Radio"
echo " 11 -> Salir"
echo ""
echo "Seleccione una de las radios "
read radio
if [ "$radio" = "1" ]; then
mplayer -playlist http://www.los40.com/nuevo_player/40Principales.asx
elif [ "$radio" = "2" ]; then
mplayer -playlist http://www.los40.com/nuevo_player/dial.asx
elif [ "$radio" = "3" ]; then
mplayer -playlist http://www.ondacero.es/europafm.asx
elif [ "$radio" = "4" ]; then
mplayer -playlist  http://www.cadenaser.com/player/SER-TIC.asx
elif [ "$radio" = "5" ]; then
mplayer -playlist  mms://www.ondacero.es/live.asx
elif [ "$radio" = "6" ]; then
mplayer -playlist http://pointers.audiovideoweb.com/asxfiles-live/ny60winlive7001.asx
elif [ "$radio" = "7" ]; then
mplayer -playlist http://www.rtve.es/rne/audio/r1live.asx
elif [ "$radio" = "8" ]; then
mplayer -playlist mms://live.cope.edgestreams.net/reflector:34744
elif [ "$radio" = "9" ]; then
mplayer -playlist http://www.rtve.es/rne/audio/RNEclasica.asx
elif [ "$radio" = "10" ]; then
mplayer -playlist  http://www.los40.com/nuevo_player/m80.asx
elif [ "$radio" = "11" ]; then
exit
fi
#FIN
</pre>
Lo guardamos con el nombre que nosotros queramos, por ejemplo radios.sh

Le damos permisos de ejecución


<div class="console">
{% highlight console %}
 $ chmod +x radios.sh 
{% endhighlight %}
</div>

Y si queremos tenerlo siempre disponible para no tener que irnos al directorio donde esté guardado lo movemos a /bin


<div class="console">
{% highlight console %}
  # mv radios.sh /usr/local/bin 
{% endhighlight %}
</div>

Ahora sólo queda ejecutarlo y ya tenemos tooooodas las radios con sólo pulsar un número


<div class="console">
{% highlight console %}
 $ radios.sh 
{% endhighlight %}
</div>
 
<h1>Referencias</h1>
<ul>
  <li> <a href="http://www.ubuntu-es.org">Página web de ubuntu en español</a> </li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-08-31/python-para-aprender-a-programar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-10-16/ampliado-plazo-de-inscripcin-al-iii-concurso-univ-de-software-libre-de-clm.html
---
<file_sep>---
migrated: node/988
layout: post
title: Usar Pidgin para unirte a una sala Jabber
created: 1219232446
author: nacho
comments: true
category: recipe
tags:
- ocio
---
<blockquote>Sí tienes una cuenta jabber (o gtalk que es lo mismo) puedes usar Pidgin para unirte a salas de chat al más puro estilo de IRC. En esta receta te explico cómo unirte a la de tu portal favorito: CRySoL</blockquote>

<h2>Unirse a un Chat</h2>
En la ventana principal de Pidgin, pulsa en <strong>Amigos --> Unirse a un chat</strong>

<center>
<img src="/assets/files/salacrysol1.png"/>
</center>


Si conoces los datos de la sala, puedes rellenarlos directamente, tal como se ve en la imagen. Si no, puedes buscar una sala en la lista de salas disponibles, pulsando en <strong>Lista de salas</strong>.

<center>
<img src="/assets/files/salacrysol2.png"/>
<img src="/assets/files/salacrysol3.png"/>
</center>

<h2>Añadir la Sala como contacto</h2>
Se puede también añadir la sala como si fuera un contacto más de jabber. Una vez dentro de la sala, pulsa en <strong>Conversación --> Añadir</strong>. De esta forma podrás tenerlo siempre a mano, a sólo un doble-click de distancia.

<center>
<img src="/assets/files/salacrysol4.png"/>
</center>

Para que se conecte automáticamente cuando abras pidgin, abre el menú contextual de CRySoL en la lista de contactos y marca «Conectar automáticamente».
<file_sep>source "http://rubygems.org"

gem "jekyll"
gem "jekyll-paginate"
gem "jekyll-gist"
gem "jekyll-textile-converter"
gem "pygments.rb"
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-17/redes-inalmbricas-multisalto-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-07/poner-una-imagen-de-fondo-en-grub.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-10/creacin-de-mdulos-e-interfaces-en-nesc-para-tinyos-2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-12-11/lo-nuevo-de-emacs22.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-04-17/material-para-el-taller-de-videojuegos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2008-09-11/mini-reto-estpido-again-and-again.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-07-07/error-para-entrar-a-la-sesion-de-ubuntu-5-10.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-12/gnu-emacs-acelerando-el-arranque-con-xresources.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-02/notificacin-por-e-mail-de-cambios-en-repositorios-mercurial.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-03-21/descargar-videos-de-youtube-para-verlos-offline.html
---
<file_sep>---
migrated: node/1457
layout: post
title: Se acabó el IPv4
created: 1296832672
author: nacho
comments: true
category: new
tags:
- networking
---
Agotado. Extinto. <a href="http://alt1040.com/2011/02/ya-no-hay-direcciones-ip">No quedan más direcciones IPv4 disponibles</a>. La <acronym title="Internet Assigned Numbers Authority>IANA </acronym> ha asignado el último bloque de direcciones que le quedaba libre.

<!--break-->


Esta carencia de direcciones se venía previendo desde hace muchos años, y el <a href="http://tools.ietf.org/html/rfc1883">IPv6 lleva en marcha desde mediados de los '90</a>. Sin embargo, no se ha terminado de implantar (no sé siquiera si se ha empezado), y ya se está hablando de un <a href="http://es.wikipedia.org/wiki/IPv6#Motivaci.C3.B3n_y_or.C3.ADgenes_de_los_IP">IPv8</a>.

¿Creéis que los sistemas están <a href="/node/1335">preparados para afrontar IPv6</a>? ¿Será un cambio suave (fácil) o nos dará dolores y quebraderos de cabeza? ¿Por qué no se ha puesto ya en explotación masivamente?
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-15/empaquetar-un-script-python-para-debian-y-mantenerlo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-08-13/hasta-luego-sco.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-19/recuperar-un-disco-duro-con-dd_rhelp-o-intentarlo-al-menos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-21/nds-y-fonera-por-fin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-28/auctex-para-torpes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-06/recuperar-la-clave-de-administrador-de-drupal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-01/sacando-jugo-a-exif-en-consola-y-en-nautilus.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-07/grabar-cds-y-dvds-fcilmente-desde-consola.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-24/doble-monitor-con-ati-radeon-hd-3870.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-07-23/preinscripcin-iii-edicin-curso-java-ceslcam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-02/buscar-fcilmente-en-el-histrico-de-gnu-bash.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-02-25/gnu-is-not-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-12/tes-emacs-code-browser-ecb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-01-26/software-libre-copyleft-y-canon-digital.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-05/optimizar-firefox.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-23/en-busca-de-la-solucin-definitiva-para-la-autenticacin.html
---
<file_sep>---
migrated: node/1024
layout: post
title: 'udev: Configurando el acceso al USB sin ser root'
created: 1224067192
author: javieralso
comments: true
category: recipe
tags:
- embedded
- drivers
---
<blockquote>Cómo escribir reglas para <a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">udev</a> permitiendo a dispositivos <b>USB</b> ser usados sin necesidad de ser <b>root</b></blockquote>

<h2>Introducción</h2>
A veces sucede que quieres utilizar un dispositivo USB un poco "exótico" y resulta que no puedes utilizarlo sin ser root. Un ejemplo de ello puede ser <a href="http://dfu-programmer.sourceforge.net/">dfu-programmer</a> o <a href="http://groups.google.com/group/pickit-devel/browse_thread/thread/f3478463cf071464">pk2</a>, que son aplicaciones no muy estándard y por lo tanto no se les ha dado el soporte necesario, haciendo que haya que invocarlas como <b>root</b> si queremos utilizarlas.

La solución para ésto pasa por crear unas reglas para <b>udev</b> que permitan que éstas aplicaciones accedan al puerto USB de nuestro PC en modo normal.

<h2>Un ejemplo: dfu-programmer</h2>
Ilustraré el proceso con una aplicación de ejemplo: <b>dfu-programmer</b>. Se trata de un cliente para el bootloader USB instalado en los micros con soporte para dicho interfaz de <a href="www.atmel.com">Atmel</a>.
Para añadir las reglas, abrimos (mas bien creamos) el archivo que contedrá dichas reglas:

<div class="console">
{% highlight console %}
<EMAIL>@rigoberto:~$ sudo emacs /etc/udev/rules.d/99-dfu-programmer.rules
{% endhighlight %}
</div>

En este archivo, deberemos escribir algo tal que así:


<div>
{% highlight text %}
SUBSYSTEM=="usb", ACTION=="add", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2ffb", MODE="660", GROUP="plugdev", SYMLINK+="at90usb-%k"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2ffb", MODE="660", GROUP="plugdev" 
{% endhighlight %}
</div>

Básicamente lo que se hace es indicar a <em>udev</em> que <em>dfu-programmer</em> usa el sistema <em>USB</em>, dando información detallada acerca del <em>vendorID</em> y el <em>productID</em> del dispositivo que se va a conectar al puerto. También indica con qué permisos se debe acceder al puerto y especifica el grupo cuyos permisos hereda la aplicación.

<h2>Referencias</h2>
<ul>
<li><a href="http://reactivated.net/writing_udev_rules.html">Writing udev rules</a></li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/filtrar-spam-con-sylpheed-y-bogofilter.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-11-18/cree-que-la-administracin-debera-usar-software-libre-en-vez-de-programas-comerciales.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-04/cmo-escribir-una-receta-de-cocina.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2010-09-09/quinto-aniversario.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-27/creacin-ultra-rpida-de-libreras-para-kicad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-21/instalar-debian-gnu-linux-en-el-sony-vaio-vgn-sz4xn.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-24/eduroam-1-0-conectar-a-la-nueva-wifi-de-la-universidad.html
---
<file_sep>#!/bin/bash --
# -*- mode:shell-script; coding:utf-8; tab-width:4 -*-

set -e

if [ -d _migrate ]; then
	rake migrate_on
fi

if ! [ -d _site ];  then
	# git clone <EMAIL>:CRySoL/CRySoL.github.io.git  _site
	git clone https://github.com/CRySoL/CRySoL.github.io.git _site
fi

git --git-dir=_site/.git --work-tree=$(pwd)/_site pull
jekyll build

echo "$(date)<br/>" >> history.html
# git commit -a -m "automatic compilation"
# git push
touch _site/.nojekyll

echo "pushing _site"
cd _site
rm -rf files node
ln -s p/node node
ln -s assets/files files

git add --all
git commit -a -m "automatic compilation"
git push
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-03-21/propuesta-de-creacin-de-sl.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-03-26/pysoya-men-de-ejemplo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-09-07/x-org-con-el-stylus-de-la-tablet-hp-compaq-tc1100-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-27/ah-va-la-virgen-metaclases-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-02-09/gnu-emacs-24-how-to-install-on-debian-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-03-02/la-in-justicia-francesa.html
---
<file_sep>---
migrated: node/812
layout: post
title: 'Parted y Python: pyparted'
created: 1196886015
author: int-0
comments: true
category: recipe
tags:
- Python
---
<blockquote>Supongo que muchos de vosotros conoceréis <em>libparted</em>, la librería que hay debajo de los programas de particionado típicos de <em>GNU</em>. Muchos de vosotros conocéis también <em>Python</em>, si juntamos estas dos cosas tenemos que hacer programitas que manejen el particionado del disco va a estar al alcance de cualquiera. Llegados a este punto, no sobra decir que: <b>NO me responsabilizo de los daños que pueda causar el uso de esta receta</b>, yo lo he probado con un disco flash y me ha funcionado sin problemas. Quien quiera garantías... que las pague :P.</blockquote>

<!--break-->




<h2>Instalación</h2>
Pues lamentablemente hay que compilar e instalar... no es muy complicado, pero bueno... empecemos por descargarnos los fuentes del modulo de <em>python</em>, los encontramos en <a href="http://dcantrel.fedorapeople.org/pyparted/">http://dcantrel.fedorapeople.org/pyparted/</a>. Hay que tener en cuenta una cosa, a fecha de hoy (4 de diciembre de 2007) en <em>Debian Unstable</em> la versión de <em>libgparted-dev</em> empaquetada es la antiquísima <b>1.7</b>, lo cual nos obliga a usar una versión del módulo antigua: la <b>1.8.5</b>. Esto es un poco rollo, pero por lo menos no tenemos que instalar y configurar <em>libgparted</em> entera. No he probado versiones más nuevas del módulo de <em>python</em>, salvo la versión <em>1.8.9</em> que compilaba pero luego no funcionaba.
Descargados los fuentes nos tenemos que instalar ciertas cosillas:

<div class="console">
{% highlight console %}
# apt-get install libparted-dev uuid-dev
{% endhighlight %}
</div>

Si ahora intentáis compilar no os va a funcionar porque el módulo está pensado para el <em>libparted</em> de <em>fedora</em>, que tiene algunos "maquillajes" que, se supone, vienen en los <em>libparted</em> más nuevos (realmente la <em>1.7</em> de <em>Debian</em> es <em>antiquísima</em>), nosotros cambiaremos lo siguiente (abrid como admins el archivo <tt>/usr/include/parted/disk.h</tt>):
<pre>typedef enum {
        PED_PARTITION_NORMAL            = 0x00,
        PED_PARTITION_LOGICAL           = 0x01,
        PED_PARTITION_EXTENDED          = 0x02,
        PED_PARTITION_FREESPACE         = 0x04,
        PED_PARTITION_METADATA          = 0x08
} PedPartitionType;</pre>
Lo cambiaremos por:
<pre>typedef enum {
        PED_PARTITION_NORMAL            = 0x00,
        PED_PARTITION_LOGICAL           = 0x01,
        PED_PARTITION_EXTENDED          = 0x02,
        PED_PARTITION_FREESPACE         = 0x04,
        PED_PARTITION_METADATA          = 0x08,
        PED_PARTITION_PROTECTED         = 0x10
} PedPartitionType;</pre>

...y ahora sí, a compilar:

<div class="console">
{% highlight console %}
:~$ unp pyparted-1.8.1.tar.gz
~$ cd pyparted-1.8.1
~/pyparted-1.8.1$ ./configure
~/pyparted-1.8.1$ make && sudo make install
{% endhighlight %}
</div>

<h2>Ejemplos de uso</h2>
Para probar el módulo vamos a usar <em>ipython</em>, si no lo tenéis ya sabéis: <em>apt-get</em> o <em>aptitude</em>. Y una cosa más: hay que ejecutarlo en modo <em>superusuario</em> porque si no no podréis abrir los dispositivos de escritura. En los ejemplos vamos a usar un <em>pendrive</em> direccionado en <tt>/dev/sda</tt>. <b>TENED CUIDADO POR SI VUESTRO DISCO PRINCIPAL ES SATA QUE ENTONCES SERÁ /dev/sda</b>. Si queréis hacer las pruebas con un <em>pendrive</em> comprobad con <em>dmesg</em> el nombre del dispositivo. Y una cosa más: si <em>gnome</em> os automonta la unidad, debéis desmontarla primero.

Al tajo, ejecutamos <em>ipython</em>:


<div class="console">
{% highlight console %}
$ sudo ipython
Total number of aliases: 15
Python 2.4.4 (#2, Aug 16 2007, 02:03:40) 
Type "copyright", "credits" or "license" for more information.
IPython 0.8.1 -- An enhanced Interactive Python.
?       -> Introduction to IPython's features.
%magic  -> Information about IPython's 'magic' % functions.
help    -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]:
{% endhighlight %}
</div>

y ahora abrimos la unidad, para ello debemos crear un <em>PedDevice</em> que gestione el dispositivo y con el <em>PedDevice</em> podremos crear un <em>PedDisk</em> que es el objeto que nos permitirá gestionar las particiones, lo haremos todo de una:

<div class="console">
{% highlight console %}
In [1]:import parted
In [2]:myDisk = parted.PedDisk.new(parted.PedDevice.get('/dev/sda'))
{% endhighlight %}
</div>

Para acceder al dispositivo (por ejemplo para obligar a realizar un <em>open()</em>, un <em>close()</em> o un <em>sync()</em>) podemos usar el atributo de clase <em>dev</em>:

<div class="console">
{% highlight console %}
In [3]:myDisk.dev.open()
{% endhighlight %}
</div>

A lo que vamos: leer la información de las particiones. Podemos ver cuántas particiones tenemos y luego recorrer una a una la lista. Hasta lo que creo, no hay un iterador <em>bonico</em> para ello, supongo que en versiones más nuevas ya estará añadido.

<div class="console">
{% highlight console %}
In [4]:myDisk.get_last_partition_num()
Out[4]:1
In [5]:partition = myDisk.get_partition(1)
In [6]:partition.type_name
Out[6]:'primary'
In [7]:geometria = partition.geom
In [8]:geom2 = geometria.duplicate()
In [9]:print geometria.start, geometria.end
19 63359
{% endhighlight %}
</div>

Ahora vamos a hacer cosas <em>divertidas</em>, <b>OJO QUE ESTO ES PELIGROSO</b>, empezamos borrando TODAS las particiones:

<div class="console">
{% highlight console %}
In [10]:myDisk.delete_all()
In [11]:print myDisk.get_partition(1).geom.start
---------------------------------------------------------------------------
parted.error                                     Traceback (most recent call last)
/home/tobias/pyparted-1.7.3/&lt;ipython console&gt;
error: partition not found
{% endhighlight %}
</div>

Ahora, para crear una partición, necesitamos: un <em>tipo</em> (primaria, secundaria, etc.), un sector inicial y una longitud. Esta partición va dentro de unos límites, que pueden ser el disco físico o una partición extendida, esos límites los definimos al añadir la partición al disco, pero no al crearla:


<div class="console">
{% highlight console %}
In [12]:myPartition=myDisk.partition_new(parted.PARTITION_PRIMARY,None,1,4000)
{% endhighlight %}
</div>

El <em>None</em> es el <em>filesystem</em> que llevará la partición, podemos establecerlo en la creación, o a <em>posteriori</em> (como el resto de parámetros):


<div class="console">
{% highlight console %}
In [13]:myFs = parted.file_system_type_get('fat32')
In [14]:myPartition.set_system(myFs)
{% endhighlight %}
</div>

Ahora añadimos la partición al disco, dentro de unos <em>límites</em>, es este caso es todo el disco físico:


<div class="console">
{% highlight console %}
In [14]:entireDisk = parted.PedDevice.get('/dev/sda').constraint_any()
In [15]:myDisk.add_partition(myPartition, entireDisk)
In [16]:myDisk.commit()
Out[16]:1
{% endhighlight %}
</div>

Ese <em>1</em> indica que todo ha ido bien, ahora podemos comprobar con <em>fdisk</em> los destrozos causados :P...

Usando el <em>completion</em> de <em>ipython</em> podemos encontrar muchos métodos interesantes para cálculo de sectores físicos/lógicos, maximización de particiones, etc. De todas formas os puede ser útil la <a href="http://www.gnu.org/software/parted/api/index.html">API de libparted</a>. Para haceros una idea. Por último sólo aclarar que esta receta no va sobre un programa para crear/borrar particiones, para eso tenemos <em>gparted</em>, aquí sólo hemos explicado un poquillo cómo usar los métodos del módulo <em>pyparted</em> por si queréis hacer programillas y tal... ;)

<h2>Enlaces</h2>
Ya están por la receta... :P
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-05-21/quijote-informacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2007-02-26/lentejas-libres.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-20/escner-epson-v10-en-debian.html
---
<file_sep>---
migrated: node/1138
layout: post
title: Configurar HTC Magic (G2) con Android en Debian GNU/Linux
created: 1248435217
author: cleto
comments: true
category: recipe
tags:
- drivers
- Debian
---
<blockquote>Esta receta explica cómo configurar tu máquina Debian para poder empezar a desarrollar programas con tu flamante móvil HTC Magic (G2).</blockquote>

<h2>Introducción</h2>
Existe un SDK con multitud de herramientas para desarrollar en sobre teléfonos Android (como es el caso del HTC Magic que, a día de hoy, Vodafone vende en exclusividad). Sin embargo, para sacarle todo el partido al entorno de desarrollo es necesario tener configurado correctamente tu ordenador para que al enchufar el móvil via USB puedas utilizar las herramientas del SDK. En esta receta se explica precisamente esto último sobre un sistema Debian GNU/Linux.

<h2>Requisitos</h2>
<ul>
<li><a href="http://developer.android.com/sdk/1.5_r3/index.html">SDK de Android v1.5</a></li>
<li>Ordenador con Debian GNU/Linux sid.</li>
<li>Móvil HTC Magic.</li>
<li>Cable USB del móvil.</li>
</ul>

<h2>Configuración</h2>
<p>
<h3>En el PC</h3>
Para evitar problemas, asegúrate de que el teléfono <b>NO</b> se encuentra enchufado al ordenador. A continuación, creamos el grupo 'androiddev':

<div class="console">
{% highlight console %}
$ sudo addgroup --system androiddev
{% endhighlight %}
</div>

Posteriormente, crea el fichero /etc/udev/rules.d/50-android.rules con el siguiente contenido:
<pre>
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", GROUP="androiddev", SYMLINK+="android%n"
</pre>

Le damos permisos de lectura y ejecución y recargamos las reglas de udev:

<div class="console">
{% highlight console %}
$ sudo chmod a+rx /etc/udev/50-android.rules
$ sudo /etc/init.d/udev reload 
{% endhighlight %}
</div>

<h3>En el móvil</h3>
Primero, asegúrate de que el teléfono tiene el modo USB de depuración <b>activado</b>. Esto se encuentra en Ajustes->Aplicaciones->Desarrollo.

Una vez comprobado, conecta el teléfono al PC.

<h2>Probando que todo funciona...</h2>
Descomprime el SDK que te has descargado en el directorio que prefieras. Dentro del árbol de directorios que se ha generado hay uno llamado "tools". Dentro de él, hacemos:


<div class="console">
{% highlight console %}
$ ./adb start-server
$ ./adb shell
{% endhighlight %}
</div>

Si todo ha ido bien, tendrás una bonita shell dentro de tu móvil. Listemos los paquetes Android (ficheros .apk) que tenemos:

<div class="console">
{% highlight console %}
$ ls /system/app/
{% endhighlight %}
</div>
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-02-09/el-porqu-del-cracking.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-07-03/pequeo-faq-de-mailman.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-03-03/hoy-no-hay-party.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-03-14/conoces-fon.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-15/ajustes-al-tinyos-2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-11/instalacin-de-nino-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-20/manual-bsico-de-iproute2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-03-08/agilismo-dejar-de-hacer-el-gili.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-04/wii-mando-con-libwiimote-en-gnu-linux-incluye-video-demo-p.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-07-25/quin-dice-que-no-hay-arte-en-la-programacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-20/hercules-webcam-deluxe-bajo-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-03-02/gnesis-3-0-frincon-minimal-pre-release-liberada.html
---
<file_sep>---
migrated: node/360
layout: post
title: Arreglar gnome-terminal que no muestra tildes ni eñes
created: 1153985554
author: magmax
comments: true
category: recipe
tags:
- gnome
---
<blockquote>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.
</blockquote>

<h1>Arreglarlo</h1>
Para arreglarlo basta con editar el fichero <tt>~/.dmrc</tt> y añadir al final la línea <tt>Language=es_ES.iso88591</tt>. Si lo preferís, basta con ejecutar lo siguiente:


<div class="console">
{% highlight console %}
$ echo "Language=es_ES.iso88591" >> .dmrc

{% endhighlight %}
</div>

<h1>¿Qué estaba pasando?</h1>

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í):


<div class="console">
{% highlight console %}
# dpkg-reconfigure locales

{% endhighlight %}
</div>

Y para saber cuáles son los disponibles (qué cadenitas poner en "Language=XXXXXXX"), basta con hacer:


<div class="console">
{% highlight console %}
$locale -a

{% endhighlight %}
</div>


<h1>Enlaces</h1>

Llevo buscando bastante tiempo, y al final lo encontré en el <a href="http://www.davidpashley.com/cgi/pyblosxom.cgi/computing/gnome-terminal.html">blog de <NAME></a>. Este documento es, básicamente, una transcripción de lo que se comenta en el enlace.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-17/traffic-shaping-y-qos-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-05/glib-io-channels-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2006-03-07/el-reto-de-la-semana-3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-08-04/citas-de-dijkstra.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-24/blender-efecto-de-resplandor-glow.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-11-27/bolsa-de-trabajo-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-28/grficas-con-python-y-gnuplot.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-02-14/buensimo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2010-01-18/cuando-lo-decamos-nos-tachaban-de-locos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-04-29/dos-crysoleros-ganan-en-el-concurso-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-19/dashboard-process-ayuda-para-psp.html
---
<file_sep>console.log('This would be the main JS file.');

function show_comments() {
  document.getElementById("disqus_thread").style.display = 'block';
  document.getElementById("show_comments").style.display = 'none';
}
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-07-21/software-para-electrnicos-kicad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-03-18/easycap-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-18/acelerando-ssh.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-11-16/blender-herramientas-de-seleccin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-18/conectar-a-la-nueva-wifi-de-la-uclm-aka-eduroam-con-network-manager.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-06/gnome-vfs-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-21/entrevista-a-alexey-leonidovich-pazhitnov.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-05-25/python-en-android.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-23/manos-libres-bluetooth-con-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-02-14/kicad-conclusiones.html
---
<file_sep>---
migrated: node/765
layout: post
title: 'Grandes inventos de Microsoft: El ratón y la interfaz gráfica.'
created: 1188052321
author: magmax
comments: true
category: tale
tags:
- ocio
---
<blockquote>
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.
</blockquote>

<!--break-->



<h1>Fue Xerox</h1>

Hace tiempo vi una película llamada "Los piratas de Sillicon Valley" (que como todos sabemos, es "el Valle de la Silicona" debido a las cantidades de Silicona que fabrican :P). Os destriparé un trozo por si no la habéis visto: <NAME> logra meter a todo el departamento de desarrollo de Apple en la empresa Xerox, y allí les enseñan sus tesoros más preciados: el ratón y la interfaz gráfica. Rápidamente, Apple se pone a plagiar estos inventos, contándole a su aliado, <NAME>, de qué van. Unos días antes del lanzamiento del nuevo Mac (Lisa, me parece recordar), Microsoft saca un sistema operativo con entorno gráfico y... sí, y ratón.

Desde entonces pensé que el inventor del ratón era Xerox. No me planteé contrastar la información ni nada por el estilo. Sin embargo, las <a href="http://mnm.uib.es/gallir/posts/2007/08/11/1142">10 razones de que no eres tan buen informático como piensas</a> me hicieron pensar, y decidí buscar a aquéllos de la segunda de las razones que no conocía.

<h1><NAME></h1>

Inventor estadounidense que participó en el antecesor de Internet, llamado Arpanet. Es el típico tío que se adelanta a su tiempo, y sus ideas no se aceptaron, por lo que en 1978 le retiraron todas las subvenciones y su laboratorio se deshizo. La mayor parte de este laboratorio pasó a formar parte de la plantilla de Xerox (qué curioso, ¿no?). Se le atribuyen inventos como el ratón, la interfaz gráfica, las ventanas múltiples y el software multiusuario. Obra y milagros en la <a href="http://es.wikipedia.org/wiki/Douglas_Engelbart">wikipedia</a>.


<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-01-27/autenticacin-pam-en-drupal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-15/usar-un-repositorio-cvs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-05/debian-en-cualquier-parte-con-un-cd-y-un-disco-usb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-11-14/bolsa-de-trabajo-ceslcam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-24/router-casero-con-debian-en-el-fit-pc-1-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2008-11-19/ayuda-con-molinux-acceso-a-programas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-07-13/software-libre-para-la-docencia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-22/instalar-torrenflux-b4rt-en-debian.html
---
<file_sep>---
migrated: node/692
layout: post
title: Marcar y clasificar tráfico con iptables y tc
created: 1179942837
author: felix
comments: true
category: recipe
tags:
- networking
- Arco
---
<blockquote>
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.
</blockquote>


<h2>Clasificando paquetes</h2>

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:

<div class="console">
{% highlight console %}
#iptables -t mangle -I POSTROUTING 1 -p tcp -s 192.168.127.12 -j TOS --set-tos 16

{% endhighlight %}
</div> 

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 <a href="http://es.wikipedia.org/wiki/Netfilter/iptables">aquí</a>.

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 192.168.127.12, "-p tcp -s 192.168.127.12". 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:

<div class="console">
{% highlight console %}
# 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  --  192.168.127.12        anywhere            TOS set Minimize-Delay

{% endhighlight %}
</div>

Para borrar todas las reglas de marcado, en el caso de la tabla mangle:


<div class="console">
{% highlight console %}
#iptables -F -t mangle

{% endhighlight %}
</div>

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:


<div class="console">
{% highlight console %}
#iptables -t mangle -I OUTPUT -p tcp --sport 12345 -s localhost -j TOS --set-tos 4

{% endhighlight %}
</div>

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 <a href="http://l7-filter.sourceforge.net/">este</a> que te permite filtrar de forma cómoda por protocolos de la capa de aplicación y habilitar reglas como esta:

<div class="console">
{% highlight console %}
#iptables -t mangle -A FORWARD -p tcp -m ipp2p --kazaa ... acción

{% endhighlight %}
</div>

Vamos, te marca los paquetes de kazza.

<h2> Creando colas </h2>
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:


<div class="console">
{% highlight console %}
#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

{% endhighlight %}
</div>

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:


<div class="console">
{% highlight console %}
#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

{% endhighlight %}
</div>

<h2>Clasificando paquetes</h2>

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:


<div class="console">
{% highlight console %}
#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

{% endhighlight %}
</div>

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:

<div class="console">
{% highlight console %}
# 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 fc00:e968:6179::de52:7100 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 fd00:a516:7c1b:17cd:6d81:2137:bd2a:2c5b 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 fc00:e968:6179::de52:7100 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 fd00:c2b6:b24b:be67:2827:688d:e6a1:6a3b order 2048 key ht 800 bkt 0 flowid 1:4
  match 00100000/00ff0000 at 0
#

{% endhighlight %}
</div>

<h2>Comprobando que todo funciona</h2>

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:


<div class="console">
{% highlight console %}
#./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

{% endhighlight %}
</div>


Puedes bajártelo de <a href="http://www.docum.org/docum.org/monitor/"> aquí</a>. 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.


<file_sep>---
layout: refresh
refresh_to_post_id: /script/2007-07-14/python-lirc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-07-22/transformar-un-servidor-fisico-linux-en-servidor-virtual.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-30/montar-una-particin-de-un-disco-vdi-de-virtualbox.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2010-09-15/el-programa-no-ejecuta-el-archivo-de-video.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2006-07-25/convertir-a-comic.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-15/instalacin-de-moin-wiki-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-11-28/no-dejes-en-el-equipo-tus-contraseas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-03-23/entrevista-a-richard-m-stallman-en-baqua-tv.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-06/lg-l204-wt-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-10/netcat-la-navaja-suiza-de-tcp-ip.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-05-27/juicio-en-luxembugo-contra-el-canon.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-26/cmake-enlazado-de-libreras.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-07-05/desnudando-a-la-nds-lite.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-03/la-forma-cannica-ortodoxa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-03-02/la-que-nos-espera.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-19/pap-de-donde-vienen-las-placas-base.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-28/creacin-de-un-plugin-de-munin-para-mldonkey.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-25/hp-deskjet-720-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-07-12/enlaces-tiles-para-chumby.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-06-30/escndalo-dell-simplemente-no-compres-dell.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-17/escuchar-los-40-principales-por-internet-con-mplayer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-20/lego-mindstorms-nxt-bluetooth.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-30/problemas-con-particiones.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-01-26/yago-un-robotillo-libre-basado-en-avr.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-01-05/usabilidad-que-no-entiendo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-06-20/el-formato-de-word-es-bueno-pero-no-para-ti.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-08-28/aire-fresco-en-el-entretenimiento.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-14/instalar-gnu-linuxcell-sdk-2-1-en-playstation-3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-04-25/atributos-con-tipado-esttico-en-python-usando-un-descriptor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-19/linux-vserver-en-5-minutos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-18/migrar-el-directorio-home.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-12-03/500-euros-para-el-mejor-software-libre-de-2009.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-10-20/cumpleaos-feliz.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-26/presumiendo-de-aceleracin-3d-en-gnu-linux-con-3ddesktop.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-03/tslib-librera-para-la-pantalla-tctil-del-chumby.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-07/cmo-ser-un-gnesis-maintainer.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-02-26/problemas-con-adsl-telefnica-y-debian-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-01-12/puertos-en-el-pic16f690.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-02/personalizar-los-plugins-de-bsqueda-de-firefox.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-02/wii-mote-ese-extrao-mando-a-distancia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-08-23/m-invita-a-firefox-a-sus-instalaciones.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-05-29/personalizar-gdm3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-06-14/radio-por-internet.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-06/duke-nukem-3d-en-gnu-linux-come-get-some.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-12-04/nuevo-sistema-antipiratera-de-vista-sp1-dar-la-brasa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-06-02/ver-dvds-en-ubuntu-o-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-22/blender-efecto-de-profundidad-de-campo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-06-04/es-como-lego.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-11-14/jornadas-sobre-el-uso-del-software-libre-y-la-incorporacin-de-las-tic-en-las-empresas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-25/programacin-de-shaders-glsl-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-25/instalar-programas-con-stow.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-08-29/atheist.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-04-10/el-sistema-operativo-ncleo-2-6-12.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-02-26/wallpaper-gnesis-3-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-03-11/imagen-para-el-trmino-cocina.html
---
<file_sep>---
migrated: node/1692
layout: post
title: Desactivar traducciones de índices de repositorios Debian
created: 1354294546
author: david_villa
comments: true
category: recipe
tags:
- Debian
---
Te suena haber visto últimamente cosas como ésta al hacer @apt-get update@:


<div class="console">
{% highlight console %}


{% endhighlight %}
</div>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-27/accept-un-decorador-para-type-checking-verstil-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-06/mantener-limpia-tu-debian.html
---
<file_sep>---
migrated: node/1076
layout: post
title: 'Gimp: recortar una imagen en línea de órdenes'
created: 1231312811
author: magmax
comments: true
category: script
tags:
- graphics
---
<blockquote>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'.</blockquote>

<h2>Ingredientes</h2>
No os lo vais a creer: gimp.


<div class="console">
{% highlight console %}
 # apt-get install gimp 
{% endhighlight %}
</div>

Seguro que en Mindows es más fácil de instalar.

<h2>Mi primer script</h2>
Lo primero que necesitado ha sido una manera de ejecutar un script. Para ello, he abierto mi imagencilla con Gimp de la forma habitual:

<div class="console">
{% highlight console %}
$ gimp tab1.png 
{% endhighlight %}
</div>

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

<pre>
(gimp-selection-all 1)
</pre>

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.

<h2>El Script</h2>

Ahora que sabemos usar perfectamente script-fu, vamos con el script que recorta una imagen:


<div>
{% highlight text %}
(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") \
) 
{% endhighlight %}
</div>

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.

<h2>Batch mode </h2>
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:


<div class="console">
{% highlight console %}

$ 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)'
{% endhighlight %}
</div>

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.

<h2>Y fin</h2>
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.

<h2>Referencias</h2>
Pues un poco de aquí y otro de allá:
<ul>
<li><a href="http://www.javielinux.com/programacion_python.php">javielinux</a></li>
<li><a href="http://www.linbox.com/ucome.rvt/any/doc_distrib/gimp-1.1.18/manual/manual/GUM/write_scriptfu3.html">Manual de gimp </a></li>
<li><a href="http://www.gimp.org/tutorials/Basic_Batch/">Tutorial de gimp</a></li>
<li><a href="http://www.gimp.org/docs/scheme_plugin/index.html">Documentación de gimp</a></li>
<li><a href="http://gimp-plug-ins.sourceforge.net/doc/Writing/html/plug-in.html">Plugins de gimp</a></li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-02/seguridad-wifi-con-tarjetas-atheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2006-10-30/lasaa-con-championes-y-berenjena.html
---
<file_sep>---
migrated: node/1069
layout: post
title: La consejería de educación y ciencia de CLM apuesta por Windows
created: 1229681899
author: ricardo
comments: true
category: new
tags:
- Molinux
---
Éste es el título de un <a href=" http://www.ste-clm.com/modules/news/article.php?storyid=630">artículo</a> que aparece en la web del STE de Castilla-La Mancha.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-22/hacer-backup-de-tu-correo-en-gmail.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-07-08/iptables-en-fc5.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-01-18/como-funciona-lo-del-vmware-que-esta-instalado-en-los-equipos-de-la-esi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-12-20/el-ceslcam-regala-un-pendrive-de-4gb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-04-30/se-puede-hacer-dinero-con-el-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-02-21/sobre-los-gtk-radiobutton.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2010-10-29/alitas-de-muerte-a-k-a-alitas-al-horno.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-09-04/comparar-ficheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-09/mailman-and-exim4.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-10/gestionando-preferencias-con-gconf-y-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-02/compartir-una-impresora-cups-automgicamente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-15/ethernet-bridging-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-12/otra-de-linus.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2007-03-14/generate_m3u.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-01-27/no-habr-sistema-de-3-amenazas-a-internautas-en-uk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2013-06-26/pollo-a-la-pia-con-queso.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-14/webcams-usb-y-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-01/wormux-el-worms-para-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-02/instalar-gnesis-en-un-usb-desde-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-04-07/fuse-y-python-crea-tu-propio-sistema-de-ficheros-fcilmente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2011-05-13/install-party-y-videoforum-sobre-software-libre-en-daimiel-17-de-mayo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-21/impresora-hp-laserjet-1000-usb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-25/patrn-flyweight-en-python-como-metaclase.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-11-13/demo-del-nuevo-instalador-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-19/crear-un-sitio-web-ssl-con-apache2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-08-14/lo-nico-seguro-es-que-no-lo-es.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-01/publicar-los-homes-con-apache2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-10-19/usuarios-ubuntu-quereis-howtos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-11-27/ms-de-20-estudiantes-de-la-uclm-desarrollarn-proyectos-en-sl.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-18/abierto-el-plazo-de-inscripcin-para-asistir-a-la-fase-final-del-i-concurso-universitario-de-sl-de-c-lm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-19/renombrar-mltiples-ficheros-usando-mmv.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-15/compartir-ficheros-con-sshfs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-19/bluetooth-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-10-27/ayuda-con-mono.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-21/aceleracin-3d-con-dri-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-02-17/el-meta-amigo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-04-26/configuring-igmp-in-a-lan-to-control-iptv-multicast-flows-over-cisco-catalyst-3550-12t.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-09-21/abierta-inscripcin-concurso-universitario-de-software-libre-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-15/zeroc-ice-desarrollo-de-plugins.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-04-12/gua-de-referencia-para-cmaras-axis.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-22/stallman-en-la-esi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-02-27/instalar-un-mdulo-python-en-un-virtualenv.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2012-02-06/97-things-every-programmer-should-know.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-04-13/si-eres-legal-eres-legal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-06-16/problemon-en-el-pc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-02-05/el-santsimo-credo-del-informtico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-11-08/nueva-versin-de-molinux-adarga-4-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-04-24/eaglemode-mi-pc-a-vista-de-pjaro.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-18/introduccin-a-unicode-y-utf-8.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-07-29/y-si-contrataran-a-los-conductores-igual-que-a-los-programadores.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-20/usar-pidgin-para-unirte-a-una-sala-jabber.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-10/gtk-uimanager.html
---
<file_sep>---
migrated: node/470
layout: post
title: convertidor de video
created: 1166030897
author: kryle
comments: true
---
alguien por ahi me puede recomendar un buen convertidor de video? especificamente que convierta de AVI a MPG. 
y si tiene tiempo limitado, les agradeceria que me indiquen como crackearlo. Gracias!!
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-06/la-tierra-como-fondo-de-escritorio-en-gnome-con-xplanet.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-04-20/una-de-listos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-25/buscar-ficheros-en-el-repositorio-debian-apt-file.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-01-14/microsoft-patenta-el-fat.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-05/instalar-x-wrt-en-la-fonera.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-24/gnu-emacs-editar-archivos-remotos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-10-31/introduccin-a-la-programacin-en-emacs-lisp-de-chassell
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-11-29/conexiones-wifi-que-tambin-pueden-ser-libres.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-12-04/el-robo-del-milenio-cmo-internet-lleg-a-ser-libre-y-porqu-es-importante.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-25/dos-monitores-dual-head-con-xrandr.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-24/mdem-comtrend-ct-350-con-el-driver-ueagle-atm-remake.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-01/imagen-opie-para-tu-friendlyarm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-02-13/manipulacin-de-ficheros-mp3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-09/gnu-emacs-todos-los-comandos-que-necesitas-y-nunca-recuerdas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-07-31/usuario-de-yafray-necesitamos-tu-ayuda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-16/mini-referencia-de-sql-con-mysql.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-18/algunos-que-otros-problemillas-con-la-web-de-cisco.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-25/cmake-compilar-un-hola-mundo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2010-05-22/reto-de-la-semana-containers-de-la-stl.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-08-14/10-seales-de-que-no-eres-tan-gnu-ista-como-crees.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-17/arco-devel-zoom-para-gnu-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-12-06/arroz-con-pollo-al-curry.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-02-24/navegacin-annima-mediante-tor-y-privoxy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-26/zeroc-ice-parseando-un-fichero-slice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2011-06-01/intel-hd-graphic-urgente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-09-29/cambio-en-la-configuracin-de-sudo.html
---
<file_sep># -*- mode: ruby -*-
Vagrant.configure("2") do |config|
  config.vm.box = "deb/jessie-i386"

  config.vm.provider :virtualbox do |vb|
    vb.memory = 2048
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook.yml"
  end

end
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-01/puesta-en-marcha-de-un-servidor-dhcp.html
---
<file_sep>---
migrated: node/1452
layout: post
title: Actualizado el Manual de GNU Emacs a 22.2
created: 1295887711
author: suso
comments: true
category: new
tags:
- emacs
---
Tengo el inmenso placer de anunciar la actualización de la traducción

<!--break-->

del Manual de GNU Emacsi a su Decimosexta Edición, correspondiente a
GNU Emacs 22.2. Sigue estando en fase alfa, aunque hemos corregido
muchos errores mecanográficos y avanzado en tareas de la fase beta.

Ha sido un trabajo arduo e ingrato, pues en dicha edición se produjeron
sustanciales cambios estructurales en el manual original que nos
retrasaron muchísimo la actualización. Buena parte de esos cambios no
eran de especial importancia desde el punto de vista de la edición en
español, así que hemos tenido que adoptar decisiones que afectan de
manera considerable al mantenimiento del manual español.
A ello hay que sumarle los innumerables "retoques estilísticos" que
sufrió el manual inglés, la mayoría de ellos sin efecto en la traducción
final, pero de dificilísimo seguimiento durante la actualización.

Todo ello se explica en la página web del manual en español. Esperemos
que con el paso dado podamos volver a abordar la actualización a 23 con
más soltura y facilidad.

----------

Elimino las galeradas de texto intermedias y las genero en HTML
provisional de muestra. Recuérdese, son galeradas.
El material aún no está listo para distribución, pero se puede
consultar.

Fase "alfa" significa que aún hay que hacerle los pases de traducción
de ejemplos, índices, nodos, etc.; y profundas correcciones técnicas,
gramaticales y estilísticas. Por ello se pone aquí a los meros
efectos de recibir sugerencias de aquellos que quieran colaborar con
este proyecto.

Entendemos que las traducciones en fase alfa se encuentran en un estado
considerable de imperfección, por ello la política de nuestra empresa
es no entregarlas nunca al público. Sin embargo, debido a la naturaleza
de esta documentación, estamos siguiendo un método de galeradas al que
pueden sumarse los interesados.

Las galeradas se pueden alcanzar en la sección Libros.

<a href="http://gnu.manticore.es/manual-emacs">http://gnu.manticore.es/manual-emacs</a>
--
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-19/java-blackdown-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-12-13/necesito-algo-de-ayuda-sobre-mi-lan.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-01-12/gnu-linux-media-center.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-08-21/ingsoft-realista.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-01/sobre-la-web.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-06/midi-por-software.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-03-03/open-letter-to-hardware-manufacturers.html
---
<file_sep>---
migrated: node/1071
layout: post
title: Suicidios de discos duros...
created: 1229909393
author: javieralso
comments: true
category: recipe
tags:
- Debian
---
En realidad no sé si debo catalogar ésto como una receta o no. A mi me ha sido algo útil buscando formas de hacer análisis de discos duros (el mio últimamente falla mas que una escopetilla de plomo y solo tiene un año).

<!--break-->

Como paso de reinventar la rueda, simplemente pongo el enlace donde encontré el artículo (que para algo ya está escrito). El artículo se titula <a href="http://www.vicente-navarro.com/blog/2007/10/28/linux-no-mata-discos-duros-se-mueren-solos"><b>Linux no mata discos duros, se mueren solos</b></a>
En mi caso, tras 12 meses y un par de semanas de uso, he leido 47720 ciclos, los 10 últimos en menos de 15 minutos...
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-09/autenticacin-de-paquetes-para-repositorios-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-07-05/cmo-usar-tor-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-06-25/reproducir-vdeo-con-mplayer-utilizando-la-gpu-y-vdpau-para-decodificar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-04-24/ayuda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-23/gnu-emacs-edicin-rectangular-seleccin-vertical.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-14/revista-begins.html
---
<file_sep>---
migrated: node/410
layout: post
title: Comienza el desarrollo de Gnesis 3.0
created: 1161704087
author: cleto
comments: true
category: new
tags:
- GNESIS
---
Hola a todos!

<!--break-->


Escribo para informaros que el desarrollo de Gnesis 3.0 ha comenzado. De la versión 2.0 a la que está actualmente en desarrollo hay muchos cambios; muchos de ellos muy notorios:
<ul>
<li> <b>Basada en Debian</b>: la nueva versión de Gnesis está basada en Debian GNU/Linux, generada con las herramientas de <a href="http://debian-live.alioth.debian.org/">Debian-Live</a>. Concretamente, será la versión inestable de Debian: para estar a la última ;-)!</li>
<li><b>Repositorio de documentación y aplicaciones</b>: uno de los objetivos de Gnesis es que cubra las necesidades de los estudiantes de informática. Pues bien, se piensa en montar un sistema de paquetes virtuales para disponer de aplicaciones, herramientas y transparencias de las distintas asignaturas de la carrera. Su instalación será tan sencilla como la de un paquete debian y estará siempre actualizado ante cambios en las transparencias, apuntes, etc...</li>
<li><b>Debian Live, pero instalable</b>: otro de los objetivos de Gnesis es que sea instalable. Como sabéis, Ubuntu ya es Live-Installer pero Debian aún no. Esperemos que Gnesis sea la primera. :-)</li>
<li><b>Gnesis en USB</b>: para ir a todos los lugares presumiendo de distribución, se construirá una distribución USB mínima y usable para discos duros portátiles y otros dispositivos USB.</li>
</ul>
A grandes líneas, esto es lo que pretende ser Gnesis. Si tienes alguna sugerencia y quieres aportar alguna opinión, deja tu comentario. Esperamos impacientes vuestras sugerencias.

Un saludo a todos!
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-09-24/sensor-de-movimiento-del-ibook-powerbook-g4-bajo-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-05-16/peticin-de-talleres-y-actividades-para-la-party-quijote-2006.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-14/recuperar-grub.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-17/mini-tutorial-de-python-3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-04/sai-mge-pulsar-ellipse-600-en-debian-con-nut.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-15/arreglar-subttulos-srt-desincronizados.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-28/cansado-de-amd64.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-01-21/creando-ejecutables-vlidos-para-cualquier-psp-como-sony.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-28/pegatinas-de-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-19/python-xlib-emulando-el-teclado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-12-17/razones-de-peso-por-las-que-necesitas-windows-live.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-11-09/hook-subversion-para-integracin-con-hudson.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-11/convertir-subttulos-de-dvd-a-formato-srt.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-20/gnu-emacs-usando-emacs-cscope.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-20/tinyos-2-0-un-sistema-operativo-libre-para-dispositivos-empotrados.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-21/eduroam-con-network-manager-one-more-time.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-07-13/libro-de-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-21/apt-get-y-dpkg.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-13/timeout-de-un-mtodo-en-c-con-glib.html
---
<file_sep>---
migrated: node/201
layout: post
title: Virtualización fácil con Xen3
created: 1138102303
author: int-0
comments: true
category: recipe
tags:
- Arco
---
<blockquote>Esta receta no se si tendrá muchas aplicaciones "domésticas", en ella vamos a tratar de crear <em>n</em> máquinas virtuales en una única máquina física. Esto permitirá crear (por ejemplo) <em>n</em> servidores, cada uno con unos servicios determinados en una misma máquina física. Con ello se consigue (entre otras cosas) proteger unos servicios mas "críticos" de otros más "vulnerables" (lo que pase en una máquina es independiente al resto).</blockquote>

<!--break-->



<h1>Qué es Xen</h1>
Xen es un sistema de virtualización similar a <em>VM-Ware</em> o <em>QEmu</em>, pero tiene una difirecia bastante notable: mientras que <em>VM-Ware</em> degrada alrededor de un 30% el rendimiento de la máquina emulada, Xen lo hace entre un 2% y un 3% (es increible pero cierto!), pero claro... no va a ser todo de color de rosa: es necesario parchear tanto el núcleo del sistema real como el núcleo de los sistemas que se emularán (esto debería impedir ejecutar sistemas hasefroch 95, XP, etc. bajo un linux ya que no podemos parchear, a priori, el núcleo de estos sistemas privativos... se comenta por ahí que <b>sí</b> existen estos parches, aunque yo no los he visto).

¿Cómo consigue esto?, en realidad Xen no es una máquina virtual, sino un <a href="http://en.wikipedia.org/wiki/Hypervisor">hypervisor</a> para núcleos linux de la rama 2.6, cuando se inicia un núcleo parcheado con Xen antes de nada aparecerán unos mensajes que empiezan con "[XEN]:", así se muestran los mensajes del hypervisor, también se puede dirigir la consola de Xen a un puerto serie concreto o compartir una cosola con el sistema principal. Después podremos cargar más núcleos como linux, FreeBSD o Plan9.

Para gestionar todos los sistemas que se quieran ejecutar en una máquina, Xen divide el sistema en dominios (o <b>dom</b>), el dominio 0 (o <b>Dom0</b> a partir de ahora, denominado asi por ser privilegiado o <em>priviledge</em>) es el sistema real y será el encargado de lanzar/administrar el resto de los dominios (o genéricamente <b>DomU</b> o <em>unpriviledge</em> a partir de ahora,). La comunicación entre dominios se realiza mediante <em>backends</em> de <em>hotplug</em>, esto permite la comunicación entre dominios con interfaces de red virtuales (o <b>vif</b>'s), discos compartidos, etc.

Los discos de los dominios serán imagenes de sistemas de ficheros ext2, ext3 o reiser. Se pueden crear con dd y montar como dispositivos <em>loop</em> (esto lo veremos más adelante) o incluso usar particiones reales.
La conexión de los dominios a una red se puede hacer de diversos modos: <em>bridged</em>, <em>NAT</em>, etc.
Las versiones de Xen a partir de la 3 soportan virtualización SMP en sistemas SMP. Ninguna versión de Xen liberada hasta ahora soporta librerías <a href="http://en.wikipedia.org/wiki/Thread-local_storage">TLS</a>, es necesario "deshabilitarlas", no he encontrado un método <em>Debian-like</em> en ninguna parte para hacerlo, los chicos de Xen sugieren lo siguiente (que es lo que he hecho yo):


<div class="console">
{% highlight console %}
$ cd /lib
$ mv tls tls.disabled
{% endhighlight %}
</div>

<h1>Instalación con paquetes binarios</h1>
La forma más cómoda de instalar Xen es descargarse los paquetes binarios: <tt>xen-3.0.0-install-x86_32.tgz</tt> o <tt>xen-3.0.0-install-x86_32p.tgz</tt> (incluye soporte <a href="http://en.wikipedia.org/wiki/Physical_Address_Extension">PAE</a>). Estas distribuciones traen de serie el soporte SMP. Ahora símplemente debemos descomprimir el paquete y ejecutar el script de instalación:


<div class="console">
{% highlight console %}
$ unp xen-3.0.0-install-x86_32.tgz
$ cd xen-3.0.0-install
# ./install.sh
{% endhighlight %}
</div>

Este script copiará los ejecutables necesarios, las bibliotecas de python, el hypervisor y los scripts de inicio. Sólo nos queda configurar Grub y corregir unos problemas con este tipo de instalación.

<h1>Problemas serios y soluciones cutres en la instalación</h1>
Bien, esos problemas "serios" me han ocurrido en una Debian unstable (tenedlo en cuenta si usáis Ubuntu o alguna otra), algunos ejecutables no funcionan correctamente por no encontrar una serie de librerías: <tt>libssl.so.4</tt>, <tt>libcrypto.so.4</tt> y <tt>libcurl.so.4</tt>. La solución <b>cutre</b> que he encontrado ha sido la siguiente: enlaces débiles de las librerías que vienen en Debian (más nuevas) a las que me pide el programa:


<div class="console">
{% highlight console %}
# cd /usr/lib
# ln -s libssl.so libssl.so.4
# ln -s libcrypto.so libcrypto.so.4
# ln -s libcurl.so libcurl.so.4
{% endhighlight %}
</div>

También puede ocurrir que los programas <em>python</em> den error al importar algunos módulos, esto también se puede corregir de forma cutre fácilmente:


<div class="console">
{% highlight console %}
# cd /usr/lib
# cp python/* python2.3/
{% endhighlight %}
</div>

O también podríamos haber creado enlaces simbólicos (más mejor...). El problema está en que el script de instalación deja las bibliotecas de python en <tt>/usr/lib/python</tt> y nuestro intérprete las busca en <tt>/usr/lib/python2.3</tt>.

Un problema que ha aparecido en esta versión de Xen (coincidiendo con la sustitución de <em>hotplug</em> por <em>udev</em>) se debe a que aunque se necesita el módulo <b>loop</b> éste no se carga, es necesario cargarlo antes de iniciar <b>xend</b>. Para ello haremos lo siguiente:


<div class="console">
{% highlight console %}
# echo "loop" >> /etc/modules
{% endhighlight %}
</div>

<blockquote>Nota: cuando se carga el módulo, por defecto no deja montar más de 8 dispositivos <em>loopback</em>, esto puede ser problemático en sistemas donde querámos montar más de 4 dominios y no queramos usar particiones reales. Podemos pasar un parámetro a la carga del módulo:


<div class="console">
{% highlight console %}
# modprobe loop max_loop=64
{% endhighlight %}
</div></blockquote>

<!--break-->



Finalmente, la instalación añade dos servicios nuevos en <em>init.d</em> pero, en cambio, no actualiza los enlaces simbólicos de los servicios según el <em>runlevel</em>, así que lo hacemos nosotros y en paz:


<div class="console">
{% highlight console %}
# update-rc.d xend defaults
#update-rc.d xendomains defaults
{% endhighlight %}
</div>

Con esto, la próxima vez que arranque el sistema lo hará con el módulo cargado, <b>xend</b> inciará correctamente y podremos lanzar todos los dominios que necesitemos.

<h1>Configurar GRUB</h1>
Bueno... por si no lo he dicho: es obligatorio <b>Grub</b>... así que migraros los que aún sigáis usando cargadores obsoletos... :-P

En este paso, tendréis que tener <tt>xen-3.0.0.gz</tt> en <tt>/boot</tt>, al igual que las tres imagenes del kernel (sólo privilegiado o -xen0, sin privilegios o -xenU y uno capaz de funcionar de ambos modos o -xen). Muy importante es que no ejecutéis <b>update-grub</b> porque os va a añadir las imágenes parcheadas al menú de arranque y esas opciones no van a ser válidas. Las nuevas opciones las añadiremos "a pelo":
<pre>title Xen 3 Linux, Kernel 2.6.12-xen
root(hd0,4)
kernel /boot/xen-3.0.0.gz dom0_mem=262144
module /boot/vmlinuz-2.6.12.6-xen root=/dev/hde5</pre>
Empecemos con las explicaciones... lo primero que las opciones <b>root</b> serán distintas en vuestro sistema, mirad la de las otras opciones de arranque que tenéis y poned lo mismo.
También podemos especificar una imagen <em>initrd</em>, para ello solo tenemos que añadir una nueva entrada tal que:
<pre>module /boot/initrd.img-2.6.12</pre>
De todas formas yo no la uso y me funciona.
Otra cosa, <b>dom0_mem</b> establece la cantidad de memoria física que verá el Dom0, este dominio no lo usaremos para ofrecer servicios, símplemente para gestionar el resto de dominios, por tanto, no gastéis demasiada memoria en él, yo le he asignado 256Mb que para lo que se usa ya va bien.

Pues nada, ya sólo nos falta reiniciar el sistema y seleccionar ese arranque, si todo va bien veremos los mensajes del hypervisor y después los del arranque normal del linux, si esto es así... ¡ya tenemos el Dom0 funcionando!.

<h1>Compilación de Xen3</h1>
Puede ser que queramos meternos de lleno en Xen, ya sabéis: compilar es más bonito, pero tened en cuenta una cosa, se crean 3 núcleos diferentes: <b>-xen</b> (funciona como Dom0 y DomU), <b>-xen0</b> (funciona sólo como Dom0) y <b>-xenU</b> (funciona como DomU, tiene algunos drivers menos y ocupa 30% menos); así pues el núcleo se compilará 3 veces cada vez, si os apetece entonces vamos al tema:

Necesitaremos los paquetes necesarios para compilar el linux, a parte, también tendremos que tener instalado:
<ul>
<li>zlib1g-dev</li>
<li>rubber (para instalar latex de "rebote")</li>
<li>python-dev</li>
<li>gs-common</li>
<li>transfig</li>
<li>tetex-extra</li>
<li>python-twisted</li>
</ul>
Si hace falta algún paquete más, por favor, comunicadmelo. La compilación es bastante rollo porque si te falta alguno de estos programas se para y cada vez que se hace un <em>make</em> empieza desde el principio porque hace <em>clean</em> antes de empezar.

Ahora necesitamos el archivo <tt>xen-3.0.0-src.tgz</tt>, en la página de <a href="http://www.xensource.com/xen/downloads/">XenSource</a> no está el link directo, hay que pedirlo por mail pero os lo dan automáticamente al hacerlo. Lo que si os viene es un archivo <em>torrent</em> para descargar los mismos ficheros, intentad esta opción si pasáis de dar vuestro mail por ahí.

Una vez tengamos el fichero, lo descomprimimos:


<div class="console">
{% highlight console %}
$ unp xen-3.0.0-src.tgz
{% endhighlight %}
</div>
Y finalmente compilamos:


<div class="console">
{% highlight console %}
$ cd xen-3.0.0
$ make KERNELS=linux-2.6-xen world
{% endhighlight %}
</div>
Esto compilará la documentación y tres núcleos parcheados: <em>version</em>-xen0, <em>version</em>-xenU y <em>version</em>-xen: uno para el Dom0, otro para el DomU y finalmente uno que puede funcionar de ambos modos (este el que usaremos para todo...). Los parches tienen un problema: vienen pensados para una versión concreta del linux, no sirve cualquiera de la 2.6, en este caso hace falta la 2.6.12, pero tranquilos porque el mismo script se descargará los fuentes del núcleo apropiado y lo parcheará debidamente... más fácil imposible!

Una vez compilado lo instalamos (ya como root):


<div class="console">
{% highlight console %}
# make install
{% endhighlight %}
</div>

Y ahora como antes, sólo nos queda configurar Grub.

<h1>Parámetros de configuración de núcleos parcheados</h1>
Supongamos que queremos establecer/modificar valores en el núcleo: inhabilitar módulos, añadir nuevos, etc. Podemos utilizar objetivos normales como los vistos en la receta <a href="/node/182">"Configurar, parchear, cacharrear y compilar un linux FÁCILMENTE"</a> de una forma bastante simple:


<div class="console">
{% highlight console %}
$ cd xen-3.0.0
$ cd linux-2.6.12-xen0
$ make ARCH=XEN menuconfig
{% endhighlight %}
</div>

También puede ser más cómodo usar <em>make-kpkg</em>, en cuyo caso:


<div class="console">
{% highlight console %}
$ make-kpkg --arch xen kernel_image
{% endhighlight %}
</div>

Los archivos de configuración también se gestionan de igual manera, aunque este núcleo tendrá nuevos parámetros añadidos por el parche de Xen.
Hay que tener en cuenta que esto funcionará una vez compilado como se ha explicado porque la descarga y parcheo del núcleo se habrán realizado automáticamente, en caso contrario hay que hacerlo "a mano".

<h1>Creación de dominios</h1>
Bien... ¿cómo creamos DomU?... en Debian existe un paquete llamado <b>xen-tools</b> con unos scripts bastante chulos que lo hacen todo automático, explicaremos su uso más abajo; ahora veremos como hacerlo a la forma "tradicional".

Los dominios se describen con pequeños archivos de configuración situados en <tt>/etc/xen/</tt> que especifican aspectos básicos como el disco, las interfaces de red, el número de procesadores virtuales, etc. Nosotros vamos a crear un dominio cuyo disco va a ser un archivo (para manejarlo luego con más comodidad), para ello creamos el fichero y le damos formato. Los alojaremos en <tt>/var/xen/domains/{nombre_dominio}</tt>, no por obligación, sino por comodidad:


<div class="console">
{% highlight console %}
cd /var/xen/domains/xentest/
$ dd if=/dev/zero of=disk.img bs=1k seek=2048k count=1
# mkfs -t ext3 disk.img
{% endhighlight %}
</div>
Con esto hemos creado un archivo de 2GB que contiene un sistema ext3, lo podemos montar para "rellenarlo" de una forma fácil:


<div class="console">
{% highlight console %}
 # mount -o loop disk.img /mnt/test
# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /mnt/test
# mkdir /mnt/test/{proc,sys,home,tmp}
{% endhighlight %}
</div>
Esto copiará nuestro sistema actual dentro de ese "sistema virtual", además, crearemos los directorios necesarios para la adecuada ejecución del sistema. Ya podemos desmontar /mnt/test, ahora crearemos otra imagen para el <em>swap</em>:


<div class="console">
{% highlight console %}
$ dd if=/dev/zero of=swap.img bs=1k seek=128k count=1
# mkswap swap.img
{% endhighlight %}
</div>
Con esto tendremos un archivo de intercambio de 128Mb, ahora solo nos queda crear el archivo de configuración (xentest.cfg por ejemplo):
<pre>kernel = "/boot/vmlinuz-2.6.12.6-xen"
memory = 128
name = "xentest"
disk = ['file:/var/xen/domains/xentest/disk.img,sda1,w','file:/var/xen/domains/xentest/swap.img,sda2,w']
root = "/dev/sda1 ro"
dhcp = "dhcp"
nics = 1</pre>
Como véis, especificamos que núcleo (accesible por Dom0) y cuanta memoria dispondrá. También se especifica el número de interfaces de red (<em>nics</em>) y cómo obtendrá la IP, tambíen se puede especificar directamente:
<pre>ip = "192.168.0.2"</pre>
Este archivo lo pondremos en /etc/xen/ y podremos lanzarlo mediante:


<div class="console">
{% highlight console %}
# xm create xentest.cfg -c
{% endhighlight %}
</div>
Si Dom0 esta correctamente configurado, se habrá lanzado <em>xend</em> y <em>xendomains</em> al inicio, entonces se lanzará ese nuevo dominio, podemos
ver que se ha lanzado y se está ejecutando con el comando:

<div class="console">
{% highlight console %}
# xm list
{% endhighlight %}
</div>

Si queremos que un dominio se lance automáticamente al iniciar Dom0 sólo tenemos que crear un enlace simbólico del archivo de configuración en el directorio <tt>/etc/xen/auto</tt>:


<div class="console">
{% highlight console %}
# cd /etc/xen
# ln -s xentest.cfg auto/xentest.cfg
{% endhighlight %}
</div>

<h1>Creación de dominios con xen-tools</h1>
Debian dispone de dos paquetes relativos a Xen: <b>xen</b> y <b>xen-tools</b>. Es mejor no instalar el paquete <b>xen</b> porque va por la versión <b>2.0.6</b>, además tampoco incluye los núcleos parcheados con lo que tendremos que compilarlo nosotros. Si podemos instalar y usar <b>xen-tools</b>, este paquete incluye scripts muy útiles para la gestión de dominios (creación, duplicado, etc.). Una vez instalado el paquete, podemos crear dominios fácilmente con la herramienta <b>xen-create-image</b> del paquete <b>xen-tools</b>, tan fácil como:


<div class="console">
{% highlight console %}
# xen-create-image --dir /var/xen --hostname xentest
{% endhighlight %}
</div>
Esto creará una Debian base en el archivo de imagen creando el archivo de intercambio directamente. Podemos especificar más parámetros, por ejemplo:


<div class="console">
{% highlight console %}
# xen-create-image --dir /var/xen --hostname xentest --fs ext3 --kernel /boot/vmlinuz-2.6.12.6-xen --mirror http://ftp.rediris.es/debian --dist sarge
{% endhighlight %}
</div>

<h1>Configurar la red de los dominios</h1>
En primer lugar, el Dom0 se configura como siempre, no hay que hacer nada "raro". Tenemos dos posibilidades para crear una red con los dominios: <em>bridged</em> o <em>NAT</em>. En modo <em>bridge</em> la interfaz del DomU tiene acceso a la red através del interfaz de Dom0. Podemos imaginarlo como si nuestra máquina real tiene varias IP's, una para cada dominio. En el modo <em>NAT</em> creamos una LAN entre los DomU, la salida a la LAN real se hace por la interfaz del Dom0 de forma similar a como funciona un red doméstica con varios equipos y un "routercillo" conectado a una ADSL.

Vamos con el modo <em>bridge</em>, en principio este modo es más sencillo pero tendremos que realizar un par de cambios a la configuración de nuestros DomU: principalmente usar el linux parcheado específicamente para DomU, modificamos la línea del kernel a cargar por la siguiente:
<pre>kernel = "/boot/vmlinuz-2.6.12.6-xenU"</pre>
Con esto, programas como <tt>dhcp-client</tt> nos darán menos problemas. En mi caso todos los dominios se configuran con <em>DHCP</em>, vuestra LAN debe tener <tt>dhcpd</tt> o similar funcionando. Todos los dominios tienen que tener la interfaz configurada en <tt>/etc/network/interfaces</tt> como sigue:
<pre>auto eth0
iface eth0 inet dhcp</pre>
Y en el archivo de configuración del dominio:
<pre>nics = 1
dhcp = "dhcp"</pre>
Xen configura la red mediante unos scripts (más o menos sencillos pero muy bien comentados) situados en <tt>/etc/xen/scripts</tt>, echad un vistazo a <tt>network-bridge</tt> que os explica como arrancarlo, básicamente:


<div class="console">
{% highlight console %}
$ /etc/xen/scripts/network-bridge start
{% endhighlight %}
</div>

Y ya arrancamos el dominio como antes, si todo ha ido bien, <tt>dhcp-client</tt> debe obtener una IP (también tenéis que tener <tt>dhcpd</tt> bien configurado en vuestra LAN...). Podéis probar a hacer <em>pings</em> a equipos incluso fuera de la LAN o desde otros equipos al dominio. Los <em>pings</em> hacedlos así:


<div class="console">
{% highlight console %}
$ ping -c 10 www.google.com
{% endhighlight %}
</div>

Por la sencilla razón de que los dominios, al compartir la terminal, no reciben señales como <em>Ctrl+C</em> y el <em>ping</em> se va a ejecutar indefinídamente hasta que no cerréis el dominio.

<h1>Conclusiones</h1>
En esta receta se han quedado muchisimas cosas por explicar, por ejemplo: configuración del núcleo parcheado con Xen, parámetros de Xen, nuevas opciones de núcleos parcheados, imagenes Xen en discos reales, en discos LVM, en discos NFS, migración en vivo de máquinas Xen (esto es impresionante), topología de red en dominios Xen, etc. Muchas de estas cosas son fáciles de realizar con la documentación en la mano, otras las estoy estudiando a ver si lo echo a andar completamente. Por ahora necesito ayuda con lo que ya he puesto aquí... gracias y que le aproveche a alguien... ;-)

<h1>Enlaces de interés</h1>
<a href="http://www.xensource.com/xen/xen/">XenSource, página oficial</a>

<a href="http://www.howtoforge.com/perfect_xen_setup_debian_ubuntu">Perfect Xen setup on Debian/Ubuntu</a>

<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-05-25/25-de-mayo-dia-del-orgullo-friki.html
---
<file_sep>---
migrated: node/735
layout: post
title: Ayuda con Visión por computador
created: 1184070181
author: manueldavid
comments: true
category: enquiry
---
<h2>Reconstrucción 3D a partir de dos imágenes</h2>
<blockquote class="head"> 
   Intento realizar la reconstrucción 3D a partir de la visión estereo (dos imágenes o más) he llegado a un punto en el que me he quedado atascado. A ver si alguno de ustedes me puede orientar. 
 </blockquote>


<h2>Aclaraciones:</h2>
   La reconstrucción 3D lo que pretende  es obtener las dimensiones 3D de un objeto a partir de varias imágenes tomadas del mismo desde diferentes posiciones(mínimo dos imágenes).
Para ello yo estoy utilizando dos cámaras.

<h2>Pasos que estoy siguiendo:</h2>

<ol>
  <li>Calibrar la cámara  izquierda (Obtenemos la matriz de cámara   KL) </li>
  <li>Calibrar la cámara derecha  (Obtenemos la matriz de cámara   KR)   </li>
  <li> Sacar una imagen desde el lado izquierdo</li>
  <li> Sacar una imagen desde el lado derecho</li> 
  <li> Detectar coordenadas en píxeles del objeto deseado de la imagen izquierda(mínimo 8 ) </li>
  <li> Detectar las mismas  coordenadas en píxeles del objeto deseado en la imagen derecha(mínimo 8 )</li>
  <li> Calcular la matriz fundamental a partir de los píxeles anteriormente calculados


<blockquote class="head"> 
   Para ello utilizo la función de OpenCV:
   cvFindFundamentalMatrix( points1, points2,8,0, fund_matrix);
 points1 corresponde a los puntos de la imagen de la izquierda, y points2 corresponde a los puntos de la imagen de la derecha, la matriz fundamental queda almacenada  en fund_matrix.
 </blockuote>

</li>

<li> calcular la matriz esencial a partir de la matriz fundamental y la matriz de cámara de ambas cámaras 
<blockquote class="head"> 
   De la siguiente forma:
      ME=KLT  x  F x  KR

           Siendo ME la matriz esencial.
          KLT la matriz transpuesta de KL(matriz de cámara izquierda).
           KR matriz de cámara derecha.
           F la matriz fundamental.
             
 </blockuote>

</li>
<li> calcular la descomposición SVD de la matriz esencial 
<blockquote class="head"> 
    Para ello hay que utilzar la siguiente funcion de OpenCV.

	void cvSVD( CvArr* A, CvArr* W, CvArr* U=0, CvArr* V=0, int flags=0 );
         
           A es la matriz que queremos descomponer.
           U,W,V son la matrices en las que se descompone. Como vemos en la siguiente  línea de abajo.

           A=U*W*VT

 </blockuote>

</li>
<li> Calculamos la matriz de rotación(R)
<blockquote class="head"> 
  de la siguiente forma:
 
                 
U*P* VT

donde P es :

| 0 1 0 |
| -1 0 0|
 | 0 0 1|
                       
 </blockuote>

</li>
<li> Calculamos la matriz de traslacion(T)
<blockquote class="head"> 
  de la siguiente forma:
 
                 
V*PP* VT

donde PP es :

| 0 -1 0 |
| 1 0 0|
 | 0 0 1|
     


A partir de aquí es cuando empiezan mis primeras dudas, a partir de la T de arriba, tengo que sacar un vector de 3 X 1.
En uno de los documentos lo que hacen es formar esta matriz de 3 X 1, a partir del a02 y a21, de la siguiente forma:
                 |a21|
                 |a02|
                 |a02|                  
 </blockuote>

</li>

  <li> Con todas las matrices halladas anteriormente resolver las siguientes dos ecuaciones independientes
<blockquote class="head"> 
   m1=[K1|0]M
m2=[(K2*R)|(-K2*R*T)]*M 


m1 es una matriz 3X1 (coordenadas en pixeles de la primera imagen)
m2 es una matriz de 3X1 (coordenadas en pixeles de la segunda imagen)
K1 es una matriz de 3x3(matriz de cámara 1)
K2 es una matriz de 3X3(matriz de cámara 2)
R es una matriz de 3X3 (matriz de rotación)
T es una matriz de 3X1 (vector de traslacion) 
M es el punto 3D que quiero obtener.

 </blockuote>

</li>
</ol>

<h2>Mis dudas</h2>
Aplicando algebra lineal he conseguido hallar los puntos 3D M en ambas ecuaciones, el problema que he encontrado es que el eje Z, es decir, la tercera dimensión, la profundidad del objeto me la calcula de forma erronea. 

¿Alguno de ustedes sabe si   mi error radica en algún paso anterior?
¿Alguno de ustedes realiza la reconstrucción 3D de otra forma?

Agradecería cualquier tipo de orientación.

Un saludo
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-06/instalar-beryl-desde-repositorio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-11-24/instalar-debian-gnu-linux-en-el-acer-aspire-one-a150l.html
---
<file_sep>---
migrated: node/531
layout: post
title: Sacando el jugo a las tarjetas Atheros (madwifi)
created: 1169547128
author: int-0
comments: true
category: recipe
tags:
- security
- networking
---
<blockquote>Si alguno es un afortunado poseedor de una tarjeta wifi con chipset Atheros (que es el que viene usando Cisco) debéis saber que todo un mundo de diversión inalámbrica está a vuestro alcance ;-)</blockquote>

<!--break-->



<h2>Identificar la tarjeta</h2>

Bueno... para saber si tenemos una tarjeta yo uso <em>lspci</em> porque yo la tengo integrada, si la vuestra es <em>pcmcia</em> o <em>usb</em> podéis usar <em>cardctl</em> o <em>lsusb</em> respectivamente... para mi caso:


<div class="console">
{% highlight console %}
# lspci | grep Ath
00:09.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)

{% endhighlight %}
</div>

Y ahí la tenemos! bueno pues vamos al siguiente paso...

<h2>Instalar los drivers madwifi</h2>

Pues nada... si tenemos Debian podemos hacerlo más o menos rápido:


<div class="console">
{% highlight console %}
$ m-a a-i madwifi
{% endhighlight %}
</div>

Como queremos divertirnos, instalaremos un par de cosas más:


<div class="console">
{% highlight console %}
$ apt-get install madwifi-tools kismet
{% endhighlight %}
</div>

Bien... si no tenemos Debian o queremos instalar los drivers a pelo podemos entrar en <a href="http://madwifi.org/">madwifi.org</a> donde encontramos dos sabores: <em>madwifi</em> y <em>madwifi-old-openhal</em>. Descargáis el que queráis mediante <em>subversion</em>, con <em>make</em> y <em>make install</em> los tendréis compilados y funcionando sin problemas. Las diferencias entre los dos es simple: existe una capa llamada <em>HAL</em> (<em>Hardware Access Layer</em>), es la capa que accede al chipset directamente. El chipset puede manejar frecuencias y potencias de transmisión fuera del rango de los estándares wifi (incluso frecuencias militares...), por ley (según legislaciones de algunos países), los fabricantes de aparatillos inalámbricos deben proporcionar mecanismos para asegurar que sus dispositivos no trabajen en otras frecuencias. En el caso de Atheros ese mecanismo es no proporcionar el código de <em>HAL</em>. Los dos sabores que tenemos son pues:
<ul><li>madwifi: HAL cerrado, pero toda la funcionalidad WIFI disponible.</li>
<li>madwifi-old-openhal: porciones de HAL abiertas (descubiertas, más bien), a mi me funcionan bien pero no tan bien como el anterior.</li></ul>

<h2>Configuración de la interfaz</h2>

Una vez cargados los drivers con <em>dmesg</em> deberéis obtener lo siguiente:

<pre>ath_pci: 0.9.4.5 (svn r1993)
PCI: Enabling device 0000:00:09.0 (0000 -> 0002)
ACPI: PCI Interrupt 0000:00:09.0[A] -> Link [LNK3] -> GSI 11 (level, low) -> IRQ 11
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.9 phy 4.3 radio 4.6
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0x64000000, irq=11
</pre>

Aquí vemos los cifrados hardware soportados, los <em>rates</em>, etc... también vemos que disponemos de la interfaz <b>wifiX</b> (donde X es un número). Si usáis los <em>madwifi</em> con HAL abierto sólo dispondréis de una interfaz nueva <b>athX</b>. Si tenémos wifi0 también tendremos ath0, ésta es la que debemos usar, la configuramos de la siguiente forma (archivo <tt>/etc/network/interfaces</tt> en caso de Debian/Ubuntu):
<ul><li>Todo automático:
<pre>iface ath0 inet dhcp</pre>
Esto hará que se asocie con el punto de acceso que más calidad de señal tenga y haga ahí sus peticiones dhcp.</li>
<li>Automático a una determinada red:

<pre>
iface ath0 inet dhcp
wireless-essid UCLM
</pre>

Esto buscará la red <em>UCLM</em> y hará ahí sus peticiones DHCP, ejemplos de essid pueden ser <em>motorola</em>, <em>Bianco_</em>, etc.</li>

<li>Automático en una determinada red con cifrado WEP:
<pre>
iface ath0 inet dhcp
wireless-essid vecino
wireless-key <KEY>
</pre>

Se conectará a la red llamada <em>vecino</em> cifrada con esa contraseña (se detecta el tipo de cifrado según la contraseña).</li></ul>

Si las redes no tienen servicio DHCP se debe especificar una dirección, una máscara y una puerta de enlace como con cualquier otro tipo de interfaz.

<h2>Configurar Kismet</h2>

Si somos muy curiosos puede ser que queramos tener <em>kismet</em> funcionando. Kismet es una utilidad que permite estudiar redes wifi pero que por si sólo puede ser estudio de futuras recetas. Aquí explicaremos cómo configurarlo para su función con <em>madwifi</em> (los drivers con HAL cerrado). El archivo de configuración especifica <em>sources</em>, una <em>source</em> es un dispositivo inalámbrico capaz de establecerse en modo monitor. La <em>source</em> para el caso de <em>madwifi</em> es la siguiente (archivo <tt>/etc/kismet/kismet.conf</tt>):

<pre>
source=madwifi_g,wifi0,madwifi-ng
</pre>

El primer campo es el driver para la tarjeta, tenemos madwifi_a, madwifi_b, madwifi_g, madwifi_ab y madwifi_ag (consultad la documentación de Kismet y os vienen todos). El segundo campo es el nombre del dispositivo y por último el nombre que asignamos a la <em>source</em>.

Si ahora iniciamos kismet (como <em>root</em> o con un usuario con permisos suficientes), la interfaz cambiará a modo monitor y empezará a capturar paquetes como loco, generará una serie de archivos (descripciones de las redes en xml, etc.) y entre ellos el <em>dump</em> en formato <em>libpcap</em> (que puede ser abierto con <em>wireshark</em>) en el directorio <tt>/var/log/kismet/</tt>.

Hay que decir que kismet realiza un acceso bloqueante a la interfaz, con lo que las conexiones wifi se caerán mientras estéis usándolo. También te avisan de que después de usar kismet es probable que la interfaz deje de funcionar correctamente... pero a mi eso nunca me ha pasado.

<h2>Interfaces para todos</h2>

Otra cosa realmente interesante de <em>madwifi</em> es la posibilidad que nos brinda de crear nuestras propias interfaces wifi "virtuales" mediante la herramienta <em>wlanconfig</em>.

Son muchas las posibilidades que nos ofrece, pero veamos algunas "útiles"...
<ul><li>Crear una interfaz wifi en modo Ad-Hoc:


<div class="console">
{% highlight console %}
$ wlanconfig ath create wlandev wifi0 wlanmode adhoc
{% endhighlight %}
</div>

Usando la interfaz real <em>wifi0</em> nos creará una nueva, llamada <em>athX</em>, donde X es el siguiente número de interfaz disponible (aunque podemos especificarlo nosotros usando ath2, por ejemplo, en vez de ath).</li>

<li>Crear una interfaz en modo monitor:


<div class="console">
{% highlight console %}
$ wlanconfig ath create wlandev wifi0 wlanmode monitor
{% endhighlight %}
</div></li>

<li>Crear una interfaz en modo <em>access point</em> con una MAC diferente a la nuestra (da escalofríos pensar qué se puede hacer con esto...):


<div class="console">
{% highlight console %}
$ wlanconfig ath create wlandev wifi0 wlanmode ap bssid
{% endhighlight %}
</div>

Si coexisten otras interfaces virtuales debemos especificar al final <em>nosbeacon</em> para deshabilitar el uso hardware de los <em>beacon frames</em>.</li></ul>

Esto son sólo un par de ejemplos.... consultad la página <em>man</em> porque te explican hasta como hacer un <em>bridge</em> en unos pocos pasos...

<h2>Conclusiones</h2>

Aún se han quedado un par de cosas en el aire... como por ejemplo la inyección de paquetes (que también puede hacer la tarjetilla) etc. Pero creo que para ir abriendo boca tenemos suficiente. Es una lástima que el <em>HAL</em> esté cerrado porque desde luego el <em>chipset</em> este parece bastante espectacular...

<h2>Enlaces</h2>
<a href="http://madwifi.org/">Multiband Atheros Driver for Wifi</a>
<a href="http://www.kismetwireless.net/">Kismet</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-08-29/software-para-electrnicos-kicad-2-parte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-02-06/arte-linuxero.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-05-18/politonos-gratis.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-26/aplicaciones-multilinges-gettext.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-28/catlogo-de-modismos-y-patrones.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-01-14/3-padrenuestros-y-5-ave-marias.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-11-27/inslacin-de-debian-en-un-asus-ux32v-con-w8-preinstalado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-07-20/enjuto-mojamuto-no-todos-somos-gonzlez-sinde.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-12-30/nace-el-dominio-de-primer-nivel-42.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-03-17/fotografa-final-con-r-stallman.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-17/ya-estamos-en-china.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-06-06/upgrade-a-drupal-5-7.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-02-04/se-acab-el-ipv4.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-05-17/fallito-de-seguridad-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-08/generar-libros-para-devhelp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-02-27/soporte-mejorado-para-el-asus-ux32vd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-20/cairo-usar-un-svg-como-figura-cairo-groups.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-02-21/foros-de-ubuntu-es.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-05-30/ms-amigo-informtico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-02/zeroc-icebox-creacin-de-un-servicio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-10/sabas-que-cp-no-tiene-porqu-borrar-tus-ficheros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-03-11/de-qu-me-suena.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-28/cambiar-la-password-de-active-directory-desde-gnu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-09-21/me-presento.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2012-02-05/pimientos-rellenos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-07-12/instalacin-y-puesta-en-marcha-de-hydra-desde-repo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-01-25/estamos-hartos-de-escribir-mierda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-10-30/sockets-raw-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-03-01/access-denied-arte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-08/configurando-backups-en-bacula.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2008-09-10/nano-reto-de-programacin-en-bash.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-04/instalar-debian-gnu-linux-en-un-compaq-tc-1100.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-07/compilar-linux-para-la-tarjeta-arm-mini2440.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-05/mercurial-hacer-un-hook-para-prohibir-ficheros-incorrectos.html
---
<file_sep>---
migrated: node/406
layout: post
title: Xplanet como salvapantallas con gnome-screensaver
created: 1161428799
author: fsancho
comments: true
category: recipe
tags:
- gnome
---
<blockquote>
Muchos de los que usamos Ubuntu vimos con poco agrado que se prescindiese del gestor de Salvapantallas XScreensaver. El sustituto fue gnome-screensaver, mucho mas sencillo y con muchas menos funcionalidades.

Con esta mini-receta trataré de devolver la sonrisa a aquellos que dejaron de poder utilizar Xplanet como salvapantallas.
</blockquote>

Aunque gnome-screensaver es mucho mas simplón, no limita las posibilidades. Simplemente están fuera de la interfaz de usuario, pero en la práctica sigue siendo perfectamente posible toquetear en sus tripas. Por ahora solo se puede hacer desde la consola, pero el equipo de gnome-screensaver tiene en mente extender su interfaz para que sea algo mas configurable (ya que a día de hoy no lo es en absoluto).

En el paquete 'xscreensaver-data' podremos encontrar un montón de ficheros con extensión <tt>.desktop</tt>, estos ficheros contienen los lanzadores de los salvapantallas. Lo único que tendremos que hacer es crearnos nuestro propio lanzador y colocarlo en el sitio adecuado. Además tendremos que crear un enlace para Xplanet en el directorio donde se encuentran los salvapantallas. 

En primer lugar, creamos un fichero <tt>xplanet.desktop</tt> con este contenido.

<pre>
[Desktop Entry]
Encoding=UTF-8
Name=XPlanet
Comment=This Shows random planets from random points of view using Xplanet.
TryExec=xplanet
Exec=xplanet -vroot -label -body random -origin random -radius 20 -range 10 -wait 30
StartupNotify=false
Terminal=false
Type=Application
Categories=Screensaver
X-Ubuntu-Gettext-Domain=xscreensaver
</pre>

La etiqueta <tt>Exec</tt> es la que contiene el comando concreto que deberemos ejecutar para mostrar nuestro salvapantallas. En mi caso muestro un cuerpo aleatorio desde un origen aleatorio y lo cambio cada 30 segundos. 

Una vez creado el fichero lo copiamos al directorio <tt>/usr/share/gnome-screensaver/themes/</tt>.

<b>Actualización:</b> Los usuarios de Ubuntu Edgy deben copiar el fichero en el directorio <tt>/usr/share/applications/screensavers/</tt>.


<div class="console">
{% highlight console %}
$ sudo cp xplanet.desktop /usr/share/applications/screensavers/
{% endhighlight %}
</div>

Por último creamos un enlace del binario de Xplanet en <tt>/usr/lib/xscreensaver</tt>


<div class="console">
{% highlight console %}
$ sudo ln -s /usr/bin/xplanet /usr/lib/xscreensaver/
{% endhighlight %}
</div>

Y listo!, sólo tienes que ir al menú Sistema->Preferencias->Salvpantallas y seleccionar tu nuevo salvapantallas de Xplanet.
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-04-24/concurso-de-videotutoriales-en-molinux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-16/patrones-todo-lo-que-nunca-quisiste-saber-y-siempre-evitaste-preguntar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-05-08/10-razones-para-no-usar-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-07/gnu-bash-para-programadores-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-11/usar-un-repositorio-subversion.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-04/gnu-emacs-como-editor-xml-o-docbook-con-psgml.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-20/montar-un-repositorio-trivial-de-paquetes-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-07-01/repositorio-de-paquetes-debian-serio-bsico-y-cmo-usarlo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-23/sql-bsico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-05-11/molinux-zero-distribucin-gnu-linux-para-equipos-obsoletos-y-con-pocos-recursos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-08-29/wallpaper-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-12-19/la-consejera-de-educacin-y-ciencia-de-clm-apuesta-por-windows.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-26/pendrive-cifrado-con-dm-crypt-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-15/diferencia-de-sabores.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-10/flash-con-firefox.html
---
<file_sep>---
migrated: node/255
layout: post
title: Configurar TV en ubuntu
created: 1142018581
author: fmreja
comments: true
category: enquiry
---
Hola, tengo un pc portatil "beep" con tarjeta de televisión interna y tras muchas pruebas, manuales y recetas... he llegado a la conclusión de que no se configurarla para poder ver la tele en mi ubuntu. Alguien ha instalado alguna?? puede ser problema de que no tenga el chip bt??

Muchas gracias.
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-02-12/amara-por-fin-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-06-21/ms-canon.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-24/configuracin-y-uso-de-pbuilder.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-30/gnu-emacs-cambiar-la-configuracin-de-colores.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-15/udev-configurando-el-acceso-al-usb-sin-ser-root.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-23/apt-build-cuando-debian-huele-a-gentoo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-12/apache2-como-frontal-seguro-para-zope-plone.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-04-02/comunicacin-entre-tu-calculadora-hp4x-y-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-12/debian-gnu-linux-en-el-dell-xps-420.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-13/activar-compositing-en-gnome-sin-utilizar-compiz-ni-derivados.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-11-05/bridges-de-red-para-virtualbox-y-qemu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2011-04-12/fase-final-iv-edicin-concurso-univ-de-software-libre-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-11/traceando-cdigo-c-en-los-avr-in-circuit-avarice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-05/cmo-escribir-una-receta.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-14/lirc-con-la-winfast-tv-2000-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-30/webdav-con-apache2-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-11-05/mens-y-barra-de-herramientas-dinmicas-en-pygtk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-07-17/ejecutando-un-mismo-comando-en-varias-mquinas-con-fabric.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-10/experimentando-con-active-directory-y-openldap.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-18/swig-donde-c-y-python-se-dan-la-mano.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-25/convertir-subttulos-de-dvd-a-formato-vobsub.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-23/compilando-e-instalando-palib.html
---
<file_sep>---
migrated: node/1336
layout: post
title: problemas con adsl telefónica y debian linux
created: 1267184082
author: epatipati
comments: true
---
Hola soy nueva en esto; estoy intentando ser usuaria de debian linux y voy despacio. Ahora he encontrado problemas para conectarme a Internet mediante red inalámbrica de ADSL de Telefónica. Tengo un modem Xavi 7968, he instalado el wicd y me reconoce la red inalámbrica pero cuando busca la IP me da Fallo de conexión: incapaz de obtener una dirección IP. En Telefónica no hay soporte para Linux (que ya les vale, claro) y estoy empezando a desesperarme. Si alguien me puede ayudar lo agradecería.

<!--break-->

Un saludo. Ester.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-07/ddclient-cliente-de-dns-dinmico-para-todos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-09/xgl-y-beryl-en-ubuntu-dapper.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-06/ejemplo-sencillo-de-glacier2-con-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-04-12/atajos-en-bash.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-13/instalar-debian-gnu-linux-en-sony-vaio-vgn-tx27tp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-03-26/gnu-emacs-el-get-un-apt-get-para-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-20/print-con-colores-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-18/el-reto-del-mes-1-edicin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-18/distribuir-programas-con-autotools.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-09/latex-chuletario-bsico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/ver-ficheros-fuente-coloreados-en-consola.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-12-22/pensar-en-c-herencia-de-interfaces.html
---
<file_sep>---
migrated: node/767
layout: post
title: Real como la vida misma....
created: 1188373829
author: javieralso
comments: true
category: opinion
tags:
- ocio
---
Pues eso, <a href="http://www.malla20.com/wp-content/uploads/2007/06/linux.jpg">real como la vida misma</a>...
<file_sep>---
migrated: node/228
layout: post
title: Gaim 2.0
created: 1140108477
author: cleto
comments: true
category: new
---
Ya está disponible la <a href="http://xgn.com.br/fabio/gaim_2.0.0cvs2-1_i386.deb">nueva versión (beta) de gaim</a>. La verdad es que no cambia mucho con respecto a la anterior pero si se le ha añadido funcionalidades nuevas:

<!--break-->


  - Más control sobre los estados de la conexión (ausente, no disponible...)
  - Sonidos menos "estridentes"
  - Animación en el desplazamiento de la conversación

Entre otras...

Un saludo!
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2007-02-25/peras-en-reduccin-de-vino.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-09-20/9-reglas-para-una-mejor-orientacin-a-objetos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-02-19/dobles-de-prueba.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2009-08-21/just-for-fun.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-24/arm-mini2440-configurando-uboot-para-arranque-desde-sd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-09/kit-de-desarrollo-libre-para-ps3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-08-12/diez-o-ms-seales-de-que-no-eres-tan-buen-programador-como-piensas.html
---
<file_sep>---
migrated: node/114
layout: post
title: Instalando HURD
created: 1133011617
author: Consegliere
comments: true
---
Hola a todos!, esta es mi primera vez que escribo a un blog, (no es tan emocinante como el sexo, pero que se le va hacer).

<!--break-->

Habeis oido hablar alguna de vez de HURD?. Bueno, HURD es el nuevo kernel que se está desarrollando para el sistema GNU. Funciona bajo GNU MACH, que es el microkernel que actualmente es estable. HURD es un conjunto de servidores que se intercomunican mediante GNU MACH. 
Ahora estoy intentando probarlo, porque la curiosidad me mata (verdad pararé de curiosear cuando explote el ordenador).

La distribucion que he probado es Bee GNU/Hurd. No es nada dificil de instalar cuando se conocen bien los comandos a ejecutar, y se sabe lo que se está haciendo en todo momento. Pues bien, cuando decidí probarlo repartioné el disco duro para tener una partición más para HURD. Extraje y descomprimí todos los archivos que componian el HURD en la nueva partición. Modifique el cargador GNU GRUB para que pudiera cargar HURD. Una vez hecho, reinicie el ordenador y se configuró automaticamente, luego reinicio solo automaticamente y al cargarlo otra vez ya lo podia usar.

Ahora tengo que configurarlo y eso me llevará un tiempo, hasta que entienda como funciona. El único problema que tuve fue que no funcionaban las pipes. Un gran problema porque no podia hacer casi nada. Entonces lei por internet que era debido al formato que de la particion del HURD. Debia de decirle cuando lo formateé que sistema iba a poner. Es decir debia poner: mke2fs -o hurd /dev/hda3
Despues de instalarlo otra vez, ya me funcionaba.

Enlaces:
<a href="http://www.gnu.org/software/hurd/hurd.html">GNU HURD</a>
<a href="http://www.gnu.org/software/hurd/gnumach.html">GNU MACH</a>
<a href="http://bee.es.gnu.org/blog/">Bee GNU/HURD</a>
<a href="http://bee.es.gnu.org/blog/Instalacion.html">Manual de instalación de Bee GNU/HURD</a>
<a href="http://bee.nopcode.org/">Repositorio de Bee GNU/HURD</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-03-15/nueva-camisetilla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-28/hacer-un-latiguillo-ethernet-cable-cruzado-cross-over.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-19/python-time.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-10/emulador-remoto-para-android.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-03-12/readyboost-destroza-tu-pendrive-con-windows-vista.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-22/instalador-de-gnesis-3-0-en-su-versin-0-0-1-alfa-beta-gamma-archi-experimental.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-05-25/kerberos5-ldap-y-errores-frecuentes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2008-10-24/se-trata-de-un-empecinamiento-en-separar-el-equipo-del-so.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-24/creacin-de-un-mdulo-drupal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-25/debian-plone-en-5-minutos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-07/tonteras-de-la-propiedad-intelectual.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-03-30/cruzar-el-atlntico-a-nado-no-tiene-precio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-26/solucin-al-fallo-de-glx-en-tarjetas-nvidia-antiguas-legacy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-10/gnu-emacs-ocultar-password-de-root-en-el-modo-shell.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-27/teclas-multimedia-en-porttiles-apple-con-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-07-05/stallman-famoso-gracias-a-un-peluche.html
---
<file_sep>#!/bin/bash --
# -*- coding: utf-8; mode: shell-script; tab-width: 4 -*-
# from: http://pauldambra.github.io/using-travis-to-build-jekyll.html

DEPLOY_REPO="https://${DEPLOY_TOKEN}@github.com/CRySoL/CRySoL.github.io.git"

function clean {
    echo "cleaning _site folder"
    [ -d "_site" ] && rm -Rf _site
}

function get_current_site {
    echo "getting latest site"
    git clone --depth 1 $DEPLOY_REPO _site
}

function build_site {
    echo "building site"
    bundle exec jekyll build
}

function deploy {
	echo "deploying changes"

	if [ -z "$TRAVIS_PULL_REQUEST" ]; then
	    echo "except don't publish site for pull requests"
	    exit 1
	fi

	if [ "$TRAVIS_BRANCH" != "master" ]; then
	    echo "except we should only publish the master branch. stopping here"
	    exit 1
	fi

	cd _site
	git config --global user.name "<NAME>"
    git config --global user.email <EMAIL>
	git add -A
	git status
	git commit -m "Lastest site built on successful travis build $TRAVIS_BUILD_NUMBER auto-pushed to github"
	git -C _site pull
	git push $DEPLOY_REPO master:master
}

clean
get_current_site
build_site
deploy
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-23/zeroc-ice-persistencia-de-sirvientes-con-freeze-evictor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2007-02-16/aprende-punteros-con-binky.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-15/instalar-un-servidor-jabber-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-08-14/prcticas-de-programacin-infames-openjdk.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2007-05-15/conferencia-sobre-software-libre.html
---
<file_sep>---
migrated: node/993
layout: post
title: 'Python: merge lists'
created: 1219870243
author: david_villa
comments: true
category: script
tags:
- Python
---
A simple utility function to merge several lists in a single one, using the functional programming tools:

<!--break-->



<div>
{% highlight python %}
def merge(*input):
    return reduce(list.__add__, input, list())
{% endhighlight %}
</div>

Example:


<div>
{% highlight python %}
>>> a = [0, 1, 2]
>>> b = [2, 3, 4]
>>> c = [4, 5, 6]
>>> merge(a, b, c)
[0, 1, 2, 2, 3, 4, 4, 5, 6]
{% endhighlight %}
</div>

The same but removing duplicates:


<div>
{% highlight python %}
def merge_uniq(*input):
    return list(reduce(set.union, input, set()))
{% endhighlight %}
</div>

The same but removing duplicates later:


<div>
{% highlight python %}
def merge_uniq(*input):
    return list(set(merge(input)))
{% endhighlight %}
</div>


Other (easier) ways to achieve the same?
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2007-03-15/prueba-de-logo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-22/obtener-permisos-de-root-en-el-htc-magic-g2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2008-03-28/espaguetis-ajo-aceite-y-guindilla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-09-14/python-scapy_1-1-1-3-en-debian-unstable.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-14/enviar-correo-no-ascii-desde-un-programa-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-09-08/sub-repositorios-en-mercurial-con-forest.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-08-04/atmel-y-el-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-01-25/acelerar-velocidad-del-emulador-de-android.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-04/sudoers-o-cmo-evitar-que-sudo-te-pida-contrasea.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-21/propietarios-de-ideas-nos-toman-el-pelo.html
---
<file_sep>---
layout: post
title: "Plugins en Python"
author: magmax
category: recipe
tags: python
lang: es
---

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](http://magmax.org/blog/yapsy-un-sistema-de-plugins-pythonico).

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](<http://magmax.org/blog/plugins-en-python/>)**.

<!--break-->

Qué voy a hacer
---------------

Básicamente, vamos a hacer una pequeña aplicación y dos plugins.
Dependiendo de una opción se usará uno u otro.

Estructura:

```
.
├── app
│   └── app.py
├── plugin1
│   ├── plugin1
│   │   └── __init__.py
│   └── setup.py
└── plugin2
    ├── plugin2
    │   └── __init__.py
    └── setup.py
```

Plugin 1
--------

Vamos a comenzar escribiendo un plugin. Va a ser algo muy sencillo. Para
ello, creamos dos ficheros; el primero será el plugin propiamente dicho,
en el fichero `plugin1/plugin1/__init__.py`:

{% highlight python %}
def example():
   print("I'm plugin one")
{% endhighlight %}


Y aquí está el truco: en el archivo `plugin1/setup.py`:

{% highlight python %}
from setuptools import setup, find_packages

setup(
    name='plugin1',
    version='0.0.6',
    description="This is the plugin 1",
    packages=find_packages('.'),
    entry_points={
        'plugin_system': 'example = plugin1:example'
    },
)
{% endhighlight %}

Lo he reducido al mínimo. La parte importante es la de `entry_points`,
ya que estoy definiendo un *entry point* llamado `plugin_system` que,
básicamente, asigna a una variable la función anterior.

Con esto ya tenemos el plugin. Vamos a compilarlo (para ahorrar
problemas, lo compilaremos como `source`):

<div class="console">
{% highlight console %}
$ python setup.py sdist
{% endhighlight %}
</div>

lo que generará el archivo `dist/plugin1-0.0.6.tar.gz`. La versión 0.0.6
es porque 0.0.1 era muy sosa XD

Aplicación
----------

Vamos ahora con la aplicación principal (`app/app.py`):

{% highlight python %}
import argparse
import pkg_resources

def main():
    parser = argparse.ArgumentParser(description='Loads a plugin')
    parser.add_argument('action', choices=['run', 'list'],
                        help='action to be performed')
    parser.add_argument('-p', '--plugin',
                        help='plugin to be loaded')
    args = parser.parse_args()

    if args.action == 'list':
        full_env = pkg_resources.Environment()
        dists, errors = pkg_resources.WorkingSet().find_plugins(full_env)
        for dist in dists:
            if 'plugin_system' in dist.get_entry_map():
                print('  %s (%s)' % (dist.project_name, dist.version))
    elif args.action == 'run':
        requirement = pkg_resources.Requirement(args.plugin)
        plugin = pkg_resources.WorkingSet().find(requirement)
        example = plugin.load_entry_point('plugin_system', 'example')
        example()

if __name__ == '__main__':
    main()
{% endhighlight %}


Como se puede observar, hago uso intensivo de `pkg_resources`. Podemos
probar a listar los plugins instalados:

<div class="console">
{% highlight console %}
$ python app/app.py list
$
{% endhighlight %}
</div>

Y no tendremos nada. Claro, falta instalar el plugin. Para ello,
simplemente usamos `pip`, pero me voy a crear un `virtualenv` para no
engorrinarme el sistema:

<div class="console">
{% highlight console %}
$ virtualenv venv
[...]
$ . venv/bin/activate
(venv) $ pip install plugin1/dist/plugin1-0.0.6.tar.gz
[...]
(venv) $ python app.py list
  plugin1 (0.0.6)
(venv) $
{% endhighlight %}
</div>


Mucho mejor. Ahora vamos a ejecutarlo:

<div class="console">
{% highlight console %}
(venv) $ python app.py run -p plugin1
I'm plugin one
(venv) $
{% endhighlight %}
</div>



Plugin2
-------

El lector avispado no tendrá problema en crearlo a partir del plugin1 :)
Es más, podéis crear todos los que queráis XD


Notas
-----

La gracia es que podemos tener más de un `entrypoint`, o agruparlos por
clave.

Con esto ya no necesito [Yapsy](http://yapsy.sourceforge.net/) ni
[PluginBase](http://pluginbase.pocoo.org/) ni ningún otro sistema
enrevesado.

Para más información, podéis leer [Dynamic Discovery of Services and
Plugins](http://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins).
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-05-29/proyecto-colaborais.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-01-03/creando-tneles-tcp-ip-port-forwarding-con-ssh-los-8-escenarios-posibles-usando-openssh.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-21/configuracion-wifi-de-la-uclm-en-ubuntu-5-10.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2008-03-23/transferencia-va-wifi-para-nintendo-ds-sends-3-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-11/intro-3k-de-crysol.html
---
<file_sep>---
migrated: node/578
layout: post
title: Avances en GNESIS 3.0
created: 1172149185
author: cleto
comments: true
category: new
tags:
- GNESIS
---
¡Hola a todos!

<!--break-->


GNESIS 3.0 cada vez está más cerca de su lanzamiento. Como últimas noticias acerca de su desarrollo decir que:
<ul>
<li>GNESIS 3.0 va a ser Live <b>persistente</b>. Por así decir, esto significa que GNESIS arranca de forma Live pero nos brinda la posibilidad de almacenar lo que hagamos y lo que instalemos de forma permanente. Por lo tanto, GNESIS está pensado para que lleves tu sistema operativo a cualquier parte con tu memoria USB o disco duro externo. Es la misma idea de Molinux Nómada pero mejor, ya que no sólo el <em>/home</em> es persistente.</li>
<li>Como ya sabeis, GNESIS 3.0 está basado en Debian (concretamente, del proyecto <a href="http://debian-live.alioth.debian.org/">Debian Live</a>). La rama es la <em>inestable</em>, por lo que GNESIS estará "a la última" de las aplicaciones y servicios de Debian.</li>
<li>Además, GNESIS dispone de un repositorio de documentación que incluirán transparencias y otros materiales para seguir las asignaturas. Si las transparencias de clase cambian, sólo tendrás que actualizar tu sistema para tener la documentación al día.</li>
<li>Se ha mejorado el tema de escritorio. En GNESIS 3.0 se ha cambiado de forma "radical" el tema que venía en las anteriores versiones. Gracias a Tobías, que está haciendo un trabajo magnífico, tendremos un entorno totalmente dibujado a mano.</li>
</ul>

Sin embargo, necesitamos saber qué echas en falta en una distribución como GNESIS (orientada a la ESI, es decir, a estudiantes de Informática). Deja un comentario con tu propuesta. 

Gracias por tu colaboración.
<file_sep>---
migrated: node/665
layout: post
title: "¿se puede hacer dinero con el software libre?"
created: 1177937405
author: aledelgal
comments: true
category: opinion
---
Purulando por internet he encontrado un <a href="http://freetrans.blogspot.com/2007/04/se-puede-hacer-dinero-con-el-open.html">artículo</a> en el que se habla sobre este tema. Me pareció curioso, jeje.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-19/primeros-pasos-con-mysql.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-05/gnu-linux-y-nuestra-amada-psp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-11-07/page-speed.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-01-16/jornada-tcnica-molinux-en-la-esi-de-ciudad-real.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-21/programacin-de-la-psp-intros-multimedia.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-01-25/microsoft-aprieta-el-culo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2008-08-11/microsincity.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-04-19/soy-un-albail.html
---
<file_sep>---
migrated: node/1475
layout: post
title: Campaña para la candidatura de la Comunidad del Software Libre a los Premios
  Príncipe de Asturias
created: 1298237730
author: cleto
comments: true
category: new
tags:
- proselitism
---
La noticia completa en: <a href="http://www.publico.es/ciencias/361752/un-principe-para-el-software-libre">http://www.publico.es/ciencias/361752/un-principe-para-el-software-libre</a>

<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-21/dibujemos-matrices-fcilmente-con-latex.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-12-16/ha-salido-molinux-2-0.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-15/zeroc-ice-recogiendo-estadsticas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-23/compartir-ficheros-con-nfs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-26/zeroc-icegrid-gua-rpida-i.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-04/problemillas-con-xorg.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-11-03/propuesta-crysol-en-podcast.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2010-11-16/jarabe-de-limn-con-miel.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-15/estamos-en-obras.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-28/estadsticas-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-01-13/bridges-y-filtrado-de-protocolos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-12/configurar-parchear-cacharrear-y-compilar-un-linux-fcilmente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-17/introduccin-al-proceso-software-personal-humphrey.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-05-29/a-qu-huele-el-cdigo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-11-24/mapnik-visualizador-gis-para-python-y-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-11-16/troll-el-mafioso.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-05-15/mercurial-por-favor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2010-01-04/escaneando-a-pdf-con-python-y-sane.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-03-26/arco-devel-toggle-split.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-11/zeroc-ice-tareas-peridicas-en-un-servidor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-11/creacin-de-paquetes-debian-binarios.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-03/el-ceslcam-presenta-nuevos-cursos-de-openoffice-en-su-plataforma-e-learning.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-02-18/crysol-gnu-install-party-v3-2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-05-09/felicidades-david.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-02/configura-el-termmetro-de-tu-pc-con-lm-sensors.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2009-12-04/modificacion-de-iso-ubunutu-910.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-10-13/mini-tutorial-de-oo-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2008-11-07/mermelada.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2009-10-11/qu-se-puede-hacer-en-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-05/dlxview-un-emulador-para-arquitecturas-dlx.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-15/subversion-server-side-scripting-hooks.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-02-08/hook-mercurial-para-integracin-con-hudson.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-09-24/iv-concurso-universitario-de-software-libre-de-castilla-la-mancha.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-28/recordar-fechas-y-cumpleaos-con-birthday.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-02-01/denunciar-al-estado-espaol-por-el-monopolio-de-las-entidades-de-gestin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-24/gnesis-2-0-rc1-disponible-para-descarga.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-06-29/los-titulados-espaoles-son-los-que-menos-cobran-de-europa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-20/gnu-linux-y-nintendo-ds.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-04-11/nueva-versin-de-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-10-26/asyncronous-spy-assertions-with-python-doublex.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-18/videolan-streaming.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2008-03-07/dotbf-necesita-tu-ayuda.html
---
<file_sep>---
migrated: node/383
layout: post
title: Preguntas que cambiarán el mundo.
created: 1156337594
author: magmax
comments: true
category: tale
---
<blockquote>
Esiste una serie de preguntas existenciales que cambiarán el mundo. Tras las ya conocidas "¿quienes somos?", "¿de dónde venimos?" y "¿a dónde vamos?" nos queda la de "¿hasta dónde llega la estupidez humana?" o, simplemente, "¿Cómo de gracioso puede llegar a ser el desconocimiento?". Pues bien... Centrémonos en la última pregunta y abordémosla con humor. Se ruega no poner las fuentes, por si se sienten ofendidas y que, si en algún momento el aludido llegar a leer esto, que se lo tomen con cachondeo y buen humor :-D
</blockquote>

<!--break-->



<ul>
<li> Y eso de Linux... ¿Es un programa para Windows? (un niño de menos de 15 años)</li>
<li> Sí, sí, pero... ¿Cuánto ocupa el Linux en mi Windows? (el mismo niño de antes)</li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-10-02/infoglobal-presentacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-04-04/the-poors-man-dropbox-thing.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-06-08/comprar-billete-de-tren-renfe-eligiendo-asiento-con-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-07-16/foxg20.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2009-05-10/software-garantizado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-01-30/conectar-remotamente-a-una-cmara-axis-211w-mediante-opencv-en-ubuntu-9-04.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-07/sistema-hbrido-paquetes-de-distintas-releases-con-apt.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-18/cambiar-la-direccin-mac-de-una-tarjeta-de-red.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-19/linuxalbacete-organiza-las-ii-jornadas-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-14/lego-mindstorms-nxt-programar-con-nxc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-23/marcar-y-clasificar-trfico-con-iptables-y-tc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2009-10-25/barrer-la-escoria-en-la-red.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-06-25/compartir-ficheros-con-samba-cifs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-24/kolofonium-activando-ssh-en-la-fonera.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-09-23/acabo-de-registrarme-en-el-portal.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2006-04-10/script-para-escuchar-emisoras-de-radio-por-internet.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-05/firefox-y-flash.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-01-04/kans.html
---
<file_sep>---
migrated: node/798
layout: post
title: 'ZeroC IceBox: Creación de un servicio'
created: 1194003900
author: cleto
comments: true
category: recipe
tags:
- networking
- Ice
- Arco
---
<blockquote>La siguiente receta explica como crear un servicio para IceBox. El ejemplo está hecho en C++, sin embargo es aplicable para los lenguajes soportados por ZeroC-Ice. Sólo es un leve cambio de sintaxis... :-P</blockquote>

<!--break-->



<h2>Introducción</h2>
IceBox es un servicio de Ice que permite tener control sobre un conjunto de servicios en ejecución. La necesidad de esta característica depende de la aplicación pero es útil cuando queremos tener varios servicios ejecutándose en la misma máquina.
Existe una clase llamada IceBox::Service. Esta clase tiene, entre otros muchos, los siguientes métodos:
<ul>
<li><b>start</b>: código que se ejecutará al iniciarse el servicio.</li>
<li><b>stop</b>: código que se ejecutará al pararse el servicio.</li>
</ul>

<h2>Servicio IceBox "Hola Mundo"</h2>
Primeramente, tenemos que tener nuestro interfaz hello.ice:
<pre>module UCLM {
  interface Hello {
        void puts(string str);
        void shutdown();
  };
};</pre>
... y su implementación correspondiente (helloI.cpp):
<pre>#include < Ice/Ice.h >
#include < helloI.h >

/*                                                                                                                           
 * Este fichero fue generado en primera instancia mediante:                                                                  
 *                                                                                                                           
 * $ slice2cpp --impl hello.ice                                                                                              
 *                                                                                                                           
 * y posteriormente modificado                                                                                               
 */

using namespace std;

void
UCLM::HelloI::puts(const ::std::string& str,
                   const Ice::Current& current){
  cout << "SERVER: Se recibirá el valor: " << str << endl;
}

void
UCLM::HelloI::shutdown(const Ice::Current& c){
    cout << "Shutting down..." << endl;
    c.adapter->getCommunicator()->shutdown();
}</pre>

Una vez creados ambos componentes, ya puedes empezar con IceBox::Service. Primero, hay que especificar la clase del servicio que vayas a implementar. Por ejemplo, el contenido del archivo HelloService.h  sería:
<pre>#ifndef HELLO_SERVICE_I_H
#define HELLO_SERVICE_I_H

#include < IceBox/IceBox.h >

#ifndef HELLO_API
#   define HELLO_API ICE_DECLSPEC_EXPORT
#endif

class HELLO_API HelloService : public ::IceBox::Service{
 public:
  virtual void start(const ::std::string&,
                       const ::Ice::CommunicatorPtr&,
                       const ::Ice::StringSeq&);
  virtual void stop();

 private:
  ::Ice::ObjectAdapterPtr _adapter;
};

#endif</pre>
Y la implementación:
<pre>#include "helloI.h"
#include "HelloService.h"
using namespace std;

extern "C"{                                                                                                                           
   HELLO_API ::IceBox::Service*
   create(::Ice::CommunicatorPtr communicator){
      return new HelloService;
   }
}

void
HelloService::start(const string& name,
             const ::Ice::CommunicatorPtr& communicator,
             const ::Ice::StringSeq& args){

   _adapter = communicator->createObjectAdapter(name);
   ::Ice::ObjectPtr object = new UCLM::HelloI;
   _adapter->add(object,communicator->stringToIdentity("ServiceHola"));
   _adapter->activate();

   cout << "** Activación del Servicio." << endl;
   cout << object << endl;
}

void
HelloService::stop(){
   _adapter->deactivate();
   cout << "** Desactivación del Servicio" << endl;
}</pre>

Comentarios respecto al código anterior:
<ul><li>La primera parte de código se debe a cómo está implementado IceBox. Cuando IceBox llame a create, se debe devolver un objeto del servicio creado.</li>
<li>El método <b>start</b> tiene los siguientes argumentos:</li>
<ul><li><em>name</em>: nombre del servicio. Muy útil para recoger propiedades de tu servicio de un fichero de configuración ;-).</li>
<li><em>communicator</em>: el comunicador asociado.</li>
<li><em>args</em>: los parámetros pasados a tu servicio en formato <em>StringSeq</em>.</li></ul>
<li><b>stop</b> únicamente desactiva el adaptador de objetos.</li></ul>
Los dos métodos implementados son los únicos necesarios e imprescindibles para crear un servicio de IceBox. Es recomendable, sin embargo, especificar un método destructor de clase.
<h2>Compilación e instalación</h2>
El objetivo de la compilación no es un ejecutable (ya te habrás dado cuenta de que no tiene un main por ningún sitio). Por ello, es necesario utilizar las opciones de compilación -lIceBox (para enlazar con la librería de IceBox) y la opción -shared (para crear el archivo como una librería compartida).

Por convenio, el archivo de salida de la compilación debe llamarse lib"servicio".so. En nuestro caso, <em>libHelloService.so</em>.

Para que IceBox pueda linkar en tiempo de ejecución el servicio de "Hola Mundo" tienes varias alternativas:
<ul>
<li>Crear/Modificar la variable de entorno LD_LIBRARY_PATH.</li>
<li>Copiar el archivo en /usr/lib (más guarrete :-P).</li>
</ul>
<h2>Configuración y arranque de IceBox</h2>
Una vez que ya tengas la librería compartida (servicio de IceBox) creada y todo accesible, tienes que configurar el servicio de IceBox (fichero icebox.config):
<pre>IceBox.ServiceManager.Endpoints=tcp -p 10000
IceBox.UseSharedCommunicator.HelloService=1
IceBox.Service.HelloService=HelloService:create 
HelloService.Proxy=ServiceHola:tcp -p 9999
HelloService.Endpoints=tcp -p 9999</pre>
Finalmente, ejecutamos nuestro servicio con Icebox mediante el comando:

<div class="console">
{% highlight console %}
$ icebox --Ice.Config=icebox.config
{% endhighlight %}
</div>
<h2>Referencias</h2>
<ul>
<li>Manual de ZeroC-Ice (disponible con apt-get install zeroc-ice-manual o bien con aptitude install --please-i-only-want-a-manual zeroc-ice-manual :-P).</li>
<li><a href="#">Receta de librerías dinámicas</a>.</li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-01-27/el-efecto-2038.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2014-03-06/arrancar-grub-en-un-equipo-con-uefi.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-03-31/da-del-documento-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-10-21/servidor-de-rdp-o-algo-parecido-para-gnu-linux.html
---
<file_sep>---
migrated: node/1397
layout: post
title: Quinto aniversario
created: 1284043522
author: CRySoL
comments: true
category: event
---
Tal día como hoy, pero hace ya 5 años, empezaba a funcionar la web de CRySoL (no me atrevo a llamar web a lo que había antes). 

En este tiempo "la comunidad" de CRySoL ha sufrido sus altibajos, pero a pesar de todo y gracias al esfuerzo de unos pocos (menos de lo que nos gustaría) seguimos aquí, al pie del cañon. Prueba de ello son los millones de visitas (que no contamos), los más de 1000 posts públicos y 498 recetas (hubiera estado bien llegar a las 500 :-P).


<!--break-->


Como admin (o uno de ellos) me gustaría agradecer personalmente (de hecho lo haré :-)) su colaboración e interés a todos ellos: magmax, int-0, javieralso, cleto, oscarah, fsancho, lk2, nacho, paco, toledanus, morcy y a otros tantos que también han contribuido, principalmente en forma de recetas.

Felicidades, y ánimo a todos para mantener vivo este grupúsculo de usuarios de software libre llamado CRySoL.

PD: Aunque suene mal, debería hablarlo con una cañas, no?
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-08-02/referencia-rpida-de-lvm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-06/alternativas-a-parse_launch.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-23/soporte-para-at90usb1287-y-otros-avr-nuevos-con-gcc.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-26/es-la-programacin-un-arte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-04-20/openoffice-writer-gana-batalla-a-microsoft-word.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-01-15/ii-curso-online-de-java-ceslcam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2007-03-05/bsqueda-recursiva-con-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-05-14/pruebas-unitarias-c-con-el-plugin-cxxtest-de-atheist.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-02-08/el-presidente-de-telefnica-quiere-cobrar-por-el-trabajo-de-los-dems.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-10-24/gracias-desde-muy-lejos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2009-09-01/arreglar-la-gua-docente-2009-2010.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-17/cairo-using-a-svg-as-a-shape-or-cairo-groups.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2008-12-12/copyright-amazing-adventures.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-23/ubuntu-menos-tonteras-y-ms-seriedad-por-favor.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-06-06/defectuoso-por-diseo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-26/borrado-a-conciencia-de-ficheros-y-particiones-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-06-23/la-uclm-llega-a-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2011-01-12/si-los-ingenieros-de-tu-empresa-son-unos-intiles-contrata-buenos-abogados.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-09-26/instalacin-local-de-mambo-joomla-bajo-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-17/edicin-de-video-con-gpl-s-lives.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-01-10/papanatas-del-software-propietario.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-29/dijexcr-gnu-linux-para-la-pyme.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2006-01-17/el-reto-de-la-semana-2-edicin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-29/usuario-de-evolution-harto-de-spam.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-07-08/bacula-comandos-de-bajo-nivel.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-09/patrones-de-diseo-en-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-04-14/recordmydesktop-drag-and-drop.html
---
<file_sep>#!/bin/bash --
# -*- mode:shell-script; coding:utf-8; tab-width:4 -*-

ruby -rubygems -e 'require "/home/vagrant/drupal-import/lib/jekyll/jekyll-import/drupal6"; JekyllImport::Drupal6.process("drupal", "root", "")'
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-10-23/ampliado-el-plazo-de-inscripcin-en-el-concurso-univ-de-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-03-30/no-comprar-computadoras-hp.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-13/imprimir-en-una-winprinter-compartida-por-un-ms-windows.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-07/arrancar-como-root-sin-conocer-la-clave-usando-grub.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-04/el-gestor-de-arranque-grub.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2006-10-24/creacin-de-un-loap.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-10/latex-creacin-de-tablas-de-forma-sencilla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-29/la-virgulilla-est-muerta.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-26/formatos-simples-xml-yaml-json-properties-e-inis.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-12-05/new-debian-developer.html
---
<file_sep>---
migrated: node/995
layout: post
title: Utilizar un servidor FTP remoto como backup
created: 1220633993
author: cleto
comments: true
category: recipe
tags:
- shell
- security
---
<blockquote>Si tenemos un servicio de hosting remoto con FTP, es probable que nos interese subir archivos de bakcup. Esta receta explica como hacerlo con un breve script de BASH.</blockquote>

<!--break-->



<h2>El script</h2>
El ejemplo propuesto es una tarea demasiado sencilla (copia de un fichero de texto al ftp remoto). Sin embargo, puede servite como base para realizar tareas más complejas.

Como vamos a hacer labores administrativas es recomendable usar <b>root</b> para crear el script. Además, el fichero contiene información privada (como el usuario y la contraseña del FTP), por lo que es necesario que tenga los permisos adecuados y que otros usuarios no autorizados NO puedan ver tal información.


<div class="console">
{% highlight console %}

#!/bin/bash
HOST="ftp.ejemplo.com"
USER="ejemplo"
PASSWD="<PASSWORD>"
SRC="/home/user"
#Directorio local de las copias de seguridad
BACKUP="/home/user/backup"
#Directorio remoto donde irán las copias de seguridad
REMOTE="/backup"

cd $BAKCUP

#Copia del archivo y renombrado con la fecha
cp $SRC/mi_archivo_importante.txt mi_archivo_importante.txt.$(date +%Y%m%d)
echo -e "---- BACKUP $(date +%Y%m%d) ----\n" 

ftp -n -v $HOST << EOT
binary
user $USER $PASSWD
prompt

cd $REMOTE                  
mput mi_archivo_importante.txt.$(date +%Y%m%d)
bye
bye
EOT
{% endhighlight %}
</div>

Guarda el archivo con el nombre "backup.sh" en el directorio /sbin/ y ponles los permisos correspondientes:

<div class="console">
{% highlight console %}
# chmod 700 /sbin/backup.sh
{% endhighlight %}
</div>

Ahora, solo falta que actualicemos el cron para que esta tarea se ejecute a una determinada fecha y hora. Por ejemplo, vamos a hacer que se lance todos los días a las 12:00 H. De paso, vamos a decirle que la salida la deje en un archivo de log (/var/log/backup.log) para que podamos echarle un vistazo al archivo y saber que todo va bien.

Edita, pues, el archivo (/etc/crontab) con tu editor favorito, o sea:

<div class="console">
{% highlight console %}
# emacs /etc/crontab
{% endhighlight %}
</div>
Y añades la siguiente línea:
<pre>00 12    * * *   root    /sbin/backup.sh >> /home/user/backup.log </pre>

<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-25/programacin-de-microcontroladores-pic-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-29/100mbps-100mbps-200mbps-port-trunking-a-k-a-bonding-ports.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-09/hacking-serio-bsico-introduccin-a-los-shellcodes-i.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-12-21/babel-cuadro-o-tabla.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-12-16/restart-your-system.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-08/gua-rpida-para-creacin-de-paquetes-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-03/cherokee-y-https.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-11-02/crysol-install-party.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-13/adios-al-spam-con-spamassassin-y-sylpheed-claws.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-03-09/vota-microsoft-la-realidad-patente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-11-23/ser-linuxero-est-de-moda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-12/alsa-audio-loopbacks-o-cmo-capturar-el-audio-que-reproduzco.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-02/advertencia-desde-el-futuro.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-12/tneles-canales-y-puertos-con-ssh.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-06-30/configurar-glacier2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2008-09-06/micro-reto-de-la-semana.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-11-12/enviando-correo-a-golpe-de-protocolo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-28/linux-es-el-cncer-de-amrica.html
---
<file_sep>---
migrated: node/166
layout: post
title: "¿Linux en un smartphone?"
created: 1135623014
author: aledelgal
comments: true
category: tale
---
Hola, tenía yo una curiosidad:
   <NAME> me ha traído un nokia de estos que lleva mp3 y todo, en concreto el 6630. Lleva el SO Symbian 8.0 (o el 7.0, no sé ahora mismo).
¿Se le podría poner Linux o es imposible?. Era sólo por saberlo, porque creo que hasta te quitan la garantía si haces eso.
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-21/configuracin-del-chipset-intel-82801h-con-alsa.html
---
<file_sep>---
migrated: node/172
layout: post
title: 'Sistema Híbrido: Paquetes de distintas "releases" con apt'
created: 1136630967
author: magmax
comments: true
category: recipe
---
<blockquote>
¿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.
</blockquote>


<h2>Asunciones</h2>

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.

<h2>Configurar la "release" por defecto</h2>

Editáis el fichero (si no existe lo creáis) <tt>/etc/apt/apt.conf</tt> y añadís la línea:

<pre>APT::Default-Release "unstable";</pre>


<h2>Configurar las otras distros</h2>

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 <tt>/etc/apt/preferences</tt>:

<pre>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
</pre>

<b>NOTA:</b> No, aún no lo he probado.

Debo advertir que las prioridades son bastante curiosas y hay que tener cuidadín:

<ul>
<li><b>&lt; 0</b>: La versión no se instalará jamás.
</li>

<li><b>0 - 100</b>: El paquete no se reemplazará por una versión superior. Los paquetes instalados tienen prioridad 100.
</li>

<li><b>101-500</b>: La versión se instala si es más moderna que la existente y no existe ningún ejemplar en la versión objetivo.
</li>

<li><b>501-1000</b>: La versión se instala aunque no esté en la distro por defecto.
</li>

<li><b>1000:</b> La versión se instalará a toda costa, incluso si es inferior a la actual.
</li>
</ul>

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.

<h2>Editar sources.list</h2>

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").

<h2>Cómo usarlo</h2>

Muy fácil: Para los paquetes de la distribución por defecto, como siempre:


<div class="console">
{% highlight console %}
apt-get install lo-que-sea
{% endhighlight %}
</div>

Para el resto, también fácil (donde pongo "experimental" poner el nombre de la distro):


<div class="console">
{% highlight console %}
apt-get install -t experimental lo-que-sea
{% endhighlight %}
</div>

Todos ellos se "updatean" a la vez por el método habitual.

<h2>Otras referencias</h2>

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 <a href="http://www.ubuntu-es.org/node/595">Jugando con APT</a>, que explica cómo hacer lo mismo para Ubuntu.

También están interesantes el <a href="http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.es.html">Manual de APT</a> y un documentillo que he encontrado titulado <a href="http://www.argon.org/~roderick/apt-pinning.html">Using APT with more than 2 sources</a>, este último en inglés, claro.

<ul>
<li><a href="http://www.esdebian.org/articulos/24672/apt-pinning">http://www.esdebian.org/articulos/24672/apt-pinning</a></li>
</ul>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-06-18/python-y-gtk3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-26/crear-deb-a-partir-de-tar-gz.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-05-15/installing-omnet-on-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-21/openoffice-org-scripting.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-06-05/gnu-emacs-cambiar-fcilmente-entre-el-c-y-el-h.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-11/redimensionar-una-particin-con-gparted-live-cd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-11/gp2x-primer-contacto.html
---
<file_sep>---
migrated: node/739
layout: post
title: Instalar GNU/Linux+Cell SDK 2.1 en PlayStation 3
created: 1184422714
author: KO_mOd_O
comments: true
category: recipe
---
<blockquote class="head"> 
Esta receta tiene como objetivo proporcionar una guía para la instalación de una distribución GNU/Linux junto con el SDK para el procesador Cell en PlayStation 3.
</blockquote>

<h2>Introducción</h2>

PlayStation 3 tiene como corazón el procesador Cell. Esta revolución tecnológica fue desarrollada inicialmente para PlayStation 3 por Sony Computer Entertainment, Toshiba e IBM. Sin embargo, el verdadero objetivo de este proyecto es la obtención de un procesador con una gran potencia de cálculo a un bajo coste.

<h2>Arquitectura del Cell</h2>

Cell es una arquitectura orientada a la computación distribuida de alto rendimiento. De acuerdo con IBM, la potencia ofrecida por este procesador es de un orden de magnitud mayor que la ofrecida por los procesadores actuales. En comparación con las unidades de procesamiento gráfico (GPUs), Cell supone una importante ventaja al tratarse de una herramienta de propósito general que se puede utilizar para una gran variedad de tareas.

Una de las principales características de la arquitectura Cell es el escalado a nivel de procesador. Sin embargo, un único chip proporciona una gran cantidad de cálculo por sí mismo (256 GFLOPS a 4 GHz).

La arquitectura está formada por los siguientes elementos:

<ul>
<li>1 PPE (Power Processor Element).</li>
<li>8 SPEs (Synergistic Processor Elements).</li>
<li>EIB (bus de interconexión).</li>
<li>DMAC (controlador de acceso a memoria).</li>
<li>2 Rambus XDR memory controllers (controladores de memoria).</li>
<li>Rambus FlexIO interface (interfaz de entrada/salida).</li>
</ul>

El corazón del procesador es el PPE, un microprocesador convencional cuya principal tarea (aunque puede utilizarse con otros propósitos) es la de distribuir el trabajo entre los SPEs, encargados de efectuar la mayor parte de los cálculos de una aplicación. A pesar de que puede funcionar a una velocidad mayor, el chip Cell utilizado en PlayStation 3 corre a 3,2 GHz y tiene 7 SPEs disponibles.

El PPE es un procesador de 64 bits con una <em>Power Architecture</em>. Este tipo de procesador no se utiliza en los computadores personales y es capaz de ejecutar binarios de <em>POWER</em> y <em>PowerPC</em>.

El SPE se puede considerar como un procesador vectorial independiente de 128 bits. Cada SPE es capaz de ejecutar 4 operaciones de 32 bits por ciclo. Para obtener ventajas en el desarrollo de aplicaciones en el Cell, los programas necesitan ser <em>vectorizados</em>.

Existen muchas más decisiones de diseño en la arquitectura Cell que la hacen muy diferente a las arquitecturas convencionales utilizadas en los computadores personales, proporcionando una revolución y no un simple paso más en la evolución [Blachford_Cell_v2].

<h2>Ingredientes</h2>

<ul>
<li>1 PlayStation 3 con una versión del <em>firmware</em> igual o superior a la 1.6.</li>
<li>1 CD o DVD vírgenes para grabar el sistema operativo a instalar.</li>
<li>1 CD vírgen.</li>
<li>1 <em>pendrive</em>.</li>
<li>1 teclado y un ratón con conexión USB.</li>
<li>1 conexión cableada a Internet.</li>
</ul>

Actualmente, existen distintas distribuciones que pueden instalarse en PlayStation3, como por ejemplo <a href="http://www.terrasoftsolutions.com/products/ydl">Yellow Dog Linux</a>, <a href="http://www.helios.de/support/ps3_install.phtml">Helios Linux</a>, <a href="http://www.ps3coderz.com/index.php?option=com_content&task=view&id=73&Itemid=31">Fedora Core 6</a>, <a href="https://help.ubuntu.com/community/PlayStation_3">Ubuntu</a>, <a href="http://ps3wiki.qj.net/index.php/Gentoo_Howto">Gentoo</a>, o <a href="http://www.keshi.org/moin/moin.cgi/PS3/Debian">Debian</a>, entre otras.

La distribución en cuestión a instalar se deja a gusto del lector, pero es imprescindible descargar una ISO para una arquitectura PowerPC. En mi caso, elegí la distribución <a href="http://rhold.fedoraproject.org/Download/mirrors.html">Fedora Core 6</a>, y descargué una ISO para grabar en un DVD. También es necesario obtener la ISO relativa al <a href="ftp://ftp.uk.linux.org/pub/linux/Sony-PS3/">Linux add-on CD</a>, descargando el archivo CELL-Linux-CL-20061110-ADDON.iso. Por último la herramienta más importante, el entorno de desarrollo para el Cell: <a href="http://www.alphaworks.ibm.com/topics/cell?open&S_TACT=105AGX16&S_CMP=DWPA">SDK 2.1</a>.

<h2>El cargador de arranque</h2>

El siguiente paso es hacerse con un gestor de arranque. La opción más directa es obtenerlo desde el Linux add-on CD. Éste se encuentra en el directorio kboot y su nombre es otheros.bld.

En el <em>pendrive</em> hay que crear un directorio llamado PS3, y dentro de éste otro llamado otheros, en el cual hay que copiar el cargador de arranque (otheros.bld)

Llegados a este punto, se ha de disponer de los siguientes elementos:

<ul>
<li>1 CD o DVD con la distribución a instalar.</li>
<li>1 Linux add-on CD.</li>
<li>1 dispositivo de arranque (<em>pendrive</em>) con el cargador de arranque.</li>
<li>1 CD con la ISO del SDK.</li>
<li>1 PlayStation 3 con una versión del firmware igual o superior a la 1.6 y una conexión cableada a Internet.</li>
</ul>

<h2>Instalación</h2>

En este momento, es importante resaltar que es necesario formatear el disco duro de PlayStation 3, por lo que se recomienda hacer una copia de seguridad. Sin embargo, los ajustes personales no se perderán.

Para formatear al sistema hay que acceder al menú de PlayStation 3 Ajustes -> Ajustes del sistema -> Herramienta de formateo -> Formatear disco duro. La herramienta de particionado ofrece distintas opciones. En mi caso, me dio la opción de hacer dos particiones: una de 10 GB y otra de 50 GB. Yo elegí asignar 10 GB al sistema operativo a instalar y 50 GB al sistema operativo de PlayStation 3 (GameOS).

Para instalar el gestor de arranque, es necesario conectar el <em>pendrive</em> y acceder al menú Ajustes -> Ajustes del sistema -> Instalar otro sistema operativo. El propio sistema localizará el archivo otheros.bld.

Una vez seguidas estas indicaciones, el siguiente paso es cambiar el sistema operativo por defecto y reiniciar. Para ello, se ha de acceder al menú Ajustes -> Ajustes del sistema -> Sistema predeterminado, y elegir la opción <em>Otro sistema operativo</em>. En este punto, el proceso de instalación diverge en función del sistema operativo elegido. En caso de instalar Fedora Core 6, y después de la aparición de la orden kboot, el comando a introducir es <em>install-fc sda</em>. Posteriormente, el sistema pide el DVD de instalación y, eventualmente, el Linux add-on CD para la instalación del sistema operativo. Una vez instalado el sistema operativo, el comando <em>boot-game-os</em> permite arrancar PlayStation 3 con el sistema operativo de los juegos.

En caso de utilizar una televisión con certificación <em>HD Ready</em> o <em>FullHD</em> se puede llevar a cabo el proceso de instalación a través de la televisión <em>sin dañarnos la vista</em>. Sin embargo, si se utiliza una televisión con definición estándar, resulta muy aconsejable continuar con el proceso de instalación de manera remota a través de ssh (en caso de seguir el proceso desde la TV, reducir el contraste puede ayudar).

La instalación es una instalación tradicional, aunque algo diferente en lo relativo al ajuste del modo de vídeo. En el caso de <a href="http://www.ps3coderz.com/index.php?option=com_content&task=view&id=73&Itemid=31">Fedora Core 6</a>, el comando ps3videomode permite ajustar la resolución y el escaneado de la salida de vídeo para un ajuste óptimo en la televisión (o monitor).

<h2>Instalación del SDK 2.1</h2>

En este paso se asume la instalación de todas aquellas herramientas necesarias para la instalación/construcción de las bibliotecas de desarrollo del SDK 2.1. En caso de instalar Fedora Core 6, se puede utilizar la herramienta yum para la instalación de todas estas herramientas [PS3_FedoraCore6]. El proceso es sencillo:


<div class="console">
{% highlight console %}
# cd path_to_iso_sdk_directory
# mkdir -p /mnt/cellsdk
# mount -o loop SDK21.iso /mnt/cellsdk
# cd /mnt/cellsdk/software

{% endhighlight %}
</div>

La instalación del SDK se puede efectuar con o sin simulador:


<div class="console">
{% highlight console %}
# ./cellsdk install [--nosim]

{% endhighlight %}
</div>

Este proceso implica la descarga de ciertos archivos. En caso de que haya algún problema en esta descarga, la solución consiste en volver a ejecutar este último comando.

Las bibliotecas de desarrollo no vienen como archivos ejecutables, por lo que es necesario generarlos a partir del compilador xlc o del compilador gcc (opción por defecto):


<div class="console">
{% highlight console %}
# cd /opt/ibm/cell-sdk/prototype
# ./cellsdk build --gcc

{% endhighlight %}
</div>

Este proceso involucra algo de tiempo. Una vez finalizado se desmontará la imagen:


<div class="console">
{% highlight console %}
# umount /mnt/cellsdk

{% endhighlight %}
</div>

<h2>¿Y ahora...?</h2>

En caso de adentrarse en el desarrollo de aplicaciones para el procesador Cell, es posible sentirse abrumado por la cantidad de documentación e información existente, además del cambio que supone el tratar con una arquitectura tan distinta con la que la mayoría no solemos trabajar. Una buena referencia es el portal <a href="http://www.ps3coderz.com">PS3coderz</a>, en el cual se indexa la documentación asociada al Cell en varias secciones.

<h2>Conclusiones</h2>

Si has llegado a este punto, tienes en tu poder un sistema GNU/Linux+Cell SDK 2.1.  El siguiente paso y el más importante, en caso de que te <em>pique el gusanillo</em>, consiste en que te familiarices con la arquitectura Cell y con sus herramientas y bibliotecas de desarrollo.

<h2>Referencias</h2>

[Blachford_Cell_v2] 
Análisis y explicación de la arquitectura Cell.
<a href="http://www.blachford.info/computer/Cell/Cell0_v2.html">http://www.blachford.info/computer/Cell/Cell0_v2.html</a>

[Cell_Developer's_Corner]
Rincón de desarrollo para el Cell.
<a href="http://www.power.org/resources/devcorner/cellcorner">http://www.power.org/resources/devcorner/cellcorner</a>

[PS3_Coderz]
Portal de desarrollo para el procesador Cell.
<a href="http://www.ps3coderz.com/">http://www.ps3coderz.com/</a>

[PS3_FedoraCore6]
Guía de instalación detallada de Fedora Core 6 en PlayStation 3.
<a href="http://www.ps3coderz.com/index.php?option=com_content&task=view&id=73&Itemid=31">http://www.ps3coderz.com/index.php?option=com_content&task=view&id=73&Itemid=31</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /challenge/2006-01-16/el-reto-de-la-semana-1-edicin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-30/alpine-consulta-tu-cuenta-de-correo-gmail-desde-la-consola-en-modo-texto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-10-01/encuentra-una-idea-y-participa-en-el-concurso-universitario-de-software-libre-de-c-lm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-03-19/creating-a-virtual-grid-with-libvirt-debian-preseeds-puppet-icegrid.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-16/entornos-chroot-con-cdebootstrap-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-10/simulacin-de-cdigo-c-para-avr.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-10-24/lo-bueno-del-capitalismo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-27/arreglar-gnome-terminal-que-no-muestra-tildes-ni-ees.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-11-20/nuevas-beryl-0-1-3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-07/ubuntu-8-04-en-airis-kira-300.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-04-08/fase-final-del-concurso-de-sl-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-12/comprar-un-porttil.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-27/patrn-singleton-en-python-como-metaclase.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2006-06-02/twisted-controlando-varios-equipos-con-synergy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-10-13/arco-devel-el-paquete.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-23/gladewrapper-o-cmo-hacer-una-aplicacin-gtk-con-python-en-7-lneas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-30/la-ensima-receta-de-iptables.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-06-14/configurar-dispositivos-android-para-desarrollo-bajo-gnu-linux.html
---
<file_sep>---
migrated: node/1558
layout: post
title: '"Reconciliación" Android y Linux '
created: 1325083965
author: RRC19189
comments: true
category: new
tags:
- android
---
El proximo kernel de android 3.3, incluirá ciertas modificaciones que fueron retiradas en otros kernel y que solo incorporaba un kernel especifico de la rama del 2.6 (2.6.33). Esta modificación nos permitirá arrancar un sistema operativo con núcleo Linux, sin necesidad de hacer ninguna modificación adicional.

<!--break-->


Noticia ampliada en Inglés: <a href="http://www.h-online.com/open/news/item/Android-drivers-to-be-included-in-Linux-3-3-kernel-1400996.html">http://www.h-online.com/open/news/item/Android-drivers-to-be-included-in-Linux-3-3-kernel-1400996.html</a>
Noticia ampliada en Español: <a href="http://www.xatakandroid.com/sistema-operativo/android-vuelve-al-codigo-oficial-de-linux">http://www.xatakandroid.com/sistema-operativo/android-vuelve-al-codigo-oficial-de-linux</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/ndiswrapper-tarjetas-wifi-no-soportadas-en-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-05/tes-emacs-con-pestaas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-31/compilacin-de-paquetes-debian-con-svn-buildpackage.html
---
<file_sep>---
migrated: node/78
layout: post
title: CRySoL install party
created: 1130950871
author: int-0
comments: true
category: new
---
Bueno... hace unos días se habló en CRySoL de realizar una "install party"... pero como viene siendo habitual si no hay nadie que diga: "va, lo hago yo" pues no se hace. Pues bien yo (<NAME>) y el siempre bien ponderado Cleto hemos decidido decir: "va, lo hacemos nosotros" y hemos empezado a preguntar por aquí y por allí a ver qué podemos y qué no podemos hacer.

Finalmente hemos llegado a la feliz idea de realizar una install party con talleres variados... es decir, pasaremos unas amenas horas instalando un sistema base tipo Debian/Ubuntu/Gnesis/MoLinux y después sacando parte del jugo a nuestros "hijos".

Todavía queda mucho por decir, pero lo mas inmediato es decidir que días os vienen mejor, para eso esta la encuesta... votad por favor!

En próximos días os contaremos como van los progresos... ok?

Ah! ya pediremos colaboraciones a ver si es verdad que todos los "podéis contar conmigo" eran de verdad o de boquilla... jejejeje...


<!--break-->


Taluego

-------------------------
init=/bin/bash to conquer the world!
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-06-06/omikey-cardman-5321-rfid-reader-en-debian.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-09/creacin-del-directorio-debian-con-dh_make-para-debianizar-tu-programa.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-01-27/visita-virtual-al-hospital-general-de-ciudad-real.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-10-16/cienes-y-cienes-de-cosas-como-dira-aquel.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-06-10/mster-en-tecnologas-de-la-informacin-y-las-comunicaciones-mtic.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2009-04-14/culpable-a-sabiendas-de-ser-inocente.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-28/en-nautilus-tambin-tenemos-abrir-terminal-aqu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-01-24/ebay-y-el-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-12-07/un-da-triste-para-los-usuarios-de-intel-airport-extreme-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-09-02/25-aniversario-del-proyecto-gnu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-10/el-diccionario-de-la-rae-siempre-a-mano.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-02-10/altavoces-bluetooth-en-gnome.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-27/generar-un-certificado-ssl-para-apache.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-11-26/instalando-hurd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-11-11/http-get-con-libcurl-en-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-09/haciendo-funcionar-la-airport-extreme-con-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-10-25/migracin-cutre-de-una-instalacin-a-un-disco-duro-nuevo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-04-20/molinux-nomada-una-molinux-en-tu-usb.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-21/sincroniza-tus-ficheros-con-unison.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-01/cdigo-fuente-y-esquemas-de-yago.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-10-14/instalacin-de-edonkey2000.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-12-17/building-skills.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-25/gua-rpida-de-cmake-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-04-01/llamadas-voip-desde-nds.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-07-13/instalar-driver-privativo-de-nvidia-con-kernel-linux-2-6-20.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-07-29/ingsoft-keep-it-simple-stupid-kiss.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-04-07/antiprogramacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-11-20/intentando-una-instalacin-decente-de-debian-en-el-asus-ux32vd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2011-12-10/ios-vs-android-el-coste-social-de-la-eficiencia-o-el-coste-tcnico-de-la-libertad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-03-22/integracin-continua-de-aplicaciones-python-con-hudson-jenkins.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-03-17/posible-cambio-de-nmero-en-las-versiones-de-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-23/latex-referencias-imprescindibles.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-12-06/arco-devel-auto-insert.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-11-04/latex-babel-enumitem.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-10-10/sql-inyection.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2012-04-08/consulta-sobre-los-raspberry.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-09-23/el-fin-del-la-paginacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-15/manipulacin-de-ficheros-pdf.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-03-19/manejo-bsico-de-seales-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-28/restringir-secuencias-controlalt-en-el-servidor-x.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-05-28/creacin-de-plugins-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-11-10/maneras-de-indentar.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-26/linux-en-un-smartphone.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-05-18/licencias-de-windows-y-macos-x.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-22/gnu-emacs-elegir-el-encoding.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-02/wifi-rt2500-de-ralink-en-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-07/sin-palabras-otra-vez-la-sgae.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-09-29/documentacin-oficial-de-scapy.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-07/gnu-linux-y-la-banda-ancha-mvil.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-02-15/el-nuevo-tema-de-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2010-12-14/cuntas-pedimos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-02-01/sobre-el-copyleft.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2010-06-15/la-comisaria-europea-de-agenda-digital-a-favor-del-software-libre-en-las-administraciones-pblicas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-06/streaming-multimedia-con-flumotion.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-01-29/a-todos-los-autores-de-recetas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-02-20/android-sdk-en-debian-64-bits.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-08/control-del-puerto-paralelo-con-ppdev.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-01/cv-de-la-aneca-en-sql-para-openoffice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-21/cmo-limpiar-tu-ordenador.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-08-01/reconocimiento-de-voz-en-windows-vista.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-11-11/devkitpro-23b-para-debian-ubuntu-molinux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-24/creacin-de-plugins-para-freevo.html
---
<file_sep>---
migrated: node/111
layout: post
title: Consulta sobre distro
created: 1132910483
author: Lk2
comments: true
---
Hola a todos.

<!--break-->


A horas vista de la Install Party (a la cuál no voy más que con el portátil y sin más sitio que el que me dejen en un rincón), me pregunto que hacer con el PC de mi casa ...

Es un amd64, y tengo instalado en él Ubuntu. A pesar de ciertos problemas de locales ya funciona de forma más o menos decente, pero aún así, la falta de paquetes en los repositorios de Ubuntu para amd64 es casi indignante (por no estar no está ni lame, por ejemplo).

Por ello hago esta consultilla: para cantidad de paquetes, ¿qué distro es mejor? ¿Debian o Ubuntu? Se que esto es casi un debate filosófico, pero quiero simplemente atender a la cantidad de programas y paquetes que podré acceder con uno y otro de manera lo más simple posible (si, soy vago). La respuesta supongo que se irá más por Debian, pero bueno, dentro de la elegida, ¿versión 386 o amd64? La verdad es que no es que importe mucho el tipo de distro, para mi lo importante es que primero funcionen las cosas, y luego, que funcionen de lujo, por lo que si para poder ver flash, instalar más programas y tener más repositorios debo inclinarme por una 386 (ya sea Ubuntu o  Debian) lo haré sin problema ...

Y bueno, sin más, que me gustaría conocer vuestra valiosa opinión :)
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-12/plugin-guifications-en-pidgin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-19/programando-una-mica2.html
---
<file_sep>---
layout: page
title: Users
group: navigation
js: [filter_by_url]
---

<table>
{% tablerow item in site.authors cols: 3 %}
  {% assign author = item[1] %}
<div class="user item" id="{{ item[0] }}">
  <h2>
    {% include custom/author_photo %}
    <span class="author-name">{{ author.name }}</span>
  </h2>

  <div class="author-details">
    <p>
      See <a href="/blogs.html#{{item[0]}}">{{author.name}}'s blog.</a>
    </p>
    <ul>
      	{% if author.twitter %}
	<li>twitter.com/ <a href="https://twitter.com/{{author.twitter}}">{{author.twitter}}</a></li>
	{% endif %}
	{% if author.github %}
	<li>github.com/ <a href="https://github.com/{{author.github}}">{{author.github}}</a></li>
	{% endif %}
	{% if author.bitbucket %}
	<li>bitbucket.com/ <a href="https://bitbucket.com/{{author.bitbucket}}">{{author.bitbucket}}</a></li>
	{% endif %}
    </ul>
  </div>
</div>
{% endtablerow %}
</table>
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2007-08-09/twitter-crysol.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-03-29/separacin-silbica-en-libreoffice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-09-01/sobre-frikis-en-general.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-07-21/crear-una-imagen-emdebian-para-tu-friendlyarm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2009-01-07/gimp-recortar-una-imagen-en-lnea-de-rdenes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-02-03/kit-de-desarrollo-completo-para-psp-actualizado.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-05/crear-sistemas-de-ficheros-xfs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-03-24/gestin-sencillita-de-tu-coleccin-de-pelculas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-06-07/pycurl-utilizando-autenticacin-y-cookies-desde-python.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-03-05/openoffice-org-la-suite-de-productividad-ofimtica-de-telefnica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-07-28/la-sdae-desarroll-el-mp3-cuando-los-modem-iban-a-9-600-voltios.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2005-11-06/guacamole-top.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-09-08/trucos-tiles-para-la-tabletpc-hp-compaq-tc1100.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-04-16/glib-io-channels-con-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-19/ayuda-con-instalacin-de-ubuntu-a-medias.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2008-12-04/ayuda-con-mquina-virtual-para-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-17/rs232-en-el-pic-uart-por-software.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /art/2009-05-27/quin-dijo-que-con-inkscape-no-se-poda.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2011-04-26/1-semana-de-obras-libres-del-13-al-19-de-mayo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-27/darwin-streaming-server-para-dispositivos-mviles.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-03-04/quieres-consultar-redcampus.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-12-13/merry-chrismas-and-a-happy-gnu-year.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-05-05/debian-live-personalizada-en-una-lnea.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-03-17/objetivos-de-la-web.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-06-25/gnu-emacs-puesta-a-punto.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-02-20/usar-la-librera-libxml2.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2010-03-26/cmake-instalar-un-paquete.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-07-12/ssh-en-el-chumby.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-12-24/averigua-tu-ip-externa-pblica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-07-19/gstreamer-python-tu-propio-reproductor-multimedia-en-minutos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-03-25/depurar-un-programa-c-c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-03-06/gestin-de-los-ups.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2013-07-02/pastel-de-chocolate.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-06-15/aviso-a-los-autores-de-recetas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2006-01-07/una-razn-ms-para-utilizar-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-17/divide-y-vencers.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-02-19/propuesta-proponiendo-actividades-2-parte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-10-24/gnu-windows-vs-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-01-29/desarrollo-de-aplicaciones-para-psp-slim-y-psp-fat-con-fw-actuales.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /event/2008-09-11/nueva-edicin-concurso-universitario-de-software-libre-de-clm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-05-22/fallo-de-pdflatex-en-debian-sid.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2010-07-14/ingsoft.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-06-02/crysol-org.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-01-22/instalar-debian-desde-red-con-pxe-nunca-fue-tan-fcil.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2006-10-25/macarrones-enfadados.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-05-10/soy-famoso.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-06-07/scanner-hp-scanjet-3200c.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2013-04-11/emacs-pills-compilation-feedback-with-colors.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /script/2008-08-27/python-merge-lists.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-10-13/crear-un-paquete-debian-con-scripts-de-inicio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-08-28/configuracin-de-mdem-usb-huawei-en-gnu-linux-huawei-linux.html
---
<file_sep>---
migrated: node/652
layout: post
title: El software es un producto?
created: 1177406038
author: darkgnu
comments: true
category: opinion
---
Rotundamente <b>SI</b>. Me explico:

<!--break-->


Cualquiera de nosotros puede acercarse al Eroski, y en la sección de informática encontrará un montón de cajas con CD's y DVD's llenos de programas privativos que cuestan un montón. Te compras alguno de ellos y... que obtienes? algunos dirían que un software... ¡mentira! lo que en realidad te has comprado es el <em>permiso de la compañía para usar ESE software</em>, esto es, una <em>licencia</em>. La caja con el CD viene <em>de regalo</em>. Cuántos programas privativos te los puedes bajar directamente de su web en versión <em>demo</em>? si pagas por una licencia (o la robas, esto es, keygen-erarla) ya obtienes el permiso para usarlo sin cartelitos y a "pleno rendimiento". ¿Qué significa esto? ¿el software es el producto? ¿o lo es la <em>licencia</em> de uso, el permiso de uso?.

Si yo me compro un cuaderno, todos sabemos que el producto es el cuaderno. Como tal yo me convierto en dueño de ese cuaderno y puedo hacer con él lo que quiera: regalarlo, romperlo, estudiarlo, dibujar en él, etc. En cambio si yo me comprase un permiso para dibujar en él... ¿que podría hacer? pues dibujar en el... y punto.

Ahora llegan los rojos estos del software libre y dicen: no no... el software debe ser libre (que no gratis). Pero bueno, estos tíos están locos! ¿y de qué viven?; pues fácil: de vender su software y ofrecer servicios sobre él. Con el modelo del software libre un programa se convierte en producto: la licencia es la misma para todo el software, tu eres el dueño y señor de ese producto y puedes hacer lo que te plazca con él. Una empresa podría crear un programa libre y venderlo; un comprador podría comprárselo y como se convierte en <em>dueño</em> del mismo, podría redistribuírlo, mejorarlo (la empresa te daría también su código fuente completo), estudiarlo... etc.

Pero todo esto da igual, a la gente le sigue pareciendo más normal la venta de licencias que la venta de software. Aún cuando las licencias sean abusivas; licencias como "puedes usar este software para lo que quieras excepto para..." (si yo me lo he comprado precisamente para eso!), "si usas esto no puedes hablar mal de nosotros" (creía que la libertad de expresión era un derecho constitucional) y dentro de poco "para acceder a los menús de expertos tienes que mandarnos fotos de tu hermana en bikini" (y porqué no? quien les pone límite?).

Esto lo leerán dos tipos de personas: los que ya saben cómo va esto (y que entonces habrán perdido unos cuantos minutos) y los que viven engañados y se creen libres porque pueden robar licencias impunemente... que evidentemente les dará igual saber que están siendo engañados y manejados al antojo de unos pocos.

Un saludo a estos últimos :sick:
<file_sep>---
layout: refresh
refresh_to_post_id: /2010-10-29/creada-la-pgina-rplica-en-espaol-de-auctex-para-gnu-emacs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-06-29/prcticas-de-programacin-infames-1-parte.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-09-27/debian-en-el-acer-aspire-revo.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-10-24/ms-eficaz-que-la-porra-es-el-miedo-a-la-porra.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-01-26/migracin-de-repositorios-subversion.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-08-31/gnu-emacs-configurar-indentacin.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-03/osd-escribiendo-en-el-escritorio.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-01-24/virtualizacin-fcil-con-xen3.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-11-19/bookcrossing-tambin-en-ciudad-real.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-06-06/inhabilitar-touchpad-synaptics-mientras-escribes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2005-10-02/saluditos.html
---
<file_sep>---
migrated: node/1519
layout: post
title: Proyecto ¿Colaborais?
created: 1306694726
author: Marot77
comments: true
category: opinion
---
Buenas,hace tiempo pensé en un proyecto;Crear un Software HelpDesk totalmente creado desde 0 con licencia GPL,pero demasiadas comunidades ese proyecto existen ya,asique reflexionando durante este tiempo,diversos cambios de s.o...etc

<!--break-->

Pensé varias cosas,como una red social para jugadores mmo(World of Warcraft,Regnum....etc) una red social de educación(Que un profesor se conecte por la tarde y los usuarios expongan sus dudas de ejercicios que tenga en la misma tarde,pensé que le podria interesar al estado eso) hasta mi idea final que me parecía buena,Diseñar un sistema de entrada a la casa mediante un pin,es decir deberia a ver un teclado,introduces el PIN de tu casa y se abre la puerta,suena muy utópico,pero no estaría mal estudiarlo...etc ¿Alguien se apunta?
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-08-05/truco-tonto-engaar-a-wget.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-12-15/configuracin-de-thunderbird-icedove-para-el-correo-de-la-uclm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-05-04/debian-tdd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-08-01/aplicaciones-portables-entre-psp-y-gnu-linux-con-sdl.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2006-01-10/magnatuneasy-vuelve-a-la-vida.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2012-03-05/instalar-debian-en-asus-zenbook-ux31e.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-10-31/git-el-control-de-versiones-definitivo-por-ahora.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2008-03-22/iphone-e-ipod-touch-con-mono.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-12-22/suicidios-de-discos-duros.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-18/solucionar-sincronizacin-audio-video-de-flash.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-02-25/google-gears-works-on-iceweasel-debian-ubuntu.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-03-22/plataforma-anti-soporte-gratuito-a-microsoft.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-09-10/jugando-con-lego-mindstorms-nxt.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2005-11-14/10-000-visitas.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2008-02-27/actualizar-firmware-de-xport.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2006-02-21/van-a-cambiar-los-escritorios-3d-la-manera-de-usar-el-ordenador.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /cooking/2012-01-28/mojo-picn.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-05-30/mini-tutorial-sobre-la-recursividad.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /humor/2009-07-15/si-zp-dice-que-bill-gates-lo-dice.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2005-11-04/grub-protegido-con-contrasea.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-12-13/usar-una-particin-real-con-virtualbox.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-06-17/afina-tus-discos-con-hdparm.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2006-11-09/error-al-abrir-algunas-paginas-webs.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2008-08-27/la-importancia-de-cifrar-tu-vida.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2009-03-10/el-autntico-emblema-de-informtica.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-05-19/hasta-luego-hd-dvd.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2007-02-25/gnu-linux-en-el-vaticano.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2008-03-01/nexuiz-2-4-en-la-calle.html
---
<file_sep>---
migrated: node/672
layout: post
title: 10 razones para no usar "Linux"
created: 1178661661
author: aledelgal
comments: true
category: opinion
---
<a href="http://www.sahw.com/wp/archivos/2006/10/20/10-razones-para-no-usar-linux/">Leerlo aquí</a>
<file_sep>---
layout: refresh
refresh_to_post_id: /opinion/2007-05-28/humor-informtico.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2011-05-13/vdeos-de-las-jornadas-de-software-libre-de-ciudad-real-15-al-18-de-marzo-de-2011.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /tale/2005-12-09/mapa-conceptual-del-software-libre.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2007-05-17/la-consola-de-la-fonera-ds275.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /new/2011-12-28/reconciliacin-android-y-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2011-05-14/pruebas-web-con-selenium-y-atheist.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-12-06/cmo-indicar-a-x-org-qu-tarjeta-de-vdeo-tienes.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2009-07-24/configurar-htc-magic-g2-con-android-en-debian-gnu-linux.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /enquiry/2011-12-07/filtro-de-contenidos.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /2007-02-13/cuando-el-gestor-de-claves-de-gnome-se-pone-pesadito.html
---
<file_sep>---
layout: refresh
refresh_to_post_id: /recipe/2006-08-25/motorola-v3-y-debian-gnu-linux.html
---
