Small open source projects, you can do it better.


I want to share some frustration and thoughts I have about what the process of making small open source projects should be, specially how to have a good start with money involved.


My frustration 

I decided to build a simple marketing tool to send bulk text messages to phones (I intend to make some money out of this desktop software). But to get that software working I need a library that encapsulates the usage of a GSM modem to a level where I can easily send/receive SMS.
I found some libraries like: jsmssmslib and attention.
Jsms is a nice finished product that does just what I want, but I have to pay a licence of about 400 USD to be able to develop with their library, and then a runtime licence of 40 USD for each JVM that runs with their software. Because I want to go cheaper that market value, paying a licence for each sale that I have does not make much sense.
Smslib is open source and lacks good documentation with samples that covers all features of the framework and I don't want to go to the forums when all I want is to understand the API.
Attention just works for the actual decoding and encoding of the PDUs and it's not a finished library.

Some thoughts

I am the kind of person who wants to use the open source version of a software just for fun, to learn and to contribute, but sometimes we just need at hand a enterprise-grade product to have a fast go with our projects. Because of that most decide to go for the paid libraries, or paid products (which I am still evaluating to do too). But... 
. Why can't we have enterprise-like libraries/products in small open source projects? 
. Why is it that the one project we so need to use just lack something like high quality documentation covering all features and various use cases? 
. Why is it that the one project we so need to use just lack some working examples to have a jump start for all the features of the project?
. Why is it that the base of the project is hard to understand and it's a bit hard to dive into the source code just easily?

It could be you started a small useful project for yourself in your free time and it happened to be really useful for a handful of other people too. Then new features are requested..., a better idea of how it should be implemented comes in, but you already have users, so breaking API changes are hard decisions to make. You still want to work on it because you are PASSIONATE about it, but you are still doing it in your FREE time... so you can't devote enough time to think, implement and document a good idea well. 

I think that when you hit this dilemma the only way to do well is to be paid to work on it. This is not a revolutionary idea, people is starting to use croud-sourced funding to do great projects that end up being FREE, but they don't work for free :)

So what do you think ? If you get paid to work on what you are passionate about while providing a high open source value to the community, isn't this a win-win situation ?
Should we start opensource projects with money at hand, and in exchange provide a liberal licenced piece of software that is polished like enterprise-grade products that will run for itself in the comunity once you finish the version 1?

Como medir la altura de un edificio ?


Hace algún tiempo recibí la llamada de un colega. Estaba a punto de poner un cero a un estudiante por la respuesta que había dado en un problema de física, pese a que éste afirmaba con rotundidad que su respuesta era absolutamente acertada. Profesores y estudiantes acordaron pedir arbitraje de alguien imparcial y fui elegido yo.

Leí la pregunta del examen y decía: Demuestre cómo es posible determinar la altura de un edificio con la ayuda de un barómetro.

El estudiante había respondido:
Llevo el barómetro a la azotea del edificio y le ato una cuerda muy larga. Lo descuelgo hasta la base del edificio, marco y mido. La longitud de la cuerda es igual a la longitud del edificio.

Realmente, el estudiante había planteado un serio problema con la resolución del ejercicio, porque había respondido a la pregunta correcta y completamente. Por otro lado, si se le concedía la máxima puntuación, podría alterar el promedio de su año de estudio, obtener una nota más alta y así certificar su alto nivel en física; pero la respuesta no confirmaba que el estudiante tuviera ese nivel.

Sugerí que se le diera al alumno otra oportunidad. Le concedí seis minutos para que me respondiera la misma pregunta pero esta vez con la advertencia de que en la respuesta debía demostrar sus conocimientos de física.
Habían pasado cinco minutos y el estudiante no había escrito nada. Le pregunté si deseaba marcharse, pero me contestó que tenía muchas respuestas al problema. Su dificultad era elegir la mejor de todas. Me excusé por interrumpirle y le rogué que continuara.

En el minuto que lo quedaba escribió la siguiente respuesta: tomo el barómetro y lo lanzo al suelo desde la azotea del edificio, calculo el tiempo de caída con un cronómetro. Después se aplica la formula altura = 0,5 x aceleración x (tiempo al cuadrado). Y así obtenemos la altura del edificio.
En este punto le pregunté a mi colega si el estudiante se podía retirar. Le dio la nota más alta.

Tras abandonar el despacho, me reencontré con el estudiante y le pedí que me contara sus otras respuestas a la pregunta.
"Bueno, respondió, hay muchas maneras, por ejemplo tomas un barómetro en un día soleado y mides la altura del barómetro y la longitud de su sombra. Si medimos a continuación la longitud de la sombra del edificio y aplicamos una simple proporción, obtendremos también la altura del edificio."

Perfecto, le dije, ¿Y de otra manera?. Si, contestó, éste es un procedimiento muy básico para medir un edificio, pero también sirve. En éste método, tomas el barómetro y te sitúas en las escaleras del edificio en la planta baja. Según subes las escaleras, vas marcando la altura del barómetro y cuentas el número de marcas hasta la azotea. Multiplicas al final la altura del barómetro por el número de marcas que has hecho y ya tienes la altura.

Este es un método muy directo. Por supuesto, si lo que quiere es un procedimiento más sofisticado, puede atar el barómetro a una cuerda y moverlo como si fuera un péndulo. Si calculamos que cuando el barómetro está a la altura de la azotea la velocidad es cero y si tenemos en cuenta la medida de la aceleración de la gravedad al descender el barómetro en trayectoria circular al pasar por la perpendicular del edificio, de la diferencia de estos valores y aplicando una sencilla formula trigonométrica, podríamos calcular, sin duda, la altura del edificio.

