martes, 23 de diciembre de 2008

Feliz Navidad

Hola, amigos

Otro año más llegamos a estas fechas en las que nuestro corazón se pone un poco más tierno, sonreímos un poco más, pasamos algo más de tiempo con nuestros hijos dándonos cuenta de cuánto han crecido, de reencontrarnos con algunos familiares y amigos que el resto del año han estado abandonados, de mandar mensajes, correos y christmas; de comprar viandas especiales para la Nochebuena o la Navidad, de bajar nuestra habitual guardia y sacar de nuestro interior un espíritu más dialogante, de encontrar unos ratos de felicidad junto a nuestros seres queridos...

¿Por qué no encontramos esos momentos cualquier día del año? ¿Por qué nos negamos esa dicha un 21 de Octubre? ¿Por qué no somos más dialogantes un 23 de Enero? ¿Por qué no nos reencontramos con personas a las que hace mucho que no vemos un 14 de Marzo? ¿Por qué no pasamos más tiempo con nuestros hijos hoy? El mejor día de tu vida es hoy mismo... si tú quieres.

Este año ha sido especial gracias a vosotros. Cada día habeis contribuido a este rincón de la felicidad con lo mejor de vosotros mismos. Cada comentario, cada opinión, cada mensaje... ha sido muy importante. MUCHAS GRACIAS

Quisiera desearos unas felices navidades y un próspero y mágico año 2009. Y sobre todo, que cada día sea mejor que el anterior.

miércoles, 17 de diciembre de 2008

Refresco de DataGrid en Flex

Me he encontrado con un caso interesante que es digno de mención en este blog, y que seguro ayudará a más de uno. Aunque el caso se me ha presentado desarrollando en Flex, estoy seguro que, por su naturaleza, sea repetible en otros lenguajes, como .NET ó C# (por mencionar alguno)

Este caso no lo voy a comentar en detalle con código, si no con la teoría. Si queréis detalles de código, este problema lo planteé en el foro de Made In Flex, y cuyo enlace directo es el siguiente: http://groups.google.com/group/madeinflex/browse_thread/thread/927ccf8df69c887e?hl=es

Para empezar, comentaré el entorno tecnológico en el que se desarrolla esta historia. Por la parte backend tenemos una base de datos MySQL, un servidor web Apache y un PHP. PHP es utilizado para atender a peticiones mediante URL, acceder a base de datos, realizar operaciones con la información, y retornar un XML. Por la parte frontend tenemos un swf (Flash) creado desde Flex.

Continuamos con el propósito de la aplicación, describiendo su interfaz. Bien, es un módulo que permite gestionar datos de una tabla (en mi caso eran usuarios). Para ello, en la parte superior se incorpora un DataGrid (o tabla), que muestra la lista resumida de información de cada registro (en cada fila). En la parte inferior aparece un formulario que actúa de ficha. Cuando el usuario clica un registro en el DataGrid, éste se muestra en la ficha.

Al arrancar la aplicación, se invoca a un servicio HTTPService, el cual llama al servicio PHP correspondiente que obtiene la lista de los usuarios, genera el XML, lo devuelve, y Flex recoge este resultado y lo enlaza al DataGrid (en Flex se hace mediante la propiedad DataProvider).

Ahora vayamos a una operación sencilla de modificación de datos: la inserción. Cuando se crea un usuario nuevo, se clica en el botón "Nuevo", el cual deja la ficha de usuario vacía y desactiva el DataGrid (no se puede seleccionar filas o registros). El usuario introduce la información correspondiente al nuevo usuario. Cuando termina, hace clic en el botón "Crear". Las operaciones que se desencadenas son las siguientes:

1) Invoca al servicio HTTPService correspondiente al servicio PHP que crea un registro en la base de datos. El resultado se retorna en un XML con un tag con el resultado de OK o un mensaje de error
2) Flex recoge el resultado.
3) Si el resultado no es OK, muestra un mensaje de error (Alert.show (en otros lenguajes será MessageBox, MsgBox...).
3) Si el resultado es OK:
- Información de que ha tenido éxito (Alert.show)
- Activar el DataGrid y desactivar el formulario
- Invocar nuevamente al HTTPService para obtener la lista de usuarios
- Refrescar el DataGrid

