Archivo

Archivo para junio, 2008

Trucos UNIX: Depurando protocolos a mano: ¿Qué usar?

Lunes, 30 de junio de 2008
Comentarios desactivados

Hace ya un mes comencé a trabajar en un proyecto nuevo para la compañía en la cual trabajo, el cual consiste en crear una aplicación en donde los analistas de mercado reciben transacciones de los corredores de bolsa. Dado que el número de nombres que la compañía maneja en esta categoría ha crecido de manera substancial, hay que automatizar el proceso.

La bolsa de valores con la cual hacemos las transacciones tiene una especificación del protocolo, escrita originalmente en C, usando “Structs” y sockets con UDP/TCP. La aplicación requiere (por razones demasiados numerosas para explicar aquí) que el código sea escrito en Java.

¿Todo bien verdad? Bueno, lo más difícil fué implementar todo el protocolo (pese a que nosotros requeríamos solamente una pequeña parte). Además como ustedes se imaginan, los bancos de inversiones están fortificados detrás de varios niveles de protección como “Firewalls”, “IDS” y demás y la conectividad entre nuestro entorno de desarrollo y en nuestro caso la bolsa de valores no fué bien configurada.

Para rematar, no tenia manera de usar tcpdump en la máquina en donde corria el servidor (convertirse en root usando SUDO es un proceso laaargo y burocrático) así que mis opciones eran esperar ayuda del grupo de redes, o mientras tanto depurar yo mi protocolo.

Las especificaciones del protocolo requieren que inicialmente nos conectemos usando UDP, para luego usar TCP, lo cual hace inefectivo el truco de conectarse al puerto de la máquina usando telnet (sólo trabaja con TCP el cual es orientado a conexión) . Otro detalle es que el saludo inicial es una conexión pasiva (la bolsa de valores enviaba un broadcast cada 30 segundos).

¿Qué hacer?

Bueno, Linux de nuevo salva el día con su ejercito de herramientas gratuitas. En eso caso utilicé NetCat (nc) y dado que el protocolo era ASCII pude ver con claridad que al menos ellos estaban enviando sus paquetes y que nosotros estabamos filtrando información. En mi caso escribí algo como esto:

auyan:~ josevnz$ nc -n -v -v -v -u -p 12345 -s 127.0.0.1 -l
listening on [127.0.0.1] 12345 …

¡Super fácil!. Con esta información me ahorré tiempo y resolvimos el problema en cuestión de minutos en vez de horas…

Así que ya sabe, la próxima vez que necesite enviar o recibir paquetes arbitrarios en TCP o UDP dele un vistazo a NetCat :)

Buscar en otros sitios:

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

Sin categoría , , , ,

¿Quien quiere ganarse un Sun Spot?: Rogando en Facebook

Domingo, 29 de junio de 2008
Comentarios desactivados

Ya el anuncio tiene como una semana y puedo dejar de pensar que quizas me lo gane, después de todo sólo se han inscrito 88 personas hasta el momento (%1.1, me he ganado loterías más difíciles).

Seria genial comparar al Sentilla Perk y al Sun Spot, mano a mano :)

Buscar en otros sitios:

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

java , ,

Generando gráficos de temperatura en Swing

Sábado, 28 de junio de 2008
Comentarios desactivados

Sentilla Swing temperature display - Time Series
Ahora usted puede saber la temperatura de la sala de mi casa :)

Bueno, seguí jugando con Sentilla Perk y Swing; Esta vez terminé de acomodar al cliente gráfico que muestra los datos en una tabla, al mismo tiempo que genera gráficos de temperatura capturados por cada sensor (código fuente aquí).

Aún tengo un par de problemas:

  • No he calibrado los sensores, uno de ellos siempre mide en el rango de las 20 grados Celcius mientras que el otro está en los 30.
  • JFreeChart me tiene confundido con la gráfica, tengo un problema extraño de refrescamiento de pantalla.

Sentilla Swing temperature display - raw data in table
No es perfecto, pero los resultados son interesantes

Sin embargo no me tomó mucho tiempo montar esto, y cada vez se pone más divertido. Voy a preguntar a otros desarrolladores más expertos en el foro de Sentilla a ver que tal :)

Buscar en otros sitios:

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

kodegeek , , , ,

¡Resulta que ahora Java es socialista!

Lunes, 23 de junio de 2008

Bueno, hay ciertos temas que uno da por acabados (si, el enlace a mi articulo es del 2005), sobre todo cuando hay evidencias de sobra que indican que debería ser así, y sin embargo estos vuelven a aparecer. En este caso es el empeño de Satanizar al lenguaje (el cual ahora es Open Source y cuenta con una distribución completamente funcional en Fedora Core, llamada IceTea). El anuncio me llegó por el grupo de Yahoo SoftwareVen:

