viernes, 5 de diciembre de 2008

Ya tenemos Python 3

Ayer, 3 de diciembre de 2008 se publicó la versión 3.0 del lenguaje de programación Python.

Esta versión aporta muchísimas novedades y muchas incompatibilidades con Python 2.x
Para ayudar en la migración de código antiguo, han desarrollado una herramienta de conversión, 2to3

Las que a mí más me han gustado:

  • Ahora sólo hay un tipo de enteros, equivalentes al antiguo long. Se acabó lo de definir los enteros "largos" con una L.

  • Se acabaron los problemas de "encoding": el código se escribe en UTF-8 y el tipo string trabaja internamente con unicode.

  • Se ha reorganizado la librería estándar y muchos módulos obsoletos ya se han eliminado.


También hay inconvenientes: por ahora es más lento que las versiones 2.x. Nada que un buen repaso no pueda corregir.

Mi enhorabuena a toda la gente que trabaja desarrollando este lenguaje. Ha sido una decisión valiente y creo que acertada.

miércoles, 12 de noviembre de 2008

La próxima batalla de sistemas operativos

En los ordenadores personales podemos decir que hay un sistema operativo predominante (Windows) y algunos más con un porcentaje de usuarios sensiblemente más reducido (MacOSX, Linux, ...)

Según nuestras estadísticas más recientes, por poner un ejemplo, la web de Público la visitan (aproximadamente) un 91% de usuarios con Windows, un 4,8% de  usuarios con MacOSX, un 3,1% de usuarios con Linux y el resto, otros sistemas (algunos *BSD, iPhone, Symbian, Playstation, Wii, etc).

Son estos últimos sistemas los más interesantes: los sistemas operativos de dispositivos móviles. Parece que todos los analistas y gurús de la web están de acuerdo: los dispositivos móviles van a tener cada vez más importancia en la web.

En este segmento no está tan claro que haya un sistema operativo predominante. Tenemos Symbian (Nokia y Ericsson, principalmente), Windows Mobile, BlackBerry, iPhone, el recién llegado Android, ...

En este mercado no hay una predominancia tan clara de un sistema frente a otro. Los Symbian acaparan la mayor parte de ventas, pero la diferencia no es tan abismal como ocurre con los sistemas operativos de escritorio.










































































Company

2Q08
Sales

2Q08 Market Share (%)

2Q07
Sales

2Q07 Market Share (%)

2Q08- 2Q07 Growth (%)

Symbian

18,405,057

57.1

18,273,255

65.6

0.7

Research In Motion

5,594,159

17.4

2,471,200

8.9

126.4

Microsoft Windows Mobile

3,873,622

12.0

3,212,222

11.5

20.6

Linux

2,359,245

7.3

2,816,490

10.1

-16.2

Mac OS X

892,503

2.8

270,000

1.0

230.6

Palm OS

743,910

2.3

461,918

1.7

61.0

Others

352,679

1.1

349,501

1.3

0.9

Total

32,221,175

100.0

27,854,586

100.0

15.7

Fuente: Gartner

En esta tabla no tenemos datos de Android, pero es previsible que a lo largo de este año se comercialicen más terminales que lo incorporen como sistema operativo.

Queda un último contendiente que mencionar. Aunque no es un sistema operativo como tal, considero importante reseñarlo: Java para móviles (J2ME).

Java es un lenguaje de programación (desarrollado por Sun Microsystems) que funciona en muchos entornos diferentes utilizando unas especificaciones adecuadas para cada sistema (servidores, ordenadores personales, dispositivos móviles).
La característica más notable es que los programas Java se ejecutan en una "máquina virtual", con lo que el mismo programa puede correr en distintos dispositivos siempre que tengan instalada la máquina virtual apropiada.

En el caso de los teléfonos móviles, casi todos los modelos incorporan una máquina virtual o intérprete de Java, con lo que el desarrollo de programas para móviles usando este lenguaje se simplifica mucho al poder desarrollar un sólo programa que puede ejecutarse en muchos modelos de teléfono diferentes (en la práctica esta supuesta compatibilidad no lo es tanto).

Resumiendo: sin ser realmente un sistema operativo, el Java para móviles es el sistema que más penetración en el mercado ha tenido. Una buena jugada comercial y técnica, ¿no creen?

lunes, 10 de noviembre de 2008

Programando para teléfonos móviles con J2ME

Pese a la gran disparidad de sistemas operativos, modelos y capacidades que encontramos en los teléfonos móviles hay un denominador común a la hora de desarrollar software para estos dispositivos: muchos modelos pueden ejecutar Java.

La máquina virtual que implementan es muy sencilla y tiene algunas limitaciones, pero ofrece muchas características. Las aplicaciones para móvil básicamente se pueden desarrollar en torno a dos aproximaciones:

  • Utilizando elementos gráficos de alto nivel, como botones, etiquetas, formularios, etc.

  • Utilizando un "canvas" donde "pintamos" los elementos que necesita nuestra aplicación.

