Posts Tagged ‘gracioso’

h1

Los comentarios más chuscos encontrados en el código fuente

05/23/2013

Wizdoc [Icon By Buuf]  Tips & Tricks.

Los programas deben escribirse para que la gente los lea, y sólo incidentalmente para que las máquinas los ejecuten.

Hal Abelson (n. 1947), profesor y codirector estadounidense del Instituto Tecnológico de Massachusetts (MIT), cofundador de Creative Commons.

Hace algún tiempo, en el sitio técnico Stack Overflow apareció un hilo de discusión que decía: ¿Cuál es el mejor comentario en el código fuente que has encontrado? Aunque sale por completo de los temas que normalmente tratan en dicho sitio, la pregunta tuvo una respuesta de tal magnitud, que uno de los administradores tuvo que bloquear el hilo para evitar que éste dejara a sus servidores fuera de combate. Honestamente, en la actualidad se le conserva más por el enorme tráfico que origina, que por las “razones históricas” que justifican su permanencia entre preguntas más valiosas, aunque menos populares. Sin embargo, recomiendo mucho leer este hilo de discusión, porque nos permite entrar en la psique de aquellos valerosos programadores que cayeron en el cumplimiento del deber:

// if i ever see this again i’m going to start bringing guns to work

Traducción: Si veo esto de nuevo voy a empezar a traer armas al trabajo.

/**
For the brave souls who get this far: You are the chosen ones,
the valiant knights of programming who toil away, without rest,
fixing our most awful code. To you, true saviors, kings of men,
I say this: never gonna give you up, never gonna let you down,
never gonna run around and desert you. Never gonna make you cry,
never gonna say goodbye. Never gonna tell a lie and hurt you.
*/

Traducción: Para las almas valientes que han llegado hasta aquí: Ustedes son los elegidos, los caballeros valerosos de la programación que trabajan duro, sin descanso, corrigiendo nuestro terrible código. A ustedes, verdaderos salvadores, reyes de los hombres, les digo esto: (letra de la canción Never Gonna Give You Up de Rick Astley; efectivamente aplicándole al lector un Rickroll).

// I dedicate all this code, all my work, to my wife, Darlene, who will
// have to support me and our three children and the dog once it gets
// released into the public.

Traducción: Dedico todo este código, todo mi trabajo, a mi esposa Darlene, quien tendrá que mantenernos a mí, a nuestros tres hijos y al perro una vez que esto sea liberado al público.

try {
  …
} catch (Exception e) {
  //silent as a ninja
}

Traducción: Silencioso como un ninja.

// Dear maintainer:
//
// Once you are done trying to ‘optimize’ this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 16

Traducción: Querido encargado (de mantenimiento): Cuando hayas terminado de intentar “optimizar” esta rutina y te hayas dado cuenta del terrible error que esto significa, por favor incrementa el siguiente contador como aviso al tipo que venga después de ti: total_horas_desperdiciadas = 16

// I will give you two of my seventy-two virgins if you can fix this.

Traducción: Te daré dos de mis setenta y dos vírgenes si logras arreglar esto.

//Dear future me. Please forgive me.
//I can’t even begin to express how sorry I am.

Traducción: Querido yo del futuro. Por favor perdóname. Ni siquiera puedo empezar a expresar cuánto lo siento.

// If you’re reading this, that means you have been put in charge of my previous project.
// I am so, so sorry for you. God speed.

Traducción: Si estás leyendo esto, significa que te han puesto a cargo de mi anterior proyecto. Lo siento mucho por ti. Buena suerte.

/**
* If you don’t understand this code, you should be flipping burgers instead.
*/

Traducción: Si no entiendes este código, deberías estar volteando hamburguesas en su lugar.

try {
  …
}
catch (SQLException ex) {
  // Basically, without saying too much, you’re screwed. Royally and totally.
}
catch(Exception ex)
{
  //If you thought you were screwed before, boy have I news for you!!!
}

Traducción 1: Básicamente, sin decir mucho, estas jodido. Real y totalmente.

Traducción 2: Si antes pensabas que estabas jodido, oh muchacho, tengo noticias para ti!!!

Dependiendo de la situación en la que nos encontremos, estas joyas de comicidad ingenieril pueden hacernos recordar esos duros momentos en que la noche era larga y el café, barato.

h1

Cómo saber si un empleo vale la pena: el Codypo Test

02/15/2012