Como parte del trabajo de estudios de las tecnologías libres el Centro
Nacional de Desarrollo e Investigación en Tecnologías Libres -
CENDITEL [0] ha publicado un documento titulado “Pertinencia de la
tecnología Java por y para el Estado Venezolano” [1].

El mismo esta a disposición para el análisis y discusión sobre la
temática, sean bienvenidos a participar y compartir ideas en el foro
de discusión de CENDITEL [2] en la temática destinada para esto
llamada “Publicado documento tecnología Java” [3].

[0] http://www.cenditel.gob.ve/FundacionCenditel
[1] http://www.cenditel.gob.ve/files/u1/PertinenciaJavaVenezuela.pdf
[2] http://www.cenditel.gob.ve/foros/
[3] http://www.cenditel.gob.ve/foros/viewtopic.php?p=28#28

Atentamente

T.S.U. Leonardo Caballero
E-Mail: leonardocaballero at gmail.com, lcaballero at linuxmail.org

Debo comenzar diciendo que me fastidia de sobre manera el fanatismo de los programadores. No sólo Leonardo Caballero se empeña en pintar a Sun como la corporación que se va a encarga de quitarle a Venezuela su autonomía tecnológica sino que además ignora (a estas alturas) la existencia de implementaciones completamente funcionales como IceTea y Classpath en Linux.

Este trabajo insiste en mezclar nacionalismo, tendencias politicias como el socialismo pero sin llegar a proponer alternativas ya que sólo se limita a nombrar ciertos proyectos de software libre como Linux, Ruby, Subversion entre otros. Incluso se atreve a catalogar al lenguaje como mediocre en diseño:

El tema se planteó recientemente en la lista de discusión de SOLVE, y allí José Luis Rey (2008) argumentó que el lenguaje de programación Java “es un lenguaje
mediocre, que no permite implementar técnicas de programación, que todo programador debería conocer y dominar. Lo peor es que ahora estoy seguro de que eso es así por imposición”. Señala que aunque el diseñador de Scheme fue contratado en la concepción de Java, en el resultado final se eliminaron todas las capacidades poco convencionales como la herencia múltiple, para evitar que el lenguaje fuera demasiado avanzado. Así, Java la mediocridad de java no es casual sino intencionada5. Además, el lenguaje Java cuenta con un sistema de tipo de datos estático y simplista que no permite el manejo de características más
avanzadas como metaprogramación o programación funcional.

El pasaje está genial. Ignora completamente el hecho de que Java fué diseñado para simplificar el desarrollo de aplicaciones y que es una mejora sustancial sobre su predecesor, C++. Por ejemplo:

  • Java es un lenguaje mediocre: Seguro, soporte de un API completo como Swing para el desarrollo de interfaces gráficas (más completo que TK y más fácil de usar que Motiff), soporte de Threads, Networking y Garbage Collection dentro del mismo lenguaje. Ah, y que puede correr en cualquier dispositivo ya que todos los sistemas operativos importantes tienen una máquina virtual de Java. Si se refiere a que ciertas caracteristicas sintacticas del lenguaje no están allí (como Schema) es un asunto diferente. ¿Porqué caer en los excesos? La comparación no es objetiva, y eso es malo.
  • Datos de tipo estático: Creo que estos dos han pasado demasiado tiempo escribiendo scripts. Yo en particular me siento comodo sabiendo de antemano de que tipo de datos son mis variables y que el compilador me pueda decir que hay asignaciones equivocadas. Si quiero utilizar scripts con su sintaxis relajada, entonces tengo BeanShell (Java pero con sintaxis más relajada, sin declaración de variables), JRuby, Jython, etc. Si, mis “scripting languajes” corriendo sobre una máquina virtual conocida y probada :)
  • Herencia múltiple: ¿Usted realmente la necesita? Con un diseño cuidadoso y el uso de Interfaces se consigue lo mismo. Herencia múltiple no es mala (de hecho es muy útil) pero cuando se usa hay que ser cuidadoso, sabiendo que es lo que se quiere al final. También ignora el hecho de que utilizar herencia todo el tiempo para extender código es malo y que existen otros patrones de diseño que favorecen más la estabilidad del código en contra de cambios de la clase padre como la agregación (por ejemplo, el patrón de diseño Decorator).
  • No soporta programación funcional: Java no es un lenguaje de programación funcional, sin embargo hay implementaciones de lenguajes funcionales que corren sobre la máquina virtual de Java como Scala. En particular es irritante como los detractores de Java se empeñan es decir que “one size fits all” (un sólo tamaño para todo) cuando deberian ser más pragmaticos diciendo que hay herramientas para cada problema.

