Quote of the GET: If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside. Robert X. Cringely

Archive for geek

Private folder in Dropbox

I wanted to have a directory in my Dropbox where every file placed get some sort of encryption. They might be personal pictures (if you know what I mean), finance notes, patent ideas, or the like. I create those files constantly, often with my phone. While I would like to back them up on the cloud, I don’t need to access them regularly. The problem is that I don’t want my phone to storage them (at least not plain) for obvious reasons. And, on top of this, Android’s Dropbox app does not allow to disable synchronization by folder.

So, here is the scheme I came up with. Maybe it is also useful for you or you get some idea how to improve it.

You will need an always-on-line computer with Dropbox client (for Dropbox synchronization), GnuPG (for cipher the files), and a really nice tool called incron (which monitors a directory and trigger actions).

The instructions:

  • Install the needed software in your box. Dropbox can be downloaded from here and the packages gnupg and incron.
  • Import your pgp key in the local keyring. Take a look to this if you don’t know how.
  • Create a folder called private in your Dropbox.
  • Create somewhere (I did it in /opt/cipherPrivateDropbox.sh) the following script:
    #!/bin/sh
    gpg --recipient "<your ID>" --trust-model always --encrypt $1
    rm $1

  • As root, give access to your user to incron: echo luciano > /etc/incron.allow
  • As that user, run incrontab -e and include the following line:
    /home/luciano/Dropbox/private IN_CREATE,IN_NO_LOOP /opt/cipherPrivateDropbox.sh $@/$#

That’s all, each time you put something in your private folder, incron will cipher it and leave it there.

Comments (5)

Building co-authorship graphs with Google Scholar

Google Scholar allows researchers to customize a profile web page with their publications. This is one of those good ideas, where everybody wins. Google gets information checked by the owner of it, while researchers organize their own work to easy find related papers and people; everything towards more and better Open Access.

Unhappily, Google Scholar is one of those Google corners that is horrible, aesthetically and technically. The contrast with Microsoft Academic is evident: the latter looks way much better, even without Silverlight installed, and has a way embed your publications in some other web page; while Google Scholar is not available to the Google AJAX API nor similar. On top of this, academic web pages have a tendency to be particularly ugly by them self (mines included), like the 2.0 wave never hit this coastline.

So, in order to contribute somehow, I wrote a small Python module to fetch author information from Google Scholar. The code available for forking is here and any ideas (specially in form of patches/pull-request) are welcome.

Combining this module with my deep ignorance about JavaScript and D3 I wrote these lines to create some graphs like this one (here is the animated version):

Feel free to use whatever you want and try to put some beauty to those ugly academic pages. Comments, code and orientation about data visualization are appreciated. It works relatively fine if you are not a prolific researcher (or a PhD student, which is mostly the same :P). Check out these progressive examples: Bart van Delft, Pablo Buiras, Arnar Birgisson, Alejandro Russo, Andrei Sabelfeld (more than 3000 citations in 87 publications), and David Sands (almost 100 publications)

Comments (1)

Broken Galaxy S3 + Broken Galaxy S3 = Working Galaxy S3

Sí… por raro que parezca, no soy muy cuidadoso con la tecnología.

Durante el pasado Noviembre, un auto le pasó por arriba a mi teléfono, un relativamente nuevo Galaxy S3. No viene mucho al caso cómo ocurrió esto. El hecho es que increíblemente siguió funcionando durante una semana, aunque con algunos achaques. Una noche, motherboard y cargador reventaron al unísono. Tal vez la batería visiblemente destrozada o simplemente algo húmedo en su interior hicieron que vaya a la búsqueda de un reemplazo.

Me dispuse a buscar el mismo hasta en el color por dos razones:

  • No quería recordarme a mí mismo que estaba pagando un teléfono que ya no tenía cada vez que metía la mano en el bolsillo.
  • El S3 es un teléfono increíble, con un excelente hardware y un diseño muy resistente. Después que un auto traccionó su frente contra el asfalto y el vidrio no se ralló siquiera un poquito entendí que el Gorilla Glass es uno de los mejores inventos del mundo.

Así fue como compré en una tienda inglesa otro S3, con muy poco uso.

Pero…

Ayer mi relativamente nuevo teléfono cayó dos pisos. No viene mucho al caso cómo ocurrió esto. El hecho es que la pantalla interna se astilló y dejó de funcionar, pero se lo escuchaba hacer sonidos y parecía butear.



click para agrandar

Así fue como entre los dos me hice un nuevo frankenstein.
A grandes rasgos, del motherboard “para abajo” (hacia la pantalla) quedó el viejo, salvo el auricular frontal (se escuchaba medio choto) y el motor para la vibración que, abollado bajo la rueda, yo no andaba. También aproveché para poner nuevo el botón de volumen y el interior posterior. Estas dos últimas cosas las había comprado durante la semana que el primero llegó funcionar dado que se habían perdido y roto respectivamente, aunque llegaron a mi buzón cuando ya no parecían necesarios.


click para agrandar

En general el proceso fue estúpidamente fácil gracias a un tutorial youtubero (nuestros hijos ya no harán más preguntas, todo está explicado en YouTube), un destornillador relojero, maña y unos 30 minutos encorvado sobre la mesa.

click para agrandar

Como junto con la pantalla vienen cosas exteriores como el marco, mi actual teléfono tiene una pinta medio apocalíptica. Quién sabe, tal vez ayude a disparar tema de conversación en alguna reunión.

Moraleja: Do it yourself. Es divertido, barato y uno tiene ese orgullo de habérselas arreglado… que no es poco. Antes de intentarlo, fui a la una casa de reparaciones. Pero acá es ilegal hacer reparaciones sin garantía y sin “repuestos oficiales”. Así que me forzó a animarme.

Ahora nuevamente con teléfono, ya debería empezar a pensar en extender mi seguro para cubrir este tipo de percances en el futuro. Veré…

Comments (2)

there is no cabal.. but, what’s a cabal?

In my long trip to Nicaragua I made progress in my reading: Quicksilver, by Neal Stephenson. In the Spanish edition the title is Azogue. But I’m assuming that you are not a Spanish speaker. Here is a small fragment (in English) I found there:

“You must remember that the planters are short-sighted. They’re all desperate to get out of Jamaica—they wake up every day expecting to find themselves, or their children, in the grip of some tropical fever. To import female Neegers would cost nearly as much as to import males, but the females cannot produce as much sugar—particularly when they are breeding.” Daniel had finally recognized this voice as belonging to Sir Richard Apthorp—the second A in the CABAL.

