Rorra's blog Senior Developer

diciembre 30, 2009

Vaganga.com liberado!

Filed under: General,Mi Trabajo,PHP,Ruby — admin @ 8:33 AM

En los últimos meses, me uní al equipo de Vaganga, para trabajar en lo que creo, va a ser el proximo sitio para comprar paquetes turísticos a excelente precio para todo America.
Cuando me sume, el código base había sido iniciado por una empresa de USA que se llama Xillent, y la verdad, quería borrar todo!!!!, no se donde aprendieron a desarrollar, pero si queres tener un post nuevo todos los días en Daily WTF, entonces la mejor opción es contratar la empresa mencionada :) . Termine reescribiendo gran parte del código, y por suerte ya liberamos la primera versión del sitio, que si bien tengo pensado (y ya estoy trabajando) para migrarla a rails, y mientras tanto mantener la versión PHP, el sitio fue liberado y esta listo para empezar a ser usado.
Algunos puntos a favor, por lo cuál deberían de empezar a usarlo cuanto antes :) :

  • Es muchísimo más barato que otros sitios como despegar
  • Además de comprar paquetes, vuelos y hoteles bien baratos, podes formar parte de la comunidad, con importantes beneficios
  • Mantenemos un historial de todas tus compras, y en poco tiempo ya vamos a tener sorteo entre los viajeros que compraron en el sitio, los más activos de la comunidad, descuentos por haber usado el sitio varias veces, etc.

Por ahora, esta trabajando con VAGANGA

Instalando radiant 0.9 con soporte para múltiples lenguajes

Filed under: Ruby — admin @ 7:46 AM


Hace tiempo que vengo jugando con varios CMS, desarrolle y trabaje en varios sitios, y si bien Radiant 0.9 todavía no fue liberado (pero esta la RC1 liberada), los updates que tiene son un gran avance. No entiendo porque no lo ponen como la versión 1.0 ya que esta muy maduro.
El soporte actual para múltiples lenguajes, con plugins como globalize, guardar las imágenes automáticamente en Amazon s3 que es muy barato, pudiendo poner el sitio en heroku por $0, y recién empezar a pagar cuando el sitio tenga miles de visitas, bueno, ya estoy soñando, pero Radiant dejo de ser un juguete hace tiempo para ser un CMS muy maduro y una razón más por la cuál varios migran a Rails (por el CMS :) ), igual me gusta jugar con Radiant :P
En fin, basta de preambulos, vamos a lo nuestro. Hay una excelente guía de Aissac para instalar Radiant con Paperclip, pero siguiendo la guía al pie de la letra nos vamos a encontrar con algunos problemas, así que aca dejo una guía paso por paso, para los principiantes, para que instalen su versión de Radiant 0.9 RC 1 con los plugins más útiles y con soporte para múltiples lenguajes.
Suponiendo que ya instalaron ruby, rails, rubygem, etc. el primer paso es instalar Radiant 0.9 RC 1, lo bajan de acá:
http://radiantcms.org/downloads/radiant-0.9.0-rc1.gem
Una vez que lo bajaron, ejecutan el comando

gem install radiant-0.9.0-rc1.gem

Generamos nuestro sitio

radiant new_site

Y editamos la configuración de la base de datos (config/database.yml)

development:
  adapter: mysql
  database: new_site_development
  username: root
  password:
  host: localhost
  encoding: utf-8

Generamos la base de datos y finalizamos la instalación de Radiant

rake db:create
rake db:bootstrap

Ahora pasamos a instalar los plugins, primero instalamos el plugin copy_move

git clone git://github.com/pilu/radiant-copy-move.git vendor/extensions/copy_move
rake radiant:extensions:copy_move:update
rake radiant:extensions:copy_move:migrate

Instalamos el plugin reorder, que nos va a permitir ordenar las páginas de nuestro sitio

git clone git://github.com/radiant/radiant-reorder-extension.git vendor/extensions/reorder
rake radiant:extensions:reorder:update
rake radiant:extensions:reorder:migrate

Seguimos con paperclip

git clone git://github.com/kbingman/paperclipped.git vendor/extensions/paperclipped
rake radiant:extensions:paperclipped:migrate
rake radiant:extensions:paperclipped:update

Ahora instalamos globalize2 que nos permite multiple lenguajes en nuestro sitio (incluso si solo pensamos manejar un solo lenguaje)

git clone git://github.com/Aissac/radiant-globalize2-extension.git vendor/extensions/globalize2
rake radiant:extensions:globalize2:migrate
rake radiant:extensions:globalize2:update

Ahora un paso intermedio, necesitamos editar el archivo config/environment.rb, y después de la línea comentada config.extensions, agregamos:

  config.extensions = [ :copy_move, :paperclipped, :globalize2, :all ]

Y ahora pasamos a instalar globalize2-paperclipped, que nos permite globalizar los assets :)

