javisantana.com

Letra pequeña

Estaba viendo la F1 hace un rato y terminando un trabajo sobre túneles de nivel 2 (el trabajo más pesado que he hecho en mi vida) y en esto que, como siempre, estoy leyendo la letra pequeña de los anuncios, esta vez de un hiunday (un 4x4, otras moda más, tan estúpida como las demás) y leo: “el precio se corresponde a la opción basica…. incluído plan prever, plan blblabal, y plan de fidelización”. Plan de fidelización? pero qué se han creído? que somos gilipollas?. Todas las compañías hacen planes de fidelización, los hipermercados y gasolineras con sus tarjetas, las operadoreas móviles con contratos imposibles de dar de baja, pero por lo menos no son tan descaradas y no te dicen: “mira, ignorante, te estamos atando para que te gastes el dinero que no tienes ( las casas suben un 108% y los sueldos un 27%, me dirás quién no está hipotecado) y además no te gastes menos de lo que te estás gastando”.

En las inversiones familiares evito siempre evitar ese tipo de ofertas, tanto en gasolineas, contratos elétrica+operadora telefónica, internet, es por ello que me destrozan este tipo de cosas.

Código del día (o del mes :P)

Hace unos días estaba pendiente de los resultados de los scene awards con las epseranza que Arise (stravaganza) y Paradise (RGBA) ganaran en sus respectivas catergorías (mejor demo y mejor 64k). Para ser algo más parcial decidí bajarme las
producciones candidatas a la cetegoría 64k (las demos para cuando me ponga una ADSL de tropecientos megas) y entre ellas me gustó especialmente Prophecy de conspiracy que finalmente resultó la ganadora.
En concreto me gustó un efecto, que no sé como describir, quizas como efeto “película vieja”, que aparece en la parte en la que comienza a verse la ciudad después de ver las praderas verdes y las margaritas. Como buen documentador que soy (copiar deliveradamente es plagiar, copiar deliveradamente haciendo referencia es documentar), decidí hace algo similar para la intro 4k que estoy preparando. Supuse que lo que hacía era generar una serie de texturas con ruido no coherente y en la fase de post-render de la escena superponer la serie con un quad de toda
la pantalla con un blend.
El primer paso, codear las herramientas para generar texturas y subirlas
a la gráfica:

  
#define TAMX 128  
#define TAMY 256

float Gtime =0;

unsigned char img\[TAMX\*TAMY\*4\];  
int i,j;  
int k=8;  
int TEX\_post\[8\];

typedef void(\*gen\_f)();  
unsigned char \*col;

int TEX\_upload(int x,int y,unsigned char\* data)  
{  
  int id;  
  glGenTextures(1, &id);  
  glBindTexture(GL\_TEXTURE\_2D, id);  
  gluBuild2DMipmaps(GL\_TEXTURE\_2D,4,x,y,GL\_RGBA,GL\_UNSIGNED\_BYTE,data);  
  return id;  
}

int GenTex(gen\_f fn)  
{  
   for(i = 0; i< TAMX; ++i)  
   {  
    for(j = 0; j< TAMY; ++j)  
    {  
        col = &(img\[(j\*TAMX+i)\*4\]);  
        fn();  
    }  
   }  
   return TEX\_upload(TAMX,TAMY,img);

}  



El segundo paso, generar las texturas:



void TEX\_Rand(void)  
{

        col\[0\] =  0;  
      col\[1\] = 0;  
      col\[2\] = 0;  
      col\[3\] = InterPol(20.0f,60.0f,(float)rand()/0xFFFF);  
//interpolacion linea, cosenoidal o lo que desee  
}

void INTRO\_Init()  
{  
.....  
 while(k--)  
{  
     TEX\_post\[k\] = GenTex(TEX\_Rand);  
}  
....  
}  



En este paso lo que hago es generar 8 texturas de color negro pero con
un canal alpha entre 20 y 60 (prácticamente transparentes), aunque según
se modifiquen estos valores se consiguen diferentes resutados.

El tercer y último paso, dibujarlo:



//el código del quad... última tenología XD  
void quad()  
{  
  glBegin(GL\_QUADS);  
          glTexCoord2f(0,0);  
          glVertex3f(-1.0f/2.0f,-1.0f/2.0f,0);  
          glTexCoord2f(0,1);  
          glVertex3f(-1.f/2,1.f/2,0);  
          glTexCoord2f(1,1);  
          glVertex3f(1.f/2,1.f/2,0);  
          glTexCoord2f(1,0);  
          glVertex3f(1.f/2,-1.f/2,0);  
       glEnd();  
}  
//con este parámetro se cosigue tener puntos más o menos gordos, o con  
diferentes pixelados, según se quiera ver  
float Granularidad  = 4.0f;  
\_\_inline void PostRender()  
{  
          glLoadIdentity();  
          glTranslatef(0.0f,0.0f,-0.5f);

            glMatrixMode(GL\_TEXTURE);  
          glScalef(Granularidad,Granularidad,Granularidad);

            glEnable(GL\_BLEND);  
          glDisable(GL\_DEPTH\_TEST);  
          glBindTexture(GL\_TEXTURE\_2D,TEX\_post\[k++%0x07\]);  
          quad();  
          glLoadIdentity();  
          glMatrixMode(GL\_MODELVIEW);  
}  
void INTRO\_RenderFrame(float delta)  
{  
  RenderALL();  
  PostRender();  
}


Y se obtiene un resultado la mar de chulo y muy configurable variando
los parámetros de alpha de las texturas y de granularidad. Como no, lo
mejor para estos casos es una imagen del antes y del después :)


25 tacos [ C · · · · · · · · · ]


[1]
[2]
[3]
[4]
[5] <— especial atención al algoritmo de los fantasmas :_)

