Error En Excel: Old Format Or Invalid Type Library

Trabajando con Excel puede que te hayas encontrado con este mensaje de error.

Error: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Este error se produce cuando la versión del Excel instalada en el equipo se encuentra en inglés y el sistema operativo en español.

Para solucionar el problema basta con cambiar la cultura del thread de ejecución. Debe de estar en inglés.

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

Review: No Me Hagas Pensar

Título: NO ME HAGAS PENSAR. Una aproximación a la usabilidad en la web
Autor: Steve Krug
Nº Páginas: 216

“No me hagas pensar” se trata de un libro sobre usabilidad en el entorno web. El libro intenta dar una serie de consejos y enseñadas sobre el diseño web. Con el objetivo de facilitar el uso de la web a los usuarios. El reto es no hacerles pensar, es decir, que sea lo más sencillo posible para ellos navegar por una web.

El autor, Steve Krung, presenta su experiencia en este campo. Trata los conceptos de usabilidad de una manera muy clara, sencilla y amena. Además de ilustrar en todo momento, con ejemplos de web reales, sus ideas. También en varios capítulos, al final, presenta una serie de ejercicios utilizando webs de ejemplos.

Entre otros temas habla sobre: cómo debe de ser la jerarquía de títulos dentro de la web; Cómo han de colocarse las “migas” para que el usuario sepa en todo momento donde se encuentra; Cómo colocar la información dentro de la web para que no resulte confusa al usuario; Cómo realizar pruebas de usabilidad para que estas resulten útiles; etc…

Resumiendo un poco el libro. El autor viene a decir que de un solo vistazo, el usuario debe de saber: donde se encuentra dentro de la web y de que trata la web. Sobre esto esto habla a lo largo de los capítulos del libro:

  • Prólogo.
  • Introducción.
  • Capítulo 1. ¡No me hagas pensar!.
  • Capítulo2. ¿Cómo usamos realmente la web?.
  • Capítulo 3. Diseño de rótulos 101.
  • Capítulo 4. ¿Animal, vegetal o mineral?.
  • Capítulo 5. Omisión de palabras innecesarias.
  • Capítulo 6. Señales en la calle y migas.
  • Capítulo 7. El primer paso para la recuperación es admitir que ha perdido el control de la página principal.
  • Capítulo 8. El granjero y el ganadero deben ser amigos.
  • Capítulo 9. Prueba la usabilidad por 10 centavos el día.
  • Capítulo 10. La usabilidad como cortesía común.
  • Capítulo 11. Accesibilidad, hojas de estilo en cascada y usted.
  • Capítulo 12 ¡Ayuda! Mi jefe quiere…. Lecturas recomendadas.

Además al final del libro el autor recomienda una serie de lecturas:

Una lectura muy recomendable, no todo va a ser código.

Detección de Colisiones de Objetos 3D en WPF

Window Presentation Foundation proporciona la posibilidad de trabajar con objetos 3D dentro de una aplicación. Ello hace que se puedan desarrollar aplicaciones muy ricas utilizando modelos en 3D.

Si la aplicación trabaja con objetos 3D que dan la posibilidad de desplazarse a lo largo de la pantalla puede ser interesante detectar colisiones entre ellos. A la hora de detectar colisiones entre objetos en una aplicación podemos optar por varias estrategias. Por ejemplo, dentro de XNA podemos encontrar: bounding box, bounding sphere y bounding frustrum. El Framework de XNA ya proporciona métodos para facilitar las colisiones entre los objetos.

  • Bounding box: Esta técnica se utiliza cuando el objeto se adapta a una forma rectangular. Lo que hace es envolver el modelo en una caja. Si el modelo no es totalmente rectangular puede que se den falsas colisiones.
  • bounding sphere: Es técnica envuelve el objeto con una esfera. Se utiliza cuando el modelo se adapta mejor a la forma de una esfera.
  • bounding frustrum: Esta técnica no es usada realmente para controlar las colisiones. Ya que controla el espació visto por la cámara. Así puede determinar si lo que se está viendo es un objeto o no y por consiguiente decidir si dibujarlo o no.

La técnica más sencilla de desarrollar con WPF es la de bounding box. El Framework proporciona los métodos necesarios para ello.

Dentro de un GeometryModel3D podemos encontrar la propiedad Bound. Esta propiedad devuelve un objeto del tipo Rect3D. Este objeto representa el rectángulo que envuelve al modelo. Además la propia clase Rect3D cuenta con un método, IntersectsWith. Este método recibe como parámetros otro objeto Rect3D y verifica si entre ambos rectángulos hay una intersección. Si hay una intersección, devuelve True. Eso quiere decir que los objetos están colisionando.

Rect3D rectModel1 = ((GeometryModel3D)mv3D.Content).Bounds;
Rect3D rectModel2 = ((GeometryModel3D)mv3D.Content).Bounds;

if (rectModel1.IntersectsWith(rectModel2))
{
    //Se ha producido una colisión.
}
else
{
    //No hay colision entre ambos modelos.
}

Si sobre el modelo se ha hecho alguna transformación, habrá que tenerlo en cuenta a la hora de obtener el rectángulo que envuelve al modelo. De tal manera, que también esa transformación deberá ser aplicada al Rect3D resultante. Para ello existe el método TransformBounds que aplica las transformaciones a un Rect3D.

 

ModelVisual3D mv3D = new ModelVisual3D();
ModelVisual3D mv3D2 = new ModelVisual3D();

mv3D.Content.Transform = new ScaleTransform3D(0.2, 0.2, 0.2);
mv3D2.Content.Transform = new ScaleTransform3D(0.2, 0.2, 0.2);

Rect3D rectModel1 = mv3D.Transform.TransformBounds(mv3D.Content.Bounds);
Rect3D rectModel2 = mv3D2.Transform.TransformBounds(mv3D2.Content.Bounds);

if (rectModel1.IntersectsWith(rectModel2))
{
    //Se ha producido una colisión.
}
else
{
    //No hay colision entre ambos modelos.
}