<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>Miguel Cabrera</title>
 
 <link href="http://mfcabrera.com/" />
 <updated>2011-10-01T16:44:12-05:00</updated>
 <id>http://mfcabrera.com/</id>
 <author>
   <name>Miguel Cabrera</name>
   <email>mfcabrera@gmail.com</email>
 </author>

 
 <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MiguelCabrera" /><feedburner:info uri="miguelcabrera" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><entry>
   <title>Muerte en Hawaii - Cover  Vallenato</title>
   <link href="http://mfcabrera.com/music/2011/09/25/muerte-en-hawaii---cover--vallenato-.html" />
   <updated>2011-09-25T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/music/2011/09/25/muerte-en-hawaii---cover--vallenato-</id>
   <content type="html">&lt;div id="outline-container-1" class="outline-2"&gt;

&lt;div class="outline-text-2" id="text-1"&gt;


&lt;p&gt;
De esto ya ha pasado algún tiempo, pero creí necesario escribir sobre  lo
mismo para que quede en la posteridad.
&lt;/p&gt;
&lt;p&gt;
Todo comenzó cuando navegando en internet vi que existia  un  &lt;a href="http://www.entrenlosquequieran.in/"&gt;concurso&lt;/a&gt;  del periodico ADN
para concoer personalmente a los chicos de Calle 13.  El concurso consistía
en hacer algunas cosas relacionadas con Calle 13, entre ellas hacerce el look
de Residente   o Cantar la canción Muerte en Hawaii de la misma banda y subir
el video a YouTube. El premio se lo ganaba la persona que más likes
consiguiera en Facebook.
&lt;/p&gt;
&lt;p&gt;
Dado que me puedo considerar fan de la banda y que he estado neciando con
música ultimamente (hice un remix de esa canción con mis juguetes musicales,
ver el video abajo) y después  de conversarlo con mi novia, decidimos hacer
una versión de Muerte en Hawaii de Calle 13 propia para participar en el
concurso.  Nuestra versión iba a tener unos arreglos propios de la múscia de la costa norte de Colombia (Vallenato y
Cumbia para ser más específicos). Como queriamos hacerlo rápido, decidimos
hacerlo en dos sesiones por la noche y así subirlo lo más rápido posible para
iniciar a conseguir "likes".
&lt;/p&gt;


  &lt;div class="image-center"&gt;
   &lt;img src="/files/images/music-toys.jpg"/&gt; 
  &lt;/div&gt;



&lt;p&gt;
Iniciamos grabando los acordes básicos, con suerte descubrimos que la canción
estaba en el tono que estaba afinado mi acordeón (Bb-Eb-Ab), asi que no
tendria que buscar otro (o comprarme un  &lt;a href="http://www.roland.com/products/en/FR-18_diatonic/"&gt;Roland FR-18&lt;/a&gt; ). Grabamos 
también los acordens en piano (usando my &lt;a href="http://www.korg.com/padkontrol"&gt;Korg padKontrol&lt;/a&gt;). Con esa base
procedimos a reemplazar una de las guitarras con el acordeón, el cual
grabamos con mi &lt;a href="http://la.m-audio.com/products/es_la/FastTrackPro.html"&gt;FastTrack pro&lt;/a&gt; y el micro &lt;a href="http://www.samsontech.com/samson/products/microphones/condenser-microphones/c03/"&gt;Samsom C03&lt;/a&gt; conectado a esa tarjeta.
Todo lo grabamos usando  &lt;a href="http://www.apple.com/es/ilife/garageband/"&gt;GarageBand&lt;/a&gt; que venia con mi Mac.  Aprovechamos
y grabamos también la caja y la guacharaca  del mismo modo. Todo eso en algo
más de 3 horas un domingo por la noche.
&lt;/p&gt;



  &lt;div class="image-center"&gt;
   &lt;img src="/files/images/mike.jpg"/&gt; 
  &lt;/div&gt;


&lt;p&gt;
Aunque sonaba bien, nos faltaba otra guitarra (y el bajo) y era dificil
tocarla como queriamos usando algún controlador MIDI, así que le dije a mi
amigo &lt;a href="https://sites.google.com/site/esalaza02/"&gt;Esteban Salazar&lt;/a&gt; para que se trajera su guitarra al dia siguiente y así grabaramos la segunda
guitarra y los bajos. Conectamos la guitarra directamente a la FastTrack Pro
y usando los amplificadores virtuales del GarageBand obtuvimos los sonidos
que queriamos tanto para el bajo como para la guitarra. 
Esteban tuvo algunos problemas identificando algunos
acordes  que posiblemente con algo de tiempo los hubieramos conseguido, pero
como estabamos al trote, decidimos hacer algunas ediciones en Garageband y
seguir.
&lt;/p&gt;


  &lt;div class="image-center"&gt;
   &lt;img src="/files/images/salzo.jpg"/&gt; 
  &lt;/div&gt;


