Redefiniendo y reprogramando el Miedo

Este es el segundo de una serie de tres posts. Haz click aquí para leer el primero.

Me es frecuente ver en las listas de correo del PLUG (el Grupo de Usuarios de Linux de Perú) personas que hacen preguntas que tendrían una respuesta inmediata si se atrevieran a probarlo.
Es entendible que la persona puede tener miedo a arruinar la configuración o malograr algo si intenta un comando o programa que le es desconocido. Es perfectamente razonable, sobre todo si la computadora o servidor es crítico o pertenece a un cliente.

Pero esto entra en contraste con la actitud hacker. Qué quiero decir con la “actitud hacker”? A aquella que no tiene miedo de romper algo para entender cómo funciona.

Es importante detenerme un instante y aclarar el término “hacker.” NO me estoy refiriendo a aquellos vándalos que destruyen por diversión o por falta de autoestima. NO me estoy refiriendo a personas que hacen daño. Estoy hablando de hackers en su término original: desde los fans de modelos de locomotoras hasta Leonardo Da Vinci.

Has visto a esos niños que les regalas un auto de juguete y a las pocas horas ya lo rompieron o desarmaron? Sí? Hay de los dos tipos:

a) Aquellos que lo hacen por descuido, por placer o por un intento triste de llamar la atención de sus padres.
b) Aquellos que lo hacen por curiosidad.

Los futuros Hackers pertenecen al segundo grupo. Su curiosidad por saber cómo es que el auto se mueve por sí solo es más fuerte que su deseo de conservar el auto intacto. Intentarán armarlo nuevamente, pero eso es un plus, una parte del reto.
Dicho en otras palabras, disfrutan más satisfacer su curiosidad que jugar con el juguete en sí. No les importa romper el plástico o perder un tornillo por ahí.

Obviamente, a veces lamentas haberlo roto. Todo tiene un precio.

La curiosidad te lleva a hacerte preguntas y a cuestionar cosas que otros dan por sentado, cosas que otros no quieren ni pensar porque les incomoda la idea que algo podría estar mal. Esta misma curiosidad con frecuencia te mete en problemas (Galileo, alguien?); pero el hacker vive resolviendo problemas. Su mundo está lleno de acertijos por revelar, problemas por resolver, barreras por romper.
Tengo una amiga que cuando vio la chapa de la puerta de mi oficina dijo: “Esta es de las fáciles.” Es la misma que me pidió que desarme mi celular nada más verlo y la que le brillaron los ojos cuando abrí el interior de mi primera laptop — para luego decepcionarse cuando ya no quise desarmarla más.
Lo tiene escrito en la cara: HACKER. Me muero de ganas de enseñarle todo cuanto sé.

La persona que mencioné al principio, la que tiene miedo de echar a perder algo, puede ser un gran entusiasta de la computación, considerarse un gran experto, leerse todas las revistas de computación y un largo etcétera; pero nunca va a llegar lejos, porque carece lo esencial, la pasión que define y caracteriza a un verdadero hacker: la curiosidad que no tiene miedo de malograr.

Así es como muchos borramos todo nuestro disco duro por error. :) Por supuesto que no queremos volver a pasar por eso, pero eso no nos detiene a recompilar el kernel conociendo la posibilidad de que no vuelva a reiniciar. No nos detiene a desarmar inexpertamente la PC para instalar una Sound Blaster Pro conociendo la plausibilidad de que no vuelva a encender. No nos detiene de mandar un hombre a la Luna conociendo la desconcertante tragedia que no podamos traerlo de vuelta con su familia.

Tienes miedo de malograr? Malogra.

Es como esa obra de arte llamada “Buscando a Nemo,” donde el extremadamente desconfiado papá le dice a su acompañante sobre Nemo, su hijo perdido:

– “No quiero que le pase nada!”
Ella, pensativa – “Eso es extraño…”
– “Qué cosa?”
– “Pues si lo proteges para que no le pase nada… pues nada le va a pasar.

Es como participar en esos programas concurso donde puedes elegir el premio o perderlo todo con solamente elegir una puerta. La puerta ganadora? La puerta que te robe todo? Eliges abrir la puerta o quedarte con lo que has ganado hasta el momento?
Oh sí, puedes conformarte con lo que tienes hoy, con la seguridad del momento y no arriesgarte a ganar o perder.

