31 de julio de 2009

Almuerzo estándar

Si algo me ha quedado claro en todo el tiempo que llevo de becario en la universidad es que la estandarización es buena. Es bueno que haya una forma de que todos hagamos algo de la misma manera y que cada uno no vaya por libre (aunque es lo que al final se acaba haciendo). Pues bien, me he dado cuenta de que al menos el 95% de los días que he almorzado en la universidad he tomado lo mismo: un sandwich mixto y un zumo de naranja. ¡ISO para almuerzos ya!

28 de julio de 2009

Cálculo de la raíz cuadrada de un número módulo n

Ayer por la tarde, intentando resolver un problema de programación, me encontré que tenía que resolver la raíz cuadrada de un número módulo n. Recordé que eso lo había estudiado en Criptografía, pero, como me suele suceder, no me sé de memoria el algoritmo. Cuando llegué a casa revisé mis apuntes y allí lo encontré, y me pareció tan curioso que me gustaría exponerlo aquí por si a alguien puede serle de utilidad.

0. Supongamos que queremos calcular las raíces cuadradas de una cantidad c módulo n. En primer lugar, debemos encontrar dos factores positivos, p y q, tales que n = p*q. Estos dos factores deben cumplir además que deben ser primos entre sí y congruentes con 3 módulo 4 (es decir, que su resto al dividirlos entre 4 debe ser 3). Si no conseguimos hacer esto, no podremos aplicar el método que viene a continuación.

1. Seguidamente, aplicaremos el algoritmo de Euclides extendido para obtener dos números a y b tales que a*p+b*q=1. Podemos hacer esto ya que el algoritmo de Euclides extendido nos proporciona los números a y b que cumplen a*p+b*q=mcd(p,q), y al ser p y q primos entre sí por cómo los hemos elegido, su máximo común divisor es 1.

2. Recordemos que c es la cantidad cuya raíz cuadrada módulo n queremos calcular. Llamaremos: r = c^((p+1)/4) mód p; s = c^((q+1)/4) mód q.

3. Llamaremos ahora m1 = (a*p*s + b*q*r) mód n; m2 = (a*p*s - b*q*r) mód n

4. Las cuatro raíces de c módulo n son m1, -m1 mód n (es decir, n-m1), m2 y -m2 mód n (n-m2, igual que antes).

Como el algoritmo anterior igual es un poco denso voy a dar un ejemplo en el que se aplique. Supongamos que queremos calcular las raíces cuadradas de 16 módulo 21.

0. En este caso n = 21 = 3 * 7. Es fácil que comprobar que tanto 3 como 7 son congruentes con 3 módulo 4. Por tanto, p = 3 y q = 7.

1. Aplicando el algoritmo de Euclides extendido obtenemos que a = -2 y b = 1 (podemos usar, por ejemplo, el applet del link anterior).

2. r = 16^((3+1)/4) mód 3 = 16^1 mód 3 = 16 mód 3 = 1;
s = 16^((7+1)/4) mód 7 = 16^2 mód 7 = 256 mód 7 = 4

3. m1 = (-2*3*4 + 1*7*1) mód 21 = -17 mód 21 = 4;
m2 = (-2*3*4 - 1*7*1) mód 21 = -31 mód 21 = 11

4. Las cuatro raíces cuadradas de 16 módulo 21 son: 4, 17 (-4 mód 21), 11 y 10 (-11 mód 21).

24 de julio de 2009

Entendiendo código ajeno

Supongo que a todos los que estudiamos o han estudiado informática les habrá tocado alguna vez intentar entender un código no escrito por ellos. Normalmente si es un código escrito por profesores suele estar bien escrito e indentado, con sus correspondientes comentarios, etc. Todo lo necesario para que el alumno pueda entenderlo más o menos bien. Sin embargo, si es un código con propósito no docente entenderlo suele costar bastante más, normalmente por la falta de documentación (comentarios y/u otros documentos auxiliares) y porque no todos tenemos el mismo estilo de programación. No incluyo aquí otros factores como la diferencia de lenguajes de programación y similares porque ya estaríamos entrando en otro orden de cosas.

El problema viene cuando intentas entender un código tal que dada su dimensión ha tenido que ser descompuesto en nueve (9) directorios diferentes, sobre algo que todavía no manejas del todo bien y además sin un maldito comentario en todo el código. Bueno, corrijo, a veces me encuentro algún comentario de explicación de los parámetros de entrada y salida de algunas funciones concebido para una posterior generación de documentación con el Doxygen, pero totalmente incompletos. Obviamente no diré quién ha programado este código, y si algún lector lo sabe porque se lo he dicho personalmente agradeceré que no lo diga en los comentarios, pero sí es cierto que en los últimos días me estoy acordando bastante de esa persona.

