Avaaz Apoyo Incondicional

ImagenEsta mañana cuatro periodistas internacionales se encuentran en sus casas con sus familias, sanos y salvos. Pero los ecos del horror y el heroísmo vividos en Bab Amro deben seguir retumbando en sus oídos. Más de 50 activistas sirios, apoyados por Avaaz, se ofrecieron como voluntarios para ayudarles a escapar, junto a numerosos civiles heridos, de la carnicería perpetrada por el ejército sirio. Muchos de estos heroicos activistas no han logrado sobrevivir a esta última semana.

Abu Hanin es uno de esos héroes. Poeta de 26 años, él fue quien lideró la organización de la red de periodistas ciudadanos que Avaaz ha venido apoyando para que las voces del pueblo sirio se escuchen en todo el mundo. El último contacto con Abu Hanin fue el pasado jueves, mientras las tropas del régimen cercaban el lugar donde se encontraba. Entonces leyó su última voluntad al equipo de Avaaz en Beirut, y nos dijo dónde había enterrado los cuerpos de los dos periodistas occidentales asesinados durante el bombardeo. Desde entonces, su barrio de Bab Amro se ha convertido en un agujero negro, y no sabemos qué ha podido ser de él.

Es fácil perder la esperanza cuando observamos lo que está sucediendo ahora en Siria. Pero para honrar a quienes han fallecido, debemos seguir hacia adelante con la misma esperanza con la que ellos murieron. Mientras se oscureció en Bab Amro y el miedo a nuevas masacres se propagó, el pueblo sirio tomó las calles una vez más, por todo el país, en una nueva protesta pacífica reflejo de su impresionante valentía.

Su valor es nuestra lección, el regalo que nos da el pueblo sirio. Porque es en su espíritu, y en su coraje a la hora de afrontar la cara más oscura de nuestro mundo, donde encontramos el nacimiento de un nuevo mundo.

Y en este nuevo mundo, el pueblo sirio no está solo. Somos millones de ciudadanos de todas las naciones los que, una y otra vez, les hemos apoyado desde el comienzo de su lucha. Cerca de 75.000 personas hemos donado casi $3 millones de dólares para financiar movimientos ciudadanos y dotarles con equipos de comunicación de alta tecnología para que puedan contar su historia. Esto también ha permitido al equipo de Avaaz a ayudar a infiltrar clandestinamente asistencia médica por valor de más de $2 millones de dólares. Además, hemos emprendido millones de acciones por internet presionando al Consejo de Seguridad de la ONU y a la Liga Árabe a actuar, exigiendo la imposición de sanciones internacionales. Hemos hecho entrega de dichas campañas a través de decenas de eventos públicos, campañas mediáticas y reuniones al más alto nivel con líderes mundiales. Juntos hemos ayudado a ganar muchas de estas batallas, incluyendo la adopción de medidas sin precedentes por parte de la Liga Árabe, y las sanciones sobre el petróleo sirio impuestas por la Unión Europea.

Nuestro equipo en Beirut también ha contribuido ofreciendo un valioso centro de comunicaciones para coordinar las complejas operaciones clandestinas y el rescate de heridos y periodistas liderados por valientes y expertos activistas. Avaaz no dirige estas actividades; nuestro trabajo es de facilitación, apoyo y asesoría. También hemos establecido casas seguras para activistas, y apoyado los esfuerzos diplomáticos del Consejo Nacional Sirio — el incipiente órgano representativo de la oposición. Gran parte de los principales medios internacionales han cubierto el trabajo de Avaaz para ayudar al pueblo sirio, con artículos destacadas en la BBC, CNN, El País, TIME, The Guardian, Der Spiegel, AFP y muchos otros, que citan nuestro “papel central” en apoyo del movimiento pacífico de protesta en Siria.

Hoy, pesadillas como las que se han vivido en Homs están repitiéndose en otros lugares de Siria. Es muy probable que la situación empeore antes de que pueda mejorar. Va a ser un camino sangriento y complicado, y a medida que más manifestantes deciden tomar las armas para defenderse, la línea que separa el bien del mal se tornará más borrosa. Pero el régimen brutal del Presidente Asad caerá, y habrá paz, y elecciones, y un gobierno más responsable. Está claro que el pueblo sirio no va parar mientras no lo consiga, y esto podría suceder más pronto de lo que todos pensamos.