&lt;p&gt;
Las voz principal la grabé y  con mucha ayuda de mi novia que es profesora
de canto. Ella me  corrigió algunos problemas de afinación. Los coros los hicimos
todos y algunas voces auxiliares las realizó ella. 
&lt;/p&gt;

&lt;p&gt;
El "Video" que hicimos esa misma noche y  usamos la camara de mi MBP fija, sin
ninguna iluminación apropiada y con la ropa del trabajo (y algunos trapos
encima). Una vez grabado, hice la edición rápida en iMovie y lo publiqué (recuerdo haberme acostado esa noche como a las 2:00 AM)..
&lt;/p&gt;
&lt;p&gt;
Al final no ganamos (realmente quedamos en muy mala posición en el top :P), pero fue muy
divertido hacerlo y jugar con los juguetes (hablaré de los mismos en otro
post). El resultado obviamente dista de ser pro (nunca habia grabado algo en
mi vida) pero  quedé muy contento con el mismo.  Depronto me gustaría hacer algo
con un acordeón más elaborado (hacerlo más vallenato tal vez)  y tener
cajeros y guacharaqueros de verdad  para  que quedara 
bien grabado. (por que me tocó grabar todo eso a mi, la calidad no es la mejor).
&lt;/p&gt;
&lt;p&gt;
Abajo el vid con el resultado final. (El cual es totalmente Cheezy, pero
divertido). Por favor obviar los errores de sincronización del cantane y la
música :D.
&lt;/p&gt;




&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/qXXNKgZ5HBA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;



&lt;p&gt;
&lt;b&gt;Bonus Track&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Aca un remix de la canción Muerte en Hawaii de Calle 13 con una percusión
(realizada con Garageband y mi Korg padKontrol):
&lt;/p&gt;




&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/toKu8fnCxtU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;



&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>AmazonXCH - Mira los precios de Amazon en tu Moneda Local</title>
   <link href="http://mfcabrera.com/projects/2011/06/13/amazonxch---mira-los-precios-de-amazon-en-tu-moneda-local.html" />
   <updated>2011-06-13T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/projects/2011/06/13/amazonxch---mira-los-precios-de-amazon-en-tu-moneda-local</id>
   <content type="html">&lt;div id="outline-container-1" class="outline-2"&gt;

&lt;div class="outline-text-2" id="text-1"&gt;


&lt;p&gt;
Cuando yo tengo un viaje a estados unidos o algún amigo viaja para allá,
mucho de nosotros aprovechamos y compramos cosas. Uno de los  sitios favoritos
para comprar en USA tanto mio como de mis compañeros de trabajo es
&lt;a href="http://www.amazon.com"&gt;Amazon&lt;/a&gt;. Los precios, como es de esperar, están en dolares, por tanto tenemos
dos opciones para ver los precios en nuestra moneda local: 1. Hacemos el
calculo aproximado (por ejemplo 1 dolar = 2000 pesos) o 2. usamos una
sencilla calculadora y juiciosamente realizamos el calculo. También, si usamos algún buen navegador podremos usar
alguna &lt;a href="https://chrome.google.com/webstore/detail/lncdobdbibdgoiohgnflmjajfphcnakg"&gt;extensión&lt;/a&gt; que nos ayude con ese calculo.  
&lt;/p&gt;
&lt;p&gt;
Sin embargo, lo ideal sería poder ver precios de nuestra moneda local
directamente en Amazon. Dado que no vi ninguna extensión que hiciese eso (y
la verdad no busqué de a mucho) y que también que tenia ganas de aprender
Javascript (por eso del HTML5) decidí hacerme una extensión para Google
Chrome (el navegador que uso) que hiciese precisamente eso, mostrar los
precios en la moneda local. (En mi caso COP).
&lt;/p&gt;


   &lt;div class="image-right"&gt;
&lt;p&gt;
&lt;a href="https://chrome.google.com/webstore/detail/jdfbkldlalhlfgmphkehdlabhanbldmp"&gt;&lt;img src="http://mfcabrera.com/files/images/icon-big.png"/&gt;&lt;/a&gt;
   &lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Se llama Amazon-XCH  y la la desarrollé basandome en la extensión  &lt;a href="https://chrome.google.com/webstore/detail/lncdobdbibdgoiohgnflmjajfphcnakg"&gt;Currency Converter&lt;/a&gt; para
Chrome, es decir,  usa como fuente de datos &lt;a href="http://finance.yahoo.com/"&gt;Yahoo Finance&lt;/a&gt;, por tanto usa los
datos en tiempo real del mercado internacional no la TRM (tasa oficial)  del día, sin embargo
es un buen aproximado, además de permitirle a la extensión mostrar los
precios en cualquier moneda del mundo :-). El precio aparece entre parentesis
luego del precio original en dolares (depronto cambio esto en el futuro cercano).
&lt;/p&gt;
&lt;p&gt;
Dado que es la primer aproximación el código no es de lo mejor,
adicionalmente hay algunos inconvenientes en los que trabajaré si el tiempo
me lo permite:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Cuando el precio hay que verlo en el carrito ("see price in cart") para que
se muestre el precio hay que darle click al link, cerrar el frame y darle
click otra vez.
&lt;/li&gt;
&lt;li&gt;
Los precio desaparece cuando un producto tiene varias opciones de
configuración (como el Kindle 3G). 

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pueden descargar la extensión desde la &lt;a href="https://chrome.google.com/webstore/detail/jdfbkldlalhlfgmphkehdlabhanbldmp"&gt;Google Chrome WebStore&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
El código fuente (licenciado como MIT) pueden verlo en &lt;a href="https://github.com/mfcabrera/amazon-xch"&gt;Github&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Creo que debería hacer un post similar a este en inglés pero es algo tarde y tengo sueño.
&lt;/p&gt;

