Solucionar el error del botón home en Android

androidsickAyer lei un artículo sobre un posible fallo en Android 1.6 en and.roid.es. Concretamente el artículo trataba sobre un error por el que el botón de home de los HTC dejaba de funcionar con Android 1.6. La verdad es que no le di más importancia hasta que curiosamente escasas horas más tarde me sucedió algo muy parecido: el botón home dejo de funcionar, el botón de llamada no mostraba la lista de contactos/llamadas, y el botón de colgado no bloqueaba el móvil, solo apagaba la pantalla.

La solución propuesta en el artículo era hacerle un “factory reset” al móvil, pero la verdad es que no me motivaba mucho, por lo que decidí hacer una búsqueda – para estas cosas mejor buscar siempre en inglés – en Google, y efectivamente encontré un hilo sobre el tema.

Por lo que parece este fallo no es nuevo, ya que el primer post del hilo está datado a 28 de octubre del 2008, así que si ya se soluciono con alguna versión anterior de Andriod podemos suponer que se trata de una regresión en la última versión disponible a día de hoy, la 1.6.

Concretamente la solución se encuentra en el post 34 del hilo y consiste en arrancar el tutorial de inicio, y los pasos son los siguientes:

  1. Instalar AnyCut desde el Android Market
  2. Ir a la home
  3. Pulsación larga en el escritorio
  4. Seleccionar “Accesos directos”
  5. Seleccionar “Any Cut”
  6. Seleccionar “Activity”
  7. Seleccionar “Setup Wizard” de la lista de actividades
  8. Seleccionar “Asistente de configuración”. En caso de tener más de uno, crear accessos directos para todos.
  9. Ejecutar la aplicación desde el escritorio

Alternativamente también es posible realizar los mismos pasos con la aplicación de pago “Better Cut”, que simplifica la selección del “Asistente de configuración”, ya que muestra más detalles y en este caso podemos escoger directamente el correcto. Concretamente tenemos que seleccionar la “activity” con el subtítulo “SetupWizardTestActivity”.

En mi caso el tutorial daba un error y la aplicación se cerraba después de introducir mis credenciales de Google, pero pese a eso se han solucionado ambos errores.

Tags: ,

Extract the innerHTML of a DOMNode in PHP5

Is there an easier way to extract the innerHTML from a DOMNode in PHP5?


/**
 * Extracts the innerHTML of a DOMNode. 
 * 
 * The function makes a new DOMDocument, imports the DOMNode,
 * appends it to the new DOMDocument and returns the HTML of the DOMDocument    
 * 
 * @param   DOMNode     $node   DOMNode we want to extract the innerHTML from
 * @return  string              innerHTML of the node
 * @author  Sergi de Pablos 
 */
function getInnerHTML(DOMNode $node)
{
    try {
      // We create a new 
    $document = new DOMDocument();
      $newNode = $document->importNode($node,true);
      $document->appendChild($newNode);
      return $document->saveHTML();
    } catch (DOMException $e) {
        echo "\n" . $e->getMessage() . "\n";
    }
}  

Tags: , , ,

Arte tradicional japonés a la venta en eBay

Interesante colección de imágenes obtenidas de una muestra de arte tradicional tradicional japonés yokai (monstruos míticos) que se puede encontrar a la venta en eBay por 15.000$. La verdad es que serían unos motivos muy buenos para unas hacerse unas cuantas camisetas, ¿no?

The Haykki Yako (百鬼夜行), literally “the night parade of a hundred demons,” is one of the most famous tales in Japanese folklore. It first appeared in a Buddhist text in the 13th century, and is the story of a nightmarish evening during which legions of yokai, oni, and other fearsome creatures erupted from their usual hiding places to openly terrorize the world of the living.

Powered by Flickr Gallery

Via BoingBoing

Aaron Patzer, CEO de Mint, sobre los costes reales de las startups

Este 6 de octubre, Aaron Patzer, CEO de Mint (para los despistados, startup de 3 años recién comprada por Intuit por 160 millones de dolares) dio una conferencia en el campus de Microsoft sobre los costes reales de una startup. Más de uno debería tomar nota. A modo de resumen:

  • Fase 1: una vez has madurado la idea, obtener $100.000 de amigos y familia para construir un prototipo.
  • Fase 2: prototipo completo, obtener $1 millón para lanzar una versión alfa.
  • Fase 3: una vez que ya tienes un producto que funciona, obtener de $5 a 10 millones para escalar el producto

Fase 1 (primeros $100.000):

  • Fundadores: $30.000/año (viviendo en Silicon Valley no le llegaba ni para pipas)
  • Ingenieros (1 – 2) $30.000 – 50.000/año, más un porcentage (1-2%) de la compañía
  • Oficina: $400/cubo/mes
  • Maquinas: $10.000
  • Departamento legal: pagos diferidos por un 0.50 – 0.75% de la compañía

