martes, 13 de marzo de 2007

Ojo con los perros policia, no te vayan a morder tus mp3



Pues eso, se ve que en Malasia tienen una nueva arma para luchar contra la piratería. Ni más ni menos que dos perros sabueso que meten sus hocicos en todas partes en busca de CDs y DVDs con contenido pirata (musiquilla y pelis). Se trata de dos labradores hembras de color negro que se llaman "Flo" y "Lucky", y te pueden pillar tus cds piratillas si te les arrimas a acariciarles el morro.
Como podeis ver, se trata de lo último en tecnología, un par de chuchos que te pillan la carga de un avión y en diez minutos te pueden encontrar los cds piratas (así como mearse en tu maleta llena de camisetas de Custo Barcelona).

Ojo, que esto es una noticia de Reuters, no es ninguna "chorrada" (o si). Pues no que sale el ministro de comercio de allí y dice algo así como : [...]la llegada de Lucky y Flo hará de Malasia el primer país del mundo de comprobar la capacidad de los perros para detectar discos ópticos escondidos[...]. Ya veo al resto de países subiéndose al carro del uso de chuchos para luchar contra la piratería.
En un consejo de ministros de un país como, por ejemplo, España algunos ministros están currando en sus business vitales pa la nación, es decir, jugando al remigio y fumando puracos reogados en Chivas... (nótese que se ha respetado la transcripción literal)
- Oye pavo, ¿as visto lo del notas ese de Malasia?
- ¿Lo que?
- El compi de comercio de malasia, que ha sacao un par de perras que en lugar de buscar coca esnifan cds o al revés o algo asín.
- Que s'ha pillao un par de prostitutas? Eso ya lo hacemos nostros desde hace años neng.
- ¡Que no tronco! Un par de chuchos que arrebuscan entre maletas y tal y te pillan los cds piratas y tal.
- ¡¡¡Wala!!! ¿Y funciona o que?
- Pos se ve que sí.
- Pos nene, podríamos meter en el próximo presupuesto lo mismo. Subimos unos milloncejos el presupuesto, que, por supuesto, irá a parar a nuestras buchacas, y usamos los perros de nuestros hijos.
- No se..., los perracos de nuestros niños deben estar ya resfriados de tanto estar de noche en el parque con nuestros hijos. ¿Que harán siempre por las noches en el parque? Ahí, a oscuras.
- Yo una vez oí algo de "mandanga" y "chiflis". Serán juegos. Pero siempre acaban llegando a casa con los dedos un poco quemaos, ¿que no?... Bueno, es igual, ¿lo hacemos o que?
- Pos vale, más pa la saca. Asín, además no podrán decir que no estamos a la última en el tema.
- Pos eso, ya tenemos otra lei. Bueno, dame 4 cartas y pasame la botella.

Trilo rilo...

lunes, 5 de marzo de 2007

Introducción al patrón "peso mosca" con PHP 5


Puesto que estoy un poco pez en esto del PHP, y no me vendría mal aprender puesto que en SmallSquid usamos esta tecnología, voy a colgar o traducir de vez en cuando algún artículo que vea por ahí sobre el tema. Éste, en concreto, lo he sacado de DevShed. Así que vamos allá.

Antes de seguir, aviso a los que no quieren que le "rayen" con cosas densas. Pasad del rollo y mirar algún otro post o id directamente a los tentáculos del chipirón, que siempre hay cosas más interesantes que leer.

Introducción

Entre la considerable variedad de patrones de diseño estructural que se pueden implementar con PHP 4 (y PHP 5), hay uno en particular que merece especial atención. Es de fácil aplicación en el contexto de una aplicación web dada, y ofrece una funcionalidad remarcable cuando se usa para prevenir la instanciación innecesaria de diferentes clases.

Dejadme explicaros brevemente como funciona el patrón flyweight. Esto os dará una mejor idea de cómo y cuando se puede usar.

En pocas palabras, cuando se aplica el patrón "peso mosca", es posible especificar programáticamente que una clase concreta va a tener sólo un número predeterminado de instancias, las cuales son compartidas dentro de la misma implementación. Este simple concepto presenta un beneficio inmediato: previene instanciaciones innecesarias de la clase en cuestión, lo que da un claro aumento del rendimiento en sistemas que deben trabajar con cargas pesadas.