Wizdoc [Icon By Buuf]  Tips & Tricks.

Escoge un trabajo que ames y no tendrás que volver a trabajar un solo día en tu vida.

Confucio (551 a.C. – 479 a.C.), pensador y filósofo chino.

Hace tiempo publiqué mis hallazgos sobre cómo identificar un buen ingeniero de software para su contratación. Sin embargo, el otro lado de la moneda es muy importante también: si estamos buscando trabajo, ¿cómo podemos evitar caer en uno de esos empleos de pesadilla? Sí, esos donde el cliente no sabe lo que quiere y el “project manager” dice que sí a todo sin consultar con los desarrolladores, o aquellos puestos donde nos caen con la sorpresita que debemos dar soporte a un sistema legado con guardias de 24×7. Y es que con todo y lo mal que está la economía en estos tiempos, no sirve de mucho aceptar un trabajo para que en menos de tres meses huyamos debido al estrés, constantes discusiones con el jefe o que por muchas ganas que le hayamos puesto, nos den las gracias debido a que nuestro “desempeño” no era el esperado.

De manera personal, al principio de mi carrera me tocaron varios trabajos donde no llegué a durar ya no digamos tres meses, sino tres semanas: ya sea porque entraba “al quite” para sacar adelante proyectos batidos que para entonces ya eran insalvables o la desconexión entre el cliente y la realidad era tal que solicitaba un “ingeniero de software” cuando lo que realmente requería era un administrador de contenidos. Mi peor experiencia me la llevé con un empleador cuya dudosa ética profesional no cuadraba con mi manera de llevar las cosas.

Así es como me topé con el Codypo Test, que un poco en broma, nos proporciona 8 preguntas que podemos hacerle a nuestro potencial empleador para saber si vale la pena trabajar con él o mejor nos conviene dar las gracias y olvidarse del asunto. Con mi traducción y un poco adaptado a nuestra idiosincrasia, también incluyo mis propios comentarios:

Damas y caballeros, les presento el Test Codypo, también conocido como las 8 preguntas para identificar un trabajo poco convincente. Si se encuentran en una entrevista, realicen la prueba y si entre los resultados obtienen más de una o dos respuestas positivas, es necesario tirar de la alarma contra incendio y salir corriendo de ahí.

1. ¿Me pagarán por debajo de la media del mercado?

Si están buscando experiencia de más de 10 años en C++ con multihilos y tan sólo están ofreciendo MXP 12,000 al mes (US$11,500 anualizado), esta gente ha perdido la cabeza. Espera este tipo de disparates en todo lo demás que hagan.

[En este mismo blog tengo un buen post con los sueldos que nos deberían pagar (al menos aquí en México), así que no debemos permitir que nos chamaqueen pues un trabajo mal pagado sólo significa mala disposición, estrés y a la larga, salir por piernas de ahí.]

2. ¿Siempre tendré que estar de guardia?

A nadie le gusta estar de guardia, porque tan pronto como te encuentres en esta situación, alguien te buscará a las 3 de la mañana del domingo sólo porque el botón de “reinicio” tiene un tono de azul diferente del esperado. Las llamadas ocasionales son comprensibles y tolerables, pero 24×7 es sólo para doctores y exorcistas.

3. ¿Seré parte del staff de soporte técnico?

Tú eres un programador. Construyes software. Estás contento por dar soporte a tu software.

Esto, sin embargo, no significa que eres un maestro del universo computacional, ni tampoco el individuo al que hay que buscar cuando la laptop de la recepcionista se haya descompuesto por haberle instalado aquél salvapantallas de Garfield.

[Ciertamente, todos tenemos que dar soporte tarde o temprano. Y considerando que la mayoría de los problemas tienen que ver con el Error en Capa 8, preferiría que el soporte estuviese confinado a mi área de experiencia.]

4. ¿Tendré que trabajar con un solo monitor?

Ya no estamos en 1998. No tenemos que mirar fijamente un monitor de 17” todo el día. Es posible comprar monitores de LCD enormes por MXP 1,200 (USD 100) cada uno. Si duplicar tu productividad no es digno de MXP 2,400 (USD 200) para esta compañía, entonces ésta puede ser una broma muy elaborada por parte de algún billonario excéntrico.

[Los comerciales, managers y demás gente administrativa de la compañía donde trabajo son los únicos que trabajan con un sólo monitor. Nosotros tenemos una laptop de buena resolución o el consabido monitor LCD para quien lo necesite.]