A todo esto, yo propongo una solución (modo irónico ON). Que si el compilador detecta que el código sobrepasa un cierto umbral de líneas de código no genere el ejecutable si un cierto porcentaje de las líneas (bastante bajo, tampoco es cuestión de forzar al personal) no son comentarios. No es tan difícil comentar qué significa cada uno de los atributos de una clase, qué hace una función o el por qué de sus parámetros. Y luego ya los profanos en el código agradeceríamos muchísimo comentarios un poco más profundos sobre las partes no evidentes del código, pero eso ya a gusto del programador, que parece que para algunos esto ya sería desviarse demasiado de la programación del algoritmo o lo que sea que estén programando (tal vez el "hola mundo" en Visual Basic) y ser demasiado condescendientes para con los posibles lectores del código (modo irónico OFF).

En mi opinión, un buen programador no es sólo el que hace código eficiente, que funcione de la hostia y que aplique propiedades como la reusabilidad y similares, sino aquel que es capaz de escribir algo que pueda entenderse fácilmente, obviamente sin renunciar a lo anterior. Estoy seguro de que esto podría aumentar la eficiencia en el desarrollo de código y evitar a los programadores que vengan detrás horas (y palabrotas varias) innecesarias a la hora de entenderlo. He dicho.

21 de julio de 2009

Mambo de la Suite Sinfónica de West Side Story (Leonard Bernstein)

He aquí una genial interpretación del Mambo de la Suite Sinfónica de West Side Story por la Orquesta Juvenil Simón Bolívar de Venezuela, dirigida por Gustavo Dudamel durante los Proms de 2007 (conciertos de música clásica con localidades más baratas para gente que los escucha de pie). Llama la atención que toquen esta pieza con chaquetas tricolor de Venezuela, pero todo tiene una explicación. Este es el último de los dos bises que ofrecieron en ese concierto (el primero fue una canción de folklore sudamericano) y ambos los tocaron con la mencionada chaqueta.

Son, sencillamente, geniales.

Google Code Jam 2009: por fin noticias suyas

Hace unos pocos días escribí este post diciendo que no había noticias sobre el Google Code Jam de este año. Pues bien, acabo de recibir un correo de un amigo informándome de que definitivamente Google sí tiene intención de organizar el concurso este año, pero que será algo diferente al de años anteriores tanto en fechas como en formato. Para más información, podéis pinchar aquí, que es la página de google groups donde se ha anunciado "oficialmente" lo que acabo de contar.

16 de julio de 2009

Google Code Jam 2009: ni rastro de él

El Google Code Jam es una competición de programación anual organizada por Google. El único requisito para inscribirse es tener una cuenta de gmail, que hoy en día la puede tener cualquiera, y tener 13 años cumplidos (y eso muchos los sobrepasamos con creces).

Pues bien, hace no mucho entré a la página del concurso para registrarme y la primera sorpresa que me llevé fue que el sistema recordaba todos los datos que le puse para la edición anterior del concurso. "Bueno, cosas de google", pensé. Total, que no tuve que tocar nada y cuando le di a "aceptar" el sistema me dijo que estaba inscrito correctamente. A continuación consulté el horario y vi que el día 15 de julio a las 23:00 CMT empezaba la fase previa, con una duración de un día. Hasta ahora, todo bien.

Lo siguiente que ocurrió fue que ayer un amigo se dio cuenta de que las fechas de la página del concurso se correspndían al año 2008. Bueno, pues seguro que las del 2009 tienen que estar por alguna parte... Ni rastro de ellas. Se puede consultar todo lo referente al 2008, pero no al 2009. El siguiente paso que di fue el obvio, intentar buscar en google información sobre el concurso organizado por el susodicho buscador. Todas las páginas que encontré asumían que las fechas publicadas en la página oficial eran las de 2009 y hacían publicidad de la competición animando a la gente a apuntarse. Vamos, que habían caído en el mismo error que yo. Sólo en un foro encontré a una persona que decía que las fechas del 2009 todavía no habían sido publicadas, pero parecía que el resto de personas no le hacían mucho caso. Entonces, dado todo este caos, decidí enviar un mail a la organización del concurso preguntándoles sobre las fechas del Google Code Jam 2009. Aún estoy esperando respuesta, aunque también es verdad que se lo envié ayer a estas horas.

La última pieza que parece aclarar todo esto la he encontrado esta mañana. Obviamente, si el concurso empezaba el día 15 a las 23:00 CMT y duraba un día, el día 16 por la mañana debían estar los problemas disponibles. Pues bien, no lo estaban; es decir, la página no había cambiado desde ayer por la tarde. Desde mi punto de vista, esa es la última prueba de que de momento no hay ni rastro del Google Code Jam 2009.