Ciertamente, si vuelves a leer la definición anterior, está claro que una clase "peso mosca" se puede considerar un método directo para mantener la creación de objetos cuidadosamente balanceada.

Sin embargo, esta sesión no está limitada a presentar la aburrida teoría de cómo funciona este patrón. Tendrás la oportunidad de aprender y probar varios ejemplos prácticos relacionados con el patrón, de modo que puedes empezar a aplicarlo rápidamente en tus propias aplicaciones PHP.

Una nota final antes de seguir: todos los ejemplos que verás aquí se harán con PHP5, pero pueden ser fácilmente modificables para trabajar con PHP4 también.


Definir una clase objetivo

Para demostrar una implementación práctica de patrón de diseño "peso mosca" con PHP5, voy a empezar creando una clase objetivo. Esta clase será utilizada por un objeto flywight para mantener las instancias de esta clase limitadas a un número especificado.

Como verás, cualquier intento de crear nuevas instancias de la clase dará como resultado la devolución, al código llamador, del mismo objeto. Ahora, ¿estás empezando a entender como funcionar el patrón? Seguro que sí.


Habiendo explicado la lógica que planeo seguir en este caso, aquí está definición de la clase mencionada.


// define 'TextInputBox' class
class TextInputBox{
private $name;
private $size;
private $maxlength;
// assign default values for properties of input box
public function __construct($name='default_name',$size=16,$maxlength=32){
if(!preg_match("/[a-zA-Z]+/",$name)){
throw new Exception('Invalid value for name property!');
}
if(!is_int($size)||$size<0||$size>32){
throw new Exception('Invalid value for size property!');
}
if(!is_int($maxlength)||$maxlength<16||$maxlength>64){
throw new Exception('Invalid value for maxlength property!');
}
$this->name=$name;
$this->size=$size;
$this->maxlength=$maxlength;
}
// get (X)HTML markup of input text box
public function getHTML(){
return '< type="text" name="">name.'"
size="'.$this->size.'" maxlength="'.$this->maxlength.'" />';
}
}

Como puedes ver, la definición de la clase "TextInputBox" es muy fácil de entender. En pocas palabras, lo que hace esta clase es mostrar una simple caja de texto, que es útil para hacer formularios online.

Ahora que has visto la definición de la anterior clase objetivo, vamos a crear otra. Esta nueva clase será para mostrar un botón de envío normal y corriente, de modo que sea posible construir un formulario de contacto simple programáticamente.

La definición de esta nueva clase se puede ver a continuación, así que presta atención:


// define 'SubmitButton' class
class SubmitButton{
private $name;
private $value;
public function __construct($name='default_name',$value='SendData'){
if(!preg_match("/[a-zA-Z]+/",$name)){
throw new Exception('Invalid value for name property!');
}
if(!preg_match("/[a-zA-Z]+/",$value)){
throw new Exception('Invalid argument for value property!');
}
$this->name=$name;
$this->value=$value;
}
// get (X)HTML markup of submit button
public function getHTML(){
return '< type="submit" name="">name.'" value="'.$this->value.'"/>';
}
}

En este momento, hemos creado dos clases simples que son capaces de pintar diferentes elementos de un formulario web. La cuestión que viene ahora es: ¿cómo ponerlas a trabajar juntas?

Para responder a esto, abajo se puede ver un pequeño script que muestra un formulario de contacto simple usando las dos clases previas, que está formado por tres cajas de texto y el correspondiente botón de envío. Aquí está el código en cuestión:


try{
// instantiate input text box objects
$nameBox=new TextInputBox('name');
$addressBox=new TextInputBox('address');
$emailBox=new TextInputBox('email');
// instantiate submit button
$subButton=new SubmitButton('send');
// display form
echo '<>'."n".'Name '.$nameBox->getHTML().'
'."n".'Address '.$addressBox->getHTML().'
'."n".'Email '.$emailBox->getHTML().'
'."n".$subButton->getHTML()."n".'';
}
catch(Exception $e){
echo $e->getMessage();
exit();
}


Como se ha demostrado antes, el par de clases que se han creado antes se usaron para mostrar un simple formulario de contacto que contiene tres cajas de texto, para que los usuarios puedan introducir su nombre, dirección y e-mail. Hasta aquí todo correcto,¿verdad?

