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í.

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í

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!

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:

La UTN tiene dueño (wtf)

Hernán me pasó un excelente link de Linkedin (redundancia necesaria), la red social orientada a negocios y el mundo profesional, cuya captura reproduzco a continuación:


Mucho se me ha escuchado putear sobre el corporativismo en la universidad en este blog y otros entornos. Pero este fallido es como demasiado :P
El tiempo de estudio es un bonus wtf (y yo que siempre pensé que mis 8 años de carrera habían sido demasiados)...

El borroneo sobre el nombre tiene como fin no darte el dato directamente, una situación parecida a la ocurrida acá. Ya sé que lo podés conseguir, bien por ti.

estoy a esto -><- de ser ingeniero

Estas últimas semanas fueron a puro estudio. Así que finalmente terminé. Si si si, terminé la carrera. Hoy rendí mi último final y el sábado solo me resta firmar proyecto.

Si tuviste un mal año y querés venir a desquitar toda la ira en forma de huevo con un inocente muchacho... Sábado 22 (mañana), a las 3:30 pm en Medrano 951. Os estaré esperando.

fin del semestre academico

Finalmente terminé el semestre académico. Todo hubiera salido de maravillas sino fuese por un tropezón en el final de Inteligencia Artificial, que tendré que volver a dar en septiembre.

Primero, lo prometido (ni que fuera gran cosa). Los dos informes que presenté este semestre y que disfruté mucho de hacerlos. Ambos fueron comentados en este blog durante su confección y vienen acompañados de un poco de código para que pueda verse su parte “práctica”:

  • Algoritmos Genéticos para la Resolución de Sudokus - (Inteligencia Artificial): Como lo había comentado, no esperen nada interesante desde el punto de vista de la resolución. Es, más bien, una ridiculez hecha informe. Planeo hacerle algunas mejoras al programa propuestas por amigos con demasiado tiempo libre.
  • Análisis y Detección de Esteganografía en Audio - (Procesamiento de Señales): Tampoco esperen nada revelador. Aunque creo que también voy a mejorarle la parte algorítmica en algún momento. Si bien es algo más serio que el anterior, su enfoque está muy basado en los lenguajes y funciones utilizadas. Creo que se puede orientar más a lo analítico, por lo que sugerencias son bienvenidas.

El semestre que voy a iniciar es el último antes de convertirme en ingeniero. Quedan 6 materias y el objetivo principal es terminar con un promedio superior a 7.

Otro tema. Gracias a todos lo que me saludaron y felicitaron por mi nombramiento en Debian :-). Sus elogios y empujones de entusiasmo hacen mucho bien.

Esteganografía en Audio

¿Qué tienen en común estos libros?

Son todos referencias del informe de Procesamiento de Señales en el que estoy trabajando este fin de semana: Análisis y Detección de Esteganografía en Audio. Incluye un pequeño programita (mitad en R, mitad en C) para analizar como se deforma el audio cuando es manipulado esteganográficamente. Tengo pensado colgarlo acá en un par de semanas, cuando tenga mejor forma, pero ya afloran algunas conclusiones:

  • Las grandes amplitudes favorecen el ocultamiento
  • Las altas frecuencias también
  • No hay ganancia real en modificar solo un porcentaje de las muestras

¿Interesado en el tema? Estoy a la escucha de sugerencias e ideas, sientete libre de pedir más información.

UPDATE August 6th: El informe y los archivos relacionados ya está publicados.

sudoku, algorítmos genéticos, la estrategia backtracking, programación lineal y R

/* Habiendo leído El curioso incidente del perro a medianoche le tomé cierto buen gusto a los títulos largos :-) */

