viernes, 20 de julio de 2012

Blogolimia iteroconcurrente: Sudokus e Inyección de Dependencias

A veces me vuelvo realmente loco intentando recordar dónde vi lo que vi y de dónde saqué la idea que saqué. Sospecho padecer el Trastorno de déficit de atención. Sin acabar de estar muy convencido de la existencia del hermano pequeño, díscolo e inestable que es el apartado de las pepinadas, y que da cabida a toda suerte de miserias, he querido darle algo más de entelequia, intención de continuidad, y apuntar por aquí, para consulta futura, para sostén de mi memoria, y por simple pedorreta intelectuoloide, lo que vaya llamando mi atención. También es cierto que con algo tengo que rellenar, y de paso justificar, intentarlo al menos, la existencia de este blog [1] cutre salchichero pseudoexistencialista que me he montado por aquí. Y no se me ha ocurrido mejor forma que repasar el historial de mi navegador y elegir aquellos enlaces en los que dediqué más tiempo de lectura y atención y que, en muchas ocasiones, ha supuesto abandonar lo que tenía en mente para fijar la atención en otra cosa. De ser un personaje de ficción, sería la pez amiga de Nemo, memoria de tres segundos sobrentendida.

A lo largo de la semana son muchas las páginas, lugares, rincones y, en general, vertederos de toda índole, que visito. No en vano, y dado que tengo una existencia más bien solitaria en mi apartado rincón de Parla —el ermitaño, o mejor el anacoreta, del sur de Madrid acabarán llamándome—, paso mucho tiempo delante de una pantalla retroiluminada como mejor compañía (portátil/ordenador de trabajo, iPhone, iPad…). Estoy conectado veinticuatro horas al día, siete días a la semana, trescientos sesenta y cinco días al año. Éste trescientos sesenta y seis.

Al tajo, sin perder dedos en el camino. Sirva todo este esfuerzo como recordatorio y como muestra de por dónde tuercen mis desviaciones. ¿Alcanzaré aún nivel mayor de cutrez existencial?

Esta semana, con la cuarta parte del horario de verano consumido, lo han protagonizado, principalmente, el Sudoku y frameworks de Inyección de Dependencias para .NET. Entre cabezada va, cabezada viene, en el tren retomo la búsqueda de una métrica para calcular la dificultad de un Sudoku, tropezando con un PDF que tiene buena pinta y de título Sudoku: Bagging a Dificulty Metric & Building Up Puzzles. Lo apunto para leerlo durante el fin de semana, Batman mediante [2]. Hace meses hice un programa para resolver sudokus usando una mezcla entre Exact Cover (¿cobertura exacta?) y Backtracking. No obstante me quedé con las ganas de hacer un generador y calcular empíricamente una medida de dificultad. Al parecer es harto jodido, ya que se basa en heurísticas y no existe una medida solvente de lo que se busca. Al menos que yo sepa. Desistí. Retomando el tema acabé en el PDF mencionado. En la búsqueda también tropecé con otro PDF que apunto para lectura más tardía: A Pencil-and-Paper Algorithm for Solving Sudoku Puzzles. Lo mejor (o lo peor, según se mire) fue que, rebotando aquí y allá, guiado por mi TDA, llegué a Notices of the American Mathematical Society y pude descargarme el último ejemplar de forma íntegra en PDF. ¡Que me da un jamacuco! ¡ARGHHHH! ¿A qué tanto chute matemático? Pues porque con el horario de verano —¡tardes libres!— retomé la idea de programar un juego para smartphones y se me ocurrió, antes de seguir con Profanation versión deluxe-chachi-guay-new-age meterme con algo más sencillo para familiarizarme con Frameworks y chuminadas varias, que desde el año pasado han cambiado algo [3]. Para ser «sencillo» aún queda bastante curro, pero esta es la pinta que va presentando (de momento desarrollo con Visual Studio y XNA).


Tiene mérito insistir tanto con XNA cuando la propia Microsoft parece no apostar por él para el desarrollo de juegos para la interfaz nativa Metro de su próximo Winwows Phone 8. Básicamente proponen dos alternativas: C++ con DirectX y HTML5 con JavaScript. La tercera, Silverlight, ni mencionarla. Todo, y todos, apunta, apuntan a, que la quinta será la última versión. Y mira que la gente de MonoGame está haciendo un trabajo estupendo para propagar el framework XNA a diferentes plataformas. ¡Si hasta Sony ha elegido una variante de MonoDevelop para su entorno de desarrollo de juegos para la PSP Vita (A look around the PlayStation Mobile tools and SDK)! Sea como fuere, en breve desempolvaré [4] los libros de C++ que tengo.