It’s a bit embarrassing when I discovered myself realizing where the word cabal comes from. And I’m posting this as a head-up for everyone who know there is no cabal in Debian; but they don’t know which is the origin of the word cabal.

Stephenson changed the name of the historic cabal, a group of high councillers of King Charles II of England, Scotland and Ireland, in 1668. In the novel, they are: John Comstock (Earl of Epsom), Louis Anglesey (Duke of Gunfleet), Knott Bolstrood (Count Penistone), Sir Richard Apthorp and Hugh Lewis (Duke of Tweed). In the real world they had been:

Thomas Clifford, 1st Baron Clifford of Chudleigh (1630-1673). Henry Bennet, 1st Earl of Arlington (1618-1685). George Villiers, 2nd Duke of Buckingham (1628-1687). Anthony Ashley Cooper, 1st Baron Ashley of Wimborne St Giles (1621-1683). John Maitland, 1st Duke of Lauderdale (1616-1682).

This group shared the effective power in a royal council rather than the King.

Comments (3)

Mi abuelo y su siesta

El último año nuevo estuve con mi familia en una quinta, cerca de Zárate, donde pasamos algunas semanas, fiestas incluidas.

Una de las tardes, no recuerdo con exactitud cual, mi abuelo Cocó se despertó algo confundido de la siesta y lo ayudé a levantarse. De camino al baño lo noté desorientado, por lo que le comenté:
- Estamos en la quinta, te acabás de levantar de la siesta.
Mi abuelo siempre tuvo un sentido del humor muy particular. Después de una pausa observó:
- Parece que sigo vivo…
Le sonreí,
- Sí. Así parece.
Levantó la mirada y me devolvió la sonrisa. Se lo veía cansado. No ese agotamiento de quién se rinde. Sino del quién se considera hecho, sabiéndose con el deber cumplido de haber cosechado todo lo que sembró.
- Qué lindo sería… qué lindo algún día irse a dormir la siesta y no levantarse más.

Hoy esa tan esperada siesta llegó, tal como lo planeó.

Mi abuelo Cocó fue de las personas más admirables que conocí en mi vida. Disfrutaba de cosas muy sencillas, como escuchar y releer letras de tangos, salir a pasear en auto o ir a tomar mate a la rotonda. A la vez era extremadamente complejo, inquieto y curioso.

De empresario a inventor, pasando por mecánico, transportista, herrero y cerrajero, parecía querer entender como funcionaba cada detalle del mundo que lo rodeaba; lo que hoy sería un hacker, en el sentido más romántico e inmaculado de la palabra.

Siempre andaba buscando algo que leer. Solía levantarse asegurando que, durante la noche, había encontrado la forma de solucionar ese problema que parecía imposible el día anterior. Construía herramientas para construir piezas con las que después construía cosas. Modificó un colectivo (un 1114) transformándolo en una casa rodante para llevar a pasear a sus nietos. Fabricó un triciclo motorizado de la nada (hasta las llantas eran caseras) y lo hizo con pedales “para que aprendamos a manejar”. En su taller, mi primo y yo pasábamos veranos enteros y él nos enseñaba a usar herramientas mientras hacíamos nuestros propios juguetes. Recuerdo que de un taco de madera hicimos el casco de un barquito (después de mucho cincel, cepillo y lija) y que transformó un reloj despertador a cuerda en un motor que movía una hélice hecha de lata.

Fue el mejor profesor que tuve y sus enseñanzas tienen una increíble aplicabilidad diaria. Cuando no sé si algo puede tener o no electricidad, le arrimo el dorsal de la mano mientras pienso que así lo hace el abuelo. Frases como “se lo hacemos de acero inoxidable”, “medir dos veces y cortar una” o “si no existe, se inventa” eran ya sus clásicos.

Cuando alguien hace alguna referencia a que mi calvicie no parece haber venido en los genes de mi viejo, suelo contestar “mi abuelo materno es pelado”, mientras me digo a mí mismo: “y espero tener la suerte de que la falta de pelo incluya al menos una centésima parte de su sapiencia”.

Ser nieto de mi abuelo Cocó ha sido un orgullo en sí mismo.

Lo voy a extrañar muchísimo.

Comments (8)

Corriendo Debian en un server fanless

Debido a una reciente mudanza, he bajado unos servers que tenía corriendo en casa de mis padres. Sin embargo, en mi nuevo hogar estoy en proceso de generar una nueva DMZ, esta vez, sin ventiladores.

El primer paso de este proceso ocurrió en forma de weekend project y consiste en hacerme de un “servidor”. Las comillas hacen referencia a que no se trata de un gran server sino un procesador ARM de 200Mhz y 32MB de RAM, lo que es suficiente para que corra Debian y algunos otros servicios que pueden ser interesantes.

Los ingredientes

  • Un all-in-one LAN server que es la forma en que DealExtreme llama a unos dispositivos con chips de la familia str8132. Dado que vamos a instalar snake-os en ellos (en este caso se trata de la versión 1.3.2-20111019), es importante chequear la lista de compatibilidad. En particular me hice de un NS-K330 por 40 dólares.
  • Storage USB, puede ser en la forma de stick o como disco portable.
  • Un RS232 to TTL level converter, también conocido como cable para Nokia N1200/1208/1650/2630/2670. Es para conectarse por serie a la consola. No lo necesitamos ahora mismo, pero está bueno tenerlo a mano en caso de brickearlo, aunque es un procedimiento que no explicaré esta vez.

Instalación de Snake-OS

Es realmente sencillo. Lo primero es bajar snake-os, desde la sección de downloads de la web. Es importante que el archivo sea de la forma snakeos-<versión>-from-original.zip Instalar el que dice from-snake lleva definitivamente al brickearlo y recuperarlo puede ser complejo.
Desde la página de administración del dispositivo hay que subir el archivo snakeos-<versión>-from-original.bin contenido en el zip bajado. Confirmar el md5sum no está de más.

Acceso inicial

Los datos para acceder a la nueva interfaz con el browser:

http://192.168.0.240 (si es que no hay un DHCP en la red)
usuario: admin
contraseña: snake

Por SSH la contraseña de root la misma y, al cambiarla por la página de administración, se cambia en todos los accesos.

Post instalación

Incluso cuando Max opine que el uso de memoria virtual está rumbo a la extinción (lo cierto es que tal vez no es la mejor idea cuando el storage es de estado sólido como en los pendrives), activé el uso de SWAP desde el menú Service-Swapfile.