Si usted alguna vez ha desarrollado código del lado del servidor o cliente usando Java, se encontrará agradecido que el lenguaje tenga un manejo elegante de Threads, Networking (con varios protocolos), y sobre todo el manejo de memoria automático usando Garbage Collection.

Todo el mundo sabe que Java no es perfecto y la escogencia del lenguaje a la hora de resolver un problema sigue dependiendo de la tarea, presupuesto y nivel de experticia de quienes van a desarrollar la solución. También en las Universidades deberian seguirse enseñando no uno sino varios lenguajes de programación, entre ellos C y C++ (pueden decir lo que quieran de esos dos lenguajes pero Linux, manejadores de dispositivos y muchas otras cosas aún están escritas en esos lenguajes).

¿Pero que tiene que ver eso con la “muestra independencia tecnológica”? Si usted lee con cuidado el articulo, se dará cuenta que el escrito es un arroz con mango de tecnología, sazonada con politica. Nada le prohibe a Venezuela desarrollar su propio lenguaje de programación, e incluso su propia implementación del lenguaje Java, como hizo la gente de Kafee:

Kaffe is a clean room implementation of the Java virtual machine, plus the associated class libraries needed to provide a Java runtime environment. The Kaffe virtual machine is free software, licensed under the terms of the GNU General Public License.

El nuevo OpenJDK o Kafee no cuentan con ninguna restricción de exportación, ya que están protegidos por la licencia GPL. Entonces, ¿que es lo que detiene a Venezuela en el desarrollo de una máquina virtual o lenguaje de programación?

Esa es la pregunta incomoda que ninguna de estas personas quiere responder.

No importa si usted decide no utilizar Java. Pero al menos hagalo por las razones correctas, entre ellas porque no es la mejor herramienta para el problema que quiere resolver, no porque se lo dijeron en la escuela y usted se tomó el “cool aid” sin pensarlo dos veces.

Buscar en otros sitios:

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

java , , , , ,

Bajate firefox 3 y ayuda a batir el Record Guiness, Junio 17

Martes, 17 de junio de 2008
Comentarios desactivados

Ayuda a batir el Record Guinness bajándote Firefox3 hoy Martes 17 de Junio:

Download Day 2008

Buscar en otros sitios:

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

Sin categoría , ,

Midiendo la temperatura con Sentilla: Un cliente gráfico

Miércoles, 11 de junio de 2008
Comentarios desactivados

Bueno, no tengo mucho tiempo para escribir estos días (la semana ha estado muy movida en el área de finanzas), así que les traigo una pequeña pieza de código en la cual capturo la temperatura de los sensores de Sentilla (sí, código viejo) para ponerla de inmediato en un cliente escrito en Swing, el cual utiliza un TableModel el cual dispara las actualizaciones usando un Thread que corre en paralelo.

Sin embargo la noticia principal es que este blog se va de vacaciones, por dos meses. Así es, se me ha presentado una oportunidad para la cual tengo que enfocar todos mis esfuerzos si quiero salga bien.

Si, cero Facebook, cero Google reader con mis RSS, cero blog, cero distracciones. Como dicen por acá “do or die” :)

Así que no se desesperen, comenten mucho y escriban correos (yo les prometo responder) y sobre todo, no se preocupen por el blog, este no va a desaparecer ;)

Se despide por los momentos,

- José, “KodeGeek”

Buscar en otros sitios:

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

java, kodegeek , , ,

Aprendiendo a programar Sockets con Java: TCP/IP Sockets in Java

Viernes, 6 de junio de 2008
Comentarios desactivados

El libro “TCP/IP Sockets in Java Practical Guide For Programmers“, de Menneth L. Calvert y Michael J. Donahoo es compacto, con buenos ejemplos y sobre todo va al grano. Comparado con otros libros que solamente se pasean por al API de Java (y se enfocan en HTTP y RMI) este se va por lo básico y bien.

Si tiene el dinero, de verdad que vale tenerlo en la biblioteca de su casa. Muy útil.

Buscar en otros sitios:

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

java, kodegeek , , ,

Sentilla tiene soporte para OSX y Linux Ubuntu

Viernes, 6 de junio de 2008
Comentarios desactivados

Ya sacaron el beta. Del foro oficial de Sentilla:

NEW! Sentilla Work (Beta) for Mac and Linux