Fase 2 (primera ronda de financiación, ~$1.000.000):

  • Salarios: $50.000 – $90.000/año ($450.000/año por 5 personas: 3-4 ingenieros, 1 maquetador, 1 usabilidad)
  • Costes imprevistos: +20% ($100.000/año)
  • Departamento legal: $25.000 + $2.000/mes ($50.000/año)

Fase 3 (serie A de financición, $5-10 millones)

  • Salarios + sobrecostes: $200.000/año/persona
  • Costes imprevistos o recurrentes: muchos gastos necesaríos una sola vez que suman unos $150.000/mes
  • Departamento legal: $10.000-$50.000/mes

Y aquí el video de la presentación

Via Techcrunch

Tags: , ,

Rich snippets

Por lo que veo Google ha decidido mejorar los snippets de algunas de las páginas que indexan si éstas les proporcionan más información en la página mediante microformats.

Si bien todo lo que sea estandarizar la web me parece bien, especialmente a la hora de codificar la información, no me gusta tanto como “venden” esta estandarización desde Google. Sí, tal vez – no lo aseguran – tendrás mejores snippets, y sí, serás más estándar y cool, pero lo que yo realmente entiendo y no dicen es lo siguiente:

Pon microformats en tu site que tal vez mostraremos mejores snippets en tu página pero mientras tanto nos das toda tu información para que la parseemos ya bien formateada y ya verás lo poco que tardaremos en mostrar resultados de sites pertenecientes a Google con información parseada de tu site con mejor posicionamiento que tus propias páginas.

Tags: , ,

NSLU2 y SlugOS

Transmission sobre un NSLU2 con SlugOS

Finalmente me di por vencido intentando hacer funcionar Transmission sobre OpenWRT – no hubo manera humana de conseguir instalar software de optware – así que me he pasado a SlugOS. Sí, no tiene una interfaz web como OpenWRT, pero al menos tiene instrucciones claras y en apenas un rato he conseguido hacer funcionar el cliente torrent Tranmission sin problemas.

Mi recomendación: seguir al pie de la letra las instrucciones del wiki de nslu2-wiki.org.

Tags: , , ,

Instalar un disco duro USB en el NSLU2 con OpenWRT