El simulador que viene con NetbeansPor otra parte, el desarrollo de aplicaciones es bastante sencillo porque casi todos los entornos de desarrollo proveen un simulador de teléfono muy útil en el que podemos ir probando el programa sin necesidad de instalarlo en el móvil hasta que no está terminado.

Uno de los IDEs que más me ha gustado ha sido NetBeans. Tiene un plugin para J2ME muy bueno y sencillo de utilizar.

No todo es de color rosa. La gran disparidad de dispositivos y sus capacidades complican bastante el desarrollo: las aplicaciones J2ME se desarrollan alrededor de diferentes configuraciones (CDC y CLDC -esta última engloba los móviles, PDAs y dispositivos similares-) y perfiles (dentro de la configuración CLDC, el perfil MIDP es el que se adecúa a los teléfonos móvies, pero existen diferentes versiones).
En el capítulo 1 del libro "Java a Tope: J2ME" viene perfectamente explicado. Por cierto, un libro que puede descargarse gratuitamente y está muy bien.

Como siempre, la mejor forma de aprender algo es poniéndose con ello: he hecho un pequeño programita para móvil que se llama MMU (Music Mobile Utilities) con la ayuda de NetBeans y la verdad es que me ha quedado bastante apañado, sobre todo para no tener ni idea del tema ;-)

lunes, 8 de septiembre de 2008

¡¡¡ Django ya es 1.0 !!!

Tras una larga espera, ya tenemos Django 1.0
Realmente la versión 0.96 se podía considerar bastante estable (creo que es la que ha utilizado Google como "inspiración" o base para montar su Google App Engine).

No voy a enumerar los cambios (para eso están las "release notes"), pero sí destacar lo que más me ha gustado por ahora:

  • Unicode: Django trabaja ahora por defecto siempre con Unicode, se acabaron los problemas con bases de datos en Latin-1 y templates en UTF-8. Todo es Unicode y basta.

  • Interfaz administrativa: ya no es necesario poner una clase anidada vacía para en el modelo. Se registra el modelo en la aplicación administrativa y listo. Mucho más limpio e intuitivo.

  • Es bastante fácil migrar una aplicación a la nueva versión.

  • El manejo de formularios es muy bueno, prácticamente no hay que hacer nada. El módulo "newforms" (0.96) ya es el definitivo.


A ver si saco tiempo y monto algo con la nueva versión ...

miércoles, 3 de septiembre de 2008

Internet desde el teléfono móvil

Este verano he tenido un teléfono móvil con GPRS, lo que me permitía "navegar" por la web y leer el correo a una velocidad razonable.

El navegador que he utilizado no es el que venía con el móvil, sino el Opera para móviles (Opera Mini).
[Por cierto, es sorprendente lo poco que ocupan estas aplicaciones para móvil y la cantidad de funcionalidades que tienen].

A estas alturas se sabe que cada vez más personas utilizan el móvil para conectarse a Internet, pero los medios generalistas no estamos preparados para ello. Las páginas web de la mayoría de periódicos "on-line" españoles no se ven nada bien con un móvil, incluída la nuestra. Menús demasiado grandes, banners que ocupan demasiado espacio, una organización del contenido no muy bien pensada ... En la mayoría de las páginas hay que pasar dos o tres pantallitas hasta que nos encontramos con información legible.

Todo apunta a páginas concebidas para ser leídas en la pantalla de un ordenador, no en un dispositivo con reducidas capacidades como un teléfono móvil, una PDA o similar.
Vean tres ejemplos: elpais.com, elmundo.es y publico.es visualizadas en un teléfono móvil ordinario (no me pregunten el modelo, que no me lo sé):





















El PaísEl MundoPúblico
elpais1.jpg
1ª pantalla
elmundo1.jpg
1ª pantalla
publico1.jpg
1ª pantalla
elpais2.jpg
2ª pantalla
elmundo2.jpg
2ª pantalla
publico2.jpg
2ª pantalla
elpais3.jpg
3ª pantalla
elmundot.jpg
Versión "sólo texto"
publico3.jpg
3ª pantalla

El periódico El Mundo tiene un enlace a una versión "Sólo texto" que se encuentra enseguida. El enlace correspondiente en la página web de El País está a la mitad de la página, hay que avanzar bastantes pantallitas hasta llegar a él.

En Público.es no tenemos versión "sólo texto" o "accesible", pero todo se andará. No llevamos ni un año en la calle (ni en la web).

En algunos sitios se desaconseja la utilización de una página (o conjunto de páginas) especiales para los dispositivos de un tipo o de otro, pero personalmente, discrepo de esta opinión.
Si queremos una web con contenidos multimedia, animaciones y cosas así, esta web no debería servirse a un móvil, por cuestiones económicas (los planes de datos de los móviles suelen facturar en función de la información transferida, no por tiempo) y de presentación.

