msgbartop
“¿Estás seguro de que ESO es aleatorio?” “Ése es el problema con la aleatoriedad: nunca puedes estar seguro”
msgbarbottom

31 dic 15 Etapa ciclista: Los Morales – Reventón (30/12/2015)

El pasado miércoles 30 de diciembre hice la última salida ciclista del año, y la primera en España desde que me mudé a Irlanda. Y como no podía ser menos, tenía que ser una etapa especial, en mi Córdoba natal. Y aunque intenté quedar con todos mis compañeros Bartocalvos, finalmente -cuestión de las fechas- sólo dos valientes salimos a rodar: Javi Aljama y yo. La etapa estuvo precedida de una agradable comida con nuestras señoras en Arroyo del Moro. Si bien la idea era haber hecho una etapa mañanera -el día se prestaba a ello- finalmente tuvimos que salir a rodar por la tarde.

Empezamos la etapa a las 16:15h, un horario un poco tardío para una etapa en pleno invierno, por lo que tuvimos que optar por hacer una etapa corta. Además, tampoco estábamos como para hacer una etaba brutal, habida cuenta de que Javi apenas había salido a rodar desde el verano, y yo sólo había cogido la bici para ir al trabajo en Irlanda, con recorridos de apenas 6’5 kms. completamente planos, y con una plegable de 20”. Así que no esperaba estar en un gran estado de forma.

Mi Ghost ASX 5100 de 26''

Mi Ghost ASX 5100 de 26”

Volver a coger una doble de 26” después de cuatro meses de rodar tan sólo con la plegable se me hizo enormemente extraño. Notaba la bici enorme, con un manillar inmenso. Además, notaba inercias enormes con respecto a la ágil aunque nerviosa plegable, y una lentitud de reacciones exagerada. Algo de lo que Pablo, en su momento, ya me había advertido. Pero no era cuestión de quejarse, sino de rodar.

Subimos la Cuesta Negra y Sansueña hasta la Huerta de Hierro, para tomar inmediatamente después la subida hacia Los Morales por los eucaliptos. Allí empecé a notar una nueva anomalía provocada por la plegable: al tener que rodar con ruedas de 20”, pese a llevar un plato de 42 dientes y una corona entre 14 y 28 dientes, tengo que dar muchas más pedaladas para alcanzar la misma velocidad que con una bici con ruedas de 26”. Es decir, estoy acostumbrado a hacer molinillo. Eso se traducía en la doble en que rodar con el plato mediano cuando el camino se empinaba se me hacía enormemente pesado, por lo que pronto tenía que empezar a tirar de plato pequeño… si bien haciendo molinillo, y pudiendo aguantarlo mucho más tiempo del que solía. Así que, pese a todo, podía mantener buenos ritmos incluso cuando la cosa se podía peliaguda. Mucho mejor de lo que me había esperado.

Pasamos Los Morales y empezamos la subida. Dos noches antes había caído una lluvia bastante intensa en Córdoba, lo que había provocado que el campo estuviera perfecto para rodar: sin polvo ni tierra suelta, y con la superficie perfectamente compactada, y sin nada de barro. Un firme a pedir de boca. Observamos la existencia de diversos carteles que aconsejaban no salirse del camino público, ante el riesgo de recibir un disparo en alguna montería. Seguimos subiendo. La cosa empezaba a ponerse seria, y la falta de una actividad acorde en los últimos meses se dejaba notar, tanto en Javi como en mí mismo. Pero pese a todo, ahí estábamos. Dándolo todo.

La Sierra estaba de dulce, y si bien era consciente de que echaba de menos rodar por mi Córdoba después de tantos meses de asfalto, no me podía imaginar cuánto lo echaba de menos. Estaba decicido a aprovechar cada segundo. Apenas eché a pie a tierra al final del tramo pedregoso, donde hay un tubo. El resto de la subida la hice del tirón, mucho mejor que en la última subida del verano (hecho que posteriormente pude comprobar en Strava, al ver que en ese tramo hice mi segunda mejor marca histórica). Tomamos aire antes de la fuente de los Piconeros, y continuamos el ascenso hasta el Lagar de la Cruz, donde hicimos una breve parada para tomar fuerzas y avituallarnos. Eran las 17:30h. Unos 20 minutos peor que en nuestras mejores marcas, pero 10 mejor de lo que había calculado.