Cada experto con el que consultamos en un principio nos decía que un levantamiento en Siria era algo impensable. Pero aun así decidimos enviar equipos de comunicación vía satélite. Porque nuestra comunidad sabe algo que muchos expertos y cínicos no saben: que el poder de la gente y un nuevo espíritu de ciudadanía están barriendo nuestro mundo hoy. Y se trata de un poder intrépido e imparable, capaz de llevar esperanza a los lugares más oscuros. Marie Colvin, la periodista estadounidense que cubría la represión en Homs, habló con el equipo de Avaaz poco antes de morir: “No voy a dejar sola a esta gente”. Nosotros tampoco.

Con esperanza y admiración hacia el pueblo sirio y hacia los valientes ciudadanos de todo el mundo,

Ricken, Wissam, Stephanie, Alice, David, Antonia, Will, Sam, Emma, Wen-Hua, Luis, Veronique, Laura y todo el equipo de Avaaz

P.D. Si quieres hacer más, haz clic en este enlace para ayudar a que nuestra vital línea de esperanza en Siria siga abierta:
https://secure.avaaz.org/es/smuggle_hope_into_syria_es_la_rb/?vl

Publicado en Web Libre | Deja un comentario

Una Opcion a Google y sus Nuevas Politicas de Privacidad

Si google se empena con sus nuevas politicas de privacidad, tenemos que hechar mano de un buscador que a mi parecer hace muy bien su trabajo y sobre todo no revela nuestros datos sensibles, ni rastrea nuestras andanzas en la red, para luego venderlos a las companias de publicidad como lo hace google. Google ha sido por anos mi preferido en cuanto a buscadores, pero en vista a sus nuevas politicas de privacidad, me vi obligado a optar por este nuevo buscador llamado DuckDuckGo, al que tambien podemos personalizar como deseemos.

Para usar DuckDuckGo solo tenemos que usar la siguiente URL:- http://duckduckgo.com – y ponerla como predeterminada
en nuestro navegador favorito, el mio Firefox, y ya esta listo para navegar por la red.
La Alternativa a Google

Tambien podemos dejar nuestras opiniones directamente a Gabriel Weinberg creador de este buscador aqui: http://duckduckgo.com/feedback.html

Publicado en Libertad de Expresión, Programación, Teknologia, Web Libre | Deja un comentario

Qué es ACTA y cómo afectará nuestro uso del Internet

Cuando el senador estadounidense Lamar Smith retiró el proyecto de ley SOPA (Stop Online Piracy Act) y con su hermana menor, PIPA (Protect IP Act) igualmente en la congeladora, el Internet pareció tomar un momento de respiro. Sin embargo, el entusiasmo podría olvidarse muy pronto: existe un tratado internacional llamado ACTA que se ha estado preparando por lo menos desde 2008, y cuyas consecuencias, de aprobarse en unos días, podrían ser desastrosas.

¿Qué es ACTA?

ACTA son las siglas de Anti-Counterfeiting Trade Agreement o Acuerdo Comercial contra la Falsificación. Al igual que ocurrió con SOPA, el espíritu de este tratado parece positivo a primera vista: su objetivo es crear un marco legal para la protección de los derechos de propiedad intelectual en todo el mundo. La “falsificación” que pretende prevenir (aunque como veremos, “falsificar” es una palabra que no concuerda con el funcionamiento del Internet) no se limita a software, también abarca bienes físicos, productos, marcas registradas e incluso medicinas.

