Novedades: actualmente estoy impulsando el proyecto Argentina en Python, desde aquí (ver mapa)

El motor home

DSC07689.thumbnail.JPG

Los parasoles que me hice con los carteles que quitamos de Av. Ramirez en Paraná con el grupo "eU! - Experiencia Urbana" son increíblemente geniales.

DSC07690.thumbnail.JPG

La cabeza va del lado del parabrisa y en la luneta pongo la notebook como para mirar algún que otro video mientras estoy acostado. Ya me ví el curso completo de mecánica del automotor del canal Encuentro.

DSC07692.thumbnail.JPG

Adentro no queda mucho espacio para moverse, pero puedo estar sentado y haciendo algo en la notebook con las piernas estiradas, sentado común en el asiento del conductor (con poca movilidad) y acostado en la cama. La mayoría de los bártulos a la hora de dormir van a parar al asiento trasero.

DSC07703.thumbnail.JPG

El mar de San Clemente del Tuyú. Hermosa playa.


Historias de Buenos Aires

El Martes 4 de Marzo pegué la vuelta para Buenos Aires Capital, inesperada y lamentablemente, porque por algún motivo que todavía desconozco, la notebook que me había comprado la semana pasada (un detalle importante que omití en mi post anterior -pero que es el motivo por el cuál vine primero a Capital) dejó de encender.

Estando en San Clemente, a la noche, luego de cocinar y haber contemplado los pájaros durante todo el día... cuando ya creía que lo tenía todo y pensando en mirarme algún video acostado en el auto antes de dormir (¡sí, pongo la notebook en la luneta y tengo alto cine!)... ¡NADA! La notebook no enciende. Estaba como tildada con una luz naranja prendida constantemente. Revisé, miré, conecté, desconecté, me puse muy nervioso, probé y demás y... nada. Así que, la dejé nomás y decidí, en vez de seguir viaje hacia el sur de Buenos Aires yendo por la costa como tenía pensado, encarar la vuelta para llevarla a la garantía.

Entonces, el Martes 4 de Marzo a la mañana, siendo una fecha tan importante (y yo sin saberlo) me volví para Capital. ¡ODIÉ haber tomado esa decisión! Me podía haber vuelto tranquilamente el Miércoles, sin problemas. Pero no. Me volví el Martes y me vine casi toda la autopista / ruta a una máxima promedio de 40 Km/h. "Parece" que era el última día del fin de semana largo y todo el mundo volvía de la costa atlántica... Incluyéndome a mi.

Así que, me lo tomé con soda e iba parando en todas las estaciones que veía que era potable parar y no era un mundo de gente. Esperaba un rato, comía algo, hacía algo en internet o miraba algunos videos en el auto y después, cuando veía que en la autopista los autos se estaban moviendo. Seguía viaje.

Llegué a Capital y me fui derecho para la casa de Joac y cuando llegué no estaba (no le había avisado que yo iba -le mandé unos SMS pero nunca llegaron). Así que, lo espere en la puerta mientras él volvía de sus mini-vacaciones y cuando llegó le comenté cómo venía la mano. Sin ningún pero, me dijo que me quede en la casa de él y que haga el maneje de llevar la máquina a por la garantía. Igualmente, buscamos algo en internet y no encontramos nada relevante ni ninguna prueba que funcione.

Al día siguiente, a primera hora, me mandé para la galería jardín al local New Technology, dónde la había comprado y me atendieron bastante bien. El tipo la desarmó, le desconectó la batería y la volvió a conectar (algo que quería hacer yo en San Clemente, pero como estaba en garantía, no daba para hacerlo). Presionó el botón de power y voilá; la máquina arrancó sin problemas. Booteó Linux y me dice: "Ah, vos le cambiaste el SO. Eso debe ser". Me dio bastante bronca, por un lado porque cuando la compré, a ese mismo tipo le dije que le iba a poner Linux y me dijo que estaba todo bien y por el otro porque no tiene nada que ver una cosa de Software con una cosa de Hardware. O sea, no le llegaba energía a la máquina. Ni siquiera le daba espacio a Linux para hacer algo mal.

