jueves, 24 de abril de 2008

Derribando árboles caídos

Me doy un tiempecito así en fa porque me traen en friega, para compartir con ustedes una nota que me llamó mucho la atención.

El día de ayer creo que todos en el DF sentimos los vientos, la lluvia y etc. Adicionalmente el siempre hábil servicio de Telcel se puso pacheco un rato. Amablemente informan que solo en el Sur, pero yo estaba en Santa Fé y me pasó, y supe de personas de Neza que también tenían ese problema. En fin. Lo gracioso no es eso.

Imaginen la escena siguiente: Llegas de un día cansadísimo, un poco harto, con miedo porque muchísima información se perdió. Triste y enojado por haberte pasado de lanza con la personita más importante para tí. Hablas para pedir perdón, más o menos se arreglan las cosas, estás por dormir y te pones a leer el universal en el Blackberry, y encuentras esta nota (clic para ver más grande):

O sea, están de acuerdo en que no es para menos que cagarse de la risa? En cuanto la leí dije: Esto se bloggea mañana. Encontrarlo en la versión de PC no fué fácil, pero aquí está.

¿Cómo chingao se derriba un árbol caído? Si ya está caído, ¿cómo lo derribas? ¿Le pegas cuando está en el piso? ¿Lo re-tiras? ¿Lo levantas y lo avientas? ¿O qué carajo? Mi intelecto no alcanza para entender lo profundo del pensamiento creativo-informativo del redactor de esta nota, que dejaría pendejo a Cortázar con su surrealismo!!

Jajajaja, saludos :P .

jueves, 17 de abril de 2008

Sistema de Descargas Movistar

Hola,

Sólo para recomendarles a los clientes de Movistar Mexico visitar la nueva versión del Servicio de Descargas.

Ahí podrán bajarse tonos, imágenes, vídeos, juegos java y un buen de monadas más para su celular.

La dirección es http://descargas.movistar.com.mx . Registrense, jueguen con el, vean que onda... Y si algo está medio de la gaver pos me avisan XD .

Saludos,

Enviado desde mi oficina móvil BlackBerry® de Telcel

martes, 15 de abril de 2008

QBitTorrent

Hola a todos,

Con mucha alegría (y un poco en chinga), les anuncio de la reciente liberación oficial de qBitTorrent. Un cliente GPL en QT para torrents (te cae :|???) optimizado para Linux pero disponible para múltiples plataformas.

El equipo de desarrollo, pruebas y traducción hemos trabajado duro por ya algunos años, para poder tener la versión oficial 1.0 al punto en todos los sentidos.

Pueden bajar el programa de aquí:

http://www.qbittorrent.org


Saludos,

domingo, 13 de abril de 2008

Agregando el jsessionid a un HTML estático


Entre las múltiples razones para odiar Internet Explorer 7 está que por defecto deshabilita las cookies, así que mantener una sesión en Java requiere que siempre hagamos encodeURL o metamos en tags de c:url o html:link todos los vínculos.

Esto está chido cuando usamos servlets o jsp's pero, ¿qué pasa con los HTML's estáticos? Por ejemplo en OpenCms, en un artículo o un contenido tipo news.

La solución más sencilla que encontré es tomar un archivo de fuente javascript generado mediante JSP o bien embeder en la página principal del template, una variable javascript que almacene el sessionId. Por ejemplo:


<script type="text/javascript">
var jsess="<%=session.getId()%>";
</script>

Y después metemos esto con JavaScript a nuestros links, ejemplo:

<a href="http://www.blogger.com/shalala/" id="coso">Ir a shalala</a>
<script type="text/javascript">
var miLink = document.getElementById('coso');
miLink.href = miLink.href + ';jsessionid=' + jsess;
</script>


Obviamente se puede jugar con esto, por ejemplo:

<script type="text/javascript">

var links = document.getElementsByTagName("a");

for(i = 0; i < links.length; i++)

links[i].href = links[i].href + ";jsessionid=" + jsess;

</script>


Aunque esto no lo recomiendo mucho porque nunca sabemos si se pondrán links externos, y en ese caso poner un jsessionid puede causarle problemas a otros sistemas.

Espero que encuentren esta información de utilidad. Saludos,

Usando Commons Email para Gmail y OpenCms

Este es un ejemplo sencillo de cómo usar la librería Commons Email para Gmail o Google Apps, y OpenCms.

Primero, para usar Commons Email con Gmail en general basta con concer los parámetros del SMTP de Gmail. El ejemplo que pongo a continuación es un fragmento de una aplicación en JSE-Swing que hice para una peque especial ^_^ . Lo que hace la aplicación es mandar un correo desde una cuenta de Sitio Libre (con Google Apps) a otra cuenta de Sitio Libre que a su vez está sincronizada con mi Blackberry, así que es una manera, veámoslo así, de enviar "SMS's gratuitos" colgándonos de la funcionalidad del Blackberry.