ACTA es un proyecto para prevenir el contrabando ilegal de propiedad intelectual y física (como medicamentos controlados) a nivel global; la Unión Europea podría dar luz verde al proyecto a finales de esta semana, contando con el apoyo oficial de países como Estados Unidos, Australia, Corea, Nueva Zelanda, México, Jordania, Marruecos, Singapur, los Emiratos Árabes Unidos y Canadá. Se trata de un acuerdo global al que los países pueden unirse de manera voluntaria.
Los primeros borradores datan incluso de 2006, a raíz de reuniones entre Estados Unidos y Japón. Canadá, Suiza y la Unión Europea ingresaron poco después. Los críticos de ACTA no han dejado de remarcar el que la creación de este tratado haya sido encubierta, así como que tampoco tomara en cuenta a la población para desarrollarse. Durante 2008 y 2009 ocurrieron filtraciones que permitieron saber que ACTA tiene cláusulas donde se entiende que los proveedores de servicios de Internet deberán intervenir las comunicaciones de sus usuarios, si se sospecha que alguno está enviando o recibiendo material protegido por derechos de autor. De no hacerlo, los proveedores de servicios de Internet (ISP) podrían enfrentar cargos penales. Esto genera un panorama donde podrían haber claras violaciones a los derechos digitales de los usuarios, así como a la privacidad de las comunicaciones a través de la red.

En 2008, el Parlamento Europeo describió la utilidad y los alcances de ACTA del siguiente modo:

“La proliferación de infracciones contra los derechos de propiedad intelectual supone una amenaza creciente al desarrollo sostenible de la economía mundial. Es un problema de serias consecuencias económicas y sociales. Hoy enfrentamos un gran número de nuevos retos: el peligroso incremento de bienes falsificados (farmacéuticos, comida y bebida, cosméticos o juguetes, autopartes); el auge y velocidad de la reproducción digital; el crecimiento de la importancia del Internet como medio de distribución; y la sofisticación y recursos de los falsificadores internacionales. Todos estos factores han hecho el problema más peligroso y difícil de controlar.”

En esta descripción es evidente el desconocimiento imperante en la ley al igualar el estatuto de productos como un medicamento controlado y una canción en MP3 en términos de falsificación y contrabando. ¿Es que ACTA no ha contado con asesoría especializada en el caso de Internet? De hecho sí: amparados en otro acuerdo internacional sobre transparencia de la información, algunas compañías recibieron copia de los borradores de ACTA, bajo el acuerdo de no darlos a conocer. Las compañías fueron Google, eBay, Intel, Dell, News Corporation, Sony Pictures, Time Warner y Verizon. Se trataba solamente de documentos de carácter informativo: al tratarse de un acuerdo internacional, en realidad no parece haber mucho que la iniciativa privada pueda hacer.
¿Por qué nadie habló de ACTA?

A través de las redes sociales circularon videos y artículos desde hace un par de años relativos a la naturaleza de esta ley, sin que la gente se manifestara muy consciente de su contenido. Si algún mérito tuvo el escándalo de SOPA fue el de alertar a los usuarios de que este tipo de leyes podría afectarlos no importando su país de residencia. Pero ACTA está en un estado sumamente avanzado de desarrollo; como dijimos, comenzó a ser negociado en privado hace por lo menos 5 años, y sus estatutos preliminares ya fueron aprobados en octubre del año pasado. (El texto de la resolución actual se encuentra en español aquí.)

Al menos leyes como SOPA (así como la llamada “Ley Döring” en México, la “Ley Lleras” en Colombia y otras similares en varios países), permitían que los ciudadanos de los Estados ejercieran su derecho a participar en el desarrollo de la ley escribiendo a congresistas y senadores sobre su desacuerdo para apoyarlos. Pero ACTA es un acuerdo internacional descentralizado (aunque su aprobación o desaprobación recae mayormente en el Parlamento Europeo), que no permite dirigirse a una instancia específica para establecer alguna suerte de diálogo entre los legisladores y la sociedad civil. Ha habido comités de asesoría, pero con poca o nula participación de los más afectados (como siempre): Nosotros los usuarios.

Publicado en Uncategorized | Etiquetado | Deja un comentario

El THD Weekend llega a Ecuador

Después de un paso exitoso por Venezuela del proyecto THD Weekend el “Hijo” del proyecto The Hacking Day (Colombiano)
que pretende expandir el conocimiento sobre Seguridad Informática por todos los países del continente (Inicialmente).

