El increible e inesperado mundo de las tipografías de ordenador

En la revista IEEE Spectrum de este mes de Mayo trae un artículo escrito por Kevin Larson de Microsoft que me ha dejado impresionado. Se trata de «The Technology of Text» y en él Larson, un experto en tipografía del gigante informático, explica las dificultades existentes en algo que damos tan por sentado como un tipo de letra.


TextSon realmente impresionantes los desafíos técnicos a los que se deben enfrentar estos profesionales, y la dificultad que entraña la creación de un tipo de letra que sea legible en las pantallas digitales de tan baja calidad si las compramos con una imprenta. Esta cuestión que parece baladí es interesante ver la brutal influencia que tiene en nuestro trabajo, estado de ánimo e incluso capacidad para razonar, como demuestran diversos experimentos psicológicos.


Desde el punto de vista técnico sólo daré algunos datos que me han llamado poderosamente la atención:



· Al principio las fuentes contenían mapas de bits para representar cada caracter (hay fuentes con más de 128.000 bitmaps embebidos), pero ahora estos mapas se generan al vuelo en menos de 20 milésimas de segundo.


· Para deducir la mejor forma de representar una letra concreta según la resolución y múltiples otros factores se necesita usar código específico denominado «hint». Algunas fuentes de las primeras en Windows 3.1 llevaban ¡¡más de 20.000 líneas de código sólo de hints!!


· Programar los «hints» de las fuentes de Windows 3.1, allá enla prehistoria, llevó 18 meses con el trabajo simultáneo de 6 ingenieros y 18 expertos en diseño tipográfico. con los actuales avances y los «hints» automáticos asistidos por ordenador lleva «solamente» 2 meses diseñar los «hints» de una fuente, con mucho del trabajo automático pero con todavía mucho ajuste manual letra a letra.


· Crear una fuente japonesa con todos sus ideogramas y símbolos solía llevar el equivalente a 50 años/hombre de trabajo hasta no hace demasiados años. Sin embargo la fuente japonesa Meiryo que viene con Windows Vista llevó «tan sólo» 2 años/hombre porque tuvieron que tocar atotalmetne a mano «sólo» 3.000 caracteres, retocar un poco a mano pero no todo otros 6.000 y los 12.000 restantes los hizo un software especializado.


Hay otros datos interesantes sobre la tecnología ClearType de Microsoft y cómo se compara con las de otras empresas como Adobe o Apple (que usan una forma de abordar el problema distinta más eficiente para impresión pero pero para leer en pantalla), y el artículo contiene explicaciones sobre trucos que se usan con las letras para hacerlas más legibles y mejorar el trabajo en pantalla.


Merece mucho la pena leerlo. ya nunca volverás a ver los tipos de letra del mismo modo que antes. Tienes acceso a la versi´no on-line del artículo en: «The Technology of Text«.


Por cierto, y antes de que me lo pregunte alguien: sí, lo reconozco, sigo prefiriendo leer en papel que en pantalla y esta revista la recibo puntualmente en casa en su versión impresa todos los meses. Soy de los perezosos a los que les cuesta leer en pantalla, aunque viendo los avances que están haciendo y el trabajo que pasa esta gente me propondré aumentar el ratio a favor de la pantalla aunque sólo sea por deferencia a ellos 😉

Una característica poco conocida de VS2005: puntos de interrupción dinámicos

Todos sabemos que para depurar una aplicación una de las herramientas más útiles que tenemos son los puntos de interrupción. Para activar uno basta con colocarse en la línea de código que nos interese inspeccionar y pulsar F9. Ésto coloca un puntito rojo en el lateral del editor que nos indica que posteriormente la ejecución se detendrá allí cuando el código pase por el punto. Con F9 lo desactivamos de nuevo.


Pero… ¿se te ha dado por pulsar con el botón derecho sobre uno de estos puntos de interrupción?:



Tenemos diversas opciones todas muy interesantes y quizá infrautilizadas. Pero si hay una de ellas que poca gente conoce es la última: «Al visitar…»


¿qué diantres es esto?


Pues como su propio nombre indica nos permite especificar qué queremos hacer cuando el depurador llegue a este punto de interrupción. Al elegier esta opción aparece el siguiente diálogo:



Con él podremos indicar que, al pasar por este punto de interrupción se anote en la ventana de depuración mucha información interesante del tipo «Pasé por aquí y la pila de llamadas era esta y me habían llamado desde tal función, etc…». o podemos ejecutar una macro que nos interese para el proceso de ejecución. Y, sobre todo, podemos decirle qe continúe la ejecución como si no fuera un punto de interrupción, lo cual nos permite continuar de forma transparente pero usando el punto de ruptura como un elemento de diagnóstico muy interesante.


Espero que lo encuentres útil.

ReMIX’07: El evento al que no debes faltar

ReMIX'07


Los próximos días 4 y 5 de Junio Microsoft celebra en Madrid el evento ReMIX’07.


Se trata del principal evento de Microsoft para los diseñadores y desarrolladores Web más vanguardistas. Dos días de duración, 20 sesiones en 2 tracks paralelos y los mejores ponentes nacionales e internacionales nos permitirán entablar contacto con las tecnologías más innovadoras y las nuevas oportunidades de negocio de la Web. Durante estas jornadas Microsoft, de la mano de Forest Key, director de producto de la división de servidores y herramientas de Microsoft, presentará Silverlight (Codename WPF/E). 


¿A quién va dirigido?


A desarrolladores vanguardistas interesados en la construcción de sitios web con ASP y AJAX, aplicaciones para Windows Media Center, construcción de Gadgets para Windows Vista y Windows Live y mucho más


A diseñadores web vanguardistas interesados en optimizar su sitio web, utilización de WPF y Silverlight (Codename WPF/E) para optimizar la experiencia de usuario más allá del navegador, uso de las herramientas Expression para revolucionar la forma de trabajar entre diseñadores y desarrolladores.


Anótate ya en la web de ReMix’07.

Cambio automático de cultura en ASP.NET 2.0

A la hora de hacer aplicaciones multi-idioma hay muchas cosas a tener en cuenta. Entre ellas la fundamental es averiguar cuál es el idioma que desea emplear el usuario y adaptar tanto la interfaz de usuario como las otras características culturales (números, fechas, etc) al idioma elegido.


Si no disponemos de una lista desplegable, unas banderitas, o algo similar para que los usuarios elijan el idioma, lo que debemos hacer es adaptarnos automáticamente al idioma elgido por éstos en su navegador (Herramientas·Opciones de Internet·General·Idioma).


La lista de idiomas allí presente se envía de manera automática y transparente por el navegador (no sólo IE, sino en todos los navegadores) al servidor en forma de cabeceras HTTP con el nombre «Accept-Language». Estas cabeceras se pueden capturar en el servidor muy fácilmente, y en ASP.NET más todavía con la propiedad UserLanguages, y con ellas trabajamos para conseguir la adaptación automática al idioma.


El código sería básicamente este (dentro de Global.asax):



void Application_BeginRequest (Object sender, EventArgs e)
{
    try
    {
        if (Request.UserLanguages.Length > 0)
        {
            CultureInfo ci = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);
            Thread.CurrentThread.CurrentCulture = ci;
            Thread.CurrentThread.CurrentUICulture = ci;
        }
    }
    catch (ArgumentException)
    {
    }
}


Como vemos lo que se hace es determinar los idiomas que le interesan al usuario y asignar el primero de ellos al hilo de ejecución actual a través de una clase CultureInfo. Se le asigna esta clase tanto a CurrentCulture como la interfaz de usuario.


Con esto lo que conseguimos es que, luego en las paginas, se considere esta cultura para dar formato a fechas, números y monedas, y que se tengan en cuenta a la hora de hacer ciertas cosas en la interfaz que están relacionadas ya no sólo con el idioma (traducir) sino con las propias características particulares del idioma (es la diferencia entre traducir y localizar).


Si por ejemplo colocamos un calendario en nuestra página y una etiqueta que muestre la fecha seleccionada en el idioma actual, tendríamos estas dos capturas en función de si entramos con una navegador en castellano o uno en inglés de Estados Unidos:



Es interesante fijarse en como, no sólo se han traducido los nombres de los días de la semana o los meses en el calendario o en la fecha mostrada, sino que además se ha cambiado el día en el que se considera que comienza la semana (el domingo en el caso de los EEUU) y la forma de escribir y separar las diferentes partes de la fecha. Lo mismo pasaría con las monedas (algunas van delante otras detrás de la cantidad), los separadores decimales y de miles, y muchos detalles más.


