Archive for Marzo, 2008

En Moterus ya damos la vuelta al mundo!

Buenas noticias moteros,

Sumando la distancia de todas las rutas creadas en moterus en poco más de 3 semanas ya podemos recorrer más kilómetros que dando la vuelta a la superficie de la tierra. Según la wikipedia, el diámetro medio de la Tierra es de 12.742,00 Km, recordando los tiempos de la escuela, multiplicamos por π (Pi) y nos da un total de 39.939,06 Km.

Pues bien, es para mi una satisfacción poderos anunciar que en moterus ya tenemos más de 40.000 Km en rutas moteras por la geografia Española. A disfrutarlas!

Vssss

 

Controladores Polimórficos y Ruby on Rails

Vamos a empezar con las cosas frikis en el blog, no lo he podido resistir.

Hoy lanzo una pregunta a la comunidad de desarrolladores Ruby on Rails de habla Hispana (¿Hay alguien?): ¿Cómo carajo os lo montais para mantener el código DRY con los controladores polimórficos?

Me explico con un ejemplo (real):

En moterus tenemos usuarios, cada usuario puede tener n motos y a la vez, tanto los usuarios como las motos pueden tener n fotos.

Por lo tanto tenemos un users_controller, un bikes_controller y un photos_controller (¿Hasta aqui todo bien, no?).

En el routes.rb tendriamos algo como:

map.resources :users do |user|
  user.resources :bikes do |bike|
    bike.resources :photos
  end
  user.resources :photos
end

Entonces, ¿que pasa con el photos_controller? ¿Cómo podemos saber si queremos mostrar las fotos de un usuario o de una moto? Si es de un usuario nos llegará el params[:user_id] lleno, si es de una moto tendremos params[:user_id] y params[:bike_id]…

Un lector avispado podria decirme: ¡fácil!

@user = User.find(params[:user_id])
if params[:bike_id]
  @bike = @user.bikes.find(params[:bike_id])
  @photos = @bike.photos
else
  @photos = @user.photos
end

Pues bien, va a ser que no. Porque? Pues por varios motivos:

1) Además de usuarios y motos, también tengo grupos, eventos, rutas…. lo cual convertiría este bloque de “ifs” en un infierno, y segundo (y más importante si cabe) porque luego en el template…. ¿como construyes los links a las fotos? Según el fichero de rutas que he puesto arriba, rails nos daria lo siguientes helpers:

user_photos_path, user_photo_path, new_user_photo_path....
user_bike_photos_path, user_bike_photo_path....

¿Que tendriamos que hacer en el template “photos/index” ?

link_to @photo.title, y la url???

Vale. Una vez puestos a todos en situación, esto es un problema. ¿Como lo hemos solucionado en moterus? Agárrense a sus asientos:

Para empezar las rutas de Rails (2.0.2) a mi entender tienen un fallo, y es que en los “resources” anidados no expande el path_prefix ni name_prefix, me explico: si tu tienes un fichero routes.rb como este:

map.resources :users do |user|
  user.deactivate 'deactivate', :controller => 'users', \
:action => 'deactivate'
end

si ejecutamos un rake routes nos dirá algo como esto:

...
user_deactivate  /users/:user_id/deactivate \
{:path_prefix=>"/users/:user_id", :name_prefix=>"user_", \
:controller=>"users", :action=>"deactivate", :namespace=>nil}

esto que implica? Pues básicamente que cuando se acceda a la url /users/33/deactivate tendremos automágicamente los siguientes parámetros:

params[:user_id] = 33
params[:path_prefix] = "/users/:user_id"
params[:name_prefix] = "user_"

en cambio, si tenemos un fichero routes.rb como este:

map.resources :users do |user|
  user.resources :comments
end

y ejecutamos de nuevo el rake routes, veremos que rails no nos expande el :name_prefix ni :path_prefix.

Creo (y digo creo) que no lo hace porque habria cierta “inconsistencia” con los helpers edit_xxx, new_xxx y formatted_xxx. La generación de “named routes” en rails tal como está montado hace que el parámetro “name_prefix” sea también el “prefijo” del helper, por lo que si en el ejeplo anterior se pusiera el name_prefix a “user_” provocaria que en lugar de generarnos helpers como “edit_user_comment” tendrian que ser “user_edit_comment”. Yo podria vivir con ello, o cambiar el sistema de generación de named routes para que el name_prefix no tuviera precedencia sobre la acción sino solo el controlador…. Pero las cosas son como son.

Así pues, una vez puestos en situación, explico como lo hemos “solucionado” en moterus:

Puesto que no tenemos la ayuda del (name/path)_prefix, nos lo hemos “currado” nosotros para implementarlo, de modo que en el photos_controller pueda saber a partir de la url sobre que objeto quiero ver las fotos….

