jul
30

Empezaron a trabajar con rails 3? Se dieron cuenta que las bases de datos con encoding UTF-8 no funcionan tan bien como esperan? Esto es porque la gema “mysql” trabaja con ASCII-8BIT encoding, pero ruby 1.9 y rails 3 trabajan con UTF-8, así que cuando crean un modelo se graba en la base de datos, pero cuando recuperan esos modelos de la base de datos, no muestra la información que uds. originalmente grabaron.
Cual es la solución? Bueno, hay 3, la más recomendada, usar la gema “mysql2″, para esto, editen el archivo Gemfile para incluirla:

gem "mysql2"

Y luego editen databases.yml y cambien el adaptador a mysql2

development:
  adapter: mysql2
  database: fun_development
  user: root
  password:
  encoding: utf8

Otra solución, es simplemente en vez de usar la gema “mysql” usen la gema “ruby-mysql”, pero es muy lenta porque es una gema 100% ruby.

gem "ruby-mysql"

La última solución, es un monkey patch para seguir utilizando la gema mysql, pero también es lenta, así que de nuevo, recomiendo usar la gema mysql 2.

require 'mysql'

class Mysql::Result
  def encode(value, encoding = "utf-8")
    String === value ? value.force_encoding(encoding) : value
  end

  def each_utf8(&block)
    each_orig do |row|
      yield row.map {|col| encode(col) }
    end
  end
  alias each_orig each
  alias each each_utf8

  def each_hash_utf8(&block)
    each_hash_orig do |row|
      row.each {|k, v| row[k] = encode(v) }
      yield(row)
    end
  end
  alias each_hash_orig each_hash
  alias each_hash each_hash_utf8
end
jul
29




Mi primera contribución a rails ya esta hecha :)


Si leen mis posts anteriores, van a encontrar como instalar y trabajar con rails edge, ahora voy a explicar como configurar un buen environment de rails para vivir en rails edge y ayudar a la comunidad de rails revisando los problemas en lighthouseapp.com verificando si realmente son bugs o no, creando fixes para los bugs, o porque no, creando una nuevo feature para el framework.


Suponiendo que ya instalaron la ultima versión de rails (en este momento rails 3 rc), necesitan obtener el código fuente actualizado de rails desde github, y hacer que su proyecto de rails con el que van a trabajar use esa versión, así pueden modificarla para crear fixes, testear bugs, etc.

git checkout http://github.com/rails/rails.git



Creamos la aplicación para hacer test/development

rails new my_app



Editamos el archivo Gemfile de my_app (my_app/Gemfile) para usar el código fuente de rails con el que van a trabajar, pasando a “rails gem” el parámetro :path donde esta el código de rails instalado

gem 'rails', :path => File.expand_path('../../rails',  __FILE__)



Y con eso terminamos, ahora pueden seguir esta guía para ver como trabajar con git y así poder crear posts válidos de los patches en los que trabajen.patches.

jul
27

Finalmente, rails 3.0 RC fue liberado, lo cuál es una excelente noticia porque rails 3.0 trae un monton de updates muy copados, y va a ser más divertido que antes desarrollar en rails 3.0. Me pregunto la cantidad de trabajo que vamos a tener ahora migrando las aplicaciones de rails 2.3.x a rails 3.x.
Rails 3.0 RC fue liberado justo 21 horas después de que bundler 1.0.0.RC.1 fue liberado, realmente una coincidencia como dicen en el blog de rails? Mmmhhh.. Lo loco fue que hasta ayer a la noche, por unos cambios de último momento, bundler 1.0.0.beta.10 me tiraba errores, y ahora por arte de magia ya no tengo errores :)
Como empezar a jugar con rails 3.0.RC? Muy sencillo, primero, instalamos rvm, después de eso, vamos a instalar ruby 1.9.2 RC 2

rvm install 1.9.2

Ahora vamos a empezar a utilizar ruby 1.9.2

