Principia Programmatica

cvm Ars Compilandi & Ars Interpretandi

Multithreading en Ruby

Hace unos dias, necesité la posibilidad de ejecutar varias peticiones a los servicios web de Amazon en paralelo, debido a que hacerlo secuencialmente hubiese consumido demasiado tiempo, y los usuarios últimos, que esperan los resultados tras hacer una petición web, se hubiesen impacientado. Así que resolví averiguar si Ruby me permitiría hacer las diferentes peticiones en paralelo sin complicarme mucho la vida -tengo los temas de concurrencia y regiones críticas algo oxidados. Para mi sorpresa, resultó mucho más fácil de lo que me esperaba:

def AmazonHelper.find_isbn(isbn) reqs=[] ['us', 'uk', 'de', 'fr', 'ca' ,'jp'].each do |loc| reqs.push Thread.new { Request.new(DEVTOKEN, ASSOCIATESID,loc).asin_search(isbn) } end response = reqs.collect { |req| req.value rescue nil } response.compact![0].products[0] end

Como se puede ver, itero sobre una lista de locales y para cada una de ellas creo un nuevo Thread, que guardo en un array (en realidad, lo que guardo es el resultado, como veremos enseguida). El constructor del thread recibe un bloque de código, que es lo que debe ejecutar el mismo thread. El resultado de la ejecución de este código, siguiendo las convenciones de Ruby, es lo que se devuelve al código llamante, por lo que acaba en el array reqs, una vez hayan finalizado todos los threads. A continuación, para cada resultado de ejecución -para cada thread finalizado- le pedimos su valor, que viene a ser el resultado de la petición al web service de Amazon. Puede ser que la petición haya fallado, en cuyo caso obtendremos nil. Entonces, compactamos el array, para eliminar estos nils, y obtenemos como resultado un array con todas aquellas respuestas válidas.

MonoHispano

Hacia dias que no lo miraba y ayer me sorprendi! ver que ya hacia dias que estaba online. Estoy hablando, naturalmente, de la web de Mono Hispano, un proyecto para documentar y contribuir al desarrollo de Mono y aplicaciones en castellano.

Me he apuntado a la lista (de hecho he enviado un mensaje pero parece que no ha sido redistribuido) y he estado probando un par de aplicaciones para Gnome en C#: Tomboy, mcatalog y mbloggy, con un !xito modesto. Como no tengo mucho tiempo no creo que contribuya con c!digo, pero tal vez pueda enviar alg!n que otro bug report (como ya he hecho con mcatalog, aplicaci!n que en cierta manera se solapa con un proyecto que teniamos James y yo y que no lleg! a fraguar)

Tomboy me parece interesante, viene a ser como un desktop-wiki. Muy !til para implementar cosas como GTD. Mcatalog me gusta, tal vez consiga preparar alg!n parche, pero estoy muy pez en Gtk#. En cuanto a mbloggy... pues de momento no funciona, y no creo que sea por el lado servidor, pero tampoco lo he probado tanto, asi que me reservo el juicio.

En cuanto pueda, probar! iFolder y Dashboard

FeedMan!acos

Recientemente, un par de programadores bien conocidos en la blogosfera hispana han presentado Feedman!a. He estado echando un vistazo y me gusta, creo que desplazar! a Kinja como mi agregador online (no uso Bloglines). Aunque est!n en fase de beta, solo he encontrado un par de obst!culos, que comentar! aqui y a ver si por alusiones leen (ya que en su blog no he visto que tengan habilitados los comentarios). Que conste que estas observaciones son preliminares y que a!n no he explorado a fondo toda la interfaz de feedman!a, as! que algunas conclusiones que exponga pueden ser precipitadas (y me encantar!a que si es as!, alguien me llamase la atenci!n sobre ello).