&lt;p&gt;
Buena noche.
&lt;/p&gt;




&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Operations vs Development</title>
   <link href="http://mfcabrera.com/enterprise/2011/02/14/operations-vs-development.html" />
   <updated>2011-02-14T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/enterprise/2011/02/14/operations-vs-development</id>
   <content type="html">&lt;div id="outline-container-1" class="outline-2"&gt;

&lt;div class="outline-text-2" id="text-1"&gt;


&lt;p&gt;
Since I graduate from college (actually a little bit before that) I always
felt like I was in between worlds. I had a lot of friends from the university that had very
defined profiles and skill sets. Generally, they were either Developers (some
of them very good coders) or they were oriented towards networking and systems
administration (many of them &lt;b&gt;literally&lt;/b&gt; hated programming).&lt;sup&gt;&lt;a class="footref" name="fnr.1" href="#fn.1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
Nowadays, I still feel like a hybrid between the Sysadmin and Software
Developer. Even though now I am "Software Architect" in a software
development department, I really do a lot of stuff that is related to the operations part. As my team generally
defines the best practices and the technology to use company-wise, It is
crucial for us to be well versed in &lt;i&gt;sysadmin&lt;/i&gt; tasks.
&lt;/p&gt;
&lt;p&gt;
As I mentioned above, my team has to define/develop many of the technologies that the other
development teams use, that includes SCM procedures tools, integration 
technologies, application servers, shared libraries, development environments, common functionality
libraries and so on. As you  see, many of these activities require  a lot of
interaction with operations people. So, we generally end up working, or at
least talking, with the operations crew much more frequently that the common Software Developer. Sometimes,  we even have to perform "operation's"
activities on our development environment first, and then send a "How-to" manual to the operation people to perform.
&lt;/p&gt;
&lt;p&gt;
As is common in many enterprises, Operations is  clearly separated from
Development and from QA. Moreover, QA is also split in two different
teams: the "Technical QA" which "belongs" to Operations and the "Functional
QA"  which belongs to Software Development department &lt;sup&gt;&lt;a class="footref" name="fnr.2" href="#fn.2"&gt;2&lt;/a&gt;&lt;/sup&gt;.  So, my company  is no different from a common enterprise, both areas  have
different agendas and they both claim to be "&lt;b&gt;aligned&lt;/b&gt;" with the "&lt;b&gt;strategic objectives&lt;/b&gt;" of the business. However,  when it comes to get a new
application to production (which includes getting the hardware, testing,
preparing the environments, and other related task) or simply releasing a new
version of an already existing application into production, all the process (even in
our development department) are either manual, duplicated or extremely tedious. And
generally a combination of all of them. 
&lt;/p&gt;
&lt;p&gt;
Currently,  we are in the process of improving our Software Development
Methodology. I am in charge of the SCM process definition, but only for the
dev team. But this is no easy task, given the broad scope of the process and that we are basically in diapers when referring to CM.  Some could think
that this is a great opportunity for us to automate and improve these process, including
Release Management and Build Engineering (namely, continuous integration, unit
testing and other industry  best practices). However, although we certainly would
do better if we apply this to our processes, at the end, we would hit
operations' "wall" nevertheless.
&lt;/p&gt;
&lt;p&gt;
In the beginning I believed operations was a bottle-neck because they were
just not agile as they should, or not as good as they should. But there was another factor I did not take
into account. Operations inherently wants to prevent change, given that they are the
responsible for the stability of the system and they are also rewarded for
that.  If you make  changes (e.g
deploys, new applications, etc) possibilities of making the whole
system unstable increases. But if you &lt;b&gt;do&lt;/b&gt; stop changes (or make the
process of releasing  new changes extremely cumbersome) the
change will be accumulative and &lt;i&gt;big changes are far more dangerous&lt;/i&gt; than
small ones.&lt;sup&gt;&lt;a class="footref" name="fnr.3" href="#fn.3"&gt;3&lt;/a&gt;&lt;/sup&gt;
&lt;/p&gt;


   &lt;div class="image-right colorbg"&gt;
&lt;p&gt;
&lt;img src="http://dev2ops.org/storage/WallOfConfusion.png"  alt="http://dev2ops.org/storage/WallOfConfusion.png" /&gt;
   &lt;p&gt;The "wall of confusion"&lt;a
  href="http://dev2ops.org/blog/2010/2/22/what-is-devops.html"&gt; Source &lt;/a&gt;&lt;/p&gt;
  &lt;/div&gt;

  