Esta es la teoría, pero el refresco del DataGrid no funciona. Sigue estando los mismos datos que antes de crear el registro. Sin embargo, parece que el DataGrid se ha redibujado (hay un pequeño fliqueo o parpadeo).

Si salgo de la aplicación, y vuelvo a ejecutarla, el DataGrid se carga correctamente. No lo hace así cada vez que se modifica la tabla.

En realidad no hay ningún error. El problema se debe a que la llamada al HTTPService que retorna la lista de usuarios, se realiza siempre de la misma manera. Es decir, es una simple llamada, con un único parámetro que siempre tiene el mismo valor. Esto hace que el servidor web tire de la caché, con lo que retorna siempre el mismo XML.

¿Y cómo se soluciona ésto?. Pues creando un parámetro que no se utiliza, y que siempre toma un valor distinto. Puedes añadir al HTTPService para obtener la lista de usuarios, un parámetro que recoja la hora completa, o que genere un número aleatorio. De esta manera, el servidor web verá que es una llamada distinta a las ejecutadas recientemente, y ejecutará el script de php, en lugar de retornar lo que hay en la caché.

Safe Creative #1001195348693

Desmentidos los mayores mitos del código abierto

Leo en DiarioTI una interesante noticia acerca del código abierto. Black Duck, una compañía estadounidense, se ha tomado la molestia de analizar unos 160000 proyectos de código abierto, de introducir la información en una base de datos, de cruzar dicha información y extraer un interesante informe al respecto, en el cual se desmienten los 5 mayores mitos del código abierto.

Mito 1: El código abierto sólo es código fuente distribuido
El código fuente sólo constituye un 15% de la distribución. El resto son archivos binarios, tales como imágenes, vídeos, documentación, etc.

Mito 2: El código abierto es utilizado principalmente en proyectos de infraestructura TI como Linux y MySQL
El ámbito de código abierto está dominado por los componentes y no por aplicaciones completas, y dichos componentes son reutilizados en multitud de proyectos. Por ejemplo, en proyectos Java hay 14 veces más archivos binarios .class que archivos fuente .java.

Mito 3: En Internet circulan 2 mil millones de líneas de código abiero
En realidad, la cifra es 10 mayor. El 23% fue publicado o actualizado en 2008. El 90% ha sido escrito en C, C++, C# y Java.

Mito 3: Un auténtico programador apenas incluye comentarios en el programa
Una de cada dos líneas en Java suele tener un comentario.

Mito 4: GPL 3 es ignorada
Se han identificado más de 6300 proyectos bajo licencia GPL. El 70% de todos los proyectos de código abierto utilizan una variante de esta licencia.


Fuente: http://www.diarioti.com/gate/n.php?id=20704

miércoles, 10 de diciembre de 2008

Savage 2: Jugar sin gastar dinero

Las consolas llenan los escaparates navideños, y el vicio hace hervir la sangre. Pero... ¿por qué han de resentirse nuestros bolsillos por un poco de anti-estrés?. Si a los 200-500 euros que puede costar la consola de base, has de gastarte entre 20 y 80 euros por juego, al final, la paga extra se volatiliza en nada de tiempo.

Hay quienes dedican muchas horas a este noble arte del entretenimiento, consumiendo las horas que disponen a mandos de un guerrero, un coche de fórmula 1, un mago o un duende.

Otros, como es mi caso, somos jugadores casuales, que nos ponemos tan sólo algún rato perdido al mes o al año, cuando el tiempo nos lo permite. En nuestro caso, desembolsar ese dinero nos duele, porque no le sacamos partido ni lo amortizamos.