Si se quieren las mismas prestaciones que se tenían con el firmware original, hay que instalar unos paquetes adicionales. El sistema de paquetes que utiliza snake-os es opkg y tiene que ser primero activado desde Service-Opkg. Los paquetes pueden bajarse desde la página de download de snake-os y se instalan desde System-Packages. En particular, pueden ser interesantes (siempre pensando en los features originales):
Transmission: Es un cliente de BitTorrent, para dejar tus descargas corriendo. Es bastante mejor que el original.
miniDLNA: Es el server de streaming compatible con DLNA/UPnP-AV. Está un poco verde, pero se está trabajando en su mejora.

Corriendo Debian dentro

Las instrucciones están acá. Aunque esto es lo más obvio y necesario:

wget http://snake-os.googlecode.com/files/debian_chroot.tgz
tar -xvf debian_chroot.tgz
mount -o bind /proc /usb/sda1/debian/proc
mount -o bind /dev /usb/sda1/debian/dev
chroot /usb/sda1/debian/

Esta instalación base requiere unos 200MB. Tiene todo el potencial de un Debian (¡porque lo es!).
Claro que falta ajustar varios detalles, pero será la piedra inicial para el resto.

Comments (2)

YAPAJ: Just another post about Jobs

Tengo noticias: Se murió Steve Jobs.

¿Qué? ¿Ya lo sabías? No me extraña, si hoy estuviste conectado aunque sea accidentalmente a Internet, no tuviste forma de esquivar esta novedad. A mí el final del día también me encuentra en esta situación de hastío y me sorprende que aún no hayas dejado de leer dado que este es simplemente-otro-post-acerca-del-fallecimiento-de-Steve-Jobs. Es claro que el evento fue difícil de ignorar, aunque no estoy seguro de que esto hable bien o mal del finado. Y a hablar bien y mal es a lo que dedicaré las siguientes líneas.

Seguramente, como yo, leíste todo el día comentarios a favor y en contra. En general, mucha gente en los extremos. Me parece que en estos momentos es importante el zoom out, porque en los bordes es difícil reflexionar.

Los hechos: Steven Paul Jobs, en adelante SJ, fue el cofundador de Apple, una de las empresas de tecnología más importantes de la actualidad. A los 26 años, cuando Apple salió al mercado de valores, SJ ya era millonario y tapa del Times. ¿La razón? La Apple II, una computadora que no ocupaba una habitación entera para hacer cosas útiles, había iniciado la industria de la informática tal como la conocemos hoy. Y eso fue solo el comienzo.

No tan malo: Ésta es la parte que considero fácil. Posiblemente las buenas características de SJ son también las más obvias y ya la leíste por ahí, así que haré énfasis en lo que yo considero clave para entender la muerte de SJ como una pérdida.

El Macintosh 128K, lanzado en 1982, ya usaba lo que se conoce como la metáfora del escritorio. Es decir una interfaz gráfica de usuario intuitiva que simulaba las características de un escritorio, como carpetas, archivos y papeleras donde tirar las cosas que ya no queremos. ¿Te suena? Hoy es una cosa dada por obvia. Si bien el concepto es anterior, Apple fue el primero que lo comercializó con éxito. Esto se debe en parte a que incluyo un dispositivo llamado mouse (o ratón, si sos ibérico). También te suena, no? Aunque tal vez estoy siendo sobrestimado lo técnico. Después de todo, seguramente la raíz del éxito se deba a que SJ se encargó del marketing y la publicidad. Eran tiempos en donde la computación era cosa, ya no nerds o geeks, sino casi de científicos. Tal vez por esto, lo intrincado y feo estaba a la orden del día. Posiblemente el mayor mérito de SJ sea el haber traído belleza y diseño a ese mundo, así como usabilidad y funcionabilidad. Desde el diseño minimalista del packaging aquel Apple II, hasta los conectores de voltaje magnéticos de las actuales MacBook (llamados MagSafe). Todo parece estar perfectamente pensado para su uso.

La familia de sistemas Mac OS inspiró las hermosas interfaces en programas como iOS (el sistema que corren los iPhone). Su lista de patentes (la gran mayoría referida a diseños más que a elementos técnicos), dan una idea aproximada del impacto de sus creaciones en nuestra realidad.

Todo esto, combinado con un extraordinario carisma, una gran capacidad de oratoria y un managment que, para lo entendidos, es modelo, hacen que hoy mucha gente esté triste por su fallecimiento.

No tan bueno: Acá es donde intento hacer contrapeso a la postura de idolatría que se repitió demasiado hoy. Supongo que es políticamente incorrecto embestir contra un finado. Y es que una vez muerto, todos hablan de tus logros y no tus pifies. Incluso cuando estos fueron del tamaño de un elefante embarazado.

En primer lugar, el mérito inicial del desarrollo técnico de la Apple II (así como de la I) es de Steve Wozniak, a quien no tengo problemas en referirme como genio (por razones que quedarán para otra circunstancia, o para cuando se muera :P). A SJ siempre le importó más lo estético que lo técnico. Como ingeniero esto me rompe un poco, pero no es su peor faceta.

SJ, como CEO de Apple, fue el principal responsable de que sus productos se cuenten entre las cosas más restrictivas que existen en la faz de la tierra. Y quiero dejar afuera el hecho de que el software involucrado en sus dispositivos no sean libre. Me refiero a componentes explícitamente hechos y diseñados para limitar las libertades de los usuarios. Empecemos por donde hay que empezar:

En un principio, era posible hacer clones de los primeros modelos de Apple II. Esta posibilidad era técnica, pero cuando los clones empezaron a ser mejores y más baratos que los producidos por la ya-no-tan-inminente compañía, SJ empezó a perseguir legalmente a sus creadores. El resultado de este trauma infantil puede verse hoy cuando, a diferencia de sus primos PC, no es posible comprar componentes estándares de cualquier fabricante para dispositivos Apple.

Apple fue de las primeras empresas en implementar DRM en sus dispositivos. Esto es, tecnologías con la cuales se puede limitar, por ejemplo, la copia de cierto software o canciones en pro de los “derechos de autor”. Podés aprender más acerca de como el DRM limita tu vida aquí.

La interoperabilidad es otra pata de la misma política. Los dispositivos iPod, iPhone, iPod Touch y iPad son muy difíciles de gestionar sin iTunes, del cual no existe una versión libre ya que los protocolos que los dispositivos usan son privativos y fueras de todo estándar. Por otro lado, el iTunes original es en sí mismo un pisoteo a la privacidad de los usuarios porque es monitoriable. Hay un excelente capítulo de The Simpsons que se burla de esta situación (ver 1, 2 y 3).