So, what are the specific problems I think we have when comes to our overall
&lt;a href="http://en.wikipedia.org/wiki/Systems_Development_Life_Cycle"&gt;SDLC&lt;/a&gt; process:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Information silos&lt;/b&gt;. We have different systems to handle requirements from
users, task planning, bug database, test results and deployment requirement.  That is not necessarily
bad, but none of those systems are connected, so each of them have a 
work-flow and database. Therefore, there is no way to trace back a change with a release
to production or to bug (issue).
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Cumbersome Processes&lt;/b&gt;: The process of getting a new application on-line is cumbersome, filled with
a lot formats that ask impossible question to answer.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Manual  Build &amp;amp; Release Process&lt;/b&gt;: Once the application is "on-line" and we want to release a new version of
the software all is done "manually", from the compilation, testing  to the
configuration of environments. Some of those task are requested using
ticketing system, asking for the same information over and over (We have even two
different process for asking the same stuff and performing the same
task). In other words  a &lt;i&gt;Build and Release&lt;/i&gt; process should be created.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Manual Environment Management&lt;/b&gt; The environment administration  is done also manually, and a lot of problems
occurs when a change is requested. Finding the origin of the change is
difficult if  not impossible. Environment configuration should be baselined
and handled using appropriate tools. (Like  or &lt;a href="http://www.opscode.com/chef/"&gt;Chef&lt;/a&gt; or &lt;a href="http://www.puppetlabs.com/"&gt;Puppet&lt;/a&gt;, just to name
some Open Source alternatives). That is, the environments should be first
class citizens and automated process for managing the changes should be put
in place.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Dependency Management&lt;/b&gt; is not managed at all by operations, I had to create
a &lt;a href="http://subversion.apache.org/"&gt;Subversion&lt;/a&gt; repository with some manual procedures in order to stabilize the
system. (See my &lt;a href="http://mfcabrera.com/coding/2010/06/18/ruby-graphviz-playing.html"&gt;older post&lt;/a&gt;). We have minimized the problem of "It works on
my machine". However, there is still problems with configuration files that are not
managed at all.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Split QA Teams&lt;/b&gt;: The QA department is split in two, technical and "functional", each managed
differently and with different tooling and objectives. Many of the test are
manual, making them difficult to re-schedule. There is no Code Coverage or
Automated Unit Testing, only System testing. This not only makes the QA
process slow but also may prevent  a proper identification of application
issues. I believe also the communication between teams (QA, Ops and Dev)
can be improved.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have more or less  a broad view  of the problems, and It is evident that
if Operations and and Development worked together this could a lot of them
could be tackled. Recently, a new "approach" called DevOps have taken
strength in the last few years.  Wikipedia (and the Original
article) defines DevOps as 
&lt;/p&gt;
&lt;blockquote&gt;

&lt;p&gt;[&amp;hellip;] a set of processes, methods and systems for communication,
collaboration and integration between departments for development
(applications/software engineering), technology operations and quality assurance (QA).
&lt;/p&gt;
&lt;/blockquote&gt;




&lt;/div&gt;

&lt;div id="outline-container-1.1" class="outline-3"&gt;
&lt;h3 id="sec-1.1"&gt;DevOps Approach vs Traditional Thinking:&lt;/h3&gt;
&lt;div class="outline-text-3" id="text-1.1"&gt;


&lt;p&gt;
Based on the &lt;a href="http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr"&gt;This presentation by John Allspaw&lt;/a&gt;  (from Flickr) here's the traditional
thinking (slightly modified):
&lt;/p&gt;

&lt;p class="verse"&gt;
Developers job is to create software and add features.&lt;br/&gt;
Operations job is keep the site stable and fast.&lt;br/&gt;
&lt;/p&gt;


&lt;p&gt;
But  the truth is that 
&lt;/p&gt;

&lt;p class="verse"&gt;
Operations job is NOT to  keep the site stable and fast.&lt;br/&gt;
Operations job is to ENABLE the business &lt;br/&gt;
Change is the root of all failures and outages&lt;br/&gt;
&lt;/p&gt;





  &lt;div class="image-center"&gt;

&lt;p&gt;
&lt;img src="http://upload.wikimedia.org/wikipedia/commons/4/4e/Devops.png"  alt="http://upload.wikimedia.org/wikipedia/commons/4/4e/Devops.png" /&gt;
&lt;/p&gt;


  &lt;/div&gt;


