<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="http://mariodebian.com/styles/rss.css" type="text/css"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns="http://purl.org/rss/1.0/"
>
 <channel rdf:about="http://mariodebian.com/rss/rss10/1">
  <title>MarioDebian, mi devlog</title>
  <link>http://mariodebian.com/blog/1</link>
  <description> Bitácora de un desarrollador newbie. 
</description>
    <dc:creator>mario</dc:creator>
  <dc:date>2012-01-25T02:16:55Z</dc:date>
  <admin:generatorAgent rdf:resource="http://www.lifetype.net" />
  <items>
   <rdf:Seq>
       <rdf:li rdf:resource="http://mariodebian.com/post/1/698" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/697" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/696" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/695" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/694" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/693" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/692" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/691" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/690" />
       <rdf:li rdf:resource="http://mariodebian.com/post/1/689" />
      </rdf:Seq>
  </items> 
 </channel>
  <item rdf:about="http://mariodebian.com/post/1/698">
  <title>Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 en formato DKMS</title>
  <link>http://mariodebian.com/post/1/698</link>
  <dc:description>&lt;p&gt;
Como veo que los art&amp;iacute;culos en los que he publicado los parches para el driver de este dispositivo TDT est&amp;aacute;n teniendo seguimiento en este blog y harto de compilar a mano un mont&amp;oacute;n de cosas en cada actualizaci&amp;oacute;n del kernel ayer dediqu&amp;eacute; un ratillo a preparar un paquete m&amp;aacute;s autom&amp;aacute;tico usando DKMS.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Dynamic_Kernel_Module_Support&quot;&gt;DKMS&lt;/a&gt;&amp;nbsp;es un sistema que compila m&amp;oacute;dulos del kernel en varios eventos (actualizaci&amp;oacute;n del kernel, nuevo kernel, actualizaci&amp;oacute;n de drivers, etc...) sin intervenci&amp;oacute;n del usuario.
&lt;/p&gt;
&lt;p&gt;
Muchos paquetes de Debian y Ubuntu lo usan (drivers de NVIDIA/ATI, VirtualBox, etc...) &amp;iquest;Porqu&amp;eacute; no tenerlo para el driver AF9035?
&lt;/p&gt;
&lt;p&gt;
He dado de alta un&amp;nbsp;&lt;a href=&quot;https://launchpad.net/~mariodebian/+archive/dvb-usb-af9035&quot;&gt;PPA en Launchpad&lt;/a&gt;, &amp;nbsp;que contiene&amp;nbsp;&lt;a href=&quot;http://ppa.launchpad.net/mariodebian/dvb-usb-af9035/ubuntu/pool/main/a/af90xx-dkms/&quot;&gt;el paquete fuente y el .deb generado&lt;/a&gt;&amp;nbsp;listo para instalar en &lt;strong&gt;&lt;u&gt;cualquier distribuci&amp;oacute;n&lt;/u&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
El paquete s&amp;oacute;lo depende de dkms por lo que deber&amp;iacute;a funcionar en i386/amd64 y desde versiones cuyo kernel sea 2.6.26 o superior (en el 3.0.0 de Debian Unstable funciona sin problemas)
&lt;/p&gt;
&lt;p&gt;
El paquete compila 6 m&amp;oacute;dulos:&lt;em&gt; af9033, dvb-core, dvb-usb-af9035, dvb-usb, mxl5007t, tua9001&lt;/em&gt; que se instalan en&lt;strong&gt; /lib/modules/`uname -r`/updates/dkms&lt;/strong&gt; por lo que tienen preferencia sobre los m&amp;oacute;dulos instalados. Puede que rompa otros drivers de TDT pero normalmente no se suelen tener varios modelos funcionando a la vez.
&lt;/p&gt;
&lt;p&gt;
El paquete se ha generado partiendo del c&amp;oacute;digo fuente de dvb-usb-af9035, cabeceras y fuentes de la rama v4l e incluye el firmware&amp;nbsp;&lt;strong&gt;/lib/firmware/dvb-usb-af9035-01.fw&lt;/strong&gt;&amp;nbsp;necesario.&amp;nbsp;
&lt;/p&gt;</dc:description>
      
    <dc:subject>Linux</dc:subject>
      
    <dc:subject>Debian</dc:subject>
      
    <dc:subject>DVB</dc:subject>
      
    <dc:subject>TDT</dc:subject>
     
    
  <dc:date>2011-07-28T14:28:11Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/697">
  <title>Nuevo modelo Multiseat 8840</title>
  <link>http://mariodebian.com/post/1/697</link>
  <dc:description>&lt;p&gt;
Hace unas semanas hemos comprado directamente el fabricante (Asia) un nuevo modelo de ZeroClient o tambi&amp;eacute;n conocido como MultiPoint/MultiSeat: MWS8840
&lt;/p&gt;
&lt;p&gt;
Afortunadamente el chipset es el mismo que el anterior MWS300 y funciona correctamente. Es m&amp;aacute;s, con gran sorpresa veo que los v&amp;iacute;deos de Youtube funcionan a pantalla completa &lt;img src=&quot;http://mariodebian.com/js/tinymce/plugins/emotions/images/smiley-tongue-out.gif&quot; border=&quot;0&quot; alt=&quot;Tongue out&quot; title=&quot;Tongue out&quot; /&gt;.
&lt;/p&gt;
&lt;p&gt;
El dispositivo tiene una entrada USB (que se conecta al servidor de terminales)&amp;nbsp; una entrada de alimentaci&amp;oacute;n (5V - 3A), entrada de micro, salida de audio y 4 puertos frontales USB 2.0 (en dos de ellos se conecta el teclado y el rat&amp;oacute;n). Adem&amp;aacute;s este modelo trae una peana para colgarlo en la parte trasera de un monitor TFT o ponerlo en vertical.
&lt;/p&gt;
&lt;p&gt;
Aqu&amp;iacute; podeis ver unas cuantas fotos. El tama&amp;ntilde;o de la caja es de aproximadamente 10cm x 10cm 
&lt;/p&gt;
&lt;p&gt;
&lt;a id=&quot;res_363&quot; href=&quot;http://mariodebian.com/gallery/1/IMG_20110324_232156.jpg&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/IMG_20110324_232156.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&amp;nbsp;&amp;nbsp;
&lt;a id=&quot;res_364&quot; href=&quot;http://mariodebian.com/gallery/1/IMG_20110324_232211.jpg&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/IMG_20110324_232211.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&amp;nbsp;&amp;nbsp;
&lt;a id=&quot;res_362&quot; href=&quot;http://mariodebian.com/gallery/1/IMG_20110324_232248.jpg&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/IMG_20110324_232248.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&amp;nbsp;&amp;nbsp;
&lt;a id=&quot;res_365&quot; href=&quot;http://mariodebian.com/gallery/1/IMG_20110324_232223.jpg&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/IMG_20110324_232223.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
En breve lanzaremos desde &lt;a href=&quot;http://thinetic.es&quot;&gt;Thinetic&lt;/a&gt; una completa y econ&amp;oacute;mica soluci&amp;oacute;n comercial con estos aparatos tan prometedores, y todo ello con &lt;u&gt;&lt;strong&gt;Software Libre&lt;/strong&gt;&lt;/u&gt;. 
&lt;/p&gt;</dc:description>
      
    <dc:subject>thinetic</dc:subject>
      
    <dc:subject>multiseat</dc:subject>
     
    
  <dc:date>2011-03-24T23:42:56Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/696">
  <title>Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 para kernel 2.6.37</title>
  <link>http://mariodebian.com/post/1/696</link>
  <dc:description>&lt;p&gt;
