lunes, junio 18, 2012

WebSockets erlang vs ... (again)

Another competition erlang vs...

In this case with websockets


https://github.com/ericmoritz/wsdemo/blob/results-v1/results.md



C10K Websocket Test

Methodology

This benchmark starts a new client every 1ms, each client sends a timestamp message to the server every second and the server echos that message back to the client.
I started two m1.medium AWS instances. On one instance I started one of the servers and the other instance I ran the ./runtestcommand as:
sudo bash
ulimit -n 999999
./runtest 300 $SERVER_HOSTNAME 8000 10000
The clients communicated to the server via the server's public IP.
After 5 minutes of running, the statistics are dumped to a log file in results/.
Both EC2 instances are configured with the following etc/sysctl.conf file:
# General gigabit tuning:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_syncookies = 1
# this gives the kernel more memory for tcp
# which you need with many (100k+) open socket connections
net.ipv4.tcp_mem = 50576   64768   98152
net.core.netdev_max_backlog = 2500

stat definitions

connection_time

Elapsed time between the opening of the client TCP socket and the websocket handshake is finished.

latency

Elapsed time for a message sent from the client to echo back to the client by the server.

connections

Number of connections

disconnections

Number of server disconnects

messages

Total number of messages received by the clients

connection_timeouts

Total number of connection timeouts. The timeout is currently hard coded as 2 seconds. This means that any TCP connection that takes longer than 2 seconds to be accepted, this number will be incremented and the client crashes

crashes

Number of crashed clients from a reason other than timeout

Summary

ImplementationConnection Time (mean)Latency (mean)MessagesConnectionsConnection Timeouts
Erlang865ms17ms2849294100000
Haskell (Snap)168ms227ms11874134996108
Java (Webbit)567ms835ms10283904637157
Go284ms18503ms23981809775225
Node.js (websocket)768ms42580ms117084757014299
Python (ws4py)1561ms34889ms105299647925208
Both the Python gevent/ws4py implementation and the Node.js websocket implementation failed hard with around half of the connections hitting the 2 second TCP connection timeout.
I expected Go to kick Erlang's ass in the performance department but the message latency was much higher than Erlang's latency and we had 225 unhappy customers. Go only reached C9.775k; close but no cigar.
I did not know what to expect with the Java Webbit implementation. I expected it to perform somewhere close to the Go implementation. The Webbit implementation did do much better than the Go implementation but it still had 157 connection timeouts which is unacceptable.
I was very surprised that node.js fell down after 5001 connections and that gevent fell down at 4792 connections. Both platforms were specifically built to for the C10k problem and both platforms could barely handle C5k.

Raw Data

NOTE: All times in the raw data section are microseconds (μs).

Erlang

