Monday, 28 July 2008

Incoherencias Automotrices

La gente no deja de sorprenderme, la verdá. Qué cierto es eso de que para gustos están los colores. Y como dice un colega...

" ¡y más nos vale! si no, estaríamos todos dándonos de ostias por la misma mujer"... Si es que la sabiduría no tiene precio...

En fin, al grano grano. El motivo de este Post no es otro sino publicar algunos Expedientes-X de la automoción, que irán apareciendo en entregas sucesivas, numerados como sigue:

1.- Esa lista de extras...


Vendedor.- "¿Qué extras desea con su nuevo Volkswagen Passat?"

Cliente.- "Si, vamos a ver... si... me pones cuarto y mitad de esas llantas tan molonas de la foto, cien gramitos de pintura metalizada, navegador y... qué mas, qué mas... ¡Ah, si!. Me pones los asientos tapizados en cuero, esos que cuestan 3.000 napos. ¡Y para taparlos, unos reposaculos por 3 euros y medio!"...


Y de beber.... ¡Albóndigas!...

2.- La respuesta correcta...

Érase una vez un padre que pensó que la respuesta correcta a la pregunta "Papi, ¿qué me vas a comprar como premio por haber aprobado el carné?", no era otra sino...

"Un S5".... Con dos cojones...



No sabemos si es que pretendía hacer de su niño un poquito más gilipollas todavía, o es que quería que se matara directamente el primer finde de discoteca...

En fin, cuánto norte perdido...

UVAtlas. D3DXCreateTextureGutterHelper fails with some Meshes

I finally found the solution to a problem that was driving me nuts.

D3DXCreateTextureGutterHelper (or the constructor of TextureGutterHelper, if on MDX) throws an "Invalid Call" exception with certain meshes.

I came to a situation where the method worked for a Mesh generated by D3DXCreateUVAtlas, but failed for the (aparently) SAME mesh created by me:

* Same number of vertices/faces
* Same attribute table
* Same vertex format
* Same Mesh Options
* Same declarations
* Same indices at IndexBuffer
* SAME EVERYTHING

Then, what was the cause?

My meshes have 2 or more different sets of TexCoords. One of them to address the UVAtlas, and others for other kind of textures. Aparently, D3DXCreateTextureGutterHelper will fail if the coordinates addressing the UVAtlas are not in the 1st set of TexCoords.

In my case, UVAtlas TexCoords are always in the 2nd set of TexCoords. That´s why it was failing.

Workaround: create a temp Mesh and copy the UVAtlas coordinates to the first set. Then, the method will succeed.

PS To the Microsoft DirectX Team:

The work done with all the UVAtlas functions is priceless. They are really useful, but please, document things like this a little bit.

This kind of problems are very easy to work around when known, but finding the cause by brute-force investigation can take hours and hours.

Wednesday, 23 July 2008

Instalar aplicación Compact Framework/Windows Mobile en 4 pasos

Últimamente, en mis pocos ratos libres, estoy dedicando tiempo a estudiar el Compact Framework y el desarrollo para dispositivos móbiles, trasteando con DirectX Mobile, WinForms y todo lo que se me ocurre.

El caso es que quería que un programilla bastante útil que he terminado apareciera en la lista de programas instalados, para poder añadirlo al menú de acceso rápido de mi HTC Touch.

Para conseguir esto, hay que crear un pequeño instalador que, en lugar de símplemente copiar la aplicación al dispositivo móvil, efectúe todo el registro habitual de un proceso de instalación. Ésto se puede hacer con un instalador "User Friendly", con ventanitas y demás, o con la variante más rápida, pero menos elegante, que usa ficheros CAB. Por motivos de rapidez iremos por ésta última vía.

La tarea es muy sencilla y rápida, así que voy a explicarla en cuatro pasos:

1.- En la solución donde tengas tu proyecto para Compact Framework, añade un nuevo proyecto escogiendo: Add -> New Project. Después, escoge la categoría "Other Project Types" -> "Setup and Deployment" -> "SmartDevice CAB Project".

2.- Si hacéis "click" en el nuevo proyecto, podrás especificar en sus propiedades el nombre del producto, propietario, etc, etc. Si hacéis "right click", aparecerá un menú contextual, donde podréis elegir: "View -> File System". Se abrirá una pestaña en la ventana principal de Visual Studio. Ésta contiene los contenidos del sistema de ficheros que queremos dejar en la máquina donde se va a instalar nuestra aplicación.

3.- Seleccionamos "Application Folder" en la mitad izda. de esta pestaña, y en la mitad dcha, hacemos "right click" y seleccionamos: Add -> Project Output. Se abrirá una ventanita donde podrás elegir (en el ComboBox de arriba) qué otro proyecto de la solución será el que queremos instalar. Escogéis el que queráis, dejáis marcada la opción "Primary Output" y pulsáis en Aceptar.