Igualmente, el tipo le corrió los tests que trae integrada la máquina en el BIOS (o algo similar) y pasaron todos sin problemas. Así que, ni él sabía cuál era el problema. Cerró todo y me fui "contento" para lo de Joac. La usé lo más que pude durante ese tiempo en la casa de Joac y funcionó sin problemas.

Al final, me quedé más días de lo que pensaba en lo de Joac (por motivos que todadvía desconozco), a tal punto que ya me estaba sintiendo incómodo (aunque él me haya dicho: "quedate todo lo que quieras") y decidí emprender viaje nuevamente. En el medio, había estaba chateando con Gonzalo como para hacer una juntada y charlar un rato en su casa (Quilmes, Espeleta -dónde, Quilmes es un municipio y Espeleta una localidad- o al menos, eso parece).

Si bien no sabía qué iba a hacer después de la reunión con Gonzalo, me llevé todas las cosas de la casa de Joac (aunque pensándolo bien, me olvidé la caja de mi notebook nueva) "por las dudas" pensando en quedarme en un camping de Quilmes. Finalmente, luego de la charla con Gonzalo y la creación de un plan de ruta, me ofreció quedarme esa noche en su casa, levantarnos temprano, laburar un rato y luego que vaya para Tigre a pasar unos días tranquilos ahí.

Estuvo re bueno juntarse con Gonzalo. Charlamos bastante con la mujer y las hijas y también nosotros sobre OLPC y los futuros planes personales.

Al otro día, después de desayunar y trabajar un rato, arranqué para Tigre. Me fumé el tránsito de esta provincia que es insoportable y llegué pasada la hora de comer. Hora en la que me clavé ALTO sandwich de lomo completo. Era como para 2 personas como yo. No sobró nada.

Dí vueltas, y vueltas, más vueltas y muchísimas más vueltas buscando un camping dónde parar. Después subí un nivel y busqué un hostel y me llegó la noche y no conseguí nada. Busqué en Tigre y en San Fernando. Los hostels que encontré, o los habían cerrado o los estaban cerrando y los campings, o eran de algún sindicato culo roto que no te dejaban entrar o estaban en las islas.

Llegó la noche, me agarró molido y sin un lugar dónde parar. Algunos lugares los estuve buscando con el GPS y otros por internet que sacaba de una YPF Full en dónde andaba bien. Así que, estando en esa misma YPF, le pregunté al playero si podía pasar la noche ahí y me dijo: "Ehhh... Sí, estacionalo ahí nomás y dale". Así que ese Viernes dormí ahí. Super cómodo la verdad, con baño, wifi y una cafetería 24hs. Me fui adentro del auto como a las 0hs, lo blindé con los parasoles que cortan tanto la luz como la visión y me puse a ver unos videos hasta dormirme. Lo único malo del lugar, es que era bastante transitado / de paso y había varios boluditos con la música al caño y demás.

El sábado fue similar: me la pasé recorriendo la ciudad en búsca de hostels y/o lugar con un precio razonable para pasar la noche y no encontré. Dije: "bueh, ya fue. Si sigo buscando todo el día no voy a aprovechar lo hermoso que es este lugar...", así que suspendí y decidí volver a pasar la noche en la estación para así aprovechar el día e irme a pasear luego de trabajar.

DSC07716.JPG

Ese mismo sábado, estuve bastante tiempo trabajando y también divirtiéndome con el proyecto Preciosa haciendo unos scrappers para descargar los productos (con sus precios e imagenes) de Jumbo y Unico. Vale la pena pegarle una mirada a ese proyecto. No he podido volverlo a agarrar, pero cuando tenga un rato le meto un poco más de mano.