En un periódico, el trabajo mayor es el de edición de la noticia, una vez que se encuentra en el sistema editorial se puede (con relativa facilidad) seleccionar qué elementos se presentan de la noticia.
Así pues, en una página web "normal", concebida para ser vista desde la pantalla de un ordenador se puede mostrar la noticia completa, con sus multimedias, ampliaciones de fotos, relacionadas, etc. Para un móvil se puede preparar una página que sólo muestre, por ejemplo, el título, autor, fecha/hora y la entradilla, más un enlace al texto completo.

¿Por qué, si es tan sencillo, no se hace? Se me ocurren varias razones (esta opinión es estrictamente personal, como todo lo que escribo aquí).

  • La mayoría de los lectores utilizan un navegador ordinario para acceder a la web, por lo que todos los esfuerzos se concentran en esta versión.

  • La publicidad en un móvil no debe ser rentable: en una página para móviles/PDA no debería haber publicidad, en mi opinión, y si la hubiese, debería ser mucho menos intrusiva. Aún así no creo que un banner mostrado en un móvil recoja muchos "clicks".
    Si una importante parte de los ingresos de los periódicos en Internet vienen de la publicidad, es bastante comprensible que no se preste mucha atención a las plataformas que no pueden generar estos ingresos.

jueves, 15 de mayo de 2008

SimpleXML … la verdad es que sí

Últimamente trabajo mucho con PHP y de vez en cuando toca lidiar con información de terceros en XML o HTML. Con las funciones (o métodos) de SimpleXML el trabajo es sencillísimo.

SimpleXML carga un archivo XML en memoria como una estructura similar a un array. A los atributos de una etiqueta se accede con la notación de array asociativo y al contenido de un nodo con la notación ->

Ejemplo:


El señor de los anillos
Tolkien


El fin de la infancia
Clark


Parsear este XML es trivial:
<?php
$libros = simplexml_load_file('libros.xml');
foreach ($libros->libro as $libro) {
    echo sprintf("Libro nº %s: Título: %s Autor: %s",
            (string)$libro['id'],
            (string)$libro->titulo,
            (string)$libro->autor);
}
?>

El forzar la conversión de cada valor a string no es superfluo: si no se hace esto lo que obtenemos es otro objeto SimpleXML anidado al "padre" en vez del contenido del atributo o del nodo.

Otro uso posible es el parseo de HTML. Para garantizarnos que el HTML de origen está bien formado, conviene pasarle antes un tidy:
tidy -asxhtml -clean -numeric fichero.html

martes, 8 de abril de 2008

Patrones de diseño para torpes - 3ª parte

El patrón "Singleton"


Uno de los patrones de diseño más conocidos es el patrón "Singleton". Con este patrón se garantiza que sólo hay una instancia activa de una determinada clase.

Supongamos que tenemos una base de datos y queremos mantener una única conexión activa. Otro caso puede ser una clase que se dedique a grabar registros o trazas en un fichero. Imaginemos un objeto que descarga ficheros por FTP.

En todos estos casos puede ser conveniente tener un único objeto que realice el trabajo y garantizar que no hay varias instancias, por ejemplo, para no saturar una base de datos con conexiones, o no tener accesos simultáneos al mismo fichero, etc.

En la documentación oficial de PHP se muestra un ejemplo de este patrón para este lenguaje.

Otros patrones de diseño


Por motivos profesionales, últimamente casi programo exclusivamente con PHP. En developerWorks hay un artículo muy interesante donde amplían otro artículo anterior en el que presentaban cinco patrones básicos.

Explican y ponen ejemplos en PHP para los patrones "Adapter", "Iterator", "Decorator", "Delegate" y "State". Es una lectura obligatoria para cualquier desarrollador de PHP.

viernes, 28 de marzo de 2008

La pesadilla de los programadores y diseñadores

Nos contaba hace un par de días Blanca Salvatierra en un artículo la existencia de una página web que instaba a los usuarios del navegador Internet Explorer 6 a actualizarse o cambiar de navegador.

Realmente es un dolor tener que desarrollar páginas web que se vean bien en todos los navegadores. Aunque la mayoría de los diseñadores y programadores ya se saben los "trucos" para conseguirlo, no deja de ser una gran pérdida de tiempo y esfuerzo.

A día de hoy, los lectores de Público.es utilizan cinco navegadores principalmente (porcentajes aproximados): Internet Explorer 7 (~ 30 % de los usuarios) , Internte Explorer 6 (~ 30%), Mozilla Firefox (~ 30%), Apple Safari (~ 2%) y Opera (~1%).

