<body>

Sitios web relacionados: PingBlog | Fotos

domingo, octubre 26, 2008

¿El primer hijo del decreto 3390?: Canaima Linux

Las cosas que uno se consigue mientras reviza bitacoras un Domingo. Gracias a Dios buenas.

No he tenido tiempo de bajarmela, pero Canaima Linux (Basada en Debian) se ve interesante. Pero lo mejor es que parece tener un grupo sólido de gente detrás soportando la iniciativa.

No se si este es el primer producto del decreo 3390 después de tantos años, pero me alegra ver una respuesta concreta al dilema de la falta de software libre Venezolano.

Buscar en otros sitios:

Blogalaxia:, ,
Technorati:, ,
To2blogs:, ,
Del.icio.us:, ,

Etiquetas: , ,

lunes, octubre 20, 2008

StupidZombie: Metiendo código en java.net

Después de un letargo inmenso, y de varios intentos inútiles para convencer a un pana de trabajar en el proyecto conmigo me decidí a arrancar yo sólo. Lo primero fué configurar a mi Eclipse para utilizar Subversion; Hay algunos cambios de paradigmas con la herramienta, pero por lo poco que he jugado es muy similar a CVS.

Tambien estoy acomodando el código que tenia en SourceForge; La idea es comenzar con una versión con la misma funcionalidad que tenia PingBlog y de allí desarrollar las nuevas ideas.

Si tiene curiosidad, puede ver el código fuente desde acá. Dentro de poco ya verán la primera versión de StupidZombie.


Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , ,

domingo, octubre 19, 2008

Yo adoro Perl, pero...

Perl nos tiene esperando por una versión nueva desde hace tiempo. Pero de allí a que un blogger en O'Reilly salga diciendo que Perl + CGI es todavía una alternativa viable para hacer aplicaciones web hay mucho trecho.

¿Donde estás Perl, que no te vemos? Mientras tanto, Java Servlets 3.0 promete cosas interesantes.

Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , , ,

sábado, octubre 18, 2008

AguaYFuego; Se me trancó el Serrucho

No hay nada más fustrante (por no poder escribir la palabra que realmente describe mi estado de animo) que sentarse a trabajar en una idea y encontrarse conque las herramientas no funcionan.

En este caso estoy tratando de liberar código (ya probado un millón de veces) desde Sentilla Eclipse hacia el mote. Pero Eclipse se tira 3 peos:


5:31:03: serial@ftd/M4ASU2W5:115200: resynchronising

Use replacement opcodes
5:31:20: PacketHandler started.
5:31:20: MimeoConnectionListener starting
5:31:20: HostConnectionListener starting
5:31:20: HostCollectionThread started.
5:31:20: Creating CollectionProtocol Ack listener...
5:31:20: Server started.
5:31:20: Listening on: 127.0.0.1:9002
5:31:20: Listening on: 127.0.0.1:10004
5:39:23: Error linking: class file missing:
5:39:23: Failed to install app


