Los siete y los días

Siete hombres, a siete pasos de distancia cada uno de sus contiguos, formando un poligono regular del cual cada uno es el vértice. Susurran en vos baja "nuevo orden", siete veces cada minuto.


Cada 7 horas tiran la vieja antorcha y prenden una nueva, o sea aproximadamente 3.4285714 veces por día, 6.857142857 veces, casi siete, solo casi, cada dos días.

Los transeuntes y automovilistas miran con curiosidad, a esos siete hombres desnudos, alrededor de un monumento, en la intersección de Corrientes y 9 de Julio.

 

Su obsesión es que los ciclos por día,

también reflejen al perfecto siete.

La ceremonia deberá repetirse, hasta que siete ciclos quepan en dos días.

 

ellos, prisioneros, se saben indignos

el obelisco es su fiscal

su sombra, el verdugo

la corta sombra del mediodia dos veces en siete ciclos, su utopía

 

siete es la señal que esperan

6.857142857 es para algunos de ellos la escupida de un mundo corrupto,

para otros el reflejo de la indignidad personal,

de una ceremonia una vez mas mal realizada

 

uno de ellos, el mas viejo, 

con las piernas débiles mira una vez mas

el reloj de arena con tapitas de plata

y cadena de oro que lleva al cuello

 

la sombra del mediodía está llegando 

la arena mantiene su desafío

y recuerda el pasar de aquel bibliotecario,

en aquellos años que también honraban al siete


un ciego que con palabras blasfemas,

pretendía maldecir la simetría, y alabar al orden.

Publicado por Maximiliano Guzman Sat, 18 May 2013 23:38:00 GMT


El Papa, la Presidenta, y las opciones.

El país todavía está sacudido por la noticia: El Papa es argentino. Y una de las primeras cosas que salimos a evaluar es que significa esto para el país. Se sabe de la relación difícil entre el cardenal Bergoglio y CFK, también se sabe que decir Iglesia es recordar una institución con influencia e historia política en Argentina. Y el kirchnerismo se pregunta y debate que pensar y hacer respecto a este nombramiento: ¿Es un signo ominoso ya que la oposición podría reunirse alrededor (y esconderse detrás) del Papa? ¿Es un gol argentino y hay que festejarlo como tal?
 
Se cuenta* que durante la crisis de misíles cubanos allá a principios de los sesenta la administración Kennedy recibe dos mensajes de Kruschev con tonos muy diferentes en pocas horas. El presidente estadounidense y sus asesores estaban bastante confundidos. Un mensaje decía "Si garantizan no invadir Cuba, sacamos los misiles". Antes de que pudieran responder, llegó el segundo mensaje, que decía: "Si atacan, estamos preparados a confrontarlos con poder militar masivo", un eufemismo para el uso de armas nucleares. Un tal Thompson, ex embajador en Moscú propone a un Kennedy escéptico contestar solo al "mensaje blando". Kennedy le dice que no se puede, que eso no va a lograr nada. Thompson le retruca que está equivocado. Y resultó que Thompson tenía razón. El juego de Kruschev no era ir a una guerra, sino poder decir "salvé a Cuba de ser invadida" en el Politburó. Un juego peligroso, ya que si alguno de los lados leía mal al otro las palabras "Calentamiento global" tendrían otro significado.
 
¿Que tiene que ver esto con el Papa y CFK? Que al kirchnerismo también se le presenta la oportunidad de interpretar los mensajes a su gusto y elegir las batallas. Es muy probable que Francisco tenga intriga política y trabajo de sobra dentro de la Iglesia Católica como para pelearse, por hobby, con Cristina.
 
¿Qué riesgo tiene equivocarse para el lado blando? Mínimo. Al fin y al cabo cualquier momento va a ser mejor para pelearse con el nuevo Papa que en estos primeros días, en que no ha hecho males como Papa, porque no ha hecho nada aún. Algo así como hablar mal de Obama antes de asumir en el 2008.
 
 
*según relataba Robert Mc Namara, secretario de defensa de EEUU de Kennedy y Johnson en "The Fog of War" y las cintas de audio desclasificadas del Comité Nacional de Seguridad de EEUU.