Sin embargo, lo que me parece más lamentable de todo, es que una gran compañía como google no haya colgado en la página del concurso ninguna información aludiendo a que en 2009 las fechas aún no están establecidas o que, si es el caso, no va a celebrarse el concurso. Otra opción mucho menos probable es que la página principal del concurso haya cambiado, pero entonces deberían haber colgado un link de la página vieja a la nueva y, por supuesto, al buscar "Google Code Jam 2009" en google, éste lo habría detectado (y más perteneciendo todo a la misma compañía...). En fin, desde mi punto de vista todo esto es una falta de información grandísima por parte de google. Curioso cuando toda la estrategia de negocio de esta compañía se basa en la información...

15 de julio de 2009

Martina (Zahara)

Todos tenemos una Martina dentro; a veces sólo hace falta atreverse a conocerla un poquito más.



Martina no tiene intermedios,
conoce remedios para los destinos.
Golpea siempre dos veces
las puertas que encuentra por su camino.

Martina prolonga su huída,
no cree en las mentiras,
no guarda rencores,
Dentro de sus corazones hay hueco de sobra
para un rato más.

Martina te enseña sus guías,
Martina te envía postales sin sello.
Martina exporta su risa.
Deja que la brisa se duerma en su pelo.

Martina es un aguacero
y bajo su abrazo no existen fisuras.
Vigila bien las figuras que acechan su paso
y juega a no ver.

Martina regala sonrisas
Se muestra de harina,
sabe que es de acero.
Baja peldaños del cielo
y cogiendo tu mano
te invita a subir.

Martina es un espejismo.
Martina, un abismo de lamentaciones.
Martina no tiene razones.
Martina es el sueño
que evitas tener.

Martina puede ser tu musa,
Martina es la excusa para las locuras.
Al pasar quema las dunas
y deja al desierto descansar en paz.

Martina es como heroína.
Martina opina aunque no le pregunten.
Martina cumple deseos,
reinventa sus credos,
se esconde en su cumbre.

Martina no conoce dueño
Camina sin freno, sin ley, ni rutina
Nacida en mi pensamiento,
Martina es la parte pequeña de mí.

13 de julio de 2009

Finlandia

Finlandia es un país que, aunque no he ido nunca, siempre me ha fascinado. Tiene algo especial, algo como de cuento; será la esencia vikinga que me atrae. Es una cultura del todo desconocida para mí pero que me llama con cantos de sirena a conocerla. Ciertamente es un país que quiero visitar.

Como el resto de países escandinavos, económicamente es un país fuerte. Además, su educación siempre aparece en los primeros lugares del informe PISA, por algo será. Y luego están sus paisajes, tan verdes y tan blancos al norte de Europa... Finlandia...



Fotos tomadas de la página http://fakestreet123.wordpress.com

7 de julio de 2009

Rockola.fm

De todos es sabido que en internet hay muchísimos sitios para escuchar música online, desde youtube hasta lastfm pasando por muchos más. También últimamente se han puesto de moda programas que los tenemos instalados en local pero nos permiten escuchar música en streaming, como spotify.

Personalmente, yo siempre he preferido el estilo de lastfm, pero hace algún tiempo este sitio se volvió "de pago", es decir, te dejan escuchar 30 canciones gratis y luego debes abonar 3$ al mes si quieres seguir usando el servicio. Fue entonces cuando decidí buscar algún sitio parecido por la red y encontré, tras buscar un poco, rockola.fm.

Rockola.fm es una página web española para escuchar música en streaming al estilo de las "radios personales" de lastfm. Sin embargo, aquí encontramos cuatro formas diferentes de hacer que la página nos dé canciones del estilo de las que queremos escuchar:

a) Escribiendo el nombre de un cantante, compositor, etc. y el sistema nos pondrá canciones suyas y de otros similares.

b) Utilizando alguna de las emisoras predeterminadas de la página o escuchando emisoras ya creadas por otros usuarios. (En mi caso, una de mis favoritas es la emisora "Clásica de Primaria").

c) Seleccionando alguno de los tags en la pestaña "tags".

d) Haciendo clic en el círculo de estados de ánimo según cómo estemos en ese momento; así la página nos dará canciones acordes a nuestro estado.



Por otra parte, no es necesario registrarse para empezar a escuchar música, pero hacerlo está bastante bien ya que el sistema almacena nuestros gustos y al final acaba "aprendiendo" sobre ellos. Además, podemos almacenar nuestras emisoras favoritas para tenerlas más a mano la próxima vez.

En mi opinión, la página está bastante bien y, en mi caso, ha sustituido muy satisfactoriamente a lastfm. Por ponerle algún "pero" diría que algunas emisoras (sobre todo algunas de música clásica) tienen una lista de reproducción algo reducida y que al final se acaban repitiendo canciones. En definitiva, creo que es una página altamente recomendable para todos aquellos a los que nos gusta escuchar música.

3 de julio de 2009