Archivo del Autor de dani

Estado actual de flatee

Ya ha pasado un mes y medio desde el post en que contaba que seguíamos trabajando en flatee, y en todo este tiempo este blog ha estado demasiado silencioso, por esto que menos que comentar cuál es el estado actual del proyecto ya que esperamos tener disponible la beta cerrada en las próximas semanas, que será de usar y tirar para que quienes os habéis interesado, podáis simular búsquedas de piso o de compañeros en flatee de forma más intensiva.

Ahora mismo se podría decir que están completadas el 95% de las funcionalidades que queríamos tener para publicar la beta, incluídas algunas integraciones con servicios de terceros que creemos que aportan una información útil cuando estamos buscando un lugar donde vivir.

En los últimos días, el trabajo ha ido enfocado principalmente en hacer algunos cambios en la interfaz de usuario para hacerla más amigable y es algo que todavía hay que seguir mejorando, además se han ido limando algunos errores por el camino; otro tema pendiente es el aspecto gráfico, que por el momento está en un segundo plano y es algo que habrá que retomar.

También hemos dado de alta un foro en uservoice para recibir el feedback, ya sea en forma de bugs o de votaciones de ideas, es un servicio que tiene muy buena pinta y que parece que a otros les funciona bastante bien, habrá que ver que tal funciona este servicio con su interfaz en inglés para un proyecto en español.

En fin, que esperamos no tardar demasiado en anunciar la disponibilidad de la beta de flatee, estén atentos a sus lectores de feeds ;).

Continuamos trabajando

Ya hace mucho tiempo de nuestro último post, supongo que los que sigáis nuestros blogs ya conoceréis el estado actual del desarrollo de flatee, y para los que no los hayáis leído recomiendo visitar los enlaces para conocer los diferentes puntos de vista.

Pues eso, que esto es simplemente para decir que estamos vivos y que, aunque de otra forma a la original con el Linking Internship, seguimos trabajando con el compromiso de tener una beta privada hacia finales de año.

Tests funcionales con Ruby on Rails

Actualmente nos encontramos en un punto en el que todavía no tenemos una primera maquetación de la interfaz de usuario de flatee, pero de todas formas estamos desarrollando.

¿Cómo lo hacemos?. Bien, estamos desarrollando con la ayuda de test funcionales para comprobar que todo lo que hacemos está correcto. Además estos tests nos servirán para comprobar que no se rompe nada con futuras modificaciones, y si se rompe ver que es lo que hemos tocado más de la cuenta.

Ruby on Rails nos trae de serie la posibilidad de crear test funcionales, verificando las acciones de nuestros controladores. Cada vez que generamos un controlador, se nos crea en el mismo momento una clase en [nombre_app]/test/functional/[mi_controller]_test.rb, donde podremos definir nuestras pruebas. Esa clase hereda de ActionController::TestCase, y en ella utilizaremos implementaciones para test de request y response, y haremos peticiones HTTP (get, post, put, head y delete) pudiendo pasar parámetros, comparando los resultados de esas llamadas con assertions,etc.

Por otro lado, tenemos los fixtures, que se crean al generar las clases modelo. Los fixtures, por defecto, son unos ficheros con formato YAML donde introducimos datos de prueba a los que nos referiremos en nuestros tests. Como es de imaginar los fixtures se pueden utilizar también en test unitarios.

Una vez explicado esto, veamos como es la práctica. En nuestro caso tenemos un modelo piso con ciudad y precio; un fixture de pisos; y un pisos_controller con las acciones listado y crear.

Este podría ser nuestro fixture(nombreapp/test/fixtures/piso.yml):

    piso_madrid:
      id: 1
      ciudad: 'Madrid'
      precio: 350

Nuestras acciones de pisos_controller.rb:

    def listado
      @pisos = Piso.find(:all)
    end
    def crear
      @piso = Piso.new(params[:piso])
      respond_to do |format|
        flash[:notice] = ‘Piso creado correctamente.’
        format.html { redirect_to piso_path(@piso) }
      end
    end

Y ahora vamos a escribir el test pisos_controller_test.rb: Requerimos el controlador que vamos a testear

    require 'pisos_controller'

Definimos qué fixtures utilizaremos, en nuestro caso sólo uno:

    fixtures :pisos

Hacemos el setup con las implementaciones para testing de request y response, además decimos qué controller vamos a utilizar:

    def setup
      @controller = PisosController.new
      @request = ActionController::TestRequest.new
      @response = ActionController::TestResponse.new
    end

Y los tests:

    def test_listado
      #Peticion get al listado
      get :listado
      #Comprobamos que el @pisos del listado, que viene a ser assigns(:pisos), no sea nulo
      assert_not_nil assigns(:pisos)
      #Debe haber un piso, es el que se crea con el fixture
      assert_equal assigns(:pisos).size,1
    end
    def test_crear
      #Peticion post al crear con parámetros
      post :crear, :piso=>{:ciudad=>'Cuatrecorz',:precio=>100}
      #Comprobamos que los valores insertados sean correctos
      assert_equal assigns(:piso).ciudad,'Cuatrecorz'
      assert_equal assigns(:piso).precio,100
      #Comprobamos también la redirección
      assert_redirected_to piso_path(assigns(:piso))
    end

