Archivo

Archivo para marzo, 2005

Jugando con Yahoo 360

Jueves, 31 de marzo de 2005

Yahoo 360

Gracias al pana Marcel conseguí una invitación a Yahoo 360, el nuevo servicio de Blog (en Beta) de Yahoo. He estado jugando con él y me parece que tiene muchas opciones.

Ya invité a todos mis panas. Una analista de Forrester tiene un articulo de el servicio (mejor ella que yo para explicar todo lo que tiene adentro).

Para ser sincero, ya me está ladillando Blogger con sus limitaciones. Lo otro es que yo tengo una cuenta de correo Yahoo paga, utilizo Ymessenger con mi familia y amigos, tengo una cuenta ‘pro’ de Flickr (ahora de yahoo), así que quizas mi Blog se mueva para allá, al menos que el servicio mejore.

Así que si quiere una nueva cuenta de este servicio y si es un visitante regular de mi blog, dejenme un comentario con una dirección de correo de verdad para poder invitarlos.

Sin categoría

Fotos de la despedida

Jueves, 31 de marzo de 2005

Aquí les traigo unas fotos de la despedida, con unos panas de la (ex) oficina. Entre cervezas y chistes, recordamos buenos tiempos.

Temple Bar, Stamford Ashish and Titus
Ashish and Titus

Temple Bar, Stamford Titus, Balaji, José Rene
Joe Titus, Ashish and José René

Temple Bar, Stamford Hengel and Beata
Hengel y Beata

Lo bueno es que los voy a seguir viendo, ! pues viven en Stamford :) !

Sin categoría

JavaVen: Ofertas de empleo

Jueves, 31 de marzo de 2005


Para aquellos que estan buscando trabajo en Venezuela, hay varias ofertas de trabajo en el grupo ‘JavaVen‘. Echense una pasadita, y si quieren colocar algo allí, están invitados :) .

Sin categoría

¿Qué le pasa a Veneblogs?: ¿Problemas con el DNS?

Jueves, 31 de marzo de 2005

El dominio de Veneblogs pareciera estar viegnte, se vence sólo hasta dentro de un mes:

[josevnz@XXX josevnz]$ whois veneblogs.com
[Querying whois.internic.net]
[Redirected to whois.opensrs.net]
[Querying whois.opensrs.net]
[whois.opensrs.net]
Registrant:
Private
16120 South Post Rd #102
Weston, FL 33331
US

Domain name: VENEBLOGS.COM

Administrative Contact:
Ortiz, Afrael afrael@vexweb.com
16120 South Post Rd #102
Weston, FL 33331
US
+1.9549076050
Technical Contact:
Ortiz, Afrael afrael@vexweb.com
16120 South Post Rd #102
Weston, FL 33331
US
+1.9549076050

Registration Service Provider:
Not So Stupid, namemaster@notsostupid.com
http://www.notsostupid.com/
This company may be contacted for domain login/passwords,
DNS/Nameserver changes, and general domain support questions.

Registrar of Record: TUCOWS, INC.
Record last updated on 23-Mar-2004.
Record expires on 18-May-2005.
Record created on 18-May-2003.

Domain servers in listed order:
A.NS.NOTSOSTUPID.COM 216.66.18.71
B.NS.NOTSOSTUPID.COM 216.66.18.72

Domain status: REGISTRAR-LOCK

Pero la resolución en DNS para veneblogs.com no funciona:

[josevnz@XXX josevnz]$ host veneblogs.com
;; connection timed out; no servers could be reached
[josevnz@linux0037 josevnz]$

¿Seran mis servidores de DNS?. Me voy hardcore y le pregunto directamente al servidor de nombres de Veneblogs:

[josevnz@XXX josevnz]$ dig A.NS.NOTSOSTUPID.COM -t A www.veneblogs.com

; <<>> DiG 9.2.3 <<>> A.NS.NOTSOSTUPID.COM -t A www.veneblogs.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31462
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; QUESTION SECTION:
;A.NS.NOTSOSTUPID.COM. IN A

;; ANSWER SECTION:
A.NS.NOTSOSTUPID.COM. 14234 IN A 216.66.18.71

;; AUTHORITY SECTION:
NOTSOSTUPID.COM. 14234 IN NS b.NS.NOTSOSTUPID.COM.
NOTSOSTUPID.COM. 14234 IN NS A.NS.NOTSOSTUPID.COM.