En primer lugar, la opci!n de importaci!n de blogroll requiere un poco m!s de trabajo. Seg!n leo, pueden importar tu lista de suscripciones en formato OPML. Sin embargo, tratando de importar las suscripciones que tengo en Kinja me he encontrado con que no es tan sencillo como parece. Me imagino que se debe a que (incluso con OPML sucede) hay diversos formatos o interpretaciones de las especificaciones de OPML. No digo que no se atengan a la versi!n m!s pura (la de outliners.com) ya que en realidad ni lo he comprobado, pero sabiendo que hay divergencias en cuanto al formato (que si se escribe HtmlUrl o htmlurl, o linkUrl, chorradas como !sta) no cuesta nada aplicar la m!xima de se liberal en lo que aceptas y ser un poquito m!s flexibles. M!s tarde probar! con el blogroll de SharpReader a ver qu! tal va. De todos modos, creo que no costaba nada comprobar que los blogrolls de otros sites importantes (Kinja, Bloglines, blogroll.com, no s! si incluso technorati) funcionaban sin m!s. Creo que cuanto menos, el mensaje de error deber!a ser un poquito m!s informativo, para asi yo pueda saber si me basta con aplicar un search & replace sobre mi fichero OPML, o si debo corregir el encoding. Cierto es que tales mensajes espantar!an a usuarios no t!cnicos, pero considero que al menos una pista, o un botoncito como detalles para ampliar la informaci!n no est! de mas.

Otra feature que me gustar!a ver, es poder importar mi blogroll a partir de una URL y no hacer un upload de mi fichero. As! podria apuntar al fichero producido por otro servicio similar, sin tener que hacer el paso intermedio de descargarlo.

Una caracter!stica que me gusta de Kinja, y que de momento no implementa Feedman!a (aunque esperar! pacientemente) es poder ver los posts en orden cronol!gico, pero sin separarlos por origen, de modo que me entremezcle los distintos blogs (mientras tenga un encabezado que me lo indique es suficiente). No obstante, tambi!n me gusta poder separarlos cuando lo quiero (que es la vista actual). Si no me equivoco, creo que Bloglines permite hacer esto. SharpReader lo permite, sin duda, y es una de las caracter!sticas que me gustan. Est! planeado poder agrupar los blogs por tema, asi que tal vez seleccionando una 'carpeta' de blogs (en lugar de uno en concreto), se muestren entonces todas las entradas de los weblogs agrupados, que es como lo hace SharpReader.

Otro detalle que considero interesante es poder ver los comentarios sin tener que visitar la web en cuesti!n. Cierto es que no incluirlos atrae las visitas al sitio, pero tambi!n permitir!a ahorrar visitas innecesarias el saber si alguien ha a!adido comentarios desde la !ltima visita que hice.

Solo dos cosas m!s, que se refieren a la adici!n de feeds: la posibilidad de usar un bookmarklet, y la posibilidad de buscar feeds desde FeedMan!a, para as! poder a!adirlos (o previsualizarlos y a!adirlos). El use case es el siguiente: yo puedo saber que un feed que me gustar!a tener contiene la cadena "1976", pero no recuerdo la URL exacta. Entonces, la insertar!a en una cajita de b!squeda y FM me indicar!a todos los blogs que conoce que la contengan. Yo podr!a comprobar cual de ellos es (algunos sites ofrecen m!ltiples feeds, que si completos, que si abreviados, que si con comentarios) y a!adirla a mi lista de feeds.

En fin, esto es lo que m!s me ha llamado la atenci!n, voy a tratar de seguir importando mis feeds gradualmente, y a esperar pacientemente las nuevas caracter!sticas prometidas. Si algunos de los feeds que no puedo leer en Kinja son legibles en Feedman!a, ciertamente reemplazar! con este !ltimo al primero. En cualquier caso, mis felicitaciones al equipo responsable. La verdad es que me anima a poner en marcha de una vez mi proyecto (m!o y de James Buckley), BookStash.

Pages

Categories

Tags