El día número 256! Feliz día! Qué te regalaron?
September 12th, 2008

El día número 256 del año se declaró el día del programador. Esta vez apoyaremos el consumismo haciendolo saber a todo el mundo “SOY PROGRAMADOR Y HOY ES MI DIA!”.
Despues de soportar muchas veces los más duros proyectos, los proyect managers más incompetentes, los clientes más insoportables, nosotros que estamos ahí al pié del cañon para llegar con los milestones y que el mundo virtual se haga realidad, tenemos derecho a un regalito, por eso… HAGAMOSLO SABER! HOY ES NUESTRO DIA!
FELICIDADES A TODOS!
P
Rails Summit últimos días de descuento
September 8th, 2008
Solo para recordarles que hasta el 9 de Septiembre está el descuento en la suscripción al RailsSummit Latin America a realizarse en San Pablo el 15 y 16 de Octubre.
Para los que estén interesados en juntarse para conseguir mejor precio aquí nos estamos organizando para abaratar costos.
Quien consiga mejores ofertas y quiera compartir solo agregarlo en el wiki o en la lista.
Mash it up! Mocking hash
September 1st, 2008

Muchas veces nos encontramos con la necesidad de armar estructuras de datos u objetos pero no queremos caer en open struct pero usar un hash nos queda incómodo.
Mhash es un Hash que actúa como un objeto usando los keys como si fueran métodos para acceder a los valores. Podemos crear de esta manera pseudo objetos de manera muy sencilla. Mhash nos ayuda a hacer mocking de objetos y armar objetos que permite recibir atributos en forma dinámica.
>> require 'mhash'
=> ["Mhash"]
>> articulo = Mhash.new
=> Mhash
>> articulo.autor = "Pedro Visintin"
=> "Pedro Visintin"
>> articulo.fecha = Time.now
=> Tue Sep 02 10:08:44 -0300 2008
>> articulo.inspect
=> "<Mhash autor="Pedro Visintin" fecha=Tue Sep 02 10:08:44 -0300 2008>"
También podemos tomar un hash de base y mhash convertirá todos los hashes en mhashes.
>> hash = {:articulo => {:autor=>{:nombre=>"Pedro Visintin",:email=>"pedro@mail.com"},:titulo=>"Mashit up"}}
=> {:articulo=>{:autor=>{:nombre=>"Pedro Visintin", :email=>"pedro@mail.com"}, :titulo=>"Mashit up"}}
>> post = Mhash.new(hash)
=> <Mhash articulo <Mhash autor <Mhash email"pedro@mail.com" nombre"Pedro Visintin"> titulo"Mashit up">>
>> post.articulo.autor.nombre
=> "Pedro Visintin"
No solo eso sinó que tambien podemos preguntar si un atributo está asignado:
>> post.fecha?
=> false
>> post.fecha = Time.now
=> Tue Sep 02 10:24:16 -0300 2008
>> post.fecha?
=> true
Finalmente tenemos el signo ! para crear atributos en jerarquías no inicializadas como por ejemplo:
>> articulo = Mhash.new
=> Mhash
>> articulo.autor!.nombre = "Pedro"
=> "Pedro"
>> articulo.autor?
=> true
>> articulo.autor
=> Mhash nombre"Pedro"
Mhash es Mash de Michael Bleigh de Intridea, se llama Mhash para evitar conflictos con Mash en Merb, y este artículo está basado en el artículo original. Usé este gem para Open Flash Chart Lazy
La versión renombrada pueden instalarla así
gem sources -a http://gems.github.com
sudo gem install peterpunk-mhash
Los sources:
http://github.com/peterpunk/mhash/tree/master
Rails 2.1 que hay de nuevo, ahora en español
August 29th, 2008
Rails 2.1 que hay de nuevo del brasilero Carlos Brando traducido al español por nuestro colega Gastón Ramos
Gracias Gastón y Lucas Florio por tu aporte a la comunidad!
Google group para Open Flash Chart Lazy
August 24th, 2008
La idea es poder dar soporte a los usuarios del lazy plugin!
open-flash-chart-lazy@googlegroups.com
No se si realmente se suscribirá alguien pero hay que abrir la puerta ;-)
Me gustaría saber si alguien está usando el plugin.
Se viene Rails Summit Latin America hay descuento!
August 21st, 2008
Bueno no especialmente para nosotros, sinó en general si pagamos la registración antes del 9 de septiembre hay 100 Reales de descuento.
Ya está disponible la versión internacional del website con soporte para tarjetas de crédito internacionales. Esto permite que cualquier latinoamericáno pueda suscribirse.
Vamos a los números:
Según la cotización del dia el Real cotiza vendedor promedio a 1,81:
| Momento de suscripción | precio en Reales | precio en Pesos Argentinos |
| Antes del 9 de septiembre | $R 300 | $AR 543 |
| Despues del 9 de septiembre | $R 400 | $AR 724 |
| Diferencia | $R 100 | $AR 181 |
El evento tendrá traducción real time de inglés a español para todos los speakers en inglés.
La diferencia de la suscripción antes del 9 es interesante para aprovechar, de hecho la voy a aprovechar.
Espero vayamos unos cuantos.
Podemos ayudar a difundir este evento colocando banners en nuestros blogs
Ups el link dice .asp jajajaja
Actualizando las asociaciones has_many de un modelo de forma simple
August 19th, 2008
Encontré interesante hablar de este problema y como se soluciona en Rails-ActiveRecord.
El problema es: Un select multiple que tiene un has_many through asociado.
Veamos como nos ayuda activerecord en esto, para verlo utilice la consola de rails y emulé lo que viene del post.
Nuestro modelo principal: Doctor y asociaciones, Certification y Certificate
Doctor
=> Doctorid: integer, user_id: integer, first_name: string, last_name: string, date_of_birth: .....
Con que se asocia?
Doctor.reflections.each do |macro_name,reflection|
?> puts "#{reflection.macro} => :#{macro_name}"
>> end;1
composed_of => :address
composed_of => :phone
belongs_to => :user
has_many => :degrees
has_many => :certificates
has_many => :certifications
=> 1
Vamos a guardar los certificates asociados, este es el modelo Certificate
Certificate
=> Certificateid: integer, name: string, created_at: datetime, updated_at: datetime
sus asociaciones:
>> Certificate.reflections.each do |macro_name,reflection|
?> puts "#{reflection.macro} => :#{macro_name}"
>> end;1
has_many => :certifications
Y éste es el modelo Certifications
Certification
=> Certificationid: integer, doctor_id: integer, created_at: datetime, updated_at: datetime, certificate_id: integer
Sus asociaciones
>> Certification.reflections.each do |macro_name,reflection|
?> puts "#{reflection.macro} => :#{macro_name}"
>> end;1
belongs_to => :doctor
belongs_to => :certificate
el ;1 es para que no devuelva la evaluación de reflections.
Para eso crearemos algunos usando el plugin spawner que hizo Michel Martens
>> 100.times do
?> Certificate.spawn
>> end;1
=> 1
>> Certificate.count
=> 100
Ahora creamos un Doctor
Doctor.spawn
=> #<Doctor id: 1, user_id: 1, first_name: nil, last_name: nil, date_of_birth: nil, gender: nil, avatar_file_name: nil,
...
display_name: nil, type: "Doctor">
En nuestra vista deberíamos tener algo así
form_for .... do |f|
...
f.select certificate_ids,Certificate.all().collect{|c| [[c.name],[c.id]]},{},{:multiple=>true}
end
Ahora asociamos certificates usando certificate_ids, para eso nos traemos 4 certificados al azar
certificates = Certificate.all[0..3]
=> [#<Certificate id: 1, name: "--- \n- aperiam\n- laboriosam\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 2, name: "--- \n- quidem\n- voluptate\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 3, name: "--- \n- officia\n- iure\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 4, name: "--- \n- ipsum\n- eos\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">]
Obtenemos los ids como si vienen de un form en certificates_ids[]
new_certificates_for_doctor = certificates.collect {|c| c.id}
=> [1, 2, 3, 4]
Ahora al primer doctor le asignamos estos certificates_ids, para eso vemos que tiene asociado:
d = Doctor.first
=> #<Doctor id: 1, user_id: 1, first_name: nil, last_name: nil, date_of_birth: nil, gender: nil, avatar_file_name: nil,
...
"2008-08-19 22:45:08", updated_at: "2008-08-19 22:45:08", display_name: nil, type: "Doctor">
>> d.certificate_ids
=> []
Ahora agregamos los ids que habíamos seleccionado:
d.certificate_ids = new_certificates_for_doctor
=> [1, 2, 3, 4]
>> d.save
=> true
Vemos que pasó …
Certification.all
=> [#<Certification id: 1, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 1>,
#<Certification id: 2, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 2>,
#<Certification id: 3, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 3>,
#<Certification id: 4, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 4>]
d.certificates
=> [#<Certificate id: 1, name: "--- \n- aperiam\n- laboriosam\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 2, name: "--- \n- quidem\n- voluptate\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 3, name: "--- \n- officia\n- iure\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">,
#<Certificate id: 4, name: "--- \n- ipsum\n- eos\n", created_at: "2008-08-19 22:43:11", updated_at: "2008-08-19 22:43:11">]
>> d.certifications
=> [#<Certification id: 1, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 1>,
#<Certification id: 2, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 2>,
#<Certification id: 3, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 3>,
#<Certification id: 4, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 4>]
Ahora imaginemos que en el post nos eliminan una certificación, para reproducir esto eliminamos un elemento del array
new_certificates_for_doctor.delete(3)
=> 3
>> new_certificates_for_doctor
=> [1, 2, 4]
Ahora vamos con esos ids que nos mandaron desde el form
d.certificate_ids
=> [1, 2, 3, 4]
>> d.certificate_ids = new_certificates_for_doctor
=> [1, 2, 4]
>> d.save
=> true
>> d.reload
>> Certification.all
=> [#<Certification id: 1, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 1>,
#<Certification id: 2, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 2>,
#<Certification id: 4, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 4>]
d.certifications
=> [#<Certification id: 1, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 1>,
#<Certification id: 2, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 2>,
#<Certification id: 4, doctor_id: 1, created_at: "2008-08-20 02:12:51", updated_at: "2008-08-20 02:12:51", certificate_id: 4>]
ActiveRecord manejó todo por nosotros.
Espero les sirva el ejemplo.
Algunos pensamientos despues de juntarnos con Marcel Molina Jr
August 16th, 2008
Ayer nos juntamos en Milion con Marcel Molina, el estaba de vacaciones y quería juntarse con algunos geeks y rubystas aquí.
Gracias Emmanuel por las fotos.
Para nosotros fué un gran honor tener a uno de los core-rails developers sentado en nuestra mesa y pudiendo compartir historias ideas y pensamientos.
Marcel nos contó que ahora está desarrollando para iPhone (o sea que fuimos todos engañados ;-) ) Lo curioso al respecto es que para desarrollar para iPhone hay que firmar un NDA por el cual, no se puede postear nada sobre lo que se haga.
Frases o párrafos que rescato de algunas preguntas que le hicimos:
Como ves el futuro de Ruby?
Marcel: Matz dijo Ruby 1.8 es estable, funciona bien y lo pueden usar por mucho tiempo más. Hay versiones de Ruby para todos los gustos, JRuby, MRI, Rubinius, IronRuby, etc. Mientras no salga una versión nueva que se vayan por su propio lado sin respetar los specs de Matz, vamos bien.
Passenger?
Marcel: Ahorra mucho al momento del deploy, y consume menos que el mongrel. Si tenes que empezar algo de cero es el mejor camino. (voy pensando en migrar :-P)
Autenticación?
Acá viene algo interesante en cuanto a concepción de diseño que muchas veces caemos muchos. Marcel: Si vas a construir una casa, lo último que vas a hacer es ponerle la puerta y la cerradura, no empezas por ahí. Autenticación a lo último.
Qué pensas de lo que pasa con los problemas de seguridad con Ruby?
Marcel: Algunos exploits como el último son realmente dificiles de reproducir, entonces no me desespero ni bajo los servicios. De hecho no tuve ningún ataque esos días. Diferente fue el patch de rails en la versión 1.2 donde …. cuando dijimos, apliquen este patch, es importante, no vamos a decir nada, solo háganlo.
Maglev dará el empuje que Ruby necesita para posicionarse como mainstream?
Marcel: Es importante el tema de Maglev pero también hara que muchos rubistas se pasen a smalltalk, Avi Bryant está ocupado en otras cosas ahora (casamiento) pero Maglev continuará y será importante para la comunidad Ruby.
Tu conferencia favorita?
Marcel no estudió Informática en la Universidad, el estudió letras.
Claro que hablamos mas cosas pero creo haber resumido lo más importante, si hay algo que agregar avisen.
Marcel: Gracias, fué un gustazo!
Junta Argentina On Rails invitado especial Marcel Molina Jr
August 14th, 2008
Este viernes 15 nos vamos a juntar en Milion para charlar de Rails Ruby y quien sabe de qué mas.
Espero que no desaprovechen este meeting ya que contaremos con la presencia de Marcel Molina Jr.
Nos encontramos en Milion
Dirección: Parana Nº 1048 Hora: 18 horas (6pm)
Esto es Paraná entre Santa Fé y MT de Alvear.
P
PizzaConf en Mar del Plata
August 12th, 2008

El Miercoles 13 a las 19 horas nos encontramos los Rubystas y Raileros que anden por Mardel y adelaños.
La idea es conocernos y mostrar algun pedacito de código, proyecto que querramos compartir.
El encuentro es en Piazza, Alem y la costa, gracias Michel por la sugerencia.
Nos vemos ahí
Y el viernes nos encontramos con Marcel Molina en Baires
Open flash chart lazy más lazy que nunca Bar3D
July 31st, 2008
Agregué la clase para soportar este gráfico y mejoré la doc, le falta, pero vamos mejorando.
git://github.com/peterpunk/open_flash_chart_lazy.git
Sugiero ver la aplicación de ejemplo en Sinatra (el Foca me mostro como se usa)
Hablando con Luis Lavena me comentó de este sitio (que seguramente ya muchos lo conocen), para los que nó, aqui va:
Lo interesante es que nos dice de un metodo desde que versión hasta que versión está disponible.
Un ejemplo para ver es por ejemplo Autocomplete que ya no está mas.
Si queremos que la documentación sea mejor, que esperamos para registrarnos? No nos hagamos los Indúes (esto va en chiste por la carta a DHH del hindú)
Saludos
P
Open_flash_chart Lazy Rails Plugin es Sinatra compatible
July 21st, 2008
En la Pizzaconf Uruguay, presentaron Sinatra y lo encontré ideal para armar una aplicación de ejemplo para Open Flash Chart Lazy. Ya lo puse en marcha y estoy trabajando en armar los tutoriales para el plugin. Pueden ver algo acá (no esta listo, falta bastante)
Sample App Open Flash Chart Lazy
Sources de la sample app en Sinatra
Saluti
P
Charla Introducción Ruby on Rails 2.1 en Santiago
July 16th, 2008

Primero que nada quiero contarles que la Universidad Pacífico de Santiago de Chile, incorporó en su carrera de Comunicación Multimedia la enseñanza de Ruby y Rails para la parte de desarrollo web.
El viernes 18 de julio del 2008 presentaré una charla introductoria de Ruby on Rails con motivo de las clases que daré en la Universidad del Pacífico de Ruby y Rails en septiembre de este año.
La charla es abierta al público en general y será gratuita.
Dirección: Universidad del Pacífico sede Providencia Av. Ricardo Lyon 227, Providencia Viernes 18 a las 10 de la mañana.
Los espero…
Open_flash_chart Lazy Rails Plugin updated
July 13th, 2008
Tuve que incluír un gráfico de barras, asi que ahora está incluído, también revisé la doc (primitiva) y faltaba especificar la ruta dentro de un hash.
Algunas mejoras:
- Corrección de la documentación (actualizado en el anuncio original).
- Bar chart fue incorporado.
- Atributos generales del gráfico pueden ser especificados ahora.
Próximos pasos:
- Más ejemplos
- Más de un gráfico inline (en lo posible sin tocar open_flash_chart_2)
Seguiremos mejorándolo.
Si alguien lo usó y tiene alguna idea o sugerencia, bienvenido!
P