;; ADDITIONAL SECTION:
b.NS.NOTSOSTUPID.COM. 14250 IN A 216.66.18.72

;; Query time: 1 msec
;; SERVER: 10.1.10.3#53(10.1.10.3)
;; WHEN: Thu Mar 31 08:52:36 2005
;; MSG SIZE rcvd: 100

;; connection timed out; no servers could be reached

(haga la prueba con Yahoo, por ejemplo dig A.NS.NOTSOSTUPID.COM -t A www.yahoo.com y funciona).

No se realmente cual es el problema, pero espero que los panas de VeneBlogs lo acomoden pronto ;)

Sin categoría

Guerrero Jaguar II: Mi última visita al datacenter de la compañia, moviendome en nueva dirección…

Jueves, 31 de marzo de 2005

Guerrero Jaguar II
¡Nunca te metas con un guerrero jaguar!.

Ya no voy a trabajar más en la compañia con la cual pasé los últimos 3 años. Un incidente que ocurriera hace unas semanas atrás motivó que decidiera moverme en una nueva dirección. Se hizo justicia.

Balaji datacenter
El pana Balaji, uno de los administradores de el equipo de la compañia, Madras, India.

El mundo está en constante movimiento; A mi me tomó 3+ años darme cuenta que necesitaba moverme en otra dirección. Una de las cosas que me impulso es cierto nivel de aislamiento (yo era la persona más experimientada de toda la compañía en cuanto a administración de Unix), además de que ya no quedaban más problemas interesantes para resolver, al menos para mí (después de todo, ¿de que sirve hacer la ratonera perfecta si siempre estamos cazando a el mismo ratón todos los días?)

Closeup Dell 1750

Fueron 3+ años de trabajo duro; Cuando llegué a esta compañia no tenían un sistema de monitoreo en pie (hoy en día bastante sofisticado, lo digo sin ninguna modestia), además de que faltaban múltiples servicios, además de que tampoco había automatización de procesos críticos. También logre involucrarme en el desarrollo de aplicaciones (como el procesamiento de datos financieros para MBS) las cuales serán usadas aún mucho tiempo después de mi partida. Hoy tienen un entorno sólido, con el cual pueden resolver problemas.

New York comming back from datacenter
Devolviendonos de el datacenter, rumbo a Stamford

Es increiblemente reconfortante crear algo desde cero, ver como crece y que otros servicios se levantan alrededor. Definitivamente como ‘empleado #3′ dejo un legado atrás, y es bueno poder caminar en otra dirección y aún poder mirar atrás.

De las malas experiencias: No voy a hablar de eso, ya que el único valor de las cosas malas es recordarlas para que no se vuelvan a repetir y para aprender de ellas. Además, el futuro es prometedor y las energías las estoy invirtiendo en donde debe ser. Además, si necesitan de mi ayuda seguro podrán preguntar por mi en el futuro.

SBC Stamford

Shekar, Ashish, Yo

SBC Stamford
Yo, Hengel, José René

SBC Stamford
Hengel, José René, Joe Titus, Shekar, Yo

Así que les doy las gracias a la compañia por la oportunidad de construir algo nuevo, les deseo suerte y ahora me dirijo al siguente desafio, un banco de inversiones en algún lugar en Manhattan :D .

¿Quien iba a pensar que iba a terminar trabajando en Wall Street?

El Asensor, salida de 107 Elm Street

Esto definitivamente va a cambiar nuestras vidas (Vero y yo); No creo que siga publicando articulos tan a menudo y seguramente la naturaleza de estos va a cambiar; Por otro lado espero aprender cosas nuevas e interesantes las cuales podré compartir con todos ustedes.

Sin categoría

Echando código: Más de Flickr con Java y XML-RPC

Miércoles, 30 de marzo de 2005

Bueno, después de resolver mi problema usando Perl y al API de Flickr decidí hacerlo ahora con Java; Pero en esta ocasión quise irme a bajo nivel ya que siempre me ha llamado la atención el protocolo XML-RPC. Para procesar las peticiones y respuestas de XML-RPC utilizaré el proyecto de Jakarta XML-RPC.