De estos cinco navegadores, el Internet Explorer 6 (abreviado como IE6) es el menos compatible, para que una página que se ve bien en el resto se vea en IE6 muchas veces hay que recurrir a trucos y "chapucillas".

¿Cómo puede ser ésto? Las páginas web actualmente se basan (principalmente) en tres "lenguajes" con funciones diferenciadas, todos ellos estandarizados por organizaciones de internacionales: HTML, CSS y JavaScript.
El lenguaje HTML es el que contiene el texto o contenido significativo de una página web, el CSS se encarga de formatear y dar estilo a este texto. Finalmente, con JavaScript podemos hacer que el usuario interaccione con una página web de diferentes formas.

El problema es que en teoría todos los navegadores soportan estos tres lenguajes, pero en la práctica, cada uno lo hace a su manera, y de todos ellos, el IE6 es el que más extraño se comporta.

Supongamos que tenemos el siguiente fragmento de HTML (simplificado):

Prueba con HTML





Título del documento





Listado de palabras



  • Palabra 1

  • Palabra 2

  • Palabra 3

  • Palabra 4

  • Palabra 5




Esto es un párrafo de texto, párrafo de texto,
párrafo de texto,párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto.
Esto es otro párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto, párrafo de texto,
párrafo de texto, párrafo de texto.



Esto es un texto en el pie de la página.





Este documento se vería así en los distintos navegadores (pulsar para ampliar):

Captura navegadores sin estilos

No hemos especificado ningún estilo, así que los navegadores formatean el texto como les parece, aunque el resultado es muy parecido en todos los casos.

Ahora establecemos que este HTML utilice el siguiente CSS que lo formateará. Este CSS es bastante ingenuo, ya que no tiene en cuenta las peculiaridades de los distintos navegadores. Lo que pretende es establecer una página centrada, con una cabecera gris, un cuerpo azul con dos columnas, verde y amarilla y un pie de página rojo:
#contenedor {
border: solid 1px black;
padding: 10px;
width: 750px;
margin: 0 auto;
}
#cabecera {
background-color: gray;
width: 730px;
}
#cuerpo {
background-color: blue;
width: 730px;
}
#pie {
background-color: red;
width: 730px;
}
#colizda {
width: 180px;
background-color: green;
float: left;
padding: 10px;
}
#coldcha {
width: 510px;
background-color: yellow;
float: left;
padding: 10px;
}

Las diferencias entre navegadores son notorias:





















ff-antes.pngMozilla Firefox
opera-antes.pngOpera
safari-antes.pngSafari
ie7-antes.pngExplorer 7
ie6-antes.pngExplorer 6

Hacemos algunos ajustes adicionales conseguimos al fin que en todos se vea igual:
body {
/* Para centrar en IE6 */
text-align: center;
}
p, ul {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
#contenedor {
margin: 0 auto;
width: 770px;
}
#contenido {
border: solid 1px black;
padding: 10px;
width: 750px;
/* Para expandir la capa hacia abajo en
Safari, Opera y Firefox */
float: left;
/* Para compensar el apaño de IE6 en body */
text-align: left;
}
#cabecera {
background-color: gray;
float: left;
width: 750px;
}
#cuerpo {
background-color: blue;
float: left;
width: 750px;
}
#pie {
background-color: red;
float: left;
width: 750px;
}

Y éste es el resultado:





















ff-despues.pngMozilla Firefox
opera-despues.pngOpera
safari-despues.pngSafari
ie7-despues.pngExplorer 7
ie6-despues.pngExplorer 6

Lo más chocante es que para que en IE6 se vea la página centrada tenemos que establecer una propiedad ilógica: que el texto en la etiqueta "body" esté centrado (text-align: center;)
Por otra parte, los dos Internet Explorer expanden y muestran la capa contenedora de las columnas (fondo azul), mientras que en los demás hay que hacerla visible explícitamente.

En general el comportamiento de IE7, Firefox, Opera y Safari es muy similar, los problemas siempre los suele dar el IE6.

Se comprende entonces que los diseñadores de páginas web estén hartos del Explorer 6 y su peculiar forma de interpretar los estándares.

Créditos: gracias a Daniel Solana Tacón, diseñador web de Público por ayudarme con estos CSS.

miércoles, 20 de febrero de 2008

HD-DVD vs Blue-Ray: siempre pierden los mismos

En una entrada anterior hablábamos de la "guerra" de los formatos de vídeo en alta definición. Parece que ya hay vencedores y vencidos. Esta vez a Sony no le ha pasado lo mismo que en los años 80 con el sistema Betamax.

Toshiba, uno de los principales impulsores del formato HD-DVD, anunció ayer, 19 de febrero de 2008, que abandona la fabricación de productos HD-DVD. En los próximos días podremos leer una gran cantidad de sesudos análisis comerciales y técnicos sobre la "victoria" de un formato sobre otro, pero en pocos sitios se leerá lo que, en mi opinión, ha ocurrido: de nuevo, la industria nos ha tomado el pelo a los consumidores. Otra vez.