5. ¿Tendré que darle mantenimiento a algún sistema legado y en qué está escrito?

Si vas un poco más allá, tal vez escuches algo así como “Sí, vas a programar en Ruby on Rails pero de momento necesitamos que escribas algunas aplicaciones en VB 4. Nunca es así de fácil, ya que ese sistema en Visual Basic 4 se resistirá a morir, justo como Rasputín.

6. ¿Mi uso de internet será filtrado o monitoreado?

Los programadores resuelven problemas y para resolver problemas efectivamente, necesitas acceso a recursos. Internet es el recurso más grande que existe. Cualquier compañía que se resista a aceptar este hecho y te bloquee de Usentet/Google/Stack Overflow te está tratando como un chiquillo o un degenerado.

[Ah… recuerdos, recuerdos. Hace algunos ayeres me tocó trabajar con un cliente que precisamente, no permitía acceso a internet. Ni ingresar computadoras. Ni algún otro dispositivo que pudiese guardar información en su memoria (iPods, MP3). Sobra decir que de no haber sido por un cambio de proyecto, yo hubiera perdido la cordura.]

7. ¿Seré el único programador?

Más que cualquier otra cosa, he madurado como programador gracias a mis colaboradores. Contestamos las preguntas de los demás, revisamos el código de otros, escribimos en el pizarrón juntos y se nos ocurren insultos creativos cuando alguien rompe el build diario. Si sólo eres tú, no obtendrás la retroalimentación técnica y no mejorarás. También, serás el único al que podrás insultar cuando rompas el build, lo que te podría generar un reporte ante recursos humanos.

[Aunque ser el único programador no siempre es malo, hay que sospechar por qúe sólo uno. Si te están ofreciendo una compensación importante, puede significar que serás el “todopoderoso amo del sistema a tu cargo”, con todo lo que eso implica: turnos de 24×7, guardias permanentes, mantenimiento de un sistema legado y ser el único al que hay que llamar cuando algo no funciona.]

8. ¿Esperan que viaje cada semana?

Un poco de viaje es necesario de vez en cuando, particularmente al tener reuniones cara-a-cara con el cliente o colegas offsite. Sin embargo, esperar que salgas de casa cada semana es absurdo. Ahora tenemos internet; ésta nos permite comunicarnos de manera virtual. Usemos eso en vez de hacernos el mejor amigo del recepcionista nocturno en el Best Western local.

[Uno de mis últimos empleadores tenía por costumbre enviarnos cada semana para hacer horas customer-face. Lo bueno: era en Cancún. Lo malo: era de entrada por salida el mismo día. Lo peor: nunca vimos la playa y perdíamos hasta 6 horas al día debido al viaje en avión.]

Creo que esas 8 preguntas constituyen una buena prueba de rigor para un trabajo potencial. Seguro, hay razones válidas para que un empleo tenga una respuesta positiva (por ejemplo, puede que seas parte del staff IT o debas hacer guardias en un startup). Sin embargo, una vez que obtienes más de un SI a estas preguntas, es tiempo de dejar la entrevista mediante cualquier forma posible, incluso fingir un ataque cardiaco.

No importa qué tan estupendos puedan ser los proyectos potenciales o compañeros de equipo, realmente no creo que puedas hacer un trabajo significativo en un ambiente donde tú, el desarrollador, no tengas el suficiente empowerment para triunfar. Si una compañía no entiende eso, no obtendrán el software [terminado].

h1

¡Cthulhu se ha levantado! La devastación es… ¿mínima?

11/24/2011

Wizdoc [Icon By Buuf]  Reflexiones.

Por si alguien dudaba de la inteligencia y habilidad de los pulpos, aquí dejo el siguiente video:


Un pulpo camina fuera del agua en la reserva marina Fitzgerald, cerca de San Francisco, California. (Fuente: YouTube)

Lo que me parece aún más impresionante, es cómo el animalito salió del agua sólo para obsequiarle un cangrejo al camarógrafo (2:08), como cuando los gatos les “regalan” aves muertas a sus dueños. Honestamente, no encuentro otra razón de este comportamiento más que un simple gesto de amistad.

h1

La evolución de un programador

05/25/2011

Wizdoc [Icon By Buuf]  Tips & Tricks.

Webeando por la red me encontré con esta joya que sólo los sistemólogos podrán entender: cómo uno va escribiendo su “hola mundo” de acuerdo al nivel jerárquico y experiencia. Completamente de acuerdo. Que lo disfruten:

Preparatoria

  10 PRINT “HELLO WORLD”
  20 END

Primer año de la universidad

  program Hello(input, output)
    begin
      writeln(‘Hello World’)
    end.

Último año de la universidad

  (defun hello
    (print
      (cons ‘Hello (list ‘World))))

Recién egresado / profesionista novato

  #include
  void main(void)
  {
    char *message[] = {“Hello “, “World”};
    int i;

    for(i = 0; i < 2; ++i)
      printf(“%s”, message[i]);
    printf(“\n”);
  }

Profesionista experimentado

  #include
  #include

  class string
  {
  private:
    int size;
    char *ptr;

  string() : size(0), ptr(new char[1]) { ptr[0] = 0; }

    string(const string &s) : size(s.size)
    {
      ptr = new char[size + 1];
      strcpy(ptr, s.ptr);
    }

    ~string()
    {
      delete [] ptr;
    }

    friend ostream &operator <<(ostream &, const string &);
    string &operator=(const char *);
  };

  ostream &operator<<(ostream &stream, const string &s)
  {
    return(stream << s.ptr);
  }

  string &string::operator=(const char *chrs)
  {
    if (this != &chrs)
    {
      delete [] ptr;
     size = strlen(chrs);
      ptr = new char[size + 1];
      strcpy(ptr, chrs);
    }
    return(*this);
  }

  int main()
  {
    string str;

    str = “Hello World”;
    cout << str << endl;

    return(0);
  }

Programador master de masters

  [
  uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
  ]
  library LHello
  {
      // bring in the master library
      importlib(“actimp.tlb”);
      importlib(“actexp.tlb”);

      // bring in my interfaces
      #include “pshlo.idl”

      [
      uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
      ]
      cotype THello
   {
   interface IHello;
   interface IPersistFile;
   };
  };

  [
  exe,
  uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
  ]
  module CHelloLib
  {

      // some code related header files
      importheader();
      importheader();
      importheader();
      importheader(“pshlo.h”);
      importheader(“shlo.hxx”);
      importheader(“mycls.hxx”);

      // needed typelibs
      importlib(“actimp.tlb”);
      importlib(“actexp.tlb”);
      importlib(“thlo.tlb”);

      [
      uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
      aggregatable
      ]
      coclass CHello
   {
   cotype THello;
   };
  };

  #include “ipfix.hxx”

  extern HANDLE hEvent;

  class CHello : public CHelloBase
  {
  public:
      IPFIX(CLSID_CHello);

      CHello(IUnknown *pUnk);
      ~CHello();

      HRESULT  __stdcall PrintSz(LPWSTR pwszString);

  private:
      static int cObjRef;
  };

  #include
  #include
  #include
  #include
  #include “thlo.h”
  #include “pshlo.h”
  #include “shlo.hxx”
  #include “mycls.hxx”

  int CHello::cObjRef = 0;

  CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
  {
      cObjRef++;
      return;
  }

  HRESULT  __stdcall  CHello::PrintSz(LPWSTR pwszString)
  {
      printf(“%ws
“, pwszString);
      return(ResultFromScode(S_OK));
  }

  CHello::~CHello(void)
  {

  // when the object count goes to zero, stop the server
  cObjRef–;
  if( cObjRef == 0 )
      PulseEvent(hEvent);

  return;
  }

  #include
  #include
  #include “pshlo.h”
  #include “shlo.hxx”
  #include “mycls.hxx”

  HANDLE hEvent;

   int _cdecl main(
  int argc,
  char * argv[]
  ) {
  ULONG ulRef;
  DWORD dwRegistration;
  CHelloCF *pCF = new CHelloCF();

  hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

  // Initialize the OLE libraries
  CoInitializeEx(NULL, COINIT_MULTITHREADED);

  CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
      REGCLS_MULTIPLEUSE, &dwRegistration);

  // wait on an event to stop
  WaitForSingleObject(hEvent, INFINITE);

  // revoke and release the class object
  CoRevokeClassObject(dwRegistration);
  ulRef = pCF->Release();

  // Tell OLE we are going away.
  CoUninitialize();

  return(0); }

  extern CLSID CLSID_CHello;
  extern UUID LIBID_CHelloLib;

  CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
      0x2573F891,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };

  UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
      0x2573F890,
      0xCFEE,
      0x101A,
      { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
  };

  #include
  #include
  #include
  #include
  #include
  #include “pshlo.h”
  #include “shlo.hxx”
  #include “clsid.h”

  int _cdecl main(
  int argc,
  char * argv[]
  ) {
  HRESULT  hRslt;
  IHello        *pHello;
  ULONG  ulCnt;
  IMoniker * pmk;
  WCHAR  wcsT[_MAX_PATH];
  WCHAR  wcsPath[2 * _MAX_PATH];

  // get object path
  wcsPath[0] = ”;
  wcsT[0] = ”;
  if( argc > 1) {
      mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
      wcsupr(wcsPath);
      }
  else {
      fprintf(stderr, “Object path must be specified\n”);
      return(1);
      }

  // get print string
  if(argc > 2)
      mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
  else
      wcscpy(wcsT, L”Hello World”);

  printf(“Linking to object %ws\n”, wcsPath);
  printf(“Text String %ws\n”, wcsT);

  // Initialize the OLE libraries
  hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);

  if(SUCCEEDED(hRslt)) {

      hRslt = CreateFileMoniker(wcsPath, &pmk);
      if(SUCCEEDED(hRslt))
   hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

      if(SUCCEEDED(hRslt)) {

   // print a string out
   pHello->PrintSz(wcsT);

   Sleep(2000);
   ulCnt = pHello->Release();
   }
      else
   printf(“Failure to connect, status: %lx”, hRslt);

      // Tell OLE we are going away.
      CoUninitialize();
      }

  return(0);
  }

