En Reddit se preguntan sobre libros de estructuras de datos y algoritmos y en las respuestas podemos encontrar varios enlaces a muchas obras, algunas más conocidas otras menos pero desde luego es algo interesante. Por supuesto mencionan The Art of computer programming de Knuth y enlazan a una serie de libros muy interesantes: Data Structures and Algorithms with Object-Oriented Design Patterns in Python, que además tiene versiones para C++, Java, C#, Ruby, Lua, Perl, PHP.

Arturo Pérez-Reverte es un autor que me encanta, realmente me gusta leerlo y como con todos mis autores fetiches a veces me descubro pensando “¡¿pero qué coño está haciendo ahora?!”, forma parte de la relación amor con esos autores que nos enganchan. Y eso mismo me ha pasado leyendo su última novela “Un día de cólera”.

Portada del libro “Un día de cólera”

La historia describe los personajes que Pérez Reverte nos ha mostrado una y otra vez, personajes que no tienen más que su honor, antihéroes a los que las circunstancias les obligan a comportarse como lo que son, sin otra alternativa que no traicione su forma de ser. Personas que llegado el caso morirán enfrentandose a un fracaso seguro, pero morirán harán matando.

Esta novela me ha recordado bastante a otra anterior que también conmemoró un hecho histórico en la historia de España, “Cabo de Trafalgar”, aunque en esta última novela publicada la historia avanza de otra forma, ya que la acción se difumina en las innumerables escaramuzas que poblaron Madrid el 2 de Mayo de 1808, con un final trágico que todos conocemos. Un resumen sería que es un libro para aquellos que hayan disfrutado de otros títulos de nuestro best-seller particular, entre los que me encuentro. Eso sí, si debo elegir entre “Cabo de Trafalgar” o “Un día de cólera” me quedo con el primero.

A través de WebAppers he descubierto Piwik, un sistema de estadísticas de visitas. Está escrito en PHP (necesita PHP 5.1) y tiene una licencia GPL, y entre sus funcionalidades hay una API y la posibilidad de desarrollar plugins para él. Todavía está en un estado temprano de desarrollo, pero como puede verse en la demo resulta bastante prometedor.

Todavía tengo que mirarlo en detenimiento, aún no he echado ni un primer vistazo, pero parece tener un funcionamiento similar al de Google Analyticis y utilizar un código Javascript remoto en vez de analizar los logs como otras herramientas. Por cierto, hace no mucho hablé en Barrapunto sobre el tema de las herramientas para estadísticas de visita y me ha parecido curioso descubrir ahora aplicación que parece ajustarse tanto a lo que preguntaba.

Vía Slashdot encuentro “Establishing an IT Budget for a Small Business?” donde se plantea cómo debe calcularse y presentarse el presupuesto en tecnologías para una pequeña empresa.

Relacionado con pequeñas empresas he recordado algunos artículos que pueden ser de cierto interés publicados en Barrapunto, especialmente si nos pasa por la cabeza trabajar como autónomo o iniciar nuestro proyecto empresarial.

Y no es de Barrapunto pero también interesante el artículo de Joel Spolsky sobre cómo poner precio. Aparte, para reflexionar un poco sobre distintas formas de ganar dinero, también está “Guía de modelos de negocio con el software libre“.

Una breve historia

Podemos remontarnos a ASCII-7, una tabla de caracteres de 7 bits que representaba los carácteres más usuales del mundo anglosajón. Sin embargo ¿qué pasaba con los carácteres extranjeros? Para solucionarlo se creó ASCII extendido, esta vez con 8 bits y 256 carácteres disponibles, pero aún así no era suficiente para contentar a todo el mundo, porque entre tildes, letras raras, signos y demás no podiamos meter todos los caracteres no-ingleses que necesitabamos en 128 carácteres que eran lo que nos dejaba ASCII extendido. Así que la solución fué crear distintos ASCII
extendidos, las famosas iso-8859. Cada tabla de carácteres iso-8859 especificaba distintos carácteres, así cada país podía utilizar el juego de carácteres que mejor se adaptara a su grafía. En el caso español usábamos iso-8859-1 que incluía la mayoría de carácteres europeos occidentales.

Problema resuelto ¿no? Pues puede que sí, al menos parcialmente. A menos que necesites escribir un texto con ñ (iso-8859-1) y un carácter arábico (iso-8859-6) pero tampoco es para tanto, vamos digo yo. Aunque ahora que lo pienso, si alguien me envía un texto con carácteres extendidos ¿cómo se que tabla está usando? Vaya, no puedo descubrirlo… pero tampoco es tan grave, ya lo resolverán las aplicaciones: los servidores web envían la codificación del fichero, y lo mismo ocurre en casi todas las demás cosas. Aunque todavía me queda saber cómo hace el servidor web para saber qué tipo de codificación utiliza un fichero HTML o .txt determinado. ¿Quizás no puede adivinarlo? Vaya, entonces tenemos un problema. Empiezo a pensar que esto de ASCII no es tan buena idea… 128 carácteres fijos y 128 que pueden cambiar y no se cuándo se usa cual no me parece divertido.

