lunes, 28 de diciembre de 2009

Inyectando DataContext en repositorios

Hoy tuve que hacer un refactor de una aplicación para inyectar DataContext en los repositorios por IoC y utilizar el patrón unit of work.

Esta es la interface de un repositorio:

public interface IContactInformationRepository
{
void Save(ContactInformation contactInformation);
}

y su implementación (recibe por constructor el DataContext):

public class ContactInformationRepository : IContactInformationRepository
{
private readonly DataContext dataContext;
public ContactInformationRepository(DataContext dataContext)
{
this.dataContext = dataContext;
}

public void Save(ContactInformation contactInformation)
{
dataContext.ContactInformations.InsertOnSubmit(contactInformation);
}
}

Para inyectar el data context por IoC, usando StructureMap:

ForRequestedType()
.CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.ConstructedBy(() =>
new DataContext(ConfigurationManager.AppSettings["connectionString"]));

Si bien debería haber usado una interface IDataContext (programar hacia interfaces, no implementaciones), elegí el camino más fácil, ya que en este caso no necesito cambiar la implementación del DataContext.

Luego para implementar el patrón unit of work, me basé en este post:
http://weblogs.asp.net/rashid/archive/2009/02/26/implementing-unitofwork-pattern-in-linq-to-sql-application.aspx

Los repositorios no hacen el commit de la unit of work. La service layer tiene la responsabilidad de hacerlo. Para eso, cada servicio que realiza cambios en la base de datos tiene una dependencia a la IUnitOfWork. El IoC es responsable que configurar correctamente los repositorios, servicios y unit of work para que todos vean la misma instancia de DataContext:
http://codepaste.net/zz6g2s

Este es un unit test del servicio, que prubeba la unit of work usando Moq:
http://codepaste.net/hro3ob

En este caso, el servicio usa directamente el repositorio (y no un objeto mock) ya que no se impacta en base de datos, dado que la unit of work es un objeto mock.

saludos!

martes, 15 de diciembre de 2009

Proyecto Generador Savonious

Como comenté hace unas semanas, junto con Andrés Navarro vamos a estar difundiendo temas relacionados con minimizar el impacto ambiental. Esta vez, me gustaría comentar sobre el proyecto en que está trabajando Andrés.

Él junto con Nicolas Losano, un compañero de la tecnicatura superior en energía industrial (orientación energía renovable y arquitectura bioclimática), se propusieron la meta de diseñar y construir un generador eólico. A la derecha se muestra uno de los modelos usados para diseñarlo.

Antes de conocer este proyecto, pensaba que los generadores eólicos eran lo típicos con hélice de rotor horizontal. Existe una variante de rotor horizontal, conocidos como savonius, que tienen algunas características interesantes:
  • Muy bajo mantenimiento
  • Simple de instalar
  • Construcción simple y estable
  • Potencia nominal: 6 m/s de vientos
  • Soporta vientos de hasta 140 km/h (42 m/s)
  • No daña ni provoca un impacto negativo en el medio ambiente
  • Construido para durar toda la vida
Estos generadores, a diferencia de los de rotor horizontal, son más aptos para zonas con poco viento, como Buenos Aires.

Como comenta Andrés, este es el estado del proyecto:
Ya terminamos las aspas, estamos armando la estructura del eje y los discos que agarran las aspas, es un proceso lento, porque para cada pieza hacemos los moldes en madera y eso lleva su tiempo, por los tiempos que manejamos, y porque tan solo quedamos dos, pero aca estamos y vamos a seguir hasta el final.
Respecto al financiamiento del proyecto, por ahora están haciendo todo a pulmón:
Estamos reuniendonos con personas que estan interesadas en ayudarnos a conseguir financiación, en este proceso conocemos gente interesante o personas que estan en la misma que nosotros, si conocen a alguien que nos pueda ayudar, financiar, ayudar tecnicamente, les pedimos colaboración, en lo que se les ocurra.
El objetivo del proyecto, según sus impulsores:
No estamos atras de ganar dinero, pero nos gustaría dedicar nuestro 100 % del tiempo en esto para lo cual necesitaríamos un incentivo, simplemente queremos empezar a desarrollar este tipo de tecnologías simples para de a poco ir animandonos a mas. Creemos en la necesidad de encontrar formas más eficientes y limpias de generar energía que respeten el medio ambiente y puedan generar condiciones de autosustentabilidad para las personas.
Solo puedo agregar que me llevé una grata sensación al ver la pasión y las ganas que le ponen. Ojala puedan ser pioneros en la implementación de este tipo de tecnologías simples, eficientes y económicas en Argentina. Otro aporte que considero valioso de ellos es que además fomentan la industria nacional e innovadora.

saludos!

sábado, 5 de diciembre de 2009

Un almuerzo sobre Scrum

Ayer tuve la oportunidad de almorzar con Ingrid Astiz. Ella es miembro de la cómunidad ágil, en el último encuentro de ágiles Buenos Aires dio una charla sobre retrospectivas:

Ingrid me hizo algunas observaciones interesantes respecto a implementar scrum en una empresa. Comparando scrum con las metodologías tradicionales, hay una diferencia de base sutil, pero muy importante.

Las metodologías tradicionales se basan en el control, en cambio scrum se basa en la confianza. Para alguien que quiere implementar scrum, esto es algo que no hay que dejar de ver. Controlar es más fácil que confiar, por lo que es común usar las técnicas de scrum y seguir controlando. Lo difícil es construir confianza.

Ingrid tiene contacto con el mundo de las ONGs y me dio una buena idea respecto al proyecto estamos empezando con Chicho para organizar grupos scouts, la de pensar en una herramienta para eventos auto-organizados, que pueda servir para ONGs y porque no también para la comunidad agile. Sería sin duda un proyecto muy interesante, que podría aportar valor y re alimentarse de una comunidad más grande.

Me contó sobre cómo los animales superan enfermedades como el cáncer, medicinas alternativas que estudian este comportamiento para curar personas, comercio justo, el permacultivo en Argentina, su experiencia al aplicar scrum en una ONG. Fue una conversación interesante.

Que tiene que ver todo esto con scrum? Muchas de estas ideas se basan en algo simple, auto organizado, orgánico, adaptable.

A los que les interese el tema de las retrospectivas, les recomiendo ver la película 12 hombres en pugna.

saludos!

viernes, 4 de diciembre de 2009

Difusión: otra manera de minimizar el impacto ambiental

Algo interesante a la hora de resolver un problema es aprender a mirar fuera del cuadrante para descubrir nuevas posibilidades. Hoy tuve la suerte de charlar con Andrés Navarro, un especialista en energías limpias que me ayudó a abrir la cabeza. Les dejo el link de la charla:
http://dondevuelaelcondor.blogspot.com/2009/12/un-nuevo-amigo-en-el-desafio-del-cambio.html

Una manera de minimizar el impacto ambiental es por ejemplo minimizar la huella de carbono usando paneles solares. Otra manera que me resultó interesante es la de ayudar a divulgar estos temas, para que tomemos conciencia como sociedad.

La 1ra la asocio con un pensamiento lineal / lógico. La segunda con un pensamiento más lateral / creativo. Además, creo que la segunda puede tener un mayor impacto que la 1ra, lo cual la hace una alternativa interesante.

saludos!

miércoles, 2 de diciembre de 2009

Un proyecto abierto, colaborativo y por una causa

Hoy pasé una tarde de cafe con Fernando Chicho un colega que conocí en un campamento hace menos de 2 semanas. Cuando era chico iba a un grupo scout, hace ya varios años (como pasa el tiempo...). Hace poco los chicos del grupo organizaron un campamento donde invitaron a las generaciones anteriores, las raices, los viejos, los dinosaurios. Fue un encuentro muy emotivo para todos.

En ese viaje, hablamos con Fernando sobre hacer un sistema para facilitar la organización del grupo. Hoy nos juntamos y surgieron ideas muy interesantes. Hablamos sobre hacer un proyecto sin fines de lucro, abierto, colaborativo y por una causa. Creo que es interesante comentar los aspectos que charlamos, para destacar que no todo es plata y el potencial que vimos detrás de la idea.
  • Nos interesa que open source, para que cualquiera lo pueda usar. De hecho, si le sirve a otros grupos scout, sería mayor aún nuestra satisfacción personal, ya que estaríamos ayudando a más gente.
  • Abierto, que cualquiera se pueda sumar y colaborar.
  • Desafiante. Queremos que tenga un elevado nivel de calidad, para atraer a más personas que quieran sumarse. Incluso que sirva de aplicación de referencia sobre las tecnologías que utilice. Hablamos de usar TDD y domain driven design, .net. nhibernate, castle winsor, asp mvc, moq, etc.
  • Ágil. Queremos usar scrum para ganar experiencia en la metodología, maximizar el valor generado e incluso invitar a cualquiera que quiera aprender o dar su experiencia en scrum a colaborar. Pensamos que además, esto hace más atractivo el proyecto.
  • En algún futuro, nos gustaría enseñar sistemas a personas con menos recursos y ayudar a insertarlos laboralmente. Por lo que este proyecto puede ser un punto de partida y una buena experiencia sobre trabajar en proyectos colaborativos.
  • Nos gustaría apoyarnos en la comunidad. También nos gustaría aportar cosas a la comunidad.
Luego hablamos de scrum fuera del mundo del software, sobre la posibilidad de hacer talleres de scrum para los chicos que coordinan, con el objetivo de potenciarlos como equipo y darles herramientas que ellos a su vez puedan potenciar a sus equipos.

El simple hecho de mezclar dos mundos que tienen distintos orígenes pero que no son tan distintos fue un gran disparador de ideas.

Se imaginan un campamento donde referentes del mundo agile compartan su conocimiento con los scouts? Y que los referentes participen a su vez que actividades scout aprendan nuevas dinámicas de equipo.

Cada vez encuentro más apasionante trabajar con el potencial de las personas.

saludos!