git clone git://github.com/Aissac/radiant-globalize2-paperclipped-extension.git vendor/extensions/globalize2_paperclipped
rake radiant:extensions:globalize2_paperclipped:migrate
rake radiant:extensions:globalize2_paperclipped:update

Listo el pollo, ahora ya pueden tener su sitio con Radiant, en múltiple lenguajes, no se olviden de revisar la documentación de cada plugin para saber como configurarlo, por ejemplo, para configurar varios lenguajes en globalize2, editando el archivo config/environment.rb, agregando al final del mismo

Radiant::Config['globalize.default_language'] = 'sp'
Radiant::Config['globalize.languages'] = 'en,de,fr'

Trabajo hecho en BeaconStreetGirls

Filed under: Mi Trabajo,Ruby — admin @ 5:29 AM


Durante este año, estube trabajando como desarrollador de un sitio llamado Beacon Street Girls


Primero desarrolle un feature bastante interesante, usando la API provista por Doink, y fui uno de los primeros en usar su API (a tal punto que estaba en desarrollo de su parte mientras yo la implementaba para BSG).


Fue un gran feature, y mientras el sitio estuvo levantado, hubo miles de videos de los usuarios del sitio, pero hace unos meses, por la crisis financiera mundial, el sitio en rails fue dado de baja, y actualmente solo tienen en linea su sitio en PHP.


Estas son algunas de las capturas del trabajo hecho


diciembre 27, 2009

Focus on Virtualization liberado

Filed under: Mi Trabajo,Ruby — admin @ 9:04 AM

Durante el año estube trabajando en un sitio que quedo muy lindo, Focus on Virtualization.


Es un sitio hecho para IDG y Microsoft, se realizo en solamente dos semanas, y una de las partes que me gusto mucho como quedo fueron los tweets.


Algunas imágenes:

julio 22, 2009

rails: busquedas en twitter usando search.atom

Filed under: Ruby — admin @ 4:36 PM


Recientemente, tuve que crear un twitter live feed para un trabajo que estoy haciendo… encontre un par de gemas para hacer busquedas en twitter, pero todas usaban la api json, y como mi cliente quería los mismos resultados que se pueden encontrar en twitter.search.com, directamente cree una librería (siguiendo los ejemplos de las gemas) para utilizar la api search.atom, y parseando los resultados con hpricot.

Si te encuentras con el mismo problema, aca tenes el código

TwitterFeed.rb

marzo 26, 2009

La próxima versión de rails será la 3.0

Filed under: Ruby — admin @ 5:30 AM


Ahora que rails 2.3.2 fue liberado (la última versión es rails 2.3.2.1), el equipo de rails va a concentrar esfuerzos en la versión de rails 3.0, que significa dos cosas:

  1. No va a haber una versión 2.4 :P
  2. Pueden esperar un montón de cambios para la versión 3.0

Va a haber muchos cambios en el funcionamiento interno de rails, lo que significa que muchos plugins van a necesitar ser reescritos para rails 3.0

La cosa más excitante que vamos a ver en rails 3.0, es que merb se va a funcionar con rails, pueden leer los detalles aca, aca, aca, aca y aca.

Rails 3.0 también les va a permitir incluir una aplicación completa de rails dentro de otra aplicación de rails, con este feature, va a ser probablemente posible incluir un foro completo, una galería completa, o cualquier cosa que se imaginen de manera muy fácil.

marzo 25, 2009

Rails 2.3 liberado!!!

Filed under: Ruby — admin @ 10:04 PM


Un poco tarde, pero el 15 de marzo del corriente mes Rails 2.3 fue liberado

Aca les dejo el changelog en ingles de los cambios:

Rails 2.3 relased notes

Y aca les explico algunas caracteristicas en español:

Se dejo de usar la vieja arquitectura de CGI con la que funcionaba rails (y por la cual muchos implementaban fastcgi), y ahora usa Rack

Se renovo el soporte de rails engine, lo cual significa que ahora es mas facil extender nuestra aplicacion con otras aplicaciones embebidas, es decir, al meterle plugins se pueden hacer mas cosas que antes por ahi se dificultaban un poco

Se organizo la documentación y se separo en varios sitios, como Rails Guide y la wiki. A su vez se esta actualizando la documentacion generada con rdoc en el git y se esta escribiendo un libro de rails para la comunidad.

Rails se esta preparando para migrar a ruby 1.9.1, lo cual va a ofrecer soporte nativo para i18n, hoy en dia el soporte para i18n se ofrece con algunos parches de rails a la libreria de ruby, pero cuando se migre a la 1.9.1 el soporte va a ser nativo.

Nuevas caracteristicas para ActiveRecord (ActiveRecord dejo de ser lo que era en sus primeras versiones, deberian de chsumear el soporte que tiene para relaciones polimorfologicas y demas….), entre las cosas nuevas podemos encontrar:

