• Programación

    Participando en Facebook Hacker Cup

    Este año me acordé a tiempo de este evento (y la verdad que este año estuve usando por primera vez mi cuenta de Facebook :P) así que decidí probar a ver que onda. La primer impresión : se complica rendir bien teniendo familia (o una vida de por si :P); no se puede salir apenas aparecen los problemas a lo loco a cualquier hora a resolverlos. Desde el punto de vista técnico, los dos primeros problemas fueron muy fáciles. «Beautiful strings» fue trivial realmente, con pensar 2 o 3 min salía. El problema «Balanced Smileys» donde se buscaba determinar balanceo de () con al dificultad de que había caritas felices…

  • Programación

    Filtro de Contenido para T!

    Hoy estuve leyendo este post donde los dueños de Taringa declara que «no podemos investigar el destino final de cada uno de los 20.000 post diarios». Lejos de ser algo «colectivamente inteligente» como declaración, es una terrible boludez :). Con aplicar algunos filtros automáticos, permitir que cualquiera de forma rápida y fácil reporte los contenidos ilegales y actuando más o menos rápido en su eliminación uno se cubre el 90% del orto. El otro 10% hay que pelearlo por carta documento porque hay gente muy al pedo ahí afuera, pero ni en pedo llegamos a un juicio oral teniendo un poco de criterio :). El problema es que filtrar a…

  • General,  Programación

    Procesando archivos en background con Rails

    Procesar archivos en paneles de administración es un bajón, sobre todo cuando son cada vez más grande y cada vez más. En uno de nuestros proyectos tenemos ya unos cinco archivos CSV diferentes a procesar donde cada uno cumple alguna función específica. Algunos de estos archivos superan los 5 Mb por upload, por lo que se hizo necesario desacoplar el procesamiento del archivo del request que realiza el upload. Para manejar procesos en background en rails hay muchas opciones buenas, algunas más complejas con colas de trabajo, workers distribuidos y otras cosas que nosotros no necesitamos. Lo importante para nosotros era encontrar alguno que permita : Procesar en background (obvio…

  • Programación

    HTML5 : Guardar el contenido de en el servidor

    Hoy tenía ganas de hacer algo distinto (vamos, no quería trabajar :P) así que me puse a jugar con HTML5, entre otras cosas con el tag <canvas> para poder dibujar. Luego de bajar varios ejemplos y tener un ‘paint’ andando lo que quería era guardar la imagen, y llegué a este post donde el autor deja guardar en PNG, JPG hasta incluso en BMP el contenido del canvas. Pero que el usuario se pueda guardar la imagen no era mi idea, era más bien guardarle en el servidor. Por ejemplo para hacer una firma digital y usarla después en el sitio para firmar los posts como si fueran documentos :P.…

  • Programación

    Migrando datos desde PHP a Rails

    Por esas cosas de la vida me encontré todo el día de hoy migrando datos viejos de un sistema hecho en PHP a uno hecho en Rails. Las cosas venían bastante simples definiendo modelos de ActiveRecord para las tablas de la base de datos vieja y reinsertando con modelos apuntando a las tablas nuevas. Pero … siempre hay un pero. Resulta que el hermoso sistema anterior para evitar tener muchas tablas (o vaya a saber por qué) tenía en una parte un tabla donde cada field era un gran TEXT que contenía un array de PHP serializado. class UserTextField user = UserTextField.find(3) $> user.folders # => 'a:2:{i:0;s:4:"bkps";i:1;s:6:"listas";' Justo cuando estaba…

  • GNU+Linux,  Programación

    Regalando cosas por Bluetooth

    El año pasado Movistar había lanzado una campaña muy pedorra en el subte, en donde unos carteles en el piso te invitaban a prender tu Bluetooth y te enviaban un file. Lo que te enviaban era una simple imagen, con tanto texto que en mi celular era casi ilegible y no tenía consigna alguna. Sin embargo esto sirvió para que me encaprichara y quisiera armar algo similar para la oficina, orientado a que un cliente que viene a una reunión se pueda llevar un regalo, que en este caso es un juego J2ME. Hacerlo realmente es una boludez. El real problema, que no voy a tratar acá, es tener una…

  • Programación

    Sitemaps vía crawling

    Hoy me pidieron agregar un Sitemap para uno de los trabajos que hicimos para el gobierno y me encontré con que los plugins que uso para esta tarea no me cerraban de forma cómoda. El problema es que este sitio tiene, además del contenido dinámico, muchas páginas estáticas que no puedo referenciar desde un modelo, por lo que debía forzarlas y era bastante molesto. Buscando encontré una solución práctica para este caso (donde hay pocas páginas, menos de 1k) que usa un crawler para recorrer todo el sitio y obtener las URLs a agregar al sitemap. El script que presentan me sirvió, aunque tuve que hacerle algunos cambios menores. El…

  • Programación

    Refactoring de «Fat Methods» – Episodio 5

    Pasar programadores PHP a Ruby no siempre es una tarea trivial, mayormente porque lo primero que tratan de hacer es escribir código en lugar de pensar que es lo que quieren hacer :). No es que me queje, a todos nos pasa que resolvemos el problema como primero sale (más aún cuando las fechas de entrega son apretadas :). El otro día queriendo modificar un código me encuentro con este before_filter en un controller : def setprofile @viewer = false if (!params['id'] && !params['profile_id']) @profile = @passport else if params['profile_id'] pid = params['profile_id'] else pid = params['id'] end @profile = Passport.find_by_id(pid) if (!@profile) redirect_to(:controller => 'my3dg', :action => 'show') and…

  • General,  GNU+Linux,  Programación

    Do it right! – Manejo de dependencias

    En estos días he tenido varias discusiones sobre algunas prácticas muy acostumbradas en varios proyectos, que a mi parecer están muy lejos de lo útil. Es por eso que decidí escribir un par de artículos denominados «Do it right!» (hazlo bien!, si mi inglés no es tan malo como pienso :D). En esta primer entrega voy a tratar el tema de manejo de dependencias. Escenario Muchas veces uno se encuentra con un software que necesita y le es útil. Vamos a suponer de entrada que no tiene paquete para su distribución y/o sistema operativo favorito. En al leer el README vemos que depende de muchas cosas : alguna biblioteca de…

  • General

    Instalá tus Gemas con apt-get

    Finalmente y pese a todas la quejas de los debianista de que era «dificil» o «imposible» ya hay una solución (o al menos eso parece, todavía no la probé :D). La gente que hizo Passenger (a.k.a mod_rails) creó DebGem, que permite instalar prácticamente cualquier gema usando apt-get. El servicio no va a ser gratuito según parece una vez que pase la fase Beta, pero de todos modos demuestra que las gemas son empaquetables ;). ¿El precio? No lo dicen, pero aclaran que «subscription probably only costs about 1-2 hours of your time per month». Veremos si tiene éxito y si motiva a terceros a crear algo similar :D.