Lessons Learned: Fettisdagen y Semla

Fettisdagen, (martes de carnaval). Fet es grasa, mientras tisdag es martes. El sufijo en es el artículo determinado. Por lo tanto, el martes graso

Semla, Comida. Etimológicamente, viene de semilla. También llamado fastlagsbulle, es una berlinesa (bola de fraile, que le dicen) con crema y pasta de almendras en su interior.

SemlaFlickr
En el post sobre Lucía ya hemos hablado sobre lo sorprendentemente apegado que son los suecos a ciertas fiestas de origen religioso, incluso cuando solo el 23% de ellos dice cree en algo llamado dios (ya no decir "ser cristiano"). Este parece ser un nuevo caso de lo mismo.

En Argentina, así como en muchos (por no decir todos) países de América existe el carnaval. En otras palabras, festejar y comer antes de los 40 día de ayuno y penitencia por la Cuaresma que comienza el día siguiente, es decir, el Miércoles de Ceniza.

Acá, y en otros países nórdicos, no parece haber carnaval. Lo que sí hay es Fettisdagen. Éste podría ser un martes de lo más común, si no fuese porque se consumen enormes cantidades de semla.

Casualmente, ese martes me tocó ser el anfitrión del PhD fika (cuando los estudiantes de doctorado nos juntamos a tomar café y conversar), por lo me subí a la tradición y los invité con semla de distintos sabores. El sabor está dado por la crema, que puede ser común, de vainilla, con canela y otras variantes.

Los semlor (plural de semla) es algo tan popular en la cultura sueca que un detective de cuentos para chicos llamado Ture Sventon es adicto a estos (y también vuela en una alfombra mágica, pero no viene al caso).

Y este podría no ser único caso sueco de adición a semla. En el siglo XVII, rey Adolfo Federico habría muerto (literalmente) de un atracón después de clavarse 14 porciones de semla (tradicionalmente servidos con un tazón de leche caliente) como postre.

La receta, aquí.

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.

Lessons Learned: Lucia

Lucia, fiesta (13 de diciembre). Tradicional fiesta sueca asociada a Santa Lucía de Siracusa, el solsticio y las velas.

Según el santoral católico, el 13 de Diciembre (o sea, en un par de horas) es el día dedicado a Santa Lucía. Dato que seguramente pasa totalmente desapercibido para la gran mayoría de la personas del mundo. A menos claro, que se sea habitante de Suecia (o de Sicilia, pero no viene al caso).

El día de Santa Lucía, o simplemente Lucia como prefieren llamarlo acá, es de la fiestas más importantes de la cultura sueca. Y, como extranjero, me es sumamente difícil de entender como en un país tan poco religioso algo así tiene cabida. Así que analicemos los hechos.

La santa en cuestión: Durante el siglo III y principios del IV vivió en Siracusa (una ciudad de Sicilia, Italia) una joven católica de familia potentada llamada Lucía, quien tenía intensiones de consagrarse a Dios. Pero un despechado pretendiente la denunció a la autoridades (eran tiempos de persecución a los católicos) y fue enjuiciada y sentenciada a muerte. La tradición cuenta que se ordenó torturarla arrancándole los ojos y que aún así siguió viendo por milagro divino (sí, lo que tiene en la bandeja de la estampita son un par de ojos). Más datos sobre su vida en la Wikipedia y referencias.
Es, obviamente, patrona de los ciegos. También, aunque bastante menos evidentemente, de los electricistas, choferes, afiladores y cristaleros. Tal vez en este último caso exista alguna relación con el tradicional arte de soplar vidrio que existe en Suecia.

Su asociación con la luz: El nombre Lucía, hace clara referencia al latín, Lux. La leyenda de los ojos también parecen referir a la luz (o a la falta de ésta). Aunque no pude encontrar referencias, algunas personas me comentan que Santa Lucía fue condenada a la hoguera y que el fuego no la consumía. Y que por esto hay velas durante la celebración. Aún más simpático es que parece ser que, por errores acumulados durante la Edad Media en el calendario Juliano, la festividad de Lucía coincidía con el día más corto del año, el solsticio de invierno.