Esta semana toca rehacer el código de un servicio que alguien malparió hace una década. Casi. De mediados del año 2003 está fechado ese proyecto. Malparió el código —y la arquitectura relacionada—, porque el servicio tiene su sentido de ser. Incluso la solución planteada, de forma global, no es mala, pero es que hay cada aberración pestilente en cómo está implementada que tira para atrás. Hablo de un servicio Windows, de esos de los de antes. El programador original, protegido por el anonimato que dan años de olvido —y de rotación de personal— dejó algunas joyas y una década de datos defectuosos. Aunque con incidencia y repercusión tan diminuta que apenas ha merecido atención hasta ahora. Lo curioso es que es un servicio de importancia vital para la plataforma en la que se engendró, pero como únicamente afecta en unos marcos espaciotemporales tan bien definidos, no se ha querido tocar hasta la fecha. Por aquello del «peor el remedio que la enfermedad», supongo. Obstinado como estoy en inculcar ideas tales como Integración Continua, estoy por reprogramarlo. Cada vez que me pongo con una cosa como esta acabo implementando mi propia versión de la Inyección de Dependencias en su forma manual [5]. Pero ya va siendo hora de dejar las cosas a los expertos de verdad, así que me puse a buscar Frameworks para la inyección de dependencias o Dependency Inyection Containers, como los vienen llamando, esos mismos expertos, para .NET. ¡La polla! ¡Hay un montón! Finalmente hice poda y me quedé con cuatro candidatos: Castle Windsor, Spring.NET, Unity y StructureMap. No porque el resto sean peores. Simplemente porque no tengo tiempo de evaluarlos uno a uno y tenía que decantarme por alguno en poco tiempo. Inicialmente quería elegir Sprint.NET porque también estoy metido en un proyecto Java y era una forma natural de enganchar, pero andar con archivos XML de configuración y sus namespaces y sus estructuras particulares poco documentadas, es algo que me supera y quería hacerlo directamente desde código. Al menos para ponerlo rápidamente en marcha. Por lo poco que pude ver, StructureMap parece el mejor para eso, definir en código, sin perder de vista la futurible configuración externa en XML. Seguro que me equivoco, pero la decisión ya está tomada. Los cambios tengo que hacerlos en tiempo récord, suponiendo siempre que no desista en rehacerlo y opte por parchear hasta que lo retome el siguiente programador, y aún tengo que pensar en cómo voy a solucionar algunos problemas para incorporar test unitarios (¿por qué la gente programa las cosas de forma tan acoplada?). Siempre habrá tiempo de cambiar/mejorar dentro de otra década. Para entonces supongo que la programación funcional será lo más y alguien vendrá, dirá que lo que yo hice apesta, y que hay que hacerlo todo con funciones y en «petabito», el nuevo lenguaje de moda masmejó para eso y todo lo que necesites.

Por último, y sinceramente sin venir a cuento por nada en particular, recordé haber visto hacía tiempo una especie de nube de palabras. En particular fue tras el debate que mantuvieron los dos candidatos a las últimas elecciones. Creo que fue El País —o cualquiera de tirada gratuita que pasa por mis manos casi cualquier día— donde aparecieron sendas nubes con los términos más destacables de las propuestas de cada uno de los dos mentirosos sinceros y preocupados políticos. Apunté indagar sobre el asunto y, sin venir a cuento, mi cerebro sufrió una interrupción mientras me estrujaba la amígdala averiguando cómo enganchar diferentes perfiles de validación a un mismo proyecto Sonar, herramienta muy cojonuda para la validación estática de la calidad del código y con la que ando liado estos días en uno de los proyectos, y recordé que estaria bien dedicar un rato a ver qué podía averiguar. No hice mucho, pero encontré un servicio que produce unos realmente bonitos y altamente configurables: Wordle. Para muestra un botón. Aquí va la nube con el texto de la entrada de hoy:


Hay que pulir un poco, pero el servicio tiene muchas opciones para la presentación. Algún día haré la nube para todo lo publicado hasta la fecha. Algún día.


[1] Que decepción más grande me he llevado al descubrir que la Academia de la Lengua acogía la palabra bárbara blog como parte de nuestro patrimonio lingüístico. Si es que todo se acaba pegando. Lo malo, claro.
[2] Me va a resultar muy complicado no ir al estreno de la tercera y última película de Nolan sobre tan oscuro personaje.
[3] ¿Pero es que no recuerdan aquel magnífico Recocido de Profanation sobre cama afrutada de XNA y con relleno de MonoGame (o XNATouch) y ese espectacular recopilatorio que supuso El blues de los momentos perdidos?
[4] Quien dice «desempolvar» podría decir también «descargar». Hasta que desaparezca completamente, todavía quedan sitios como wowebook.com donde los más viles y rastreros pueden hacerse con libros técnicos sin pagar. De todas formas yo siempre pago. Al menos por los que merecen la pena. Es una absurda cuestión de principios. Pero antes de saber si merece la pena, no está de más echarle una lectura rápida obteniéndolo de forma poco digna.
[5] Algún día me gustaría continuar el artículo Diseño reincidente (I) - IntroMix 2010, filosofía zen, las articulaciones y el bambú. En esencia de lo que iba era de contar cómo empecé a usar esas técnicas (parecidas al menos) en 2002 de forma intuitiva (mi descubrimiento de IoC/DI es bastante reciente) y cómo, desde entonces, siempre acabo haciendo las cosas muy parecidas. Está claro que si funciona, ¿por qué cambiarlo? Y a mí me funciona.