THD’S Weekend llega a Ecuador y se encargará de hacer los talleres teórico prácticos sobre seguridad informática.
esta incitativa que nace gracias a la gran acogida del proyecto Hacking Day en Colombia
y a la continua solicitud desde otros lugares de llevar todo este conocimiento a países como: Ecuador, Venezuela, Perú, Argentina, Bolivia, Uruguay entre otros.

El proyecto ya se encuentra en funcionamiento, con toda la estructura física y logística montada
para empezar por nuestro hermano país de Ecuador en las fechas del 1 Al 3 Marzo de 2012, con los siguientes talleres:

Pentesting Con Backtrack ::$150 Usd.::
Taller Practico De Seguridad Wireless ::$150 Usd.::
Metasploit En Profundidad ::$150 Usd.::

Si te quedaste fuera en los talleres del e-Security Conferences en Guayaquil, es tu oportunidad para que puedas asistir.

La ciudad y el lugar esta aun por definirse.
Los mantendremos informados

Publicado en Uncategorized | Etiquetado | Deja un comentario

Misteriosa muerte de Arenques en Noruega

Imagen

Los noruegos se han quedado perplejos al ver  miles de arenques muertos
en la playa en el distrito septentrional de Nordreisa.
Algunos se preguntán si un depredador los había llevado a su muerte
o una tormenta los había arrastrado a tierra.

Los científicos tenían la esperanza de probar el pescado para ver si podían determinar la causa de la muerte.
Pero los locales tenían preocupaciones más urgentes, cómo:  limpiar las 20 toneladas de animales muertos antes de que empiecen a descomponerse.

Para agoreros, los peces fueron la segunda señal en dos días de que el 2012
estuviera a la altura de la predicción apocalíptica de los antiguos Mayas,
después de que cientos de mirlos cayeron muertos presuntamente en Arkansas.

Tanks The Guardian

Publicado en Uncategorized | Deja un comentario

Tres Mujeres Ganan el Premio Nobel de la Paz


Tres mujeres que han luchado contra la injusticia, las dictaduras y la violencia sexual en Liberia y Yemen han recibido el Nobel de la Paz 2011 en una ceremonia llevada a cabo en Oslo, la capital Noruega.
Ellen Johnson Sirleaf, su compatriota Leymah Gbowee y Tawakul Karman de Yemen recogieron sus diplomas y medallas en el salón de la ciudad de Oslo este sábado.
Thorbjoern Jagland, el presidente del Comité del Premio Nobel de la Paz, dijo que las tres mujeres representan la lucha por “los derechos humanos en general y de las mujeres por la igualdad y la paz, en particular”.
Jagland dijo que el premio debería servir como advertencia para los dictadores en países como Yemen y Siria de que sus días están contados.
“Los líderes de Yemen y Siria, que asesinan a su pueblo para conservar su propio poder deben tomar nota de los siguiente: La búsqueda de la humanidad por la libertad y los derechos humanos no puede parar”, dijo en declaraciones antes de dar el premio a las tres premiadas.
“Ningún dictador puede a la larga, encontrar un refugio de este viento de la historia. Fue el viento que llevó a la gente a trepar sobre el muro de Berlín y destruirla. Es el viento que ahora sopla en el mundo árabe”, dijo.
“El Presidente Yemení Ali Abdullah Saleh no era capaz y el Presidente Sirio Bashar Assad en Siria no podrán resistir la demanda del pueblo por la libertad y los derechos humanos “, insistió.
Las tres laureadas, dijo, representaban cada una a su manera “las fuerzas motrices más importantes para el cambio en el mundo de hoy, la lucha por los derechos humanos en general y la lucha de las mujeres por la igualdad y la paz en particular.”
http://www.aljazeera.com/news/europe/2011/12/20111210124833713349.html

Publicado en Libertad de Expresión | Deja un comentario

THE/LOS PROTOTHREADS