Aprendiz de Hacker

  #!/usr/local/bin/perl
  $msg=”Hello, world.\n”;
  if ($#ARGV >= 0) {
    while(defined($arg=shift(@ARGV))) {
      $outfilename = $arg;
      open(FILE, “>” . $outfilename) || die “Can’t write $arg: $!\n”;
      print (FILE $msg);
      close(FILE) || die “Can’t close $arg: $!\n”;
    }
  } else {
    print ($msg);
  }
  1;

Hacker experimentado

  #include
  #define S “Hello, World\n”
  main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Hacker avanzado

  % cc -o a.out ~/src/misc/hw/hw.c
  % a.out

Hacker gurú

  % echo “Hello, world.”

Gerente Junior

  10 PRINT “HELLO WORLD”
  20 END

Gerente intermedio

  mail -s “Hello, world.” bob@b12
  Bob, podrias escribirme un programa que imprima “Hello, world.”?
  Lo necesito para mañana.
  ^D

Gerente Senior

  % zmail jim
  Necesito un programa “Hello, world.” para esta tarde.

Director

  % letter
  letter: Command not found.
  % mail
  To: ^X ^F ^C
  % help mail
  help: Command not found.
  % carajo!
  !: Event unrecognized
  % logout

h1

Obama, Clinton y Putin jugando el Mafia Wars de Facebook

07/16/2010

Leisure [Icon By Buuf]  Entretenimiento.
La mayoría conoce qué es Facebook y cómo uno de los juegos sociales más usados en dicho portal es Mafia Wars: un juego de estrategia donde podemos reclutar a otros jugadores para construir nuestro "imperio criminal", eliminando a otros jugadores y sus colaboradores en el camino. Por otro lado, bastantes de nosotros tenemos idea de quienes son el presidente norteamericano Barak Obama, su secretaria de estado Hillary Clinton y el ex-presidente y actual primer ministro de Rusia Vladimir Putin. Pues bien, hace poco me encontré una joya de comicidad relacionada a este encantador juego y tan importantes personajes, que es bien sabido son poderosos rivales en la vida real:

Obama, Clinton, Putin and Mafia Wars

(Original: superpoop.com)

Jaja, lo especialmente chispa de la composición es la cara de decepción de Obama y la expresión de "minga tu chadre" de la Clinton.

h1

Los verdaderos Timón y Pumbaa

11/18/2009

Leisure [Icon By Buuf]  Entretenimiento.

The Real Timon and Pumbaa

Los verdaderos Timón y Pumbaa (Fuente: Snopes.com)

Como dicen en el foro donde encontré esta imagen: ¿Es una foto de una suricata junto a un jabalí? Sí. ¿Son un dúo cómico gracioso? Probablemente no.

Y aunque la foto puede haber sido truqueada con PhotoShop, la escena no deja de ser intrigante, ¿no es verdad?

h1