4.- Hacéis "right click" sobre el nuevo proyecto de setup y pulsais sobre "Build". Si todo va bien, en la carpeta de salida del proyecto encontraréis el nuevo y flamante CAB de instalación.


Así de fácil.

Friday, 18 July 2008

VisibleChanged Event, missing in the Compact Framework

If you need to do something in the VisibleChanged event of a form or control, using the Compact Framework, you´ll see that this event is missing.

You can easily fix this shadowing the Visible property with a newer one, and firing the event by yourself. Just like this:

public event System.EventHandler VisibleChanged;
public new bool Visible
{
get { return base.Visible; }
set
{
if (base.Visible != value)
{
base.Visible = value;
if (VisibleChanged != null)
VisibleChanged(this, EventArgs.Empty);
}
}
}

The Beauty and The Beast. Altogether

Ayer, pude ver cumplido uno de mis sueños de toda la vida.

Después de tener la oportunidad de probar un BMW 335 coupé, el año pasado, el siguiente paso lógico vino a través de una de las horas más bonitas que uno puede pasar metido en un coche: 83 Km de puertos de montaña, con el sol achicharrándote el cogote porque has retirado la capota de un Porsche Boxster S. Justo como este. De hecho, exacta y literalmente igual a este:






Ya desde fuera impresiona: Pinzas rojas, ruedas grandes adelante, ruedas insultantemente grandes atrás, alerón que se levanta a más de no-se-cuántos por hora, en fin... qué voy a contar. Todos hemos visto una y mil fotos de este coche.

Por dentro la cosa mejora aún más. 16.000 euros de extras hacen que lleve tapizado en cuero hasta las manecillas del tacómetro: cronómetro analógico en el centro del salpicadero (para medir tu destreza cuando te metes a un circuito), asientos impecables, un volante precioso, navegador integrado entre las preciosas costuras que terminan de forma impecable la consola, y la llave, por supuesto, a la izquierda, como debe ser. ¿Cuantas veces he repetido la palabra "precioso"? Normal...



Por fin llega el momento. Alguien me desliza la llave Porsche y me dice: "¡Venga, sácalo!". Tengo que reconocer que hasta me temblaban un poquiño las piernas.


Tal y como su dueño me dijo: "A este coche no te subes, a este coche te bajas"... Y qué razón tiene. Una vez sentado, tu culo no estará a más de 25cm del suelo... impresionante. ¿Quién era el que decía que un coche no es un coche si una vez sentado con la puerta abierta, no eres capaz de tocar el asfalto con la mano? Pues bien, este coche pasa la "Prueba del Orangután" sin ningún tipo de problema. Esto es lo que uno contempla cuando está a punto de arrancar un Porsche:


Una de las primeras cosas que me sorprende es la posición de conducción. Es realmente cómoda (algo que no me esperaba, por mucho que fuera un Porsche). Con cada cosa en su sitio, te adaptas al coche como un guante.

Llega el momento. Giro la llave, y entonces me doy cuenta de eso que tanto he oído hablar: "El sonido Porsche"... No trataré de aburrir describiendo lo que pasa cuando aceleras. Simplemente diré: DIOOOOSSSSS QUÉ BONITOOOOOO!!!! El motor, justo detrás de tus orejas, ruje como un león de metal. En este coche es casi un pecado poner la radio.


La segunda sorpresa llega cuando emprendo la marcha. Ni se me cala, ni siquiera lo llevo a tirones. ¡Es sorprendentemente fácil de conducir! En los primeros compases, lo llevo como un auténtico novato que conduce su habitual diésel, cambiando como mucho en las 3000.


En esos regímenes, el coche es una delicia de suavidad, perfectamente cómodo, conducible, y empuja como los coches a los que estamos acostumbrados que pueden rondar los 100 o 150 CV. Incluso te podría parecer que el coche no es todo lo bestia que te esperabas, pero estarías equivocado.... muy equivocado...

En cuanto tomo un poco más de confianza, encaro la primera recta de unos 800m, y en segunda me marco un "Pedal to the Metal". El coche nos deja literalmente pegados a los asientos y empieza el festival: en un suspiro 2000-3000-4000 y entonces.... 4500 y llega la magia: un alarido hace que mi sonrisa pase de ser una mueca a una carcajada. Dios mío de mi vida. 5000-6000-7000 y sigue estirando como una puta bestia. Perdón por la expresión, pero creedme si digo que, de verdad, no se puede describir de otra forma. Como decía otro amigo que también tuvo la oportunidad de probarlo: "es lo más parecido a una moto que me ha tocado ver".


