Las redes inalámbricas de sensores (WSN por sus siglas en inglés) permiten acortar la brecha entre el medio ambiente y el mundo digital. Son redes formadas por cientos o miles de pequeños nodos de bajo costo alimentados por medio de baterías, en donde cada nodo tiene capacidad de sensar ciertos parámetros ambientales además de poder de procesamiento y de comunicación inalámbrica por medio de radio frecuencia.
Para facilitar la creación de programas con redes inalámbricas de sensores, en el CICESE se creó el middleware TinySOA, que permite programar aplicaciones con WSN utilizando servicios Web comunes y así evitar aprender un lenguaje específico para las WSN y reutilizar el conocimiento adquirido en la programación más tradicional.
Recientemente se integró el soporte para RFID al middleware TinySOA, y los dejo con un video del tipo de aplicaciones que se pueden realizar gracias a eso. En el video se muestra una caja en donde por medio de la red de sensores se obtiene la temperatura del ambiente y por medio del lector RFID se identifica el contenido de la caja, para después desplegarlo con realidad aumentada. El video después del salto.
Con eso del Web 2.0, RSS se puso de moda. Ahora todos quieren un feed RSS en su sitio pero ¿Cómo podemos crear un feed RSS con PHP?
Un feed RSS no es más que un documento XML con cierto formato, en el cual se agregan nuevas entradas cuando el contenido del sitio cambia. Para propósitos de este tutorial vamos a usar ATOM como formato del feed. Existen otros, pero ATOM es estándar de la IETF además que el gran oráculo de Internet lo usa en sus aplicaciones. Un documento ATOM se ve algo así (tomado de la Wikipedia):
A subtitle.
2003-12-13T18:30:02Z John Doe johndoe@example.com
urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6
urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2003-12-13T18:30:02Z Some text.
Para hacernos la vida más fácil, vamos a crear una clase en PHP que nos haga todo el trabajo repetitivo. La clase se va a encargar de mantener el documento XML y cada vez que se agregue contenido a nuestro sitio, agregará una nueva entrada y eliminará la más antigua si es necesario (en mi caso definí 15 entradas como máximo). Primero definimos el encabezado del documento y la tag que cierra:
Después lo que vamos a hacer es verificar si el feed tiene entradas. En caso de no tener entradas solamente despliega la nueva entrada. Si ya tiene entradas agregamos la nueva al inicio y le adjuntamos las 14 previas, de esa manera nos aseguramos que el orden sea cronológico inverso, es decir, las más nuevas primero:
$entries[] = $content;
/*Si hay entradas previas las combina con la nueva. Si es la primera entrada solamente despliega esa*/
$filecontent = @file_get_contents($fname);
if($filecontent == ''){
$result = $entries;
} else {
$entries2 = unserialize($filecontent);
$entries3 = array_slice($entries2,0,13);
$result = array_merge($entries,$entries3);
}
Lo que pasa dentro del else es lo siguiente: como hay entradas anteriores, primero metemos las entradas anteriores al arreglo llamado entries2, eso sucede con la instrucción unserialize. Unserialize lo que hace es tomar un arreglo serializado (guardado en un archivo en el disco duro) y convertirlo de nuevo a su representación como arreglo. La variable filecontent tiene todo el contenido del archivo de serialización. Luego array_slice parte el arreglo obtenido de la serialización, para quedarnos con las primeras 14 entradas. Por último array_merge combina la nueva entrada con las 14 anteriores y lo pone todo en la variable result.
Lo que resta es escribir el encabezado, el contenido del arreglo result y la tag de finalización al archivo XML, y serializar el arreglo result a disco para que todo se encuentre en sincronía. Para agregar contenido en nuestro canal, es algo como lo siguiente:
$newentry = utf8_encode(''.
''.
'
'.
''.date('Y-m-d\TH:i:s-07:00').''.
''.date('Y-m-d\TH:i:s-07:00').''.
'Autor del superblog'.
''.$id.'/'.time().''.
'Aqui va el contenido de la nueva entrada, puede ser HTML'.
'');
rss::newEntry($newentry);
Eso es todo, con eso tenemos nuestro archivo xml con las nuevas entradas listo para ser consultado por terceros. Pueden descargar la clase completa para usarla en sus proyectos desde acá.
Edit: Gracias a Pablo por su apoyo técnico y moral al estar programando esto.
Frecuentemente alguien pregunta ¿por qué no existen virus para Linux? Y aunque a simple vista la respuesta puede parecer sencilla, también frecuentemente me encuentro con que la explicación dada por algunas personas es totalmente incorrecta. Trataré en este post de dar una respuesta clara del porque.
Para empezar, si existen virus para Linux. Existen antivirus para Linux y, es más, ¡hasta se pueden ejecutar virus para Windows en Linux! Esta claro que existen muchos menos virus para Linux que para Windows, y la primera respuesta típicamente en salir de la boca no educada en el tema es “Lo que pasa es que Windows es una plataforma más atractiva para los creadores de virus por su alta base instalada”, o sea, los tantísimos usuarios que tiene.
Si la razón por la que no existen tantos virus para Linux como para Windows fuera el número de usuarios, algo similar debería suceder con Apache y el servidor Web de Windows IIS. Apache tiene una base instalada mayor que IIS (50.48% en Septiembre del 2007 según Netcraft) sin embargo el número de gusanos y malware en general para IIS es mayor que para Apache, así que la teoría de la base instalada no se mantiene. La justificación detrás de la base instalada mayor puede parecer lógica ya que, mayor número de usuarios, mayor número de víctimas potenciales.
La verdadera razón por la cual existen virus para Windows y no tantos para Linux es la arquitectura del sistema operativo. Por una pésima arquitectura, Windows se ejecuta con permisos de super usuario SIEMPRE. En versiones recientes tratan de “arreglar” eso utilizando las molestas confirmaciones del usuario para ejecutar cuanta cosa se pone enfrente, pero eso no es reemplazo para un verdadero sistema de permisos de usuario como el que trae *NIX (y por consecuencia Linux) desde su inicio. Windows en sus últimas versiones ha tratado de parchar esa deficiencia, al mismo tiempo que mantiene la compatibilidad con sus versiones previas y ese es uno de sus más grandes errores.
Ya salió la revista RevistaSL (no, no estoy repitiendo el nombre así se llama) #8. ¿Que por que menciono eso aquí? pues porque un servidor aportó un pequeño artículo sobre GWT.
Que levante la mano el que ahora en vez de un iPhone, quiere un iPod Touch…
Los autores
Axel. Diseñador de UI, melómano, HTML & CSS lover. Serigrafista artesanal, blogger, entrepeneur. Quirky motherfucker. A 30 year old boy.
Cesar. Conciertólogo miembro del Slaytanic Wehrmacht fanático del Thrash. Pensador pragmático ya antes llamado mundano. Podcastero de rock autoproclamado Geek en rehabilitación.
Rafyta. Diseñador Creativo, Fotógrafo, Artista Visual, Web Scripter, e-Trepreneur. Metalista, una cerveza y un tequila en 8 segundos, (tengo mi) Genio.