Tag Archives for RubyonRails

Interface iPhone para aplicaciones Rails

He conseguido desarrollar un primer prototipo de interface específico para iPhone en L-exp . Todo ello ha sido posible a las indicaciones que encontré en un post de los desarrolladores de trawlr.

El proceso es bastante sencillo ya que utilizamos una framework en Javascript llamada iUI. Esta ya viene con todas las imágenes, javascripts y ficheros CSS para su ejecución. Aquí como única precaución respecto la explicación del post es que hay que colocar los ficheros .js en la carpeta javascript de public y el resto incluyendo las imágenes en la carpeta stylesheets de public.200806281033.jpg

En este mismo post recomiendan la utilización de iPhoney que viene a ser un pseudo emulador. Pero la verdad es que a mi no me fue bien y hasta que no use el emulador que trae Iphone SDK no pude probarlo bien. Este último lo podéis descargar desde el iPhone developer center.

La verdad es que el proceso es sencillo lo que si que es necesario adaptarse a la filosofía de interface de iPhone. La framework iUI utiliza llamadas AJAX y por tanto hay que jugar con que muestre el layout la primera vez.

Mi intención es intentar tener la versión de L-exp para desarrollada para el 11 de Julio coincidiendo con la llegad del iPhone en España y probablemente con la adquisición de uno para mi….

Cada vez las versiones móviles son más importantes y lo estoy viendo diariamente en la versión móvil de L-exp que recibe más visitas. Todos los teléfonos de una forma u otra pueden ya navegar por internet y esto nos permite consultar de forma fácil información.

Aquí tenéis una lista con todas las herramientas para desarrollo para iPhone que menciono.

Tools for iPhone development

Rendimiento de Rails 2.0 y el futuro Rails 2.1

Desde Riding Rails nos informan que alguien ha hecho una comparativa demostrando que Rails 2.0 es entre un 30 y 50% más rápido que Rails 1.2.X. Además otro estudio muestra que consume menos memoria que la versión previa.

En el post nos anuncian que para la versión 2.1 vendrán interesantes novedades que aún harán ganar más rendimiento. ¿quizás la integración con Ruby 1.9?

Detectando y direccionando un navegador móvil ( Rails)

Me he encontrado en la tesitura de tener que detectar si un visitante usa un navegador desde un dispositivo móvil y entonces enviarlo a la versión móvil de L-exp.

Para ello me he basado en una página en donde están todos los UserAgent que identifican todos los navegadores. La implementación en Ruby on Rails ha sido muy sencilla.

En el Application controller:

def check_mobile

agent = request.user_agent

if is_mobile(agent) then

redirect_to(’/mobile/’) #new mobile address

end

end

def is_mobile(agent)

# based on http://www.zytrax.com/tech/web/mobile_ids.html

case agent

when /Nokia/, /AvantGo/, /DoCoMo/, /Vodafone/, /PalmOS/, /Windows CE/, /Minimo/, /Plucker/, /Palmsource/, /NetFront/, /PIE/, /iPhone/, /BlackBerry/, /MOT-/, /Nokia/, /Symbian/, /O2/, /Mini/, /Blazer/, /MobileExplorer/, /RegKing/, /EPOC/, /SAGEM/, /SCH-/, /SGH/, /SIE/, /SonyEricsson/

return true

else

return false

end
end
En el controlador que quiero redireccionar:

class TheController < ApplicationController…. before_filter :check_mobile
…..
end

Lo acabo de instalar y parece que funciona.

Probando Mephisto

Me he instalado en mi Mac Mephisto para probar este sistema de blogs desarrollado en Ruby on Rails. La instalación ha sido muy sencilla y con dos comandos ya lo tenía funcionando.

La realidad es que es un sistema que promete y además para los que somos apasionados de Rails nos gusta mucho ya que nos podemos permitir el lujo de toquetearlo. Aunque todo se ha de decir que lleva un sistema de plantillas basado en liquid que permite personalizar cualquier tema a nuestro antojo.

Como cosas interesantes también soporta plugins, secciones, assets ( cualquier elemento gráfico) y otras cosas. Con el tiempo y la implantación de Rails podrá ser un contrincante de Wordpress.

Para instalarlo localmente: ( instalar Rails en nuestra máquina)

  1. Descargamos el código y lo ponemos en una carpeta donde esten nuestras aplicaciones Rails
  2. Creamos una base de datos llamada mephisto_development en MySql
  3. Renombramos database.example.yml a database.yml ( dejando sólo las opciones MySql)
  4. Congelamos Rails edge : rake rails:freeze:edge ( dentro del subdirectorio de nuestra aplicación)
  5. Ejecutamos: rake db:bootstrap ( subdirectorio de nuestra aplicación)
  6. arrancamos el servidor con : ruby script/server (desde el subdirectorio de nuestra aplicación)
  7. Vamos con el navegador a la dirección : http://localhost:3000/admin y entramos con el usuario admin y contraseña test.

Lo he añadido a mi lista de aplicaciones ejemplo para aprender Rails . Ya que tenemos acceso a su código vía SVN.

Para los novatos en Rails ver estas listas con los elementos para empezar.

Encontraréis unas instrucciones de instalación en public/install.html.

Mephisto

Rails 1.2.6 disponible

Acabo de actualizar a esta nueva versión de Rails utilizando el comando:

gem install rails --include-dependencies
RAILS_GEM_VERSION = '1.2.6' #en config/Environment.rb
rake rails:update:configs

Se trata de una versión que trae mejoras de seguridad y mantenimiento. Sin duda recomendable de migrar para estar preparados para la versión 2.0.

Vía

Resumen de la conferencia Rails hispana 2007

Han sido dos días muy intensos y vuelvo con muchas cosas en la cabeza. Sin duda la organización ha funcionado a la perfección y el nivel ha sido muy bueno.

Podría hacer un post de 10.000 líneas, pero sería imposible sintetizar la cantidad de información que hemos recibido.

Para los que no hayan podido asistir podéis encontrar información en:

Web oficial | http://www.conferenciarails.org

Fotos en Flickr | http://www.flickr.com/groups/conferenciarails/

Durante la conferencia nos dijeron que pondrían todas las ponencias ( transparencias) y se grabaron 2 de las 3 salas. Hubo un fallo técnico de última hora con una de ellas. Supongo que pronto estarán en la web oficial.

Lo mejor

Si alguien me preguntase esto tendría problemas para contestarlo ya que la gente, la organización y los ponentes han estado muy bien.

Las ponencias

Lógicamente sólo estuve en las comunes y en una tercera parte de las otras. Por temas de viajes me perdi la keynote que estaba Obie Fernández. Me han comentado que estuvo bien y fue divertida.

A continuación voy a comentar algunas impresiones de las que yo fui. Esto no quiere decir que las otras no fuesen interesantes pero aún no he podido ver los vídeos.

1er Día

Sesión inagural

La presentaban Agustín Cuenca ( ASP Gems) y Luis Villa ( The Cocktail). Dos empresas punteras españolas que están desarrollando con estas tecnologías. Dierón una vision muy clara de la situación de Rails y que existen grandes proyectos que ya corren sobre esta Framework . Ejemplos como Slideshare, Dopplr.com, Facturagem.com, Unvlog.com, The-shaker.com, etc….

Tambien comentaron que hay muchas grandes empresas que están utilizando estas tecnologías como Oracle, IBM y otras….

Hablaron de la comunidad Rails comentando que es un Tesoro y otras muchas cosas interesantes.

Para los que esten interesados en trabajar con Rails podéis contactar con ellos ya que están interesados en contratar más gente.

APIs de IDENTIDAD

La presentaban Juan Gallego y Miguel Ángel Martínez de Flowers in Space. Comentaron OpenId como sistema de identificación general y  que existe un plugin que funciona de maravilla para implementarlo,

Algo de Yadis que es multisistema de indentificación.

OAuth que sirve como mecanismo para autorización de aplicaciones y que aún está en desarrollo. Existe un lugin en desarrollo. Tiene apoyo de grandes empresas.

OpenSocial que está en fase beta y es la API para las redes sociales.

Una presentación muy bien estructurada y con trozos de código. Dando todos los detalles para que podamos probarlo.

Rails en el código

Xavier Noria empezó explicando los elementos que componían una aplicación Rails y luego describió el funcionamiento de una aplicación Rails desde que arrancamos el servidor hasta que se muestra la página. Fue interesante ya que siguió paso a paso todo el proceso explicando conceptos importantes como las Constantes y otros elementos. Muy didáctica para aprender como funcionan las tripas de Rails.

Más allá del Testing

De la mano de Sergio Gil y Christos Zisopulos  explicaron todos los enfoques y técnicas que hay sobre el testing. ¿Si hacer testing?¿Antes o después del código? Me gustó dos frases suyas: ” El buen código es fácil de testear” y “El código fácil de testear es bueno”. Ley de Deméter. Y finalmente algunas herramientas como rcov, leckle, Integración continua con CruisecontrolRB. El testing es algo que a muchos nos cuesta hacer, pero sin duda los profesionales lo encuentran como un elemento indispensable.

Caché en Rails

Fernando Blat nos explicó todas las alternativas de Caché que tenemos en Rails y fuera de Rails. Fue interesante ya que valoró todas las opciones. Finalmente comentó una evolución que él ha hecho del caché con versionado para evitar el tiempo de borrado del caché antiguo. Parece una propuesta muy buena, pero ha tenido que modificar código de Rails para su implementación. Estaría bien que existiese un Plugin fácil de implementar.

Escalabilidad en Rails

Pablo A. Delgado hizo una charla muy divertida e interesante demostrando que Rails Escala si lo preparamos para ello. Fue muy pragmático y demostró sus opiniones con ejemplos reales.

Habló del servidor NGINX como una opcion interesantísima. Sobre todo si le añadimos el balanceo con el parámetro fair.

Comentó que fastcgi hay que erradicarlo.

Mongrel comentó que en una parte de su proceso no es multi tarea y tiene procesos que consumen mucho como la Route Recognition. Siempre que podamos ir directamente a páginas estáticas lo hagamos.

Uploads comentó que son machaca Mongrels y habló de la alternativa de utilizar MERB para liberar a Mongrel. Además dijo que para gestionar el estado de todas las cargas podemos utilizar drb.

Tener en cuenta la limitación de los sistemas operativos en cuanto a número de archivos por subdirectorio y propuso un método para nombrar los archivos.

En cuanto a la búsqueda hizo una demostración de Sphinx Search que indexó una cantidad bestial de información en pocos segundos.

Todas estas herramientas y configuraciones comentó que las tiene en su proyecto fotolog.com.ar y nos pudo mostrar la velocidad de sus transacciones. Más real no podía ser.

Mesa redonda sobre web frameworks

Fue muy divertida, en especial el defensor de Django (Python) Marcos Sánchez y el tesón que tuvo Daniel Ortega defendiendo  a Java.

2o Día

Mesa redonda sobre Empresas

Estaban Microsoft, Sun, Alberto Knapp de The Cocktail y un FreeLance Jaime Iniesta. Estuvo bien el discurso del representante de Sun con un tono muy humano. El de Microsoft mostró su estrategia de que van a soportar todos los lenguajes dinámicos en .NET y esperan que Rails corra sobre IronRuby pronto. Alberto Knapp dijo sabiamente que ellos no se casaban con ninguna tecnología, sino que cogian la que en cada momento les iba mejor.

Comentarón conceptos como la diferencia entre Waterfal y Wash Machine como estrategia de trabajo en proyectos.

Las Apis de movilidad de OpenMovil Forum

Manuel Muñoz y Álvaro Ortíz ( The Cocktail) hicieron una demostración de las posibilidades de integración de Rails con la plataforma OpenMovil de Movistar. Enviarón SMS y los recibieron desde su aplicación opensource. Fue muy interesante ver lo fácil que va a ser integrar las aplicaciones con SMS, MMS,etc… En breve. Para los que les interese hay BarCamp el 13 de diciembre sobre Movilidad. Al final repartieron una tarjeta para poder probar gratis esta API. Ya os contaré.

Inteligencia Artifical y RoR

Santiago Bel y Sergio Espeja dieron una excelente explicación de las posibilidades de la inteligencia artificial aplicacada a proyectos Web. Todo ello con un caso real que utiliza la inteligencia para detectar que combinaciones de anuncios son las que traen más clicks. Una exposición con mucho rigor y humor. Al finalnos hablaron del clasificador Naïves Bayes con un ejemplo para identificar mensajes de soporte.

podemos ver la web de ejemplo en http://www.publievo.com

Internalización - Si es posible

Samuel Lown hizo una extensiva explicación de todas las opciones de internacionalización de aplicaciones. Muy interesante y bien llevada. Mostró soluciones para Aplicaciones y para modelos. Al final recomendó Gettext aunque es complejo y un plugin hecho por él llamado Translate Columns.

Truco: No nos olvidemos de añadir en database.yml en la definición de la base de datos encoding: UTF8

Como programar un Blog REST

Javier Vidal Postigo sudó tinta pero al final consiguió demostrarnos como hacerlo.

ROA : REST

De la mano de Juan Quemada y Joaquim Salvachúa nos explicaron lo que es REST y el origen de esta. Recomiendan la lectura del libro Restful Web Services. Basado en ROA ( Resource oriented Architecture) es el procedimiento que por su simplicidad y fácilidad de implantación está ganando a los complejos Web services basados en SOA. Hubo algo de polémica en la sesión, pero fue interesante. Imprescindible para el que se plantee tener una aplicación ya que ahora lo que toca es tener APIS para integrarnos con otros servicios.