Hace unas semanas, Mahoo me regaló un pequeño libro con un montón de sudokus para resolver. Si bien conocía el juego, nunca me atrajo particularmente. En esos días, yo estaba buscando algún tema original para uno de los trabajos prácticos de Inteligencia Artificial. La consigna se refería al uso de algoritmos genéticos para la resolución de algún problema. Lo importante no era el programa, sino el análisis de su comportamiento: estudiando, por ejemplo, qué método de cruzamiento se aplica mejor o qué función de aptitud es más representativa.

Viendo como Mahoo se entretenía con alguno de ellos (práctica en la que también se iniciaba) se me ocurrió que un resolver de sudokus podría ser una linda propuesta para mi TP.

Los algoritmos genéticos intentan emular a la naturaleza, a base de prueba y error, favoreciendo a las soluciones más aptas y castigando a las que no lo son tanto. Suponiendo que el cruzamiento de las buenas-soluciones generan aún-mejores-soluciones. Se trata de la búsqueda probabilística, muy parecida a meter muchas soluciones en un cubilete gigante y agitarlas hasta encontrar algo útil.

Al tratarse de un problema determinístico, la solución dista muchísimo de ser óptima. De hecho, ni siquiera se asegura que vaya a haber una solución. Pero me pareció algo simpático de intentar.

El resultado, escrito en mi rústico Python, puede ser bajado de aquí (incluye instrucciones para correrlo en Windows). No, no esperen que funcione bien, advertidos están. Es uno de los peores métodos posibles para este tipo de problemas. Sólo llega a una solución cuando la cantidad de incógnitas es (muy) limitada. Se plantean soluciones a base de llenar de random cada uno de los casilleros vacíos y chequeando cuantos valores se repiten en cada fila, columna y región. Cuando este chequeo da 0, se llega a una solución. Bastante cavernícola como notarán.

Es natural pensar en cuál sería la forma correcta de llegar a una solución. Recordé las clases de Investigación Operativa y la utilización del método simplex para la solución a problemas con restricciones. De hecho, es una solución que muchos proponen. No se si alguno de ustedes lo ha intentado. Yo sí, durante las clases aburridas me senté a pensar como sería el conjunto de ecuaciones y me encontré con una demencial y frustrante cantidad de ecuaciones. Acá hay una linda explicación, la que resumo, haciendo énfasis en las complicaciones:
Se necesitan variables binarias de la forma xijk donde 1 significa que el símbolo k (de 1 a 9) va en la celda (i,j) de la solución. 0 significa que no está. Esto genera un total de 729 variables (93) lo que, como mínimo, asusta. Veamos las ecuaciones:

(1) Para que cada celda (i,j) tenga un símbolo y éste sea único. Se necesitan 81 ecuaciones como éstas (una por cada celda).
(2) Para que en la fila i cada símbolo esté una vez y que en todas las columnas sea distinto. Se necesitan 81 ecuaciones como éstas(una por cada columna y cada símbolo posible).
(3) Para que en la columna j cada símbolo esté una vez y que en todas las filas sea distinto. Se necesitan 81 ecuaciones como éstas(una por cada fila y cada símbolo posible).
(4) Para que en cada región cada símbolo esté una y solo una vez. Se necesitan 81 ecuaciones como éstas (una por cada región y cada símbolo posible).
(5) Representa el enunciado, es decir, el problema a resolver. Por ejemplo, x115=1 significa que en la celda (1,1) hay un 5. Dependiendo cuantos casilleros vengan asignados es la cantidad de igualdades como estas que se necesitan; típicamente, ~30.
(6) Restringe las variables al conjunto binario.

¡En total son más de 350 ecuaciones! Hay propuestas con menos ecuaciones, pero siempre serán muchísimas. Evidentemente, ésta tampoco es la solución óptima (aunque es mucho mejor que los algoritmos genéticos). Y su problema radica en que, desde algún punto de vista, el método simplex no se ajusta al problema. Gráficamente, las ecuaciones representan semiplanos en un hiperespacio multidimencional (de 9 dimensiones?) cuya intersección es, en caso que haya una única solución, un único punto. /* Puede que le esté pifiando en esta conclusión final y cualquier ratificación o rectificación es bienvenida */