Retomamos la marcha, camino de las Ermitas. A esa hora se dejaba sentir la caída de la tarde, y entre la vegetación, el cielo nublado y la hora tardía casi se echaban de menos las luces. Aun así, seguimos rodando, bajando a las Ermitas por la vereda (alias Los Chorizos), que hicimos a un ritmo bastante alegre. Otra diferencia que notaba: la enorme estabilidad de la Ghost, especialmente desde que le puse la horquilla Rock Shox Sektor y la suspensión Monarch. Y una vez llegamos, no pude menos que deleitarme con las vistas:

Javi y yo con Córdoba y las Ermitas al fondo

Javi y yo con Córdoba y las Ermitas al fondo

Y es que, de nuevo, no podía imaginar cuánto echaba de menos este tipo de paisaje. Y el poder disfrutarlo tras haber sudado la gota gorda para subir hasta ahí. Pero era hora de volver, ya que la noche empezaba a echarse encima. Para bajar optamos por tomar un nuevo sendero, que conduce desde lo alto del Reventón hasta el Mirador. Abierto hace poco, brutal y muy técnico, pero enormemente divertido. Eso sí, de sillín abajo y con algún que otro salto demencial:

Saltaco de locos

Saltaco de locos

El resto de la etapa, desde el mirador, no tuvo grandes novedades. Hicimos una bajada relativamente rápida hasta el comienzo del Reventón, y bajamos hasta el Tablero por la carretera de las Ermitas. Allí Javi y yo nos separamos, dando por concluida la etapa. Una pequeña gran etapa, de la que disfruté cada segundo, cada centímetro y cada gota de sudor. ¡Que se repita!

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , , , ,

25 dic 15 Melindres

La primera vez que visité Pontevedra, en 1997, no sólo conocí una de las ciudades más maravillosas que existen en España, sino que tuve la ocasión de degustar un dulce que se convirtió en uno de mis favoritos. Una especie de buñuelo, recubierto de una costra de azúcar anisado. Ni más ni menos. Simple como el mecanismo de un sonajero, pero esa misma simplicidad es lo que lo hace excepcional. Se puede degustar solo, con café o cacao, y se conserva fresco durante semanas sin mayor problema. Se trata de los melindres.

Para mí, hasta entonces, melindre no era sino un sinónimo de quejica, pero a partir de ese momento pasó a estar en un lugar de honor entre mis dulces favoritos. Y mis favoritos, eran, sin lugar a dudas, los de la Pastelería Llomar, junto a las ruinas de Santo Domingo.

Pastelería Llomar en Pontevedra

Pastelería Llomar en Pontevedra

Desde entonces, en los últimos 18 años, cada vez que me encontraba en Pontevedra era obligado parar en Llomar para comprar un cuarto de kilo de Melindres, y las más de las veces, otro tanto para bajar a Andalucía, bien para agasajar a la familia, o para conservar, en forma de dulce, el recuerdo de la visita a Pontevedra. Una pequeña tradición que me acercaba más a los seres queridos a quienes no volveríamos a ver hasta el siguiente viaje.

La última vez que estuvimos en Pontevedra, en el verano de 2015, no pudimos menos que cumplir con la tradición. Esta vez, además, nos paramos a darle un poco de conversación al dueño del negocio. Nos comentaba que cada año se sentía mayor y que las cosas estaban difíciles. Y nosotros le hablamos de nuestras visitas a Pontevedra y la obligada visita a su pastelería. Y nos despedimos de él, como si fuera una ocasión mas. No me podía imaginar que sería la última.