Previamente se carga un archivo properties con el nombre de usuario, el password y la cuenta de destino del email. El textArea donde viene el mensaje lleva por nombre jTextArea1. Las partes principales del envío del correo son:

SimpleEmail se = new SimpleEmail();

se.setTLS(true); //Gmail requiere TLS para el login

se.setSmtpPort(587);

se.setHostName("smtp.gmail.com");

se.setAuthentication(p.getProperty("remitente.usuario"), p.getProperty("remitente.password"));

se.setMsg(jTextArea1.getText());

InternetAddress ia = new InternetAddress();

ia.setAddress(p.getProperty("destino.direccion"));

Collection c = new ArrayList();

c.add(ia);

se.setTo(c);

se.setSubject("El subject va aqui...");

se.send();


Y yap. Como siempre disculpen el formato pero es culpa del pinche blogger. Si algo truena, nos mandará una EmailException así que tenemos que capturarla o aventarla y manejarla. ¿Por qué el InternetAddress y la Colección? El método setTo de Email/SimpleEmail solo acepta una colección, que debe contener elementos tipo InternetAddress.

Es importante destacar que en este caso, el Commons Email que utilizamos para poder ponerle TLS es la versión 1.1 . La 1.0 no tiene esta funcionalidad y eso puede hacernos ruido cuando queremos enviar un mail mediante OpenCms (que al menos en la versión 7.0.3, usaba el 1.0 para crear los CmsSimpleEmail y CmsHtmlEmail). A eso iré en un rato, no sin antes recordarles que para que Commons Email funcione bien, es necesario tener en nuestro classpath el mail.jar de Sun y el Java Activation Framework si nuestra JDK es menor a 1.6 .

Las personas observadoras podrán constatar que el portal de Polo Polo Online usa Google Apps también, es algo que queremos dejar de hacer pero por el momento seguimos haciéndolo. Al principio estuve en un gran problema al ver que la versión de OpenCms 7.0.3 no usaba Commons Email 1.1 y por ende no existía una forma rápida de usar el setTLS. Sin embargo si actualizamos todas las librerías anteriores, podemos jugar con el mecanismo de herencia y polimorfismo de Java para lograrlo.

Ok entonces, si el método por cualquier razón no es visible desde la subclase, sino solo desde la superclase, ¿qué hacemos? Sencillo. Iniciamos el objeto declarando el tipo de la superclase, y lo instanciamos como la subclase. De esta forma no necesitaremos la autenticación ni el host (ya que éstos están provistos por el archivo de configuración de OpenCms, que carga si no me equivoco el constructor de Cms****Mail), únicamente el puerto SMTP y el TLS deberán ser llamados a mano. Ejemplo:


SimpleEmail csm = new CmsSimpleMail();

csm.setTLS(true);

csm.setSmtpPort(587);

csm.addTo(cmsuser.getEmail());

csm.setSubject("Polo Polo Online - Activa tu cuenta!");

csm.setMsg("Mensaje de activacion de cuenta");

csm.send();


Y ya. Chequen también otra cosa: dado que el método addTo del CmsSimpleEmail no requiere forzosamente una colección, sino que también puede trabajar con direcciones en String, no es necesario crear una nueva colección al mandarlo llamar. ¿Vieron que no puse ni host, ni autenticación? Estos datos son cargados automáticamente del archivo de configuración de OpenCms a menos que los pongamos de forma literal para, por ejemplo, distribuír la carga en los correos que se envían haciéndolo desde diferentes cuentas - recuerden que Google Apps por defecto solo deja enviar 500 correos al día - .

Espero que a alguien le sean de utilidad estos datos. Cualquier duda pueden poner un comment.

Saludos,

miércoles, 9 de abril de 2008

Leer desde la consola con Java

Jerry está aprendiendo Java, y me pidió que le explicara cómo leer datos desde la consola.

Primero que nada debo decir que no le veo ningún caso a leer datos desde la consola. En general cuando es una aplicación de consola y necesito variables introducidas por el usuario, lo que hago es pasarlas con -D mediante un bash script con read o bien en vez del -D con parámetros en la llamada al jar o a la clase. En el peor de los casos si son persistentes guardarlos en un properties. De entrada pocas veces uso Java para consola y cuando lo hago puedo contar con los dedos de la mano las veces que he necesitado leer directamente desde consola en una clase. Aunque claro, me tocó hacerlo cuando estaba aprendiendo.