Después de flashear mi NSLU2, el siguiente paso consiste en añadirle algo de almacenamiento. En mi caso, un disco duro de 400GB que pienso utilizar como almacenamiento en red.

  1. Lo primero, actualizar la lista de paquetes. Esto debe hacerse CADA VEZ que se reinicia el NSLU2 mediante reboot. Si no lo hacemos recibiremos un mensaje An error ocurred, return value: 1.
    opkg update
  2. Instalamos soporte para USB 2.0
    opkg install kmod-usb2
  3. Instalamos el módulo de almacenamiento
    opkg install kmod-usb-storage
  4. Y reiniciamos
    reboot
  5. Ahora ejecutando dmesg debería aparecernos algo parecido a esto
    usb.c: registered new driver usbdevfs
    usb.c: registered new driver hub
    uhci.c: USB Universal Host Controller Interface driver v1.1
    PCI: Enabling device 01:02.0 (0000 -> 0001)
    uhci.c: USB UHCI at I/O 0x100, IRQ 2
    usb.c: new USB bus registered, assigned bus number 1
    hub.c: USB hub found
    hub.c: 2 ports detected
    PCI: Enabling device 01:02.1 (0000 -> 0001)
    uhci.c: USB UHCI at I/O 0x120, IRQ 2
    usb.c: new USB bus registered, assigned bus number 2
    hub.c: USB hub found
    hub.c: 2 ports detected
    hub.c: new USB device 01:02.0-2, assigned address 2
    usb.c: USB device 2 (vend/prod 0xd7d/0x100) is not claimed by any active driver.
    Initializing USB Mass Storage driver...
    usb.c: registered new driver usb-storage
    scsi0 : SCSI emulation for USB Mass Storage devices
      Vendor: Apacer    Model: Drive             Rev: 1.05
      Type:   Direct-Access                      ANSI SCSI revision: 02
    Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
    SCSI device sda: 256000 512-byte hdwr sectors (131 MB)
    sda: Write Protect is off
    Partition check:
     /dev/scsi/host0/bus0/target0/lun0: p1
    WARNING: USB Mass Storage data integrity not assured
    USB Mass Storage device found at 2
    USB Mass Storage support registered.
  6. Ahora ya podemos instalar el soporte para ext3
    opkg install kmod-fs-ext3
  7. Instalamos cfdisk, un fdisk más visual, y e2fsprogs
    opkg install cfdisk e2fsprogs
  8. A partir de aquí ya podemos crear las particiones con cdisk y formatear la partición , cambiando sda1 por el dispositivo correspondiente (un HD conectado via USB normalmente estará en sda1)
    mkfs.ext3 /dev/sda1
  9. Tags: , , , ,

    ¿Qué es el tiempo?

    Al prisionero de Schlisselburg le ocurre al contrario: sus veinticinco años de cautiverio están formados de intervalos de tiempo separados, penosos y largos, desde el toque de diana hasta la retreta, desde el desayuno hasa la cena. Pero la suma de esos hechos pobres logran generar una nueva sensación: en aquella lúgubre uniformidad de paso de los meses y los años el tiempo se encoge, se contrae…

    Así nace una impresión simultánea de brevedad e infinito, así nace una proximidad de percepción entre los concurrentes del baile de fin de año y los que llevan reclusos decenas de años. En ambos casos, la suma de acontecimientos engendra el sentimiento simultáneo de duración y brevedad.

    Hay una sensación que los participantes en un combate pierden casi por completo: la sensación del tiempo. La chica que ha bailado hasta la madrugada en una fiesta de fin de año no puede decir cuál ha sido su sensación del tiempo, si ha sido larga o, por el contrario, corta.

    De la misma manera, un recluso que haya pasado veinticinco años en cautividad en la prisión de Schlisselburg dirá: “Tengo la impresión de haber pasado una eternidad en esta fortaleza, pero al mismo tiempo me parece que sólo llevo en ella unas pocas semanas”.

    La noche del baile estará llena de acontecimientos efímeros: miradas, fragmentos de música, sonrisas, roces, y cada uno de ellos pasará tan rápido que no dejará en la mente de la chica la sensación de duración en el tiempo. Sin embargo, la suma de estos breves acontecimientos engendra la sensación de un largo intervalo de tiempo que parece abarcar toda la felicidad de la vida humana.

    “Vida y destino”, Vasili Grossman

    OpenWRT en el NSLU2

    Después de pelearme durante un buen rato, finalmente he conseguido instalar OpenWRT 8.09 en mi NSLU2, y lo más importante, acceder a él. Aquí dejo los pasos que he seguido.

    1. He bajado la última versión disponible de OpenWRT, la 8.09 en el momento de escribir estas lineas.
      <em>wget http://downloads.openwrt.org/snapshots/ixp4xx/openwrt-nslu2-squashfs.bin</em>
    2. Después he instalado UpSlug, aplicación para realizar upgrades del firmware de un NSLU2.
      <em>sudo apt-get install upslug2</em>
    3. He puesto mi NSLU2 en modo upgrade: desconectas la alimentación, vuelves a conectarla, dejas pulsado el botón de reset situado en la parte posterior y pulsas el botón de encendido sin dejar de pulsare el botón de reset. Después de unos 10 segundos (concretamente 13 segundos en mi caso) el led “Ready/Status” pasará de alternar verde y ambar (naranja) a verde y rojo, momento en el que dejaremos de pulsar el botón de reset. IMPORTANTE: la diferencia entre el ambar (naranja) y el rojo es apenas apreciable – o al menos así lo ha sido en mi unidad y con mi iluminación. Recomiendo estar sumamente atento a pequeñas diferencias de color.  También es importante soltar el botón justo cuando cambia de color, ya que si no no entra en modo reset.
    4. He ejecutado upslug2 desde la linea de comando (paśandole la opción -d wlan0 ya que estoy acciendo via un router wifi), y me ha devuelto un mesaje del siguiente tipo:
      <em>etch:~/nslu2/709# sudo upslug2 -d wlan0
      NSLU2     00:14:bf:70:dc:86 Product ID: 1 Protocol ID: 0
      Firmware Version: R23V63 [0x2363]</em>
    5. He subido la nueva versión del firmware.
      
      
    6. Después de unos minutos he recibido el siguiente mensaje:
      <em>Rebooting...done</em>

    A partir de ese momento ya tenemos nuestro NSLU2 configurado en la dirección 192.168.1.1. Si como yo estáis  en otro rango de direcciones – 192.168.0.* – no podréis acceder al dispositivo ejecutando telnet 192.168.1.1. Para ello antes debéis ejecutar el siguiente comando :

    <em>sudo ifconfig wlan0:1 192.168.1.2 netmask 255.255.255.0</em>

    Eso nos crearía una segunda interfaz de red virtual – wifi en este caso – y nos asignaría la IP 192.168.1.2, por lo que ya nos sería posible acceder vía telnet. Evidentemente, si en vez de estar conectados mediante wifi lo estáis mediante cable deberías cambiar wlan0 del comando por eth0.

    Tags: , , ,

    MySQL sharding con 5.000 millones de PV al mes

    MySQL + sharding + capa de memcache en el acceso a DB + Sphinx para las consultas agregadas. Ideas interesantes, algunas que muchos nos habíamos planteado (memcache en la capa de acceso a datos) y cosas que no sabía, como el table partitioning de MySQL 5.1  (dev.mysql.com/doc/refman/5.1/en/partitioning.html) aunque solo dentro de la misma DB.

    Podéis leer el artículo en http://www.jurriaanpersyn.com/archives/2009/02/12/database-sharding-at-netlog-with-mysql-and-php/. Realmente interesante.

    Tags: , , ,