No elijas esa opción. Elige abrir la maldita puerta. Sí, puedes perderlo todo, pero también puedes ganar. Y si no lo intentas, si no te arriesgas vas a vivir hasta el resto de tus días con la pregunta hiriente de siempre: “Y qué si hubiera ganado?”

“Y qué si me lo concedían?”

“Y qué si ingresaba?”

“Y qué si me daban el aumento?”

“Y qué si ella también me quería?”

Como dice mi amigo Oliver, “Sólo hay una forma de saberlo.”

No me importa que no tengas una computadora. Tú eres una máquina. Hackéate a tí mismo.

Sí, te puedes romper las rodillas en el intento. Sí, puedes perder tu trabajo, perder todo tu dinero, ir a la cárcel, ser objeto de burla, que te asalten, que hagan trizas tu corazón, que te mates saltando del avión a más de mil metros de altura.

“Qué rayos estás haciendo?” te van a decir. “Estás loco!”

Y qué vas a contestar?

“Sip. Se me perdió un tornillo por ahí.”

Redefiniendo y redibujando el Miedo

Este post es un extracto de una carta que le escribí a una amiga que no logró una meta importante. Menciono al artista argentino Juan Giménez, uno de mis héroes de juventud, a quien de chico intentaba copiar (con escaso éxito).

Solía dibujar todo a lapicero. No me gustaba el lápiz por dos motivos: había que sacarle punta y manchaba. Oh, por supuesto que el lapicero también manchaba, y manchaba peor! Pero allí estaba yo, dibujando con lapicero, donde cada error lo tienes que disfrazar con otro trazo o, peor aún, con una sombra, o la clásica del cabello negro.

Pasar del lapicero al portaminas fue un progreso. Cada vez que hacía una línea chueca, podía borrarla y dibujarla hasta que quedara bien o hasta romper el papel. Usualmente pasaba lo último.
Dibujar con lapicero es difícil, porque no te da lugar a errores. Y si los cometes, tienes las siguientes opciones:

a) Dejarlo allí.
b) Disfrazarlo (que implica frecuentemente cambiar la idea original).
c) Descartar todo el dibujo.

Con el portaminas y un borrador te das permiso para cometer errores. Lo que hacía era borrar y deshacer las líneas que me habían salido mal. U ojos o bocas que no me salían bien. Borrar está bien, pero había algo que todavía no había aprendido, que todavía no había hecho click! en mi cabeza.

Pasar del borrar un trazo a borrar todo un dibujo entero fue otro progreso, y uno muy grande. La lección es muy clara: “No tengas miedo de borrar,” pero eso tiene un significado enorme. Muchas veces me ha pasado esto: he dibujado un rostro y no he quedado del todo contento. Lo borro para volverlo a dibujar y me sale peor! Y luego lamento haber perdido el rostro original para siempre (nunca lo puedes volver a dibujar). Así que no quería borrar. Empezaba otro dibujo o hacía cambios mínimos.

Empecé a mejorar bastante cuando le perdí el miedo a borrar.

Cometer errores es parte de crecer. Borrar y deshacer cosas está bien. A veces borramos cosas y luego nos lamentamos, pero del mismo modo otras veces obtenemos algo mejor. A veces se gana, a veces se pierde. Lo importante es aprender de las pérdidas. Aprender de los errores. Rescatar la lección.
Tenemos que darnos permiso para borrar. A fallar. A ser humanos. A dejar el lapicero y aprender a:

a) No dejarlo allí, sino hacer algo con ello.
b) No disfrazarlo, sino corregirlo, y estar dispuesto a cambiar de planes.
c) Descartar todo el dibujo.

Aún hoy no dibujo como Juan Giménez, pero definitivamente dibujo mucho mejor que antes. Una razón es haber estado dispuesto a ver mis errores y corregirlos. La actitud y la perseverancia tienen mucho que ver aquí. No se trata de llorar o lamentarse por no ser tan bueno dibujando, sino de hacer algo por ello.

Ahora, una cosa es querer algo y otra cosa es estar dispuesto a pagar el precio por ello. Muchas personas quieren cosas pero no están dispuestas a sacrificar otras cosas con tal de obtenerlo. Es un querer que no llega más allá a un capricho, a un vano anhelo. No es un querer apasionado, del que rompe barreras, del que te amaneces, del que te aferras a ello a pesar de lo feas que se ponen las cosas alrededor tuyo.