El domingo me levanté temprano. Digamos, algo así como a las 4:30hs porque me tocaron la ventana. Era la policía de San Fernando :( . Me pidió identificación y básicamente me preguntó: "¿Qué onda?". Le comenté que estaba de paso y que ni bien me levantaba me iba. Buena onda el loco, me dejó seguir durmiendo bien tranquilo nomás. Así que, le pegué hasta como las 8:30hs que me levanté como para arrancar para lo de Facundo al asado geek de este año. Cerca de las 9:30-10hs ya estaba en lo de Facu, y enseguida después de terminar el primer/segundo tema de conversación le maguié la ducha porque hacía un par de días que no me había podido bañar (eso es otra cosa que busqué: estaciones de servicio con ducha -pero no conseguí). Una vez limpito, me preocupé por disfrutar de la juntada. Como siempre, me encontré con mucha gente que hace tiempo que no veía y la pasé muy bien.

Esa misma noche (mala decisión), encaré para González Catán, donde vive Jonás (con quien tuvimos algunas aventuras inolvidables en EEUU yendo a San Francisco en camioneta). Fue una mala decisión, porque no es un barrio muy agradable para transitarlo de noche y tuve un poco de miedo varias veces. Yo me ajustaba a lo que hacían los otros y le metía semáforos en rojo como loco en plena ruta...

El re-encuentro estuvo genial. Nos quedamos hablando hasta que no podíamos más estar sentados recordando algunas cosas vividas y sobre los futuros planes. Estuvo re bueno, reviví muchas cosas de las que me había olvidado varios detalles.

El lunes trabajé y hablé bastante con Jonás también. Coordinamos algunas cosas y decidimos ir al día siguiente, luego de una reunión de mi trabajo, a pescar a San Miguel del Monte, a unos 70Km de acá. En eso de las 16hs, el Martes arrancamos para allá con carpa, una par de cañas, un poco de carne como para hacer un asado, frazadas y unas cuantas boludeces más (parecía que nos íbamos por 5 años) y arrancamos.

El lugar... Maravilloso. Toda la ciudad está construida al rededor de una laguna bastante grande. La que está envuelta entre campings y costaneras. Hermoso. Ni bien llegamos, buscamos el camping, armamos la carpa y nos fuimos al super a comprar esa tan deseada picadita al lado de la laguna :)

DSC07718.JPG

Más cerca de la noche tiramos las cañas un par de veces, pero enseguida nos quedábamos sin carnada. Había muchos peces chiquitos que no alcanzaban a comerse el anzuelo. Así que, medio fracasados y medio sin ganas nos rendimos y seguimos hablando al pedo hasta que cerca de las 23hs picó el hambre y arrancamos el fuego: ¡alto vacío nos comimos!. Al otro día recorrimos un poco la ciudad en el auto y vimos el show de peces de la laguna en la costanera; aprontamos las cosas y encaramos la vuelta. Siesta, trabajo y luego nuevamente a la casa de Facundo (cerca de Martínez) que se hacía un sprint sobre yaswfp.

Después de porrón, código, python, pizza y charla, nos fuimos a dormir (yo molido) y hoy me levanté listo para seguir trabajando...


Experimentando la búsqueda

Idas, vueltas, encontronasos, propuestas, ideas, sugerecias y comentarios. Después de escuchar a mucha gente, comentarlo con amigos, haberlo experimentado un poco desde adentro y tratando de vencer el miedo, el "qué dirán" y todas las "precauciones" que me dijeron que tenía que tener en cuenta... Acá estoy, viajando, trabajando, aprendiendo y concretando eso que tanto he hablado con mucha gente.

En la PyCon Argentina de 2013 en Rosario, di una Lightning Talk sobre un proyecto llamado "Argentina en Python" que consistía, básicamente, en un ciclo itinerante de charlas por todo el país. Si bien ya hacía unos meses que venía trabajando en eso, seguía con algunos puntos déviles como por ejemplo, uno clave, la organización de la charla en el lugar de destino previo a mi llegada. Concretamente, ese fue el motivo de la presentación del proyecto en la PyCon, que la gente se cope con ese rol y/o con cualquier otro, ¿porqué no?

Después de la charla me llevé al rededor de unos 10 a 12 contactos de personas que estaban interesadas en dar una mano y colaborar de diferentes formas. Con algunos, tuve charlas interesantes y recibí muy buenos comentarios sobre la organización y las necesidades que iba a tener durante mi viaje.