Decidí empezar despacio, y como es la primera vez que uso el API, sólo quiser obtener mi identificador de usuario numérico usando mi nombre registrado (en esta caso josevnz). Lo primero que hay que hacer es familiarizarse con el uso de los tipos de datos de XML-RPC y su correspondientes tipos en Java. Una vez hecho esto y viendo el tipo de salida que nuestra librería en Java debería generar podemos empezar con el código:

   1:package com.blogspot.elangelnegro.flickr;   2:   3:import java.util.ResourceBundle;   4:import java.util.Properties;   5:import java.util.Vector;   6:import java.util.Hashtable;   7:   8:import java.net.URL;   9:  10:import java.io.IOException;  11:  12:import org.apache.xmlrpc.XmlRpcClient;  13:import org.apache.xmlrpc.XmlRpcException;  14:  15:/**  16: *   17: *    18: *   19: *  20: * For more information, please check the following URLS:  21: * <ul>  22: * <li> <a href="http://www.flickr.com/services/api/misc.urls.html">Flickr URL format</a>  23: * <li> <a href="http://www.flickr.com/services/api/">Description of the API</a>  24: * <li> <a href="http://www.flickr.com/forums/help/5304/">The problem I had to solve :)</a>  25: * <li> <a href="http://ws.apache.org/xmlrpc/client.html">Apache XML-RPC</a>  26: * </ul>  27: *  28: */  29:public final class FlickrBackup {  30:      31:        private static final ResourceBundle BUNDLE =  32:                ResourceBundle.getBundle(FlickrBackup.class.getName());  33:              34:        private static final Properties CONFIG = System.getProperties();  35:      36:        /**  37:         *   38:         * @param args Command line args  39:         * <ul>  40:         * <li>args[0] Is the Flickr user  41:         * <li>args[1] is the password for that account  42:         * <li> args[2] is the directory where we will save all the photos  43:         * </ul>  44:         * @throws Exception if there is any error while downloading the pictures  45:         */  46:        public static void main(String [] args) throws Exception {  47:                        Vector params = new Vector();  48:                        Hashtable struct = new Hashtable();  49:                        XmlRpcClient xmlrpc = null;  50:                        try {  51:                                xmlrpc = new XmlRpcClient(  52:                                        BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.url")  53:                                );  54:                              55:                                struct.put(  56:                                        "api_key",  57:                                        BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key")  58:                                );  59:                                struct.put(  60:                                        "username",  61:                                        args[0]  62:                                );  63:                                params.add(struct);  64:                                String result =  65:                                        (String) xmlrpc.execute ("flickr.people.findByUsername", params);  66:                                System.out.println(  67:                                        BUNDLE.getString("com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages") +  68:                                        ": " +  69:                                        result  70:                                );  71:                        } catch (XmlRpcException xmlexp) {  72:                                throw xmlexp;  73:                        } catch (IOException ioexp) {  74:                                throw ioexp;  75:                        } finally {  76:                                struct.clear();  77:                                params.clear();  78:                        }  79:        }  80:      81:}

Y el correspondiente archivo de propiedades:

   1:com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.url=http://www.flickr.com/services/xmlrpc/   2:# Old key: 24e618762a874d9ff507d255dd95f854   3:com.blogspot.elangelnegro.flickr.FlickrBackup.xmlrpc.key=XXXXXX   4:# Connecting as   5:com.blogspot.elangelnegro.flickr.FlickrBackup.main.messages=Connecting as

La corrida de ejemplo es:

[josevnz@localhost FlickrBackup]$ java -jar dist/FlickrBackup-1.0.jar sdelmont
Exception in thread “main” org.apache.xmlrpc.XmlRpcException: User not found
at org.apache.xmlrpc.XmlRpcClient$Worker.execute(XmlRpcClient.java:457)
at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:163)
at com.blogspot.elangelnegro.flickr.FlickrBackup.main(FlickrBackup.java:64)
[josevnz@localhost FlickrBackup]$ java -jar dist/FlickrBackup-1.0.jar novato
Connecting as:

Novato

[josevnz@localhost FlickrBackup]$

Hmmm, no me devuelve una estructura sino el XML. Me sale usar un DOM para procesar el XML.

Por cierto, buscando en Google, me conseguí esta presentación de Power Point y Flickr. Realmente interesante, no importa si usted es un desarrollador o un administrador de redes ya que tiene para satisfacer la curiosidad de todos. Definitivamente Flickr es la compañia de la cual todo el mundo está hablando (después de Google) y ahora que Yahoo la compró, su futuro financiero está asegurado.

No pienso colocar el código esta vez. Voy a completarlo y pienso mostrar la aplicación completa en cuanto la tenga lista.