Por supuesto que estoy a favor de que las personas que trabajan tras un juego cobren por su trabajo (yo trabajé durante años en empresas de videojuegos y sé lo difícil que es). Pero vemos que en este mundillo, ese esfuerzo tan ingente (recordemos que ahora los juegos son como las superproducciones de Hollywood, con multitud de personas de todo tipo detrás de cada detalle) se amortiza durante los primeros días, cuando es una novedad, y los que aman los juegos pagan en esos momentos el precio máximo. Ese precio se va manteniendo durante unos meses, y cuando caen las ventas se empieza a abaratar si las ventas son escasas, para promover el bolsillo del jugador casual.

Otras formas de juegos las encontramos en nuestros ordenadores, que pueden llegar e incluso superar las habilidades de estas consolas (mete pasta en supertarjetas gráficas y de sonido, así como en controladores de juegos (volantes, joysticks siderales y otros cachivaches)). Hay software libre y, en algunos casos, juegos que eran de pago, pasan a ser freeware. La diferencia entre open source y freeware no es que sean gratuitos. Un software libre significa que el código está disponible para todos, pero se puede pagar por su soporte, instalación u otros servicios. Freeware significa que el programa es gratuito, pero no está disponible su código fuente.

En este caso me refiero a un pedazo de juego que nos dejará pegados durante estas navidades delante de nuestra pantalla. Se llama "Savage 2: a tortured soul", de S2 Games. Este juego, en un principio era de consumo, y ahora ha pasado a ser freeware. Una iniciativa estupenda y que aplaudo con sinceridad, porque atraerá muchos acólitos y podrán vender otros servicios o productos a partir de aquí.

El juego es del tipo World of Warcraft, aunque con mucha más acción, del estilo de God of war. Es multijugador online, con lo que la diversión está garantizada. El siguiente vídeo es una pequeña demostración del juego:


Una de las cosas que más me han gustado del juego es que está disponible para los sistemas operativos Windows, Linux y Mac.

Las siguientes capturas muestran algunas escenas del juego:





Estrategia, magia, acción, aventuras... ¿qué más se puede pedir?.

El enlace al juego: http://savage2.s2games.com/main.php

lunes, 8 de diciembre de 2008

Flex: Ventanas modales e intercambio de datos

A veces es necesario gestionar información fuera del entorno de interfaz que estamos usando, pero esta información ha de estar sincronizada. Una buena opción es el uso de ventanas modales, las cuales se pueden utilizar para, por ejemplo, cuadros de diálogo, barra de herramientas, pop-ups, etc.

El ejemplo práctico con el que vamos a ilustar este artículo, extraerá una ventana con un teclado numérico (muy útil en pantallas táctiles), a partir de la pulsación de un botón ligado a una caja de texto. Al mostrar el teclado numérico, éste contendrá el número tecleado en la caja de texto previa. Cuando se termina de operar con el dato en el teclado numérico, el número resultante se lleva a la caja de texto de la ventana principal.



Ventana modal


En Flex, podemos crear una ventana modal creando un componente que herede de TitleWindow. Para ello, se crea un componente en Flex Builder que utilice este layout. También puede cambiarse el código por defecto que genera el asistente de componentes, sustituyendo Canvas por TitleWindow. Este sería el armazón de nuestra ventana modal (componente TitleWindow):


<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow
xmlns:mx="http://www.adobe.com/2006/mxml"
width="172" height="202"
layout="absolute" title="Teclado"
showCloseButton="true"
close="cerrar();">


</mx:TitleWindow>


Las propiedades utilizadas para este componente son:
- width: Ancho de la ventana
- height: Alto de la ventana
- layout: Forma de la distribución de los componentes dentro de la ventana. El valor "absolute" (absoluto), permitirá colocar los componentes en un sistema de coordenadas X e Y, desde la esquina superior izquierda (0,0)
- title: Título de la ventana
- showCloseButton: Permite mostrar el botón de cierre en la ventana
- close: Qué hacer cuando se hace click en el botón de cierre de la ventana. En este caso se invocará a la función cerrar()

Una vez definida la ventana se incorporan los componentes de la ventana:


<mx:TextInput width="136"
x="10" y="10"
id="txtNumero"
textAlign="right"/>
<mx:Button x="10" y="124"
label="." id="btnComa"
click="ponerComa();"/>
<mx:Button x="58" y="124"
label="0" id="btn0"
click="ponerNumero(0);"/>
<mx:Button x="106" y="124"
label="C" id="btnC"
click="txtNumero.text='0';"/>
<mx:Button x="10" y="94"
label="1" id="btn1"
click="ponerNumero(1);"/>
<mx:Button x="58" y="94"
label="2" id="btn2"
click="ponerNumero(2);"/>
<mx:Button x="106" y="94"
label="3" id="btn3"
click="ponerNumero(3);"/>
<mx:Button x="10" y="64"
label="4" id="btn4"
click="ponerNumero(4);"/>
<mx:Button x="58" y="64"
label="5" id="btn5"
click="ponerNumero(5);"/>
<mx:Button x="106" y="64"
label="6" id="btn6"
click="ponerNumero(6);"/>
<mx:Button label="8"
x="58" y="34" id="btn8"
click="ponerNumero(8);"/>
<mx:Button label="7"
id="btn7" x="10" y="34"
click="ponerNumero(7);"/>
<mx:Button x="106" y="34"
label="9" id="btn9"
click="ponerNumero(9);"/>


Los botones '0' a '9' invocan a la función ponerNumero(), el botón ',' invoca a la función ponerComa() y el botón 'C' pone a cero el número.

Para terminar el código de la ventana quedaría incluir el código ActionScript, el cual se colocaría justo antes de la declaración de los componentes. Este código incluiría las funciones que van a ser invocadas, así como alguna cosa más que se detallará un poco más adelante:


<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;

public var origen:Object;

public function sincronizaTeclado():void
{
var texto:String = origen.text;

if (texto=="")
texto="0";

txtNumero.text = texto;
}

private function ponerNumero(numero:int):void
{
if (txtNumero.text=="0")
if (numero!=0)
txtNumero.text = ""+numero;
else
txtNumero.text = "0"
else
txtNumero.text = txtNumero.text+numero;
}

private function ponerComa():void
{
var texto:String = txtNumero.text;

if (texto=="0")
texto="0,";
else
if (texto.indexOf(",")<1)
texto+=",";

txtNumero.text = texto;
}

private function cerrar():void
{
var texto:String=txtNumero.text;

if (texto.charAt(texto.length-1)==',')
texto = texto.substr(0, texto.length-1);

origen.text = texto;
PopUpManager.removePopUp(this);
}

]]>
</mx:Script>

La clave de la comunicación entre la ventana modal y la ventana principal es una propiedad objeto que sirva de enlace entre ambas ventanas. A veces se utiliza una referencia a la ventana principal, con el fin de poder acceder desde la ventana modal a todos los elementos públicos de aquella. En esta ocasión se procede a utilizar únicamente un componente interno de la ventana principal, que es la caja de texto. Esta propiedad es la variable 'origen' de tipo Object.

La función sincronizaTeclado() es pública, y se utiliza para sincronizar la caja de texto de la ventana principal con la caja de texto de la ventana modal. Permite validar y realizar una inicialización del dato.

La función ponerNumero() se encarga de escribir el número en el visor. Antes hace comprobaciones, tales como si el número actual es cero, se sustituye por el tecleado, y si no, añade el tecleado al número actual.

La función ponerComa() se encarga de comprobar si no hay antes otra coma en el número que aparece en el visor, antes de proceder a ponerla.

La función cerrar() es invocada al pulsar el botón de cierre de la ventana. Si el número tecleado termina en coma (sin decimales), eliminará la coma, dejando el número entero. Por último, actualiza la caja de texto de la ventana principal (a través de la referencia de la variable 'origen').

Ventana principal


El código de la ventana principal es el siguiente:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">

<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;

private function mostrarTeclado():void
{
var teclado:WindowTeclado =
WindowTeclado(PopUpManager.createPopUp(
this,WindowTeclado,true));

PopUpManager.centerPopUp(teclado);
teclado.origen = txtNumero;
teclado.sincronizaTeclado();
}

]]>
</mx:Script>