Cuando ejecutemos el test, podremos ver si nuestros controladores se están comportando de manera adecuada y lo que es más interesante aún… podremos ejecutarlos de manera continua a lo largo de la vida del proyecto para evitar que cambios futuros puedan introducir nuevos errores.

La experiencia de los tests esta siendo muy interesante y estamos aprendiendo como hacer nuestro software más robusto: ¡os animamos a que probéis a testar vuestro aplicaciones si es que todavía no lo hacéis!.

Registrar usuarios o no registrarlos

Una discusión que hemos tenido ha estado relacionado con el registro de usuarios. Por un lado pretendemos que flatee sea un servicio que llegue al máximo de gente posible, y por otro queremos que se gane calidad en los contactos entre las personas que ponen el anuncio y las que están buscando habitación, ya que se está eligiendo nada menos con quién compartir una vivienda durante una temporada.

Para llegar al máximo de gente posible, lo mejor sería no tener registro de usuarios, confirmar simplemente la dirección de email de quien anuncia y que los contactos se hagan fuera de flatee, por esto la calidad sería más complicado de mejorar. Además surge algún problema incómodo para el usuario, en todas las acciones administrativas hay que ir confirmando la dirección de email (actualizar, eliminar, históricos…).

El obligar a registrarse a todo el mundo significa poner también una barrera de entrada. Quien busca piso tiene muchos sitios parecidos para ver anuncios y elegir con cuáles quiere contactar; mientras que para quién pone el anuncio, es aceptable el registro por la idea de que a más visto sea su anuncio habrán más interesados y más posibilidades de que alguien coincida con el tipo de persona que se busca.

Finalmente nuestra conclusión ha sido hacer algo intermedio. Quien anuncia debe registrarse, pidiéndole lo necesario, y quien busca no está obligado a registrarse simplemente por ver anuncios. Eso no se aleja de cómo funcionan ya algunas webs de clasificados, el añadido más importante está en que cualquier usuario que se registre pueda detallar su perfil, que es lo que aumenta la calidad en los contactos, y poder ver cómo es una persona con la que se puede acabar conviviendo.

De cualquier forma, aunque la entrevista en persona habrá que hacerla siempre, de esta manera se puede conseguir un filtro importante y ahorrar largas caminatas o maratones de entrevistas .

Respecto al comentario que nos hizo RuGI en su momento, no creemos que un sistema de reputación basándonos en la información de otros lugares o propia aportase demasiado, al estar refiriéndonos a la personalidad o modo de vida de una persona, no es algo medible. De todas formas, está contemplado el que si una persona quiere, pueda reflejar sus actividades online y offline para dejarse conocer mejor.

¿Por qué una web para compartir piso?

La idea surgió de una necesidad propia, lo tenía como idea/sideproject personal pendiente desde hace aproximadamente un año, que fué la última vez que busqué compañeros de piso, para lo que no había conseguido tiempo para dedicarle. Lo comenté como una posibilidad para desarrollar en el internship junto con otras que estuvimos viendo entre todos. Gracias a otros puntos de vista la idea ha tomado un enfoque distinto, sin perder la esencia original.

La última búsqueda de compañeros la realicé a traves de una web de clasificados genérica que funciona a nivel local (en Zaragoza), que tiene un tráfico bastante alto y no precisa registro de usuarios pero que a mi modo de ver, presenta bastantes limitaciones, esto me llevó a recibir demasiadas llamadas y emails. Me supuso un nivel de estrés y de pérdida de tiempo realmente alto, durante varios días no dejaba de tener llamadas y visitas. Llegando incluso 15 días después de tener las habitaciones alquiladas seguir recibiendo llamadas. Por otro lado en muchos casos en el momento de la visita/entrevista no le encajaba a quien venía a verlo o no me encajaba a mi esa persona.

De todas formas, desde el punto de vista del anunciante se puede considerar un mal menor el que ocurra esto si finalmente se consigue ocupar el piso. Pero hay otras muchas ocasiones dónde el anuncio es poco explicativo o no tiene suficiente detalle de cómo es el piso/habitaciones, ¿llamarías viendo un anuncio del tipo “Alquilo habitación céntrica, en buen estado y bien iluminada. 250€” entre otros muchos anuncios?, este tipo de anuncios suele ser de personas que no tienen muy claro qué deberían poner y se podría solucionar llevando de la mano al usuario. Así todos ganaríamos en tiempo invertido tanto en la búsqueda de compañeros como en la búsqueda de esa habitación que necesitamos.

Desde el punto de vista de quien busca un piso (que también me ha tocado hacer) que se pasea por la ciudad, hace las llamadas, compara pisos; necesita cierto nivel de detalle en los anuncios: desde alguna foto para hacerse una idea, saber de qué dispone el piso, qué tipo de persona es la buscada, dónde está localizado… para hacer el primer corte y ahorrarse caminatas o llamadas de pisos que no se ajustan.

Estas son algunas de las cosas que queremos solucionar con flatee, para mejorar la experiencia tanto de la búsqueda de piso como de nuevos compañeros.