En vez de escribir código ahora estoy soportando el entorno de desarollo :(

Curiosamente me conseguí con un error en la bitacora del servidor, un error de arranque:

Parece un problema de arranque del servidor de Sentilla en OSX:


auyan:SentillaWork-1.1.01 josevnz$ tail -f log/hostserver.log
6:34:42: serial@ftd/M4ASU2W5:115200: resynchronising

serial@ftd/M4ASU2W5:115200: resynchronising
Use replacement opcodes
6:34:59: PacketHandler started.
6:34:59: MimeoConnectionListener starting
6:34:59: HostConnectionListener starting
6:34:59: HostCollectionThread started.
6:34:59: Creating CollectionProtocol Ack listener...
6:34:59: Server started.
6:34:59: Listening on: 127.0.0.1:9002
6:34:59: Listening on: 127.0.0.1:10004
java.io.FileNotFoundException: com.sentilla.mote.clientservices.ClientServices.oos (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:106)
at java.io.FileInputStream.(FileInputStream.java:66)
at com.sentilla.virtual.ImageEnvironment$Image.init(ImageEnvironment.java:179)
at com.sentilla.virtual.ImageEnvironment$Image.(ImageEnvironment.java:206)
at com.sentilla.virtual.ImageEnvironment.addImage(ImageEnvironment.java:317)
at com.sentilla.virtual.HostService$MimeoSync.completed(HostService.java:204)
at com.sentilla.net.mimeo.ProxyImage.completed(ProxyImage.java:164)
at com.sentilla.net.mimeo.ProxyImage$Slingshot.completed(ProxyImage.java:114)
at com.sentilla.net.mimeo.MimeoImage.writePage(MimeoImage.java:55)
at com.sentilla.net.mimeo.ProxyImage$Slingshot.writePage(ProxyImage.java:107)
at com.sentilla.net.mimeo.Mimeo.process_outputs(Mimeo.java:501)
at com.sentilla.net.mimeo.Mimeo.run(Mimeo.java:790)
at java.lang.Thread.run(Thread.java:613)
6:35:22: mimeoImageComplet: 600949431; {binHashId=600949431, user=josevnz, mimeoSlot=1, imageData=com.sentilla.net.mimeo.ProxyImage$Slingshot@7d51a6, host=auyan.local, binary=com.sentilla.net.mimeo.ProxyImage$Slingshot@7d51a6, size=2450, date=Sat Oct 18 06:15:51 EDT 2008, name=com.sentilla.mote.clientservices.ClientServices}


Curiosamante esto comenzó a ocurrir después de un parche de seguridad liberado por Apple hace poco. Sin emnargo no puedo probar que esten relacionados. Voy a probar desde Windows.

Buscar en otros sitios:

Blogalaxia:, ,
Technorati:, ,
To2blogs:, ,
Del.icio.us:, ,

Etiquetas: , ,

miércoles, octubre 15, 2008

Buglabs: Hardware y software de código abierto




Gracias al Geek extraordinario Sebastian Delmont tuve la oportunidad hoy de ir a visitar a la gente de Buglabs, quienes estaban haciendo un OpenHouse en sus oficinas en Soho. Realmente después de todas las noticias negativas en el sector financiero (incluyendo el día de hoy en el cual las acciones de todas las compañías volvieron a caer) fué increíblemente refrescante hablar de tecnología y no de negocios.

Corcho es corcho ;)

¿Pero y que es Buglabs? Buglabs es una compañia la cual fabrica componentes modulares basados en el modelo Open Source. Si, el concepto es innovador ya que tanto el software como el hardware son abiertos. El módulo principal corré Linux y encima de eso tienes Java o si quiere código nativo compilado con GCC.

Si no entendió nada no se preocupe. Lo explico de nuevo, un poco diferente esta vez: Es como tener un lego en el cual cada ladrillo agrega funcionalidad nueva al juguete. La diferencia es que el lego corre Linux y se puede programar en Java.

Buglab demo, improvised camera
Esta demostración era una camara improvisada usando módulos buglabs, la cual mandaba fotos a un servidor web usando web services en una red Wifi


La plataforma es muy interesante. No sólo se tiene acceso directo a Linux y Java en el aparato, sino que además es modular (por ejemplo ya venden acelerómetro con sensores de movimiento combinados, GPS, camara digital, Wifi, entre otros). También cuenta con un IDE basado en Eclipse lo cual lo hace idóneo si usted es un desarrollador de Java.

Linux console on Buglab
¡Si, corre Linux y Java + AWT!


Al verlo usted podría pensar que es muy similar a Android. Sin embargo esta plataforma va más allá, ya que la compañía está en capacidad de incluir varias máquinas virtuales en su producto. El sólo hecho de combinar módulos sin necesidad de soldadura y contar con Java como lenguaje de desarrollo lo hace muy interesante como herramienta de enseñanza y aprendizaje, o para el desarollo de aplicaciones a la medida (el sitio web oficial cuenta con una colleción de demostraciones hechas con el producto).