Hasta aquí llegué ya que me tuve que ir volando hacía el aeropuerto para volar hacía Barcelona. Estoy esperando a que aparezcan los vídeos para repasar algunas sesiones  y ver las que no pude asisitir.

Que me disculpen los autores de estas si he cometido alguna inexactiitud ya que fue demasiada información. También los ponentes que no comento ya que no pude estar en sus sesiones y no los menciono.

Fue interesante las aportaciones de algunos de los asistentes durante las sesiones, demostrando que hay nivel.

Sin duda gracias a las risas e interesantes comentarios con Andrés, David, Matthias, Xavier, José y muchos otros cuyo nombre no puedo recordar..

Os adjunto la lista en L-exp para que sigáis a estos ponentes y otros.

ASP.NET va a tener una MVC Framework

Desde el blog de ScottGu’s anuncia que Microsoft va a presentar un soporte opcional en ASP .NET ( su plataforma web) para poder utilizar el sistema Model-View-Controller ( MVC) que utilizan Web frameworks tales como Ruby on Rails .

No voy a profundizar en como funciona ya que de momento es muy nuevo, pero lo que está claro es que Microsoft quiere seguir los pasos de Ruby on Rails y otras web frameworks que se están popularizando.

Yo tengo experiencia en ASP.NET y es una plataforma muy potente. Sin duda si el MVC se convierte en tan sencillo como lo es con Ruby on Rails podrá ser una alternativa a plantearse profesionalmente.

Más enlaces:

Presentación y vídeo en blog de Scott Hanselman’s

ASP.NET MVC Framework ( Part I)

Rails 2.0: Release candidate 1

Desde Riding Rails nos comentan que ya se puede instalar la Release Candidate 1 de la versión 2.0 de Ruby on Rails . Comenta que la tendrán dos semanas para ver que temas salen y los irán corrigiendo. Ya se acerca la definitiva….

Vía

Aptana Studio 1.0 lanzada

Hace un tiempo escribí varíos post sobre Aptana, un IDE para desarrollo que soporta diferentes lenguajes y scripts de programación. Acaban de lanzar la versión 1.0 y lo han rebautizado como aptanta Studio.

En realidad hay una versión PRO de pago (99$) y una de la comunidad que es gratuita. Lógicamente la de pago tiene algunas mejoras que la diferencian. Una de los grandes atractivos que yo le he encontrado ha sido la disponibilidad de un plugin para Ruby on Rails y recientemente han sacado uno para iPhone, AIR y PHP. Por tanto es un IDE bastante potente.

Aptana 1.0 Studio

Lista de IDEs para desarrollo Rails

Detectando los crawlers desde rails

Supongo que por allí deben haber funciones más elaboradas y documentadas. Pero os adjunto el código que yo uso para detectar si se trata de una visita normal o un crawler ( motor de búsqueda) que rastrea mi site. Como veréis hay poca ciencia, pero si experiencia.

 

En application controller añadir la siguiente función:

def is_crawler(agent)
  testv=false
  if agent =~ /Slurp/ then #yahoo
    testv=true
  end
  if agent =~ /Mediapartners-Google/ then
    testv=true
  end
   if agent =~ /VoilaBot/ then
    testv=true
  end
  #Googlebot
   if agent =~ /Googlebot/ then
    testv=true
  end
  if agent =~ /Spider/ then
    testv=true
  end
  #msnbot-media
  if agent =~ /msnbot-media/ then
    testv=true
  end
  #SnapPreviewBot
  if agent =~ /SnapPreviewBot/ then
    testv=true
  end
  if agent =~ /ichiro/ then
    testv=true
  end
  if agent =~ /Jeeves/ then
    testv=true
  end
  return testv
end

Esta función analiza la cadena del agent y detecta si es la de un crawler. He ido elaborando la lista a base de ir viendo las visitas que tenía.

 

Ahora para usar nuestra función en el controlador que queramos añadimos:

     agent = request.user_agent
     if not is_crawler(agent) then

      #……..acción a hacer si no es crawler

    else

     #——- acción a hacer si es crawler

    end

 

Es una función sencilla pero la he querido compartir ya que yo he tenido la paciencia de ir añadiendo las diferentes cadenas que llevan los diferentes crawlers. No se si existe algún plugin, pero sería interesante crearlo.