Pruebas de selección

Bien, acabo de llegar de las prubas de selección con deloitte en el hotel NH ciudad de Valladolid. Me levanté a las 7:15 y después de enfundarme mis mejores pantalones, mi camisa azul (he usado la azul claro porque dice mi madre que me hace muy bien a la cara XD) y mis queridos zapatos camper (mereció la pena los 80€ que me gasté en ellos) salí zumbando hacia el hotel. La cita era a las 8 y una de mis mayores dudas era con quien me encontraria: gente de clase, personas de otras carreras… la duda se resolvió nada más acercarme al hotel, allí había 3 personas que conocía de clase (los típicos que ves mil veces pero que no sueles hablar con ellos). El primer error que cometí es la de no llevar el traje, que, aunque iba bien vestido, era mucho más apropiado (más que nada por el contacto cercano con las personas de RRHH).

A las 8:45 entramos a una sala del sótano del hotel. Era la típica sala forrada en madera, con mesa presidencial y buena acústica. Por parte de deloitte había dos chicas de RRHH que nos dieron las gracias - qué menos - por venir. A continuación nos hicieron, si no recuerdo mal, 4 test: razonamiento verbal, razonamiento lógico (2) e inglés. En el de razonamiento verbal te daban una frase sin dos palabras y debías rellenarlas con una de 4 posibilidades, por ejemplo: segundo es a tiempo como perro es a ……. El de razonamiento lógico eran una serie de figuras que formaban una secuencia y debías continuarla. Este test para una persona que se ha metido un año entero de ecuaciones de maxwell es relativamente fácil. El de inglés, un infierno, todo phrasal verbs y uso de for, in, at, about, from, etc, en frases con un vocabulario más o menos asequible pero bastante confusas. Para esta parte no encuentro ningún punto importante, sale solo.
A continuación la temida dinámica de grupo. Para ello nos dividieron en 3 grupos (aparentemente aleatorios) y nos fuimos a una sala parecida a la primera pero más adecuada, tenía una mesa redonda en la que nos veíamos todos la cara. Las dos personas de RRHH se sentaron juntas, una con un portátil (creo que era licenciada en económicas) y una psico-pedagoga que tomaba notas a mano. Lo primera sorpresa en las presentaciones… todos teleco y con experiencia laboral. La mayoría tenían el proyecto casi acabado y, la verdad, parecían mucho mayores que yo. Estaba claro que estaba en un grupo que no era el mío :( pero tampoco me preocupó demasiado. En las presentaciones un apunte: es importantísimo poner enel CV el área en el que te interesa trabajar y tu disponibilidad para desplazarte por toda españa.

La dinámica de grupo fue bien, debíamos proponer cada uno un negocio para un persona de mucha pasta. Después de unas ideas la que ganó, sorprendentemente, es la de enlatar el calimocho la cual tuvimos que desarrollar. Había claramente 3 personas que luchaban por tener el mando que prácticamente solo hablaban ellos, y lo peor es que se dispersaban. Por ello mis dos primeras intervenciones fueron para encauzar la disputa y volver a lo que realmente era interesante. Hice unas 5 aportaciones más en las que aporté ideas que finalmente estuvieron en lo que le presentamos al cliente. Creo que el problema de las dinámicas es que la gente quiere que la vean y para ello habla, aunque sean tonterías, no dejando hablar a los demás que quizás tengan ideas, incluso para que ellos sigan hablando. El momentazo fue cuando la señorita comentó que debíamos hablar en inglés, todo el mundo parecía saber inglés. De 12 personas solo 3 no hablamos y los demás lo hicieron con un nivel bastante bueno.

De la dinámica se puedo extraer las siguientes conclusiones: hay que ir bien vestido, no tener miedo a decir cosas siempre que estén bien argumentadas (sobre todo los argumentos), dar paso a las personas que no hablan, ser capaz de no irse por las ramas y sobretodo, que no se note que quieres hacerte notar.

La conclusión de todo esto es que la universidad va muchísimos años más atrás de lo que pensaba. Mientras que ahora la formación que se requiere para un ingeniero es la social, la universidad se centra en la formación técnica y lo peor, de hace 20 años. Me irrita muchísimo este tema, más que nada porque no hay escuela de habilidades sociales y personas que han tenido problemas muy graves en su vida (que afectan profundamente al comportamiento social de la persona) vemos que, además de tener que superar las asignaturas, tenemos que superar otra serie de aspectos sin ningún tipo de formación. Creo que cuando termine las asignaturas me voy a dedicar a viajar al extrajero a aprender idioma, mejorar mis habilidades sociales y dejar aparcado el PC que tantos buenos ratos me ha dado (y me da).

Diccionario RAE con python

Este post es solo para enseñar lo que es un lenguaje de verdad a alguien que yo me sé :)

C:\\temp>rae.py barruntar  
barruntar  
\-> Prever, conjeturar o presentir por alguna se├▒al o indicio.  
  
C:\\temp>type rae.py  
import re;  
import sys;  
import urllib;  
if(len(sys.argv) > 1):  
      s =re.compile("<span class=\\"eAcep\\">(.\*?)</span>");  
      rm = re.compile("<.\*?>(.\*?)<.\*?>");  
      l = urllib.urlopen("http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO\_BUS=1&LEMA=%s" % sys.argv\[1\]).read();  
      g = s.findall(l)  
      if(g):  
              print sys.argv\[1\]  
              for i in g:  
                       print "->"+ rm.sub(lambda x:x.group(1),i);  
  
  
C:\\temp>  

Falla el character enconding, pero en 3 minutos no me da tiempo a mirar la documentación (realmente tampoco me interesa :P). Siempre se ha dicho que parsear HTML con regexp es un asesinato, pero ahí esta.
a dormir