Si existe un consorcio llamado DVD-Forum (en el seno del mismo se gestó la especificación del HD-DVD), ¿por qué algunos fabricantes -que forman parte de este consorcio- se han dedicado a desarrollar su propio formato? ¿Por qué siempre hay fabricantes que desarrollan productos fuera de los estándares imponiendo los suyos propios? ¿Tan difícil es ofrecer a los consumidores un producto que no se quede obsoleto o sin soporte técnico al poco tiempo de ser adquirido?

Ya se la respuesta, claro: cuando habíamos conseguido renovar toda la videoteca y tenerla en DVD en vez de VHS, ahora hay que renovarla de nuevo para tenerla en Blue-Ray. Con los vinilos y los CDs nos hicieron la misma jugarreta.

Conmigo no cuenten. Ya estoy cansado de tanto cacharrito y nuevos formatos cada dos por tres. Además, mis películas favoritas son las de los Hermanos Marx y se ven estupendamente en el VHS ;-)

domingo, 17 de febrero de 2008

Tira nº 60: control remoto



Para los que no sepan de qué va: en Apple les gusta mucho el marketing.
"Apple Remote" es el mando a distancia que viene con algunos Mac y "Front Row" es el programa que se activa al utilizarlo, es como cualquier otro "Media Center" a pantalla completa.

Corrección: lo que el $USER debería meterse donde le quepa es el Apple Remote ;-)

viernes, 15 de febrero de 2008

Explotados encorbatados

Si usted trabaja en una empresa de desarrollo de "software" o en una consultora dedicada a la informática, no le voy a contar nada nuevo, seguramente.

Todos los que trabajamos en el sector conocemos bastante bien las "peculiaridades" de muchas de las empresas relacionadas con el desarrollo de "software" y la consultoría informática: subcontratación a mansalva, horarios abusivos y horas extras "gratis", proyectos mal planificados y con menos recursos humanos de los que serían deseables, supeditación de los costes de un proyecto a lo que el comercial "vende" al cliente, asignación de personal a proyectos en clientes con una categoría superior a la que realmente tiene el trabajador, desigualdades salariales escandalosas, ...

La verdad es casi todos los desarrolladores de software que trabajan en estas empresas ("cárnicas", en el argot del sector) están muy quemados. Es muy frustrante trabajar en estas condiciones. Por supuesto que esta no es la única profesión en la que ocurren estas miserias, pero es la que conozco.

También es muy característico de este mundillo el bajo nivel de concienciación de los trabajadores en general. En mi opinión, el hecho de que en muchas empresas obliguen al personal (masculino) a llevar corbata provoca una disminución del riego sanguíneo en determinadas zonas del cerebro que regulan la conciencia obrera. Porque en el fondo, por mucha corbata, traje y bonos de comida que se tengan, un desarrollador de software no deja de ser un obrero, un asalariado.

El último caso que ha llegado a mis oídos ha sido lo ocurrido en la empresa Integranova: han despedido a una sección sindical al completo de CGT por convocar elecciones sindicales en la empresa. No me extraña en absoluto. La acción sindical nunca ha sido bienvenida en este sector.

Se preguntarán ustedes que, si tan mal se trabaja en este sector, ¿cómo es que las cosas en general, funcionan? Les voy a responder: porque los desarrolladores de software competentes trabajan mucho (en cantidad y calidad), y, en general, son profesionales a los que les gusta mucho su trabajo y superar retos.
Esto explica que aunque los proyectos estén mal gestionados y mal planificados, al final los trabajos acaban saliendo, aunque con parches y "ñapas".

Pero el coste es muy alto, tanto económico como personal.
Los horarios de muchas personas son tan malos que dificultan mucho el tener una vida personal y familiar satisfactoria. Los costes de los proyectos muchas veces se disparan por una mala planificación, la alta rotación de personal y el mantenimiento del software se complica mucho cuando se programa con prisas y con una presión excesiva.

Quiero dejar claro que no estoy criticando a todas las empresas de desarrollo de "software" o consultoría informática. En muchas se trabaja bien. En otras, no tanto. En otras, en pocas palabras, es un infierno.

martes, 22 de enero de 2008

Los informáticos contamos empezando por 0

A veces tengo que llamar a un servicio técnico que funciona de la siguiente forma: llamo, digo quién soy, qué problema tengo y a continuación me validan una contraseña que nos han asignado. Por seguridad (no es muy recomendable decir la contraseña en voz alta rodeado de gente), en vez de pedirme la contraseña completa, me piden sólo algunas letras o cifras de la misma: "por favor, dígame las posiciones 1, 6 y 7 de su contraseña".