Sin categoría

Trucos Unix: ¿Como revizar si los módulos de un grupo de scripts en Perl están instalados?

Martes, 29 de marzo de 2005

Bueno, un buen amigo en la compañia me llegó con el siguiente problema (bueno, más bien yo de metido le pregunté a la hora de el almuerzo):

Yo: Epale chamo, ¿nos vamos a almorzar?. Me estoy pudriendo de el hambre…
Pana: Dame un chance, resulta que ‘fulanito’ se fué de vacaciones y dejó un montón de scripts en este servidor y no sé si los terminó de instalar.
Yo: No entiendo, ¿qué te falta por revizar?
Pana: Bueno, para empezar no sé si todas las dependiencias están allí….
Yo: Nada pana, dejame enseñarte un truco bien pendejo y así nos vamos a almorzar rápido

Si usted recuerda, en Perl usted puede validar si un script tiene la sintaxis correcta así:

perl -c script.pl

Pero además de eso, Perl va a revizar si los módulos requeridos está instalados

Así que lo que le dije al pana fué que buscara con ‘find’ todos los scripts de Perl y que los revice uno por uno:

find ./directorio -name ‘*.pl’ -type f -exec perl -c {} \;

Al rato nos fuimos a almorzar, una vez comprobado que todos los scripts estaban bien, en menos de 5 minutos :)

Sin categoría

AOL Latinoamerica: Se rompió la última burbuja…

Lunes, 28 de marzo de 2005

Resulta que American Online, división Latinoamerica está desangrada y posiblemente va a cerrar sus puertas (no están buscando más fondos):

Unless AOL Latin America finds a buyer for its assets, it will have to close down operations, the Fort Lauderdale, Florida-based company said in a regulatory filing with the U.S. Securities and Exchange Commission (newsweb sites).

AOL Latin America, founded as a joint venture between America Online Inc. and the Cisneros Group at the start of the Internet bubble in 1998, has since struggled to become profitable.

La noticia completa está aqui. No es la primera vez que pasa con portales de Internet en Latinoamerica, alguno de ustedes recuerda sitios ya muertos como ¿’loquesea.com’ o ‘cvfuturo.com.mx’?

Por supuesto Google tiene más sobre el asunto.

Sin categoría

Echando ćodigo: Como hacer Ping a Tecnorrati usando Java y XML-RPC

Lunes, 28 de marzo de 2005

Me puse a jugar ayer un poquito a ver como era el asunto de hacerle un ping a Technorati, usando el API de XML-RPC. Para ello me baje las librerías de el proyecto de Apache XML-RPC y después de leer las instrucciones en el sitio de Technorati el programa estaba listo (en serio, me tomó 20 minutos contando la bajada de las clases y leyendo como preparar un ‘request’).

El código que hace el ping, en Java (o mejor lo llamamos ‘HolaMundo’):
–>

   1:import org.apache.xmlrpc.XmlRpcClient;
   2:import java.util.Vector;
   3:import java.util.Hashtable;
   4:/**
   5: * Esta clase muestra como hacer un Ping a Technorati, usando Java y XML-RPC
   6: * @author Jose V Nunez Zuleta.
   7: * Blog: El Angel Negro - http://elangelnegro.blogspot.com
   8: * @version 0.1 - 03/27/2005
   9: */
  10:public class Ping {
  11:
  12:        /**
  13:         * Procesamiento de la linea de comandos
  14:         * @param [] args
  15:         * @throws Exception If there is a problem ping Technorati
  16:         * @since 0.1
  17:         */
  18:        public static void main(String [] args) throws Exception {
  19:                XmlRpcClient xmlrpc =  null;
  20:                Vector params = new Vector ();
  21:                try {
  22:                        xmlrpc =
  23:                        new XmlRpcClient ("http://rpc.technorati.com/rpc/ping");
  24:                        params.addElement ("El Angel Negro");
  25:                        params.addElement ("http://elangelnegro.blogspot.com");
  26:                        Hashtable result = (Hashtable) xmlrpc.execute
  27:                                ("weblogUpdates.ping", params);
  28:                        if ((result.get("flerror") != null) &&
  29:                        ! ((Boolean) result.get("flerror")).booleanValue()) {
  30:                                System.out.println("Ping realizado con exito!");
  31:                        } else {
  32:                                System.err.println("Fallo el ping: " + result);
  33:                        }
  34:                } catch (Exception exp) {
  35:                        throw exp;
  36:                } finally {
  37:                        params.clear();
  38:                }
  39:        }
  40:}