Conociendo lo odioso que puede ser la oscuridad en estos lares y lo fanático de las velitas y de los artefactos lumínicos que son lo locales, no parece ser tan loco que quieran festejar que los días empiezan a alargarse (aunque esto no ocurrirá hasta dentro de poco más de una semana).

Las velas también pueden hacer referencia a una leyenda pre-cristina en que la noche más larga del año lo animales nocturnos adquirían poderes sobrenaturales (incluso podían hablar) y había que mantenerlos alejados con fuego.

Luciatåg: Significa procesión de Lucia. Es el acto por excelencia y se celebra totalmente independiente de la fiesta religiosa. Se realiza en escuelas (especialmente en las guarderías) y en ámbitos públicos en donde una mujer representa a Lucia llevado "la luz" con una corona de velas (electrónicas en muchos casos, matando cierta divertida tensión macabra). La vestimenta es una túnica blanca ceñida por una faja roja, representando el martirio. Las tärnor (literalmente, golondrinas, aunque también puede ser las damas de honor o doncellas) acompañan a Lucia llevando velas en las manos y cantando canciones tradicionales. Hay más personajes, pero quedarán para otro post.

Entre las muchas tradiciones gastronómicas asociadas a esta época del año, hay una que hace referencia directa a Lucia: los lussekatter. Son como unas facturas dulces de azafrán y que representan ojos. La palabra lussekatt se traduce como gatos de Lucia y se suele acompañar con Glögg, una especie de glühwein local.

Para terminar, durante esta fecha se elige en Estocolmo la Sveriges Lucia. Es una especie de concurso por representar a Lucia a nivel nacional en donde cada ciudad propone su candidata. Las participantes representan a una entidad de beneficencia y tengo entendido que se valoran las cualidades para canto y la personalidad con entrevistas que son televisadas. Se puede votar por tu Lucia favorita a través de SMS, aunque creo que la votación para este año ya está cerrada. ¿Que qué se lleva la ganadora? No tengo idea...

Pero acá les dejo las candidatas finalistas de este año:

Lessons Learned: Pubrunda

Pubunda, sustantivo. Gira trimetral entre bares. Runda es algo así como ronda o circuito.

Al menos en cuanto a educación superior se refiere, el ciclo lectivo sueco (llamado läsår) va de Agosto a Junio y está conformado por 2 términos: el de otoño (hösttermin) y el de primavera (vårtermin). Cada termino está a su vez dividido en dos períodos de estudios (läsperiod, normalmente referenciados como Lp1 al Lp4).

El primer jueves de cada läsperiod se realiza entre los estudiantes la pubrunda. En los períodos pares, ésta coincide con la semana siguiente a los exámenes, por lo que se vive un clima particularmente festivo y relajado. Anoche fue la correspondiente al Lp2 y pude participar por primera vez.

Empezando como a las 6 pm, el campus universitario se empieza a colmar de estudiantes, ávidos de visitar la mayor cantidad de pubs posibles. En cada departamento hay una organización de estudiantes que, entre otras cosas, regentea un pequeño pub o bar. Es una buena oportunidad para estas organizaciones de recaudar efectivo mientras que los estudiantes pueden beber y comer a relativo muy bajo costo. El precio típico de una cerveza es entre 20 y 30 SEK (coronas, menos de 20 pesos argentinos) y se puede conseguir una hamburguesa por 30 SEK. Digo relativamente barato, dado que en estos lares la cerveza suele estar más cerca de las 80 SEK, mientras que una sándwich al paso cuesta unas 60 SEK.

Se puede acceder a todos los pubs del campus con la tarjeta de la studentkår (la unión de estudiantes, que agrupa a todas las organizaciones) y cada miembro puede llevar a un invitado.