&lt;p&gt;
Basically, what DevOps is saying is that we areas should communicate more,
or at least more assertive, tools and methodologies should be used to
automate from the build process to release process. Which is an area that
"belongs" to the Configuration Management set of processes. In other words, it creates  new ways of integration between QA, Operations by
Development by creating a culture, a set of process and automation tools, to lower the risk and support change, instead of avoiding it. 
Right now the &lt;a href="http://dev2ops.org/blog/2010/2/22/what-is-devops.html"&gt;definition&lt;/a&gt; is still somewhat unclear, however, at the end,
what is being proposed is a pattern for  managing IT areas.
&lt;/p&gt;
&lt;p&gt;
Let me be clear, I am not arguing that my company should jump into the DevOps approach in
order to succeed. However I do believe that DevOps people propose is
valuable, those thing need to be taken into consideration urgently in my organization. They 
are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Serious &lt;b&gt;Change in the culture&lt;/b&gt; in both areas.&lt;sup&gt;&lt;a class="footref" name="fnr.4" href="#fn.4"&gt;4&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Unified processes&lt;/b&gt;: The SDLC should be unified and the appropiate
metrics should be defined.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Unified Tooling&lt;/b&gt;: Tools using in  both sides should be the same, including
versioning, ticketing system and version control system.
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Version controlled Software Library&lt;/b&gt;. 
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Version controlled Environments&lt;/b&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Automation&lt;/b&gt; of Manual Task, including testing and  deployment.
&lt;/li&gt;
&lt;li&gt;
Assertive &lt;b&gt;communication&lt;/b&gt; (whatever that means in context).

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some folks in my organization argue that they are &lt;i&gt;just following ITIL&lt;/i&gt; to counter
my argument a about their responsibilities in some of the task I just
mentioned above.  Either they forget completely about the &lt;a href="#htp://wiki.en.it-processmaps.com/index.php/ITIL_V3_Service_Transition"&gt;ITIL Service Transition process&lt;/a&gt; or their interpretation is quite limited to the
minimum effort to get it done. In either way, you can implement the process
in any way you like. The fact that you follow ITIL by doing some archaic process does not make you
better than a organization that does not know what &lt;i&gt;ITIL&lt;/i&gt; is, but has a
highly automated and optimized processes. I mean, it is just a matter of
common sense.
&lt;/p&gt;

&lt;p&gt;
To summarize, I believe that Suramericana should re-think the whole
SDLC process, with a strong emphasis in  the definition and application of a good
Configuration Management process across the areas (including Operations), with specific emphasis in
the  Build Engineering, Release Management, Environment Management processes
and strong emphasis in inter team communication  in order to solve the issues
I just described.
&lt;/p&gt;