Esto tipo de cosas convierte a SJ y a Apple en una especie de club en donde la entrada es el sobrevalorado precio de un artículo que lejos está de beneficiar a la sociedad. Lejos de ser un aporte a la humanidad los productos se transforman en obstáculos dentro de la creación colectiva del conocimiento. Guerras de patentes y demandas cruzadas generan miedo a la innovación. Lo que debería ayudar al desarrollo de la sociedad se transforma en lastre. SJ fue uno de los principales promotores de la privatización del conocimiento y de la idea que compartir está mal.

En conclusión: Es importante mantener la perspectiva No estoy seguro de calificar a SJ como un genio. Sin duda modificó la realidad en la que vivimos hoy y es claro que merece reconocimiento. Pero también es claro que pudo haber hecho las cosas distintas para que más personas se beneficien de su capacidad de ver más allá. Ahora tendremos que esperar 70 años (lo que en términos tecnológicos significa nunca) para que algunas de sus creaciones pasen al dominio público. Tal vez un concepto de libertad más completo no hubiese permitido que hoy Apple sea la empresa con mayor capitalización bursátil del mundo. Pero yo esperaría este tipo prioridades en las personas que llamo admirables. ¿qué sus creaciones son bonitas y funcionales? No lo dudo. Pero mucho menos se a dicho de la música que producía el flautista de Hamelín. Al menos así lo veo yo.

Lo que dejé afuera de discusión: Decidí dejar argumentos que creo que ensucian la reflexión. Estos son:

  • Las denuncias sobre trabajo infantil y explotación de trabajadores en fabricas chinas de la compañía. Creo que es algo que va más allá de SJ. Es producto de otros factores y afecta muchísimo al mercado de la tecnología en su conjunto.
  • Filantropía: Al retomar el control de Apple en 1997, SJ eliminó todos los programas de filantropía de la empresa. Hay muchas empresas que no hacen beneficencia y aún así son socialmente responsables. No creo que sea algo criticable, per se.
  • La dieta anti-cancer: Se dice que SJ retrasó su tratamiento contra el cáncer de páncreas (cuya variedad era curable) por intentar curarse con una dieta anti-cancer. Además de tener cuestionable fundamento, creo que es un tema que pertenece a su esfera privada.

Comments (5)

Lessons Learned: El personnummer y la identitetskort

personnumer, sustantivo: Número de identificación personal (aunque también podría traducirse, con cierta malicia, como número de persona).

identitetskort, sustantivo. Literalmente, tarjeta de identidad. También llamada id-kort.

Hace unas semanas me ocurrió la siguiente situación con un vendedor en un local de telefonía celular.
- Hola, dado que voy a pasar un tiempo en la ciudad, me gustaría tener un número móvil con contrato.
- Excelente, contamos con muchos planes. ¿Tenés tu personnummer?
- Aún no, posiblemente esté al llegar, empecé el tramite hace un par de semanas. De todas forma, quisiera ir averiguando los precios.
- Mm… sin personnummer es poco lo que puedo hacer.
- Bueno, podés ir dándome los precios.
- Claro, para personas sin personnummer tenemos este astronómicamente-caro servicio con tarjeta prepago.
- Emm.. pero a mí me gustaría un contrato.
- Pero no tienes personnummer.
- Mm… tal vez sea que mi inglés no es muy bueno, tendré mi personnummer en unos días…
- Volvé en unos días y estaremos encantados de ayudarte…

El personnummer es un número que identifica a las personas en estas tierras. Los locales, lo obtienen al nacer. Y los residentes debemos tramitarlo al entrar al país. Incluso este sitio recomienda iniciar el trámite antes de desempacar. Es que el número en cuestión se necesita para absolutamente cualquier cosa, desde para abrir una cuenta de banco hasta sacar un libro de la biblioteca o rentar una bici por más de 3 días.

Algunos locales usan la expresión ¿ya estás en el sistema? cuando se enteran que hace poco llegaste. Uno virtualmente no existe sin su personnummer. Tenerlo significa que estás folkbokförd (literalmente, registrado en el libro de las personas) y sos parte armoniosa de la svenskar. Permite, entre otras cosas:

  • Sacar una cuenta en un banco.
  • Tener servicios (como el de telefonía celular) a tu nombre.
  • Casarse.
  • Acceder a seguridad social (jubilación y subsidios) y servicios médicos.
  • Votar a los representantes de tu comuna/barrio (o municipio, no entendí bien…).

La oficina de impuestos (la Skatteverket) es la encargada del registro de personas (folkbokföringsregister). Y se lo toman enserio. Historial de direcciones postales en Suecia y en el exterior así como actual y pasados estados civiles, hijos y personas a cargo, propiedades, salario, y hasta el lugar en donde te entierren (sic). Todo queda registrado y es accesible por organismos como bancos y aseguradoras. Si te mudás, tenés que avisar a la Skatteverket y tus servicios llegarán a tu nueva dirección. Así, out-of-the-box.

Aunque en internet hay varias historias acerca de complicaciones relacionadas con el personnummer, hacerse de este número a mí me resultó relativamente fácil. Vas a la oficina de Skatteverket más cercana con tu pasaporte y tu uppehållstillstånd (permiso de residencia). Cuatros semanas después (plazo que puede variar según la época del año) recibirás en tu domicilio la perssonbevis (certificado de persona) con el número en cuestión. Siempre y cuando no haya problemas con dirección postal.

La identitetskort es al personnummer lo que la cédula es al número de documento. También llamada ID-kort es una tarjeta que contiene alguna información biométrica como la firma y la foto. A diferencia del personnummer, que es gratuito, tiene un costo de 400 coronas suecas (unos 250 pesos argentos) y es, en principio, opcional. Se ve así:

Digo en principio, porque en la práctica es bastante distinto. Por un lado, para muchos trámites reemplaza al pasaporte como identificación. Por otro, el letrero Visa leg, tack!(que significa, gracias por presentar su identificación, otro día hablaremos sobre lo indirecto de las peticiones en esta cultura) es moneda corriente. Al usar la tarjeta de crédito, comprobar tu personnummer o contratar servicios, la ID-kort es tu identificación y sería realmente complicado no contar con ella. Solía pensar que mi uppehållstillstånd tarjeta de residente, que se ve a continuación) podía cumplir ese objetivo, pero no resulta ser así, por lo que también tuve que tramitar esta credencial.