lunes, 9 de julio de 2012

El medievo con tu ano

Que se me caiga el pito si miento, pero juro que no recuerdo cuánto hace que dejé de descargar canciones de Internet, parche en el ojo incluido. Hace mucho, eso sí lo sé. ¿Cuatro? ¿Cinco años? Es posible que seis; incluso siete. Aburguesarse implica pagar por la música, y eso es lo que empecé a hacer. (En realidad continuar, porque mi colección de CDs, sin llegar a ser portentosa, era digna de elogio para ser un estudiante pobretón). También sé que justo antes de dejarlo, por aquello de «la última vez, cariño, y mañana te respetaré y no lo diré a nadie lo que me has hecho, so guarra», dejé el ordenador unas dos semanas descargando durante veinticuatro horas cientos de discos. Todo lo que pillaba en los foros del pirateo inmisericorde. De forma indiscriminada bajaba desde blues y jazz hasta reguetón. El 99% de aquella tonelada de zips y rars acabó arrinconado en un disco duro extraíble y, pasado el tiempo, borrado miserablemente cuando necesité espacio para cosas más interesantes con la convicción de que, además, nunca llegaría a perder tiempo en clasificarla ni rescatar ninguna cosa. Es complicado rescatar cuando no se sabe exactamente qué hay que rescatar. El 1% restante, que tiempo después incorporé a la biblioteca iTunes, lo fui eliminando paulatinamente. Si no lo escucho no merece la pena dejarlo; y escucho lo que compro. Lo compro porque me gusta. Si me gusta, lo escucho. En fin, un círculo vicioso.

De vez en cuando, sin embargo, tropiezo con algún superviviente de los sucesivos exterminios. Emerge cuando dejo al DJ de iTunes que amenice las tardes de programación. Y así ha aparecido una canción de Mamá Ladilla, grupo del que no tengo especial recuerdo de buenas canciones debido a su estilo particular, que se me antoja de usar y tirar, que ha conseguido, sin embargo, hacerme sonreír y, de hecho, la he escuchado de forma compulsiva durante un buen rato. El título 'Sucedió en Beckelar', y un estribillo que da título a esta entrada. Parte al menos. En la web del grupo podrán disfrutar, con animación flash grotesca incluida, de la canción de forma íntegra. Puede herir la sensibilidad —o sensiblería— de alguno.

Ha conseguido sacar mi lado gamberrete. Y el republicano. ¿Quién se apunta a quemar palacios y decapitar a miembros de la realeza? Los elefantes del Mundo nos lo agradecerán.

viernes, 6 de julio de 2012

Retomando XNA

Esta semana empezó el horario de verano. El último mes ha sido de locura. Pero de la verdadera. Hace dos fines de semana trabajé el equivalente a una semana normal. Los viernes la jornada laboral termina a las dos de la tarde y yo seguí trabajando hasta las cuatro de la madrugada. El sábado y el domingo lo mismo. Después del sobre esfuerzo parece que todo vuelve a la normalidad. Me he encontrado con las tardes libres y una vida bastante solitaria. Aquí en Madrid apenas conozco a nadie y casi todo el mundo anda muy liado. Sea como fuere, en algo hay que rellenar el tiempo y, como ver la televisión no es de mis actividades favoritas, he optado por retomar la idea de hacer una versión de Profanation para dispositivos móviles. Pero antes voy a darle con ganas al XNA hasta que lo tenga bastante controlado, para lo que he empezado con cosas más sencillas

Seguiremos informando.


Ya no tengo Facebook

Tampoco es algo que resulte especialmente reseñable. Llevaba tiempo dándole vueltas a la idea. Finalmente eliminé mi cuenta de Facebook.

No, no la desactivé. Desactivar lo puedes hacer directamente desde las opciones de la administración de la cuenta. No. La eliminé completamente. Antes borré una a una las publicaciones y las fotografías que tenía desde que la abrí. Toda precaución es poca. Bueno, eliminada en teoría, porque te mandan un correo diciendo que durante dos semanas aún te puedes arrepentir. Pasado ese período de gracia será como si nunca hubieses estado en esa red. No hay marcha atrás.

Ha transcurrido una semana. Me embarga cierto sentimiento de libertad y de satisfacción abstractos.

Ojo con pulsar el enlace anterior, que si tienes cuenta abierta se la cepilla.


¿Me cepillaré también la de Google+?

Foto tomada aquí. Autor: Alan Levine.

domingo, 1 de julio de 2012

Seis coma catorce


El tiempo pasa volando. Perogrullada. No resulta tan de perogrullo que lleve seis años casado con la que sigue siendo la persona más importante en mi vida. Y menos aún que en unos meses se cumplan catorce años que comenzamos una relación. Asombroso. Algo bueno tuve que hacer en otra vida :-)