El programa es trivialmente corto y funciona bien, y es una maravilla que no tenga que preocuparme yo por parsear el XML que me viene de vuelta :)

java

Echando código: Haciendo data mining con PostgreSQL y Java, Parte II

Lunes, 28 de marzo de 2005

En un articulo anterior yo les comentaba como hacer parsing the una bitacora de un servidor web Apache utilizando Java y PostgreSQL; También les comentaba que con SQL tenemos una flexibilidad increible para obtener y manipular los datos. Sin embargo, para que la presentación de los datos luzcan un poco más profesionales deberíamos usar un generador de reportes; De esa manera trabajamos menos y podemos repetir los resultados con otro tipo de reportes.

¿Porqué utilizar un generador de reportes? La razón más sencilla es que usted tiene cosas más importantes que hacer que generar un reporte que se vea bonito, usted debe concentrarse en solucionar problemas como administrador; Por otro lado, usando un generador de reportes usted puede fácilmente controlar el aspecto de sus datos (convirtiendolos en información) mientras utiliza lo obtenido ya sea para solucionar problemas o para comunicarle algo importante a sus clientes en un lenguaje que ellos puedan entender.

Empecé evaluando varias aplicaciones. La primera que traté de usar se llama ‘DataVision‘.

Yo tuve unos cuantos problemas usandolo con PostgreSQL y JDBC:

  • Manejo de el tipo de datos CIDR. No es texto, así que si quieren ver la dirección IP de la máquina en cuestion, deberán convertirlo a texto utilizando la función host (por ejemplo: select host(ip_addr) from http_log). Para más información, vean aquí las rutinas de manipulación de datos de tipo CIDR.
  • Bajese la última versión del manejador de JDBC para su base de datos. Yo tuve problemas con una versión vieja, asi que me busque el manejador para PostgreSQL 7.4.

El manual de DataVision es bastante preciso en cuanto a como proceder para obtener los reportes y para controlar la apariencia de los resultados. La mejor forma de probarlo es convertir uno de los SQL que escribimos anteriormente al reporte. Voy a utilizar uno sencillo:

  -- Count all IP addresses (including repetitive hits from the same IP address) that have visited the site for each day  SELECT log_date as Date ,count(ip_addr) AS "Visits"  FROM http_log  GROUP BY log_date  ORDER BY log_date DESC;

En mi caso, salida de esta consulta me retorna lo siguiente:

Date Visits
2005-03-25 246
2005-03-24 868
2005-03-23 743
2005-03-22 780
2005-03-21 824
2005-03-20 673
2005-03-19 644
2005-03-18 311

El primer golpe al usar esta herramienta, es que no soportaGroub By‘ en el SQL. Si usted quiere agrupar los datos, deberá dejar que sea Datavision quien lo haga. Eso puede que sea un inconveniente serio, dependiendo de la complejidad de el SQL. Como no puedo utilizar ‘group by’, entonces debo cambiar mi estrategia para contabilizar los totales por día; Eso no me agrada mucho, ya que yo quisiera concentrarme lo menos posible aprendiendo la herramienta, y más tiempo resolviendo el problema que tengo a la mano, asi que lo mejor es seguir buscando.

Revisando SourceForge otra vez, consigo que existe otro generador de reportes llamado ‘JasperReports‘. Parece ser que esta herramienta cuenta con un soporte inmenso de la comunidad Open Source, y decido bajarme una interfaz gráfica para la herramienta llamada Ireport.

Usando un ‘Wizard’ obtuve mi primer reporte en 30 minutos. Increible, justo lo que yo quería, sin limitaciones en el SQL:

iReport logreport screenshot

Lo que sale en la pantalla es el reporte, el cual puede ser guardado en varios formatos (HTML, PDF, etc). Increiblemente conveniente, flexible. Justo lo que un SA con tiempo limitado necesita.

La creación de el reporte se limito a escoger la fuente de datos (no limitada a bases de datos), el diseño de la plantilla, compilarla y finalmente ejecutarla. Luego de correr el reporte, este se puede guardar en el disco duro en el formato de salida que se desee, además de que la plantilla de el reporte se puede guardar para una futura ocasión.

Puede bajarse mi reporte desde aquí.

Sin categoría