Publicado por Maximiliano Guzman Sun, 17 Mar 2013 03:25:00 GMT


La mujer y el aborto

Hay dos cosas que se mezclan en toda esta discusión sobre el aborto. Se mezcla el derecho a la vida del bebé, con la condena o reivindicación moral de la madre. Son dos cosas muy diferentes. El punto de no permitir el aborto no es castigar a una mujer por una supuesta conducta sexual irresponsable, sino proteger la vida del bebé. Algunos quieren hacer de la madre un ejemplo de castigo: "Que lo tenga y que se la banque, por tarada que se embarazó". Otros quieren hacer de la madre que aborta una heroína de la libertad femenina. En ambos casos se comete el error de convertir la decisión de permitir el aborto o no en un plebiscito sobre la moral sexual y la libertad de la mujer. Y ese no es el asunto importante. Lo importante es que hay otra vida, la del bebé, que debe ser protegida. 

Publicado por Maximiliano Guzman Wed, 02 Nov 2011 05:21:00 GMT


Slides de la Rubyconf Uruguay

Acá estan los slides disponibles hasta ahora:

jruby by @headius http://www.slideshare.net/CharlesNutter/rubyconf-uruguay-2010-jruby

rubinius by @brixen http://www.slideshare.net/brixen/rubyconf-uy-2010

redis and ohm by @soveran http://files.soveran.com/simplicity

ActiveRecord identity map by @miloops http://www.slideshare.net/miloops/im-presentation-5598920

Treetop by @softa http://github.com/softa/treetop-slides

webfinger by @blaine  http://www.slideshare.net/Blaine/social-software-for-robots

nodejs by @federomero http://www.slideshare.net/outboxlabs/nodejs-y-ruby

clojure by @fru02 http://www.slideshare.net/fbrubacher/clojure-5628563

Ruby culture by @rabble http://www.slideshare.net/rabble/ruby-culture

websockets by @ismasan http://www.slideshare.net/ismasan/websockets-talk-at-rubyconf-uruguay-2010

metaprogramming by @spastorino http://www.slideshare.net/spastorino/metaprogramming-5634072

Lightning talks:

  sounds.gd by @leosoto  http://www.slideshare.net/leo.soto/soundsgd-lighting-talk-rubyconf-uruguay

 

Publicado por Maximiliano Guzman Sat, 30 Oct 2010 19:15:00 GMT


graph git history by month

git_history.rb, accepts two optional arguments, the first sets the bar size, the second is the graph type, which can be horizontal or vertical (defaults to horizontal) an example:
$ ./git_history.rb 
2008-03 |########                                           5 commits
2008-04 |########################################          25 commits
2008-05 |                                                   0 commits
2008-06 |                                                   0 commits
2008-07 |####                                               3 commits
2008-08 |###                                                2 commits
2008-09 |############                                       8 commits
2008-10 |                                                   0 commits
2008-11 |######                                             4 commits
2008-12 |                                                   0 commits
2009-01 |#                                                  1 commits
2009-02 |######################                            14 commits
2009-03 |########                                           5 commits
2009-04 |############                                       8 commits
2009-05 |##############                                     9 commits
2009-06 |                                                   0 commits
another example, using arguments:
./git_history.rb 30 vertical
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                                          
                                             #                                                 #                        
                                             #                                                 #                        
                                             #                                                 #                        
                                             #                                                 #                        
                                             #                                                 #                        
                                             #                                                 #                        
                                             #                                                 #              #         
     #                                       #                        #                        #         #    #         
     #                                       #                        #                        #         #    #         
     #                                       #                        #                        #         #    #         
     #    #              #              #    #                        #                        #    #    #    #         
     #    #              #              #    #                        #                        #    #    #    #         
     #    #              #    #         #    #                        #         #              #    #    #    #         
     #    #              #    #    #    #    #              #         #         #              #    #    #    #         
     #    #              #    #    #    #    #              #    #    #         #              #    #    #    #         