¿QUÉ SON LOS PROTOTHREADS?
Los protothreads son un conjunto de macros para, de un modo similar a la arquitectura de los Dispositivos de Duff, hacer que un código en C monolítico con un modelo de ejecución basado en eventos sea más legible y más económico de maneter, de modo que en lugar de complejas arquitecturas de maquinas de estados, que dan lugar a firmwares difícilmente mantenibles a largo plazo, se pueda diseñar un código con funciones cuya ejecución es similar a threads. Estos threads especiales se llaman protothreads y a diferencia de los threads normales, no se necesita reservar una cantidad de memoria para el contexto de cada thread, en lugar de ello, se requiere únicamente 2 bytes de memoria RAM para cada protothread, lo que lo hace ideal para microcontroladores de 8 y 16 bits. De todos modos, pueden implementarse en cualquier programa realizado en C e incluso han sido portados para su uso en C++ y Objective-C.
EJECUCIÓN DIRIGIDA POR EVENTOS vs MULTI-THREADING
La realización de un firmware con un modelo de ejecución dirigido por eventos, es una forma común de programación para sistemas embebidos con muy restringidas capacidades de memoria RAM, como lo son los nodos alimentados por baterías en las redes de sensores inalámbricas. En comparación a los sistemas múltipleas threads, los sistemas dirigidos por eventos no tienen necesidad de alojar una memoria para el stack de cada thread, lo que permite utilizar microcontroladores con menor RAM y por tanto con menor consumo energético. Por esta razón, la mayoría de sistemas operativos para redes de sensores inalámbricas, como Z-Stack, TinyOS o Contiki se basan en esta metodología de programación.
En el documento [6] se dice “en TinyOS, hemos elegido un modelo dirigido por eventos para poder alcanzar altos niveles de concurrencia en una pequela cantidad de espacio. Una solución basada en threads con stack habría requerido un espacio de memoria para cada contexto de ejecución.” Sin embargo, los modelos de ejecución dirigida por eventos no soportan esperas bloqueantes y, por tanto, los programadores a menudo resuelven este problema con máquinas de estados para implementar el control de la ejecución.
Uno de los inconvenientes de esta solución es que las máquinas de estados difícilmente están formalmente especificadas desde el inicio del proyecto, a diferencia de los sistemas basados en tareas, en los que frecuentemente están especificados el número de tareas a realizar y la función de las mismas. En estos casos, sucede que es el programador el que va creando sobre la marcha estas máquinas de estados según sus necesidades. La experiencia demuestra que en estos casos los modelos de programación en sistemas basados por eventos originan código difícil de gestionar y caro de mantener a largo plazo.
Es en estos casos, donde el uso de protothreads representa una ventaja. Ya que puede decirse que los protothreads están a mitad de camino entre los sistemas dirigidos por eventos y los sistemas de multi-threading. De los sistemas dirigidos por eventos, los protothreads tienen la ventaja de que todo se ejecuta en el mismo contexto, con lo que puede implementarse el código de equipos muy complejos en microcontroladores con muy poca memoria RAM. De los sistemas basados en múltiples threads, los protothreads tienen como ventaja la sencillez a la hora de especificar, codificar y testear el código, reduciendo el time-to-market del producto y el coste en mantenimiento de firmware a largo plazo, mediante una abstracción que permite al programador tener múltiples threads con capacidad de bloquearse y desbloquearse.
CUÁNDO SON ÚTILES LOS PROTOTHREADS?
Como se ha comentado, los protothreads son como threads, pero sin un stack asociado a cada thread, lo que los hace muy ligeros e ideales para sistemas embebidos de recursos muy limitados. El propósito principal de un protothread es proporcionar contexto bloqueante en lo alto de un sistema dirigido por eventos, proporcionando un control del código en una manera secuencial, todo ello sin recurrir a sistemas operativos que tengan un contexto para cada thread y que gestionen la pila de todas estas tareas.
Para ilustrar cuándo resulta util el uso de protothreads, supongamos un dispositivo zigbee, y un thread no debe continuar su ejecución hasta que se haya recibido un mensaje de radio con información útil para ese thread. Si desarrollásemos utilizando sistemas operativos basados en ejecución por eventos, como Z-Stack, tendríamos que incluir el mensaje como un case o un if dentro de una función que sería llamada por un evento de mensaje recibido alojado en la capa de red… con lo que tendríamos un código que se ejecuta a fragmentos y, por tanto, costoso de depurar y mantener. Otra alternativa sería utilizar un sistema operativo como FreeRTOS o uCOS e implementar una tarea para los mensajes de radio, detenida por un semáforo que se liberaría cuando hubiese una trama de datos recibida pendiente de procesar; sin embargo, en sistemas con capacidades de memoria RAM muy reducidas, basados en microcontroladores como el CC2430 o el MSP430F149, el mecanismo de multi-threading que proporcionan estos típicos sistemas operativos para microcontroladores, es totalmente inviable, dado que en estos sistemas operativos, cada thread requiere su propio stack, y por lo tanto se requiere una gran cantidad de memoria RAM para almacenar los contextos de las distintas tareas que hay en ejecución… Desde luego resultaría muy difícil incluir un sistema operativo de estas características en microcontroladores como los mencionados con capacidades de RAM de 2 Kb.
Una solución podría ser el elegir un micro con mayores capacidades de RAM, pero si tenemos en cuenta que la RAM debe estar contínuamente alimentada, el doble de RAM implica el doble consumo estático, lo que implica la mitad de duración de las baterías, lo cual no siempre será aceptable.
Y aquí es donde reside la mayor ventaja de los protothreads frente a los threads tradicionales, puesto que un protothread no necesita stack.
COMO FUNCIONAN LOS PROTOTHREADS
En noviembre de 1983, Tom Duff, que entonces trabajaba para Lucasfilm, descubrió que gracias a que en C es posible saltar a la mitad de la ejecución de un bucle y a que la especificación de switch case no obliga la inclusión de un break, se podría construir un singular código para enviar datos a un periférico.
Una forma sencilla y conocida para enviar n bytes a un periférico, cuya posición en memoria está apuntada por un puntero *to es la que sigue a continuación:
do{
*to = *from++;
} while(count– > 0);
Duff se dio cuenta de que esta transmisión de datos también puede hacerse del siguiente modo:
register n = (count + 7) / 8;
switch(count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while(–n > 0);
}
Este mecanismo, que no ha tenido mucha transcendencia, es utilizado para el bloqueo de los protothreads, a continuación se muestran las macros que han sido explicadas y utilizadas anteriormente, de hecho, cabe observar que con la inclusión de este sencillo .h bastaría para usar protothreads en nuestro código:
#ifndef __PROTOTHREADS_H
#define __PROTOTHREADS_H