&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id="footnotes"&gt;
&lt;h2 class="footnotes"&gt;Footnotes: &lt;/h2&gt;
&lt;div id="text-footnotes"&gt;
&lt;p class="footnote"&gt;&lt;sup&gt;&lt;a class="footnum" name="fn.1" href="#fnr.1"&gt;1&lt;/a&gt;&lt;/sup&gt; There was also the ones who did not think to hard about that, they were
more attracted towards the "management" of software development.
&lt;/p&gt;
&lt;p class="footnote"&gt;&lt;sup&gt;&lt;a class="footnum" name="fn.2" href="#fnr.2"&gt;2&lt;/a&gt;&lt;/sup&gt; I really believe that QA department should be a completely different
area, as it seems to be the best practice.
&lt;/p&gt;
&lt;p class="footnote"&gt;&lt;sup&gt;&lt;a class="footnum" name="fn.3" href="#fnr.3"&gt;3&lt;/a&gt;&lt;/sup&gt; &lt;a href="http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr"&gt;10 Deploys Per Day - Dev and Ops Cooperation at Flickr by John Allspaw&lt;/a&gt;
&lt;/p&gt;
&lt;p class="footnote"&gt;&lt;sup&gt;&lt;a class="footnum" name="fn.4" href="#fnr.4"&gt;4&lt;/a&gt;&lt;/sup&gt; I really like the hard way recipe of Ted Dziuba in his DevOps bashing
&lt;a href="http://teddziuba.com/2011/03/devops-scam.html"&gt;article&lt;/a&gt;, which includes putting developers on call rotations, making develop
in the same operating system they deploy and that a making sure a downtime
never happens again.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Hyperref Options Link</title>
   <link href="http://mfcabrera.com/misc-tech/2010/11/10/Hyperref-options-link.html" />
   <updated>2010-11-10T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/misc-tech/2010/11/10/Hyperref-options-link</id>
   <content type="html">&lt;p&gt;If you ever need to know all the options of the Latex package &lt;a href="http://www.tug.org/applications/hyperref/"&gt;Hyperref&lt;/a&gt; (that nifty package that allows you to create nice &lt;span class="caps"&gt;TOC&lt;/span&gt; and Link inside a latex document you may check &lt;a href="http://www.misojiro.t.u-tokyo.ac.jp/suribt/hyperref_options.pdf"&gt;this link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now if you want to use hyperref along with &lt;a href="http://orgmode.org"&gt;Org-Mode&lt;/a&gt; you may want to put something like this on top of you .org file.&lt;/p&gt;
&lt;script src="https://gist.github.com/733294.js"&gt; &lt;/script&gt;</content>
 </entry>
 
 <entry>
   <title>Sobre Ser Costeño, Colombiano, Latino y Ciudadano del Mundo</title>
   <link href="http://mfcabrera.com/personal/2010/11/05/sobre-ser-costeno-pt1.html" />
   <updated>2010-11-05T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/personal/2010/11/05/sobre-ser-costeno-pt1</id>
   <content type="html">&lt;p&gt;Por motivos familiares, mi niñez transcurrió entre  distintas ciudades de la costa norte colombiana. no fueron muchas, ni los viajes tan constantes, pero&lt;br /&gt;
los cambios y/o viajes fueron los suficientemente frecuentes para generar un de alguna manera un desarraigo por costumbres o por ciudades.&lt;/p&gt;
&lt;div class="image-left"&gt;&lt;img width="320" heigth="70%" src="http://farm1.static.flickr.com/208/464804301_88547df424.jpg"
alt="Sucre-Sucre en la mojana" /&gt;&lt;/div&gt;
&lt;p&gt;Aunque siempre que me preguntan digo que soy &lt;a href="http://es.wikipedia.org/wiki/Santa_Marta"&gt;Samario&lt;/a&gt;, Yo realmente nací en &lt;a href="http://es.wikipedia.org/wiki/Cartagena_de_Indias"&gt;Cartagena de Indias&lt;/a&gt; pero solo viví un periodo de tiempo muy corto cuando estaba bebé. En en mi infancia y parte de la adolescencia viaje (y viví) en varias partes de Colombia (incluyendo ciudades y pueblos como &lt;a href="http://es.wikipedia.org/wiki/Cali"&gt;Cali&lt;/a&gt;, &lt;a href="http://es.wikipedia.org/wiki/Buga"&gt;Buga&lt;/a&gt;, Sincelejo, Sucre y por supuesto &lt;a href="http://es.wikipedia.org/wiki/Santa_Marta"&gt;Santa Marta&lt;/a&gt;, la ciudad de mi familia materna y el lugar  donde pasé la gran mayoría de mis periodos  vacacionales). Casi todo ese tiempo, estuve en ciudades y pueblos de la costa. Centrandome viajando constantemente entre el departamento de &lt;a href="http://es.wikipedia.org/wiki/Sucre_%28Colombia%29"&gt;Sucre&lt;/a&gt; y &lt;a href="http://es.wikipedia.org/wiki/Magdalena_%28departamento%29"&gt;Magdalena&lt;/a&gt;.&lt;/p&gt;







&lt;p&gt;Lo máximo que alcancé a vivir en uno de esos lugares fue 6 años y creo que en promedio no más de 3 y 1/2.  Definitivamente lo malo de moverme tanto es que&lt;br /&gt;
nunca me  sentí que &lt;strong&gt;era&lt;/strong&gt; de un lugar. Sin embargo, vivir en tantas partes de la costa norte me dio  una visión más completa de lo que era la costa norte, sus diferencias y similitudes en las distintas regiones que visitaba (que por las cuales estuve de paso).&lt;/p&gt;
&lt;p&gt;Cualquier persona pensaría vivir en tantos regiones de la costa atlántica me haría más costeño, pero no, creo que el desarraigo que eso causo, me hizo buscar, durante mi adolescencia, referentes culturares  que en ese momento pensé superiores a los locales.&lt;/p&gt;
&lt;p&gt;Intenté encontrar una identidad siendo rocker y ensayando distinto tipo de musica y maneras de vestir, iniciando en una combinación extraña de rapero metalero, pasando por gruncheto hasta reggae dancehall guy. Pero al final, despues de explorar mucho, crecer (y madurar algo) creo encontré que a uno no lo define la música que se escucha y la verdad, menos la ropa que viste.&lt;/p&gt;
&lt;p&gt;Comencé a descubrir el folklore de mi tierra (de una manera que extraña que ya contaré) y estando lejos de mi tierra (Medellín). La verdad me gusta mucho. También leí muchos libros de historia latinoamericana y colombiana, tratando de entender por que estamos como estamos, por que tal vez somos como somos y que significa ser una mezcla de culturas muchas veces tan distintas.&lt;/p&gt;
&lt;p&gt;Creo que logré algo importante, ubicarme dentro del mundo como latino, como colombiano, como costeño. Actuando local con una visión global. Valorando y disfrutando influencias culturales foraneas sin anteponerlas nunca a las expresiones de mi tierra.&lt;/p&gt;
&lt;p&gt;Esto tiene sus ventajas, muchos amigos van y disfrutan de Placebo, pero no pueden escuchar un Vallenato o una cumbia. Otro amigos dicen que Metallica o Iron Maiden es musica de locos. Yo puedo ir un concierto de Bomba Estereo, escuchar Andres Landero en mi carro y pasarla muy bien en un concierto de Placebo. Puedo valorar expresiones locales, mientas otras personas las rechazan &amp;#8220;Por que sino suena a gringo no sirve&amp;#8221;.  Puedo sentirme Latino, Colombiano y Costeño, Muy orgulloso de ello, mientras otras personas sueñan con haber nacido en un barrio de Seattle, en una ciudad Alemana o en algun pueblo nordico, con su cuerpo lleno de genes vikingos.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>OC4J, Shared Libraries Ruby and Graphviz</title>
   <link href="http://mfcabrera.com/coding/2010/06/18/ruby-graphviz-playing.html" />
   <updated>2010-06-18T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/coding/2010/06/18/ruby-graphviz-playing</id>
   <content type="html">&lt;p&gt;(all of that, in just one post)&lt;/p&gt;
&lt;p&gt;Since July of 2010 I have been working in a insurance company called &lt;a href="http://www.suramericana.com.co"&gt;Suramericana&lt;/a&gt;. There, we have a software development department and I work as &amp;#8220;Architecture Analyst&amp;#8221; whatever that means. Anyway, what I do there is all the non-functional stuff that &amp;#8220;supports&amp;#8221; the  department software (security, messaging, environment, software development methodology, etc.).&lt;/p&gt;
&lt;p&gt;Like many enterprises, applications are built using  Java (specifically J2EE or &lt;span class="caps"&gt;JEE&lt;/span&gt;) using &lt;a href="http://www.oracle.com/technology/software/products/ias/htdocs/utilsoft.html"&gt;Oracle Application Server&lt;/a&gt; (OC4J) and Oracle Database.  Many of these J2EE containers support what is called in java shared libraries. A library is a bunch of jars (therefore a bunch of classes), so this is a way to &amp;#8220;elegantly&amp;#8221; organize class loaders  defining dependencies between them and assigning them to the the required applications. In OC4J, the libraries are defined in a file called server.xml.  You can see an example &lt;a href="http://gist.github.com/444545#file_gistfile1.xml"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When I got to Suramericana, there was no one was in charge for administering the shared libraries, and there was a lot of disorganization in all the enviroments causing delays in the when deploying to the test or production environment. And a lot of people asking for support to the Architecture team (my team), so we basically couldn&amp;#8217;t focus on our project because the support load was to high, and the &lt;a href="http://en.wikipedia.org/wiki/JAR_hell#JAR_hell"&gt;shared libraries dependencies issue&lt;/a&gt;  was the one of the main reasons.&lt;br /&gt;
So I decided to do something about it. I talked to my boss and we decided to organize the whole thing and create a process (some part are manual but that is another story) to organize the shared libraries and put them on a Subversion repository. Now, all containers have the same  shared libraries and there is a control when someone wants to modify or add a shared library. We now have almost not support regarding shared libraries use.&lt;/p&gt;
&lt;p&gt;Well, while I was doing all this I wanted to have like a graphic representation of the shared libraries and its dependencies. I though that maybe &lt;a href="http://www.graphviz.org/"&gt;Graphviz&lt;/a&gt; could help me doing that. As I needed to parse the &lt;span class="caps"&gt;XML&lt;/span&gt; quickly and I am Ruby fan I chose Ruby to implement it, I discovered a Ruby &lt;a href="http://github.com/glejeune/Ruby-Graphviz"&gt;gem&lt;/a&gt; that generates dot files (Graphviz file format) using Ruby as a &lt;span class="caps"&gt;DSL&lt;/span&gt; for it. So I wrote  a small script (see the end of the post) that took the xml file, parsed it, and based on the references to other libraries, created a graph.  I obtained  a cool image like:&lt;/p&gt;
&lt;p&gt;&lt;a href="/files/images/oc4j2gv.png" target="_blank"&gt;&lt;br /&gt;
&lt;img src="/files/images/oc4j2gv.png" width="621" height="183" /&gt; &lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you see above, the name of the shared libraries with the version  are the nodes and directed edges represent the dependencies. For example, we see that log4j have no dependencies and pretty much all of the other libraries depend on it.&lt;/p&gt;
&lt;p&gt;I really liked doing this in Ruby. Ruby have powerful meta-programming capabilities and a flexible syntax  that allows a programmer to create such &lt;span class="caps"&gt;DSL&lt;/span&gt; really easily. I also discovered a small bug and sent a trivial &lt;a href="http://github.com/glejeune/Ruby-Graphviz/commit/b2204d908a1254c2520b0cc7ae71720b93c88ae2"&gt;patch&lt;/a&gt; to fix it ;-P.&lt;/p&gt;
&lt;p&gt;You can see the code below. Remember, I am not a Ruby expert, so comments are welcome :-)&lt;/p&gt;
&lt;script src="http://gist.github.com/444545.js?file=oc4j2gv.rb"&gt;&lt;/script&gt;</content>
 </entry>
 
 <entry>
   <title>Interesting Articles on Machine Learning</title>
   <link href="http://mfcabrera.com/machine learning/2010/04/17/largue-scale-machine-learning.html" />
   <updated>2010-04-17T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/machine learning/2010/04/17/largue-scale-machine-learning</id>
   <content type="html">&lt;p&gt;I have done a little bit of Machine Learning back in college, I paralellized&lt;br /&gt;
