11.10.07

Me voy me fui

WordPress es francamente superior.

http://emmanueloga.wordpress.com

Nos vemos ahi? :)

9.10.07

Ayuda!, bloggeros del mundo ;-)

Ah! He agotado las pestañas y botones de la configuracion de mi blogger blog y no he encontrado nada que me ayude en la tarea.... He agregado servicios de feedburner esperando hallar lo que necesito y nada. A ver, bloggeros del mundo, alguien sabe como hacer esto en blogspot???:

  1. Subir archivos
  2. Derivado de 1) Usar syntax highlight!!!
La idea es embeber algo como http://code.google.com/p/syntaxhighlighter/ en mi blog para poder envolver mis posts coderiles en tags pre y que el script lo pinte bonito. Lamentablemente, blogger no me deja subir los javascripts y el archivo .swf que necesita ese syntax highlighter. Si conocen algun work-around, se agredecera su ayuda.

4.10.07

Mas visualizaciones para rails.

Siguiendo con la pletora de opciones para generar diagramas de nuestras aplicaciones rails, que incluye:

Hete aqui una pequeña task que pueden arrojar sin temor en lib/tasks, para luego hacer rake doc:reflex para encontrarse con un diagrama de models y reflections en el directorio doc. SI, necesitan graphviz para usarlo!

http://pastie.caboo.se/103671


(originalmente en http://www.hackdiary.com/archives/000093.html)

Ejemplo:

28.9.07

two very useful pieces of code related to will_paginate and acts_as_ferret

Related to:

  • Paginating with will_paginate _and_ ajax
  • Paginating acts_as_ferret results
Lately, I've been developing an application with huge amounts of data. For this reason i couldn't delay anymore the use of pagination on my views. I wanted to use will_paginate because it is such a nice plugin, but i was annoyed for it's lack of support for ajax. The solution was quite simple, tough, because rails makes it so easy. I only had to change the link_to calls for link_to_remote calls. I was almost there when i decided to check the repository of will paginate. There, i found that a patch by Florent Piteau was already there resolving this very issue. So here you are:

http://err.lighthouseapp.com/projects/466/tickets/67-will-paginate-patch-ajax-support

or the complete source (just change view_helpers.rb for this one, or load this file on environment.rb):

http://pastie.caboo.se/101715

Also, there is a patch to paginate ferret search results that is really easy to use. Here you are:

http://opensoul.org/2007/8/17/acts_as_ferret-will_paginate
http://pastie.caboo.se/101716

Note: I added the

def final_pager.total_hits
total_entries()
end

bit to add compatibility with my previous api.

24.9.07

Breakpoints, variables, watches y callstack de na aplicacion rails (Netbeans)

Bueno aunque parezca increible recien ahora caigo en que blogger _SI_ me deja subir imagenes... es que la primera vez que quise hacerlo me parecio que solo me permitia agregar un _LINK_ a una imagen, por lo que pense que iba a tener que buscar un hosting para las mismas (tipo flicker o algo asi....) Bueno, ahora que aprendi :) he aqui unas bonitas imagenes de netbeans debuggeando una aplicacion rails.

:)




21.9.07

Rails y require. O: ruby no encuentra mis required files!

Rails inyecta buena cantidad de "magia" a nuestros programas. Entre ellas se encuentra el uso de const_missing en Object, que hace toda clase de cosas locas, como pueden atestiguar abriendo el archivo #:nodoc:umentado dependencies.rb de la gem ActiveSupport.

El tema es que a veces tanta magia no es lo que yo quiero. El archivo que Rails va a buscar depende del nombre de clase que este faltando, completamente cualificado.

Ejemplo, si hago una referencia en mis programas al modulo todavia no requerido "Lindo", y el nombre completamente cualificado de Lindo es ::Un::Modulo::Muy::Lindo, rails lo va a buscar a "/lib/un/modulo/muy/lindo.rb" Si... muchos directorios.

A veces no quiero clasificar mi codigo por jerarquia de modulos, quizas quiera agrupar mis archivos por otro criterio. A este respecto me resulta muy facil pasar por alto la magia de rails y utilizar algo como

require File.join(File.dirname(__FILE__), 'nombre_archivo')

obviamente, esto es mucho mas feo que un simple

require 'nombre_archivo'

En teoria no haria falta toda aquella maquinaria de File.dirnames y joins, pero en la practica he encontrado que me ha solucionado problemas en mas de una ocasion. Pera simplificar un poco la tarea, cree un simple reemplazo para require:

# pass an array of directories and a final filename
def ar_require_relative *args
main= File.dirname(args.shift)
args.each { |arg| main= File.join(main, arg) }
require main
end

Ahora puedo requerir mis archivos relativos a la posicion "donde estoy parado", con un simple:

ar_require_relative __FILE__, 'directorio_que_agrupa_mis_files', 'otro_dir', 'nombre_archivo'
ar_require_relative __FILE__, 'otro_file'

No es tan lindo como un simple require, pero si ruby no encuentra el archivo de otra forma, de esta manera lo hace siempre! Obviamente, __FILE__ es necesario siempre. Si hiciera referencia a __FILE__ desde el metodo, el valor de __FILE__ siempre seria el del archivo que contiene al metodo, algo que no es muy util.

20.9.07

Tablas en rails

Bueno, parece que hace falta mas informacion para rails en español. Ya que escribi un email semi-largo hacerca de como utilizar relaciones sencillas entre tablas, y parece que a alguien le resulto util, lo posteo aca.

"...A ver..., si tenes dos tablas, users y documents, y la relacion es que cada usuario tiene muchos documentos, entonces tus tablas podrian ser algo como:

users:
id: integer
name: string

documents
id: integer
name: string
content: text
user_id: integer << Clave foranea

Si queres, podes crear esas tablas mediante migraciones... (mmm, si, es otro tema, aunque rails lo hace sencillo tambien)

Estas tablas tienen en cuenta las convenciones de rails, donde el nombre de la clave foranea debe ser el singular del nombre de la tabla a la que apunta dicha clave, agregandole el postfijo _id (la clave user_id apuntara a la tabla users). Todo esto se puede configurar "a mano" en las relaciones, pero si tenes la posibilidad, es recomendable seguir las convenciones.

En tus clases active record agregas las relaciones entre tablas. Por ejemplo:

class User < ActiveRecord::Base
has_many :documents
end

class Document
belongs_to :user
end

Fijate que, si sabes algo de ingles, las definiciones son bastante naturales. El Ususario tiene muchos documentos, y el Documento pertenece a un Usuario.

Ahora podes acceder a los documentos del usuario asi:

usuario= User.create :name => "Lolo"
usuario.documents => [] #Vacio, no tiene nada
usuario.documents.create :name => "La historia de mi vida" # creo un documento

o

doc= Document.create :name => "La historia de mi vida" # doc.user => null
doc.user= User.find :first # Le asigno el primer usuario que encuentro
doc.save

Si queres hacer cosas "mas complicadas", podes agregar un metodo a tu clase. Por ejemplo:

class User < ActiveRecord::Base
has_many :documents

def create_two_documents nombre1, nombre2
User.transaction do
self.documents.create :name => nombre1
self.documents.create :name => nombre2
end
end
end

user= User.find_or_create_by_name "Lolo"
user.create_two_documents "Mi Biografia", "Himnos a mi mismo"

Aqui lolo crea dos registros en la tabla documents que apuntan a si mismo. Del mismo modo podes acceder a cualquier tabla que quieras actualizar..."