rvm 1.9.2

Seguimos con la instalación de bundler, y no vamos a utilizar sudo en ningún momento, porque estamos usando rvm

gem install bundler -v 1.0.0.rc.1

Ahora vamos a instalar rails rc 1

gem install rails --pre

Ya podemos empezar a jugar con rails 3.0

rails app my_app_name
cd my_app_name
bundle install

Finalmente, en lugar de congelar nuestra aplicación con rails 3.0.RC 1, vamos a trabajar con la ultima versión de rails que esta siendo desarrollada (porque vamos a encontrar bugs en la release candidate), editamos el archivo Gemfile y hacemos estas modificaciones:

#gem 'rails', '3.0.0.rc'

# Bundle edge Rails instead:
gem 'rails', :git => 'git://github.com/rails/rails.git'

Actualizamos la aplicación con la última versión de rails

bundle install

Y terminamos :)
Pueden reportar todos los bugs que encuentren en https://rails.lighthouseapp.com/projects/8994-ruby-on-rails, y también revisar los bugs que ya estan reportados, reproducirlos y confirmar si realmente es un bug o no, y no se olviden, al mismo tiempo están testeando bundler 1.0.0.RC.1, así que si encuentran problemas con bundler, pueden reportarlos en http://github.com/carlhuda/bundler/issues.
Esta es su oportunidad para devolverle a la comunidad de rails algo de lo que la comunidad les da a ustedes todos los días!!!.

jul
24


Si están tratando de instalar ruby-debug para debugear sus aplicaciones en rails (o por ahí ruby-debug-ide para RubyMine) y están teniendo problemas, porque tienen instalado en el sistema ruby 1.8.7, y están usando rvm para poder testear rails edge con ruby 1.9.2

Lo primero a notar es que todos los sources que instalaron con rvm estan en $rvm_path/src, así que en caso de que estén usando ruby 1.9.2 rc2 como estoy haciendo yo en este momento, la instalación es muy sencilla.

gem install ruby-debug-ide19 -- --with-ruby-include=$rvm_path/src/ruby-1.9.2-rc2/

Pero si están usando ruby 1.9.1 o cualquier otra versión, pueden fácilmente hacer un ls $rvm_path/src para encontrar la ubicación exacta para compilar ruby-debug-ide19 para su instalación de rvm.

Ahora pueden agregar la gem al archivo Gemfile si están planeando debugear desde la consola

gem 'ruby-debug19', :require => 'ruby-debug', :group => :development

Y luego correr

rails s --debug

O si están usando rubymine, el debug va a empezar, aunque todavía no esta soportado al 100% para ruby 1.9.x, con un poco de suerte lo arreglan antes de liberar la versión 2.3.5, porque creo que nadie quiere usar rails 3 sin ruby 1.9.2 o superior, o al menos, yo no quiero :P

ene
10


Después de bajar y usar radiant 0.9 con globalize, me di cuenta que además quería que los usuarios sean dirigidos por default al sitio del lenguaje correspondiente, checkeando el IP para saber desde adonde estaban navegando. Y obvio, necesitaba GeoIP.
Instale GeoIP y después me quedaba hacer algunas modificaciones al plugin globalize para lograr mi acometido.
Primero edite config/environment.rb y agregue la linea para cargar GeoIP con la aplicación

config.gem 'geoip'

Luego, modifique el archivo vendor/extensions/globalize2/lib/globalize2/application_controller_extensions.rb

module Globalize2
  module ApplicationControllerExtensions
    def self.included(base)
      base.send(:include, InstanceMethods)
      base.class_eval do
        before_filter :set_locale
      end
    end

    module InstanceMethods
      def set_locale
        @locale = params[:locale] || session[:locale] || cookies[:locale] ||
                Globalize2Extension.ip_lookup(request.remote_ip) 

        session[:locale] = @locale
        cookies[:locale] = @locale
        I18n.locale = @locale
      end

      def reset_locale
        unless I18n.locale == Globalize2Extension.default_language
          locale = Globalize2Extension.default_language
          session[:locale] = locale
          I18n.locale = locale
          flash.now[:notice] = "The locale has been changed to default."
        end
      end
    end
  end