Simplex está pensado para restricciones de máximos y mínimos donde el objetivo es maximizar o minimizar y las variables binarias intentan ampliar el método para restricciones de este tipo. Da soluciones múltiples en forma de un polígono, donde a una o más se las llama óptima, porque maximiza o minimiza la función objetivo. Es claro que el problema del sudoku no usa sus ventajas y abusa de sus debilidades.

Curiosamente, cuando comenté este problema a un reciente conocido, surgió que también él tuvo que hacer un trabajo práctico que resolvía sudokus. En este caso, el TP giraba entorno a la gestión de la pila para recorrer árboles. Particularmente, árboles empleados en la estrategia de backtracking. Así pues, éste es su programita, sencillo, simpático y rápido. Gracias Nacho :).

Los métodos basados en búsqueda combinatoria sobre árboles parecen ser particularmente buenas para el problema del sudoku. En la wikipedia figuran dos interesantes formas: backtracking y ramificación y poda.

Para terminar, una última casualidad: Por razones que no vienen al caso ahora y que seguramente provocarán un nuevo post en el futuro estoy aprendiendo un lenguaje para el procesamiento de señales llamado R. Estoy trabajando mucho con una biblioteca llamada sound. Buscándola en el repositorio de bibliotecas, me encuentro con una llamada sudoku. No resistí la tentación de probarla :). Un ejemplo de su uso:

> install.packages("sudoku")
> # es necesario instalar tcltk si se quiere la parte gráfica
> install.packages("tcltk")
> library(sudoku)
> library(tcltk)
> library(tkrplot)
> miSudoku <- generateSudoku(Nblank=50, print.it=TRUE)
  +-------+-------+-------+
  |   6   |   7   |   8 2 |
  | 4 8   |     1 | 7     |
  |       | 8 2   | 5     |
  +-------+-------+-------+
  |       | 1     | 9 7   |
  |       |     2 |   5 1 |
  | 5 1 6 |   9 7 |       |
  +-------+-------+-------+
  |       |   4 8 |       |
  | 6 5   | 7   9 | 8     |
  |       |       |   9 7 |
  +-------+-------+-------+
> # la variable miSudoku es una matriz
> miSudoku
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
 [1,]    0    6    0    0    7    0    0    8    2
 [2,]    4    8    0    0    0    1    7    0    0
 [3,]    0    0    0    8    2    0    5    0    0
 [4,]    0    0    0    1    0    0    9    7    0
 [5,]    0    0    0    0    0    2    0    5    1
 [6,]    5    1    6    0    9    7    0    0    0
 [7,]    0    0    0    0    4    8    0    0    0
 [8,]    6    5    0    7    0    9    8    0    0
 [9,]    0    0    0    0    0    0    0    9    7
> #La biblioteca incluye una función para para solucionarlo
> solveSudoku(miSudoku)
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
 [1,]    1    6    5    9    7    3    4    8    2
 [2,]    4    8    2    5    6    1    7    3    9
 [3,]    3    7    9    8    2    4    5    1    6
 [4,]    2    4    8    1    5    6    9    7    3
 [5,]    7    9    3    4    8    2    6    5    1
 [6,]    5    1    6    3    9    7    2    4    8
 [7,]    9    3    7    2    4    8    1    6    5
 [8,]    6    5    1    7    3    9    8    2    4
 [9,]    8    2    4    6    1    5    3    9    7
> # Incluso trae soporte gráfico para resolverlo en una ventanita :)
> playSudoku()

Así fue como, un simple regalo, un TP universitario y un montón de simpáticas casualidades tuvieron su punto de conexión. Y que divertido que resultó ser :). Ahora tengo que escribir el informe sobre los algoritmos genéticos en el sudoku. La semana que viene espero publicarlo aquí.

UPDATE August 6th: El informe y los archivos relacionados ya está publicados.