La primera vez que llamé no fui capaz de decirle las letras que me pedía hasta el tercer intento por lo menos. ¿Qué pasó?
Sencillo: estaba contando los caracteres como si estuviese programando, empezando por 0.

Normalmente, procederíamos así a la hora de contar (en la línea de arriba, la palabra, en la de abajo, la numeración o posiciones):
 C | o | n | t | r | a | s | e | ñ | a

 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

Sin embargo, un programador contará así:
 C | o | n | t | r | a | s | e | ñ | a

 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Casi todos los lenguajes de programación y sistemas siguen este esquema: empezar a contar desde cero. ¿Por qué se hace de esta forma tan poco intuitiva?
La razón que me parece más sencilla es la siguiente: el número 0 también contiene información.

Cuando utilizamos los números naturales para contar empezamos con el 1 porque el 0 no tiene significado: si no hay nada que contar, no contamos. Si hay algo que contar, empezamos por la unidad: "una manzana, dos manzanas, ..."

Sin embargo en los ordenadores cuando contamos en realidad lo que estamos es enumerando direcciones o posiciones.
Vamos a ver un sencillo ejemplo:

Supongamos que tenemos una ínfima memoria RAM de 8 bytes. Esto quiere decir que sólo disponemos de 8 "huecos", "casillas", posiciones o direcciones de memoria.
Podemos pensar en la memoria RAM como en un montón de buzones de correo apilados.

Si queremos acceder a una de estas direcciones para recuperar el contenido o escribir algo necesitamos saber su dirección. Como sabemos, los ordenadores sólo utilizan ceros y unos para contar, así que con tres bits seremos capaces de direccionar toda la memoria:
000 - 001 - 010 - 011 - 100 - 101 - 110 - 111

Estas ternas de números binarios son en el sistema decimal:
0 - 1 - 2 - 3 - 4 - 5 - 6 - 7

Así que tendremos el buzón 0, el buzón 1, el buzón 2, ... hasta el buzón 7. Total, 8 buzones.
Si nos hubiésemos empeñado en numerar los buzones desde el número 1 no nos hubiesen bastado 3 bits (*), puesto que el número 8 en binario es 1000 (**).

Los mayoría de los lenguajes de programación trata las cadenas de texto de la misma forma. Por ejemplo, el lenguaje PHP (con el cual están programados estos blogs) tiene una función o instrucción para extraer parte de una cadena de texto:
substr('Contraseña', 1, 5) nos proporciona 5 caracteres de la palabra 'Contraseña' a partir de la posición 1, esto es, "ontra".
Como ven, también cuentan desde 0.


Notas

(*) Existe una regla muy sencilla para saber cuántas posiciones podemos abarcar con n bits: 2^n.

  • Con 3 bits podemos contar 2^3 = 8 posiciones, esto es, del 0 al 7.

  • Con 4 bits podemos contar hasta 2^4=16 posiciones (del 0 al 15).


Un ordenador que funcione con 32 bits (los Pentium "clásicos", por ejemplo) podrá direccionar 2^32 = 4.294.967.296 direcciones, es decir, 4 Gigas de memoria. No compre más memoria que esta cantidad para su viejo Pentium. No podrá utilizarla.

(**) A los informáticos también se nos dan muy bien las potencias del número 2. Pregúntenle a un programador "¿cuanto es 2^10?". Seguro que le contesta con bastante rapidez ;-)

viernes, 18 de enero de 2008

La batalla de los formatos (3ª parte)