Obviamente todavía nos quedaría traducir los recursos de texto de la aplicación, pero ya estamos ganado bastante.


ASP.NET 2.0: más fácil aún


Lo anterior es bastante fácil pero nos obliga de todos modos a escribir código. En ASP.NET 2.0 se ha simplificado más todavía este asunto presentando una característica denominada cambio automático de cultura. Existe un nuevo atributo de las páginas que sirve para indicar que se gestione de manera automática el idioma del usuario. Basta con poner en la delcaración de una página lo siguiente:


<%@ Page Language=»C#» AutoEventWireup=»true» Culture=»Auto» UICulture=»Auto» CodeFile=»Cultura.aspx.cs» Inherits=»Cultura» %>


Con esto conseguimos exactamente el mismo efecto que el código anterior en una página, y sin tener que escribir código de ningún tipo.


Por supuesto podemos conseguir el efecto automático para toda la aplicación al mismo tiempo introduciendo el sigueinte nodo en web.config:



<globalization culture=»auto» uiCulture=»auto» />


Es cómodo ¿verdad?

FAQ: Al pasar al servidor de producción me deja de funcionar la seguridad y me da un error ¿por qué?

Una pregunta super-frecuente que recibo tanto en los cursos de campusMVP como en eventos es la de:



 «¿Por qué cuando paso mi aplicación a producción de repente me deja de funcionar todo lo que tiene que ver con Membership, Roles, etc…? De hecho obtengo un error de que no se puede conectar a la base de datos…»


El problema que tienes con la base de datos es que, por defecto, el proveedor de SQL Server que viene con ASP.NET 2.0 parte de la base (equivocada generalmente) de que vas a usar SQL Server 2005 Express Edition. Esta base de datos tiene la particularidad de que es capaz de adjuntar dinámicamente archivos .MDB (de datos SQL Server), es decir, sin necesidad de adjuntarlos. Si te fijas en la carpeta App_Data de tu aplicación debes de tener un archivo ASP_NET.MDB que es el que se crea automáticamente para gestionar estos datos y luego adjuntarlo dinámicamente a la versión Express.


El problema es que si usas SQL Server 2005 «completo» o una versión anterior lo de adjuntar archivos de forma dinámica no funciona. Y en un servidor de producción (aunque sea en un hosting) no suelen tener la versión Express.


Por fortuna es algo muy sencillo de solucionar pero a mi modo de ver deberían haberlo puesto un poco más evidente.


Para ello existe una utilidad en la carpeta «C:WindowsMicrosoft .NETFrameworkv2.0.xxxx» o la análoga en tu equipo que se llama: aspnet_regsql.exe.


Ejecútala. Al hacerlo te sale un asistente que te permite crear la base de datos que necesita el proveedor en cualquier SQL Server 2000/2005. Le indicas el servidor y la BD y te crea las tablas y procedimientos que necesita.
Así creas la BD que necesitas donde tú quieras.


Esta utilidad viene con .NET, no con VS, así que no hay problema para usarla en cualquier equipo, incluso en el servidor.


Ahora sólo te resta indicar a los proveedores qué base de datos van a usar. La mejor forma de hacerlo es ir a web.config y añadir lo siguiente:



<connectionStrings>
  <remove name=»LocalSqlServer» />
  <add name=»LocalSqlServer» connectionString=»server=TUServidor;Integrated Security=SSPI;Database=TuBasedeDatos;» providerName=»System.Data.SqlClient» />
</connectionStrings>


De este modo eliminas la conexión por defecto de ASP.NET (que es la que apunta a la versión express) y le indicas la cadena de conexión que necesites y el proveedor que necesites.


Con esto tu problema estará solucionado.


Este post está relacionado también con mi post anterior «Cómo usar la administración Web integrada en ASP.NET en aplicaciones de producción«, así que si quieres échale un vistazo.


Jonás («Maldecir es el único lenguaje que dominan todos los programadores», jaja), ha sido el último en preguntármelo y dada la frecuencia que tiene he decidido ponerla aquí también.