Incluso cuando todo el ambiente es muy estudiantil, hay algunas reglas muy estrictas. Por ejemplo, la capacidad de los lugares es limitada y por ninguna razón se puede acceder al lugar si éste llego a su número. En la puerta se llevan contadores de personas para garantizar esto. Otra restricción tiene que ver con beber alcohol fuera del pub. No se puede beber en los baños ni en los corredores o el exterior.

En general es un abiente divertido y se la pasa muy bien. Es una excelente excusa para visitar lugares, conocer gente y beber. Si bien no es muy práctico andar cambiado de bar (las colas en espera de que la gente salga pueden ser largas) mucha gente se divierte completando una especie de grilla de los lugares que visita o las marcas de cerveza que bebe, como la que se muestra a continuación:

No estoy muy seguro si hay algún tipo premio. Pero he notado cierta tendencia por este tipo de juegos. Por ejemplo, muchos bares tienen una noche a la semana que llaman quiz night o trivia night, donde se contestan cuestionarios de cultura general o historia de la ciudad. En algunos casos es sobre música o películas. Todo, al son de la bebida.

Otras lecciones aprendidas en Suecia, aquí

YAPAJ: Yet 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.

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í

Lessons Learned: El lägenhetsnummer

Lägenhetsnummer, sustantivo. Literalmente, número de departamento. Se refiere a la forma estándar de numerar los unidades habitacionales dentro de un edificio.

Como cualquier sudaca, uno suele fantasear con la idea de Suecia como un país extremadamente ordenado. Y lo es en muchos aspectos, aunque no en todos. Uno de estos últimos es la forma de numeración de los pisos y departamentos. Por ejemplo, yo vivo en el segundo piso de un edificio, aunque tengo que subir 3 escaleras para llegar a él. Mi número de departamento es el 911, lo que no tienen ningún criterio. En el edificio en el que trabajo, la planta baja tiene el número dos (además de que cada piso se divide entre este y oeste). Hay otros lugares donde en cada piso hay una letra. Incluso están los que numeran de los pisos en decenas.

Sin embargo, este caos (?) no representa un problema real. Como en la gran parte de las ciudades europeas (sino en todas), los buzones y puertas tienen los nombres de las personas que habitan detrás de éstas. Seguramente es por esto que se sugiere poner el nombre de la persona a quien se envía una carta en letras mayúsculas en el sobre.

Aún así, en 2010 la Lantmateriet (algo así como el departamento de catastro) normalizó la forma en la que se referencia a un departamento dentro de un edificio: el lägenhetsnummer. Este documento de 4 páginas (después de googlear un rato largo pude encontrarlo en inglés) explica los detalles y aquí va mi resumen:

El número. Los departamentos se identifican con 4 dígitos. Los primeros dos para el piso y la última mitad para la puerta. Si el número tiene ceros a la izquierda, se mantienen.

El piso. El accesible desde la puerta de entrada es el 10, mientras que el superior a éste es el 11 y así. Los pisos pode debajo de la planta baja se numeran 09 para el primer subsuelo, 08 para el segundo y así.

Obsérvese que dije el superior a éste. Si los pisos no están alineados (algo muy común por estos lares) el piso se considera el mismo.

Aún con tanto detalle existen algunas ambigüedades. Como si deberían numerarse los los pisos no habitados/habitables y si el departamento tiene entradas en distintos niveles (Gotemburgo tiene muchas colinas y esto ocurre bastante a menudo).

La puerta. Las puertas se numeran empezando por la izquierda entrando al piso. Si una puerta no es habitable, aún así se enumera, como el caso de la puerta 02 del ejemplo (förråd significa depósito).

Las ambigüedades en este caso también existen. Particularmente en el piso 10, donde la entrada al piso típicamente no es por la escalera. Algunos confunden la entrada al piso con la salida del ascensor y no de la escalera.

Para colmo, al menos de momento, los números no normalizados aún conviven con los normalizados (una prueba más de que XKCD tiene razón.). Como resultado de esto nadie sabe con precisión su número y mi impresión es que solo pocos lo entienden.