Hoy, formatos de documentos ofimáticos.
A finales de la década de los 80 uno de los programas más populares en todas las oficinas era el Word Perfect. Este programa era (y sigue siendo) un procesador de textos potente y muy completo que dominó el mercado. Por entonces el sistema operativo en los ordenadores personales era generalmente MS-DOS y al parecer, este programa funcionaba y se integraba muy bien con el sistema (escribo un poco de oídas, nunca utilicé el Word Perfect).
A principios de los 90, Microsoft publicó el sistema Windows y una versión de su procesador de textos, Microsoft Word, para este sistema. A la vez que Windows crecía en popularidad, Word (y la "suite" ofimática completa, Microsoft Office) pasó a ser el producto ofimático más utilizado.
En 1995 Microsoft publicó el sistema operativo Windows 95 y una versión actualizada de su suite ofimática, Office 7.0. En ese momento, ya era el producto dominante del mercado. Con el paso del tiempo, los formatos .doc (procesador de textos MS Word), .xsl (hoja de cálculo MS Excel) y .ppt (editor de presentaciones MS PowerPoint) se convirtieron en un estándar "de facto".
(Se rumorea que una posible razón del rápido éxito de los productos ofimáticos de Microsoft era la facilidad con la que se podían "piratear" estos programas. No recuerdo donde lo leí ...)
Mientras tanto, los productos competidores cada vez se utilizaban menos y sus desarrolladores se veían obligados a implementar la posibilidad de leer y escribir documentos en el formato (no documentado y propietario) de MS Office para no perder aún más usuarios. Lotus Smart Suite, WordPerfect Office, Star Office y otros productos cada vez eran menos utilizados.
Microsoft empezó a tener problemas legales a partir del año 2000 en EEUU y en la Unión Europea por abuso de su posición dominante en el mercado. En la Unión Europea y algunos estados de EEUU se empezó a considerar que utilizar como formato por defecto un producto propietario no era adecuado porque creaba una dependencia tecnológica indeseable.
Alternativas
En 2006 se aprobó por la ISO (International Standars Organization) el formato Open Document, basado en el formato interno utilizado por la suite ofimática Open Office. Apoyan este formato prácticamente todos los "grandes": IBM, Adobe, Sun MicroSystems, ...
Al ser un formato abierto y público rápidamente lo han implementado la mayor parte de programas y suites ofimáticas, excepto la suite de Microsoft (aunque existe un "añadido" para que pueda manejar este formato).
A finales del mismo año, Microsoft contraatacó presentando su propio formato de archivo ofimático, Office Open XML e intentando que también sea reconocido como estándar por la ISO. Las críticas no se hicieron esperar.
La jugada comercial parece clara: intentar que su propio formato sea reconocido como estándar para evitar problemas legales y poder seguir vendiendo su producto a organismos oficiales (un buen cliente) sin trabas.
En estos momentos el proceso de estandarización no está cerrado y Microsoft ha presionado todo lo que ha podido para conseguir que su especificación sea aceptada.
El problema es que Microsoft no ha esperado para empezar a utilizar este formato, aprobado por la ISO o no. La última versión de su producto, Office 2007 ya utiliza este formato por defecto (totalmente incompatible con versiones anteriores de Office).
La próxima vez que envíe un documento creado con Word 2007, observe si la extensión es .docx. Si es así, es muy probable que el receptor de este documento no lo pueda abrir si no tiene la última versión de Office (1). Creanmé: no todos usamos el MS Office ni mucho menos, su última versión.
(1) Casi todos los programas alternativos a Word pueden manejar el formato antiguo, el .doc de siempre, pero el nuevo .docx todavía no.

miércoles, 9 de enero de 2008

La batalla de los formatos (2ª parte)

Hoy: formatos de audio

Desde que se han popularizado los reproductores de audio portátiles con memorias flash (reproductores de MP3, para entendernos) nos hemos familiarizado bastante con el formato MP3, pero, ¿sabemos en qué consiste? ¿Conocemos alguna alternativa? Trataremos de arrojar un poco de luz sobre el asunto.

Hay dos formas de digitalizar el sonido: sin comprimir o con compresión, ésta a su vez puede ser sin pérdida y con pérdida.

Los formatos de audio sin comprimir guardan la información sonora tal cual la recogen, dependiendo la calidad de esta conversión principalmente de dos parámetros: la frecuencia de muestreo y el ancho de palabra o número de bits empleados en la cuantificación.

Muestreo y cuantificación son dos conceptos relativamente complejos, mencionaremos sólamente que cuanto mayor es la frecuencia de muestreo y mayor el número de bits empleados al cuantificar, mejor (o más fidedigno) es el proceso de conversión del sonido al formato digital. Por ejemplo, en los CDs de audio la frecuencia de muestreo es aproximadamente 44 kHz y el ancho de palabra utilizado es de 16 bits.

Los formatos de audio sin comprimir más conocidos son WAV (Waveform Audio Format), AIFF (Audio Interchange File Format) y AU. De ellos, el formato wav es el más conocido, principalmente por ser utilizado como formato de audio predominante en el sistema operativo Windows. Los otros dos formatos tienen un ámbito de utilización más restringido [1], son utilizados en aplicaciones profesionales (sistemas de audio profesional, CDs de audio, ...) y en los sistemas operativos Macintosh y UNIX, respectivamente.

Estos formatos sin comprimir se caracterizan como ya hemos dicho por la alta fidelidad del sonido digitalizado (dependiendo siempre de los parámetros que mencionábamos anteriormente) y por ser bastante "pesados", esto es, ocupan mucho espacio.

Hemos grabado dos fragmentos de audio con dos frecuencias de muestreo diferentes en el mismo equipo, uno a 8 kHz y el otro a 48 kHz. El primero ocupa 92 KBytes, el segundo 432 KBytes (¡casi medio mega!), y el fragmento de audio apenas dura unos segundos. Comprueben la calidad de cada uno de ellos: 8khz.wav y 48khz.wav

Ya que el audio sin comprimir es muy pesado se han diseñado distintas formas de reducir el tamaño de los archivos de audio manteniendo más o menos la fidelidad del sonido. A este proceso se le denomina compresión.Si en el proceso de compresión (reducción de tamaño) se conserva toda la información sonora original, hablamos de formatos de compresión sin pérdida. No son los más conocidos, FLAC (Free Losssless Audio Codec) es, probablemente, el más importante.