<mx:TextInput x="10" y="10"
id="txtNumero" textAlign="right"/>
<mx:Button x="178" y="10"
label="Teclado" id="btnTeclado"
click="mostrarTeclado();"/>
</mx:Application>


La función mostrarTeclado() contiene la clave del proceso. En primer lugar se define una variable del tipo componente de la ventana modal, la cual se crea invocando a su constructor mediante la creación de un PopUp (PopUpManager.createPopUp()). A esta creación se le pasa tres parámetros: ventana padre (this), ventana a crear (la misma) y si es modal (true) o no (false).

Creada la ventana se centra ésta mediante PopUpManager.centerPopUp().

A continuación se enlaza el elemento de conexión entre las dos ventanas, utilizando la variable 'origen' de la ventana modal. A esta variable se le asigna la referencia al objeto de caja de texto de la ventana principal. A través de este nexo, ambas ventanas pueden comunicar sus datos. En este ejemplo se conecta un sólo dato. en ventanas más complejas, con más datos a unir (como una caja de diálogo), lo mejor es utilizar la referencia a la ventana padre (this), y conectar los elementos comunes entre las dos ventanas.

La última acción es sincronizar los datos entre las dos ventanas, y por ello, se invoca al método sincronizaTeclado() de la ventana modal.

Safe Creative #1001195348709

jueves, 4 de diciembre de 2008

La crisis tecnológica y la flor de la mierda

Interesante artículo publicado por Alfredo de Hoces en su blog http://www.alfredodehoces.com/press/workflow-de-una-tormenta-de-mierda, cuyo título original es "Workflow de una tormenta de mierda".

Creo que a todos nos va a sonar todo lo que Alfredo cuenta con su habilidad narrativa, en forma de cuento o fábula. Desde que mi memoria alcanza (más de 15 años ha), esta historia la he visto repetida una y otra vez, cada vez con más ahínco.

Con su permiso, la publico en mi blog para deleite de todos.




“Plantad la semilla de la avaricia en la infértil tierra de la estupidez y obtendreis la bella flor de la mierda”
(Confucio)

Todo comienza con el delirio de grandeza de algún enano mental que siempre envidió todo aquello que no se merecía. Tal vez un complejo de inferioridad crónico, tal vez haber vivido a la sombra de un hermano mayor al que todo le fue bien, o quizás demasiada televisión. El caso es que llega un fatídico día en que nuestro enano mental, con mucho esfuerzo, obtiene una licenciatura. Ese atardecer se sube a una loma, diploma en mano, el rojo crepúsculo a sus espaldas, levanta la vista y clama al cielo:

“¡¡A dios pongo por testigo de que algún día sere alguien!!… ¡¡A dios pongo por testigo de que algún día daré conferencias!!… ¡¡A dios pongo por testigo de que algún día tendre un armario lleno de trajes de Armani!!… ¡¡A dios pongo por testigo de que algún día, tomaré café con un presidente!!

Entonces se produce el milagro de la metamorfosis, pero al revés. En este caso muere una frágil mariposa y nace un capullo. Demos la bienvenida a Señor Don Capullo, visionario, emprendedor, director. Una corbata, un poco de fijador, un maletín negro con cierre dorado, una escoba por el culo. Se acaba de crear un desequilibrio en el sistema: el alter ego Don Capullo comprará cosas que enano mental no podrá pagar. Y hasta que alguien se de cuenta, se crearán deudas. Deudas que los de siempre tendremos que saldar.

Don Capullo es un tipo muy culto. Ha leído esa gran obra maestra de la literatura universal, “¿Quién se ha llevado mi queso?”. Le costó algún tiempo, pero entendió el mensaje: maricón el último y el que venga detrás, que arríe.

Don Capullo desea el queso. ¿Donde está ahora el queso? En internet. La semilla en forma de modelo de negocio ha sido plantada dentro del maletín negro; la flor de la mierda no se hará esperar. Ha nacido Smoke Solutions, ¡que empiece la función!