Normalmente contaría aqui qué velocidad se consigue alcanzar en 2ª, en 3ª, etc., pero sinceramente, no tengo ni puñetera idea. Solo sé que en 3ª pasamos de 150 sin problemas. Y es que en este coche, a un inexperto como yo, no le da tiempo a mirar al velocímetro ni al cuentavueltas. Simplemente no puedes. Empuja con tantos güevos que tienes que agarrar fuertemente el volante y mirar fijamente a la carretera. En esas condiciones, no es nada dificil llegar al corte, porque en ningún momento el coche te transmite la sensación de que se le acabe "la chicha". Al contrario, cada vez empuja más, hasta que corta.

Otra gran sorpresa es que sus suspensiones no son tan incómodas como me esperaba. Es más, funcionando en modo normal (no Sport), no son más incómodas que las de cualquier coche "de calle". Eso sí, no por ello el coche deja de ir "sobre raíles". Es impresionante la capacidad que tiene para girar.

Hubo un momento en que un pobre hombre, con un Saab 93 nuevecito, pensó que era buena idea tratar de seguirnos. Era uno de esos tipos molestos que van a nueve metros y medio de tu escape, como tratándo de molestar y retar a partes iguales. No hubo discusión posible. Si en la primera recta ya se perdía en el retrovisor, en cuanto llegaron cuatro curvas, el Saab se desvaneció en el aire.

El último punto que hizo que mis pelos se pusieran como "picos de escarpias" fue la frenada. Sinceramente, mientras yo conduje no la probé como debía. Sencillamente porque no era consciente de cuánto es capaz de frenar este coche. Su dueño me lo mostró cuando, al final de la tarde, se puso él al volante.

No se, creo que no soy capaz de describirlo. Nunca imaginé que era posible acercarse a semejante velocidad a una rotonda, sin hacer un "recto" y pasarla por encima, reventando el vehículo en la maniobra, claro. Era una rotonda enorme, de esas que cortan por la mitad una carretera secundaria en buen estado y sin tráfico. Sin peligro alguno a la vista, no sé a qué velocidad iríamos, pero creo que no exageraría nada, si 40 o 50 metros antes de la rotonda, fuéramos a 140 km/h. El afortunado conductor habitual de este coche clavó los frenos (y a mí contra el cinturón de seguridad), punta tacón, segunda, hachazo de volante y gas...

Sus muertos...







Tuesday, 8 July 2008

Patente de Corso. Olé

Debo ser un ignorante, lo reconozco. No he leído ningún libro de Reverte. Es más, no sé si he leído ningún libro novelístico entero. Probablemente sea mezcla de vagueza, falta de tiempo, y cansancio a partes iguales, aunque soy consciente de que eso no es excusa.

Lo que sí leo son cientos de artículos técnicos que me dan los mínimos conocimientos para evitar las faltas de ortografía más severas. Tampoco me suelo perder “Patente de Corso”, de Reverte.

Desde la ignorancia de un “ingeñero” que “no entiende de letras”, y aunque no le hagan ninguna falta mis alabanzas, quiero felicitar al Sr. Reverte. Poca gente tiene los güevos de decir las cosas claras y encima acertar con asiduidad. Si además le sumas que domina las palabras, y sabe cómo hacerse entender, el resultado son momentos de genialidad que creo deberían recordarse.

No ha sido otro sino el artículo “Un facha de siete años” el que me ha hecho escribir estas líneas. Qué pena que hagamos de éste, un país en el que un chaval de 7 años tenga que llegar llorando a casa porque le han llamado facha.

En mi modesta y torpe opinión, seas de la cuerda ideológica que seas, me parece de pervertidos educar a un crío de 7 años para que se preocupe por el fascismo, nacionalismo, politiquismo, estupidismo, gilipollismo o hijoputismo. Un crío es un crío, y a esa edad únicamente debería pensar en ser mejor portero, astronauta, o vaquero del séptimo de caballería (aunque hoy en día seguramente preferirán ser caballero Pokemon, o alguna hostia así). En lo único en lo que tiene sentido educar (a parte de conocimientos propios de la EGB), es en el respeto a los demás. Cuando esté crecidito, ya decidirá él por qué preocuparse.

No siempre es así, pero esta vez subscribo letra por letra, y espacio por espacio, el sentimiento que Arturo refleja en “ese folio de terapia personal”, como a él le gusta llamar. Me tomo la libertad de hacer realidad algo imaginado por el Sr. Reverte (añadiendo algunas licencias Futurámicas), ya que me ha parecido muy divertido.

Parafraseando:

“El problema no es la bandera, ni el toro, sino la puta que nos parió. A todos nosotros. A los ciudadanos de este país de mierda”

Ole tus güevos Artorius
.
.