Los formatos de audio comprimido con pérdida son aquellos en los que al tratar la muestra sonora original reducimos el tamaño sacrificando la fidelidad al utilizar una técnica llamada "codificación perceptual":
Los humanos no somos capaces de discriminar todos los sonidos que suenan simultáneamente cuando algunos son mucho más intensos que otros (enmascaramiento).
Si eliminamos de la muestra sonora estos sonidos enmascarados reduciremos la cantidad de información que guardamos (y por lo tanto el tamaño) sin que apreciemos pérdida alguna.

El problema es que el umbral de enmascaramiento no es el mismo para todas las personas. Un oído entrenado puede discernir sonidos en una mezcla que otros no pueden. Los algoritmos de codificación con pérdida no pueden tener en cuenta estas particularidades y utilizan modelos estadísticos.

El parámetro más importante en una compresión de audio es el "bitrate" o "tasa de bits". Cuanto mayor es éste valor, mayor fidelidad al original conseguimos (se suprimen menos sonidos), pero no se consigue tanta reducción de tamaño. Se utilizan tasas de 48 a 96 kbps (kilobits por segundo) para aplicaciones de baja fidelidad (voz, ...), tasas de 128 kbps para música con una calidad aceptable y de 192 kbps para una mayor calidad.
Se dice (rumorea) que un fragmento de música comprimido en MP3 a 256 kbps es prácticamente indistinguible del original, incluso para los oídos más finos y entrenados.

En los siguiente archivos hemos comprimido un fragmento de música desde un CD a diferentes tasas. Los tamaños de archivo son, respectivamente, 48 kB, 128 kB y 256 kB (curiosamente ha coincidido el tamaño del archivo con la tasa de compresión: si hubiese querido hacerlo adrede, no lo hubiera conseguido).
Escuchen los resultados: 48kbps.mp3 128kbps.mp3 256kbps.mp3 [2]

Los formatos de audio comprimido con pérdida más conocidos son los siguientes:

  • MP3
    Es uno de los formatos más veteranos, extendidos y soportados. Probablemente sea el formato que adolece de más limitaciones técnicas de los cuatro.
    Es un formato patentado por el Instituto Fraunhofer IIS. Esto quiere decir que cada cachivache o programa que maneja ficheros MP3 debe pagar a esta institución. Los usuarios no pagamos directamente, aunque supongo que una pequeña parte del precio que pagamos por nuestro aparatito debe ir destinado a abonar por la patente.

  • Vorbis
    Formato que destaca principalmente por ser libre (sin patentes, de código abierto) e incorporar bastantes mejoras respecto al formato MP3. El principal lastre de este formato es que no está apoyado por ninguna compañía, por lo que no tiene tanta penetración en el mercado, aunque poco a poco ésta va aumentando.

  • WMA
    Formato creado y apoyado por Microsoft. Destaca principalmente porque es el formato de audio comprimido "por defecto" en el sistema operativo Windows.

  • AAC
    Formato creado por Apple [3] por varias compañías (Dolby, Fraunhofer IIS, AT&T, Sony y Nokia) y utilizado intensivamente por Apple. Es el formato de audio predeterminado en algunas tiendas de música "on-line" y en los reproductores portátiles de la marca Apple (aunque pueden reproducir otros formatos).


Estos dos últimos formatos (WMA y AAC) incorporan la posibilidad de limitar de alguna forma la reproducción de los archivos y el uso que se hace de ellos, principalmente para impedir copias y reproducciones no autorizadas.

Podemos decir que los formatos que incorporan tecnologías DRM (Digital Rights Management o Gestión de Derechos Digitales) limitan en cierto modo la libertad del usuario por un producto que ha pagado. Además, en algunos países (como en España) la copia privada de música (para uso personal y sin ánimo de lucro) está permitida y autorizada, por lo que estas tecnologías son bastante cuestionables desde el punto de vista legal.

Hasta que el formato Vorbis tenga una mayor implantación (algunos reproductores ya lo soportan), prefiero utilizar MP3 e ignorar estos formatos propietarios.
Que cada uno se informe y use lo que le convenga.

[1]: Corrección: como bien indica un lector en los comentarios, el formato AIFF es el que internamente se utiliza en los CDs de audio.

[2]: En otra entrada un lector me reprochaba el haber caído en el tópico facilón cuando escribí, medio en broma, medio en serio que "el mejor Jazz era el de los años 50". Para resarcirme un poco, el fragmento de ejemplo es un tema del primer disco de Joshua Redman (saxofonista), grabado en 1993.

[3]: Corrección: otro lector me ha indicado que Apple no diseñó el formato AAC.