Muchas personas sienten pasión y encuentran la cura para una enfermedad rara. Otras, lanzan un avión entero contra las Torres Gemelas. La diferencia entre unas y otras es lo que Dios opina de ambas motivaciones.
Si Dios me ha dado este talento para dibujar no es para que lo use para mi propio provecho, o para mi propia gloria, sino para Su gloria, y para Su uso. Porque así como El me dió estas manos, igual me las puede quitar.

Si prosperamos en algo, es porque Dios lo permite. Si anhelamos algo, como creyentes que somos debe ser siempre para gloria Suya, para uso Suyo. Dios no nos quiere dar algo sabiendo que lo utilizaremos para alejarnos de El. Nuestro Padre nos quiere cerca, lejos del peligro, lejos de Satanás. No quiere que nuestra pasión sea otra cosa que no sea El mismo.

El quiere darnos lo mejor.

Muchas veces “lo mejor” no significa salir siempre victoriosos. “Lo mejor” es a veces fallar, porque de ese modo aprendemos. Porque de ese modo entendemos que quien tiene el control es El, no nosotros. De ese modo aprendemos a depender de El. De ese modo conocemos que El tiene un propósito en nuestras vidas, y que en ese propósito somos completos y felices.

Cómo podemos saber qué es lo que El quiere? Cómo podemos saber cómo ser completos y felices? Esa es una respuesta muy larga que Dios hace tiempo quiere contestarte.

WordPress!?

Así es, he sido seducido por el lado oscuro y ahora estoy usando WordPress.

Y qué pasó con los motores hechos en casa? Bueno, llegué a la conclusión que la mayoría de los features que quería implementar para mi blog eran features existentes de WordPress. Adicionalmente a esto, la falta de tiempo me hizo migrar del todo.

Así que ahora soy parte del club y estoy seguro que empezaré a recibir Comments Spam dentro de poco. Ya veré cómo puedo combatir contra eso, pero ayuda no me va a faltar. :)

Tengo un par de ideas para unos plugins, sobre todo para automatizar mis Journal Comics, pero por ahora esto es suficiente. Vamos a terminar de configurar esta cosa y subirlo a mi website.
Los links antiguos que Google indexó se van a perder, lastimosamente. No tengo ganas de dejar atrás un script que devuelva 302s a las nuevas URLs.

El link a mi feed RSS es ahora: http://jgwong.org/blog/?feed=rss2

Oh bueno, y espero postear un poco más seguido.

Procesando mails con procmail y PHP

Este año quiero poner cosas más, um, edificantes en mi blog. Así que empezaré comentando esto que picó mi interés hace (muchas) semanas atrás.

Nestor Sertzen nos cuenta su forma de procesar mails usando procmail y PHP (y bash) aquí y aquí, sin embargo la forma cómo lo hace es un tanto ineficiente.