a transductive &lt;span class="caps"&gt;SVM&lt;/span&gt; to get improvement over the a really slow algorithm so the topic still interest me. I just discovered a cool article by Google Research  about empiric lesson learned while developing a real world machine learning algorithms.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://googleresearch.blogspot.com/2010/04/lessons-learned-developing-practical.html"&gt;Lessons learned developing a practical large scale machine learning system&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now while reading my feed I discovered this article that introduces a cool machine learning algorith for ranking and matching players for the Xbox live. It also have a good introduction to statistical machine learning. Totally recommended.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.moserware.com/2010/03/computing-your-skill.html"&gt;Computing Your Skill&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy reading :-) .&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>N900 and Installing Maemo SDK on Ubuntu x86_64</title>
   <link href="http://mfcabrera.com/personal/2010/03/28/n900-and-maemo-sdk.html" />
   <updated>2010-03-28T00:00:00-05:00</updated>
   <id>http://mfcabrera.com/personal/2010/03/28/n900-and-maemo-sdk</id>
   <content type="html">&lt;p&gt;Well, this is my first post on my new blog. It have been a while since I blogged  and I really want to do it again. I think that with this new tool which is simpler and is text based I will be able to get &lt;br /&gt;
more easily the thoughts out of my head.&lt;/p&gt;
&lt;p&gt;Around mid-February I bought a &lt;a href="http://maemo.nokia.com/"&gt;Nokia N900&lt;/a&gt; (see video below) from a local Ebay-like Web. The N900 is a Linux (&lt;a href="http://en.wikipedia.org/wiki/Maemo"&gt;Maemo&lt;/a&gt;) based &amp;#8220;Internet Table&amp;#8221; with phone functionality. Others prefer to call it a Linux Smartphone. In any case is a device that gives you the basic functionality of a phone plus the experience of a desktop Internet experience providing you among others things:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Mozilla-based web browsing with full flash support&lt;/li&gt;
	&lt;li&gt;Common IM platform supported integrated into one (Conversations)&lt;/li&gt;
	&lt;li&gt;Skype support&lt;/li&gt;
	&lt;li&gt;Music, Video, and Radio receiver and transmitter.&lt;/li&gt;
	&lt;li&gt;Mail for exchange with Calendar sync.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And given that it is a Linux-based device, porting applications is somewhat easier, so with minor efforts you can get Gimp, Open Office and a extra bunch of application running smoothly on this device.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.forum.nokia.com/info/sw.nokia.com/id/c05693a1-265c-4c7f-a389-fc227db4c465/Maemo_5_SDK.html"&gt;&lt;span class="caps"&gt;SDK&lt;/span&gt;&lt;/a&gt; for this device is free of charge and the supported Languages are C,C++ and Python. I would have liked support for Java, Ruby and Mono. I thing the lack of support of Java is one the grey spot of this device.&lt;/p&gt;