Seminario complementario sobre seguridad informática

En el marco de los seminarios complementarios Athena, voy a dar un seminario sobre Seguridad informática. Como olfateo algunos problemas en la difusión, este post tiene como fin invitar gente.

El qué: Seguridad Informatica: criptografia desde su aplicación domestica

El de qué se habla:

  • Teoría: Criptografía fácil y útil. Critografía simétrica y asimétrica. Funciones de hash

  • Uso seguro del correo. Ejemplos de mails firmados y cifrados. PGP y Web of trust.
  • Ataques a usuarios domésticos. Malware y Botnets. Análisis de los antivirus. Precauciones en el gestor de correo. Phishing.
  • Qué es SSL. De qué nos protege. Cómo funciona PKI. Qué chequear cuando ingresamos a un sitio seguro. Precauciones a tener en cuenta. (Keyloggers/teclado virtual)

El dónde:
Sede Medrano de la Universidad Tecnologica Nacional
Medrano 951 - Aula Magna
Capital Federal, Buenos Aires. Argentina

El cuándo: Lunes 16 de abril de 2007, 19:00 hs (próximo lunes)

El cómo: Ir no más, no requiere inscripción previa ni aviso

El para quién: Para cualquiera, alumnos, docentes y profesionales de sistemas, de la UTN o externos en general.

Invitados están todos a venir y a correr la bola.

UPDATE 15-05: Los slides de la charla en varios formatos y con ejemplos, acá.

the WTF exam

Hace unas horas dí el examen final de Simulación, materia de cuarto año de la carrera de Ingeniería en Sistemas de Información. Me entregan mi libreta con un cuatro, y como es una materia para la que tengo cierta facilidad, me llamó la atención lo bajo de la nota.

Me quedé hasta el final para ver mi examen. Una docente me hizo ingresar al aula y se produjo el siguiente diálogo:
Docente: Nombre?
Alumno: Bello, B-E-L-L-O
Docente (buscando en una pila de exámenes): MMm.... no lo encuentro... que nota se sacó?
Alumno (notando que todos los exámenes de esa pila eran aplazos): cuatro
Docente: AAAahhh noooooooo! Tiene que agradecer que lo aprobamos!
Alumno: ??
Docente (indignada): Todos aquellos a los que le pusimos cuatro debería haber tenido tres, pero si desaprobábamos a tanta gente no nos íbamos más hasta terminar todas las revisiones!
Alumno (atónito): eeehh... yo quisiera ver mi examen para ver en que me equivoqué... no pretendo que se me modifique la nota...
Docente (aún más indignada): Los alumnos que está reviendo su examen es porque no aprobaron y tienen que volver a darlo, usted aprobó... váyase antes que lo aplace.
Alumno (mirando al resto de los docentes que agachan la cabeza): Es solo ver mi examen, no voy a ocupar el tiempo de ningún docente... solo quiero saber cuales fueron mis errores para poder aprender...
Docente (mientras me sacaba del aula): Retírese y agradezca que no tiene que volver la semana que viene... feliz navidad!
Terminé de reaccionar cuando estaba a 2 cuadras de la universidad... me costó salir del asombro.