#if defined Cplusplus
extern C {
#endif //C++

//Definiciones del estado de ejecución de los protothreads

#define PT_WAITING 0
#define PT_EXITED 1
#define PT_ENDED 2

//Definiciones de las macros de los protothreads
#define PT_INIT(pt) LC_INIT(pt->lc)

#define PT_BEGIN(pt) { int yielded = 1; \
LC_RESUME(pt->lc)

#define PT_YIELD(pt) yielded = 0; \
PT_WAIT_UNTIL(pt, yielded)

#define PT_END(pt) LC_END(pt->lc); \
return PT_ENDED; }

#define PT_WAIT_UNTIL(pt, c) LC_SET(pt->lc); \
if(!(c)) \
return PT_WAITING

#define PT_EXIT(pt) return PT_EXITED

#define PT_SPAWN(pt, child, thread) PT_INIT(child); \
PT_WAIT_UNTIL(pt, thread != PT_WAITING)

//Definiciones de las macros de LC (Local Continuations)
#define LC_INIT(c) c = 0
#define LC_RESUME(c) switch(c) { case 0:
#define LC_SET(c) c = __LINE__; case __LINE__:
#define LC_END(c) }
//Tipos de datos usados en las macros
struct pt { lc_t lc };
typedef unsigned short lc_t;

#if defined Cplusplus
}
#endif

#endif //__PROTOTHREADS_H