Esta es la continuaci&amp;oacute;n de otro&amp;nbsp;&lt;a href=&quot;http://mariodebian.com/post/1/691&quot;&gt;art&amp;iacute;culo de hace m&amp;aacute;s o menos un a&amp;ntilde;o&lt;/a&gt;, en estos d&amp;iacute;as en Debian unstable ha entrado una nueva versi&amp;oacute;n del kernel (2.6.37) y las anteriores fuentes ya no compilan.
&lt;/p&gt;
&lt;p&gt;
Las nuevas instrucciones quedan as&amp;iacute; (el nuevo parche disponible&amp;nbsp;&lt;a href=&quot;http://mariodebian.com/resource/1/361&quot;&gt;aqu&amp;iacute;&lt;/a&gt;):
&lt;/p&gt;
&lt;p&gt;
1.- Descargar nueva rama v4l:
&lt;/p&gt;
&lt;pre&gt;
hg clone http://mercurial.intuxication.org/hg/s2-liplianin/
cd s2-liplianin
zcat&amp;nbsp;s2-liplianin-af9035-af9033.diff.gz | patch -p1
&lt;/pre&gt;
&lt;p&gt;
2.- A&amp;ntilde;adir al v4l/.config estas l&amp;iacute;neas:
&lt;/p&gt;
&lt;pre&gt;
###############################
CONFIG_DVB_AF9033=m
CONFIG_DVB_USB_AF9035=m
CONFIG_MEDIA_TUNER_TUA9001=m
##############################
&lt;/pre&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
3.- Compilar
&lt;/div&gt;
&lt;pre&gt;
make
&lt;/pre&gt;
&lt;div&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div&gt;
4.- Instalar en un temporal
&lt;/div&gt;
&lt;pre&gt;
make install DESTDIR=`pwd`/tmp
&lt;/pre&gt;
&lt;div&gt;
5.- Copiar al directorio de m&amp;oacute;dulos del kernel
&lt;/div&gt;
&lt;pre&gt;
sudo cp -ra tmp/lib/modules/$(uname -r)/kernel/drivers/media/ \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/lib/modules/$(uname -r)/updates/v4l
sudo depmod -a
&lt;/pre&gt;
&lt;p&gt;
6.- Reiniciar y disfrutar (del hardware porque de la tele &amp;uacute;ltimamente no mucho)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;UPDATE&lt;/strong&gt;. Para el kernel 2.6.38 nuevo parche:&amp;nbsp;&lt;a href=&quot;http://mariodebian.com/resource/1/366&quot;&gt;aqu&amp;iacute;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;</dc:description>
      
    <dc:subject>Linux</dc:subject>
      
    <dc:subject>Debian</dc:subject>
      
    <dc:subject>DVB</dc:subject>
      
    <dc:subject>TDT</dc:subject>
     
    
  <dc:date>2011-02-19T16:18:26Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/695">
  <title>Gestión de dispositivos extraíbles en MultiSeat</title>
  <link>http://mariodebian.com/post/1/695</link>
  <dc:description>&lt;div&gt;Hac&amp;iacute;a tiempo que programar me aburre (seg&amp;uacute;n que cosas claro) pero el fin de semana pasado me lo he vuelto a pasar como un ni&amp;ntilde;o escribiendo c&amp;oacute;digo.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium&quot;&gt;&lt;strong&gt;&lt;u&gt;Problema:&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;En la Consejer&amp;iacute;a de Educaci&amp;oacute;n de la Comunidad de Madrid han empezado a usar un nuevo invento llamado Multiseat (&lt;a href=&quot;http://www.microsoft.com/spain/windows/multipoint/default.aspx&quot;&gt;Microsoft lo llama Multipoint&lt;/a&gt;) que consiste en unos peque&amp;ntilde;os aparatos que de una forma l&amp;oacute;gica vienen a ser un HUB USB que contiene una tarjeta de v&amp;iacute;deo, una tarjeta de sonido, y 4 puertos USB, si conectamos varios (pongamos seis) en un equipo autom&amp;aacute;ticamente multiplicamos los puestos disponibles en ese equipo (por USB conectamos un teclado y un rat&amp;oacute;n a cada Multiseat) (puedes&amp;nbsp;&lt;a href=&quot;http://thinetic.es/es/blogs/133-multiseat-convirtiendo-un-pc-en-varios-puestos-de-trabajo&quot;&gt;ver alg&amp;uacute;n detalle m&amp;aacute;s en la web de Thinetic Systems&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;El c&amp;oacute;mo hicimos andar todo este montaje es otra historia que alg&amp;uacute;n d&amp;iacute;a contar&amp;eacute;, pero lo que hoy nos centra es un peque&amp;ntilde;o problema, y es la gesti&amp;oacute;n de los dispositivos de almacenamiento que se conectan a los puertos USB del Multiseat, para que todos lo entendamos, cuando conectamos una memoria USB se conecta f&amp;iacute;sicamente al servidor (con un HUB USB por el medio) y ten&amp;iacute;amos que inventar una manera de que s&amp;oacute;lo pudiera verlo/usarlo el usuario sentado directamente en ese puesto. &lt;u&gt;Ya os adelanto que en Microsoft a&amp;uacute;n no lo han conseguido (que yo sepa)&lt;/u&gt;.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium&quot;&gt;&lt;strong&gt;&lt;u&gt;Soluci&amp;oacute;n:&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;En los sistemas basados en Linux durante los &amp;uacute;ltimos a&amp;ntilde;os se han venido usando distintas soluciones para el automontaje de discos extraibles (usbmount, HAL, DeviceKit), ahora estamos en la era de&amp;nbsp;&lt;a href=&quot;http://www.freedesktop.org/wiki/Software/udisks&quot;&gt;UDisk&lt;/a&gt;. Es un software que se conecta al gestor de dispositivos del kernel (udev) mediante unas reglas (/lib/udev/rules.d/80-udisks.rules) y crea un bus de sistema (en dbus) donde expone todo lo que encuentra, as&amp;iacute; las aplicaciones que quieran gestionar un dispositivo s&amp;oacute;lo tienen que escuchar esos eventos.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;UDisks permite inhibir el montaje (sigue reconociendo lo que enchufamos pero advierte en dbus que est&amp;aacute; inhibido y no realiza ninguna acci&amp;oacute;n) por lo que no se montan los dispositivos autom&amp;aacute;ticamente, a este inhibidor se le puede pasar un comando que cuando termine deje de inhibir... un ejemplo de uso pr&amp;aacute;ctico es el asistente de instalaci&amp;oacute;n gr&amp;aacute;fico que usa Ubuntu (ubiquity) y que inhibe el montaje de dispositivos (por razones obvias) durante la modificaci&amp;oacute;n de particiones y la instalaci&amp;oacute;n.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Nuestra primera aplicaci&amp;oacute;n a desarrollar es un demonio que se conecte al bus del sistema, escuche los dispositivos que se conectan y desconectan, leemos sus propiedades y a partir de ellas adivinamos (por el DEVPATH) en que puesto Multiseat se ha conectado para entonces montarlo con privilegios exclusivos para ese usuario y crearle un icono en el escritorio para que pueda desmontarlo. Este demonio decid&amp;iacute; programarlo en python y lo bautic&amp;eacute; como&amp;nbsp;&lt;a href=&quot;http://max.educa.madrid.org:8000/browser/trunk/max-multiseat-storage/multiseat-udisks.py&quot;&gt;multiseat-udisks.py&lt;/a&gt;&amp;nbsp;se ejecuta cuando (al arranque) encuentra los puestos MultiSeat (subcarpetas en /dev/usbseat)&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Ya tenemos solucionado que los dispositivos de almacenamiento se automonten en su sitio y con sus permisos, ahora viene cuando el usuario quiere extraerlo, GNOME crea un icono en el escritorio con nuestro pendrive, realmente no es un archivo y con el inhibidor por el medio no lo va a crear por lo que modifiqu&amp;eacute; multiseat-udisks.py para que crease un lanzador *.desktop especial con la l&amp;iacute;nea m&amp;aacute;gica &amp;laquo;&lt;span style=&quot;border-collapse: collapse; font-size: 11px; font-family: monospace; color: #bb8844&quot;&gt;&lt;strong&gt;X-multiseat-desktop=x&lt;/strong&gt;&lt;/span&gt;&amp;raquo; siendo x el puesto donde esta montado (subcarpeta de /dev/usbseat ).&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Para desmontar tenemos dos problemas, primero el usuario no es root y como el dispositivo no est&amp;aacute; en fstab no le va a dejar desmontarlo, y segundo ese icono del escritorio nos permite abrir el contenido del dispositivo de memoria pero no extraerlo de manera segura (sync &amp;amp;&amp;amp; umount) lo primero que se me ocurri&amp;oacute; es hacer una extensi&amp;oacute;n para Nautilus (gestor de archivos de GNOME) para que cuando se haga click derecho sobre un archivo *.desktop busque la l&amp;iacute;nea m&amp;aacute;gica y, si existe, a&amp;ntilde;ada una entrada a ese men&amp;uacute; derecho del tipo &amp;laquo;&lt;span style=&quot;border-collapse: collapse; font-size: 11px; font-family: monospace; color: #bb8844&quot;&gt;&lt;strong&gt;Desmontar dispositivo extra&amp;iacute;ble multiseat&lt;/strong&gt;&lt;/span&gt;&amp;raquo;, cuando se pulse sobre esa opci&amp;oacute;n se llama al proceso de desmontar. Esta extensi&amp;oacute;n (tambi&amp;eacute;n escrita en Python) la bautic&amp;eacute; como&amp;nbsp;&lt;a href=&quot;http://max.educa.madrid.org:8000/browser/trunk/max-multiseat-storage/nautilus-umount-multiseat.py&quot;&gt;nautilus-umount-multiseat.py&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;meta content=&quot;text/html; charset=utf-8&quot; http-equiv=&quot;content-type&quot; /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Para el problema de los privilegios tuve que programar la tercera ficha de este puzle, una peque&amp;ntilde;a aplicaci&amp;oacute;n en C (instalada con bit SUID) y que eleva privilegios a root para llamar al comando de desmontaje&amp;nbsp;&lt;a href=&quot;http://max.educa.madrid.org:8000/browser/trunk/max-multiseat-storage/src/umount.multiseat.c&quot;&gt;umount.multiseat.c&lt;/a&gt;. Muchas aplicaciones de montar y desmontar (instaladas en /sbin) van con el BIT SUID por lo que me parece una manera bastante estandar de hacerlo y m&amp;aacute;s teniendo en cuenta que los usuarios que usan MultiSeat pueden estar en un LDAP.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Cuando la extensi&amp;oacute;n de Nautilus detecta que el icono es de un dispositivo conectado a un Multiseat, llama a esta aplicaci&amp;oacute;n que eleva los privilegios a root (mediante setuid(0) ) y llama a multiseat-udisks.py con 2 argumentos, el primero es el dispositivo montado (ejemplo: /dev/sdc1 ) y el segundo que se genera dentro del programa C es el UID (identificador num&amp;eacute;rico del usuario que quiere desmontarlo). El script multiseat-udisks hace una serie de comprobaciones para que los par&amp;aacute;metros sean correctos y que el usuario pueda desmontar ese dispositivo (que el punto de montaje le pertenezca) lo desmonta y limpia tanto la carpeta donde se ha montado como el icono del escritorio.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;El sistema lo hemos probado en varias instalaciones y funciona a la perfecci&amp;oacute;n, m&amp;aacute;s tarde convert&amp;iacute; el c&amp;oacute;digo en paquete *.deb y a instalar en los centros...&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;El motivo por el que me he vuelto a divertir programando es que nadie hab&amp;iacute;a hecho algo del estilo y la documentaci&amp;oacute;n que pod&amp;iacute;a buscar por internet solo se centraba en el uso de cada herramienta o API por separado por lo que el desarrollo ha sido desde cero hasta algo terminado y funcionando.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Siento el tost&amp;oacute;n t&amp;eacute;cnico pero a algunos nos gusta contar nuestras frikadas&amp;nbsp;&lt;img src=&quot;http://mariodebian.com/js/tinymce/plugins/emotions/images/smiley-tongue-out.gif&quot; border=&quot;0&quot; alt=&quot;Tongue out&quot; title=&quot;Tongue out&quot; /&gt;&lt;/div&gt;&lt;meta content=&quot;text/html; charset=utf-8&quot; http-equiv=&quot;content-type&quot; /&gt;</dc:description>
      
    <dc:subject>Linux</dc:subject>
      
    <dc:subject>Proyectos</dc:subject>
      
    <dc:subject>MaX</dc:subject>
      
    <dc:subject>thinetic</dc:subject>
     
    
  <dc:date>2011-02-03T13:56:31Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/694">
  <title>Flasheando Nexus One con CyanogenMod 6.1.0-rc1</title>
  <link>http://mariodebian.com/post/1/694</link>
  <dc:description>&lt;p&gt;Seguir los pasos escrupulosamente, no me responsabilizo de posibles da&amp;ntilde;os en tu tel&amp;eacute;fono. Este proceso es para tel&amp;eacute;fonos nuevos, si has flasheado alguna ROM antes quiz&amp;aacute;s te sobre alg&amp;uacute;n paso.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;Descargar herramientas necesarias	&lt;ol&gt;		&lt;li&gt;&lt;a href=&quot;http://developer.htc.com/adp.html&quot;&gt;Fastboot&lt;/a&gt;.&lt;/li&gt;		&lt;li&gt;&lt;a href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;Android SDK&lt;/a&gt;&amp;nbsp;(necesitamos el adb)&lt;/li&gt;		&lt;li&gt;&lt;a href=&quot;http://forum.cyanogenmod.com/topic/2326-cyanogenmod-61-for-nexus-one-holy-crap-its-full-of-awesome-v610-rc1-10272010/&quot;&gt;ROM y Google APPS&lt;/a&gt;&amp;nbsp;(ACTUALMENTE update-cm-6.1.0-RC1-N1-signed.zip y gapps-hdpi-20101025-signed.zip)&lt;/li&gt;		&lt;li&gt;&lt;a href=&quot;http://www.mediafire.com/?nl2dnmlthij&quot;&gt;Radio en versi&amp;oacute;n zip&amp;nbsp;FRF50-radio-4_06_00_12_7.zip&lt;/a&gt;&lt;/li&gt;		&lt;li&gt;&lt;a href=&quot;http://www.google.es/search?q=recovery-RA-nexus-v1.8.0.1-aw.img&quot;&gt;Recovery 1.8.0.1 recovery-RA-nexus-v1.8.0.1-aw.img&lt;/a&gt;&amp;nbsp;&lt;/li&gt;	&lt;/ol&gt;	&lt;/li&gt;	&lt;li&gt;Descomprimimos el zip del fastboot y el SDK (copiar el binario adb de la carpeta tools) y arrancamos el tel&amp;eacute;fono en modo fastboot (power+trackball)&lt;/li&gt;	&lt;li&gt;Desde consola ejecutamos&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;	sudo ./fastboot devices	&lt;/pre&gt;	&lt;br /&gt;	(deber&amp;aacute; salir un n&amp;uacute;mero de serie HTXXXXXXXX y luego la palabra fastboot)&lt;/li&gt;	&lt;li&gt;Desbloqueamos el terminal (con esto se pierde la garant&amp;iacute;a)&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;	sudo ./fastboot oem unlock	&lt;/pre&gt;	&lt;br /&gt;	En el tel&amp;eacute;fono aparece (muy bien explicado lo que estamos haciendo) pulsar Vol Up y despu&amp;eacute;s Power para desbloquear.&lt;/li&gt;	&lt;li&gt;Ahora volvemos a arrancar en modo fastboot (Power + Trackball) para instalar el recovery&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;	sudo ./fastboot flash recovery recovery-RA-nexus-v1.8.0.1-aw.img	&lt;/pre&gt;	&lt;/li&gt;	&lt;li&gt;Dejamos que reinicie y volvemos a entrar a fastboot para pasar al BOOTLOADER-&amp;gt;RECOVERY (Vol Down y Power) (Recovery se ver&amp;aacute; en verde)&lt;br /&gt;	Ahora deber&amp;iacute;amos ver algo parecido a GRUB con varios menus, tenemos que copiar en la SDCARD la nueva radio&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;		sudo ./adb devices (se tiene que ver nuestro tel&amp;eacute;fono)&lt;br /&gt;	sudo ./adb push&amp;nbsp;FRF50-radio-4_06_00_12_7.zip /sdcard/&lt;br /&gt;	sudo ./adb shell ls /sdcard/*zip (tenemos que ver el archivo que acabamos de copiar)	&lt;/pre&gt;	&lt;/li&gt;	&lt;li&gt;Desde el tel&amp;eacute;fono con el trackball bajamos hasta la opci&amp;oacute;n &amp;quot;Flash zip from sdcard&amp;quot;, buscamos el zip del radio y pulsamos el trackball para actualizar el radio, cuando termine reiniciamos y volvemos al recovery siguiendo los mismos pasos del punto 6.&lt;/li&gt;	&lt;li&gt;Copiamos la ROM de Cyanogen y las Google APPS.&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;		sudo ./adb devices (deber&amp;iacute;amos ver el tel&amp;eacute;fono)&lt;br /&gt;	sudo ./adb push&amp;nbsp;update-cm-6.1.0-RC1-N1-signed.zip /sdcard/&lt;br /&gt;	sudo ./adb push&amp;nbsp;gapps-hdpi-20101025-signed.zip /sdcard/&lt;br /&gt;	sudo ./adb shell ls /sdcard/*zip (deben verse estos 2 archivos)&lt;br /&gt;	&lt;/pre&gt;	&lt;/li&gt;	&lt;li&gt;Desde el tel&amp;eacute;fono vamos al men&amp;uacute; &amp;quot;Flash zip from sdcard&amp;quot; e instalamos PRIMERO el zip&amp;nbsp;update-cm-6.1.0-RC1-N1-signed.zip, cuando termine y sin reiniciar el otro&amp;nbsp;gapps-hdpi-20101025-signed.zip.&lt;/li&gt;	&lt;li&gt;Antes de reiniciar hacemos wipe (volver a datos de f&amp;aacute;brica) desde el&amp;nbsp;men&amp;uacute;&amp;nbsp;del tel&amp;eacute;fono, Wipe -&amp;gt; Wipe data/factory reset, wipe cache, wipe dalvik-cache y reiniciamos. El primer arranque es un poco m&amp;aacute;s largo de lo normal, podemos ver como se van configurando por primera vez las aplicaciones con este comando:&lt;br /&gt;	&lt;br /&gt;	&lt;pre&gt;	sudo ./adb logcat	&lt;/pre&gt;	&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</dc:description>
      
    <dc:subject>android</dc:subject>
      
    <dc:subject>htc</dc:subject>
      
    <dc:subject>nexusone</dc:subject>
     
    
  <dc:date>2010-11-08T14:31:37Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/693">
  <title>Sigo vivo...</title>
  <link>http://mariodebian.com/post/1/693</link>
  <dc:description>&lt;p&gt;... s&amp;iacute;, es cierto, no me he muerto aunque las fechas de los art&amp;iacute;culos del blog as&amp;iacute; lo hagan sospechar.&lt;/p&gt;&lt;p&gt;Con&amp;nbsp;&lt;a href=&quot;#!/mariodebian&quot;&gt;twitter&lt;/a&gt;&amp;nbsp;me sirve en el 90% de los casos para contar lo que tengo que contar (que tampoco es tanto). Puedes leerme en el widget de la derecha de este blog.&lt;/p&gt;&lt;p&gt;Desde febrero llevo involucrado en varios proyectos, uno de ellos bastante grande y complejo del que publicar&amp;eacute; noticias en breve y apenas tengo tiempo para plantearme escribir.&amp;nbsp;&lt;/p&gt;&lt;p&gt;De lo m&amp;aacute;s anecd&amp;oacute;tico (por llamarlo de alguna manera) fue mi &lt;strong&gt;primera entrevista de trabajo&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;A mediados/finales de Agosto me llega un correo de una persona del equipo de reclutamiento de Google&amp;nbsp;interes&amp;aacute;ndose&amp;nbsp;en mi trayectoria, colaboraciones y proyectos de software libre entre los que ando involucrado, para que luego digan que las empresas no buscan &amp;laquo;figuras&amp;raquo; por&amp;nbsp;Internet.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Mi primera reacci&amp;oacute;n fue de incredulidad (el correo lo le&amp;iacute;a desde mi tel&amp;eacute;fono m&amp;oacute;vil y apenas pod&amp;iacute;a investigar si era aut&amp;eacute;ntico) por lo que me espero al d&amp;iacute;a siguiente y ya con el port&amp;aacute;til miro las cabeceras del correo (desconfiado que es uno, y m&amp;aacute;s de una vez me han salvado de meter la pata), el correo sale de los servidores de Mountain View ( *corp.google.com ) y parece todo lo leg&amp;iacute;timo que puedo averiguar.&lt;/p&gt;&lt;p&gt;Contesto de manera educada y con mi cutre nivel de ingl&amp;eacute;s explicando que me interesa (nunca hay que decir que no a la primera) y que me indique m&amp;aacute;s informaci&amp;oacute;n como tipo de trabajo, ciudad, etc...&lt;/p&gt;&lt;p&gt;En los siguientes intercambios de correos me pide un &amp;laquo;Resume&amp;raquo; lo que viene a ser un curr&amp;iacute;culum en formato&amp;nbsp;anglosaj&amp;oacute;n, lo preparo en Google Docs y se lo env&amp;iacute;o, no se si soy bastante&amp;nbsp;inocente&amp;nbsp;en este tipo de documentos as&amp;iacute; que en lugar de engordarlo, incluso lo puse a dieta, ya que hay varias cosas que no interesan seg&amp;uacute;n el sitio donde entregas el CV.&lt;/p&gt;&lt;p&gt;Un d&amp;iacute;a me indican que quiere conversar un rato conmigo pero sin dejar muy claro el c&amp;oacute;mo, al final resulto en una conversaci&amp;oacute;n por tel&amp;eacute;fono desde EEUU (prefijo +1) de unos 40 minutos en ingl&amp;eacute;s, entre el mal sonido del altavoz del m&amp;oacute;vil y mi mal&amp;nbsp;nivel&amp;nbsp;de ingl&amp;eacute;s intente defenderme como pude, creo que en alg&amp;uacute;n momento de la conversaci&amp;oacute;n me explic&amp;oacute; que &amp;eacute;sta era privada y que no deb&amp;iacute;a dar demasiados detalles en p&amp;uacute;blico, as&amp;iacute; que resumiendo mucho, fueron unas cuestiones sobre que tipo de trabajo, o en que lenguajes de programaci&amp;oacute;n me sent&amp;iacute;a m&amp;aacute;s c&amp;oacute;modo y me cont&amp;oacute; un poco de c&amp;oacute;mo funciona Google por dentro, grupos de trabajo y posibles ciudades a las que pod&amp;iacute;a ir (me ofrecieron Londres, Dubl&amp;iacute;n o Zurich)&lt;/p&gt;&lt;p&gt;Despu&amp;eacute;s de colgar tuve que tomarme una tila porque me temblaban hasta las rodillas.&amp;nbsp;&lt;img src=&quot;http://mariodebian.com/js/tinymce/plugins/emotions/images/smiley-embarassed.gif&quot; border=&quot;0&quot; alt=&quot;Embarassed&quot; title=&quot;Embarassed&quot; /&gt;&lt;/p&gt;&lt;p&gt;En la conversaci&amp;oacute;n me dijeron que pasar&amp;iacute;an mis datos a un equipo de contrataci&amp;oacute;n y que tendr&amp;iacute;a noticias. &lt;/p&gt;&lt;p&gt;Lo triste (o no, seg&amp;uacute;n se vea) es que el siguiente correo fue el t&amp;iacute;pico de eres muy bueno pero de momento no tenemos ning&amp;uacute;n puesto que se acomode a tus habilidades.&lt;/p&gt;&lt;p&gt;Hasta aqu&amp;iacute; la historia, mi forma de verlo es que me siento orgulloso (much&amp;iacute;smimo) de que una empresa del nivel y tama&amp;ntilde;o de Google se haya fijado en m&amp;iacute; y &lt;u&gt;me quedo con esto&lt;/u&gt;, tambi&amp;eacute;n estoy muy contento de haber sido sincero durante las preguntas y haber contestado con el coraz&amp;oacute;n (me recordaba a la raz&amp;oacute;n por la que deje la Universidad) si no se algo, digo que no lo se, y si con algo no estoy c&amp;oacute;modo (ej: programando en Java) tambi&amp;eacute;n lo digo abiertamente.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Mi&amp;nbsp;&lt;a href=&quot;http://thinetic.es&quot;&gt;situaci&amp;oacute;n laboral actual es envidiable&lt;/a&gt;, se que podr&amp;iacute;a estar ganando mucha m&amp;aacute;s pasta en cualquier otro sitio, pero el dinero no lo es todo, hacer lo que te gusta, a las horas que te gusta y sin jefes es algo impagable, y es por ello que ten&amp;iacute;a serias dudas de decir &amp;laquo;s&amp;iacute;&amp;raquo; y hacer las maletas si hubiera pasado todas las pruebas.&lt;/p&gt;&lt;p&gt;En fin, que me quedo donde estoy, seguimos trabajando en&amp;nbsp;&lt;a href=&quot;http://tcosproject.org&quot;&gt;TCOS&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.educa2.madrid.org/educamadrid/madrid-linux&quot;&gt;MaX&amp;nbsp;(nueva web)&lt;/a&gt;&amp;nbsp;y otro montonazo de proyectos dentro de &lt;a href=&quot;http://thinetic.es&quot;&gt;**mi** empresa&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;</dc:description>
      
    <dc:subject>Personal</dc:subject>
     
    
  <dc:date>2010-10-07T16:21:56Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/692">
  <title>TCOS en Ubuntu Lucid 10.04, the perfect setup</title>
  <link>http://mariodebian.com/post/1/692</link>
  <dc:description>&lt;p&gt;Ya tenemos un&amp;nbsp;&lt;a href=&quot;http://argentina.tcosproject.org/2009/09/18/instalacion-de-tcos-con-dnsmasq-en-jaunty/&quot;&gt;art&amp;iacute;culo para instalar y configurar TCOS en Ubuntu 9.04 Jaunty&lt;/a&gt;, ahora voy a dar unos peque&amp;ntilde;os trucos para instalarlo en Lucid.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ol&gt;	&lt;li&gt;Instalar Ubuntu 10.04 Lucid (quiz&amp;aacute;s sirva para otras *buntu), yo lo he probado con Ubuntu y GNOME.&lt;/li&gt;	&lt;li&gt;A&amp;ntilde;adir el siguiente repositorio:&lt;br /&gt;	&lt;br /&gt;	&lt;strong&gt;&lt;em&gt;deb&amp;nbsp;&lt;a href=&quot;http://tcosproject.org&quot;&gt;http://tcosproject.org&lt;/a&gt;&amp;nbsp;lucid main&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;	&lt;li&gt;El repositorio est&amp;aacute; firmado con mi clave GPG por lo que cuando actualicemos nos dar&amp;aacute; un error, para a&amp;ntilde;adir la clave se puede instalar el paquete &lt;strong&gt;&lt;em&gt;tcos-keyring&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;	&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;font-weight: normal; font-style: normal&quot;&gt;Luego instalamos el paquete &lt;/span&gt;tcos&lt;span style=&quot;font-weight: normal&quot;&gt;&lt;span style=&quot;font-style: normal&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;	&lt;li&gt;&lt;strong&gt;&lt;em&gt;&lt;span style=&quot;font-weight: normal&quot;&gt;&lt;span style=&quot;font-style: normal&quot;&gt;Actualizar el paquete GDM, en el repositorio de TCOs est&amp;aacute; disponible la versi&amp;oacute;n&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;2.30.2.is.2.30.2-0ubuntu1.lucid.tcos2 que tiene unas ligeras mejoras con respecto al que trae Ubuntu:&lt;br /&gt;	&lt;br /&gt;	- Desactivado IPV6 - desgraciadamente las nuevas versiones del gdm lo traen activado por defecto y XDMCP no funciona&lt;br /&gt;	-&amp;nbsp;&lt;a href=&quot;http://mail.gnome.org/archives/gdm-list/2010-June/msg00010.html&quot;&gt;Parche para la inicializaci&amp;oacute;n del buffer XdmcpFill()&lt;/a&gt;&lt;br /&gt;	-&amp;nbsp;&lt;a href=&quot;https://bugzilla.gnome.org/show_bug.cgi?id=624958&quot;&gt;Parche para el TimedLogin remoto&lt;/a&gt;&lt;br /&gt;	- Otras peque&amp;ntilde;as mejoras&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;Lanzar el configurador de servidor desde el men&amp;uacute; Administraci&amp;oacute;n o ejecutar: &lt;strong&gt;&lt;em&gt;sudo tcos-configurator&lt;br /&gt;	&lt;br /&gt;	&lt;a id=&quot;res_300&quot; href=&quot;http://mariodebian.com/gallery/1/tcosconfigurator1.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/tcosconfigurator1.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;En la primera pesta&amp;ntilde;a configurar el interfaz de red que atender&amp;aacute; a los terminales ligeros y el rango DHCP.&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;En la segunda pesta&amp;ntilde;a a&amp;ntilde;adir usuarios (si se quiere que funcione el autologin usar el mismo prefijo que los nombres de equipo)&lt;br /&gt;	&lt;br /&gt;	&lt;a id=&quot;res_301&quot; href=&quot;http://mariodebian.com/gallery/1/tcosconfigurator2.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/tcosconfigurator2.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;En la tercera pesta&amp;ntilde;a activar la entrada remota de GDM y opcionalmente el timeout y autologin&lt;br /&gt;	&lt;br /&gt;	&lt;a id=&quot;res_302&quot; href=&quot;http://mariodebian.com/gallery/1/tcosconfigurator3.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/tcosconfigurator3.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: 12px; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;En la cuarta pesta&amp;ntilde;a lanzar Tcosconfig&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: small; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 12px&quot;&gt;Seleccionar la plantilla &lt;strong&gt;&lt;em&gt;tcos.conf.all&lt;/em&gt;&lt;/strong&gt; y dar siguiente hasta la parte de construcci&amp;oacute;n de la imagen, pulsar el bot&amp;oacute;n contruir y cuando termine guardar.&lt;br /&gt;	&lt;br /&gt;	&lt;a id=&quot;res_202&quot; href=&quot;http://mariodebian.com/gallery/1/tcosconfig-new-1.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/tcosconfig-new-1.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;	&lt;li&gt;&lt;span style=&quot;font-size: small; font-family: &#039;Lucida Grande&#039;, &#039;Helvetica Neue&#039;, Verdana, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 12px&quot;&gt;A continuaci&amp;oacute;n unos peque&amp;ntilde;os trucos para evitar problemas&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Desactivar Multicast DNS, se edita /etc/nsswitch.conf y se cambia la l&amp;iacute;nea:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;blockquote style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot; class=&quot;webkit-indent-blockquote&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot;&gt;	&lt;div&gt;	hosts: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;files mdns4_minimal [NOTFOUND=return] dns mdns4	&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;por&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;blockquote style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot; class=&quot;webkit-indent-blockquote&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot;&gt;	&lt;div&gt;	hosts: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;files dns	&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;(esto desactiva los servicios AVAHI que no son imprescindibles y que aumentan mucho los timeouts de login de GDM o incluso SSH)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Verificar el correcto funcionamiento de los DNS, lo recomendable es desinstalar network-manager y configurar una IP fija en /etc/network/interfaces (de hecho el configurador del servidor de TCOS deber&amp;iacute;a haberlo hecho ya).&lt;/p&gt;&lt;p&gt;Comprobar que la primera l&amp;iacute;nea de /etc/resolv.conf es la IP interna de nuestro servidor&lt;/p&gt;&lt;p&gt;Comprobar que en /etc/resolv.conf.real tenemos los DNS de nuestro proveedor de internet o en su defecto unos que funcionen.&lt;/p&gt;&lt;p&gt;Comprobaremos que el archivo /etc/gdm/custom.conf tiene este aspecto:&lt;/p&gt;&lt;blockquote style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot; class=&quot;webkit-indent-blockquote&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px&quot;&gt;	&lt;p&gt;	[xdmcp]	&lt;/p&gt;	&lt;p&gt;	Enable=true	&lt;/p&gt;	&lt;p&gt;	MaxPending=60	&lt;/p&gt;	&lt;p&gt;	MaxWaitIndirect=80	&lt;/p&gt;	&lt;p&gt;	MaxWait=75	&lt;/p&gt;	&lt;p&gt;	PingIntervalSeconds=35	&lt;/p&gt;	&lt;p&gt;	MaxPendingIndirect=30	&lt;/p&gt;	&lt;p&gt;	MaxSessions=40	&lt;/p&gt;	&lt;p&gt;	DisplaysPerHost=4	&lt;/p&gt;	&lt;p&gt;	[daemon]	&lt;/p&gt;	&lt;p&gt;	TimedLogin=/usr/sbin/tcos-gdm-autologin --local=usuario-que-usara-el-servidor|	&lt;/p&gt;	&lt;p&gt;	TimedLoginEnable=true	&lt;/p&gt;	&lt;p&gt;	TimedLoginDelay=1	&lt;/p&gt;	&lt;p&gt;	[security]	&lt;/p&gt;	&lt;p&gt;	AllowRemoteAutoLogin=true	&lt;/p&gt;&lt;/blockquote&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Podemos activar el debug en GDM (clave [debug]Enable=True ) y ver el syslog mientras los equipos intentan cargar por red.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Si hemos seguido todos los pasos con total exactitud tendremos un servidor TCOS funcionando en menos de media hora (contando la&amp;nbsp;instalaci&amp;oacute;n&amp;nbsp;de Ubuntu)&lt;/div&gt;</dc:description>
      
    <dc:subject>TCOS</dc:subject>
     
    
  <dc:date>2010-07-22T17:37:46Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/691">
  <title>Compilando drivers de TDT (DVB) AverTV TwinStar 07ca:0825</title>
  <link>http://mariodebian.com/post/1/691</link>
  <dc:description>&lt;p&gt;
Me he hecho con un nuevo receptor de TDT USB, el anterior (15a4:9016 Afatech Technologies, Inc. AF9015 DVB-T USB2.0 stick) me estaba dando muchos problemas y la poca se&amp;ntilde;al que llega a mi habitaci&amp;oacute;n me hac&amp;iacute;a perder varios canales.
&lt;/p&gt;
&lt;p&gt;
En este HOWTO intentar&amp;eacute; de manera sencilla explicar como compilar una nueva versi&amp;oacute;n de V4L previamente parcheada para el nuevo hardware.
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;1.- Reconocimiento
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Lo primero es abrir el receptor (si lo piensas devolver no deber&amp;iacute;as hacerlo) para identificar los chips, en el m&amp;iacute;o se puede ver que tiene 2 chips (receptor doble) del tipo AF9035B y AF9033.
&lt;/p&gt;
&lt;p&gt;
Buscando por varios sitios encuentro este hilo: &lt;a href=&quot;http://patchwork.kernel.org/patch/61950/&quot;&gt;http://patchwork.kernel.org/patch/61950/&lt;/a&gt; que explicaque hay que aplicar dos parches al kernel y compilar, en lugar de compilar el kernel he usado la rama Mercurial del proyecto V4L.
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;2.- Descargamos V4L&lt;/span&gt;
&lt;/p&gt;
&lt;pre&gt;
hg clone http://linuxtv.org/hg/v4l-dvb
&lt;/pre&gt;
&lt;p&gt;
En el enlace que he puesto antes explica que hay que aplicar 2 parches,el primero del &lt;a href=&quot;http://linuxtv.org/wiki/index.php/TerraTec_Cinergy_T_Stick&quot;&gt;m&amp;eacute;todo B de este wiki&lt;/a&gt;, y el segundo elque adjunta en ese hilo. Yo he aplicado los dos (corregido los rechazos) y preparado un nuevo parche &amp;uacute;nico, que puedes descargar de aqu&amp;iacute;: &lt;a id=&quot;res_358&quot; href=&quot;http://mariodebian.com/gallery/1/af9035.v4l.hg.diff&quot;&gt;af9035.v4l.hg.diff&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;3.- Parchear&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
En el directorio v4l-dvb ejecutamos lo siguiente:
&lt;/p&gt;
&lt;pre&gt;
cat /ruta/al/parche/af9035.v4l.hg.diff | patch -p1
&lt;/pre&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;4.- Compilar&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Teniendo nuestras cabeceras del kernel instaladas (apt-get install linux-headers-`uname -r`) ejecutamos &lt;strong&gt;make&lt;/strong&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;5.- Instalar&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
No es recomendable instalarlo encima ya que si algo no va bien tendremos que reinstalar nuestro kernel, vamos a instalarlo en el directorio update del kernel para que si queremos en un futuro podamos borrarlo y no estropear nuestro kernel. &lt;strong&gt;Es muy importante compilar e instalar como usuario (no como ROOT) ya que no se ejecutar&amp;aacute;n o copiar&amp;aacute;n cosas que no queramos&lt;/strong&gt;.
&lt;/p&gt;
&lt;pre&gt;
make install DESTDIR=`pwd`/tmp
sudo mkdir -p /lib/modules/`uname -r`/updates
sudo cp -ra tmp/lib/modules/`uname -r`/kernel/drivers/media/ /lib/modules/`uname -r`/updates/v4l
sudo depmod -a 
&lt;/pre&gt;
&lt;p&gt;
(va a dar errores de copia de firmware... no problem !!!)
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;5.- Instalar el firmware&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Descargamos este archivo: &lt;a id=&quot;res_359&quot; href=&quot;http://mariodebian.com/gallery/1/dvb-usb-af9035-01.fw&quot;&gt;dvb-usb-af9035-01.fw&lt;/a&gt; y lo copiamos en /lib/firmware/ 
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;6.- Pruebas antes de conectar&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;$ sudo modinfo dvb-usb-af9035&lt;/strong&gt;
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;em&gt;filename:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /lib/modules/2.6.32-2-686/updates/v4l/dvb/dvb-usb/dvb-usb-af9035.ko&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;license:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPL&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;description:&amp;nbsp;&amp;nbsp;&amp;nbsp; Afatech AF9035 driver&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;author:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Antti Palosaari &amp;lt;crope@iki.fi&amp;gt;&lt;/em&gt;&lt;br /&gt;
	&lt;strong&gt;&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v07CAp0825d*dc*dsc*dp*ic*isc*ip*&amp;nbsp; &amp;lt;======= here is it!!!&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v0CCDp0093d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v15A4p9035d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v15A4p1003d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v15A4p1002d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v15A4p1001d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;alias:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb:v15A4p1000d*dc*dsc*dp*ic*isc*ip*&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;depends:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dvb-usb,usbcore&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;vermagic:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.6.32-2-686 SMP mod_unload modversions 686 &lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;parm:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; debug:set debugging level (int)&lt;/em&gt;&lt;br /&gt;
	&lt;em&gt;parm:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; adapter_nr:DVB adapter numbers (array of short)&lt;/em&gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;7.- Conectamos&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Ejecutamos en un terminal: sudo tail -f /var7log/syslog, deber&amp;iacute;a salir algo como esto:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;usb 1-3: new high speed USB device using ehci_hcd and address 6&lt;br /&gt;
	usb 1-3: New USB device found, idVendor=07ca, idProduct=0825&lt;br /&gt;
	usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
	usb 1-3: Product: A825&lt;br /&gt;
	usb 1-3: Manufacturer: AVerMedia TECHNOLOGIES, Inc.&lt;br /&gt;
	usb 1-3: SerialNumber: 0000000000000&lt;br /&gt;
	usb 1-3: configuration #1 chosen from 1 choice&lt;br /&gt;
	dvb-usb: found a &#039;Avermedia TwinStar&#039; in cold state, will try to load a firmware&lt;br /&gt;
	usb 1-3: firmware: requesting dvb-usb-af9035-01.fw&lt;br /&gt;
	dvb-usb: downloading firmware from file &#039;dvb-usb-af9035-01.fw&#039;&lt;br /&gt;
	dvb-usb: found a &#039;Avermedia TwinStar&#039; in warm state.&lt;br /&gt;
	dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.&lt;br /&gt;
	DVB: registering new adapter (Avermedia TwinStar)&lt;br /&gt;
	af9033: firmware version: LINK:11.15.10.0 OFDM:5.48.10.0&lt;br /&gt;
	DVB: registering adapter 0 frontend 0 (Afatech AF9033 DVB-T)...&lt;br /&gt;
	mxl5007t 4-00c0: creating new instance&lt;br /&gt;
	mxl5007t_get_chip_id: unknown rev (3f)&lt;br /&gt;
	mxl5007t_get_chip_id: MxL5007T detected @ 4-00c0&lt;br /&gt;
	dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.&lt;br /&gt;
	DVB: registering new adapter (Avermedia TwinStar)&lt;br /&gt;
	af9033: firmware version: LINK:11.15.10.0 OFDM:5.48.10.0&lt;br /&gt;
	DVB: registering adapter 1 frontend 0 (Afatech AF9033 DVB-T)...&lt;br /&gt;
	mxl5007t 4-00c1: creating new instance&lt;br /&gt;
	mxl5007t_get_chip_id: unknown rev (3f)&lt;br /&gt;
	mxl5007t_get_chip_id: MxL5007T detected @ 4-00c1&lt;br /&gt;
	dvb-usb: Avermedia TwinStar successfully initialized and connected.&lt;br /&gt;
	usbcore: registered new interface driver dvb_usb_af9035&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
En /dev/dvb se crear&amp;aacute;n nuevos dispositivos:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	tree /dev/dvb/&lt;br /&gt;
	/dev/dvb/&lt;br /&gt;
	├── adapter0&lt;br /&gt;
	│&amp;nbsp;&amp;nbsp; ├── demux0&lt;br /&gt;
	│&amp;nbsp;&amp;nbsp; ├── dvr0&lt;br /&gt;
	│&amp;nbsp;&amp;nbsp; ├── frontend0&lt;br /&gt;
	│&amp;nbsp;&amp;nbsp; └── net0&lt;br /&gt;
	└── adapter1&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── demux0&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── dvr0&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── frontend0&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; └── net0
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
Si algo no funciona, como por ejemplo nos sale esto por el syslog:
&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;
	&lt;em&gt;usb 1-3: new high speed USB device using ehci_hcd and address 5&lt;br /&gt;
	usb 1-3: New USB device found, idVendor=07ca, idProduct=0825&lt;br /&gt;
	usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&lt;br /&gt;
	usb 1-3: Product: A825&lt;br /&gt;
	usb 1-3: Manufacturer: AVerMedia TECHNOLOGIES, Inc.&lt;br /&gt;
	usb 1-3: SerialNumber: 0000000000000&lt;br /&gt;
	usb 1-3: configuration #1 chosen from 1 choice&lt;br /&gt;
	dvb_usb_af9035: disagrees about version of symbol dvb_usb_device_init&lt;br /&gt;
	dvb_usb_af9035: Unknown symbol dvb_usb_device_init&lt;/em&gt; 
	&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
... es porque ten&amp;iacute;amos cargados m&amp;oacute;dulos dvb_* , tenemos que mirar los que estan cargados (&lt;strong&gt;lsmod&lt;/strong&gt;) y quitarlos (&lt;strong&gt;rrmod&lt;/strong&gt;), si sigue sin ir podemos probar a reiniciar.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;</dc:description>
      
    <dc:subject>Debian</dc:subject>
      
    <dc:subject>DVB</dc:subject>
      
    <dc:subject>TDT</dc:subject>
     
    
  <dc:date>2010-02-27T16:38:23Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/690">
  <title>Mi primer app en android: RsyncDroid</title>
  <link>http://mariodebian.com/post/1/690</link>
  <dc:description>&lt;p&gt;
Presento mi nueva aplicaci&amp;oacute;n (mejor no mirar el c&amp;oacute;digo) para android: RsyncDroid.
&lt;/p&gt;
&lt;p&gt;
Es como si fuese un HolaMundo pero un poco m&amp;aacute;s complejo, pero me ha servido para aprender un poco Java y sobre todo para ver su entorno de desarrollo basado en Eclipse. El debugger (ddms) es la leche y se puede estudiar muy bien lo que va haciendo nuestra aplicaci&amp;oacute;n mientras se ejecuta... me ha gustado.
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;Instalaci&amp;oacute;n&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Lo primero es conseguir el binario de rsync, he preparado este script (necesita ser root del tel&amp;eacute;fono) 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;wget http://adqmisc.googlecode.com/svn/trunk/androidutils/rsync/rsync-3.0.6-arm-softfloat-linux-gnueabi.gz&lt;br /&gt;
zcat rsync-3.0.6-arm-softfloat-linux-gnueabi.gz &amp;gt; rsync&lt;br /&gt;
&lt;br /&gt;
./adb push rsync /sdcard/rsyncdroid/rsync&lt;br /&gt;
./adb shell mount -o remount,rw /dev/block/mtdblock0 /system&lt;br /&gt;
./adb shell &amp;quot;cat /sdcard/rsyncdroid/rsync &amp;gt; /system/bin/rsync&amp;quot;&lt;br /&gt;
./adb shell chmod 755 /system/bin/rsync&lt;br /&gt;
./adb shell mount -o remount,ro /dev/block/mtdblock0 /system&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Ahora instalaremos este apk: &lt;a id=&quot;res_354&quot; href=&quot;http://mariodebian.com/gallery/1/rsyncdroid.apk&quot;&gt;rsyncdroid.apk&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;./adb install -r ~/Desktop/rsyncdroid.apk &lt;br /&gt;
401 KB/s (18269 bytes in 0.044s)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;pkg: /data/local/tmp/rsyncdroid.apk&lt;br /&gt;
Success&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;Capturas de pantalla&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a id=&quot;res_355&quot; href=&quot;http://mariodebian.com/gallery/1/rsyncdroid1.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/rsyncdroid1.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a id=&quot;res_356&quot; href=&quot;http://mariodebian.com/gallery/1/rsyncdroid2.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/rsyncdroid2.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a id=&quot;res_357&quot; href=&quot;http://mariodebian.com/gallery/1/rsyncdroid3.png&quot;&gt;&lt;img src=&quot;http://mariodebian.com/gallery/1/previews/rsyncdroid3.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
El programa es muy sencillo, lo que hace es arrancar, parar y ver el estado del proceso rsync, si no existe la configuraci&amp;oacute;n usa una base en la que se comparte el contenido de la memoria SD. Es recomendable a&amp;ntilde;adir algo como &amp;quot;&lt;strong&gt;hosts allow = xx.xx.xx.xx&lt;/strong&gt;&amp;quot;, para permitir el acceso s&amp;oacute;lo desde la IP que queramos (&lt;em&gt;man rsyncd.conf&lt;/em&gt;).
&lt;/p&gt;
&lt;p&gt;
La primera vez que lo ejecutemos nos pedir&amp;aacute; el permiso de root (rsync se ejecuta en un puerto privilegiado).
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-size: large&quot;&gt;Script para copia de datos&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;rsync -Pavz --no-g --no-p --no-numeric-ids \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; htcmagic::sdcard/ --delete /home/mario/htcmagic/backup/&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
Yo me he hecho un script un poco m&amp;aacute;s complejo para (por la madrugada) hacer ping al tel&amp;eacute;fono y si est&amp;aacute; en la wifi de mi red hacer la copia incremental (creando enlaces duros) y borrando las copias de seguirdad que tengan m&amp;aacute;s de 30 d&amp;iacute;as.
&lt;/p&gt;</dc:description>
      
    <dc:subject>android</dc:subject>
      
    <dc:subject>htc</dc:subject>
     
    
  <dc:date>2010-01-09T17:25:06Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
  <item rdf:about="http://mariodebian.com/post/1/689">
  <title>Diferencias entre algo sencillo y algo enrevesado</title>
  <link>http://mariodebian.com/post/1/689</link>
  <dc:description>&lt;p&gt;
Hoy me he puesto a intentar hacer una cutre aplicaci&amp;oacute;n para Android (que est&amp;aacute; tan de moda) y de paso a programar mis primeras l&amp;iacute;neas en JAVA. &amp;iquest;Qu&amp;eacute;n invent&amp;oacute; ese lenguaje del diablo? Se merece las 7 plagas seguidas de una lapidaci&amp;oacute;n p&amp;uacute;blica, y voy a ello con un ejemplo muy simple.
&lt;/p&gt;
&lt;p&gt;
Vamos a intentar partir una cadena de texto por espacios, &lt;strong&gt;en Python&lt;/strong&gt;:
&lt;/p&gt;
&lt;pre&gt;
&amp;gt;&amp;gt;&amp;gt; a=&amp;quot;esto   es una cadena   de texto&amp;quot;
&amp;gt;&amp;gt;&amp;gt; a.split()
[&#039;esto&#039;, &#039;es&#039;, &#039;una&#039;, &#039;cadena&#039;, &#039;de&#039;, &#039;texto&#039;]
&lt;/pre&gt;
&lt;p&gt;
N&amp;oacute;tese que entre alguna de las palabras hay m&amp;aacute;s de un espacio.
&lt;/p&gt;
&lt;p&gt;
Ahora vamos a hacerlo &lt;strong&gt;en JAVA&lt;/strong&gt;:
&lt;/p&gt;
&lt;pre&gt;
public class test {
public static void main(String args[]) {
String a;
String [] aArray;
int i;
a=&amp;quot;esto   es una cadena   de texto&amp;quot;;
aArray=a.split(&amp;quot; &amp;quot;);
for (i=0; i&amp;lt;aArray.length; i++) {
System.out.println(&amp;quot;index=&amp;quot; + i + &amp;quot; aArray=&amp;quot; + aArray[i]);
}
}
}
&lt;/pre&gt;
&lt;p&gt;
Que como resultado da:
&lt;/p&gt;
&lt;pre&gt;
index=0 aArray=esto
index=1 aArray=
index=2 aArray=
index=3 aArray=es
index=4 aArray=una
index=5 aArray=cadena
index=6 aArray=
index=7 aArray=
index=8 aArray=de
index=9 aArray=texto
&lt;/pre&gt;
&lt;p&gt;
No quiero ir de listillo, pero necesitar 6 veces m&amp;aacute;s c&amp;oacute;digo para no hacerlo bien es como volver al esamblador. He intentado hacer &lt;strong&gt;aArray=a.trim().split(&amp;quot; &amp;quot;)&lt;/strong&gt; pero ni con esas...seguro que hay una forma rebuscada de hacerlo, en python no hay que pensar tanto. Adem&amp;aacute;s es bastante m&amp;aacute;s lento que python y eso que se ejecuta compilado en bytecode:
&lt;/p&gt;
&lt;pre&gt;
$ time python -c &amp;quot;a=&#039;esto   es una cadena   de texto&#039;; print a.split()&amp;quot; &amp;gt;/dev/null
real	0m0.026s
user	0m0.020s
sys	0m0.004s
&lt;/pre&gt;
&lt;pre&gt;
$ time java test &amp;gt; /dev/null
real	0m0.135s
user	0m0.064s
sys	0m0.016s
&lt;/pre&gt;</dc:description>
      
    <dc:subject>android</dc:subject>
     
    
  <dc:date>2010-01-08T00:49:02Z</dc:date>
    <dc:creator>mario</dc:creator>
 </item>
 </rdf:RDF>