Algunas cosas que aprendí (y en algunos casos confimé) hoy:

  • En mi universidad el objetivo no es aprender sino zafar.
  • En mi universidad, las posibilidades de aprobar aumentan, si hay muchos desaprobados y el reloj marca más de las 10pm.
  • En mi universidad, las resoluciones se escriben al pedo porque no se cumplen y ni hay forma de hacerlas cumplir.
  • En mi universidad el docente tiene el poder de aprobar o no a alguien más allá del rendimiento del alumno en su examen.

    Lo que redunda en una gran lección:

    La Facultad Regional Buenos Aires de la Universidad Tecnológica Nacional da vergüenza, y me deshonra como alumno.

    Lamento haber tardado tanto en darme cuenta, justo cuando solo me queda un año para terminar la carrera.

  • Sucursal universitaria

    Quien me conoce sabe que soy bastante crítico de muchas cosas en mi universidad. Suelo encabronarme bastante cuando veo injusticias, corruptelas, ignorancias o intereses personales mezclados. El lunes me encontré con el hall de entrada de Medrano lleno de gente. Típicamente uno se hace la pregunta: - ¿que regalan?. Y mierda si regalaban.

    Se trataba de una nueva modalidad de distribución del software de una empresa acusada de monopolio a ambos lados del charco y más allá.

    Intrigado, me pongo a conversar con gente del centro de estudiantes, que eran quienes parecían llevar la batuta ahí. Me explicaron que la filántropa empresa había "donado", en un arrojo de bondad (uno de ellos la comparó con Cáritas), licencias para "uso académico" de varios programas. El centro de estudiantes en cuestión no hacía más que "explotar" dicho "convenio" en "favor" del alumnado. El estudiante llevaba un CD virgen, llenaba un formulario en el que vendía su alma al diablo y a cambio obtenía un CD grabado con el software que solicita.

    Mi cuestionamiento era, creo yo, simple y claro: ¿Porqué la universidad destina recursos (gente para repartir, gente para quemar los CDs, inversión en los CDs, Publicidad, etc) en incrementar la cartera de potenciales cliente de una empresa privada? Somos, definitivamente, una sucursal. Putié y patalié.

    ¿Qué gané? El presidente del centro de estudiantes me citó a una entrevista para hablar del tema. Hoy es el día que tengo asignado y espero escuche algunas verdades de mi parte.

    Puede que sea una voz gritando en el desierto. Pero, al menos, seré una voz difícil de callar.

    Traurig für meinen Deutsch

    El sábado tuve mi primera clase de alemán. El curso propiamente dicho empezó el martes y siguió el jueves, por lo que era la tercer clase y me encontré algo perdido. ¿Alemán? ¿Ahora al pibe se le dá por aprender alemán? No es que se me dió así como así. Paso a explicar por el principio, que es por donde se suele empezar.

    En mi universidad existe un programa de becas para realizar un proyecto de investigación en Alemania. Hace un tiempo presente susodicho proyecto junto con una pila de formularios y certificados de requisitos cumplidos. Si bien todavía no tengo aprobado el proyecto es condición, por razones obvias, saber alemán al momento del viaje. Dicho viaje sería en algo más de dos años, por lo que hay que aprender alemán en este plazo.

    Por suerte, la misma universidad provee el curso (de momento gratis, después tendrá un costo mínimo según dicen), el cual es intensivo. Muy intensivo. Se trata de 8 horas de puro clase germana a la semana: Martes y Jueves durante 2 horas cada vez, completando con otras 4 el sábado. Durante los días de semana, en el horario del curso, me dedico al curro (como le dicen los españoles al trabajo), así que se me complica ir. Esto último tendré que hablarlo con mi jefe en esta semana, porque si algo quedó claro el sábado, es que no puedo faltar ni una clase más si pretendo llegar a los objetivos del curso.

    Semestre atareado será este en lo académico. Veremos como va.

    Arriba las manos, esto es un aplazo

    Hacía mucho que no bochaba un final. Hace una semana había decidido dar Legislación y suspender el trauma de Modelos Numéricos hasta febrero. No es que haya subestimado la materia jurídica pero creí que era más dable ante las frías matemáticas. El hecho es que anoche el titular de Legislación prefirió ponerme un dos antes que hablar conmigo y escuchar mis argumentos por los que, a mi entender, merecía aprobar. Así es la vida universitaria, así que a seguir para adelante.

    La buena noticias es que hasta fines de Enero no tendré que agarrar ningún material estudiantil contra mi voluntad. It's holidays time!

    Ah... me olvidaba, y hablando de Legislación, Nepenthes fue rechazado en Debian por problemas legales. Nada grave, pero ahora tengo que reiniciar el ciclo y todo eso. Así es la vida debianera, así que a seguir para adelante :P.

    alivio parcial

    Hace un par de horas dí el recuperatorio del primer parcial de Modelos Numéricos. Así que tengo parcial alivio hasta que me den la nota al menos. Si llego a aprobarlo tendré que dar el final correspondiente, pero ese es ya otro cantar. Por lo pronto, espero disfrutar de computar sin culpa mañana, que es feriado y tengo varias cosas pendientes. No estoy de humor como para escribir, así que hasta acá llegué por hoy (bastante pobre para ser que no posteo desde hace semanas).

    Más respeto... que habla con un Analista

    Más precisamente, un Analista Universitario de Sistemas. Flamante, desde hace horas y con el 6 (seis) que acabo de sacarme en Redes de Información. Posiblemente no sea un gran avance pero ayudará a mejorar mi salario. Más allá del vil metal, es solo una materia menos para llegar a la Ingeniería. Lo particular esta vez fue cómo aprobé Redes. Paso a comentar:
    'Estudié' durante la semana una materia que podría ser mucho más interesante de lo que es. Por lo que pude ver en finales anteriores, los exámenes requerían muchos datos memorizados y pocos deducidos. Como sabrán, la retención de datos no es mi fuerte.
    Hoy, mientras estuve en el laburo, repasé algunos detalles y me fui a afrontar el desafío de aprobar. Eramos unas 10 personas las que habían decidido dar en esta fecha. El profesor llegó con cierto apuro y repartió unos papeles con 5 preguntas.
    No eran nada fáciles. En muchos puntos no estaba seguro sobre a que se referían las preguntas. Grave situación cuando necesito tener 3 bien.
    Uno de los alumnos preguntó si podía retirarse. Algunas cátedras de mi facultad le permiten a los alumnos retirarse sin entregar el examen y evitar el aplazo, registrándose un 'Ausente'. El profesor se lo permitió y anunció que todo aquel que lo prefería podía hacer lo mismo.
    Uno a uno el resto de los alumnos se fue levantando. Quedé solo. Ahí, en medio del aula. Claro que se me cruzó la idea de seguir al resto e irme. Pero mi orgullo venció al miedo. Ya había empezado a bosquejar alguna de las respuestas cuando el profesor me dijo que me tomaría examen oral, porque no tenía sentido escribir lo que podía contar. Menuda suerte, suelo tener habilidad a la hora de hablar sobre lo que no domino del todo :P.
    - Le pondría 5, pero se merece un 6 por quedarse - dijo el profesor, después de haberme escuchado balbucear unos intentos de respuesta durante unos quince minutos.
    Entre nos, merecía bastante menos que un 5. Pero lo importante es la nota y no la forma en la que se obtuvo.
    Con este final bajo el brazo, ya estoy en condiciones de tramitar mi título intermedio.
    Y ahora, a ponerme al día con las cosas que dejé colgadas por la culpa de este final. Pero no tanto, que el y el 3 de octubre tengo parciales.
    Si será que salgo de un charco para meterme en otro...

    GNUtn rulez!

    Creo que es la primera vez que menciono a GNUtn en mi blog. Tal vez sea porque hasta anteayer no le encontraba mucho sentido. GNUtn (a.k.a. Grupo de Nerds Utenianos) es un grupo que fundamos, si la memoria no me falla, junto con Roberto y Nutz hace un par de años. Hoy tiene unos 60 subscriptos en la lista de e-mail. El objetivo, fomentar el uso y la ideología del Software Libre. Siempre tuvimos el desafío de darle ese toque filosófico que sobrepase lo técnico. Y, por primera vez, creo que lo estamos logrando.

    Ayer tuvimos una metting presencial en el café frente a la facultad. Grandes conclusiones, grandes proyecto.

    O tal vez sea yo, que hoy me levanté optimista.