Sin embargo Buglabs no sólo corre Java sino que usted puede utilizar GCC para compilar su código nativo. No pregunté pero no veo imposible tener Python, Ruby o Perl dentro del dispositivo (ciertamente Shell scripting viene grátis con la aplicación de terminal que viene instalada).

Buglab demo, improvised camera
¿No es un poco caro por $300.? Pienselo bien antes de responder, más bien pregunte cuanto cuesta un telefono desbloqueado


La base cuesta un poco más de $340 dolares, y cada modulo cuesta por encima de $20. La camara improvisada con Wifi mostrada arriba en la foto cuesta un poco más de $500 (ya que es una combinación de varios modulos), así que debe estarse preguntando, ¿no es más barato comprarse un Sentilla Perk o Arduino?

Yo creo que el precio de este producto va a bajar una vez que la demanda suba (debe haber producción en masa). Es muy temprano para criticar el precio (habrá que esperar unos 8 meses más o menos), sobre todo si te tiene en cuenta el alto valor que tiene una plataforma tan versátil. Lo otro es que una comparación con Sentilla o Arduino es injusta ya que este no es sólo un dispositivo empotrado que puede ser programado en Java, sino una plataforma completa que corre Linux en la cual hasta se puede compilar código.

Lo reto a que haga esto en su IPhone o teléfono con Android :)

Buglab CEO and team
De izquierda a derecha: Buglab CEO y equipo de desarolladores


Entonces la pregunta obligada es ¿cuales son las posibilidades de supervivencia de una compañía la cual sólo hace herramientas para "aficionados"?. El CEO de Buglab me comentó que ellos no están cerrados a ninguna posibilidad, y que el "Bug" es una prueba de lo que ellos pueden hacer como compañía (hospitales, seguridad, etc. Cualquiera que necesite una plataforma modular a la medida con suficiente poder).

Yo de verdad creo que estamos al frente de una compañía que ofrece un servicio único, basado en el modelo Open Source. El hecho de poder ofrecer servicios basados en una plataforma abierta implica que sus clientes se sentiran más comodos ya que no estarán casados con un sólo proveedor de hardware / software (como es el caso de Apple con sus excelentes productos los cuales son todos cerrados).

Si usted es paciente, ya verá otras compañias haciendo modulos compatibles con buglabs. No veo como no se pueda desarrollar un ecosistema alrededor de este producto, tal cual y como ha pasado con Arduino.


buglab modules
El verdadero poder de los "Bug" es su modularidad, incluyendo estandares abiertos


La visita fué super agradable, los "chamos" de buglabs nos hicieron sentir como en casa mientras nos mostraban sus juguetes. Es raro que alguien te invite a jugar a su casa en estos días, y más si tienen juguetes sofisticados, por lo cual no queda otra más que darles las gracias y esperar que hagan más eventos invitando gente a sus cuarteles generales (revicen el website, ellos tienen un blog muy activo con información útil).

Ya para finalizar, los dejo con las fotos de mi visita a los cuarteles de Buglab en SOHO. Espero que las disfruten y se hagan una idea de lo que vimos allí.

Buscar en otros sitios:

Blogalaxia:, , , , , , , , ,
Technorati:, , , , , , , , ,
To2blogs:, , , , , , , , ,
Del.icio.us:, , , , , , , , ,

Etiquetas: , , , , , , , , ,

lunes, octubre 13, 2008

AguaYFuego: Sitio de Source Forge está listo

Bueno, lo prometido es deuda, el código ya está disponible en CVS. Las instrucciones de como obtener el código de CVS están aquí.

Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , , ,

domingo, octubre 12, 2008

AguaYFuego: Es oficial

AguaYfuego
AguayFuego, concepto inicial


Si, es oficial. AguaYFuego ahora tiene un hogar en Sentilla Labs. Pienso colocar el código fuente completo bajo la licencia Apache en Source Forge usando CVS (más adelante migraré a subversion pero estoy más interesado en echar código que en aprender otra herramienta para controlarlo).

Esten pendientes, estoy esperando que me aprueben la página del proyecto en Source Forge.