Ooooh! Llevo tiempo ya dedicado a este post y la verdad es que me está quedando una explicación más compleja de lo que esperava, por lo que dejo el post así. Si alguien está realmente interesado en saber como lo hemos solucionado, que me mande un email o lo ponga en los comentarios, así veo si realmente vale la pena hacer el esfuerzo de explicarlo, y de paso explico también lo de las rutas multi-idioma (que tiene su miga….).

Así pues, a alguien le interesa realmente este tema? Que levanten la mano!

Vssss

Salidita este jueves

Este jueves nos vamos a “regalar” una salidita en moto para descansar despues de tanto trabajo en moterus. Si alguien se quiere apuntar, sereis todos bienvenidos. ;)

Curvejant per les terres de Lleida

Si os quereis apuntar, ya sabeis: Sortideta entre setmana

Nos veremos?

Ya somos uno más

Moterus ha nacido, y al parecer con buen pié.

Después de una semana en beta pública hemos llegado casi a los 800 moteros registrados, 20mil Kilómetros de “diversión” y 100mil páginas vistas (de momento Rails escala más que suficiente!)

Me gustaria agradecer a todos y cada uno de los moteros/as que nos han felicitado, que han hablado de nosotros en sus foros, que han posteado algo sobre nosotros en sus blogs, que han invitado a sus amigos….. Gracias!

Ya somos uno más. Hemos llegado para quedarnos.

Y no quisiera acabar el post sin agradecer de forma muy especial a nuestros “beta testers”. Aquellos que sin conocernos de nada os registrasteis en moterus para ver “que se cocia”. Y de ellos, un agradecimiento más especial si cabe a los que he tenido el placer de conocer en persona: CytecK, Aletheia y Dracco.

A todos vosotros, y a los que vendrán, Vssssss!

Camarasa….

P.D.: Si, ya se que tengo pendiente algún post “técnico” sobre las tripas de moterus, pero…. a estas horas uno no está como para explicar ruby… ¿tal vez mañana?

Agotado

Así estoy,

después de unas semanas sin descanso preparando y ultimando los detalles para el lanzamiento oficial de moterus, llevo 3 dias aún más estresado después del lanzamiento.

Parece que hoy podre irme a la cama antes de las 12 (creo que hace meses que no ocurre). Moterus ya ha empezado a andar. Estamos más que satisfechos con la acogida inicial por parte de los blogs y los foros de motos/moteros. A todos vosotros: gracias por los mensajes de ánimos, por el entusiasmo demostrado. Prometo no defraudaros.  Pronto vendran más funcionalidades para hacer de moterus una auténtica comunidad de moteros (prefiero decir comunidad que red social).

A los bloggers y foreros recelosos de la iniciativa, os quiero transmitir un mensaje: No pretendemos quitaros usuarios o audiencia, creo que somos complementarios. En un blog vas a informarte de las novedades y comentarlas, en un foro a expresar tus opiniones y charlar con amigos. Queremos que esto continue siendo así. Lo que pretendemos ofrecer es un espacio donde compartir rutas y planear eventos, dar a conocer tu grupo de amigos, conocer gente de tu alrededor (o a miles de Km de tu casa). ¿Lo conseguiremos? ¡Espero que si!

dsc09845.jpg

Vsss

Ya somos públicos!

Pues sí,

ya puedes ver que pinta tiene este proyecto en el que llevo invertidas tantas horas. (Y las que quedan!)

Moterus - Tu red social de moteros

La primera criatura de Vesne empieza a andar hoy, veamos hasta donde conseguimos que vaya.

Larga vida a moterus!

Preparando el lanzamiento oficial de moterus

Llevo unas semanas de actividad frenetica y sin descanso (y lo que me queda…).

Estamos acabando el lanzamiento de moterus. Parece mentira la de cosas que hay que tener en cuenta para el lanzamiento de un proyecto en internet.

El desarrollo base del proyecto nos llevo apenas 6 semanas (más o menos), pero hacerlo “production-ready” es otro cantar. Cosas sobre las que hemos estado trabajando las últimas semanas:

  • Estrategias SEO.
  • Usabilidad.
  • Traducciones
  • Retoque de imagenes
  • Compatibilidad con distintos navegadores
  • Validación XHTML
  • Optimización de Javascript y CSS
  • Técnicas de caché para mejorar rendimiento.
  • Configuración de sistemas de backup
  • Y un sinfín de tareas…

¿Y todo esto para que? Pues para intentar asegurar una experiencia de usuario única, que funcione todo rápido, que el usuario no se sienta perdido en ningún punto, que se pueda utilizar con casi cualquier navegador, que posicione bien en los distintos buscadores para captar usuarios…. en fin, para intentar asegurar el éxito del proyecto.

Ah, ¿que no sabes que es moterus? Bueno, pues tienes dos opciones:

  1. Pedirme una invitación a la beta privada o
  2. Esperarte dos dias (¡Ya queda menos!) y descubrirlo tu mismo en www.moterus.es

¿Nos veremos allí?

Moterus - Preview