Ya hemos descubierto el problema, ahora la solución

Nos ha quedado claro que el problema que nos encontramos es que no podemos limitarnos a tener 128 carácteres fijos y luego que cada documento tenga un juego de 128 carácteres extendidos, porque no soluciona el problema del intercambio de documentos ni permite usar los carácteres que necesitemos en cada momento, nos vemos limitados a un juego.

Así que como solución surge Unicode. Un juego de carácteres universal capaz de identificar 2^32 carácteres (4.294.967.296), y en tantos carácteres pueden codificarse todas las grafias del mundo (incluso se intentó codificar la grafía Klingon :) ), presentes y pasadas. Así que genial, ahora tenemos un sistema de codificación que nos permite utilizar cualquier carácter y nuestros documentos podrán ser leidos por cualquiera. Si es que ya les pasó cuando hicieron ASCII extendido para ampliar ASCII-7, que se conformaron con duplicar las opciones y tendrían que haber ido a lo grande, pero nunca es tarde si la dicha es buena.

Los peros

Así que tenemos claro que usaremos Unicode para representar cadenas de texto, con sus 32 bits nos permiten codificar cualquier texto imaginable aunque esto tiene 2 graves consecuencias. El primero y más obvio es el tamaño de las cadenas. Este texto tiene unos 6.700 carácteres, lo que codificado como ISO-8859-15 son 6.700 bytes, sin embargo en Unicode eso serían casi 27.000 bytes, y aunque el ancho de banda y el espacio en memoria cada vez es menos problemático para almacenar texto, sigue siendo multiplicar por cuatro.

El otro inconveniente viene de utilizar un sistema de codificación nuevo y totalmente distinto. Hay que reescribir todas las funciones que estén relacionadas con las cadenas: medir el tamaño de una cadena, representarla, leerla, partirlas, unirlas, ordenaralas…. nada de lo que teniamos sirve y todo hay que reescribirlo.

Y a todo esto podemos tener una idea de lo engorroso que es mantener al mismo tiempo texto en Unicode y otros formatos, aunque tampoco es demasiado distinto a tener que trabajar con distintas codificaciones.

Así que como solución a parte de los problemas se crearon UTF-16 y UTF-8. El primero es una representación en palabras de 16 bits de los carácteres, de forma que la mayoría de carácteres puedan ser representados en 16 bits. Pero sigue teniendo la pega de que nos es necesario tener código capaz de trabajar, representar y leer esas cadenas. El otro invento fue UTF-8, que codifica los carácteres más utilizados en 8 bits y ahorra mucho espacio, y la realidad nos demuestra que vino para quedarse.

Y el enemigo número 1: UTF-8

UTF-8 no es tan malo: nos permite utilizar Unicode y ahorramos espacio ¿no? Sí, eso es verdad. Pero eso son efectos colaterales del verdadero objetivo del uso de UTF-8 que podemos descubrir recurriendo a un poco de historia.

Se supone que el primer email de la historia fue un texto de prueba, algo como QUERTYIOP y que tras
esa prueba se enviaron otros mensajes. Ese primer mail se envió en 1971 y podriamos apostar a que estaba escrito en ASCII (que se presentó en 1967). Así que imaginad que cogemos todos esos mails que se enviaron hace más de 30 años en ASCII y que causaron tantos problemas de intercomunicación entre distintos idiomas, que dieron tantos quebraderos de cabeza (todo el que haya tenido que configurar consolas sabe de que estoy hablando) y de repente por arte de magia ¡son textos internacionales¡ ¡bendigamos a UTF-8!

Unicode pretende ser la respuesta a un problema complejo que se vió acentuado por el intercambio de información en a las redes informáticas. Solucionar el problema es engorroso: durante un periodo se producirán incompatibilidades entre programas y usuarios de Unicode y aplicaciones y usuarios que siguieran con juegos de caráceteres variados e incompatibles.

Si Unicode y todos los iso-8859 conviviesen existirían problemas en los que los textos serían totalmente incompatibles: una herramienta que no soporte Unicode mostrará un montón de basura ilegible y no podrá hacer nada con él, y lo mismo ocurriría en el caso contrario. Sin embargo UTF-8 surge como un intento de camuflar ese problema, de repente la solución es “compatible hacia atrás” y todos los textos escritos en ASCII-7 son también Unicode (UTF-8, pero Unicode a fin de cuentas). Y las rutinas de clasificación, de partir cadenas, los filtros, todo funciona perfectamente. Siempre y cuando sea ASCII-7, suficiente para los anglosajones.