Estas Navidades hemos vuelto a Pontevedra, esta vez desde Dublín. Ayer me acerqué a cumplir con esta pequeña tradición, tan sólo para encontrar la pastelería cerrada. El escaparate desierto, y el rótulo desaparecido. La pastelería Llomar ya solo existía en el recuerdo. Y con ella se habían ido mis apreciados melindres.

Estas cosas suceden. La gente se jubila, los comercios cierran, y en el mejor de los casos otros los sustituyen. Pero cada vez que esto sucede, en especial en el caso de estos comercios veteranos, se pierde un poquito de nuestra historia. Tanto historia con minúsculas como con mayúsculas. Forma parte de la vida. Pero en mi caso particular, mis visitas a Pontevedra, a partir de ahora, serán un poco menos dulces.

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , ,

23 dic 15 Control remoto de sistemas con WhatApp. Yowsup 2

Nuevos avances. La última vez que utilicé WhatsApp como sistema de control remoto (Riego de jardín con WhatsApp y radiofrecuencia) hice uso de la versión 1 de Yowsup, librería de comunicación con WhatsApp escrita en python. Pero algún tiempo después esta primera versión de Yowsup dejó de ser funcional, y aunque tiempo después fue reescrita en una segunda versión, todo el código que había desarrollado para ello no era compatible.

Después de algunos trasteos, y de comprender cómo funciona esta nueva librería, he conseguido volver a hacer operativo el sistema de comunicación. E incluso el código ha quedado bastante más limpio. Recopilemos: se envía desde un terminal móvil un mensaje de control. Este mensaje es recibido gracias a una aplicación que hace uso de Yowsup, instalada en una Raspberry Pi. El programa interpreta el mensaje, y toma la acción oportuna. Hasta este momento, encender y apagar un relé durante un número de segundos indicado en el mensaje; relé que no se encuentra conectado directamente a la RPi, sino controlado por un chip Attiny85. La RPi, haciendo uso de un emisor de RF de 433 MHz, da las órdenes de encendido y apagado al Attiny85. El Attiny, que se encuentra a la espera de mensajes en un modo de bajo consumo, recibe la señal de interrupción hardware provocada por el receptor de 433 MHz. Sale del modo de bajo consumo, y activa el relé. Posteriormente, bajo otra orden de apagado por parte de la RPi, desactiva el relé y vuelve al modo de bajo consumo.

Teniendo en cuenta que aquí en Irlanda un sistema de riego automático es algo que carece de utilidad (el propio clima es un sistema de riego automático :mrgreen: ), ¿qué se puede querer controlar de manera remota? He aquí la respuesta:

En cuanto a la preocupación por el consumo, éste ha mejorado de manera considerable. El Attiny se encuentra alimentado por una batería de móvil de 2100 mAh, conectada a un panel solar que recarga la batería. Hasta el momento, lleva 4 días funcionando de manera ininterrumpida, y la última medición de la batería indica que la carga es de 3.85v. Un enorme avance con respecto a la anterior versión del reloj de riego de jardín.

VN:F [1.9.20_1166]
Rating: 10.0/10 (2 votes cast)

Etiquetas: , , , ,

12 dic 15 Attiny85: módulo RF a 433 MHz, modo de bajo consumo, y cómo despertarlo con interrupciones

Hace ya bastante tiempo escribí algo acerca de un sistema de riego controlado por WhatsApp que estuve desarrollando. Se basaba en el uso de una Raspberry Pi que actuaba como cerebro del sistema de riego y de comunicaciones, permitiendo el control de todo el sistema mediante mensajería por WhatsApp. La Raspberry, a su vez, se comunicaba con los los relojes de riego mediante módulos de radiofrecuencia a 433 MHz, un sistema de comunicación barato y razonablemente efectivo. En el otro lado, como se comentó en su momento, la válvula de riego se controlaba con un chip Attiny85, programado mediante Arduino.