El personnummer en sí mismo. El número personal como tal es una cosa bastante simpática. Se empezó a utilizar en 1947, año en el que a todos los habitantes se le asignó uno. Son 10 dígitos con el siguiente formato:
YYMMDD-CCEV,
donde, YYMMDD es el año, mes y día de nacimiento. El dígito V es un dígito verificador, introducido en 1967. La parte CCE es arbitraria, aunque el dígito E contiene la información de género (impar para varones, par para mujeres). Hasta 1990 los dígitos CC codificaban la provincia (län, en sueco) en la que la persona había nacido. Como el rango del 93 al 99 estaba designado para los inmigrantes, el sistema fue criticado porque podía causar discriminación (otro día hablaremos del valor de la equidad en la cultura nórdica) y la codificación se dejó de utilizar en 1990. Además, y esto es mi opinión, la codificación provincial debió haber limitado muchísimo los rangos disponibles, por lo que posiblemente esta fuera otra razón para evitarla. Otro problema que se evidencia rápidamente al ojo friki es esta suerte de Y2K bug al haber dejado solo dos dígitos para el año, sobretodo con la esperanza de vida en alza. La primera persona que padeció este bug fue una tal Beata Brolin f. Johansdotter quién murió en 1948 con 106 años. Cuando un año antes de su fatídico día le asignaron su número personal, resultó que doña Beata tenía un personnummer de un menor de edad, por lo que no podía comprar puchos o alcohol (ni ganas tendría a su edad). La solución (vamos, el hack) que encontraron en ese momento fue reemplazar el guión por un signo más (+). Así, el procedimiento oficial indica que, al cumplir 100 años, uno debería cambiar su personnummer reemplazando el - por el +. Dado lo atado que una persona vive a este número, cambiarlo no debe ser un tramite sencillo. Una razón más para morir joven. O para no cambiarse de sexo, lo que también requiere cambio de personnummer.

Muchas entidades ahora están utilizando el personnummer en un formato de 12 dígitos, al agregar el año completo. Posiblemente esta sea una buena solución, aunque rompe un poco el algoritmo para el dígito verificador y aún no es una práctica oficial.

El problema de la escasez de números también es real. Hay que tener en cuenta que reusar números puede significar que te toque pagar una deuda ajena. Se sabe que hay unos 16 mil número reusados, es decir, 16 mil pares de zapatos en los que espero nunca estar por lo complicado que deben de ser sus vidas burocráticas. Una de las razones por la que esto ocurre es que los nacimientos no tiene una distribución uniforme. En Febrero de 2007 se percibió una fuerte escasez de números para el 1º de Enero y Julio correspondiente a los fines de 1950 y principios de 1960. ¿La razón? En algunos países, cuando se registra a un mayor del que no se conoce la fecha de nacimiento exacta, se les asigna como nacimiento el 1º de Enero o Junio (dependiendo de la fecha estimada). En 1995 Suecia entró en la Unión Europea y grandes cantidades de inmigrantes de mediana edad vinieron a estas tierras en busca de mejores oportunidades laborales. Y estas personas también tuvieron su personnummer.

Un surrealista paper académico (altamente recomendable para lectura de fin de semana) da cuenta de que, en Diciembre de 2007, la fecha más popular de nacimiento entre los varones era el 1º de Julio de 1957 (con 405 personas), mientras que para las mujeres era el 1º de Enero de 1966 (con 341 personas).

Otras lecciones aprendidas en Suecia, aquí

Comments (3)

nos volveremos a ver

Un día como hoy, pero de la semana pasada me estaba subiendo a un avión con, por primera vez en mi vida, un ticket one-way. El destino: Gotemburgo (o Göteburg, como le dicen los locales). Pasó hace solo una semana y, sin embargo, siento que fue hace meses. Muchísimas cosas pasaron. Muchísima gente conocí. Muchísimas cosas aprendí. ¡Y espero con entusiasmo las que aún quedan por pasar, conocer y aprender!

Como me resulta complicado ordenar mis ideas en prosa, voy a por secciones:

La universidad

El lugar donde en el que voy a trabajar y estudiar durante los próximos años es el departamento de Data- och informationsteknik (o Computación Científica e Ingeniería, en criollo), en Chalmers. Físicamente queda ubicado en el edificio EDIT, en la sede Johanneberg. Allí ya tengo una oficina asignada y parece estar todo preparado para que empiece el 1º de Septiembre, según lo planeado. El 20% del tiempo tengo que dedicarlo a la enseñanza, así que durante este término seré TA (Teaching Assistant, algo así como un Ayudante de Trabajos Prácticos) en la materia Cryptography.

Primera escapada

Durante la segunda semana de Septiembre estaré en Bélgica, particularmente en Leuven. En FAST2011 aceptaron un paper que escribí con Eduardo. Es mi primer publicación relativamente importante y preparar su presentación me está llevando una buena porción del día. Este evento es satélite de uno más importante, llamado ESORICS2011, donde otros estudiantes de Chalmers presentan trabajos, por lo que también estaré allí. Como mis obligaciones terminan el Viernes, tengo pensado pasar el fin de semana en Bruges. Si estás por ahí entre el 10 y el 18, no dudes en avisar!

Hospedaje

El guest service de la Göteborgs Universitet me asignó un pequeño pero confortable departamento en Skanstorge, un céntrico barrio de la ciudad. Lamentablemente es provisorio y tengo que dejarlo en Octubre. Dado que es una ciudad mayormente de universitarios, conseguir donde alojarse no es una tarea sencilla. Así que buena parte del tiempo está abocado a esta búsqueda.


La organización de los próximos posts

No estoy seguro si los lectores de este blog utilizan las categorías. Están a la izquierda y permiten que el lector se subscriba a un tema específico de este heterogéneo blog. Por ejemplo, los temas sobre mi estancia en Suecia pueden encontrarse en la categoría Sweden. Tengo pensado abrir una nueva categoría llamada Lessons Learned donde, fiel al estilo pedante de este blog, comentaré algunas cosas que me llaman mucho la atención sobre el cómo se vive por aquí con la esperanza que le pueda ser útil a alguien.

Gente con quién hablar español

Es cierto que parte de la aventura es el idioma. Pero también es cierto que puede desesperar, sobre todo cuando viene mezclado con temas culturales y de difícil comprensión para el extranjero. Por suerte acá hay mucha gente con quién hablar la lengua de Cervantes. Por un lado, gracias a Emilio, me uní al grupo de Facebook “Argentinos en Gothenburgo”. Resultó ser una gran ayuda en temas gastronómicos y otros relacionados con la cultura local. Por otro lado, en la universidad hay varios hispanohablantes que también facilitan mucho la entrada a mundo sueco, entre ellos Alejandro y Ana.

Las fotos