Después de unos meses, y sin poder seguir estirando mi "autonomía financiera" sin trabajar, el proyecto se fue complicando y perdiendo algo de fuerza, ya que tuve que dedicar mucho de mi tiempo a otras tareas y por otro lado, la gente que estaba interesada en el proyecto me estaba proponiendo fechas muy alejadas de mi partida para la organización/gestión de la charla en su ciudad.

Por este motivo, y unos cuantos (personales, también) que exceden el alcance del post, no pude empezar el viaje con la idea original "as is" y tuve que modificar algunas cuestiones. Uno de los cambios importantes, es que voy trabajar mientras esté viajando, por lo que me va a quitar muchísimo tiempo para organizar charlas. Además, también me gustaría conocer equipos de trabajo, entender cómo funcionan y empezar a buscar cuál es la metodología de trabajo que más se ajusta a mis principios e ideas; siendo que si bien hace mucho que trabajo con Python y en grupos, la mayor parte fue de forma remota. Otro punto importante, es ver la posibilidad de hacer mini-sprints como para empujar algunos de los proyectos de la comunidad de PyAr que andan dando vueltas por la zona.

Sin embargo, el viaje comenzó el pasado Viernes 21 de Febrero, con la primera parada en Buenos Aires, Capital; por motivos de organización y de necesidades materiales (comprar diversas cosas materiales) siendo alojado por la inigualable compañía de Joac. Con quien tuvimos unas charlas muy interesantes sobre Python, las metodologías de trabajo a las que estamos acostumbrados, cómo lo hacíamos antes y un sin fin de charlas constructivas sobre electrónica.

Entre otras cosas que compré, me hice con un soporte para el GPS para pegarlo en el vidrio, ya que no me trajo y tuve muchos problemas durante las rutas cuando se caía al piso y me hablaba desde allí. Además, adquirí un inversor de tensión para la batería del auto de 12v que invierte a 220v con una potencia máxima de 350 watts. Por lo tanto, puedo enchufar la notebook al auto y trabajar offline (o con un WiFi choreado) sin problemas. De hecho, es lo que estoy haciendo ahora mismo en el camping y funciona a la perfección.

Esta semana fue un poco complicada, como toda primera semana de cualquier cosa. Estoy empezando a conocer cómo son los espacios del auto y dónde debería ir cada cosa como para dormir cómodo dentro de él. La cama ocupa casi medio auto entero (incluyendo baúl) y es bastante tedioso tener que sacar y poner todo cada vez que se necesita dormir. Así que, estoy buscando cuáles son las cosas que menos se usan como para ponerlas en lugares menos accesibles y dejar a mano lo de todos los días. Por otro lado, los días que estuve en la casa de Joac tuve que ir varias veces al micro-centro y prácticamente esos días no pude hacer nada: debido al tiempo que me llevó y al stress que me generó.

Estando en la casa de Joac, noté que la cubierta trasera estaba baja otra vez (la había inflado antes de salir de Paraná). Así que busqué una gomería en el GPS y me fui a controlarla. Lamentablemente y no tanto, por otro lado, tenía un tornillo bastante grande clavado y tuve que hacerla emparchar. La parte de "no tanto" es que el gomero me dijo que tenía las pastillas de freno traseras a la miseria y que las haga cambiar lo antes posible así no arruinaba el disco. Al día siguiente estuve buscando mecánico, hasta que Alvar me recomendó el de él y me pasó su celular. Lo llamé a la mañana y me dio un turno para las 15hs. Genial! Fui, lo miró, me dijo que sí, efectivamente necesitaban un cambio y me fui a comprar el respuesto. Vuelvo y en menos de 1 hora ya me estaba yendo por tan solo $150. El tipo un genio, re buena onda, me explicó todo y me mostró cómo se hacía y encima me cobró re barato :)

Después de eso, organicé mis cosas y empecé mi despedida de la casa de Joac para ir a encontrarme con Marcos, el maestro, con quien después de comer nos quedamos hablando hasta las 2 de la mañana. Al día siguiente trabajé un rato y después de eso me fui a comprar un frasada porque me quedé corto con las cosas de abrigo que traje. Y a la noche... tuve mi primera clase de Pa Kua y luego de ésta mi primera clase de Armas; ambas a cargo de Marcos: dos horas intensas combinando meditación, elongación, destreza y respiración. La flashié bastante y encontré mucha similitud con el circo en cuanto a la forma de mezclar las diferentes ramas de la investigación.