Como se vio en su momento, el sistema funcionaba razonablemente bien. Sin embargo, varios problemas me llevaron a un callejón sin salida. El principal de ellos, y del que hablaremos hoy, era el consumo del receptor Attiny85. Sobre el papel es un sistema de muy bajo consumo, óptimo para este tipo de funciones. Sin embargo, el sistema de control de la válvula de riego no dejaba demasiado espacio para una batería, así que la alimentación disponible era, como poco, reducida. Pronto se demostró el que el Attiny con el sistema de radiofrecuenca devoraba la batería. Ésta apenas duraba unas 48-72 horas. Y esto, en un sistema que se supone que ha de ser autónomo y con un bajo mantenimiento, era sencillamente inaceptable, sobre todo si lo comparamos con relojes de riego de jardón convencionales, que con un par de pilas AA o una pila cuadrada de 9v pueden funcionar de manera ininterrupida durante meses.

Probé varias soluciones, desde el uso inicial de una batería recargable de 9v hasta el uso de un panel solar con una batería de móvil incorporada. Éste último caso consiguió producir mejoras, llegando el sistema a funcionar durante una semana de manera ininterrumpida. Pero en cualquier caso, no era una gran mejora. Tocaba afrontar el problema de base: un exceso de consumo.

Batería cuadrada de 9v y panel solar con regulador

Batería cuadrada de 9v y panel solar con regulador

En efecto, el problema estaba provocado por un exceso de consumo. Tal y como estaba diseñado, el sistema estaba permanentemente a la escucha de señales por RF, en un bucle sin fin, dado que la señal de encender o apagar la válvula de riego podía darse en cualquier momento. Esta aproximación era, como poco, inadecuada desde el punto de vista del consumo.

Para mejorar esto, probé varias alternativas: desde emitir sólo en determinadas ventanas de tiempo, hasta desconectar la alimentación al módulo de radiofrencuencia y activarlo sólo durante varios segundos cada minuto. Opciones bastante malas, la verdad, ya que se basaban en la precisión de un reloj interno que, como es conocido, no es un prodigio de la precisión.

Otra posibilidad hubiera podido ser un método en el que el Attiny consultara a la Raspberry si había algún comando por ejecutar. Pero por desgracia, los módulos RF de 433 MHz son unidireccionales, por lo que hubiera sido preciso incorporar un emisor al Attiny y un receptor a la Raspberry, complicando de manera innecesaria todo el sistema. Finalmente, la solución vino de mano de dos elementos presentes en el Attiny. El modo sleep y el uso de interrupciones.

El Attiny85 dispone de varios modos de bajo consumo (sleep mode) que sirven para reducir el consumo del chip cuando está a la espera de algún evento. En el caso del Attiny85, puede reducir el consumo hasta en un 90%. Pero no se trataba sólo de dormir al chip, sino de ser capaz de despertarlo cuando se recibiera una recepción de datos en el módulo de RF. Y para ello, nos encontramos con las interrupciones.

Las interrupciones son eventos que provocan un cambio en el estado de reposo o ejecución de un programa -en este caso, un programa cargado en el Attiny85-. Hay interrupciones tanto hardware como software, siendo las hardware las provocadas por un evento externo al programa en sí. Dentro de las interrupciones hardware, en el caso de Arduino, podemos distinguir las interrupciones Externas, y las provocadas por un Cambio en el Pin. El nombre es un poco confuso, pues ambas son externas al chip en sí, pero mientras las Externas están limitadas a un número concreto de patillas en el chip, las de Cambio en Pin pueden ocurrir en cualquiera de las patillas. En el caso concreto del Attiny85, las Externas sólo se producen en el Pin2 (INT0, patilla 7), mientras que las de Cambio en Chip se pueden producir en cualquier otra patilla.