&lt;p&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kYnx0PUX7Do&amp;hl=es_ES&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/kYnx0PUX7Do&amp;hl=es_ES&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;
&lt;p&gt;In  general I am happy with the device. It pretty much fulfill all my expectations, however here some things I believe could be improved:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;More applications: The lack of commercial application could hurt badly this device.&lt;/li&gt;
	&lt;li&gt;Battery life: Life duration really suck. I will have to get an extra battery.&lt;/li&gt;
	&lt;li&gt;More documentation and support for developers.&lt;/li&gt;
	&lt;li&gt;Support for multiple accounts in mail for exchange.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installing the &lt;span class="caps"&gt;SDK&lt;/span&gt; on Ubuntu x86_64&lt;/h3&gt;
&lt;p&gt;I am planning to code some application for this device (while learning some Python) so I decided to install the sdk on my Ubuntu 9.10 box. I ran into problem using the &lt;span class="caps"&gt;GUI&lt;/span&gt; installer that is related to the &lt;em&gt;vdso32&lt;/em&gt; kernel option. In order to install the &lt;a href="http://www.forum.nokia.com/info/sw.nokia.com/id/c05693a1-265c-4c7f-a389-fc227db4c465/Maemo_5_SDK.html"&gt;Maemo 5 SDk&lt;/a&gt; you should put &amp;#8220;vdso32=0&amp;#8221; in your kernel command line. As it is common in Ubuntu, wich each realease a lot of stuff changes so I couldn&amp;#8217;t find where to put this option. But doing it could be more easy. Look for the file /etc/default/grub and append &amp;#8220;vdso32=0&amp;#8221; to the  GRUB_CMDLINE_LINUX variable. Mine looks something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# /boot/grub/grub.cfg.
  GRUB_DEFAULT=0
  #GRUB_HIDDEN_TIMEOUT=0
  GRUB_HIDDEN_TIMEOUT_QUIET=true
  GRUB_TIMEOUT=10
  GRUB_DISTRIBUTOR=`lsb_release -i -s 2&amp;gt; /dev/null || echo Debian`
  GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
  GRUB_CMDLINE_LINUX="vdso32=0"
  (...)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that reboot and the installation is just a matter of clicking &amp;#8220;next&amp;#8221; :-).&lt;/p&gt;</content>
 </entry>
 
</feed>