Ahora, planteémonos la siguiente pregunta: ¿Qué pasa si quieres hacer un generador de formularios que sólo crea tres instancias de la clase "InputTextBox" previa, sin importar las veces que intentes instanciar nuevos objetos?

Bién, aquí es donde el patrón flyweight entra en escena. Es posible definir una clase factoría que sólo retorna al código llamador, tres instancias de la misma clase "InputTextBox". Esto implica que la instanciación de objetos estaría completamente equilibrada dentro de la aplicación.

La cosa se está poniendo interesante,¿que no? En las siguientes lineas vamos a ver como crear la clase factoría del patrón. Como dijimos antes, será responsable de devolver tres instancias únicas de la clase “InputTextBox”.


Definir la clase factoría de "peso mosca"


De acuerdo con los conceptos de la sección anterior, aplicar el patrón "peso mosca" es sólo cuestión de definir una factory class que será capaz de retornar al cliente sólo tres instancias de la clase "InputTextBox" que hemos definido previamente.

Para responder a este requerimiento definimos una clase factoria flyweight. Obviamente devuelve tres objetos de cajas de texto al llamador. La definición de esta nueva clase es como sigue:


// define 'FlyweightFormElementFactory' class
class FlyweightFormElementFactory{
private $formElements=array();
public function __construct(){
$this->formElements['name']=NULL;
$this->formElements['address']=NULL;
$this->formElements['email']=NULL;
}
// return only three text input boxes
public function fetchFormElement($elementName){
if($elementName!='name'&&$elementName!=
'address'&&amp;amp;amp;amp;amp;amp;amp;amp;$elementName!='email'){
throw new Exception('Invalid name for form element!');
}
if($this->formElements[$elementName]==NULL){
$this->formElements[$elementName]=new TextInputBox
($elementName);
}
return $this->formElements[$elementName];
}
}

Como puedes ver, la anterior factoría sólo suministra un método, llamado “fetchFormElement(),” el cual es responsable de crear tres instancias de la clase "TextInputBox" creada previamente.

Bien, si usas esta factoría para hacer un formulario de contacto simple, siempre devolverá los mismos objetos input text, no importa cuantas veces es invocada la clase en toda la aplicación. Lógicamente, esto previene las instanciaciones innecesarias de objetos que no son realmente requeridas, aumentando el rendimiento general de cualquier aplicación. Muy bien, ¿no?.

Sin embargo, una vez entiendes cómo funciona la anterior factory, hay que dar otra paso más para demostrar la funcionalidad de la clase.

Por lo tanto, en la siguiente sección vamos a configurar una ejemplo práctico que nos enseñará como usar la factory class para crear un básico formulario online que sólo contiene tres cajas de texto.


Viendo el patrón "peso mosca" en acción

Para demostrar la funcionalidad suministrada por la factoría flyweight que hemos hecho, primero definiremos una generador de formularios genérico para hacer formularios online, y a continuación desarrollaremos un ejemplo en el que se van a poner a trabajar juntas todas las clases.

Como verás en breve, aplicar el patrón de diseño "peso mosca" nos permitirá construir una fromulario de contacto básico que sólo contendrá los tres campos de entrada ya vistos. De acuerdo con la lógica seguida por el patrón, cualquier intento de crear nuevos objetos del formulario será rechazado, manteniendo equilibrada la creación de objetos.

Dicho esto, aquí está la definición que corresponde a la clase generadora de formularios:

// define 'FormGenerator' class
class FormGenerator{
private $method='post';
private $action='processform.php';
private $formElements=array();
public function addFormElement(TextInputBox $formElement){
$this->formElements[]=$formElement;
}
// fetch (X)HTML markup of web form
public function displayForm(){
$html='< method="">method.'" action="'.$this->action.'">';
foreach($this->formElements as $formElement){
$html.=$formElement->getHTML().'<>';
}
$html.='< type="submit" value="Send Data">< /form>';
return $html;
}
}

Ahora échale un vistazo al siguiente ejemplo, que construye el formulario de contacto usando la factory:


// example building a web form using the Flyweight design pattern
try{
// instantiate 'FlyweightFormElementFactory' object
$flyweightFormElemFactory=new FlyweightFormElementFactory();
// instantiate input text boxes
$flyweightNameBox=$flyweightFormElemFactory->fetchFormElement('name');
$flyweightAddressBox=$flyweightFormElemFactory->fetchFormElement('address');
$flyweightEmailBox=$flyweightFormElemFactory->fetchFormElement('email');
// instantiate 'FormGenerator' object
$formGenerator=new FormGenerator();
// add input text objects to form generator
$formGenerator->addFormElement($flyweightNameBox);
$formGenerator->addFormElement($flyweightAddressBox);
$formGenerator->addFormElement($flyweightEmailBox);
echo $formGenerator->displayForm();
}
catch(Exception $e){
echo $e->getMessage();
exit();
}

Como hemos visto, el formulario de ejemplo está hecho usando la funcionalidad de la factoría, cobinando con el generador de formularios. Lógicamente, este proceso es bastante fácil de seguir, y ciertamente no tiene nada de especial.

Sin embargo, mira qué pasa cuando intentamos instanciar una nueva text box:


// try instantiating a different input text box (triggers an exception)
// $flyweightNameBox1=$flyweightFormElemFactory->fetchFormElement('postalcode');

En este caso el script lanza una excepción y se aborta la ejecución del programa. Ahora tenemos otra situación en la que intentamos crear dos text input que se llamen "name". En este caso, el script devuelve dos objetos idénticos:


// instantiate two identical 'name' input boxes
$flyweightNameBox1=$flyweightFormElemFactory->fetchFormElement('name');
$flyweightNameBox2=$flyweightFormElemFactory->fetchFormElement('name');
if($flyweightNameBox1===$flyweightNameBox2){
throw new Exception('Input text boxes objects are the same!');
}

Ahora deberías tener bastante claro como trabaja el patrón peso mos

¿Ya te das cuenta cómo una aplicación PHP puede controlar la instanciación de clases via este útil patrón? Seguro que sí.


jueves, 1 de marzo de 2007

Aquí está la Conservapedia

Pues si, la Conservapedia...
Pues resulta que es una versión alternativa de la Wikipedia en la que se pretende que los hechos históricos lleguen fieles a la realidad a nuestras generaciones posteriores, libres del vandalismo intelectual al que son sometidos en la Wikipedia de toda la vida y bla bla bla...
Vaya, que la Conservapedia es una versión más cerrada y el elitista de la Wikipedia. Como éllos se definen en la página principal: "Una enciclopedia conservadora en la que puedes confiar".
¡¡¡Siii, claaaaaro!!!

Sea verdad o no, no deja de ser una herramienta de información entretenida, donde te puedes pasar un buen rato quitándote la duda de quien era tal o quien era pascual. Por ejemplo, Marc Antony no es el notas ese que hace como que canta y que está liao con la JLo (yeilou, que guay). O la Rosetta Stone puede ser una canción de Tool y el cacho piedra con escritura egipcia gracias a la cual se empezaron a descifrar los jeroglíficos.

De todos modos, hay que decir que la información que proporciona sus entradas es bastante pobre y hasta puede ser de risa (mirar la "abundante" información de los ejemplos anteriores). Otras entradas pueden ser directamente vergonzosas, y para muestra... cuchara de palo: ateísmo.

miércoles, 28 de febrero de 2007

El siguiente valor de una secuencia en DB2

Como de higos a peras hay que hacer algo de SQL (mínimo pero algo) y salir un poco del Hibernate, cuando toca hay que desenpolvar alguna instrucción que normalmente se ejecuta automáticamente.

Por ejemplo, vamos sacar el siguiente valor de una secuencia, ¿ok?.

Si la secuencia se llama ID_MISECUENCIA, para obtener el siguiente valor de la secuencia tenemos lo siguiente:

SELECT NEXTVAL FOR ID_MISECUENCIA FROM SYSIBM.SYSDUMMY1
Pos eso, una chorrada más pal saco.

lunes, 26 de febrero de 2007

Los Pitinikys campeolones!!!

Ahí estamos el F.S. Los Pitinikys, volviendo a ganar la potente liga de invierno de futbol sala de Horta en el grupo E de la 2ª división. La liga ha finalizado y a nosotros nos queda jugar un partido atrasado con el Deportivo BDN. Eso quiere decir que ya somos campeones, y sin estrenar mis botas nuevas que han jubilado a mis pobres Luanvi.
Ha sido una liga disputada, como siempre, a ver qué equipo era menos malo y que cantidad despropósitos podía acumular en menor cuantía.
Si quieres reírte ven a vernos, es como visualizar un episodio de Benny Hill, pero sustituyendo las mujeres en bikini por pavos en mala forma y amenizado con la música los evangelistas que celebran sus misas en la carpa de al lao.