Lo siguiente es montar el escenario. Se alquila alguna jaula barata en cualquier zoológico tecnológico y se registra un dominio con gancho, algo que sugiera crecimiento, valor, futuro, en definitiva “ahora somos pequeños pero en breve duplicaremos su inversión”. Se recomienda darle un toque imperial (Roma, quizá Egipto) que sugiera grandeza cultural y una pincelada anglosajona que sugiera nueva tecnología. Entelequisys, Intelectis, Sinergius, Keopsolutions, Evolucius, Netsupreme… las combinaciones son infinitas.

Ahora se necesitan los actores. El actor ideal es aquel que realmente se cree su papel; los pollitos recien salidos del cascarón y los cuervos viejos y enfermos son los perfiles ideales. Don Capullo se rodeará de adeptos y les contará su verdad: “Yo soy el hijo del futuro, yo he visto la luz del mañana. Aquel que crea en mí hallará la vida eterna. Pero habreis de tener fé y nunca sucumbir a la tentación”. O sea, que mientras nos creamos el cuento tendremos un empleo para toda la vida (ja, ja) y si alguien alguna vez afirma “este tío no es mas que un enano mental y un farsante” le quemaremos en la hoguera. Es el demonio que se nos aparece en forma de programador listillo. Es el angel caído, que quería llegar más alto que dios.

La historia nos muestra lo efectivo de estas estructuras basadas en el “se cambia pan y consuelo por fé ciega”. Alguna va durando ya sus dos mil años.

Llega el día del gran estreno. Ya todos se saben sus papeles, que se repartieron en forma de Power Point, y les encantan. Aquel que compró el switch es el experto en redes inteligentes, el que arrancó el servidor el experto en desplegado de proyectos distribuidos, el que puso la “s” detrás del “http” nuestro experto en seguridad de la información, el que incluyó “encoding=UTF-8″ en el XML nuestro experto en internacionalización, y el que escribió el JSP de mil líneas sin un solo include o usebean, nuestro Java Gurú. Nervios. Se levanta en telón. El público, los posibles inversores, abarrota la sala. Se apagan las luces, se enciende el proyector. F5, ver presentación.

Durante dos horas damos un paseo por el mañana. Automatización, inteligencia artificial, naves espaciales. Teléfonos móviles con videoconferencia holográfica en 3D. Teletransportadores dimensionales. Le posicionaremos en el futuro. Le acercaremos a sus clientes. Le alejaremos de sus competidores. Mas aún, ¡desintegraremos a sus competidores! ¡Le meteremos en la cama de sus clientes! ¡¡¡Duplicaremos, triplicaremos, MILLONIFICAREMOS SU INVERSION!!! ¿HASTA DONDE QUIERE LLEGAR?

Fin de la función. Aplausos, lágrimas de emoción. Algunos inversores ya se frotan las manos. Se rumorea que viene de incógnito el asesor financiero de un presidente que quiere invertir parte de los fondos públicos en mejorar la calidad vida de su país, tan sólo a cambio de un paquete de acciones a nombre de su cuñado que desviará el cinco por ciento de la inversión a manos amigas en el mismo instante de la salida a bolsa (a nadie le amarga una isla en el caribe; son las pequeñas ventajillas de sacrificar altruistamente la vida de uno en pos del bienestar del pueblo).

Rueda de preguntas. ¿De que color serán las naves espaciales? Platino con vetas doradas. ¿Que alcance tendrán los teletransportadores? De una punta a la otra del planeta en un nanosegundo combinando supercuerdas y agujeros de gusano. ¿Que autonomía tendrán los móviles holográficos? Ilimitada gracias a la fusión fría. ¿Y cómo van ustedes a hacer todo esto? pregunta alguien. Incómodo silencio.

Los pollitos y los cuervos miran a Don Capullo, que se pone en pie con su mejor sonrisa de autocomplacencia y les habla de las sinergias, las convergencias, David y Goliath, las pirámides, Apple y el garaje de Steve Jobs, Yahoo y la furgoneta de Jerry Yang y David Filo. La semilla está ahí -señala a su maletín negro-, sólo necesita ser regada.

