Fork me on GitHub

Skip to content

MongoDB con Mongoid

Estoy en la RubyConfArg, y hace unos minutos pasaron las LightTalks, en las que por suerte pude hablar sobre Mongoid, un ODM para MongoDB que cumple muy bien con su filosofía propuesta:

The philosophy of Mongoid is to provide a familiar API to Ruby developers who have been using Active Record or Data Mapper, while leveraging the power of MongoDB’s schemaless and performant document-based design, dynamic queries, and atomic modifier operations.

Aquí les dejo la presentación, cuando tenga fotos las subo.

Categories: Ruby, tools.

Tags: , ,

gemsets are the awesomeness

Cada vez que tenía que usar un proyecto con python, empezaba creando un ambiente particular con virtualenv. En ruby, en principio no podía hacer eso. Después conocí RVM y trabajaba con varias versiones de Ruby en mi PC, sobre todo para trabajar algunos proyectos legacy. Sin embargo, tenía un popurrí de gemas instaladas que ya empezaban a conflictuarse entre sí. Apareció bundler y su magia de bundle exec para solucionar muchos problemas (nota: en futuras versiones de bundler esto ya no va a hacer falta). En fin, la ensalada de gemas seguí ahí, hasta que por fin conocí gemset.

Mi workflow es más o menos así:

➜ ~ cd code
➜ code mkdir proyecto_nuevo
➜ code cd proyecto_nuevo
➜ proyecto_nuevo rvm use malev@proyecto_nuevo –rvmrc –create
Using /home/malev/.rvm/gems/ruby-1.9.2-p290 with gemset proyecto_nuevo
WARN: .rvmrc is not empty, moving aside to preserve.
➜ proyecto_nuevo rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
global
mobilenews
=> proyecto_nuevo
webui

➜ proyecto_nuevo

Es decir, voy a mi directorio donde guardo mis proyectos / experimentos, creo un directorio, creo un nuevo gemset y listo! Todas las gems que instale en ese gemset van a estar aisladas del resto.
Lo interesante es que gracias a la magia de rvm, cada vez que entre en el directorio de mi proyecto nuevo, rvm me va a cambiar al gemset ahí usado:

➜ code pwd
/home/malev/code
➜ code rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
=> global
mobilenews
proyecto_nuevo
webui

➜ code cd proyecto_nuevo
=========================================================
= NOTICE =
=========================================================
= RVM has encountered a new or modified .rvmrc file in the current directory =
= This is a shell script and therefore may contain any shell commands. =
= =
= Examine the contents of this file carefully to be sure the contents are =
= safe before trusting it! ( Choose v[iew] below to view the contents ) =
=========================================================
Do you wish to trust this .rvmrc file? (/home/malev/code/proyecto_nuevo/.rvmrc)
y[es], n[o], v[iew], c[ancel]> yes
➜ proyecto_nuevo rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
global
mobilenews
=> proyecto_nuevo
webui

➜ proyecto_nuevo

Si no tienes rvm instalado, corred e instaladlo por favor!

Categories: gems, rails, Ruby.

Tags: , , , ,

Sobre callbacks en Rails

¿Qué son los callbacks? Son métodos que son llamados en determinados momentos del ciclo de vida de un objeto. Esto nos permite escribir código que se va a ejecutar cuando nuestros objetos (ActiveRecord u otros) son creados, grabados, actualizados, borrados, validados o cargados desde la base de datos (created, saved, updated, deleted, validated, or loaded).
Supongamos que nosotros queremos que inmediatamente después de haber creado un usuario, se cree automáticamente una cuenta para ese usuario. Podríamos hacer esto (por favor no lo intenten en sus casas, puede ser peligroso):

class UsersController < ApplicationController
  def create
    @user = User.new(params[:user])
    @account = Account.create :user => @user
  end
end

Sin embargo, estaríamos contaminando nuestro controller con lógica de modelo. Una primera aproximación, podría ser, usar un callback: after_create. Se ejecuta siempre que se crea un objeto y se lo guarda en la base por primera vez:

class User < ActiveRecord::Base
  #...
  def after_create
    Account.create :user => self
  end
  #...
end

Esta aproximación funciona y está buena, pero tiene algunos problemillas: el nombre del método no describe lo que hace y si tenemos que hacer varias cosas, tendríamos un método gigante. Aquí entran en acción el método de clase: after_create:

class User < ActiveRecord::Base
  #...
  after_create :create_account
 
  def create_account
    Account.create :user => self
  end
  #...
end

Una vez creado el objeto, ActiveRecord buscará un método llamado “create_account” y lo ejecutará. Esto nos permite tener varios métodos que se ejecuten como callbacks, he inclusive podemos llamarlos de manera secuencial:

class Snippet < ActiveRecord::Base
  after_create :test1
  after_create :test2
 
  def test1
    puts "test 1"
  end
 
  def test2
    puts "test 2"
  end
end
ruby-1.9.2-p136 :002 > s = Snippet.new
 => #<Snippet id: nil, content: nil, user_id: nil, created_at: nil, updated_at: nil, language_id: nil, public_sha: nil, private_sha: nil, private: false> 
ruby-1.9.2-p136 :003 > s.save
test 1
test 2
 => true 
ruby-1.9.2-p136 :004 >

Por supuesto, after_create no es el único callback. Hay mucha información al respecto aquí. Aquí solo voy a listar los callbacks disponibles:
Creando un objeto
before_validation
after_validation
before_save
before_create
around_create
after_create
after_save

Actualizando un objeto
before_validation
after_validation
before_save
before_update
around_update
after_update
after_save

Eliminando un objeto
before_destroy
after_destroy
around_destroy

Su uso es ampliamente recomendable y una cosa a tener en cuenta es… no podemos evitarlos! No son como las validaciones, en las que a veces podemos no ejecutarlas. Aquí si alguna vez necesitamos saltearlos algún callback, vamos a tener que repensar la lógica del modelo de vuelta. Usar con responsabilidad.

Categories: ActiveRecord, buenas practicas, rails, Ruby.

Tags: , , , ,

Agile testing

En mi trabajo nuevo, los equipos de desarrollo cuentan con gente de QA, lxs Quality Assurance. Y debo decir, es fantástico trabajar con gente que continuamente este viendo la calidad desde el punto de vista del usuario. Quizás no sea toda la calidad como nos gusta a nosotros (no abarcan todos los atributos de calidad de la ISO9126), pero es algo y ese algo es muy importante. Sin embargo, no todo es alegría y felicidad entre el quipo de desarrollo y el quipo de QA, aunque ambos esten en el mismo equipo, pero bueno. Uno de los principales choques que vivimos apenas se conformo el equipo (voy a seguir diciendo equipo muchas veces más) fue el choque entre Agile y Waterfall (o lo que sea que ellos usaban). Al principio costo mucho mezclar gente ágil (los desarrolladores) con gente que venía de procesos más rígidos (claramente la gente de QA). Esto sigue siendo un punto a resolver, pero el trabajo se da cada vez más natural. Si Uds, tienen un problema similar en sus organizaciones, les recomiendo este video de Google IO, donde Elisabeth Hendrickson, una alta tester de Quality Tree nos cuenta su experiencia de testing en equipo ágiles.

Yo mientras voy a seguir investigando del tema, si encuentro algo más, prometo publicarlo.

Categories: buenas practicas.

Tags: , , , ,

Así es, di una charla en PyConAr 2011

Así es, me anime, mande y me aceptaron. Buena onda! Este año por fin pude dar una charla en una PyCon y gracias a la experiencia en charlas anteriores como esta, la última no me salio tan mal :) Tuve un público receptivo que inclusive se animó a participar.
La charla fue sobre introducción al desarrollo web, pero desde el principio. Vi muchas charlas sobre introducción a Django o Rails o Web2Py que demandaban bastante conocimiento previo, bueno, fue este conocimiento previo que yo aborde en mi charla. Desde que es un servidor, HTML, Javascript, etc hasta una mini mini aplicación web hecha en Bottle. ¿Por qué Bottle? Justamente porque su simpleza y porque se enfoca en la web unicamente. No tiene ORM ni nada, pero para una introducción me pareció genial.
Aquí les dejo las diapositivas y más fotos (incluyendo la del super cuchillo que me regalo la organización)