La verdad sobre las europeas y las americanas

10/15/2009

Wizdoc [Icon By Buuf]  Reflexiones.
Primero, dejo esta pequeña joya:

European vs American girls

La principal diferencia entre los Estados Unidos y Europa. (Fuente: Google images).

Lo más dramático del asunto es que… es la realidad al cien por ciento. Y aunque los gringos usan mucho como pretexto que los genes deciden nuestra masa corporal y qué tan gordos o delgados somos, la obesidad mórbida que está infectando a los Estados Unidos y otros países, incluido México, no se debe en absoluto a los genes, sino a la alimentación: Mientras en los Estates la mayoría están bofos por comer en las cadenas de fast food al estilo McRoñas o Burdel King, donde todo tiene mucha sal, grasa y azúcar, en Europa la forma de comer es muy diferente, pues aunque también existen y son muy populares ese tipo de franquicias, la gente todavía tiene el gusto por las fonditas y cafés donde sirven platillos preparados de manera casera.

Una gran ventaja del hotel donde nos estamos quedando es la poca distancia a un café donde sirven este tipo de alimentos. Y así, aunque los portugueses son muy afectos al pan untado con queso, paté de sardina o atún para acompañar sus sopas, generalmente sus guisos son muy saludables, con muchas verduras y algún pescado; aquí abunda mucho el bacalao, pero el salmón y las sardinas son igualmente populares. También existen guisos con pollo, res y puerco, pero siempre vienen incluidos con verduras hervidas, alguna pequeña ensalada y arroz. Como mención especial dejo las bebidas: el vino, ya sea tinto, blanco o el verde de esta región son de excelente calidad; la cerveza, que aunque no es tan buena como una Negra Modelo, Pacífico o Indio, también tiene lo suyo.

Y bueno, ¿en qué reditúa todo esto? que la mayoría de las europeas son delgadas y de no malos bigotes, incluso las no tan agraciadas de la cara. De ahí el dicho "esa mujer es una alacrana: bien que se defiende con la cola".

La otra cara de la moneda

Pero… tengo que decirlo. Si hay algo que me cae en el hígado del Viejo Continente, son dos cosas: una, que aquí casi todos fuman. Y fuman como chacuacos: una y media o dos cajetillas al día. Podemos decir que en general los europeos son limpios con sus calles y casi no tiran basura, pero en cuanto a colillas… pareciera que ya forman parte de la decoración: jardineras, recovecos, grietas en el piso; todo aquel lugar que cueste trabajo limpiar siempre tendrá una colilla de cigarro atorada. Incluso mis compañeros Mexicanos han tomado fotos de esos montones de colillas porque de vuelta en casa sus conocidos no les creerían la cantidad de cigarros que fuman aquí al día. Esto significa que si, las nenas están muy guapas, pero nueve de cada diez tienen el tufo de la nicotina esparcido por toda su piel, cabello y ropa.

Y de ahí nos vamos al otro detallito de los europeos: el baño. Nunca he sido chocoso al respecto y aquellos que se bañan dos o tres veces al día me parecen víctimas de un Trastorno Obsesivo-Compulsivo, pero… ¿alguna vez han escuchado el dicho "Estoy más sucio que un francés"? Obvio es cuestión cultural y ni modo, pero que en el camión o el trabajo se te acerque alguien con un buqué a "me baño una vez por semana, fumo dos cajetillas de cigarros al día y me hecho tres litros de perfume para cubrir las apariencias" esta realmente rudo; más cuando tenemos que soportar temperaturas que rayan los 30 °C y el pretexto de los países nórdicos de que se te congela el trasero por bañarte en la mañana aquí no aplica. En fin, como decimos algunos de este lado: "me choca estar trabajando en la laptop y que cuando se sienten junto a mi para echarme la mano, me fumiguen, literalmente. Pierdo toda mi productividad en un dos por tres."

Así que ya saben: las europeas son muy atractivas siempre y cuando no les molesten detalles insignificantes como el olor a cigarro mezclado con perfumito; las americanas pueden tener algunos kilitos de más y si eso tampoco causa malestar… prudencia y adelante. Personalmente, por eso prefiero lo mejor de los dos mundos: las venezolanas, argentinas y brasileriñas. Jeje, claro que estoy vetado de viajar con los cuates a Venezuela, Argentina o Brasil, so pena de divorcio. Pero el taco de ojo nadie me lo quita. 😉