De hecho, es factible despertar al Attiny85 del modo de bajo consumo mediante el uso de interrupciones. En el caso concreto del artículo enlazado, se usa el Pin3 (patilla 7) -luego se usa el modo de Cambio de Pin- para despertar al chip del modo de bajo consumo, como he podido comprobar personalmente (el ejemplo se basa en el uso de un botón conectado a 5v). Sin embargo, a la hora de probarlo con el módulo de RF a 433 MHz el sistema no funcionaba. No era capaz de realizar cambios en el sistema.

A modo de recordatorio, el sistema de control de la válvula consiste básicamente en un relé que activa o desactiva la válvula en función del tiempo que se desea mantener activo el riego. Este relé está controlado por una de las patillas del Attiny, protegida mediante un optoacoplador.

Tras varias pruebas, pude averiguar que el problema estaba causado por una particularidad en el receptor del módulo RF. Sólo he sido capaz de hacerlo comunicar con el chip Attiny a través del del pin de Interrupción Externa (Pin2, INT0), por lo que el ejemplo referenciado anteriormente no resultaba válido. En mi caso, ha sido necesario hacer uso de la patilla INT0:

#include
#include
#include

RCSwitch mySwitch = RCSwitch();
const int rele = 4;
const int dataPin = 0; //INT0, PCINT2
void setup() {
pinMode(dataPin, INPUT);
digitalWrite(dataPin, HIGH);
pinMode(rele, INPUT);
mySwitch.enableReceive(dataPin);

// Flash quick sequence so we know setup has started
for (int k = 0; k < 10; k = k + 1) {
if (k % 2 == 0) {
pinMode(rele, OUTPUT);
}
else {
pinMode(rele, INPUT);
}
delay(250);
} // for
}

void sleep() {

GIMSK |= _BV(PCIE); // Enable Pin Change Interrupts
PCMSK |= _BV(PCINT2); // Use PB3 as interrupt pin
ADCSRA &= ~_BV(ADEN); // ADC off
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // replaces above statement

sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
sei(); // Enable interrupts
sleep_cpu(); // sleep

cli(); // Disable interrupts
PCMSK &= ~_BV(PCINT2); // Turn off PB2 as interrupt pin
sleep_disable(); // Clear SE bit
ADCSRA |= _BV(ADEN); // ADC on

sei(); // Enable interrupts
} // sleep

ISR(PCINT0_vect) {
// This is called when the interrupt occurs, but I don't need to do anything in it
}

void loop() {

if (mySwitch.available()) {

sleep();
int value = mySwitch.getReceivedValue();

if (value == 0) {
// Serial.print("Unknown encoding");
} else {

pinMode(rele,OUTPUT);
delay(10000);
pinMode(rele,INPUT);
}
mySwitch.resetAvailable();
}
}

(Explicación rápida del ejemplo: Se declaran INT0 como receptor de RF, y el Pin4 como control del relé. Se realiza un ciclo de encendido y apagado del relé al inicio para mostrar que el programa ha iniciado, se declara la interrupción del modo de bajo consumo con INT0, y se pasa al bucle principal. Se espera a una interrupción, se comprueba que la señal RF recibida es correcta, y se enciende el relé durante 10 segundos)

Resultado: ¡éxito! No sólo el sistema funciona, sino que he podido comprobar una gran mejora en el consumo del sistema. Durante la fase activa del programa, en la que el relé está activo y se ha recibido la señal de radiofrecuencia, todo el sistema consume unos 9 mA. Cuando está en modo de bajo consumo, a la espera de recibir la señal, baja a niveles inferiores a 1 mA.

VN:F [1.9.20_1166]
Rating: 9.0/10 (2 votes cast)

Etiquetas: , , , ,

08 dic 15 Uso de CirrOS como servidor ligero de prueba independiente

Decíamos ayer que uno de los elementos del entorno de prueba de la solución con la que estoy trabajando en Ansible era un servidor CirrOS. Pero… ¿qué es un servidor CirrOS?