CLASIFICACIÓN GENERAL

F. SALA 2ª DIV. GRUPO E

EQUIPO GF GC DG PJ PG PE PP Pnts
LOS PITINIKYS 59 35 24 16 9 4 3 31
BALLANTEAM 67 39 28 16 9 2 5 29
ULTRAUTO 75 50 25 16 9 2 5 29
SET I MIG 73 49 24 16 9 2 5 29
DEPORTIVO BDN 45 38 7 16 8 3 5 27
EL SOCAVON 64 49 15 16 7 3 6 24
PORTO PI 47 46 1 16 6 3 7 21
F.C. COUTO 39 99 -60 16 3 1 12 10
LA QUINTA 30 94 -64 16 2 0 14 6

Hola CSI Las Vegas VI, adiós Horatio

Bueno, por fin vuelve el majo de Grissom y se va el facha del Horatio. Esta noche empieza la sexta temporada en Tele5 (por el xxxx te la hinco). La verdad es que esperaba este momento desde que terminó la anterior temporada de Las Vegas puesto que el jodío del Horatio, y su manía de no mirar a la peña a la cara, no me caía nada bien.

Sin embargo, uno le acaba pillando cariño al panocho ese y a su pose de piernas abiertas. A ver si vuelven hacer un par de capítulos arrejuntaos los de Las Vegas y los spanglish hablantes de Miami. Lo que a uno no le acaba de cuadrar es la "relación" extraña esa que tiene el notas con el mujerón ese que por lo visto tenía cáncer terminal. Ni un besito, ni un arrumaco ... joder, si la tía quería echar una cana al aire con cualquiera antes de morir ¿no podría haber pillao al pobre notas ese que no se come un rosco y tiene cara de buen pavo (Sr. Wolf o algo así)?

En fin, que he pasao de odiar al panocho a querer ser como él de mayor: cara arrugada, lupas wapas, piernas abiertas en pose de jota y un Hummer para vacilar por ahí con la señora. La parienta se la puede quedar él, que estará mu buena pero era más tonta que un pie.

jueves, 22 de febrero de 2007

Como me molan los libros de ciencia ficción

Pues resulta que últimamente estoy leyendo Olympo: La Caída de Dan Simmons. Éste es uno de mis autores favoritos, y os recomiendo todo lo que podais pillar de él. Bueno, de él, de Orson Scott Card, de Greg Bear y alguno más que debo tener rulando por mi librería.

Una de las cosas con las que más disfruto es con las "idas de olla" sobre física. Bueno, al final, más que física se trata de metafísica. Es como cuando estamos los informáticos (soy un capullo de esos) hablando de nuestros temitas. En medio de una conversación de este tipo a veces me abstraigo de la chachara e intento "escuchar" lo que estamos diciendo como si no fuera un informático de las narices. Cuando me pasa eso no puedo pensar más que: "menudas gilipolleces sin sentido podemos llegar a decir". Pero aún así, uno disfruta con esos temas.

Pues una cosa parecida me pasa de vez cuando cuando leo este tipo de libros. Os pongo el ejemplo que me ha hecho escribir esta sarta de tonterías. Es un extracto del libro que he nombrado al principio:
"[...]He hecho algunos estudios preliminares en el ordenador cuántico de la nave -continuó Orphu-. Cuando se representa la conciencia humana como el fenómeno de frente de onda que realmente es, se halla el factor en terabytes de los datos cuánticos qubit en la base del frente de onda de la realidad física misma, se aplican los adecuados campos relativistas de Coulomb que se transforman en estas funciones de onda de mente-conciencia-realidad, entonces se ve fácilmente cómo los posthumanos abrieron Agujeros Brana a nuevos universos y luego se teletransportaron allí." (Olimpo II: La Caída, 2006, Dan Simmons).

Ahí está el rollo. Y que conste que el pavo que escribe este tipo de paranoias, si no recuerdo mal, era profe universitario de literatura inglesa. Nada de físico, ni matemático ni nada de eso.

Ale, una chorrada más.