Enlaces:
NOTA: Si quiere colaborar en el proyecto ponganse en contacto conmigo. La idea es divertirse y aprender haciendo :)

Buscar en otros sitios:

Blogalaxia:, , ,
Technorati:, , ,
To2blogs:, , ,
Del.icio.us:, , ,

Etiquetas: , , ,

domingo, octubre 05, 2008

Sentilla: Agua y fuego



Estoy escribiendo una pequeña aplicación para Sentilla Labs. Comencé primero escribiendo una pequeña aplicación para calibrar el sensor (algo que no habia resuelto muy bien hace tiempo atrás). Lo cierto es que primero usted debe averiguar la temperatura del sitio del cual piensa sacar las medidas, usando quizas el termostato de su casa y luego corre esto desde Sentilla Works (el ide de Eclipse):

 1 package com.kodegeek.app.aguayfuego;
2
3 import static javax.measure.unit.SI.CELSIUS;
4
5 import javax.measure.quantity.Temperature;
6
7 import com.sentilla.system.Leds;
8 import com.sentilla.system.LedsDriver;
9 import com.sentilla.system.PropertyDriver;
10 import com.sentilla.system.Sensor;
11 import com.sentilla.system.SensorDriver;
12
13 /**
14 * Calibrate the sensor using a known value
15 * @author josevnz@kodegeek.com - http://kodegeek.com
16 */

17 public final class SensorCalibration {
18
19 /**
20 * Persist the calibration temperature to
be used by all the applications
21 * @throws InterruptedException
22 */

23 public static void motemain() throws InterruptedException {
24 Sensor <Temperature>tempSensor =
SensorDriver.create("temp", Temperature.class);
25 Leds leds = LedsDriver.create();
26 float calibratedTemp = 25.0f; //
Put here your known temperature

27 leds.toggle(1);
28 double delta = calibratedTemp -
tempSensor.read().doubleValue(CELSIUS);
29 PropertyDriver.create("aguayfuego_temp_init", 8)
.writeDouble(delta);
30 leds.toggle(0);
31 }
32 }


Guardamos el valor en la lína 49. Una vez que usted corra este programa (solamente hace falta si sospecha que la temperatura de su cuarto ha cambiado mucho) entonces puede comenzar a capturar las temperaturas de nuevo. Fijense en el detalle de como se envia la temperatura, más el "delta" el cual contiene el ajuste:
 1 package com.kodegeek.app.aguayfuego;
2
3 import static javax.measure.unit.SI.CELSIUS;
4 import javax.measure.quantity.Temperature;
5 import com.sentilla.net.Mac64Address;
6 import com.sentilla.net.Sender;
7 import com.sentilla.net.SenderDriver;
8 import com.sentilla.system.Leds;
9 import com.sentilla.system.LedsDriver;
10 import com.sentilla.system.PropertyDriver;
11 import com.sentilla.system.Sensor;
12 import com.sentilla.system.SensorDriver;
13
14 /**
15 * Simple class to capture temperature using
Sentilla JMote
16 * @author josevnz@kodegeek.com - http://kodegeek.com
17 */

18
19 public final class TemperatureCapture {
20 public static final int WAIT_TIME = 1000;
21
22 /**
23 * Get the temperature reading
24 * @throws InterruptedException
25 */

26 public static void motemain()
throws
InterruptedException {
27 Sensor <Temperature>tempSensor =
28 SensorDriver.create("temp", Temperature.class);
29 Leds leds = LedsDriver.create();
30 long id = Mac64Address.getLocalAddress().longValue();
31 Sender sender = SenderDriver.create("local");
32 short count = 0;
33 TempMessage datamsg = new TempMessage();
34 datamsg.moteId = id;
35 leds.toggle(0);
36 double delta =
PropertyDriver
.open("aguayfuego_temp_init").readDouble();
37 while(true) {
38 count++;
39 datamsg.count = count;
40 datamsg.tempCelcius =
tempSensor
.read().doubleValue(CELSIUS) + delta;
41 leds.toggle(1); // Show the user the sensor is alive
42 sender.send(datamsg);
43 Thread.sleep(WAIT_TIME);
44 }
45 }
46 }