Nota: ninguna foto es mía, las robe de muchos sitios, espero nadie se enoje.

Categories: comunidad, PyAr, Python.

Tags: , , , ,

Paso PyCon 2011

Con un delay importante les cuento que paso PyCon Argentina 2011. Así es, el 23 y 24 de setiembre, gran parte de la comunidad hacker invadió Junín (provincia de Buenos Aires). Por supuesto estuve ahí.

Como siempre, la muy buena onda de la comunidad de python garantizó y cumplió con 2 días espectaculares. Hubo de todo, charlas de muy alto nivel, oradores locales e internacionales, conocí Google App Engine, obtuve consejos sobre como crear librerías y sobre TDD con python y mucho más. Las visitas internacionales, un verdadero lujo y hasta nos mando un saludo Guido van Rossum desde Londres.
No recuerdo el nombre, pero uno de los pibes Canonical me dio una mano sobre como configurar Launchpad para un aplicación que estoy haciendo (más adelante les comento que tal). Por último, también pude dar una charla, de la que hablare en otro post.
Solo una conclusión: Increíble! y vayan guardando un lugar para mi en la próxima (todavía no sabemos donde va a ser).

Categories: comunidad, PyAr, Python.

Tags: , ,

Book Review: The Clean Coder

Hace un par de semanas, luego de ver este video (que por cierto recomiendo mucho) me entere que Robert Martin (aka Uncle Bob) había publicado un libro llamado The Clean Coder: A Code of Conduct for Professional Programmers. Un código de conducta! Y eso, por supuesto me llamo profundamente la atención. Una semana después de “comprarlo” en Amazon ya lo había leído y hoy voy a escribir acerca del mismo.

El libro está escrito en un lenguaje “piola”, de lectura fácil y sin cosas rebuscadas. Por supuesto no contiene detalles técnicos, ya que no es un libro técnico, pero si mucha mucha experiencia encima y eso me gustó mucho. En lo personal me sentí muy identificado con el libro, el capítulo “saying No”. Me gusto mucho como trato el tema de las estimaciones, por supuesto, siendo Bob uno de los firmantes del Agile Manifesto, todo está visto desde un enfoque agile. También destaco el capítulo sobre como practicar programación con los Katas, etc. Yo desconocía acerca de esas prácticas.
El libro en general me pareció más que recomendable para cualquiera que trabaje con desarrollo de software, diría que es obligatorio (is a must). No se si estoy del todo de acuerdo con el tema de “avoid the zone” o con el tema de capacitación. Explico un poco: Cuando programamos y nos concentramos mucho, por ahí entramos en una fase en la que el código parece fluir de los dedos de manera natural, se podría decir el momento de máxima concentración y producción. Este momento según Bob es conocido como “the zone” y justamente lo que no me termina de cerrar es el: “eviten la zona”. Por supuesto, viene con justificaciones, pero igual, no me terminan de convencer.

Con todo el libro es genial y lo recomiendo 100%.
BTW, aquí está el video que video que les comente.

Categories: books, buenas practicas, comunidad, Programacion.

Tags: , ,

Y paso el PyDay Gonzalez Catan

Como les había comentado hace unos días atrás. El sábado pasado (16/07/11) asistí al PyDay González Catán. El evento me gustó mucho! Los organizadores se re portaron y a los disertantes (sí hable de un tema) nos mimaron bastante. Hay fotos del evento en el sitio del mismo y yo aquí posteo 2 en las que salgo yo jeje.

Organizadores y desertantes

Y una durante mi charla que me saco lipe.
PyDay Gonzalez Catan

La charla que di se titula Modelo de Objetos con Python, salió bien, pero podría haber salido mejor, creo que tengo que practicar un poco más. De todos modos, aquí dejo las diapositivas:

Por último, algunas de las charlas fueron filmadas, aquí los videos:

Categories: comunidad, PyAr, Python.

Tags: , ,

Torneos de programación

Varias comunidades de software libre que promocionan distintos lenguajes de programación suelen organizar torneos de programación. Con el fin de promocionar el lenguaje o plataforma, innovar con tecnologías nuevas o simplemente divertirse. Tienen una línea común, un grupo o una única persona debe desarrollar una aplicación desde cero en un tiempo fijo y luego, la comunidad o un grupo de personas votan y eligen la aplicación ganadora.
Existen torneos de lo más variados y para todos los gustos. Aquí voy a nombrar algunos relacionados con los lenguajes que suelo usar:

  • PyWeek: Quizás uno de los más viejos, la idea es desarrollar un juego en una semana. El torneo se larga 2 veces por año y dura una semana de desarrollo. Parece muy muy divertido y por supuesto sus concursantes usan python.
  • The Rails Rumble: La idea es construir una aplicación web usando Ruby on Rails en 48hs. Más que interesante y en la página se pueden ver algunas de las aplicaciones que salieron durante este concurso y la verdad que muchas sorprenden de lo buenas que estan.
  • Django dash: Muy similar a la anterior, pero aquí tenemos que usar django. Esta larga en este mes, por si les interesa y también cuenta con un listado enorme de aplicaciones que realizaron los concursantes en torneos anteriores.

Hasta aquí con los concursos en inglés.
La gente que está organizando la PyConAr en Junín (que por cierto pinta genial), proponen este año el concurso: PyConApp a realizarse en la misma PyCon en vivo! El objetivo es construir una aplicación en python en 3hs en grupos de no más de 4 personas. La idea es más que tentadora!
El último concurso que les quiero comentar es la Rally on Rails, organizado por miembros de la comunidad RubySur. Aquí nos proponen codear toda una aplicación rails en 48 horas con un equipo también de hasta 4 personas. Nos van a juzgar el diseño, la integridad, innovación y utilidad. Las inscripciones ya comenzaron y tenemos hasta el 16 de Julio para anotarnos.
Por último les comento que pienso participar del último listado con unos compañeros del trabajo. De ser así, voy a estar bloggeando más al respecto.

Categories: comunidad, Programacion.

Tags: , ,

HTML – Zen coding

Como habrán notado por varios de mis posts, soy bastante reacio al uso de IDEs para programar y aunque Robert Martin nos recomiende lo contrario [1], todavía no ha logrado convencerme jeje.
Bien, partiendo de que uso un editor bastante básico para codear, no hay nada más molesto que escribir HTML en el mismo. Este lenguaje tiene tags muy molestos que hay que abrirlos y cerrarlos usando los símbolos de mayor y menor. La verdad bastante doloroso. Al menos así era hasta que encontré ZenCoding [2].

Zencoding es un plugin para editores que nos permite escribir HTML de una manera fantástica, por ejemplo, en nuestro editor tiramos:

h2 y luego presionamos Ctrl + E y obtenemos:

<h2></h2>

Hasta aquí nada nuevo, nada que un editor con un poquito de pilas no pueda hacer, lo interesante es cuando queremos armar estructuras más complejas, por ejemplo:

ul.list>li*4 y luego presionamos Ctrl + E y obtenemos:

<ul class="list">
	<li></li>
	<li></li>
	<li></li>
	<li></li>
</ul>

Guau!! y lo mejor es que esto no es todo, hay muchos muchos ejemplos en [2] y en [3]. También hay se lo puede usar en CSS y anda en un montón de editores, si quieren ver cuántos, solo visiten [4].

Resources
[1] http://www.youtube.com/watch?v=mslMLp5bQD0
[2] http://code.google.com/p/zen-coding/
[3] http://www.sitepoint.com/blogs/2010/05/11/how-to-code-like-a-zen-master/
[4] http://code.google.com/p/zen-coding/downloads/list

Categories: plugin, tools.

Tags: , , , ,