Resolví subir la fotos “diarias” a Picasa, el servicio de álbumes de Google. Se las puede encontrar aquí. La razón principal por la que lo hice de esta forma es bastante tonta y tiene que ver con que mi mamá puede bajarlas en buena calidad para imprimirlas (sí, ella imprime las fotos). Vieja, eso se hace desde el botón Download. Subir fotos en buena calidad (y a solo 5 dolares anuales los 20G) está bueno. Lo malo es que quien quiera comentarlas tendrá que tener una cuenta Google (las de Gmail, vamos). Sorber y soplar.
Pueden subscribirse al álbum para que se les notifique cuando hay nuevas fotos vía mail (que creo que también requiere tener cuenta) o por RSS. Las fotos de viajes y eventos específicos seguirán en http://www.lucianobello.com.ar/fotos/.

Nos volveremos a ver

Antes de irme, Pato me hizo un emotivo video de despedida. Muchas gracias a todos los que participaron en él. El mismo gira alrededor de la frase “nos volveremos a ver” en alusión a la canción calamarera. Pues.. así será. Mañana sacaré el pasaje para ir a Buenos Aires a pasar las fiestas y Guadalupe ya tiene los suyos para venir (y traerme las cosas que me olvidé :P) en Noviembre. Sin duda nos volveremos a ver y habrá muchas aventuras que contar!

Comments off

Ciudad K explicado

Primero lo primero, visita:

www.ciudadkexplicado.com.ar

A continuación la explicación de qué es eso.

Cada vez que voy al viejo continente redescubro la tele española. Está llena de programas de humor, muchos de ellos increíblemente graciosos, incluso cuando varias gracias se pierden por no ser local. La última vez que estuve ahí no fue la excepción. Santiago me habló de un programa llamado Ciudad K (sin relación con los K de acá).

Ciudad K es un ya finalizado show de 14 capítulos, dirigido por el genial José Antonio Pérez, que fusiona el humor y el geekismo de forma épica. En esta hipotética ciudad, los habitantes tiene un nivel cultural e intelectual sobresaliente y las situaciones son de lo más bizarras. Todos los capítulos se encuentran en línea y son altamente recomendables.

Les hablé de esta serie a muchos conocidos freaks/nerds/geeks, y con ellos solemos comentar algunos gags que allí aparecen. Así fue como hemos notamos que ninguno de nosotros entendía todos los chistes, dado que abarcan un amplio espectro entre física, tecnología, economía, cine, artes plásticas, psicología y otras ramas de la cultura y la ciencia. De hecho, rápidamente descubrimos que conversar sobre Ciudad K era una muy divertida forma de aprender nuevas cosas, especialmente en las áreas en las que uno es un completo ignorante.

Así fue como levanté www.ciudadkexplicado.com.ar, un espacio en donde espero que se pueda conversar sobre los temas que se tocaron en la serie mientras se aprenden cosas nuevas y posiblemente inútiles.

Este viejo procrastination project lo tenía pendiente desde hacía meses y lo que se ve (así de feo) es el resultado de un arrebato de aburrimiento y de las ganas de saber que tan lejos se puede llegar con Google Sites. Pasé por varios vericuetos técnicos que, supongo, explicaré en otro post.

PD: Lo lamento José, soy un tío :P

Comments off

alchemy: jugando a ser dios (ó cómo hacer trampa con Python)

Creo que esto de usar Python para hacer trampa se me está volviendo vicio. Es que hay veces que las cosas te piden a gritos que tomes un atajo. Y esto fue lo que me pasó esta semana.

Primero un poco de contexto. La semana pasada conocí, a través de Microsiervos, un juego llamado Alchemy. Consiste en combinar los cuatro elementos clásicos griegos (tierra, agua, fuego y aire) para generar nuevos elementos y a su vez, otros con estos.

Se los comenté a varios conocidos y se engancharon. El tope (al menos de momento) es 200 elementos y, como se trata de un juego muy divertido y adictivo, en un tiempo razonable se puede superar los 100. Los elementos son cada vez más complejos, incluso uno se empieza a obsesionar con la idea de crear human :P

El problema llega cuando uno se estanca y la tentación de hacer trampa se hace inevitable.

Atención: a partir de este momento el post es una especie de spoiler en donde se explica cómo llegar al final del juego sin jugarlo. Si estás jugándolo y lo disfrutas, deja de leer inmediatamente.

Con mirar rápidamente el código de la página, uno puede descubrir cómo funciona. Parece haber un archivo en donde se definen las relaciones de los elementos por un número identificador y otro donde está se mapean estos identificadores a nombres. El siguiente script me ayudó a organizar la información muy rápidamente:

Así, si quiero saber cómo obtener el elemento egg:

$ ./alchemy.py -g egg
egg = life + stone
egg = bird + bird
egg = turtle + turtle
egg = lizard + lizard

Si quiero saber para que me pueden servir los elemetos dough y sea:
$ ./alchemy.py -f dough sea
bread = fire + dough
cookie = fruit + dough
ocean = water + sea
seaweed = plant + sea
beach = sand + sea
wave = wind + sea
tides = moon + sea
seasickness = sickness + sea
algae = plant + sea
horizon = sky + sea

Para obtener todas las combinaciones:
$ ./alchemy.py -g all
que da este listado. Me pareció interesante hacer algunos grafos con estos datos. Así se puede ver la sección local de light bulb:
./alchemy.py -c "light bulb" | dot -Tpng > light_bulb.png ; display light_bulb.png

Claro que también se puede hacer el grafo completo (si se tiene memoria y tiempo):
$ ./alchemy.py -c all | neato -Tpng > all.png ; display all.png
Así se genera una imagen enorme de la que se puede ver un fragmento a continuación (click acá para verla completa, son 13MB 12027x 13593).

Fue divertido, incluso cuando evidentemente no fui el primero en notar esto y basta con googlear un poco para conocer las soluciones. En lo personal, consideré parte del juego escribir el código que lo resuelve y lo usé de excusa para hacer algo con optparse, que lo tenía pendiente.

Comments (4)

Avancez

Este post también está escrito en español.

If you follow me on Twitter/Facebook, you probably know that I went to Gothenburg, Sweden, during my last trip to Europe. But you probably don’t know what I did in such remote city.

Few months ago, I applied to a PhD student position at Chalmers. I was lucky enough to be shortlisted, so I went to some in-situ interviews. And, incredibly, I have been accepted! :-)

Chalmers is a TOP 100 university. Most of the papers I read during the last months has been written by Chalmers researchers and for me is a great honor to be part of an academic institution with such prestige.

I’m going to move to the nice Gothenburg city in August. And I’m happy :)

Comments (8)

parser para fórmulas de lógica proposicional (o una somera introducción a pyparsing)