Al día siguiente, Viernes 28, a la mañana bien temprano nos levantamos y cuando terminamos de desayunar encaré para San Clemente del Tuyú porque había hablado con Mario Mey (un cirquero y software librero) que vengo siguiendo desde hace un tiempo porque usa Blender y programa en Python mucha de las cosas que usa en escena para su show. Entonces, como no lo conocía ni tampoco había visto su show y sabiendo que estaba a unos pocos kilómetros desde dónde yo estaba, me mandé. A la tarde me instalé en un camping de la zona (a unas 10 o 20 cuadras de la playa -hermosa, de hecho) y a la noche efectivamente vi su show "Soy un ésssito!" y me pareció muy bueno. No es nada fácil tener una marioneta 3D hecha por uno mismo, que sea interactiva y que tu show en vivo dependa de todo lo que estuviste laburando con la computadora. Tiene que ser muy robusto tu software, ¿no?. Sin palabras. Encima, el loco la tiene re clara con el beatbox, el tetraedro y algunas cositas más. Un crack. Ah! Encima me llevé un DVD del otro show que tiene y 100 fichas para los fichines de San Clemente. Groso!

En la misma plaza dónde estuvo Mario Mey, y seguido de él, vino un recital de folcklore que no me gustó simplemente porque no me gusta el folcklore. Así que, aproveché y me tiré a dormir una horita en el auto porque estaba reventado del viaje hasta que largue el otro espectáculo circense a cargo de "Los Transhumantes" que parecía prometedor. El espectáculo era más tradicional, no la locura tecnológica de Mario ( :) ), palo chino, algo de clown, Jerry que era el bufón del grupo y se llevaba todas las gastadas, trapecio de vuelo a cargo de Tatiana (muy zarpado) y como número final mientras se pasaba la gorra unos malabares con pelotas que estaba bueno pero con el quilombo de la gorra no se pudo apreciar mucho.

Parece que acá está de moda darle a la gente un cuaderno y una lapicera para que escriban lo que quieran sobre el espectáculo. Así que, como en general no me gusta quedarme callado, pedí el cuaderno y les escribí que me gustó el vestuario y los detalles. Los colores estaban bien combinados y todos hacían un solo equipo; que me parecía que faltaba vestir un poco más el trailer porque no quedaba integrado con el resto de la escenografía y que el discurso de la gorra era muy agresivo. Bardeando a los otros espectáculos circenses y hablando de las cosas que los otros hacen y ellos no porque no lo consideran (pero, ya lo estaban diciendo y haciendo al decir eso).

Resumiendo, "Soy un ésssito!" de Mario Mey y "El show nuevo" (no sé cuál era el nombre del espectáculo, pero también se llenaron la boca diciendo que era nuevo y diferente al anterior) de Los Transhumantes estuvieron muy buenos. Son propuestas muy diferentes y valía la pena quedarse a ver ambos y dejar una colaboración a gusto.

¡Cambio y fuera! Nos estamos leyendo luego con más novedades de acuerdo a como vaya rodando la cosa.


Intensidad de un LED con PIC18F4550 y PWM por Software

Estuve toda la semana leyendo las librerías que usa ICARO para manejar los servos y trantando de entender cómo funcionan. La verdad que no es nada sencillo ponerse a leer código C después de más de 10 años de no tocar una línea de éste. Además, por otro lado, nunca había trabajado a tan bajo nivel y con el manual de un microcontrolador en la mano. ¡Toda una aventura!

Por suerte encontré en Internet miles de manuales y post relacionado con lo que yo quería hacer: utilizar señales PWM. Si bien el PIC que estoy usando (18F4550) ya trae incorpado por hardware 2 pines que se pueden usar para crear señales PWM fácilmente, yo quería hacerlo por software ya que de esa manera me permitiría controlar unas cuántas más. Si no me equivoco, por lo menos 18. Entonces, como yo quería manejar al menos 5 señales PWM, decidí encarar el camino complicado y hacerlo por software.

