Comparativa I: Introducción

La primera comparativa consistirá en la creación de un servidor y un cliente, ambos multihilo, del protocolo echo en tres lenguajes de programación: Java, Ruby y C# (utilizando el Proyecto Mono).

Introducción: el protocolo echo.

El protocolo echo es muy (y cuando digo muy, me refiero a muy) sencillo: simplemente devuelve todo los datos enviados al servidor sin modificación alguna. Fue utilizado para probar redes IP, siendo sustituido por ping y traceroute.

El puerto, tanto TCP como UDP es el número 7.

Fuente: Wikipedia.

Su carencia de fe resulta molesta

“Se traslada a este prisionero desde el bloque uno uno tres ocho” dice Luke Skywalker en La Guerra de las Galaxias: Una nueva esperanza.
Ayer me compré la edición limitada de la primera trilogía. Sí, esa en la que viene como “extra” la versión estrenada en cines. La verdad es que aún no he podido ver las tres, de hecho mientras escribo estoy terminando de ver la primera.

Resulta que ese uno-uno-tres-ocho forma parte del título del primer largometraje de George Lucas: THX-1138. Así pues, me he puesto a indagar sobre ello y he encontrado esta página. En ella se descubre, ¡oh, qué casualidad! que es la primera vez que aparece la palabra Wookie en el cine.

Como todos (aquellos que hayan visto la película) recordarán, poco después caen en un triturador de basura. Lo que no todos recordarán es que el número de dicho triturador es 3263827. Este número me ha resultado curioso y me he puesto a investigar. Lo primero, como siempre, es saber su factorización en números primos. Por el Teorema fundamental de la Aritmética, dicha factorización es única, salvo el orden. Al descomponerlo, resulta curioso que sólo tenga dos factores primos: el 7 y el 466261 (no soy el primero en fijarme en esto). No creo que George Lucas haya estado haciendo números, pero resulta que 1138 también se descompone en dos factores primos: 2 y 569.

Tengo mucho tiempo libre Q.E.D.

Como aserto lógico es irrebatible

Y es que, un político de Dakota del Sur, ha dicho: “Si una joven es religiosa y virgen, se le puede permitir que aborte”.

Ahora, por 25 pesetas, cosas a explicarle a este señor:

  1. Lo que le contaron de la semillita cuando era pequeño es mentira, y la técnica de P. Tinto tampoco vale.
  2. Si se refiere a estirpar un tumor, informarle que no es un aborto, aunque en este caso, si la chica lo quiere como a un hijo, no se vaya a pensar usted que es por ser “religiosa y virgen”, sino simplemente es porque es gilipollas.

Hala, ahora os toca a vosotros decir chorradas.

P.D. Agradecer a Maki el envío de esta noticia y a Raúl el título de la misma.

Su bala sin plomo, gracias.

Leo en Barrapunto y en Astroseti lo que viene siendo la demostración de que Greenpeace y demás sociedades ecologistas dan mucho más miedo que Amnistía Internacional y demás sociedades humanitarias. Sí, después del éxito de la gasolina sin plomo, el barro sin plomo, soldaduras sin plomo y demás cosas sin plomo llegan las balas sin plomo. Su lema podría ser algo así como “Cuida del Medio Ambiente: Acaba con el otro medio.”

White and Nerdy.

Hoy toca hablar de Weird Al Yankovic (aquí la entrada en inglés). Weird Al es un humorista que muestra su humor mediante canciones. Es famoso por canciones como Amish Paradise, Like a Surgeon, Smells like Nirvana, Polka Power, Fat (parodiando Bad de Michael Jackson) o el Saga Begins. También participó en las tres películas de Agárrame como puedas, y en Mafia, estafa como puedas.

Hace poco ha sacado nuevo disco y su primer videoclip es White and Nerdy (letra aquí). Y éste es su video.

Saludos desde el proyecto Anti-GOTAM.

Redirección de salida en Java

En los exámenes de mis últimos alumnos, a los que aún debo matar por suspender, tenían que hacer un servidor. Dicho servidor debía tener una GUI básica para mostrar diversos mensajes. A pesar de que en este ejemplo no era necesario, me pregunté cómo hacer para poder poner dichos mensajes en el mismo TextComponent desde varias clases sin tener que ponerlo como variable de instancia en todas ellas.

La solución es sencilla, sólo se necesita crear una nueva clase que extienda de OutputStream y sobreescribir algunos métodos, básicamente, los de escritura. Lo primero, y suponiendo como nombre de clase TextComponentStream, es crear el constructor.

import java.io.*;
import java.awt.*;
public class TextComponentStream extends OutputStream{
private TextComponent tc;

public TextComponentStream(TextComponent tc){
super();
this.tc = tc;
}

Ahora sólo toca sobreescribir los métodos de escritura. OutputStream tiene tres métodos de escritura: write(byte[] b), write(byte[] b, int off, int len), write(int b). Este último hay que sobreescribirlo, aunque empezaremos por el primero. Para ello miramos en el API la clase String, y veremos que tiene un constructor al que se le pasa los argumentos del primer write y otro al que se le pasan los parámetros del segundo. Así tenemos:

public void write(byte[] b){
this.tc.setText(this.tc.getText()+(new String(b)));
}
public void write(byte[] b, int off, int len){
this.tc.setText(this.tc.getText()+(new String(b,off,len)));
}

Por último, write(int b) se implementaría así:

public void write(int b){
byte[] b1 = {(new Integer(b)).byteValue()};
this.write(b1);
}
}//Cerramos la clase.

Así ya está creada la clase. Ahora, para utilizarla desde cualquier lugar sólo hace falta redireccionar la salida estándar. Para ello se utilizará el método System.setOut(PrintStream p); de la siguiente manera:

System.setOut(new PrintStream(new TextComponent(tc)));

Siendo tc el TextComponent donde queremos mostrar los mensajes. Así, sólo se necesita poner System.out.println("Mensaje"); para que el mensaje se muestre en el TextComponent.