En este mismo estilo de sistema, atas el barómetro a una cuerda y lo descuelgas desde la azotea a la calle. Usándolo como un péndulo puedes calcular la altura midiendo su período de precesión.
En fin, concluyó, existen otras muchas maneras. Probablemente, la mejor sea tomar el barómetro y golpear con él la puerta de la casa del portero. Cuando abra, decirle "Señor portero aquí tengo un bonito barómetro. Si usted me dice la altura de este edificio, se lo regalo."

En este momento de la conversación, le pregunte sí no conocía la respuesta convencional al problema (la diferencia de presión marcada por un barómetro en dos lugares diferentes nos proporciona la diferencia de altura entre ambos lugares) evidentemente, dijo que la conocía, pero que durante sus estudios, sus profesores habían intentado enseñarle a pensar.

El estudiante se llamaba Niels Bohr, físico danés, premio Nóbel de Física en 1922, más conocido por ser el primero en proponer el modelo del átomo con protones y neutrones y los electrones que lo rodeaban. Fue fundamentalmente un innovador de la teoría cuántica.

(Archipopular crónica atribuida a Sir Ernest Rutherford, presidente de la Sociedad Real Británica y Premio Nóbel de Química en l908)

Aplicaciones Web en Java con Vaadin

Estas son las diapositivas utilizadas en la presentacion de introduccion al framework Vaadin como parte de una serie de charlas dadas en el evento FLISOL 2011 en Asuncion Paraguay.





Voy a ir subiendo mas informacion sobre la utilizacion del framework como asi tambien estoy desarrollando una aplicacion un poco mas grande y completa para demostrar las mejores practicas en el desarrollo de aplicaciones grandes.

Charlas Tecnicas en la UAA

En el evento FLISOL 2011 que se va a realizar este sabado 9 de Abril se presentaran varias charlas tecnicas y talleres de programacion en la UAA. Ese dia hay varias cosas interesantes que pueden ver en el anuncio oficial. Aqui comparto la lista de charlas y talleres que se van a dar. La entrada es libre y gratuita y como es Coopsolpy quien esta organizando el evento este año, pueden seguir en su sitio cualquier actualizacion oficial que ocurra.
Saludos y nos vemos en el evento!


Charlas (resalto las referentes a programacion)

  • 09.30 - 10.30 Bienvenida e introduccion al Software Libre, Jose Cabrera
  • 10.30 - 11.30 Mozilla Labs, Introduccion & Firefox 4, Sync, Eduardo Urcullu
  • 10.30 - 11.30 Comparativa de navegadores, Aldo Medina
  • 11.30 - 12.30 Ruby on Rails / Desarrollo Web, Rafael Franco
  • 11.30 - 12.30 Sugar showcase, Martin Abente
  • 12.30 - 14.00 RECESO
  • 14.00 - 15.00 Aplicaciones Web con Vaadin, David Hofmann
  • 14.00 - 15.00 Software libre y Accesibilidad, Felipe Nery Ibarra
  • 15.00 - 16.00 Introduccion al I/O asincrono con NodeJS, Cesar Rodas
  • 15.00 - 16.00 Libre Office Paraguay, Alberto Gimenez
  • 16.00 - 17.00 Introduccion a Google Android, Christian Amado



Talleres

  • 10.30 - 12.30 y 14.00 - 16.00 Desarrollo sobre Android/buenas practicas, Christian Amado
  • 10.30 - 12.30 y 14.00 - 15.30 Introduccion a ExtJS, Javier Cardozo
  • A DEFINIR Java para Moviles, Roger Armoa

Dose of learning, not only technical aspects matters

When I started as a programmer, technical matters had the most weigh of my interest, but the more I advance in my career the more I see social and humane aspects of software development as more important than pure technical ones. Some of these aspects turn out to be about dealing with others, having an always-tuning process that fits in your organization, to have a good empowerment policy and stuff like that, probably I am missing a lot of other aspects, but the idea is that not everything is just coding ...

Here's a couple of links to share while consuming the Internet :)

A way to keep track of what you've learnt is to keep a learning log like this one, so you store the real interesting things that helped you in some way in a search-able log. Another learning technique is to talk to someone else about a new thing you just discovered, that would normally make different points of views to show up about the same subject that you haven't though about before. That interaction will make the whole new stuff you've learnt to cause a deeper impression in your brain and will help your memory to remember it later

High IQ != Smart. IQ tests can measure our analytical thinking. But "we process information in two different ways, one is intuitive and spontaneous; the other is deliberative and reasoned". Our IQ can't predict which way will we go on while making a decision given an specific circumstance, this explains why intellectually-able people make fool decisions. The link provided in Slashdot gives us advices on how to not make a quick-and-bind mistake

Are you emotionally intelligent ? Can you measure it ? Can we take benefit at work by knowing it ? I particularly found this article interesting,

Interview with a Digg.com Software Engineer Kurt Wilms. The last question asked is an advice for up and comming programers. Focus on skills that are transferable

Software that fixes itself. I've heard about this project some years ago and I couldn't believe it. And now it is actually working and doing something real, I still can't believe it !

Can Java be saved, Yet another discusion but really good to read, more the comments than the article.

Java Can be saved. Well, the natural post response to the question :). This really shows a good point where Java is really weak. Read all the comments !!!