Para ilustrar va esta pequeña anécdota: Fui a la oficina de impuestos (por razones que quedarán para otro post) y en uno de los formularios tenía que poner el susodicho lägenhetsnummer. Muy campante escribí 911. La oficinista me dijo que ese no podía ser mi número de departamento, porque no tenía 4 dígitos. Me pidió que le describiera el edificio y ella dedujo que mi número era el 1101. Sin embargo, dijo, posiblemente esté anotado en un cartel a la entrada del edificio. Me pidió que lo chequee y que vuelva si no era el 1101. Así fue como fui al cartel en cuestión y noté que el número era 0901. Fui al día siguiente para hacer la rectificación. A las semanas recibo una carta diciendo (en sueco) algo así: « En nuestros archivos figura que usted registró su vivienda con el número 1101 y después lo rectificó por 0901. Ninguno de estos números existe en su edificio. Su número anterior a la normalización es 0911, el cual tampoco corresponde a su apartamento. La oficina de impuestos necesita saber cuál es su número de departamento para poder hacerle llegar notificaciones. Por favor rectifique su número. Respuesta: ..... (espacio en blanco para completar) ». Es evidente que no necesitan este número para hacerme llegar notificaciones. Pero aún así lo necesito para continuar mi trámite, por lo que me di a la búsqueda de mi lägenhetsnummer. En el contrato solo figuraba el número viejo y nadie parecía saber qué numero me correspondía. Después de googlear, leí que es obligación que el lägenhetsnummer figure en una esquina de la puerta que identifica. Y ahí me lo encontré: 1301. Aún estoy a la espera de saber si esta vez le pegué.

Así fue como aprendí sobre el lägenhetsnummer. Hasta donde entendí de lo leído por ahí, la idea de normalizar los números de vivienda es para hacer más eficiente la tarea de la oficina de impuestos. Ésta necesita saber qué personas declararon la misma casa para saber cuantas almas viven con el mismo sueldo, por ejemplo.

¡Si sabes más cosas relacionadas con el lägenhetsnummer deja tu comentario!

Otras lecciones aprendidas en mi estadía en Suecia pueden leerse aquí.

¿para qué sirve?

La casa en la que estoy está amueblada. Tiene muchas cosas muy útiles. Y otras no tanto. La siguiente es una lista de cosas que no se (o no sabía) para que sirven (click sobre la foto para agrandarla):

Resuelto! Se trata de un afilador de cuchillos.
Raps Olja significa aceite de canola. Simpática la traducción de Google cuando se lo pone todo junto. ¿Se puede usar como cualquier aceite? ¿Sirve para algo en particular?
Candelabro de 7 velas. Parece ser algún motivo navideño. Sin embargo puede verse en uso en Agosto.
Está en las ventanas. Dando vuelta a la rueda se abre una pequeña hendija en la parte superior.
cuasi-Resuelto!En la canilla de la cocina esta esta llave de cuarto de vuelta. No parece tener efecto. Me han dicho que es para el lavavajillas (que no tengo). No se los detalles.
Estos pequeños cubos son parcialmente huecos. El agujero no llega a atravesarlos. Los encontré cerca de la ventana.
Es un alambre con ventosas en las puntas y unos pequeños brochecitos. Esta en el baño. Puede ser para colgar la ropa, aunque no creo que soporte el peso. ¿Tal vez ropa interior?

Aportes son bienvenidos :)

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!

quién es quién en #noalcanon (o "remuneración compensatoria por copia privada" reloaded)


Como los jeans nevados, la remuneración compensatoria por copia privada (vamos.. el canon digital) está devuelta entre nosotros. Es que al parecer, las ideas malas tienen una tendencia a la longevidad y si la cosa te suena repetida por estos lares, es porque en Febrero de 2009 ya escribí al respecto en remuneración compensatoria por copia privada…? de acá!!. Y si no volví a mencionarlo fue porque consideré inconcebible dedicarle tiempo a una idea tan mala en tantos aspectos.