En resumen, con UTF-8 se consigue adaptar una solución y degradarla para que no resulte demasiado molesta. Para que sólo “los que tienen el problema” tengan que lidiar con ella, con una solución intermedia, para no tener que saltar todos al tren del Unicode.

Por eso odio UTF-8. Porque es el mal menor y lo han hecho a posta.


PS: Un excelente artículo sobre esta historia es “Characters vs. Bytes“.

Desde hace ya mucho tiempo estoy utilizando Ruby on Rails para aplicaciones internas y para probar. Realmente tiene cosas muy buenas, y muchas sus características principales se debe al lenguaje que utiliza: Ruby. Resulta bastante refrescante utilizar un framework tan opinado como puede serlo Rails, aunque hay que admitir que en ocasiones puede llegar a complicar algunas cosas.

Este pequeño párrafo sólo pretende ser un pequeño comentario sobre un futuro artículo que me gustaría escribir contando mis opiniones y experiencias sobre esta plataforma.

“1984″ por George Orwell“1984″ de George Orwell ha resultado ser uno de libros que más me ha gustado, podría escogerlo como mi favorito.

A pesar de que el futuro que George Orwell imaginó a finales de los 40 no tiene nada que ver a nivel tecnológico con el futuro que imaginamos hoy en día, la sociedad que se describe, los miedos y la obsesión por el control no dejan de ser cada vez más reales.

Y escribiendo sobre “1984″ no puedo dejar de mencionar “El derecho a leer“, una obra de Richard Stallman que también nos describe un futuro en el que la tecnología y el control gobiernan nuestra sociedad.

Me lo regaló PJorge y como agradecimiento, lo libero

At the seashore, between the land of atoms and the sea of bits, we are now facing the challenge of reconciling our dual citizenship in the physical and digital worlds. — Hiroshi Ishii. MIT Media Lab

And words are messy little critters.

A Definition of Wayfinding Wayfinding is a fancy word for the series of things people know and do in order to get from one place to another, inside or outside. Wayfinding can be a snap or an onerous take, depending on the person, the environment, and the situation. You can think of wayfinding as a five step process. It starts with knowing where you are. It means knowing your destination, following the best route to your destination, being able to recognize your destination, and finding your way back to your starting point. — Directional Sense by Jan Carpman and Myron Grant. Evans & Co. (2006)

Today, much of this tacit knowledge, this ability yo “read” the natural environment has benn lost.

Users don’t read, they scan.

But it does remind us that when we enter the artificial noosphere, we bring our natural instintcs and our physical bodies with us.

…language and wayfinding have walked hand in hand from the beginning.

…collaborative hypertex [...] meme…

“navigation is a limited metaphor for hypermedia and website use that potentially constrains our understanding of human-computer interaction”

An information retrieval system will tend not to be used whenever it is more painful and troublesome for a customer to have information than for him not to have it — Mooers Law.

Because Moore’s law doesn’t apply to the human brain. In fact, we haven’t upgraded our wetware much in the past 50,000 years.

Communication is first and foremost about cooperation.

Precission measures how well a system retrieves only the relevant documents. Recall measures how well a system retrieves all the relevant documents.

recall falls dramatically as the collection increases in size.

And yet behind every formula lurked a variable that resisted isolation. Today we call this infuriating variable “the user”

Like beauty, relevance exists in the eye of the beholder.

This fast food approach to information consuption…

You can take the person out of the Stone Age, but you can’t take the Stone Age out of the person.

She explains why we value gossip so highly, and then encourages us to design gossip into our systems.

Can we truly focus on reading and writing while walking and talking?

How do we bring the mountain to Mohammed?

In today’s world of stealth marketing and ambient advertising, we are without a doub, unbalanced.

“What is the Semantic Web good for?” [...] “The Semantig Web is a machine for creating syllogisms”

The six/nineteen defrees phrase is deeply misleading because it suggests that things are easy to find in a small world. This could not be further from the truth! Not only is the desired person or document six/nineteen links aways, but so are all people or documents.

Basic definitions focus on written or printed information that is fixed in form.

We should proceed cautiously before placing our lives in the invisible hands of smart mobs.

…accessibility is “the single most important variable governing the use of information”. In the spirit of our tribal ancestors, we absorb most of our information passively and rely on who we know for much of what we know.

Rubbish is rubbish, no matter how speedily it is delivered.

…trying to allocate trust in a maze of memes where networks supplant hierarchies and fact fades into opinion.

When it comes to information, sometimes less is more

We choose not to choose. We rely on habit. We trust familiar brands. We coppy our colleagues.

Because our trust in authority has eroded, we most find our own solutions.

only 15% of web pages include links to opposing viewpoints.

Libraries and the Internet have analogous histories, but more important, they represent shared values.

We learn that now and then we must look away to see.

In this text, we’ve studied the Web through the prism of findability, and gained insight into the future of ubicomp, the evoluion of belief, and the enveloping nature of culture.