La semana pasada empecé a cursar, de oyente, dos materias en Exactas: Lógica y Computabilidad y Teoría de Lenguajes. En la primera, empezamos a estudiar algunos conceptos de cálculo proposicional. Al final de la clase, el profesor sugirió escribir un pequeño parser que reconozca fórmulas de lógica proposicional. Dado que venía con ganas de entender mejor pyparsing, me pareció que podía ser una buena forma de empezar.

Primero, la teoría. Dado el alfabeto A, A^* es el conjunto de palabras que pueden formarse combinando sus elementos.
A=\{ \to , \wedge , \vee , \neg , ( , ) , p , \prime \}
Existe un tipo particular de palabras, a las que llamamos variables.
Var=\{p , p\prime, p\prime\prime ,  \ldots \}
Es un conjunto infinito y, dado que puede ser tedioso contar la cantidad de primas, las variables pueden ser referenciadas como p_n, donde n es la cantidad de primas. Así, parece razonable pensar que no todas las palabras son válidas a la hora de escribir una fórmula (que es como llamaremos a las palabras válidas).

Ejemplos de fórmulas:

  •  p_2
  •  ( ( p_3 \wedge p_5 ) \to ( \neg p_2 \vee p_5 ) )
  •  \neg \neg ( p\prime \vee p_{1232} )

Ejemplos de no-fórmulas (palabras que no forman una fórmula):

  •  \neg\prime
  •  ( p_2 )
  •  p_3 \vee \wedge

Si bien es más o menos intuitivo qué es una fórmula y qué no, es necesario definirlo en un sentido formal. Así  Form \subset A^* y es el conjunto de las palabras que cumplen:

  1. si \alpha \in A^* y \alpha \in Var, entonces \alpha \in Form
  2. si \alpha \in Form, entonces \neg \alpha \in Form
  3. si \alpha,\beta \in Form, entonces ( \alpha \circledast \beta)\in Form. Donde \circledast=\vee,\wedge,\to

Nada más es una fórmula.

Ahora, a la práctica. Queremos escribir un parser que, dada una palabra, reconozca si es una fórmula. Y para esto vamos a jugar con el módulo pyparsing, para python.

Lo primero es definir el conjunto de variables.

>>> from pyparsing import Word
>>> variable=Word('Pp',"0123456789'")
>>> variable.parseString('p1')
(['p1'], {})
>>> variable.parseString("P'")
(["P'"], {})

Así, variable reconoce los posibles nombres de variables. Toda expresión que sea parseable por variable, es una formula. Para el punto ii. hay que definir una estructura recursiva. Utilizaremos el bang (!) para la negación.
from pyparsing import Forward
formula=Forward()
ii='!' + formula

Caso similar en el punto iii.. Para esto hay que definir los operadores, que son and (&), or (|) y then (<).

operador=Word('&|>',max=1)
iii='('+formula+operador+formula+')'

Por último, definimos una fórmula cómo una variable (i.) o una negación de una fórmula (ii.) o una operación entre fórmulas (iii.).

formula << ( variable | ii | iii )

Y esto es, básicamente, nuestro parser:

>>> formula.parseString("(p1 | p4)")
(['(', 'p1', '|', 'p4', ')'], {})

Lo dicho, con un poco más de contexto y en un único archivo, a continuación:

Comments (1)

how to hack a h4ckc0nt3st

Hace unas horas acabo de volver de A Coruña, donde pasé unos excelentes días entre charlas y talleres de excelente nivel técnico y amigos en las Jornadas de Seguridad Informáticas organizadas por GSIC.

Pero este post tiene otro objetivo que contar lo lindo que fue. Así que si esperabas algo blando, puedes dejar de leer acá :P (las fotos estarán online en breve). Lo que sigue es la respuesta larga a la pregunta que me realizaron varias veces en los últimos días: ¿Estas jugando al h4ckc0nt3st?. La respuesta corta era sí, lo estoy haciendo en este exacto momento, aunque no de la forma tradicional.

El contexto