Para aquellos que no tienen idea de lo que estoy hablando, esta excelente infografía de derechoaleer.org puede ayudarlos. Si sí sabes que es el canon digital pero no estás al tanto de las últimas noticias, te informo: hoy (miércoles 29 de Junio de 2011) será tratada la ley en el Senado. UPDATE: Para "escuchachar todas las voces" (e.i. esquivar el costo político de un tema que no pintaba tan complejo y que se volvió impopular), el proyecto no se tratará hoy.

Desde este humilde espacio, creo que puedo sumar muy poco a los datos que ya pueden leerse en todos las dos en Internet (recomiendo particularmente noalcanon.org y la crónica de Vía Libre cuando intentaron aportar al debate en la comisión).

Lo que sí puedo considerar un aporte es una lista de las personas involucradas en mapa del canon digital. En tiempos de elecciones me parece fundamental tener memoria y asociar a nuestros potenciales representantes, no a fotos de afiches ni a frases de yogur, sino a hechos concretos:

  • Jorge Coscia, secretario de Cultura de la Nación. Un quijote de los derechos de autor que evidentemente entiende poco de los tiempos modernos. Y sino, escucha esta entrevista.
  • Miguel Ángel Pichetto, senador presidente del bloque Frente para la Victoria. Principal promotor de la ley.
  • Rubén Giustiniani, senador socialista (?!) , presidente de la Comisión de Educación y Cultura del Senado. Copresentador de la ley, fuertemente influenciado con las gestoras colectivas de derecho de autor.
  • Gerardo Morales, senador al frente del bloque UCR. Manifestó que "el bloque está de acuerdo con el proyecto de ley", y que votarían a favor cuando se trate en Cámara.
  • Adriana Bortolozzi de Bogado, senadora de Frente para la Victoria por Formosa. Presentó un proyecto similar pero decidió bajarlo para "no entorpecer el del Senador Pichetto".
  • Daniel Filmus, candidato a Jefe de Gobierno por Frente para la Victoria. Presentó el proyecto de ley en 2009 y después se echó atrás con argumentos poco convincentes.
  • Claudio Morgado, ex presidente del INADI. En sus años de legislador tuvo la misma idea del canon. Después de un bizarro debate en su blog, reculó.
  • Susana Rinaldi, candidata a legisladora por el Frente Progresista (?!) Popular. Apoya la ley y es Vicepresidente 2º de AADI.
  • Teresita Quintela, senadora por La Rioja. Presentó un proyecto similar. Si... otro, las diferencias entre todos pueden consultarse acá.

¿De quién me estoy olvidando?

Como nota al margen y buscando a los promotores de tamaño atropello a los derechos, fui acumulando los nombres de los artista y autores que apoyan la medida. La dejo acá por si a alguien le interesa:
Atilio Stampone (músico, directivo de SADAIC), Jorge Marrale (actor, secretario general de SAGAI), Pepe Soriano (actor, directivo de SAGAI), León Gieco (músico, representante de CAPIF), Salvador Valverde Calvo (guionista, vocal de ARGENTORES), Roberto "Tito" Cossa (escritor, presidente de ARGENTORES), Leopoldo Federico (músico, presidente de AADI), Susana Rinaldi (cantante es la misma de arriba), Teresa Parodi (cantante, Pro-Secretario de Actas de AADI), Paz Martínez (músico, tesorero en SADAIC), Zamba Quipildor (músico, Pro-Tesorero 2° de AADI), Víctor Yunes (músico, secretario general de SADAIC), Carlos Galettini (cineasta, presidente de DAC, altamente recomendable en este debate ).

Tal vez la próxima vez pienses dos veces antes de copiar un disco de Teresa Parodi (cuack). Entre paréntesis va a que rama del arte se dedican, porque algunos son totalmente desconocidos para los que todavía no peinamos canas. ¿Es que será que no entienden el mundo actual? Casualmente, muchos también tienen (o tuvieron) cargos en gestoras colectivas de derecho de autor. Pero estoy seguro que eso es pura casualidad.

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

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.