No existe (o no conozco, no sé si en las últimas versiones de Java ya exista y yo ni me enteré) una función predefinida (tipo cin, scanf, read, etc...). Lo que se tiene que hacer es crear una función tal que, en este caso, lea un String en base a un BufferedReader, un InputStreamReader, y el System.in . Una función estática en una clase usada para pura utilería (o bien, que también incluya métodos de conveniencia para parseo a tipos de datos primitivos) tal vez sea lo más recomendable. La función que le hice a Jerry fué la siguiente:

public static String leerLinea() {
String x = "";
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
x = br.readLine();
} catch (IOException ex) {
System.err.println("No se pudo leer por alguna razon pacheca...");
}finally{
try {
br.close();
} catch (IOException ex) {
System.err.println("No se pudo cerrar el br");
}finally{
try {
isr.close();
} catch (IOException ex) {
System.err.println("No se pudo cerrar el isr");
}
}
}
return x;
}


Pinche formato feo de esta cosa... En fin... Y se tienen que importar las clases:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
Yaaaaaaaa seeeeeeeee yaaaaaaaa seeeeeeee que esos mensajes tan "descriptivos" de las excepciones como que no van (menos el de la razón pacheca xD )... Pero bueno, si es algo formal lo de menos es cambiarlo.

Espero que sea de utilidad para alguien... Que lo dudo, pero ojalá.

Saludos,

Introducción a la sección Java

Hoy - a menos que me quede dormido en el intento - pienso inaugurar la sección de Java y programación del blog. Bueno, esta madre no usa secciones, pero sí los tags y shalala. ¿Qué pasará con mi blog en Javanes? Obviamente lo seguiré usando, pero los temas sencillos y levecitos pienso postearlos aquí y los más divertidos ponerlos en ambos.

Espero que lo disfruten (a final de cuentas creo que es lo único que sé hacer bien =P).

Saludos,

domingo, 6 de abril de 2008

De la ley antitabaco...

... O como hacer encabronar a una persona tan linda tierna y pacifista como yo ( a huevo!! ).

A partir de esta semana los defeños estamos enfrascados en medio de una polémica ley que inhibe el placer de fumar en todos los lugares públicos cerrados. Y eso estaría bien si no fuera por el hecho de que transgrede varias normas, si no legales, al menos lógicas.

Lo primero que dice mi padre es que "se están violando nuestros derechos". No estoy en lo absoluto de acuerdo con él, eso sería válido si se nos impidiera fumar en las calles, parques o peor aún en nuestras casas. A los consumidores no se nos viola ningún derecho pero a los prestadores de servicios sí. Explico.

Dado que al final del día cuando vas a un restaurante, un bar o algo parecido no dejas de estar en propiedad privada y solo pagas por la prestación de servicios y no por el lugar como tal, son éllos quienes en teoría deciden qué se puede y no hacer en su establecimiento. Algo que no me parecería justo tampoco, sería que a huevo deban tener un área para fumadores. Lo que se está madreando con esta ley es la libertad de decir qué se puede y no se puede hacer en sus establecimientos. La ilegalidad de algo debería estar basado en un daño comprobado y evitable hacia los demás. Pero ahí es donde la verborrea puritana entra en acción.

Si bien la mayoría de las muertes en el país son producto de enfermedades relacionadas con el cigarro, éllo no significa que sean causa del cigarro. El efecto nocivo de inhalar CO2 del cigarro es muchísimo menor al de inhalar la porquería de aire de la Ciudad de México. Dejando de lado las fábricas y los automóviles particulares, ¿qué onda con el transporte público? No nos podemos hacer de la vista gorda ante los micros que echan más humo que todos sus pasajeros fumadores juntos en un día. Pero claro, en cuanto se pone el gremio de los microbuseros punketo por querer rennovar unidades, pues yaaaaaaaa ahíiiii lo jineteaaaaaaamos y nos hacemos como que no pasa nada.

¿Qué podemos aprender de la situación anterior? Que la unión realmente hace la fuerza. ¿Cuántas manifestaciones y paros se hicieron contra la ley estúpida esta? ¿Cuántas se harán contra el Hoy no Circula Sabatino? Hasta donde tengo conocimiento, ni-ma-dres. Y eso que se presentaron estudios muy sólidos apoyando la rennovación de unidades del transporte público concesionado, y no ocurrió lo mismo contra las 2 estúpidas leyes anteriores que EN REALIDAD nos pasan a partir la madre.

El pueblo no se une, no se organiza, la gente con intereses comunes como que les vale madre si pasa o no pasa una ley. Está desencantado del sistema político y legal mexicano, con justa razón. Pero si tenemos casos de éxito donde una ley ( aún las buenas ) no han pasado por la unión y chantaje a los buscavotos - y qué lastima que se tenga que llegar a ésto -, ¿por qué no nos unimos todos?

De nuevo, agradeciendo infinitamente a la jodida idiosincracia mexicana, me despido...

Posts relacionados