Nested Attributes!!! Si leen el libro advanced rails recipes, van a ver una parte que explica como manejar formularios que manejan al mismo tiempo varios modelos de datos, y si bien se podia hacer tranquilamente, el codigo no era tan expresivo y natural como debiera de ser en rails, en cambio con nested attributes ahora es mas sencillo de hacer y mas lindo:
Nest Model Forms
PD: Proximamente van a ver en mi blog un articulo sobre como usar nested attributes

Nested Transactions, son transacciones adentro de otras transacciones, y que fallen las transacciones de adentro, no significa que tengan que fallar las de afuera, mejor explicado con codigo

User.transaction do
  User.create(:username => 'Admin')
  User.transaction(:requires_new => true) do
    User.create(:username => 'Regular')
    raise ActiveRecord::Rollback
  end
end

User.find(:all) # => Returns only Admin

Dynamic Scope, ya conocian por ejemplo los dynamic finders, como User.find_by_name(‘Rodrigo’), bueno, ahora con dynamic scope pueden aplicar filtros

Order.scoped_by_customer_id(12)
Order.scoped_by_customer_id(12).find(:all,  :conditions => "status = 'open'")
Order.scoped_by_customer_id(12).scoped_by_status("open")

Default scopes, cuando trabajan con un modelo de datos, por ejemplo orders, pueden especificar algun default scope, por ejemplo:

class Order < ActiveRecord::Base
  default_scope :o rder => 'created_at desc'
end

Order.find(:all) # "SELECT * FROM orders ORDER BY created_at desc"

Batch Processing, cuando trabajan con grandes cantidades de objetos del modelo de datos, por ejemplo, suponganse que estan en ciclo de facturacion y tienen que facturarle a 10000 clientes, ahora ActiveRecord soporta BatchProcessing, es decir, pueden trabajar de manera natural como si estubiesen trabajando con todos esos objetos al mismo tiempo, pero en vez de procesar todos los objetos al mismo tiempo y comerse la memoria, la libreria procesa de 1000 objetos a la vez (aunque udstedes pueden elegir cuantos objetos procesar al mismo tiempo)

Condiciones multiples para callbacks, ahora pueden user :if y :unless por ejemplo en un callback al mismo tiempo, algo asi

class Order < ActiveRecord::Base
  before_save :check_customer_credit, if => :active, unless => [:admin, :tester]
end

Finders with Having para grupos, puden utilizar el having condition cuando hacen busquedas por grupos, por ejemplo:

developers = Developer.find(:all, :group => "salary",  :having => "sum(salary) > 10000", :select => "salary")

En cuanto a Action Controller:

Renderings mas inteligentes, antes:

render :file => '/tmp/random_file.erb'
render :template => 'other_controller/action'
render :action => 'show'

Ahora:

render '/tmp/random_file.erb'
render 'other_controller/action'
render 'show'
render :show

HTTP Digest Authentication Support (el nombre habla por si mismo)

Routing mas eficiente

Optimizacion del respond_to
respond_to es usuado masivamente, ya que con ese comando se puede facilmente implementar REST, ahora despues de los cambios, esta funcion es un 8% mas rapido que antes

Se mejoro el cache

Soporte natural para localized views
Ahora, dependiendo del locale que setean en la aplicacion, pueden tener varias vistas, si una vista dibuja app/views/orders/show.html.erb, si setean el locae a :es, ahora va a dibujar app/views/orders/show.es.html.erb

Action View

Nested Object Forms, como mencione mas arriba, ahora mezclar varios objetos distintos en un mismo formulario es mucho mas natural

Rendering de partes mas inteligente

# Equivalent of render :partial => 'articles/_article',
# :o bject => @article
render @article

# Equivalent of render :partial => 'articles/_article',
# :collection => @articles
render @articles

Rails Metal!!!!
Practicamente, te deja ejecutar acciones sin el peso del MVC ofrecido por rails, esto sirve para ejecutar acciones que tienen que ser super rapidas y ejecutadas en milesimas de segundos, lo cual va a ser una optimizacion muy grande para muchos sitios existentes
Rails metal

A mi entender estos fueron los cambios más importantes

Asegurense de checkear los screencasts en rails cast: App Templates in rails 2.3, Rails Engines, Rails Metal, Rack Middleware y Rails 2.3 Extras

Trabajando una vez más con rails

Filed under: Mi Trabajo,Ruby — admin @ 7:39 AM


En los próximos días, voy a estar trabajando en un sitio de danzas que esta siendo construido en rails.

Estas son noticias muy buenas, ya que amo bailar y extrañaba trabajar con rails.
Mi primer tarea es customizar la sección de compras con Liquid Markup.

Pero estoy seguro que voy obtener tareas más importantes en un futuro cercano.

« Newer Posts

Powered by WordPress