Avancez

This post is available in English too.

Si me seguís por Twitter/Facebook o te lo comenté en persona, sabrás que durante el último viaje que hice al viejo continente pasé unos días en Gotemburgo, Suecia. Lo que muy posiblemente no sepas es qué fui a hacer a tan remota ciudad.

Hace unos meses apliqué para una posición en Chalmers, como estudiante de doctorado. Tuve la suerte de quedar en la short-list, lo que implicaba que tenía que ir a hacer algunas entrevista in-situ. Y eso fue lo que hice durante esos 3 días. ¡Y me aceptaron! :-)

Así que a mediados del próximo Agosto me estaré reubicando en la linda ciudad de Gotemburgo. Quedan excitantes días en los próximos meses en Buenos Aires, con muchas cosas para hacer y mucha gente a la que me gustaría ver. Así que si estas leyendo esto y me conoces mínimamente, escribime un correo y vamos a por unas cervezas :)

Chalmers es una universidad muy prestigiosa. La gran mayoría de los papers que estudié durante los últimos meses, fueron escritos por estudiantes de ahí y estoy muy contento con la posibilidad de trabajar en semejante ambiente académico.

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

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 $latex A$, $latex A^*$ es el conjunto de palabras que pueden formarse combinando sus elementos.
$latex A=\{ \to , \wedge , \vee , \neg , ( , ) , p , \prime \}$
Existe un tipo particular de palabras, a las que llamamos variables.
$latex 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 $latex 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:

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

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

  • $latex \neg\prime$
  • $latex ( p_2 )$
  • $latex 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í $latex Form \subset A^* $ y es el conjunto de las palabras que cumplen:

  1. si $latex \alpha \in A^*$ y $latex \alpha \in Var$, entonces $latex \alpha \in Form$
  2. si $latex \alpha \in Form$, entonces $latex \neg \alpha \in Form$
  3. si $latex \alpha,\beta \in Form$, entonces $latex ( \alpha \circledast \beta)\in Form$. Donde $latex \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:

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:

loro.py   

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!

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:

fb2gc.py   

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.

¡Nos vemos en España!

Gracias los grandes esfuerzos de Diego el gallego y Chema josemaricariño visitaré España en algo menos de un mes. Las excusas son las jornadas de seguridad organizadas por GSIC y los labs de la RootedCon. Así que vamos por partes.

Qué: Daré un taller sobre seguridad en sistemas Linux
Dónde: En el Campus de Elviña de la Facultad de Informática de A Coruña.
Cuándo: Las jornadas son entre el 24 y el 26 de Febrero.
Qué hay que hacer para asistir: La asistencia es gratuita con previa inscripción, la cual aún no está abierta pero lo estará pronto (posiblemente sea anunciado en @ficsecurity). Hay unas 25 plazas disponibles.
El taller será netamente práctico y será de unas 5 horas, por lo que tengo entendido. Trataremos temas de seguridad básica, como el acceso discrecional, la administración de recursos y PAM. Está orientado a iniciados en la administración de sistemas Linux-like.



Qué: Haré una introducción a la criptografía en uno de los Labs, previos a RootedCon
Dónde: En las Instalaciones Madrid On Rails, en Madrid.
Cuándo: Los Labs son entre 28 de Febrero y el 2 de Marzo. El mío en particular será durante el 1º.
Qué hay que hacer para asistir: La asistencia requiere inscripción previa y tienen un coste de 200 € + IVA. Hay 12 plazas disponibles.
Se puede acceder al temario aquí, aunque puede que dé una incorrecta impresión. En el momento que lo escribí hice demasiado foco en la parte matemática (aburrido!!). Si bien aún lo estoy preparando, el cursillo tendrá un foco mucho más programático. El objetivo es la mejora de decisiones tecnológicas cuando impliquen criptografía. Haremos prácticas en OpenSSL, SSH y PGP.

¿Nos vemos allí?

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.

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.