De este modo, si deshacemos el uso de las macros en el ejemplo anterior y lo observamos desde el punto de vista de nuestro amigo Tom Duff (y desde el punto de vista del compilador), el código quedaría del siguiente modo:
int envio_datos(struct pt *pt))
{
int yielding = 1;
switch (pt->lc) {
case 0:
while(1) {
contador = 0;
pt->lc = 8;
case 8:
if(!(Flags & MENSAJE_LISTO))
return PT_WAITING;
do{
enviar_mensaje();
iniciar_timer(TIMEOUT);
pt->lc = 16;
case 16:
if(!(Flags & ACK_RECIBIDO) || (Flags & TIMER_EXPIRADO)))
return PT_WAITING;
Flags != TIMER_EXPIRADO;
}while((contador++ lc). De este modo un bloqueo podrá indicar el valor de este puntero, y la próxima llamada del protothread irá a este bloqueo. Si el mismo continúa, el puntero continuará con el mismo valor, en caso contrario, se seguirán ejecutando las instrucciones de dicha función.
Esta metodología de programación, sin embargo, supone una pequeña limitación en el código, ya que no pueden utilizarse intrucciones switch, case ni break. Asimismo, como se ha mencionado, se recomienda que, si es posible, todas las variables de los protothreads sean estáticas.
COMO SE USAN LOS PROTOTHREADS
En estos momentos, si el lector tiene micro de uno ó 2 Kb y quiere desarrollar un servidor SOAP wireless alimentado a baterías para gestión de datos en tiempo real o algo similar, estará preguntándose ¿cómo se usan los protothreads? En este apartado vamos a aproximarnos al funcionamiento desde el alto nivel de los protothreads, y cómo desarrollar código utilizando los mismos, más adelante será el momento de poder explicar porqué este mecanismo funciona y cómo funciona. De momento recordemos que los protothreads no son más que macros para hacernos la vida más sencilla. A continuación se explican estas macros y se ve un sencillo ejemplo de programación con protothreads. Remitiendo al lector interesado en conocoer más ejemplos a la consulta de las referencias señaladas en la bibliografía como: [1] y [5].
PT_BEGIN Marca el inicio de un protothread, puesto que los protothreads son macros de instancias switch y case, todas las instrucciones PT_ deben estar entre PT_BEGIN y PT_END, en caso contrario, el resultado puede ser imprevisible
PT_END Marca el final de un protothread
PT_WAIT_UNTIL(c) Bloquea el protothread, cediendo la ejecución al resto de protothreads, y mientras c sea falso el protothread no continuará su ejecución aunque sea llamado.
PT_EXIT Sale del protothread
PT_YIELD() Bloquea la ejecución del protothread incondicionalmente, el protothread continuará su ejecución en el punto en que quedó bloqueado la siguiente vez que sea llamado.
PT_SPAWN(pt, pt_estado) Los protothreads pueden anidarse, y mediante esta macro se llama a un protothread hijo, cuya variable de estado (2 bytes) se almacenan en la variable del padre pt_estado. El protothread padre queda bloqueado hasta que el protothread hijo finalice, con PT_EXIT ó PT_END, si el protothread hijo se bloquea, seguirán ejecutándose el resto de protothreads de igual rango jerárquico o mayor que el del padre, cuya ejecución continuará bloqueada. Si en este estado se invoca al protothread padre, se consultará la condición de bloqueo del protothread hijo.
PT_INIT(pt) Antes de poder ser llamados, los protothreads necesitan ser inicializados mediante esta macro
EJEMPLO DE PROTOTHREAD
En el siguiente ejemplo se muestra un protothread que envía datos a un periférico o a otro dispositivo. El mensaje que envía espera un ACK durante un tiempo definido como TIMEOUT, y si transcurrido el mismo no ha recibido dicha respuesta lo reintenta hasta un máximo de reintentos definido como MAX_RETRIES. La función es un protothread bloqueante, de hecho está bloqueada hasta que otro protothread activa un flag indicando que hay un mensaje listo, y vuelve a bloquearse tras el envío hasta que se otro protothread activa el flag de recepción de ACK o hasta que un tercero (seguramente la interrupción del timer) active el flag del timeout.
Todo esto se verá mejor con un ejemplo de código:
static char contador;

PT_THREAD(envio_datos(struct pt *pt))
{
PT_BEGIN(pt);

while(1) {
contador = 0;
PT_WAIT_UNTIL(pt, (Flags & MENSAJE_LISTO);
do{
enviar_mensaje();
iniciar_timer(TIMEOUT);
PT_WAIT_UNTIL(pt, (Flags & ACK_RECIBIDO) || (Flags & TIMER_EXPIRADO) );
Flags != TIMER_EXPIRADO;
}while((contador++ < MAX_REINTENTOS) && (!(Flags & ACK_RECIBIDO)));
if(Flags & ACK_RECIBIDO) {
Flags &= !ACK_RECIBIDO;
Flags |= ENVIO_COMPLETADO;
}
}
PT_END(pt);
}
Puede observarse que el uso de protothreads simplifica enormemente el tener un sistema de eventos, con una ejecución del código no lineal, y la sustituye por un mecanismo similar a los threads, pero con la particularidad de no tener stacks asociados a los mismos. Por otro lado, el main estará formado por un bucle sin fin con un protothread scheduler que irá comprobando si la condición bloqueante se ha cumplido y puede continuarse la ejecución del protothread.
LIMITACIONES SI SE USAN PROTOTHREADS EN EL CÓDIGO
Como los protothreads no guardan un stack con el contexto en sus llamadas bloqueantes, las variables locales no guardan su valor tras una instrucción de bloqueo. Esto implica que las variables locales han de usarse con con mucho cuidado, y nunca debería esperarse que un valor almacenado antes de un bloqueo continuase cuando la ejecución del protothread se reanuda. En caso de duda, se recomienda no usar variables locales dentro de un protothread y recurrir siempre a variables estáticas.
La ejecución de los protothreads se realiza por una llamada desde la función en la cual el protothread se ejecuta, una vez el protothread se ha llamado, este continúa su ejecución hasta que se bloquea o que se sale. del mismo. De modo que los protothreads son ejecutados desde la función que los usa. Un sistema basado completamente en protothreads tendrá en el main un bucle sin fin en el cual se listan todos los protothreads. Cada vez que se llama a un protothread lo que se está haciendo es comprobar si hay una condición que lo bloquea, y en caso contrario, ejecutar su código hasta su salida o hasta que se produzca un bloqueo, de modo que se puede emular un sistema de threads, aunque no haya cambios de contexto propiamente dichos y, desde luego, no hay ningún scheduler ni ningún kernel. De hecho, si introducimos en un sistema con esta arquitectura una instrucción while(1); dentro de un protothread el resto de protothreads no funcionarán, a diferencia de lo que ocurriría con un sistema basado, por ejemplo, en FreeRTOS, donde el resto de threads continuarían funcionando.
Los protothreads fueron creados por Adam Dunkels, investigador del SICS (Swedish Institute of Computer’s Science) y pueden usarse bajo licencia BSD.
Para más detalles acerca de los protothreads, su consumo de memoria y otras consideraciones, remito al lector interesado a la lectura de [1] y [5]. Remito al lector interesado en conocer más acerca de las corutinas en C a leer los textos referenciados en [2] y [3] y a los que quieran conocer más acerca de los Dispositivos de Duff les recomiendo la lectura de [4]
BIBLIOGRAFÍA
[1] Adam Dunkels, Oliver Schmidt, Thiemo Voigt, and Muneeb Ali. Protothreads: Simplifying Event-Driven Programming of Memory-Constrained Embedded Systems. In Proceedings of the Fourth ACM Conference on Embedded Networked Sensor Systems (SenSys 2006), Boulder, Colorado, USA, November 2006.
[2] D. E. Knuth. The art of computer programming, volume 1: fundamental algorithms (2nd edition). Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1978.
[3] A. L. de Moura and R. Ierusalimschy. Revisiting coroutines. MCC 15/04, PUC-Rio, Rio de Janeiro, RJ, June 2004.
[4] T. Duff. Unwinding loops. Usenet news article, net.lang.c, Message-
ID: , May 1984.
[5] A. Dunkels. Protothreads web site. Web page. http://www.sics.se/~adam/pt/
[6] J. Hill, R. Szewczyk, A.Woo, S. Hollar, D. Culler, and K. Pister. System architecture directions for networked sensors. In Proceedings of the 9th International Conference on Architectural Support for Programming Languages and Operating Systems, November 2000.

Publicado en Uncategorized | Deja un comentario