Me encontré con que no era nada fácil. Pero no es que no era fácil de programar, sino que no era fácil de entender. Hay muchos conceptos que no manejo y muchos otros que los he visto pero que no los tengo muy fresquitos que digamos, así que le dediqué su tiempo a leer y entender los post que estaba leyendo. No es lo mismo pegarle una leída para ver cómo viene la mano, que ponerse uno a hacer los cálculos para que los números coincidan.

Hasta el momento llegué a generar 1 sola señal PWM que controla todas las salidas del PUERTO B (8 bits) con el mismo ciclo de trabajo (porcentaje del período que la señal está en ALTO) utilizando el TIMER 0 y la interrupción que este genera una vez que desborda su contador. Sin embargo, la idea es tunear un poquito más el código cosa de mantener un valor diferente para cada una de los pines del PUERTO B. Quizás mañana... Ya veremos...

Ese ciclo de trabajo se puede cambiar modificando ON_PERCENT en la escala de 0 a 100, con 0 totalmente apagado y 100 totalmente prendido.

Luego de cargar el código en el PIC, conectamos cualquier pin del PUERTO B a una resistencia de 250 ohms, un LED y finalmente la tierra de vuelta a la placa en el pin del medio de ("K2" en la placa) los que están (hay 3) adelante del transistor grande.

El código fuente que se debería poner en user.c es éste:

simple_pwm_icaro.c

/*

Autor: Manuel Kaufmann
Email: humitos@gmail.com
License: GPL

Ejemplo sencillo que muestra el uso de senales PWM en el PIC18f4550
usando la placa ICARO (http://roboticaro.org/) en el PUERTO B.

Todas las salidas del PUERTO B tienen la misma frecuencia y el mismo
ciclo de trabajo. El ciclo de trabajo puede modificarse cambiando el
valor de ON_PERCENT, siendo este el porcentaje de tiempo en ALTO de la
salida del PUERTO B.

 */

#define USERINT 1  // define una interrupcion de usuario
#define TIMER 255  // valor del TIMER 0

#define ON_PERCENT 7 // ciclo de trabajo
                     // porcentaje del tiempo en ON

int count = 0;  // cantidad de veces que se entro en la userinterrupt()
                // este valor se compara contra ON_PERCENT para saber
                // si hay que poner la salida en 1 o 0


// funcion de configuracion
void setup()
{
  TRISB = 0;  // define a todos los pines del PUERTO B como salidas

  // configuracion de interrupciones
  INTCONbits.GIE = 1;  // habilita las interrupciones generales
  INTCONbits.TMR0IE = 1;  // habilita la interrupcion de TIMER 0

  // configuracion del TIMER 0
  T0CONbits.T08BIT = 1;  // usa 8 bits para el timer (2^8 = 256 posibilidades)
  T0CONbits.T0CS = 0;  // selecciona el modo TIMER
  T0CONbits.PSA = 1;  // (0) usa (1) no usa, un PRE SCALER previo

  TMR0L = TIMER;  // setea el valor del TIMER 0
  T0CONbits.TMR0ON = 1;  // arranca el TIMER 0
}


// bucle infinito
void loop()
{
  // no se necesita hacer nada en la funcion principal
  // todo se maneja desde las interrupciones
}


// funcion de interrupcion de usuario
void userinterrupt(void)
{
  if(INTCONbits.TMR0IF)  // chequea que la interrupcion sea del TIMER 0
                         // que es el que nos interesa
    {
      if(count < ON_PERCENT)
        {
          PORTB = 0xFF;  // pone todas las salidas del PUERTO B en 1
        }
      else
        {
          PORTB = 0x00;  // pone todas las salidas del PUERTO B en 0
        }

      count = ++count % 100; // comprueba si count es igual a 100, de ser asi
                             // vuelve su valor a 0 para volver a empezar

      INTCONbits.TMR0IF = 0;  // vuelve a 0 el FLAG de la interrupcion
                              // del TIMER 0
      TMR0L = TIMER;  // setea el valor del TIMER 0
    }
}