end



Como pueden ver en el código, también checkeo si el usuario selecciono algún lenguaje alguna vez en la cookie, y cuando el usuario selecciona (u obtiene un lenguaje por su geo localización), seteo la cookie, así la próxima vez que vuelva al sitio, va a ver el sitio con el último lenguaje seleccionado.
Finalmente, modifique el archivo vendor/extensions/globalize2/globalize2_extension.rb y agregue el siguiente método, donde obtengo el código del país del usuario, y después seteo el locale correspondiente a mi sitio en base a su IP, o el lenguaje por defecto.

  def ip_lookup(ip)
    g = GeoIP.new( File.join(File.dirname(__FILE__), '..', '..', 'gems', 'geoip-0.8.6', 'GeoIP.dat'))
    r = g.country(ip)
    country_code = r[3]
    case country_code
      when 'DE'
        'de'
      when 'GB'
        'uk'
      when 'AU'
        'au'
      when 'FR'
        'fr'
      when ' US'
        'us'
      else
        'us'
    end
  end

Y finalmente, tenemos que decirle a Radiant que cargue la librería GeoIP, así que en el mismo archivo agregamos

  extension_config do |config|
    config.gem 'geoip', :source => 'http://github.com'
  end



So that’s all, now you have GeoIP working with globalize and Radiant 0.9 :)

ene
09


Después de instalar Radiant 0.9 y Globalize, tenía que redirigir al usuario a su sitio con su lenguaje.
Si el usuario tenía asignado el locale en, al momento de visitar http://mysite.com, debería de ser redirigido a http://mysite.com/en
Todo este lío porque tenía un flash que funcionaba con archivos xml, entonces arme una estructura de ficheros y necesitaba que el usuario este parado en ese lugar, y no en la homepage, para que el flash funcione correctamente.
Estas son las modificaciones que hice al archivo vendor/extensions/globalize2/lib/globalize2/site_controller_extensions.rb, espero que les sirva

module Globalize2
  module SiteControllerExtensions
    def self.included(base)
      base.class_eval do
        alias_method_chain :find_page, :globalize

        alias_method :o riginal_show_page, :show_page
        alias_method :show_page, :check_homepage_redir

      end
    end

    def check_homepage_redir
      url = params[:url]
      if Array === url
        url = url.join('/')
      else
        url = url.to_s
      end

      if url == '/'
        locale = params[:locale] || cookies[:locale] || session[:locale] || Globalize2Extension.ip_lookup(request.remote_ip)
        redirect_to CGI.unescape('/' + locale + '/') and return
      end

      original_show_page
    end

    def find_page_with_globalize(url)
      globalized_url = '/' + I18n.locale + '/' + url
      find_page_without_globalize(globalized_url)
    end
  end
end
dic
30

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

dic
30


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'
dic
30


Si bien este año estuve más que ocupado, metí 14 materias en la universidad, trabaje en varios proyectos interesantes, en Ruby on Rails, PHP, algo de java y C++, voy a volver a darle vida al sitio, sobre todo para atraer nuevos clientes y mostrar que sigo activo :)


Hoy estube tratando de upgradear a wordpress 2.9, y todos los plugins, y si bien había upgradeado todo en mi máquina, me lleve la desagradable sorpresa de ver que el plugin qtranslate no esta listo para trabajar con wordpress 2.9


No obstante, Quian Qin (Quien?), no, en serio, Quian Qin esta trabajando en el plugin para hacerlo compatible con wordpress 2.9, así que la actualización va a tener que esperar hasta que Quian Qin actualice el plugin, pero más que seguro, hay unos miles y miles a la espera como yo :)


http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=1271

dic
30


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