Pues nada, como el que no quiere la cosa ya tenemos cincuenta milloncitos de euros en una cuenta en las islas Caimán. Ahora hay que agudizar el ingenio y empezar a trincar. Cada pellizco al saco hay que justificarlo, así que echémosle imaginación. El primer canal de desviación de fondos es el salario (ya me dirán ustedes si 8000 euros netos al mes no es un salario excesivo para una simple escoba engominada).

Pero al salario se acostumbra uno pronto, que el mantenimiento del mercedes es costoso y los chalets en la sierra no los regalan. Hay que trincar más y mejor. Aquí se usa el sencillo método del “donete egipcio”. Saca uno los donetes (esos cincuenta milloncitos de euros en las Caiman) y le salen amigos por todas partes. Un amigo que nos hace un software, otro que nos vende unos equipos, otro que nos decora las oficinas. Luego se pone uno en postura egipcia y con la mano de arriba le acaricia el lomo al nuevo amigo mientras que con la de abajo trinca uno la comisión en negro.

Si las comisiones se quedan cortas también puede uno comprarse directamente a sí mismo mediante empresas fantasma a nombre del primo Eustaquio. Ejemplos prácticos: proyecto de decoración de oficina (un cuadro y dos macetas), doce mil euros. Sistema de CRM (una base de datos en access hecha en una hora) cien mil euros. Suma y sigue.

Durante un tiempo la vida es maravillosa. Se dan conferencias, se lucen trajes de Armani, se toma uno algun café con el presidente. Escapadas a la sierra, al caribe, paseos en descapotable. Ahí va un triunfador. Pero los donetes no se multiplican. Un día, a alguien le pica el bolsillo y pregunta: “¿Dónde estan mis minolles?”. Se empieza a tirar del hilo y se llega al ovillo: el maletín. Enseñe usted sus cartas, Señor Don Capullo. Abra el maletín.

Don Capullo convoca una macro reunión. Empleados, asesores, directivos, inversores. No falta ni el primo Eustaquio. Se va a destapar la caja de Pandora. Don Capullo sube al estrado, coloca el maletín frente a un ventilador bien grande, marca la combinación, y abre.

Todos de mierda hasta las cejas. Ruedan cabezas, llueven sanciones, denuncias. Los peor parados son los pollitos, pues se les acaba el sueño del experto-en-derivación-de-forlayos. En la próxima empresa habrá que bajarse del burro, aprender a picar y sudar tinta. Algunos nunca lo superan.

Una vez desmontado el chiringuito y pasada la tormenta, hay que recuperar la pasta. Don Capullo se aferra al “Santa Rita Rita, toda inversión es un riesgo”, y se lanza de nuevo a la búsqueda del queso, quizá en la patente de genes.

Así que lo de siempre. Se informa a la prensa del clásico “HAY CRISIS EN EL SECTOR”, “LA ECONOMIA ENTRA EN CICLO RECESIVO”, “ETAPA DE DESCONFIANZA”, etc. Que el inversor era un banco: se bajan los salarios y se suben los intereses. Que era una telefónica: se bajan los salarios y se suben los precios de la llamada. Nos jodemos los de siempre con el chantaje de siempre: o nos apretamos el cinturón o se cierra la empresa.

Hay un caso extremo: cuando se trata de los fondos públicos de un país y el trinque ha sido a gran escala, la flor de la mierda es regada en abundancia y finalmente da sus frutos: las cacerolas.

lunes, 1 de diciembre de 2008

iPhone y su publicidad engañosa

Apple ha tenido que quitar su publicidad en Gran Bretaña, debido a las quejas que los consumidores han denunciado debido a que en la publicidad se han empleado trucos engañosos, como salto de pasos, acelerar secuencias, etc., ofreciendo un producto rápido y limpio.

El siguiente vídeo muestra el anuncio original y lo que en realidad tardaría en ejecutarse las funcionalidades que destacan.