Downloads of the Beta release of Sentilla Work for both Mac OS X and Ubuntu Linux are now available for current Perk customers at the following URLs:

  • Sentilla Work (Beta) for Linux
  • Sentilla Work (Beta) for Mac OS X

Go to the URL for your OS of choice and login as

XXXXXX

and use the password

ZZZZZZZZ

After you download the release to your computer and expand the files, refer to the Release Notes included with the builds for installation instructions (page 10) and important notices. You do not need to reinstall mote firmware for this release; your current Perk firmware will work on both the Mac OS X and Linux platforms.

Note that you cannot install firmware with the Mac OS X release.

Christine at Sentilla

Los instalaré en algún momento el fin de semana, vamos a ver que tal se porta.

Buscar en otros sitios:

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

kodegeek , , , ,

Cerrando el RSS de Globovision, no vale la pena contentar a sus usuarios

Martes, 3 de junio de 2008

Bueno,

Así que después de tener errores una y otra vez y de comprobar que mi aplicación aún funcionaba desde otros servidores, y que mi proveedor de hospedaje no me estaba bloqueando (después de lidiar con ellos durante 3 días ya que se me ocurrió la brillante idea de hospedar el blog con una cuenta sin acceso directo al shell) me decidí a contactarlos directamente y preguntar que pasaba:

Saludos cordiales,

Desde hace tiempo que disfruto de su sitio web y sus noticias, sin embargo noté que su sitio web no ofrece el formato RSS (el cual permite suscripción a sus titulares cada vez que hay actualización) y por ello escribí un programa el cual muestra el contenido del mismo en ese formato:

http://kodegeek.com/2009/03/rss-de-globovision-est-roto-ii-java-al.shtml

Sin embargo desde el día de ayer dicho programa está siendo bloqueado en su sitio web y me pregunto si es posible que el acceso a la página pueda ser re-establecido o si alguien puede trabajar conmigo para verificar que es lo que está mal.

Muchas gracias de antemano.

José Vicente Núñez Zuleta, Kodegeek.com

Desgraciadamente nunca obtuve respuesta. Así, ¿que puede hacerse en estos casos?

La solución técnica es fácil saltarse este tipo de restricciones (usando ‘proxiescon http y re-escribiendo el ‘user agent’ del código cada vez que me conecto), así que ni corto ni perezoso le agregué esa funcionalidad a mi programa:

/usr/java/jdk1.5.0_01/bin/java -DproxySet=true -DproxyHost=XXX.ZZZ.YYY -DproxyPort=8080 -DUser-Agent “Kodegeek1.0/Es Hora de que escriban un RSS” -classpath /home/kodeg2/jars/RSS-1.0.jar:/home/kodeg2/jars/jdom.jar:/home/kodeg2/jars/rome-0.9.jar:. com.kodegeek.blog.rss.GlobovisionHtml2Rss /home/kodeg2/public_html/rss/globovision.rss

Además de ponerle esta nueva línea de código:

URLConnection connection = globovisionURL.openConnection();
connection.setRequestProperty(“User-Agent”, System.getProperty(“User-Agent”, USER_AGENT));
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

Probé todo esto en 10 minutos. Básicamente ahora me conecto desde diferentes direcciones IP simulando diferentes navegadores. No es perfecto y aún puede ser bloqueado, sin embargo estos cambios van a requerir que ellos hagan más cambios, lo cual me lleva al siguiente punto:

¿No es más fácil programar un RSS en Globovisión para luego dárselo a sus usuarios que bloquear mi programa (a estas alturas sólo puedo asumir eso)?

Sin embargo no vale la pena el esfuerzo, al menos de mi parte. Es decir, si en vez de mejorar el producto lo que quieren hacer es alienar a sus usuarios entonces simplemente se leen las noticias en otro sitio y listo, sin más complicaciones (el Universal.com ofrece noticias de Venezuela con RSS desde hace años. Bueno, ellos fueron los pioneros en Venezuela así que no soprende mucho).

Así que a mis queridos lectores por ahora no pienso seguir ofreciendo el RSS de Globovision. Si piensan que mi programa es útil entonces envienles un correo electronico, pidiéndoles que desbloqueen a KodeGeek o mejor aún que implementen un RSS (¿habrán escuchado de web 2.0?)

En fin, los dejo con algunas memorias las cuales me recordaron lo divertido que fué trabajar en esto. Yo por ahora tengo otras ideas las cuales les quiero mostrar en el blog, ninguna de ellas asociadas a los riesgos de web scrapping :D

Buscar en otros sitios:

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

java, kodegeek , , , , ,

A %d blogueros les gusta esto: