Tag Archives for RubyonRails

365 días con Ruby on Rails

Ya hace un buen tiempo que llevo peleándome y gozando de esta Web Framework. Uno de los objetivos de empezar mi proyectito L-exp fue el de aprender a desarrollar con esta Framework.

La principal ventaja de esta framework basada en el lenguaje script Ruby está en su lógica aplastante. Has de entender la filosofía de como se hacen las cosas, pero una vez la tiene cada vez el desarrollo se vuelve más intuitivo y sencillo.

Yo diria que en estos momentos utilizo sólo un 40% de las posibilidades de esta framework. Pero la realidad es que suficiente ya que me permite desarrollar ágilmente y además voy solventando todos los retos. Para mi lo más complicado de este desarrollo está siendo siempre el HTML y CSS. No porque sea difícil de entender, sino que es difícil hacer diseños de páginas webs para conseguir que queden atractivas y funcionales. Es decir, que entren por los ojos. Es un problema artístico y no técnico.

Un factor importante en Rails es que las cosas las puedes hacer de muchas formas y lo que hay que aprender es como hacerlas de forma más óptima. Un mismo acceso en un controlador puede tardar 8 segundos o medio simplemente enfocando bien la búsqueda de los datos. Estas cosas son las que he de ir aprendiendo.

Hay que mencionar la genialidad del lenguaje Ruby en la flexibilidad y facilidad que tiene. Al principio si vienes de lenguajes como C  o Visual Basic te choca mucho. Ya que estas acostumbrado a hacerlo todo tu programando y Ruby está pensado para tener que escribir poco código. Probar Ruby en este enlace y entenderéis lo que digo.

Lo más sorprendente esta Framework es las cosas que he llegado a realizar de forma tan trivial. Quien me iba a decir hace un año que estaría leyendo Feeds para incluirlas en mi proyecto con dos líneas de código o  enviando pings a technorati y Feedburner para que actualicen sus RSS. El mérito no es que yo sea un genio, sino que la comunidad es muy abierta y encuentras soluciones para todo.

No puedo dejar de mencionar la base de datos MySQL ya que ha sido la gran desconocida al funcionar perfectamente y sin problemas.

Otro factor colateral que te encuentras en este mundo Rails es que usas hostings que están basados en Linux. En este aspecto he podido contastar que aunque utilizas terminales para acceder que quizás queda poco glamuroso, la potencia de los comando que puedes realizar y la tecnología que tienen es impresionante. Además las cosas están pensadas para ser fáciles, hay comandos para todo y al final el conocimiento que has de tener es reducido ya que son cuatro tareas las que realizas continuamente.

En cuanto a los servidores Linux me ha sorprendido la capacidad de configuración que tienen, la utilización de servidores como mongrel, el control de versiones con SVN, la gestión de tareas con cron y rake, la facilidad de configuración y muchas cosas más.

Relacionado con el mundo Linux hay que hablar sobre el tema del hosting que sin duda ha sido una pieza clave. Recientemente me mude de hosting y estoy muy satisfecho del cambio. En este aspecto me ha sorprendido la tecnología que tienen los hosting como los paneles de control y como estos shared servers pueden coexistir multiples entornos y usuarios. Sin duda un factor clave es la amabilidad del servicio técnico que como ya comenté en Railsplayground.com me está sorprendiendo.

Para predicar con el ejemplo os pongo un enlace a las listas L-exp que he creado sobre Ruby on Rails (ya van 9). He procurado ir añadiendo todos aquellos recursos que he necesitado clasificándolos por temáticas ( listas).

Como podéis leer ha sido un año divertido y he podido disfrutar mucho con mi proyecto. Ahora estoy haciendo cambios importantes en L-exp para hacerlo más útil y funcional.

Iré publicando algunos trozos de código con cosas interesante que he utilizado para compartirlo.

.Net vs Ruby on Rails

Divertidísimo vídeo que compara .NET con Ruby on Rails de la mano de Rails Envy:

 