Command:
erl -pa deps/*/ebin ebin +K true -s wsdemo
Results:
Running test with 10000 clients for 300 seconds
Result: [{connection_time,
             [{min,1211},
              {max,7095662},
              {arithmetic_mean,865234.6877431907},
              {geometric_mean,54697.83406753208},
              {harmonic_mean,7120.650345343649},
              {median,30830},
              {variance,2735986827114.5996},
              {standard_deviation,1654081.8683229072},
              {skewness,1.9914668412550036},
              {kurtosis,2.909594628744607},
              {percentile,
                  [{75,742384},{95,4987533},{99,6799786},{999,7095626}]},
              {histogram,
                  [{601211,754},
                   {1201211,43},
                   {1801211,37},
                   {2301211,24},
                   {2901211,29},
                   {4001211,47},
                   {5001211,44},
                   {6001211,34},
                   {7001211,13},
                   {8001211,3}]}]},
         {latency,
             [{min,339},
              {max,133716},
              {arithmetic_mean,17183.052529182878},
              {geometric_mean,10783.698396530715},
              {harmonic_mean,5192.896345572704},
              {median,13152},
              {variance,268282946.31856245},
              {standard_deviation,16379.345112627747},
              {skewness,2.1492019675946312},
              {kurtosis,6.822353838233374},
              {percentile,[{75,21791},{95,51176},{99,72926},{999,120010}]},
              {histogram,
                  [{6339,269},
                   {12339,215},
                   {18339,200},
                   {23339,116},
                   {29339,64},
                   {40339,70},
                   {50339,39},
                   {60339,25},
                   {70339,18},
                   {80339,2},
                   {90339,5},
                   {100339,3},
                   {110339,0},
                   {120339,1},
                   {130339,0},
                   {140339,1}]}]},
         {connections,10000},
         {disconnections,0},
         {messages,2849294},
         {connection_timeouts,0},
         {crashes,0}]

Java (Webbit)

Command:
cd competition
make
./wsdemo-java.sh
Results:
Running test with 10000 clients for 300 seconds
Result: [{connection_time,
             [{min,3338},
              {max,2623179},
              {arithmetic_mean,568653.1643968872},
              {geometric_mean,239776.61439946695},
              {harmonic_mean,44919.74165588423},
              {median,451451},
              {variance,306300228181.46747},
              {standard_deviation,553443.9702277615},
              {skewness,1.2305092991530981},
              {kurtosis,1.2062614948219368},
              {percentile,
                  [{75,770172},{95,1664444},{99,2386111},{999,2614860}]},
              {histogram,
                  [{203338,329},
                   {403338,114},
                   {603338,218},
                   {803338,121},
                   {1003338,52},
                   {1203338,32},
                   {1403338,52},
                   {1603338,47},
                   {1803338,33},
                   {2003338,9},
                   {2203338,4},
                   {2403338,7},
                   {2503338,2},
                   {2703338,8},
                   {2903338,0}]}]},
         {latency,
             [{min,2404},
              {max,3125659},
              {arithmetic_mean,835454.7616731517},
              {geometric_mean,415058.36966433167},
              {harmonic_mean,127535.15422317719},
              {median,1120680},
              {variance,464519954989.0205},
              {standard_deviation,681557.0078790332},
              {skewness,0.2642559196998899},
              {kurtosis,-0.6775121016726264},
              {percentile,
                  [{75,1395539},{95,1587208},{99,2847752},{999,3028506}]},
              {histogram,
                  [{242404,413},
                   {502404,25},
                   {802404,33},
                   {1002404,17},
                   {1202404,46},
                   {1502404,385},
                   {1702404,83},
                   {1902404,6},
                   {2202404,0},
                   {2402404,0},
                   {2602404,2},
                   {2902404,11},
                   {3102404,6},
                   {4002404,1}]}]},
         {connections,4637},
         {disconnections,0},
         {messages,1028390},
         {connection_timeouts,157},
         {crashes,0}]

Go

Command:
go run competition/wsdemo.go
Results:
Running test with 10000 clients for 300 seconds
Result: [{connection_time,
             [{min,1160},
              {max,4976523},
              {arithmetic_mean,284385.766536965},
              {geometric_mean,25658.973510831038},
              {harmonic_mean,4682.473567580233},
              {median,17083},
              {variance,321545391374.91504},
              {standard_deviation,567049.7256633805},
              {skewness,2.8689925005503345},
              {kurtosis,11.032450263460195},
              {percentile,
                  [{75,315753},{95,1638363},{99,2280604},{999,4077353}]},
              {histogram,
                  [{201160,752},
                   {401160,33},
                   {601160,49},
                   {801160,70},
                   {1001160,24},
                   {1201160,10},
                   {1401160,13},
                   {1601160,21},
                   {1801160,26},
                   {2001160,14},
                   {2201160,1},
                   {2401160,8},
                   {2601160,1},
                   {2801160,0},
                   {3001160,0},
                   {3201160,3},
                   {4001160,1},
                   {5001160,2},
                   {6001160,0}]}]},
         {latency,
             [{min,396},
              {max,49339496},
              {arithmetic_mean,18502964.8463035},
              {geometric_mean,9622411.318087175},
              {harmonic_mean,95396.41025637122},
              {median,16967669},
              {variance,172290802618704.38},
              {standard_deviation,13125959.112335538},
              {skewness,0.25510601755314605},
              {kurtosis,-1.1384153840403934},
              {percentile,
                  [{75,29263313},{95,40281761},{99,43519694},{999,48055962}]},
              {histogram,
                  [{5000396,215},
                   {10000396,121},
                   {14000396,95},
                   {19000396,125},
                   {23000396,95},
                   {28000396,87},
                   {40000396,231},
                   {50000396,59},
                   {60000396,0}]}]},
         {connections,9775},
         {disconnections,0},
         {messages,2398180},
         {connection_timeouts,225},
         {crashes,0}]

Node.js

Command:
node competition/wsdemo-websocket.js
Result:
Running test with 10000 clients for 300 seconds
Result: [{connection_time,
             [{min,1365},
              {max,15279774},
              {arithmetic_mean,767702.8326848249},
              {geometric_mean,116937.90265102463},
              {harmonic_mean,8679.280802291636},
              {median,180911},
              {variance,1353540644549.0554},
              {standard_deviation,1163417.6569697813},
              {skewness,3.66537131211259},
              {kurtosis,30.079010617480094},
              {percentile,
                  [{75,1246355},{95,2627839},{99,4837405},{999,11155277}]},
              {histogram,
                  [{501365,633},
                   {901365,45},
                   {1301365,103},
                   {1701365,64},
                   {2101365,50},
                   {2501365,59},
                   {2901365,33},
                   {4001365,25},
                   {5001365,13},
                   {6001365,1},
                   {7001365,0},
                   {8001365,0},
                   {9001365,0},
                   {10001365,0},
                   {11001365,0},
                   {12001365,1},
                   {13001365,0},
                   {14001365,0},
                   {15001365,0},
                   {16001365,1}]}]},
         {latency,
             [{min,611},
              {max,97026003},
              {arithmetic_mean,42579710.93871595},
              {geometric_mean,29278195.25822909},
              {harmonic_mean,179784.76163030352},
              {median,40669676},
              {variance,608302541426507.6},
              {standard_deviation,24663790.086410232},
              {skewness,0.11640391568235428},
              {kurtosis,-1.0294319744170162},
              {percentile,
                  [{75,63882416},{95,82661184},{99,91485418},{999,95397096}]},
              {histogram,
                  [{9000611,99},
                   {18000611,106},
                   {26000611,95},
                   {40000611,203},
                   {50000611,122},
                   {60000611,107},
                   {70000611,123},
                   {80000611,103},
                   {90000611,56},
                   {100000611,14},
                   {110000611,0}]}]},
         {connections,5701},
         {disconnections,0},
         {messages,1170847},
         {connection_timeouts,4299},
         {crashes,0}]

Python (ws4py)

Command:
python competition/wsdemo.py
Result:
Running test with 10000 clients for 300 seconds
Result: [{connection_time,
             [{min,1385},
              {max,31066360},
              {arithmetic_mean,1560786.1439688716},
              {geometric_mean,242841.69030740944},
              {harmonic_mean,13336.537657190269},
              {median,466631},
              {variance,8683385612161.933},
              {standard_deviation,2946758.492337289},
              {skewness,5.552260242760376},
              {kurtosis,45.00935160637418},
              {percentile,
                  [{75,2137563},{95,5306448},{99,11598748},{999,31064785}]},
              {histogram,
                  [{1101385,678},
                   {2101385,87},
                   {3101385,79},
                   {5001385,118},
                   {6001385,31},
                   {7001385,16},
                   {8001385,0},
                   {9001385,0},
                   {10001385,1},
                   {11001385,7},
                   {12001385,1},
                   {13001385,0},
                   {14001385,0},
                   {15001385,0},
                   {16001385,0},
                   {17001385,5},
                   {18001385,0},
                   {19001385,0},
                   {20001385,0},
                   {21001385,0},
                   {22001385,0},
                   {23001385,0},
                   {24001385,0},
                   {25001385,0},
                   {26001385,0},
                   {27001385,0},
                   {28001385,0},
                   {29001385,0},
                   {30001385,2},
                   {31001385,1},
                   {40001385,2}]}]},
         {latency,
             [{min,1454},
              {max,82132060},
              {arithmetic_mean,34889348.67509728},
              {geometric_mean,22808521.363542553},
              {harmonic_mean,668574.9036028518},
              {median,34752889},
              {variance,499999310132036.25},
              {standard_deviation,22360664.34907595},
              {skewness,0.0915931544450531},
              {kurtosis,-1.236873451442312},
              {percentile,
                  [{75,54840581},{95,69809695},{99,77043401},{999,81923621}]},
              {histogram,
                  [{8001454,158},
                   {16001454,131},
                   {24001454,86},
                   {32001454,111},
                   {40001454,98},
                   {50001454,125},
                   {60001454,149},
                   {70001454,121},
                   {80001454,45},
                   {90001454,4},
                   {100001454,0}]}]},
         {connections,4792},
         {disconnections,0},
         {messages,1052996},
         {connection_timeouts,5208},
         {crashes,0}]

Haskell Snap

Command:
make
./wsdemo-snap +RTS -N -A4M -qg1
Result:
Running test with 10000 clients for 300 seconds       
Result: [{connection_time,
             [{min,1567},
              {max,2073630},
              {arithmetic_mean,168940.40758754863},
              {geometric_mean,31200.494465279622},
              {harmonic_mean,9399.811560514618},
              {median,26617},
              {variance,123018539492.51427},
              {standard_deviation,350739.98844231357},
              {skewness,2.7164844487113418},
              {kurtosis,6.85212552452187},
              {percentile,
                  [{75,103744},{95,1043260},{99,1583130},{999,1924847}]},
              {histogram,
                  [{131567,804},
                   {251567,67},
                   {401567,32},
                   {501567,5},
                   {701567,19},
                   {801567,13},
                   {901567,6},
                   {1001567,11},
                   {1101567,30},
                   {1301567,14},
                   {1401567,4},
                   {1501567,8},
                   {1601567,6},
                   {1801567,6},
                   {1901567,1},
                   {2001567,1},
                   {2101567,1},
                   {2201567,0}]}]},
         {latency,
             [{min,587},
              {max,936981},
              {arithmetic_mean,227188.01653696498},
              {geometric_mean,202801.5999348484},
              {harmonic_mean,94007.32548850514},
              {median,233930},
              {variance,7172450496.960787},
              {standard_deviation,84690.32115277865},
              {skewness,0.9561457641408602},
              {kurtosis,9.056862234860235},
              {percentile,[{75,275229},{95,337791},{99,439979},{999,872760}]},
              {histogram,
                  [{30587,24},
                   {60587,15},
                   {90587,12},
                   {120587,34},
                   {150587,71},
                   {180587,104},
                   {210587,128},
                   {240587,162},
                   {270587,175},
                   {300587,171},
                   {400587,117},
                   {500587,9},
                   {600587,2},
                   {700587,2},
                   {800587,0},
                   {900587,1},
                   {1000587,1}]}]},
         {connections,4996},
         {disconnections,0},
         {messages,1187413},
         {connection_timeouts,108},
         {crashes,0}]

miércoles, mayo 02, 2012

iee754 C++ trick

http://randomascii.wordpress.com/2012/01/11/tricks-with-the-floating-point-format/



Preguntas C++ para una entrevista de trabajo

http://www.reddit.com/r/cpp/comments/sppna/i_had_a_c_interview_here_are_some_questions/




Hello all,
I had a C++ phone screen and I thought some people might be interested in seeing the questions that were asked. Here they are:
If you could change one thing about the C++ language, what would you change and why? What are some limitations of c++?
Could you explain to me how virtual functions work? and why you would use them?
What is the overhead of calling a virtual function?
Are there any situations when this overhead is larger or smaller?
When should you make a destructor virtual?
Could you explain to me the difference between static_cast and dynamic_cast?
How would you implement a class that opens two files if you could not use exceptions?
How would you implement that class with two files using exceptions?
How would you handle one of the files failing to open in the case where you have exceptions?
Could your constructor throw an exception after one of the files had been opened and the 2nd one failed? Which destructors would be called in this case? (assumes use of RAII for file handling (which is how I answered the previous questions))
How would you find the 10 most used words used in a large text file (which was a novel)? file -> words -> hashmap ->keep track of top 10 using a vector

jueves, abril 05, 2012

¿Cómo saber la versión de ubuntu/kubuntu que estamos utilizando?


Solution 1
cat /etc/issue
The file /etc/issue holds the version of Ubuntu installed on your system
Solution 2
lsb_release -a

visto en...

sábado, febrero 25, 2012

los neutrinos superlumínicos

Como ya sabrás, hace un par de días, los chicos del experimento Ópera
(donde se detectaron posibles neutrinos que viajaban más rápido que la
luz) informaron que han detectado un par de errores en dicho
experimento.


El experimento se repetirá en pocas semanas, a ver que pasa. La
expectación es máxima.


Desde el principio, los chicos de Ópera, informaron de los resultados
aclarando...

1.- El experimento debe revisarse
2.- El experimento debe repetirse en otros laboratorios por otras personas

Esta aclaración es para los no científicos, porque es la rutina
conocida por todos ellos.


Los no científicos, como era previsible, se fueron al sensacionalismo
de la mano de los periodistas.

Escuché (y no es la primera vez) cosas como Einstein estaba
equivocado, esto abre la posibilidad de viajes en el tiempo hacia el
pasado y el futuro, y otras perlitas.


Nada que dijera ningún científico.




Los chicos del experimento Ópera, han estado revisándolo, han
encontrado dos errores y lo han anunciado.


Toda una lección para periodistas, y pseudociencias como la economía.



Veremos que pasa en unas pocas semanas




De confirmarse que unos neutrinos podrían ir más rápido que la luz,
volveríamos a una situación emocionante en la que deberá seguir
revisándose el experimento y estará pendiente de verificaciones
adicionales en otros laboratorios con otros científicos.


De reconfirmarse con nuevos experimentos y diferentes laboratorios,
los científicos estarían en un fascinante escenario ocurrido muy pocas
veces (o nunca en la historia)


Se habría abierto una puerta por donde pasará un científico de la
talla de Einstein o quizá incluso del mismísimo Newton.

Lo malo es que estos no abundan, y quizá pasara mucho tiempo hasta
verlo, pero la puerta estaría ahí esperando.





Esto me recuerda un poco al experimento Michelson/Morley


Érase una vez un señor que quería medir la velocidad de la tierra
viajando a través del éter luminífero. Sería como medir la velocidad
absoluta de la tierra.

Newton ya dijo que eso era imposible con procedimientos mecánicos,
pero la evolución de la ciencia electromagnética desde entonces, lo
permitía (por medios no mecánicos, claro)


Michelson ideó un fantásico experimento, brutalmente ingenioso, para
tomar unas medidas colosalmente precisas que permitirían detectar esta
velocidad cruzando el éter luminífero.


El resultado fue sorprendentemente negativo.

Así que Michelson perfeccionó su máquina una y otra vez.

Luego se alió con Morley y realizaron uno de los experimentos más
fabulosos e ingeniosos de la historia.

Pero seguía dando resultados negativos.


Pusieron su supersensible máquina en una piscina de mercurio,
realizaron el experimento en un sótano a altas horas de la noche para
que un caballo andando por la calle no pudiera afectarle.


Y el resultado fue... negativo.



Después de trabajar durísimo durante años mejorando el que ya era uno
de los mejores experimentos de la historia, se riendieron.



Publicaron los resultados con toda la información y detalles del
mismo y dijeron que no fueron capaces de medir el viaje de la
tierra.



Esto abrió una sensacional puerta en la que se asomaron enormes
científicos como Lorenz aportanto ideas ingeniosas que explicaban el
resultado.



Pero fue Einstein, quien atravesó esa puerta triunfal y el mundo
cambió bruscamente.



Einstein dio una explicación sencilla, elegante, completa, inapelable
y coherente con la mecánica de Newton y el electromagnetismo de
Maxwell (y Faraday y otros)



Después de que Einstein publicara su articulito "sobre la
electrodinámica de los cuerpos en movimiento", se acabó la diversión.




Una diferencia muy grande con aquella época, es que no muchos
científicos conocían los detalles del sensacional experimento,
incluido el propio Einstein



Einstein no fue inspirado por el experimento de Michelson/Morley y el
año 1905, Einstein no publicó un artículo revolucionario y suficiente
para convertirse en uno de los grandes de todos los tiempos. Publicó
cuatro.


Pero eso es otra historia.

viernes, enero 27, 2012

Hoja de cálculo con autoreferencia a la propia hoja (Excel, OpenCalc, Google)

Un problema curioso...

Preparación

  1. En la hoja de cálculo escribimos una tabla con la primera columna con números.
  2. En la segunda columna, escribimos una ecuación que nos devuelva el numero de la primera columna
  3. En la tercera columna, volvemos a hacer autoreferencia a la primera columna, pero en este caso, añadimos en la ecuación el nombre de la hoja de cálculo actual.

La fiesta

  1. Ahora le decimos que ordene la tabla por la primera columna. Todo bien.
  2. Es el turno de ordenar por la segunda columna. Sin problemas
  3. Y le toca a la tercera. Ordenamos por la tercera columna. ¿Qué pasa?

La comparación

La hoja de cálculo de Mocochoft, Excel y la de OpenOffice, ordenan mal, cambian las ecuaciones, los resultados de la tercera columna son erróneos.

La hoja de Google, lo hace bien.


Observaciones

El problema con Excel, se produce muy fácilmente. Basta con seleccionar otra hoja mientras escribes la ecuación, volver a la hoja y ya te ha metido la autoreferencia de hoja.

En OpenOffice y Google, el comportamiento es mejor. Con el ratón no se puede generar. Detectan que has vuelto a la hoja propia y no escriben la autoreferencia.
No está mal, porque es difícil que alguien escriba a mano una autoreferencia a una hoja de cálculo.

Pero la mejor solución, es hacerlo bien, que no es tan difícil.

Y eso es lo que hace Google. Aunque haya una autoreferencia a la propia hoja en la propia tabla a ordenar, lo gestiona bien.


Vuelve a ganar Google Docs. En segundo lugar, OpenOffice. Y Excel, con un patético resultado.

Probado en Excel 2007

¿Es más importante el "Ribbon" que estos problemas?

lunes, enero 23, 2012

El falsificador más buscado de todos los tiempos


http://www.elblogsalmon.com/historia-de-la-economia/edward-mueller-el-falsificador-mas-buscado-de-todos-los-tiempos



Edward Mueller: el falsificador más buscado de todos los tiempos

Los misteriosos billetes falsos

Edward Mueller tenía los conocimientos suficientes para hacer falsificaciones muy burdas, los había ganado trabajando en su infancia. Tomó una fotografía de estudio de un billete en casa de su hija y fabricó placas de zinc en su casa. En otoño de 1938 ya había sacado su primer billete. Lo secó y en cuanto estuvo listo compró diez centavos de caramelos. Había tenido noventa centavos de beneficio sobre el mismo. Además se dio cuenta de algo que no habían pensado nunca los demás falsificadores. Nadie examina un billete de valor tan pequeño.
Los billetes eran de muy mala calidad. La palabra Washington estaba mal escrita, se leía Wahsington y los ojos de George Washington también estaban mal. El papel no era parecido, sino que era uno normal que se podía comprar en cualquier papelería. Cuando el Servicio Secreto (que tiene dos funciones, luchar contra el dinero falso y proteger al presidente) encontró el primer billete, les pareció una falsificación de lo más burda. Pero también muy difícil de detectar. Por supuesto abrieron un nuevo expediente, el 880.
Los billetes empezaron a aparecer, en pequeñas cantidades. Estos aparecían en estaciones de metro, tiendas, bares, pequeños negocios… Los gastos de Edward Mueller nunca superaban los 50 dólares mensuales, por lo que no dispersaba más de dos billetes al día. Edward Mueller nunca quiso un estilo de vida extravagante, solo vivir él y su perro. Su alquiler eran 25 dólares al mes. Lo máximo que hacía era comprar caramelos para los niños del barrio, era una época en la que eso no resultaba siniestro.

Buscando a un falsificador

Mientras tanto el servicio secreto tenía problemas para encontrarlo. Acostumbrados a otra escala, cazar a Juettner era matar moscas con cañonazos. A los cinco años sólo se habían puesto en circulación 2.840 dólares y los agentes estaban completamente perplejos de las pequeñas cantidades que se habían puesto en circulación. A los diez años unos cinco mil.

El Servicio Secreto intentó darle publicidad al tema, pero lo único que consiguió fue que muchos ciudadanos no proporcionaran los billetes a las autoridades y se los quedaran de recuerdo. Según el periodista del New Yorker, StClar McKelway detrás del archivo 880 había más gente de la que había habido nunca detrás de ningún otro caso de falsificación de dinero.

Fue un incendio

Un incendio en el edificio de apartamentos de Edward Mueller cambió el curso de la historia tras diez años de vivir de falsificar billetes. Él se salvó, pero su perro murió. Muchas de sus pertenencias se tiraron por los bomberos y mientras que el edificio era reparado el falsificador se mudó a casa de su hija en las afueras.
Nueve chavales de entre diez y quince años estaban jugando en un descampado y encontraron la prensa de Edward Mueller y treinta billetes, que pensaron que eran de juguete. Uno de ellos llevó algunos a casa, y su padre al verlo pensó que era un asunto lo suficientemente serio como para avisar a las autoridades y los llevó a una estación de la calle 100. El servicio secreto al ver la palabra Washington mal escrita se frotó las manos. Por fin empezaban a ver una luz al final del túnel después de diez años quebrándose la cabeza sin obtener ninguna pista.
Edward Mueller fue detenido unos pocos días después, sin tener ningún tipo de problema para confesar lo que había hecho. Parecía gustarle la atención que recibía. Lo único que quería era vivir con su perro y regalar caramelos a los vecinos de vez en cuando. Además nunca había dado más de un billete a la misma persona, por lo que el daño que había causad era mínimo.
Edward quedó en libertad bajo fianza, a pesar de eso se pasaba por las oficinas del Servicio Secreto a saludar. Cuando fue juzgado a los 73 años, disfrutó todos los minutos que duró el juicio. Nunca en su vida había despertado tanta atención. Fue sentenciado a un año y un día y la multa fue de un dólar. De su sentencia sólo cumplió cuatro meses y después se mudó a casa de su hija. Ahí se dedicó a contar como había engañado al servicio secreto durante diez años a todo aquel que quisiera escucharle.
En 1950 se hizo una película contando su vida, Burt Lancaster fue el agente del Servicio Secreto y Edmund Gwen lo interpretó a él, llegando a ser nominado a un Oscar por la actuación. Fue invitado al estreno donde disfrutó como un niño. Además por los derechos de la película obtuvo más dinero que por toda su actividad de falsificador durante diez años.

martes, noviembre 01, 2011

madres burkas y marujas

Sensacional artículo de Arturo Pérez Reverte http://www.perezreverte.com/articulo/patentes-corso/643/madres-burkas-y-marujas/ Madres, burkas y marujas XLSemanal - 31/10/2011 En 1991, mientras esperaba en Dahrán la ofensiva norteamericana para liberar Kuwait, presencié un suceso curioso. Frente al mercado Al Shula había un vehículo militar con una soldado norteamericana al volante. En Arabia Saudí está prohibido que las mujeres conduzcan automóviles; así que una pareja de mutawas -especie de policía religiosa local- se detuvo a increpar a la conductora. Incluso uno de ellos le golpeó con una vara el brazo que, con la manga de camuflaje remangada, apoyaba en la ventanilla. Tras lo cual, la conductora -una sargento de marines de aspecto nórdico- bajó con mucha calma del coche y le rompió dos costillas al de la vara. Ésa fue la causa de que durante el resto de la guerra, a fin de evitar esa clase de incidentes, la Mutawa fuese retirada de las calles de Dahrán. Pensé en eso el otro día, al enterarme de un nuevo asunto de chica con problemas por negarse a ir a clase sin el pañuelo islámico llamado hiyab. Y recuerdo la irritación inicial, instintiva, que sentí hacia ella. Mi íntimo malhumor cuando me cruzo en la calle con una mujer cubierta con velo, o cuando oigo a una joven musulmana afirmar que se cubre la cabeza en ejercicio de su libertad personal. Cómo no se dan cuenta, me digo. Cómo no les escuece igual que ácido en la cara la sumisión, tan simbólica como real, a que se someten. Recuerdo, por ejemplo, que hace cuarenta años mi madre aún necesitaba la firma de su marido para sacar dinero del banco. Y me llevan los diablos. Tanto camino, me digo. Tanta lucha y esfuerzo de las mujeres para conseguir dignidad, y ahora una niñata y cuatro fátimas de baratillo -como las llamaría el capitán Haddock- pretenden hacernos volver atrás, imponiendo de nuevo, en la Europa del siglo XXI, la sumisión irracional al hombre y a las reglas hechas por el hombre. Reclamando tolerancia o respeto para esa infamia. Pero no es tan simple, concluyo cuando me sereno. Incluso aunque digan actuar con libertad, esas mujeres siguen siendo víctimas de un mundo cuyas reglas fueron impuestas por los hombres para garantizarse el control de su virginidad, su fertilidad y su fidelidad. Después de escucharnos decir lo libres de conducta que pueden y deben ser, esa muchacha o la señora del velo van a casa y se cruzan en la escalera con el imán de su mezquita, que vive en el quinto piso, o con el chivato hipócrita que a veces incluso luce una pasa en la frente -ese moratón de pegar cabezazos en el suelo al rezar, para que todos sepan lo buen musulmán que es uno-, que vive en el segundo. Y con ellos, y con el padre, el marido o el abuelo que están en casa, esas mujeres tienen que convivir cada día, y casarse, y criar familia, y ser respetadas por una comunidad donde la religión suele estar por encima de las leyes civiles, o las inspira. Una sociedad endogámica, especializada en marcar y marginar -cuando no encarcelar o ejecutar- a quienes discrepan o se rebelan; y cuyos más radicales clérigos, esos imanes fanáticos que recomiendan a sus fieles machacar a las mujeres para que no se desmanden, son tolerados y hasta amparados, de manera suicida, por una sociedad occidental demagoga, estúpida, desorientada, con el pretexto de unos derechos y libertades que ellos mismos niegan a sus feligreses. Todo eso, en vez de ponerlos en la frontera en el acto, si son extranjeros, o meterlos en la cárcel, si son de aquí, cada vez que humillan o amenazan a la mujer en una prédica. Una sociedad, la nuestra, incapaz de plantearse el verdadero nudo del problema: si una niña que durante catorce años fue a un colegio normal, entre chicos y chicas, resuelve de pronto ponerse un pañuelo en la cabeza, es que algo con ella estuvo mal hecho. Que alguna cosa no funciona en el método; falto de una firmeza, una claridad de ideas y una persuasión que no tenemos. En todo caso, si a menudo es la mujer la que elige ser hembra sumisa en vez de sargento de marines, y con su pasividad o complicidad educa a los hijos en esclavitudes idénticas a las que ella sufrió, tampoco es justo que el Islam se lleve todas las bofetadas. En materia de esclavitudes, sumisión y transmisión de costumbres a hijas y nietas, igual de infame es el espectáculo de esas españolísimas marujas presuntamente modernas, libres y respetables, que babean en programas de televisión aplaudiendo y diciendo te queremos y envidiamos, guapa, bonita, a fulanas que encarnan lo que, en el fondo y a menudo en la forma, a ellas les habría gustado ser, y desean para sus propias hijas: analfabetas sin otra aspiración en la vida que convertirse en putizorra de plató televisivo. Y esos aplausos y admiración -hasta autógrafos les piden, las tontas de la pepitilla- me parecen tan indignos y envilecedores para las mujeres, tan turbios y reaccionarios, como un burka que las cubra de la cabeza a los pies.