fíam

(rhymes with liam)

  • Filtrus

    May 6, 2009 at 01:25:49 CEST

    Finalmente, hoy he podido encontrar tiempo para empezar a trabajar en el proyecto sobre el que escribí la semana pasada. Todavía pasarán unos días antes de que pueda publicar algo concreto, pero los progresos son importantes. He reescrito más o menos un 50% del código del backend web, cambiando el nombre original y portándolo a Django 1.1. Una vez termine esta fase, subiré toda esa parte a github y me pondré a portar el engine de recomendaciones a PostgreSQL.

    ¿Tiempo estimado? Probablemente el backend esté terminado para el viernes, mientras que al engine de recomendaciones probablemente me lleve uno o dos días más. El frontend por ahora no lo voy a modificar, aunque será en lo primero que me ponga a trabajar una vez la página esté funcionando.

    Lo que sí os puedo ya adelantar es el nombre del futuro sitio: filtrus.

    /goes back to coding

  • Creemos una alternativa

    May 6, 2009 at 01:18:04 CEST

    Son muchos los problemas de menéame y, probablemente, muchos seáis conscientes de ellos, así que me voy a saltar esa parte y me voy a ir directo a lo interesante.

    Hace unos meses, simplemente por diversión, me dediqué a programar un sitio al estilo de menéame a digg, intentando llevar esos mismos conceptos al siguiente nivel. Terminé cerrándolo porque, evidentemente, nadie lo usaba (es difícil darse a conocer cuando no tienes intención de gastarte dinero en publicidad) y mi único motivo para mantenerlo era divertirme y experimentar, cosa complicada cuando tu masa de usuarios ronda la centena.

    No voy a entrar en demasiados detalles, ya que no quiero que está entrada termine siendo demasiado pesada, pero sí haré una overview de las características del sitio que programé:

    • Sistema de recomendaciones
    • Cada usuario tiene una portada personalizada, basada en sus preferencias calculadas a partir de sus votos (llamemos a esta sección unfiltered)
    • Existe también una sección al estilo de la portada de menéame, donde se muestran las noticias que han superado un número determinado de puntos (filtered)
    • El sistema de promoción se basa completamente en las recomendaciones: cuanto menos probable sea que me guste una noticia, más peso tendrá un voto positivo emitido por mí (y menos peso un voto negativo). De esta forma se consigue una variedad increíble de contenidos, pues se evita completamente el "efecto enjambre" (mafia o bury brigades, como dicen en otros sitios).
    • Las noticias se organizan tanto por etiquetas como de forma jerárquica atendiendo a su localización (en las que sea aplicable). De esta forma, puedes por ejemplo consultar sólo la portada de las noticias que suceden en tu comunidad autónoma. Esto se aplica también al algoritmo de promoción, de forma que, por ejemplo, una noticia de Madrid primero tendrá que promocionar en Madrid, luego en España, a continuación en Europa y, finalmente, podrá pasar a la portada global (si consigue votos suficientes, claro).
    • El sistema soporta completamente tanto inglés como castellano (tanto en el interfaz como en los sistema de recomendación), pudiendo escoger el usuario el idioma del contenido al que quiere acceder.

    No obstante, y a pesar de que este sitio a día de hoy está cerrado, gran parte de su código está liberado y puede ser accedido a través de mis repositorios de github. Hay partes que aún no las he liberado debido a que mi trabajo actual no me ha dejado tiempo para terminar de limpiar todo el código, pero mi intención es que sea todo libre.

    Y, bien, ¿qué busco con esta entrada? Ofrecer a la comunidad el sistema que yo programé para que si, hay alguien interesado en mejorar las cosas que faltan, podamos entre todos crear un nuevo sitio que nos permita intercambiar contenidos sin que haya una veintena de personas que dicten lo que sale a portada y lo que no. Si hay suficiente gente interesada (tanto en ayudarme a pulir los detalles del código que faltan como a colaborar enviando y votando noticias), yo me comprometo a liberar todo este código y crear una página. Además, cualquiera que desee crearse un clon será también bienvenido.

    En cuanto a las características técnicas, el código del backend es Python y utiliza Django, mientras que todo el sistema de recomendaciones está escrito en C usando Glib (una de las librerías base de Gnome). El frontend es simplemente XHTML y se utiliza un poco de jQuery. Los cambios más importantes que habría que hacer son los siguientes:

    • Portar el backend a Django 1.0 (esto no debería ser mucho trabajo)
    • Portar el javascript a jQuery 1.3
    • Actualmente, el sistema de recomendaciones acceder a la base de datos utilizando la API nativa de MySQL. Sería deseable, por su mejor soporte de GIS, portar todo esto a PostgreSQL, aunque el sitio funciona perfectamente sobre MySQL.
    • No vendría mal mejorar un poco el diseño gráfico, puesto que el actual está hecho por mí y yo soy un tanto manco para esas cosas

    Si hay alguien interesado en colaborar con este proyecto, que deje un comentario y me envíe un correo (está a la derecha) y yo me pondré en contacto con él con la mayor brevedad posible.

  • Adding a simple WYSIWYM Markdown editor to your models

    March 9, 2009 at 10:01:54 CET

    I'm a Markdown fan. Period. Since I first discovered it some years ago, I've been using it for storing all my "output-to-HTML" texts.

    Blango, the blog engine I wrote for this site, uses Markdown for post contents. As I've said, I really like Markdown, but typing (and sometimes escaping) all those *[]() gets boring from time to time. I've been looking for something like a WYSIWYG editor for some time, but none of the available choices seemed good enough for me. However, I recently stumbled upon WMD.

    So, what's WMD and why should I care?

    In the author's own words:

    So WMD is something new: a Wysiwym Markdown editor.

    Wysiwym stands for What You See Is What You Mean. WMD produces clean semantic HTML, leaving presentation details like fonts and colors up to style sheets. But you're not left in the dark about cosmetics; as you type, WMD's live preview shows you exactly what your text will look like after the current styles have been applied.

    Markdown is a simple markup language that's as easy to read and write as plain-text email. WMD uses Markdown as an input format, converting it into HTML behind the scenes. You can also mix raw HTML with Markdown, so the full expressiveness of HTML is always there if you need it.

    Plus, WMD is comprised of Javascript and image files, doesn't need server support, doesn't depend on any Javascript Framework and it's just a small rectangle over the textarea. Id est, it doesn't get in my way.

    Downloading the required files

    WMD was a hosted service until recently and is currently provided as a set of Javascript obfuscated files. The author is working on a new release, but this is all we got for now. Anyway, good enough.

    You can get the last version (1.0.1 as the time of this writing) from project's downloads page. Just open the zipfile and copy the wmd directory to your MEDIA_ROOT.

    If you're storing your posts as Markdown and doing the conversion to HTML (as you should be doing), you need to take one extra step. Open wmd/wmd.js and change line 4 to read:

    Attacklab.wmd_defaults={version:1,output:"Markdown",lineLength:40,delayLoad:false};
    

    WMD will preprocess the Markdown and send HTML to the server otherwise.

    Adding WMD support to your models

    By default, WMD will attach an editor to every textarea. So, all we need to do is tell the admin interface to include wmd/wmd.js when adding or editing our models. This can be done by using the inner class Media in your ModelAdmin subclass. For example:

    class EntryAdmin(admin.ModelAdmin):
        class Media:
            js = ( 'js/wmd/wmd.js', )
    

    And you're ready to go. Now your models will have a small rectangle featuring the WMD over every textarea. WMD

  • Blango, django-geonames, oauthsp and wapi hosted at GitHub

    Feb. 17, 2009 at 01:22:19 CET

    I've finished moving some of my git repos to GitHub. You can now check Blango, django-geonames, oauthsp and wapi from there. Those are, from now on, the official repos. The old ones at byNotes have already been closed.

  • Leaving byNotes

    Feb. 15, 2009 at 23:18:54 CET

    Well, let me start by explaining all those mails about byNotes I haven't answered in the last few months. Around mid November I got contacted by the recruiting staff of a social network. At that time, I was still working in the project for my degree (computer science students in Spain are required to write a project for the university in order to get the degree) and I wanted to concentrate on it, but I decided to just take the interviews just in case. They finally told me they wanted me to join them and we agreed to continue the negotiations once I had finished my project.

    Fast forward to January, my project is done and christmas holidays are gone, time to reestablish negotiations. Salary is good, schedule is very good (telecommuting 99% of the time) but there's something bad: I must leave byNotes, since management considers it's competing with them.

    It wasn't an easy decision, but it was the best option. byNotes has been very fun, but also such a time drain to me, and I haven't got any single eurocent from it. Plus, I'm a coder, not a designer nor a business guy, and I don't have too much money to spend on it. So I really don't think I could make it profitable.

    As of today, I've been already working for my new employer for some weeks. My name still figures as the domain holder for bynotes.com and in some about pages, but that should change soon. I'm sure the new maintainers will do a good job at keeping the project alive.

    And now comes the interesting part for you, developers. What happens with my free software projects? Well, I'm keeping all of them, but I won't be able to spend some much time working on them. Since I won't be owning byNotes anymore, I'm moving them to GitHub and using LightHouse for ticket tracking. The following is the list of projects I'll be moving to GitHub in the next few days:

    • Django projects

      • Blango
      • wapi
      • django-bundles
      • django-geonames
      • django-geocoding
      • django-storage
      • django-mediafiles
      • django-oauthsp
    • Python projects

      • ffmpeg bindings
    • Cocoa projects

      • My fork of OAuthConsumer (fixing some bugs, implementing some goodies)
      • BNMaps (map framework)