Crea tus propios Rakes in Rails

Hacía tiempo que buscaba algún tutorial para crear Rake en Ruby on Rails. Desde Rails Envy nos muestran como crearlos de una forma bastante didáctica e incluyen enlaces a bastantes recursos.

Al final como todo en Rails  es bastante sencillo y muy potente.

Tutorial

Hi I’m Ruby on Rails

Copiando el estilo de los anuncio de Mac “Hola yo soy un Mac y yo un PC” han lanzado la gente de Rails Envy tres anuncios y tienen un cuarto para la Railsconf.

El primero lo comparan con Java vs Ruby on Rails:

 

 

El segundo y terceros con  Ruby on Rails vs PHP ( Genial):

 

Y estamos a la espera que salga el cuarto.

Crear una Fisgona ( o spy) con Ruby on Rails

Siempre me ha encantado en Meneame.net  o Digg.com  aquella página que puedes ver en tiempo real los movimientos que hay en la web. En una llamada Fisgona y en el otro Digg Spy.

Me he quedado soprendido de lo fácil que es en Ruby on Rails crear una aplicación parecida. A continuación añado el código más relevante para crearla.

Explicado en pocas palabras vamos a crear una página que tendrá una <div> llamada fisgon. Le añadiremos una función que actualizará cada 30 segundos el contenido de esta región. Para ello lo único que haremos será leer las últimas 30 entradas y luego construir el código html que enviaremos a la página via AJAX. También veréis que la primera carga la tenemos que hacer vía normal utilizando un controlador normal o sino nos aparecería la región en blanco inicialmente.

La aplicación ejemplo crea un log en un modelo llamado Control:

1.- Crear un modelo llamado Control

2.- Crear una migración para crear la tabla:

def self.up
create_table :controls do |t|
t.column :user, :string, :null => false
t.column :ip, :string
t.column :agent, :string
t.column :other, :string
t.column :user_id, :integer, :default =>0
t.column :desc, :string
t.column :level, :integer, :default => 0
t.column :created_at , :datetime, :null => false
end
end

def self.down
drop_table :controls
end

3.- En el controlador que queramos utilizar añadir la siguiente función:

def fisgon
@control=Control.find(:all,:limit=>30,:order=> ‘created_at DESC’)

end

Tendremos que añadir la ruta necesaria en nuestro fichero routes.rb para asegurar que enrute.

4.- Crear el fichero fisgon.rhml

<html>

………

<%= periodically_call_remote(
:update => ‘fisgon’,
:url => { :action => ‘get_fisgon’ },
:success => “$(’fisgon’).visualEffect(’highlight’)”,
:frecuency => 30) %>
<div id=”fisgon”>
<%=Time.now.strftime(”%d/%m/%y %H:%M:%S”).to_s+’ > ‘+List.sum( :nused).to_s+’ times used lists.’%><br />
<table class=”list” cellspacing=”0″ cellpadding=”0″>
<tr>
<th class=”small_col”>Date</th>
<th>Event</th>
<th>ip</th>
<th>Agent</th>
<th>Other</th>
</tr>
<%@control.each do |control| -%>
<tr > <td class=”first_col”><%= control.created_at.strftime(”%d/%m/%y %H:%M:%S”) -%></td><td class=”first_col”><%= control.desc -%></td><td class=”first_col”><%= control.ip -%></td><td class=”first_col”><%= control.agent -%></td><td class=”first_col”><%= control.other -%></td></tr>
<% end -%>

</table>
</div>
……..

</html>

Aquí a través de periodically_call_remote hacemos una llamada cada 30 segundos para que ejecute una función remota que actualiza el div id=”fisgon”.

5.-Es importante que nuestra plantilla tenga incluida la siguiente línea

<%= javascript_include_tag :defaults %>

para que cargue la librerias javascript que permitan el uso de AJAX.

6.- Añadimos en el controlador application.rb la siguiente función:

def get_fisgon
@html=Time.now.strftime(”%d/%m/%y %H:%M:%S”).to_s+’ > ‘+List.sum( :nused).to_s+’ times used lists.<br /><table class=”list” cellspacing=”0″ cellpadding=”0″><tr><th class=”small_col”>Date</th><th>Event</th><th>ip</th><th>Agent</th><th>Other</th></tr>’
@control=Control.find(:all,:limit=>30,:order=> ‘created_at DESC’)
@control.each do |control|
@htmli=’<tr ><td class=”first_col”>’+control.created_at.strftime(”%d/%m/%y %H:%M:%S”).to_s+’</td><td class=”first_col”>’+control.desc+’</td><td class=”first_col”>’+( control.ip.nil? ? ‘ ‘ : control.ip)+’</td><td class=”first_col”>’+(control.agent.nil? ? ‘ ‘ : control.agent)+’</td><td class=”first_col”>’+(control.other.nil? ? ‘ ‘: control.other)+’</td>’
@html=@html+@htmli
end
@html=@html+’</table>’
render :text=>@html
end

7.- Añadimos otra función en el controlador para que guarde la información en el modelo control.

def logaction( desc, level)
user=’Annonymous’
userid=0
ip = request.remote_ip
agent = request.user_agent
renv = request.env[’HTTP_REFERER’]
other = renv
@control= Control.new(:ip => ip,:created_at => Time.now, :user=> user, :user_id => userid ,:desc => desc, :level => level, :agent => agent, :other => other)
@control.save

end

En esta función guardamos toda la información del Request y la escribimos en el modelo Control.

 

8.- Por último sólo tenemos que escoger en que momento queremos guardar la información y hacer una llamada a logaction( ’se ha visitado tal página’,1) y guardará un registro en Control.

Como podréis ver es un fisgon muy rudimentario pero a su vez sencillo de desarrollar en Ruby on Rails.

Si alguien tiene alguna sugerencia o mejora que no dude en compartirla.

Seleccionando una web framework para desarrollo

Hacía tiempo que tenía ganas de crear esta lista  L-exp que recogiese las alternativas que tenemos para desarrollo web. Aún no está acabada, pero si que contiene las más importantes ( alquien me dirá que falta JAVA). Pero desde mi punto de vista estas son las que sin ser un super programador te puedes atrever a probar. La lista contiene:

 

  • Ruby on Rails - La utilizada para desarrollar mi proyecto L-exp
  • ASP.NET de Microsoft - La he utilizado en entornos empresariales y promete mucho
  • OpenLazlo - Nueva y se basa también en el uso de un runtime en Flash o DHTML.
  • Django basada en Python
  • Silverlight - Microsoft Flash killer
  • Flex - La alternativa de Adobe basada en Flash
  • PHP - La madre y originaria de todos los lenguajes de script

Seguro que me dejo alguna importante, iré completando la lista y manteniéndola con actualizaciones. No dudéis en dejar vuestras sugerencias.

L-EXP - Choose a Web developing framework

Aptana IDE + Rails

Mi proyecto L-exp no habría sido el mismo sin la ayuda de el entorno de desarrollo RadRails. Este software gratuito que corre sobre JAVA está diseñado para facilitar el desarrollo en la Framework Ruby on Rails. Hace poco comenté que este proyecto que erá llevado por un grupo de personas sin ánimo de lucro ha pasado a los desarrolladores del también popular entorno de desarrollo Web Aptana. Estos se han comprometido a integrar Radrails  en su IDE de desarrollo para que no se pierda esta fantástica herramienta.

Ya podemos descargar la primera BETA de esta nueva herramienta y empezar a probarla. Al estar desarrollada en JAVA la podemos utilizar tanto en Windows, Linux como en plataforma Mac. Esta beta incluye la integración de Radrails y Ruby development Tools.

Para conocer mejor las funcionalidades de Aptana podéis ver en su web que soporta desarrollo Javascript, HTML, CSS, ayuda completa y trucos.

La combinación de Aptana y RadRails dará un producto mucho más potente y gratuito. Estoy seguro que todos saldremos ganando.

 

¿Quieres saber que IDE hay  para desarrollar en Ruby on Rails? : L-exp

¿Quieres saber que herramientas utilizo para el desarrollo del proyecto L-exp en Ruby on Rails? : L-exp

L-exp en fase de pruebas

L-exp es mi proyecto personal que he estado trabajando estos últimos 3 meses. Como algunos habréis sufrido en los últimos tiempos he estado hablando mucho de una web framework llamada Ruby on Rails. Esta framework totalmente gratuita y libre está diseñada para el desarrollo Web utilizando el lenguaje Script Ruby. Existen ejemplos de grandes proyectos encabezados por 37signals tales como Basecamp y el reciente Highrise.

Hace tiempo que escribi un artículo en la brújula verde llamado “y ahora que“. Que trataba sobre como sacarle jugo al ordenador sin invertir ni un Euro. A partir de aquí quise mantener la lista de sugerencias de software viva y en mi blog se me hacía poco versátil. Así que decidi usar Listography para reflejar mis listas de opciones. Pero aún asi encontré que no conseguía reflejar toda la información con el detalle que quería y esto me empezó a dar la idea de crear L-exp.

L-exp viene de Lists of experiences o que es lo mismo que listas de experiencias. En ellas se pueden guardar listas de elementos para realizar una determinada tarea. Por ejemplo ver los elementos utilizados para crear L-exp . La idea ha ido evolucionando y ya no va simplemente de software, sino que también puede haber listas con todo tipo de elementos.

En estos momentos está en fase Alpha pública que quiere decir que aún está en pruebas y espero ver si la idea gusta y recibir comentarios.

En cualquier caso habré cumplido mis tres objetivos:

  1. Aprender Ruby on Rails ( es genial)
  2. Compartir mis listas de una nueva forma con L-exp
  3. Disfrutar con este proyecto personal

Para los usuarios de habla española sólo tiene una pega, que he hecho todo el desarrollo en inglés. El motivo es sencillo, la he querido hacer lo más universal posible.  En un futuro si la idea gusta no me costará nada traducirla también al español.

Quien quiera puede solicitar una invitación para probar las características de usuario y si me enviáis un email con vuestras ideas estoy buscando editores para crear más listas de otras temáticas. Cualquier sugerencia o crítica constructiva será bienvenida.

Agradecer a Guillermo y Belén por aconsejarme con mucha paciencia.

Además animaros a probar Ruby on Rails y que descubráis que lo mejor de esta framework está en la comunidad que hay alrededor. Me han sufrido más de una vez en irc preguntando a veces preguntas muy básicas y han tenido mucha paciencia…

A ver si Dreamhost aguanta y espero que os sea útil. No dudéis en dejar vuestros comentarios….

Joyent Slingshot permitirá aplicaciones Rails offline

Joyent Slingshot permitirá a los desarrolladores distribuir aplicaciones que funcionarán tanto online como offline sobre la web framework Rails. Esto lo consiguen a través de Joyent Connector que se ocupa de sincronizar la aplicación.

En principio cuando salga la versión definitiva no será gratuita a no ser que tengas tu aplicación en el hosting de Joyent.

Según el autor no requerirá de gran modificación de las aplicaciones Rails ya que se encuentra en una capa diferente.

Esta herramienta romperá la barrera entre las aplicaciones Desktop y Online. Funcionará tanto en la plataforma windows como en la Mac.

Más información

RadRails es rescatado por Aptana

Hace un tiempo Kyle  pidió ayuda a la comunidad para encontrar ayuda en el desarrollo de Radrails, un ide pensado para el desarrollo de Ruby on Rails.

Parece ser que Aptana, desarrolladores de un ide para html y javascript entre otros,  le ha dado todo el apoyo. Por tanto ya podemos encontrar la antigua web de Radrails en la siguiente dirección:http://www.aptana.com/radrails/ 

Habrá que seguir los planes de Aptana y como van  a integrar ambos productos.

 

Aptana Blog