CirrOS es un servidor ligero, muy ligero, especialmente desarrollado para servir como demostrador de la capacidad de despliegue de máquinas en entornos cloud, como Openstack (de ahí el juego de palabras, claro). Es un servidor cuya imagen ocupa tan sólo 12 megas, se puede desplegar con 32 megas de RAM y una sola CPU. No se le pueden instalar -al menos, no fácilmente- paquetes, y las funcionalidades que ofrece son sumamente limitadas.

Por tanto, ¿qué razón habría para querer desplegar un sevidor así en un entorno? No muchas, en realidad, salvo que tu entorno de demo sea especialmente reducido, como es mi caso. :mgreen: En realidad, también tiene algún problema adicional: aunque la imagen a desplegar es una imagen QCOW2 convencional, que en Openstack despliega de manera sencilla en KVM, fuera de un entorno Openstack, aún usando KVM, da un poco de guerra para desplegarlo.Por ejemplo, en Gnome, aunque puedes crear la máquina desde el “Virtual Machine Manager”, utilizando la imagen descargada, la máquina no arranca. Es preciso exportar el fichero XML de configuración de la máquina, modificar el tipo de disco de “raw” a “qcow2″, eliminar la máquina y volver a crearla importando el XML para hacerla funcionar.

Además, un despliegue convencional de la imagen proporcionada por Launchpad tiene otro problema: como espera ser llamada desde un entorno de computación cloud espera recibir determinados parámetros de configuración a través de los servicios metadatos de éste. Y como no los recibe, se queda esperando durante 20 segundos su recepción… 20 veces.

Además, no hay gran cosa que puedas hacer, salvo acceder a ella por SSH. Ni servidor web, ni de correo, ni de nada.

Pero, pese a todo, es una pequeña maravilla que merece una oportunidad. Porque para cada uno de los problemas anteriores, existe una solución:

  • El problema del arranque: como se ha comentado, es cuestión de editar el XML y cambiar el parámetro de despliegue del disco. Y una vez creada la máquina, se puede clonar tantas veces como sea necesario, ya que a partir de este momento siempre se desplegará con la opción correcta.
  • Lentitud en el arranque: Aquí hay dos opciones. O bien tocar los parámetros de arranque para que no espere la información del entorno cloud… o hacer uso de una imagen previamente preparada por el usuario de GitHub Eprasad. Ojo, a esta imagen hay que hacerle de igual manera lo comentado en el punto anterior para poderla arrancar desde KVM.
  • Carencia de servicios: Y es aquí donde llega la magia. Como he comentado, no hay apenas nada instalado en la máquina, salvo SSH y poco más. Pero ese poco más es sumamente importante. Porque tenemos nada más y nada menos que una instalación de Netcat, la navaja suiza del TCP/IP. Y a partir de aquí, la imaginación puede empezar a volar. Por ejemplo, podemos simular de manera sencilla un bonito servidor HTTP:

    MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')

    while true; do echo -e "HTTP/1.0 200 OK\r\n\r\n<h1>Hi IBM. Welcome to $MYIP</h1>" | sudo nc -l -p 80 ; done&

Así que recomiendo de manera encarecida darle una oportunidad a esta pequeña maravilla. Porque lo merece.

P.D.: Otro pequeño recordatorio. Cómo configurar de manera estática el direccionamiento de red en CirrOS, y definir rutas estáticas:

CirrOS configure network:

COMPUTE: /etc/network/interfaces

auto lo
iface lo inet loopback

auto mybr0
iface mybr0 inet static
address 10.1.0.1
netmask 255.255.0.0
network 10.1.0.0
gateway 10.1.0.2
bridge_ports eth5
bridge_stp off
bridge_maxwait 0
bridge_fd 0

up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.1.0.2 dev eth5
up route add -net 10.1.0.0 netmask 255.255.0.0 gw 10.1.0.2 dev eth5
up route add -net 0.0.0.0 gw 10.1.0.2 eth5

VN:F [1.9.20_1166]
Rating: 0.0/10 (0 votes cast)

Etiquetas: , , , ,