Su flujo básicamente es:

  • Recibir el correo con procmail
  • Pasarle el correo a un script en bash
  • El script en bash crea un fichero temporal con las últimas 5 líneas
  • El script en bash llama al script PHP con el nombre del fichero temporal
  • El script en PHP procesa la información y escribe a STDOUT, que está redireccionado a “/home/nestor/proceso”
  • El control regresa al script de bash, quien envía por mail el contenido de “/home/nestor/proceso”
  • Las ineficiencias principales son las siguientes:

    1) Usar bash para recortar las últimas 5 líneas del correo. Esto lo podemos hacer en el mismo script de PHP ya que de todas formas vamos a tener que recibir todo el mensaje.
    2) Usar un fichero temporal para pasarle las líneas a PHP. Bueno, esto no tiene mucho de malo, pero podemos evitar esto recibiendo de frente el mensaje con PHP.
    3) Esta falla si es grave: la redirección de la salida del script de PHP a “/home/nestor/proceso”. Si dos procesos PHP coinciden, uno puede chancar el fichero del otro. No hay una diferenciación por nombre como sí se hace previamente con el fichero temporal.
    4) El script de bash envía el resultado usando el comando “mail”. Esto también lo podemos hacer en el mismo PHP, con lo cual nos evitamos el posible conflicto descrito en el punto 3.

    Entonces, lo podemos mejorar de la siguiente forma:

  • Recibir el correo con procmail
  • Procesarlo todo con PHP
  • Profit!
  • El siguiente ejemplo está basado en un script mío llamado littlesister-getaddress.php. Lo que hace es recopilar el “From:” de todos los mails que me llegan.
    Mi script también es hackish, pero sirve de ejemplo. :)

    Llamamos al script de PHP directamente desde procmail:

    :0:
    * ^Subject.*(Numera)
    | /home/jgwong/bin/littlesister-getaddress.php
    

    Y en el script de PHP leemos todo el correo para procesarlo:

    #!/usr/bin/php
    <?php
    // Little Sister GetAddress 1.0
    // written by jaime g. wong <jaguar@paperclip.com.pe>
    
    $address_file = "/home/jgwong/.little-sister";
    
    $list = file ($address_file);
    
    $f = fopen ("php://stdin", "r");
    
    while ($line = fgets ($f)) {
        echo $line;
        
        if (preg_match ("/^From: (.+?)\$/", $line, $match)) {
            $email = trim ($match[1]);
            
            // ignore rules
            if (in_array ($email . "\n", $list) || strpos ($email, "orkut")) {
    //            echo "X-LittleSister: Found " . $email . "\n";
            }
            else {
                $e = fopen ($address_file, "a");
                fputs ($e, $email . "\n");
                fclose ($e);
            }
        }
    }
    
    ?>
    

    Lo importante del script es cómo se lee el contenido del mail desde procmail, que viene por STDIN y luego se procesa. No hay ficheros temporales intermedios, lo cual nos evita posibles conflictos. Escribimos en STDOUT el contenido recibido para que procmail siga con su flujo. Fíjense que hay un código comentado donde añadía una cabecera más al cuerpo del mail.

    Me quedé sin tiempo, mas espero que les sea útil. Si descargamos alguna librería para parsear mails (seguro hay alguna en PEAR) podemos hacer un poderoso script para procesar nuestros mails.

    Una idea que tengo para reducir mis distracciones en el trabajo es un filtro por importancia. Mi idea es retener mensajes no importantes por cierto tiempo e inyectarlos en mi buzón de entrada. Así los mensajes importantes (los del jefe, los de clientes VIP o cuentas especiales de notificación) sí pasan inmediatamente.

    Enero 06, 2006

    <drmad> Simba, mi hermana y su cuerpo de ropero

    jc

    Así es, fui a verla.

    Oliver me pasó el dato que también la estrenaban aquí en Ica (sorpresa de sorpresas). No puedo comentar mucho porque mañana tengo muchas metas qué cumplir en el trabajo y debo acostarme temprano.
    Les recomiendo altamente que vayan a verla. Hubieron pocos cambios, pero lo importante está allí, intacto.

    “Aslan… is on the move.”

    Enero 03, 2006

    Square One, otra vez
    Y arrancamos un nuevo año. Lamento no tener tiempo para hacer un resumen de metas logradas y no logradas como el año pasado, por dos motivos fundamentales: el primero es que no tengo mucho tiempo, jeje. Estoy aprovechando el tiempo muerto mientras subo unos avances para que el cliente los pueda ver. El segundo motivo fundamental es que, contra todos mis pronósticos, mi vida dió un giro revuelto todo el año pasado — de tal modo que todos mis planes quedaron desbaratados.

    Así que iniciamos el 2006 con la lección aprendida: sé flexible — muy flexible — en tus planes. No contaba con viajar a Lima durante tanto tiempo (casi ocho meses), ni comprarme una laptop (y una tableta Wacom, y un controlador MIDI, y…), ni abandonar tantas metas y cumplir otras que fueron apareciendo al instante. Fue todo un año lleno de entresijos e incertidumbre.

    Con esto no quiero decir que ha sido un mal año. Ha sido un muy buen año, fabuloso, excitante, deprimente, frustrante, doloroso y prometedor. Ha sido un año de revelaciones y de fuerzas que no sé de dónde salieron.

    Estoy contento de verme a mí mismo y saber que he cambiado, he crecido, he madurado y aprendido muchas, muchas cosas durante todo este tiempo — no sólo de mi carrera sino también de mi vida personal, emocional y espiritual.

    Aquí vamos, 2006! Me pregunto qué sorpresas nos traerá este año… ha sido un 2005 fascinante y presiento que este año será fascinante también.