La línea 36 lee el delta y la 40 lee la temperatura con la corrección. Después la transmitimos en la linea 42.

Finalmente el cliente que lee los valores de los sensores (Esta es una aplicación común y silvestre de Java):
 1 package com.kodegeek.app.aguayfuego;
2
3 import java.io.IOException;
4 import java.util.Map;
5 import java.util.concurrent.ConcurrentHashMap;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8 import com.sentilla.host.client.HostClient;
9 import com.sentilla.net.Receiver;
10 import com.sentilla.net.ReceiverDriver;
11
12 /**
13 * Simple command line client that collects
the temperature readings of
14 * all the motes in the wireless network.
15 * @author josevnz@kodegeek.com - http://kodegeek.com
16 */

17 public final class TemperatureClient {
18
19 private TemperatureClient() {};
20
21 private static final Logger log =
Logger.getLogger(TemperatureClient.class.getName());
22
23 static {
24 log.setLevel(Level.INFO);
25 }
26
27 private static final int MOTE_WAIT = 3000;
28
29 /**
30 * Helper class that captures the temperature
comming from the sensor
31 * @author josevnz
32 */

33 class TemperatureCaptureHelper {
34 public final Map <Long, TempMessage>sensorMap;
35
36 /**
37 * Parametric constructor
38 * @param sensorMap Map to store all the captured temperatures
39 */

40 public TemperatureCaptureHelper(Map <Long, TempMessage>sensorMap) {
41 this.sensorMap = sensorMap;
42 }
43
44 public void capture() {
45
46 // Connect to the Sentilla server
47 HostClient client = new HostClient();
48 try {
49 client.connect();
50 log.log(Level.INFO,
String.format("Connected to sensor gateway at %s,
capturing temperatures"
,
client.getHost()));
51 Receiver receiver =
ReceiverDriver.create(TempMessage.class);
52 while(true) {
53 receiver.setReceive()
.submit().block(MOTE_WAIT);
54 if (receiver.isDone()) {
55 TempMessage tmsg
= receiver.getData();
56 sensorMap
.put(tmsg.moteId, tmsg);
57 log.log(Level.INFO,
String
.format("Update from sensor id: %s, %.3f",
tmsg.moteId, tmsg.tempCelcius));
58 } else {
59 log.log(Level.INFO, "No update");
60 }
61 }
62 } catch (IOException ioExp) {
63 log.log(Level.SEVERE,
"Severe error, response will be dropped"
, ioExp);
64 } finally {
65 try {
66 if (client != null)
67 client.disconnect();
68 } catch (IOException ioExp) {
69 log.log(Level.SEVERE,
"Error while closing sensor connection", ioExp);
70 }
71 }
72 }
73 }
74
75 /**
76 * Collect the statistics from all the motes
77 * @param args Unused
78 */

79 public static void main(String[] args) throws Throwable {
80 log.log(Level.INFO, "Starting TemperatureService");
81 final TemperatureClient instance = new TemperatureClient();
82 try {
83 final Map <Long, TempMessage>temperatures
= new ConcurrentHashMap<Long, TempMessage>();
84 TemperatureCaptureHelper helper =
instance
.new TemperatureCaptureHelper(temperatures);
85 helper.capture();
86 } catch (Throwable throwbl) {
87 log.log(Level.SEVERE,
"Fatal error, no recover possible"
, throwbl);
88 throw throwbl;
89 }
90 }
91 }

Una vez resuelto esto puedo comenzar con la nueva aplicación. El código no está disponible en CVS, en algún momento colocaré todo para que se lo bajen. Mientras tanto les dejo esto para que se entretengan :)

Buscar en otros sitios:

Blogalaxia:, , , ,
Technorati:, , , ,
To2blogs:, , , ,
Del.icio.us:, , , ,

Etiquetas: , , , ,