#    #    #         #    #    #    #    #    #              #    #    #         #         #    #    #    #    #         
#    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    #    
07   08   09   10   11   12   01   02   03   04   05   06   07   08   09   10   11   12   01   02   03   04   05   06   
2007 2007 2007 2007 2007 2007 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2008 2009 2009 2009 2009 2009 2009  

Publicado por Maximiliano Guzman Thu, 04 Jun 2009 03:32:00 GMT


Railscasts downloader script

run it to download all railscasts, re-run it to update with newly released ones. Just run it in the folder where you want to keep them. yes, I could have used the word run a couple more times.
#!/usr/bin/ruby
require 'rss'

p 'Downloading rss index'

rss_string = open('http://feeds.feedburner.com/railscasts').read
rss = RSS::Parser.parse(rss_string, false)
videos_urls = rss.items.map { |it| it.enclosure.url }.reverse

videos_filenames = videos_urls.map {|url| url.split('/').last }
existing_filenames = Dir.glob('*.mov')
missing_filenames = videos_filenames - existing_filenames
p "Downloading #{missing_filenames.size} missing videos"

missing_videos_urls = videos_urls.select { |video_url| missing_filenames.any? { |filename| video_url.match filename } }

missing_videos_urls.each do |video_url|
  filename = video_url.split('/').last
  p filename
  p %x(wget #{video_url} -O #{filename}.tmp )
  p %x(mv #{filename}.tmp #{filename} )
end
p 'Finished synchronization'
it's on github

Publicado por Maximiliano Guzman Tue, 26 May 2009 16:23:00 GMT


autofile, un pequeño script para suites enredadas

Cuando te levantaste dijiste, este va a ser un gran día. Te hiciste un desayuno con todo y llegaste temprano al trabajo.

Mirás la lista de tareas para ver cual agarrás, y lleno de coraje te metés con la tarea difícil.

A pesar de que la suite de tests del proyecto está descuidada, vos querés hacer TDD/BDD. Corrés ./autotest solo para encontrarte un tsunami de fallos y errores.

Un clavo.

Así que, hay mucha mugre en la suite de tests, y no podés quitarla, muchos de esos tests son de otros. Decidís correr solo los tests de lo que estas implementando (si, sé que es feo), pero no querés correrlos manualmente

Y por eso, escribí autofile.rb.

./autofile.rb path/to/your/lonely/test

...y cada vez que escribís en el archivo del test, autofile lo corre de nuevo

#!/usr/bin/ruby
@mtime=nil
while true
  current_mtime = File.stat(ARGV.first).mtime
  if current_mtime != @mtime
   puts "found change, running test"
   puts `ruby #{ARGV.first}`
   @mtime = current_mtime
 end
 sleep 0.01
end
Ojo! es solo un parche (como los de nicotina), hasta pasar a algo mas sano; limpiar la suite y usar ZenTest.

Publicado por Maximiliano Guzman Sat, 23 May 2009 23:56:00 GMT


autofile, a little script for big hairy test suites

So, when you woke up today, you decided to make this a better day than yesterday; you started with a big healthty breakfast, and arrived to work early.

You look at your todo list to see what needs to be done next, and full of courage take that difficult task at the middle of the list.

Even though your project's test suite has been neglected, you know the way to go is TDD/BDD. You run ./autotest only to be greeted by a tsunami of failing tests and errors.

Bummer.

So, there's a lot of failing stuff on the test suite. You cannot remove it, as it's not yours. You decide to just run the tests for your new stuff (yeah, I know it's an ugly compromise), but don't want to run it manually.

Enter autofile.rb

./autofile.rb path/to/your/lonely/test

...and every time you write to the test file, it gets run again

#!/usr/bin/ruby
@mtime=nil
while true
  current_mtime = File.stat(ARGV.first).mtime
  if current_mtime != @mtime
   puts "found change, running test"
   puts `ruby #{ARGV.first}`
   @mtime = current_mtime
 end
 sleep 0.01
end

Publicado por Maximiliano Guzman Sat, 23 May 2009 00:45:00 GMT