Durante la conferencia, Miguel organizó un muy divertido hack contest. El objetivo era llegar a una respuesta a través de la resolución de diferentes desafíos. Dicha respuesta se metía en un formulario web (que escuchaba en http://10.20.63.1:666) y de esta forma se acumulaban puntos.

El hack

Dado que la red sobre la que se hacía el concurso era una wifi abierta y que el servidor recibía las respuestas de los participantes en texto plano (no usaba SSL), pensé que sería divertido escuchar las respuestas de los demás concursantes. El paso siguiente de enviar dichas respuestas a mi nombre resultó inevitable. De esta forma, cada vez que alguien enviaba una posible respuesta a un desafío, yo también respondía lo mismo. Logré automatizar ello con las siguientes líneas:

tshark -T fields -e data -i mon0 -R 'ip.dst == 10.20.63.1 and tcp.dstport == 666 and ip.src != mi.propia.ip ' | ./loro.py

Donde loro.py este archivo:

La explicación

Tshark es la versión de consola de wireshark. Este toma los paquetes de una interfaz en modo monitor (lee esto para aprender cómo). El modificador -f es el encargado de darme solo aquellos paquetes que vayan al servidor. Excluir del filtro a mi propia IP evita que el sniffer vea mis replayes y entre en loop (tardé en darme cuenta de esto, perdona Miguel por floodear tus logs). El script loro.py recibe el campo data de los por stdin (línea (#) 5), lo decodifica en ascii (#7), y chequea si es una respuesta (#8). Después lo divide y busca la cookie (# 9 a 11). Al encontrarla, la reemplaza por mi propia cookie (#12, fue una suerte práctica que no caducara). Luego vuelve a juntar todo (#13), lo imprime en stderr (#14, con fines de logging, nada más) y lo envía de nuevo al server (# 15 a 18).

Como dicen por acá, ¡a que mola!

Comments (7)

exportando cumpleaños de Facebook a Google Calendar

Ocurre que soy realmente malo para recordar eventos. Muchas veces me comprometí a estar en dos lados simultáneamente y me olvido de hacer tal o cual cosa. Mi desorden se extiende a cosas repetitivas, como los cursos o cumpleaños. Para intentar apalear este mal, utilizo Google Calendar intensamente. Es por esto que intenté exportar las fechas de cumpleaños a mis calendarios. Pero cuando intenté hacerlo out-of-the-box me encontré con unos incordios:

  • No hay forma de exportar solo un subconjunto de las fechas
  • Con los cambios de DST, hay eventos que duran dos días
  • Los eventos no son de días completos, sino que van de 12am a 12am
  • No quedan como eventos editables normales

Los eventos se ven algo así:

Y la verdad que están horribles. Así que realicé estos 5 sencillos pasos:

Paso 1

Fui a los eventos de cumpleaños en mi perfil, donde puse exportar cumpleaños.

Así, facebook me proveyó una URL, que empieza con webcal://

Paso 2

Esta URL, reemplazando webcal por http, la utilicé para obtener los eventos, en formato CSV:
wget "http://www.facebook.com/ical/b.php?uid=2XXXXXX4&key=3XXXXXXX8" -O facebook.csv

Paso 3 (opcional)

Dada mi política de aceptar-todo-contacto en Facebook hay muchos eventos que no quisiera incluir en mi calendario. Por lo que generé una lista de los que sí quiero tener:
rgrep "^SUMMARY" facebook.csv > lista.txt
Y después borré de lista.txt aquellos que quería excluir.

Paso 4

Escribí el siguiente script:


El cual convierte los eventos de facebook en eventos lindos. Se ejecuta así:
./fb2gc.py facebook.csv lista.txt > miscumples.csv
El parámetro lista.txt es optativo, si pasaste por el Paso 3.

Paso 5

El archivo generado se pueden importar en Google Calendar, en un calendario existente.


Y ahora, tengo agendados los cumpleaños de forma mucho más agradable.

Comments (8)

secure information flow analysis: my first steps

During the last months and have been reading a lot about information flow analysis, with the remarkable Eduardo Bonelli‘s guidance.

Some months ago, as an exercise, I wrote two analyzers for a really short command set of Python (while, if and assign). Before remove that directory, it occurred to me that may exists a remote possibility that someone might find it interesting. So here it is, with a quick and dirty introduction to secure information flow.

The goal, in short words, is to avoid that variables tagged as secret (high confidential level) doesn’t leak to public variables (low confidential level). This may happen in two ways:

  • Explicit: A high variable is assigned to a low variable
  • public:=secret

  • Implicit: A low variable content depends on the content of a high variable
  • if secret == true
    then public:=true
    else public:=false

If there is no leak, we said that the code satisfies non-interference (wikipedia link). You can learn more about secure information flow analysis in the web. In my humble opinion, this is a good introduction.

A typical way (certainly not the only one) to detect these leaks is with type systems. This was the approach in both analyzers. The first one is a sort of an implementation of a fundation paper, by Volpano et.al.. I made an algorithm version (probably wrong) of the typing rules exposed in the paper. The code is here. This type of analyzers are called Denning-style, because Denning and Denning introduced those concepts in a 1977 paper.

The second analyzer (the code is here) is based on the formalism presented by Hunt and Sands in this paper. It’s a dynamic analyzer (Denning-style analyzers are static), which means that the non-interference can be broken in subprograms and still be good as a whole. This may be a little tricky. For example, this code is secure (the leak was overwritten with a 0) even when a subprogram (without the last line) is insecure:
public:=secret
public:=0

Anyway, that’s all for now. The analyzers are written in Python, using the Abstract Syntax Trees module and python-lattice (yes, this is what that stupid library is for). If you want to play more, here is a tarball with the code, the papers and few examples to analyze.

Comments off

operating elements of a finite lattice is now easy(?)

In the context of my recent readings about Information Flow analysis, I wrote a little (tiny) Python module to operate elements of a finite lattice. Here is the code and usage tutorial. Comments are welcome. Patches to my broken English in the main page are very welcome.

Comments (2)

my first UserScript

Gracias a Germán Osella Massa y su charla Userscripts – ¡Porque la web no siempre tiene que ser como es! impartida en las 6ºJSL de Junín conocí más acerca de Greasemonkey. Esta simpática extensión de Firefox permite pos-procesar, JavaScript mediante, una página web.

Después de pasar largos ratos recorriendo el repositorio de scripts, instalando y probando, quise escribir mis propios scripts. Mi primera idea era un reproductor embebido de archivos wav para Gmail, dado que necesito escuchar los mensajes de mi contestador automático ahí. Como para primer proyecto resultó un poco complicado, me puse un objetivo más modesto. Así fue como publiqué mi primer UserScript, un previewer de audio para Google Docs. Dado que no suelo escribir mucho JavaScript, comentarios y parches son bienvenidos.

UPDATE Dec 8, 2010 @ 18:43 ART: En vez de forkear el proyecto de Leith Caldwell, decidimos hacer un merge en el suyo, con más tradición. Así que ahora el script está disponible aquí.

Comments (2)

eventé, eventando y eventaré

He estado (y lo estaré) de evento en evento. Así que acá va un pequeño resumen. Tal vez a alguien le sea útil o pueda lamentarse de no haber ido a aquellos que ya ocurrieron. Si tenés pensado ir a alguno en donde nos encontremos, no dudes en inscribirme para tomar una cerveza.

En el pasado:

En el futuro:

  • 10º Jornadas Regionales de Software Libre: En San Luis, el 28, 29 y 30 de Octubre. Este año no podré asistir, pero se corre la bola de que va a estar muy muy buena.
  • Google DevFest 2010 Argentina: En Buenos Aires, 1 y 2 de Noviembre. Si bien la inscripción ya debería haber terminado, yo lo hice fuera de termino y parece que tengo la confirmación. El procedimiento requiere dar respuesta un breve quiz.
  • BSDday Argentina 2010 (una web muy geek): En Buenos Aires, 5 y 6 de Noviembre. Me inscribí hace meses y no voy a poder ir (por la razón que se comenta en el siguiente item). El año paso la pasé muy bien y este año las charlas realmente prometen.
  • 6º Jornadas de Software Libre: En Junín, 5 y 6 de Noviembre. Hablaré Linux Capabilities y Hardening. Muchísimas gracias a los organizadores por invitarme. El programa se ve muy interesante y será una excelente oportunidad para reencontrarme con amigos y visitar la ciudad.

Comments (3)

the king is obsolete-ish. long live the king

Ya hace un par de semanas de que tuve la oportunidad de cambiar mi Thinkpad X60 (1706-8DU) por una Thinkpad X200 (7454-RF2), la que ya se encuentra completamente funcional y migrada. La instalación fue relativamente sencilla y la velocidad de computo con su antecesora es notable (aunque mi madre opine que ambas computadoras son iguales).
A continuación el correspondiente pase de mando:


Mi aún-no-tan-vieja laptop ha tenido una jubilación algo prematura y está a la búsqueda desesperada de un entusiasta geek a quien servir. Si estas interesado, visita www.lucianobello.com.ar/vendo-x60/ para más detalles.

Comments (3)

« Previous entries Next Page » Next Page »