ESCUELA TECNICA´ SUPERIOR DE INGENIER´IA INFORMATICA´

Ingenier´ıa Informatica´

Extension´ para Clasificacion´ de Correo Electronico´ en Thunderbird

Realizado por Jos´eMar´ıaCarmona Cejudo

Dirigido por Manuel Baena Garc´ıay Rafael Morales Bueno

Departamento Lenguajes y Ciencias de la Computaci´on

UNIVERSIDAD DE MALAGA´

MALAGA,´ Febrero 2008

UNIVERSIDAD DE MALAGA´ escuela tecnica´ superior de ingenier´ıa informatica´ Ingenier´ıa Informatica´

Reunido el tribunal examinador en el d´ıa de la fecha, constituido por: Presidente Do/Da. Secretario Do/Da. Vocal Do/Da. para juzgar el proyecto Fin de Carrera titulado: Extensi´onpara Clasificaci´onde Correo en Mozilla Thun- derbird del alumno Do. Jos´eMar´ıaCarmona Cejudo dirigido por Do. Rafael Morales Bueno y Da. Manuel Baena Garc´ıa

ACORDO´ POR OTORGAR LA CALIFICACION´ DE

Y PARA QUE CONSTE, SE EXTIENDE FIRMADA POR LOS COMPA- RECIENTES DEL TRIBUNAL, LA PRESENTE DILIGENCIA.

M´alaga, a de del 2003

El Presidente El Secretario El Vocal

Fdo: Fdo: Fdo:

Agradecimientos

A Manuel Baena, por estar siempre dispuesto a ayudar, y por sus bue- nas ideas y consejos.

A todos los que comparten en Internet su experiencia sobre Thunder- bird.

A mi familia, por apoyarme siempre.

A Brise, por estar a mi lado en los buenos y en los malos momentos.

8 ´Indice general

1. Introducci´on 15 1.1. El correo electr´onico ...... 15 1.1.1. Introducci´on al correo electr´onico ...... 15 1.2. La necesidad de clasificar el correo electr´onico ...... 17 1.2.1. Clasificaci´on de correo usando t´ecnicas bayesianas . . . 18 1.2.2. genusmail ...... 20 1.3. Thunderbird y el proyecto Mozilla ...... 21 1.3.1. Breve historia de ...... 22 1.3.2. Caracter´ısticas de Mozilla Thunderbird ...... 24

2. Objetivos 27 2.1. Prop´osito de este proyecto ...... 27 2.2. Objetivos ...... 27

3. Consideraciones t´ecnicas 29 3.1. Consideraciones sobre usabilidad ...... 29 3.2. Desarrollo para la suite Mozilla ...... 39 3.2.1. Arquitectura de la suite Mozilla. XPCOM ...... 39 3.2.2. XUL...... 41 3.2.3. JavaScript...... 43 3.2.4. Internacionalizaci´on y localizaci´on ...... 44 3.2.5. ...... 44 3.2.6. Chrome ...... 45 3.2.7. RDF...... 47

9 10 ´INDICE GENERAL

3.2.8. Seguridad ...... 48

4. An´alisis y dise˜no 51 4.1. An´alisis preliminar: Diagramas ...... 52 4.1.1. Casosdeuso ...... 52 4.1.2. Diagramas de clase ...... 54 4.1.3. Diagrama de paquetes ...... 55 4.1.4. Diagrama de estados ...... 56 4.1.5. Diagramas de secuencia ...... 58 4.2. An´alisis de interfaces de usuario similares ...... 61 4.2.1. An´alisis ...... 62 4.2.2. Implementaci´on los escenarios de uso por parte de las herramientas ...... 65 4.2.3. An´alisis de las herramientas atendiendo a heur´ısticas dedise˜no ...... 70 4.3. Dise˜no de la interfaz ...... 72 4.4. Comunicaci´on con Genusmail ...... 77

5. Implementaci´on 79 5.1. Flujo de trabajo para la implementaci´on de extensiones para Thunderbird...... 79 5.2. Implementaci´on de la interfaz sin funcionalidad ...... 80 5.2.1. Estructura del programa: carpetas ...... 80 5.2.2. Overlays...... 82 5.3. Implementaci´on de la funcionalidad de la interfaz ...... 86 5.3.1. De la interfaz al clasificador ...... 86 5.3.2. Llamada al clasificador ...... 91 5.4. Componente XPCOM ...... 93 5.5. Sistema de preferencias de la extensi´on ...... 98

6. Despliegue de la extensi´on 101 6.1. Estructura de directorios ...... 101 ´INDICE GENERAL 11

6.2. Ficheros de configuraci´on ...... 104 6.2.1. chrome.manifest ...... 104 6.2.2. install.rdf ...... 105

7. Manual de usuario 107 7.1. Instalaci´on y desinstalaci´on de Another Mail Classifier . . 107 7.2. Configuraci´on de las preferencias ...... 110 7.3. Uso de la extensi´on ...... 111 7.3.1. Entrenar...... 111 7.3.2. Requerir clasificaci´on ...... 113 7.3.3. Mover e-mail a clasificaci´on ...... 113 7.3.4. Eliminar clasificaci´on ...... 114 7.3.5. Forzar clasificaci´on ...... 114

8. Conclusiones 115

A. Contenido del soporte ´optico 119

B. Convenciones de codificaci´on 121 B.1. Convenciones de codificaci´on ...... 121

C. Programas usados 125 C.1. Recursos hardware y software usados ...... 125 C.2. Snipplets de c´odigo externos usados ...... 126

Bibliograf´ıa 127 12 ´INDICE GENERAL ´Indice de figuras

1.1. Logo de Mozilla Thunderbird ...... 24

3.1. Captura del buscador Google, donde se aprecia el uso de la Ley de la Cercan´ıa ...... 32 3.2. Captura del portal de noticias BBC, para ilustrar la Ley de la Semejanza ...... 33 3.3. Panel principal de la Wikipedia, claro ejemplo de la Ley de Clausura...... 34 3.4. P´agina principal de Amazon.com, para ilustrar la Ley de la FigurayelFondo...... 34 3.5. Parte inferior de una p´agina de la Wikipedia, donde se observa el uso combinado de varias leyes ...... 35

4.1. Men´ude Bayesweep en Outlook Express ...... 66 4.2. Configuraci´on de categor´ıas en Bayesweep ...... 69 4.3. Definici´on de una regla en Bayesweep ...... 71 4.4. Captura del men´uprincipal de nuestra extensi´on ...... 73 4.5. Columna a˜nadida al panel de correo de Thunderbird . . . . . 75 4.6. Renombre de las entradas del men´upara mover y copiar e-mails 75 4.7. Ventana de preferencias de la extensi´on ...... 76 4.8. Representaci´on gr´afica del sistema de pseudotuber´ıas usado para comunicarnos con Genusmail ...... 78

5.1. Arbol´ de directorios del c´odigo fuente de la extensi´on . . . . . 81

13 14 ´INDICE DE FIGURAS

5.2. C´odigo fuente del overlay correspondiente a la columna perso- nalizada ...... 82 5.3. C´odigo de inicializaci´on de anothermailclassifier ...... 87 5.4. Fragmento del c´odigo del listener ...... 89 5.5. C´odigo correspondiente al movimiento de un e-mail ...... 90 5.6. Secuencia de acontecimientos en la clasificaci´on de un e-mail . 93 5.7. Definici´on IDL de la interfaz ...... 94 5.8. Interfaz IDL para el Callback ...... 95 5.9. C´odigo C++ correspondiente a la implementaci´on del compo- nente AMCComp ...... 97 5.10. C´odigo JavaScript de las preferencias ...... 99 5.11. Editor de configuraci´on de Mozilla Thunderbird ...... 100

6.1. Organizaci´on de los ficheros de la extensi´on ...... 102

7.1. Men´ude complementos de Thunderbird...... 108 7.2. Explorador de archivos, para encontrar el instalable de la ex- tensi´on...... 108 7.3. Instalaci´on de la extensi´on...... 109 7.4. Instalaci´on de la extensi´on finalizada...... 109 7.5. Instalaci´on de la extensi´on finalizada...... 110 7.6. Advertencia de que el entrenamiento es una operaci´on poten- cialmentelarga ...... 111 7.7. E-mails sin clasificar ...... 112 7.8. El usuario le pide a Genusmail que clasifique dos correos . . . 112 7.9. Los correos han sido clasificados ...... 112 Cap´ıtulo1

Introducci´on

Para comenzar nuestro trabajo, daremos una peque˜na introducci´on al correo electr´onico y nos fijaremos en las razones que llevan a la necesidad de clasificarlo en distintas categor´ıas. Veremos en qu´econsisten las t´ecnicas bayesianas de clasificaci´on, y una herramienta concreta, Genusmail. Poste- riormente hablaremos del programa al que est´adirigida nuestra extensi´on, Mozilla Thunderbird, de su historia y caracter´ısticas m´as notables, ya que el objetivo final de este trabajo consiste en integrar en Thunderbird una interfaz con el sistema de clasificaci´on Genusmail.

1.1. El correo electr´onico

1.1.1. Introducci´onal correo electr´onico

El correo electr´onico o e-mail/email 1 naci´oa finales de los a˜nos 60, siendo al principio una herramienta de intercambio de informaci´on para peque˜nos grupos de investigaci´on. Hoy en d´ıa lo utilizan sin embargo miles de millo- nes de usuarios. El correo electr´onico funciona, grosso modo, de la siguiente

1Existe controversia respecto a la necesidad de usar gui´ono no en la palabra “e-mail”. El CMS (Chicago Manual of Style, [Wie05]), est´andar de facto para la escritura y el perio- dismo en ´ambitos tecnol´ogicos, recomienda usar el gui´on; por lo tanto, nosotros usaremos esta recomendaci´on

15 16 CAP´ITULO 1. INTRODUCCION´ manera:

Mediante cualquier cliente de correo, como es el caso de Mozilla Thun- derbird, se escribe el mensaje y se env´ıa a una direcci´on de correo.

Entonces, el cliente env´ıa su mensaje al servidor de correo.

Cuando el servidor recibe el correo, analiza la direcci´on2, etc, del desti- natario, y, si es necesario, transfiere el correo a otro servidor. Es decir, el mensaje es enrutado a trav´esde una ruta de servidores, hasta que llega al servidor final. Todo esto es lo controla el protocolo SMTP.

El mensaje permanece en el servidor de destino hasta que el usuario so- licita leerlo. En ese momento, el cliente de correo descarga el mensaje al ordenador del usuario, para que lo pueda leer. La solicitud del correo se puede hacer mediante protocolos como POP, o el m´as moderno IMAP.

El mensaje en s´ımismo consta de dos partes: cabecera y cuerpo.

La cabecera contiene informaciones como la ruta que ha seguido el e-mail hasta llegar a sus destinatario, la fecha en que el mensaje fue enviado, la direcci´on de correo del emisor3, la lista de destinatarios, la lista de destinatarios de una copia de carb´on (CC o BCC), el subject o tema del e-mail, el identificador del mensaje, y m´as. La sintaxis exacta de la cabecera est´adescrita en el RFC 2822[Res01].

El cuerpo estaba compuesto inicialmente de texto plano codificado en ASCII de 7 bytes. El est´andar MIME4 permite incorporar caracteres no ASCII, archivos adjuntos, y cuerpos de varias partes [Gra93]. MIME est´aespecificado por hasta seis RFCs: RFC 2045, RFC 2046, RFC 2047, RFC 4288, RFC 4289 y RFC 2077. MIME ofrece la posibilidad de codificar dentro del correo electr´onico texto, im´agenes, audio, v´ıdeo,

2Una direcci´onde correo est´aformada por dos partes, el nombre de usuario y un dominio, separadas por el s´ımbolo @, por ejemplo [email protected] 3Esta direcci´onse puede falsificar, para hacer creer que el emisor ha sido otra persona 4Multipurpose Internet Mail Extensions 1.2. LA NECESIDAD DE CLASIFICAR EL CORREO ELECTRONICO´ 17

e incluso aplicaciones, y de entrelazar todos estos elementos, de forma secuencial o paralela.

1.2. La necesidad de clasificar el correo elec- tr´onico

El r´apido crecimiento de las comunicaciones mediante correo electr´onico hace necesario organizar la informaci´on para hacer m´as r´apido el procesado y la b´usqueda. Almacenar los e-mails en carpetas organizadas jer´arquicamente, d´onde cada carpeta corresponde a una categor´ıa conceptual, ha demostrado ser ´util en este sentido [Its97]. Los problemas de detectar e-mail no solicitado (spam), detectar r´apidamente mensajes importantes, o analizar mensajes de listas de correo est´an a la orden del d´ıa, y mantiene ocupados a los usuarios durante m´as tiempo del que ser´ıa deseable.

Se han implementado varias herramientas para organizar la bandeja de entra- da de los usuarios. Por ejemplo, la mayor´ıa de los clientes de correo actuales incorporan filtros, que analizan si el mensaje contiene o no unas palabras dadas para asignarle una clasificaci´on. Este concepto, sin embargo, no es tan ´util para grandes cantidades de correo, con conceptos muy distintos y que en ocasiones se solapan. Adem´as, obligan al usuario a reorganizar sus filtros cuando quiere cambiar la organizaci´on de sus carpetas. Existen m´etodos au- tom´aticos de clasificaci´on, como los denominados bayesianos, que tienen un mayor porcentaje de aciertos que los sistemas de filtros [MMRT], al ser ca- paces de adaptarse de forma autom´atica al usuario. En el siguiente apartado estudiaremos el funcionamiento de este tipo de clasificadores, y hablaremos de un ejemplo concreto. 18 CAP´ITULO 1. INTRODUCCION´

1.2.1. Clasificaci´onde correo usando t´ecnicas bayesia- nas

Dentro de los m´etodos que se basan en el contenido de los e-mails para decidir si son o no spam (o, generalizando, para decidir su categor´ıa), los es- t´aticos resultan simples de implementar, ya que se basan en la suposici´on de que si un mensaje contiene una palabra concreta, o proviene de un dominio concreto, se trata de correo basura. Sin embargo, este tipo de m´etodos no resulta demasiado fiable, ya que los spammers, para conseguir que sus mensa- jes lleguen al destinatario, simplemente tendr´ıan que evitar ciertas palabras en sus e-mails, las que se sabe que probablemente ser´an interceptadas por los filtros del usuario t´ıpico, o escribir desde otro dominio. Pos esta raz´on, se hacen necesarios m´etodos que sean capaces de adaptarse en dos dimensiones:

Usuario: Para muchos usuarios, un e-mail que contenga repetidamente la palabra Viagra ser´aprobablemente spam, pero para una farmacia que realice pedidos de este producto, en principio no tiene por qu´e. Por lo tanto, un m´etodo de clasificaci´on de e-mail debe ser capaz de adaptarse al usuario concreto que lo est´ausando.

Tiempo: Las t´ecnicas usadas por los spammers pueden cambiar a lo lar- go del tiempo, incluyendo por ejemplo nuevas variaciones de palabras usadas normalmente (v-i-a-g-r-a o v**gr* en vez de viagra). Tam- bi´enpuede cambiar a lo largo del tiempo la clasificaci´on de los correos para cierto usuario: por ejemplo ejemplo, una compa˜n´ıa de software que decida implementar un nuevo producto X para gesti´on de facturas. El m´etodo que se use para clasificar debe aprender que, a partir de ese momento, el nombre del producto (X) est´arelacionado con la gesti´on de facturas.

Los clasificadores adaptativos basados en t´ecnicas bayesianas funcionan de forma realmente prometedora: el porcentaje de aciertos supera el 99,5 %[Cor]. Esta t´ecnica, propuesta por primera vez en [SDHH98], se basa en t´ecnicas 1.2. LA NECESIDAD DE CLASIFICAR EL CORREO ELECTRONICO´ 19 estad´ısticas, concretamente en el teorema de Bayes, aplicado de la siguiente forma:

P(palabras|Categoria )P(Categoria ) P(Categoria |palabras) = i i i P(palabras)

Es decir, la probabilidad de que un e-mail pertenezca a cierta categor´ıa, dado que contiene ciertas palabras, es igual a la probabilidad de aparici´on de esas palabras en los e-mails a los que anteriormente se les hab´ıa asignado esa ca- tegor´ıa, multiplicada por la probabilidad de que cualquier e-mail pertenezca a esa categor´ıa, dividido entre la probabilidad de encontrar esas palabras en cualquier e-mail.

Por ejemplo, imaginemos que hemos recibido un e-mail con varias apari- ciones de la palabra viagra. La probabilidad de que ese e-mail pertenezca a la categor´ıa spam dado que contiene la palabra viagra es la probabilidad de que los e-mails de la categor´ıa spam contengan la palabra viagra (alta) multiplicado por la probabilidad de que los e-mails que nos lleguen son spam (presumiblemente alta) dividido entre la probabilidad de encontrar la pa- labra viagra en un e-mail cualquiera (normalmente baja). Por lo tanto, el clasificador nos dir´ıa que estamos ante un caso de spam con alta probabilidad.

Para que este tipo de clasificador funcione aceptablemente bien, necesita un entrenamiento previo, que idealmente debe usar e-mails reales del usua- rio, para que su adaptaci´on a este sea m´as precisa, de forma que tengamos una base de datos de probabilidades que realmente represente los h´abitos del usuario. Esta base de datos ir´acambiando con el tiempo, seg´un el usuario acepte la clasificaci´on dada (se reforzar´ael modelo interno) o no (en cuyo caso se cambiar´ael modelo para tener en cuenta el feedback del usuario.) 20 CAP´ITULO 1. INTRODUCCION´

1.2.2. genusmail

Genusmail es un clasificador adaptativo de correo electr´onico que usa m´e- todos bayesianos[Rep07]. Fue desarrollado por Miguel Angel´ Zafra para su Proyecto de Fin de Carrera. En el apartado de su memoria Conclusiones: Posibles ampliaciones(p´ag. 94), Miguel Angel´ afirmaba:

“(...) En el caso de nuestro proyecto, se ha optado por integrar el clasifi- cador en el propio servidor de correo electr´onico; ´estorequiere que el mante- nimiento y configuraci´onde genusmail, sea llevado a cabo por el administra- dor de dicho servidor. Con lo cual parece claro que la siguiente fase de ampliaci´ondel proyecto ser´ıa la transformaci´ondel programa en una extensi´on(o plugin) compatible con alguno de los clientes de correo mayoritarios, como por ejemplo Mozilla Thunderbird, y ha- cer que la integraci´oncon el entorno de usuario sea transparente y gestionable por ´el mismo, adem´asde ser una importante baza tanto para la popularidad, como para la libre distribuci´ondel proyecto. ”

Nosotros cogemos el relevo y nos proponemos realizar la ampliaci´on de la que habla Miguel Angel,´ convirti´endola en una extensi´on para Thunderbird de nombre Another Mail Classifier. Genusmail est´aimplementado en Ja- va, y est´aorganizado en cuatro grandes m´odulos:

El primero, genusmail.core.cnx, pone en contacto la aplicaci´on con el servidor de correo, utilizando el protocolo IMAP.

El segundo, genusmail.filters, extrae la informaci´on requerida por el usuario de los mensajes. Hay definido un conjunto de filtros (asunto del e-mail, emisor, receptor, etc.), que se puede ampliar.

El tercero, genusmail.core, da el formato adecuado a la informaci´on extra´ıda, para almacenarla y recuperarla de modo eficiente y coherente.

El cuarto, genusmail, se encarga de la miner´ıa de datos, y es el encar- 1.3. THUNDERBIRD Y EL PROYECTO MOZILLA 21

gado de interactuar con el usuario y de entrenar al modelo bayesiano.

Esta herramienta utiliza la biblioteca Weka, que contiene implementa- ciones de algoritmos de clasificaci´on y aprendizaje, y varias herramientas auxiliares, por ejemplo para transformar datos.

1.3. Thunderbird y el proyecto Mozilla

Mozilla Thunderbird es un cliente de correo, es decir, un programa usado para leer y escribir correos electr´onicos o e-mails. En este trabajo preten- demos extender su funcionalidad integrando un clasificador adaptativo de correo, una herramienta que prediga a qu´ecarpeta tiene que ir cada correo recibido. Mozilla Thunderbird forma parte de la suite de aplicaciones Mozilla [Moz07c], una plataforma de desarrollo disponible para diferentes sistemas operativos que incluye, entre otras aplicaciones, uno de los navegadores m´as usados del momento [One07], , y el cliente de correo Thunderbird. Estas aplicaciones son totalmente configurables tanto en el idioma de la apli- caci´on como en la apariencia (skins). Mozilla es software libre y de c´odigo abierto: esto hace que los fallos detectados se puedan corregir r´apidamente, y que cualquiera pueda estudiar y modificar el c´odigo seg´un sus necesidades.

Una de las caracter´ısticas m´as importantes de las aplicaciones de Mozilla es que son ampliable mediante extensiones, lo que permite ampliar la funcio- nalidad de los programas de la suite5, seg´un las necesidades de los distintos usuarios.

A continuaci´on relatamos de forma resumida la historia de Thunderbird, y en la siguiente secci´on veremos algunas de las caracter´ısticas m´as destacadas

5Llama la atenci´onque el n´umero de extensiones disponibles actualmente para Firefox (1956) [Moz07g] quintuplique el n´umero disponible para Thunderbird (358) [Moz07h], y que la mayor´ıa de la documentaci´onoficial sobre construcci´onde extensiones se refiera a Firefox. 22 CAP´ITULO 1. INTRODUCCION´ de este programa.

1.3.1. Breve historia de Mozilla Thunderbird

El predecesor de Mozilla fue , un navegador que inclu´ıa un clien- te de correo, y que fue l´ıder del mercado hasta que perdi´oeste puesto ante el Internet Explorer de Microsoft, el cual contin´ua siendo l´ıder del mercado hasta hoy d´ıa [One07].

La historia de la suite Mozilla propiamente dicha empez´ocon la liberaci´on del c´odigo fuente de la suite Netscape, como proyecto de c´odigo abierto, en marzo de 1998 [Net98a]. Esta decisi´on dividi´oa los usuarios: unos lo interpretaron como una victoria para el software libre, mientras que otros lo interpretaron como la rendici´on de Netscape ante el Explorer.

Los desarrolladores se dieron cuenta r´apidamente de que no se pod´ıa reutili- zar gran parte del c´odigo fuente original de Netscape, por diversos problemas [Zaw99]:

El c´odigo de Netscape se hab´ıa vuelto enorme y complejo. Los ciclos de desarrollo r´apidos a los que se ve´ıan obligados los desarrolladores de Netscape en plena batalla con Internet Explorer hab´ıan hecho que se sacrificara la modularidad y reusabilidad del c´odigo en favor de la inclusi´on de m´as caracter´ısticas en el producto, con la intenci´on de ser competitivos y hacer frente a su rival, redundando negativamente en la calidad del c´odigo producido.

El hecho de que tuviera que ser desarrollado para varios sistemas ope- rativos diferentes, cada uno con sus propias librer´ıas e idiosincrasias, dificultaba bastante el trabajo.

Algunas partes del c´odigo fuente de Netscape nunca fueron lanzadas como c´odigo abierto, debido a compromisos con terceras partes. 1.3. THUNDERBIRD Y EL PROYECTO MOZILLA 23

Por lo tanto, los desarrolladores decidieron que la opci´on m´as razonable era reescribir desde el principio la mayor parte del c´odigo fuente, para hacer frente a estos problemas. Por ejemplo, para solucionar los problemas que se presentaban al soportar m´ultiples plataformas, se implementar´ıa una nueva biblioteca multiplataforma para interfaces de usuario, y un nuevo motor de renderizado, llamado Gecko, que destacaba por su peque˜no tama˜no y veloci- dad [Net98b].

Pero, en realidad, los desarrolladores de Mozilla ten´ıan en mente algo m´as que un simple navegador. Pretend´ıan crear una plataforma de aplicaciones de Internet, que incluyese un navegador, un cliente de mensajer´ıa instant´anea, un cliente de noticias y correo, etc., con una interfaz de usuario totalmente personalizable y una arquitectura modular. La tarea se vislumbraba tit´anica, y de hecho se necesit´omucho m´as tiempo del que se preve´ıa en un principio, lo que provoc´oescepticismo sobre el proyecto, algo l´ogico, dado que era evi- dente que no avanzaba a la velocidad prevista, dando a muchos la impresi´on de que se estaba quedando estancado.

Sin embargo, Mozilla lanz´ola versi´on 1.0 de su navegador en junio de 2002, un navegador que funcionaba en GNU/Linux, MacOS, Windows y Solaris, con muchas mejoras en comparaci´on con Internet Explorer, notablemente en seguridad, y en un fuerte apoyo a los est´andares del World Wide Web Consortium[Moz06]. A partir de abril del 2003, Mozilla decide que desarro- llar´ıa independientemente el navegador y el cliente de correo[Moz06]6. Este ´ultimo ser´ıa llamado inicialmente Minotaur, y posteriormente Thunderbird, y se tratar´ıa de un redise˜no del componente de correo de Mozilla, con el ob- jetivo de ofrecer un cliente de correo independiente, usando el lenguaje de definici´on de interfaces XUL[Moz03a], del que hablamos m´as adelante.

6El proyecto SeaMonkey sigui´odesarrollando la suite seg´un la filosof´ıa original de Nets- cape y Mozilla, en un solo programa que inclu´ıa navegador y cliente de correo 24 CAP´ITULO 1. INTRODUCCION´

Figura 1.1: Logo de Mozilla Thunderbird

En julio de ese mismo a˜no se crea la fundaci´on Mozilla, para asegurar la supervivencia del proyecto Mozilla, ya que AOL, los creadores de Netscape, redujeron dr´asticamente sus inversiones en Mozilla[Moz03b]. La Corporaci´on Mozilla anunci´oen julio de 2007 que Thunderbird ser´ıa desarrollado en el fu- turo por una organizaci´on independiente, ya que la Corporaci´on Mozilla (la parte “con ´animo de lucro” de la Fundaci´on Mozilla) pretend´ıa centrarse en el desarrollo del navegador, Firefox[IW07]. Seg´un algunos ([IW07]), tambi´en tuvo que ver que Thunderbird (al contrario que Firefox) estaba perdiendo el favor de muchos usuarios, que prefer´ıan usar correo web (Gmail, Hotmail) para cubrir sus necesidades. La falta de soporte para calendario al estilo de Evolution tampoco ayudaba demasiado a Thunderbird, a pesar de la dispo- nibilidad de extensiones como que cubren esta necesidad. As´ıpues, se decidi´ocrear una subsidiaria de la Fundaci´on Mozilla dedicada al correo electr´onico. El 17 de Septiembre del 2007, David Ascher, de ActiveState, se uni´oa Mozillla como parte de una iniciativa conjunta para ”estimular la innovaci´on en el correo y las comunicaciones en Internet”[Moz].

1.3.2. Caracter´ısticas de Mozilla Thunderbird

En esta secci´on echamos un vistazo a las caracter´ısticas m´as destacables de Mozilla Thunderbird en relaci´on con otros clientes de correo. Muchas de estas caracter´ısticas son compartidas por otros productos de la suite Mozilla, como el apoyo a los est´andares o el soporte multiplataforma, debido a que 1.3. THUNDERBIRD Y EL PROYECTO MOZILLA 25 las tecnolog´ıas usadas para los productos de esta suite, como el lenguaje de definici´on de interfaces XUL, son comunes. Hablaremos m´as a fondo de estas tecnolog´ıas en un cap´ıtulo posterior. Se puede encontrar m´as informaci´on sobre estas caracter´ısticas en la web de Mozilla (ver [Moz07b]).

Vista avanzada de carpetas. Existe una gran flexibilidad en cuando a la forma en la que se pueden visualizar las carpetas de correo: por favoritos, vistos recientemente, no le´ıdos, y mediante carpetas creadas por el usuario.

Filtrado de correo basura. Thunderbird incluye por defecto un filtro antispam basado en redes bayesianas, que aprende a medida que el usuario marca mensajes como spam o no. Tiene la posibilidad de man- dar el correo basura a una carpeta espec´ıfica, para que no se muestre en la bandeja de entrada. Recientemente ha incorporado un filtro anti- phishing7.

F´acil personalizaci´on, en cuando a skins (apariencia gr´afica). El usuario puede dise˜nar la apariencia gr´afica de Thunderbird, o instalarse skins producidos por otros usuarios.

Extensiones. La funcionalidad de Thunderbird se puede extender f´a- cilmente instalando extensiones, como la que desarrollamos para este proyecto. Las extensiones se distribuyen como m´odulos xpi, que se pue- den instalar desde el men´ude Thunderbird.

Soporte de est´andares: POP, IMAP, LDAP, HTML, XML, XHTML, CSS, JavaScript, DOM, MathML, DTD, XSL, XPath, o S/MIME son algunos de los est´andares soportados por Thunderbird (y la suite Mo- zilla en general).

Soporte multiplataforma. Mozilla Thunderbird est´adisponible para Windows, MacOS, y sistemas operativos basados en UNIX, como GNU/Linux

7El phishing es un intento de adquisici´onde informaci´on, como nombres de usuario, contrase˜nas, o n´umeros de tarjeta de cr´edito, haci´endose pasar por otra p´agina [DW05] 26 CAP´ITULO 1. INTRODUCCION´

o Solaris. En realidad se puede utilizar en casi cualquier sistema ope- rativo, ya que el c´odigo fuente est´adisponible y puede ser compilado en el sistema operativo que se elija. Los perfiles de usuario se guardan en un mismo formato para todos los sistemas operativos, con lo que si nos cambiamos de sistema operativo, o utilizamos varios sistemas operativos, podemos importar f´acilmente nuestro perfil.

Internacionalizaci´on y localizaci´on. Thunderbird est´adisponible en 36 idiomas (ver [Moz07a]), gracias a las contribuciones de traductores de todo el mundo.

Seguridad. Thunderbird soporta TLS, firma digital, o certificados digi- tales. En el desarrollo de Thunderbird se le ha dado gran importancia a la seguridad.

Una de las cosas que m´as se le critica a Thunderbird es que le falta funcionali- dad de calendario, como la que ofrece Microsoft Outlook, aunque el proyecto Lightning anunci´oque pretend´ıa integrar un calendario dentro de Thunder- bird, en forma de extensi´on [Moz07f]. La versi´on 0.7 ya est´adisponible para descarga. Cap´ıtulo2

Objetivos

En este cap´ıtulo detallamos con m´as exactitud lo que pretendemos con la realizaci´on de este proyecto. En la primera secci´on, Prop´osito de este proyecto se resume la finalidad del mismo, y a continuaci´on, en Objeti- vos daremos una lista de objetivos m´as detalladamente, especificando las caracter´ısticas que pretendemos que el producto final del proyecto posea.

2.1. Prop´osito de este proyecto

Implementaci´onde una extensi´onpara Mozilla Thunderbird que act´uecomo interfaz de un sistema de clasificaci´onde correo elec- tr´onico,que ya est´adisponible.

2.2. Objetivos

La extensi´on le debe asignar una categor´ıa a cada correo electr´onico que llega a Thunderbird.

El usuario debe ser capaz de modificar la categor´ıa asignada (usando la interfaz gr´afica).

Para ello, la extensi´on tiene que poder notificar al clasificador si el

27 28 CAP´ITULO 2. OBJETIVOS

usuario acepta o no la clasificaci´on, y en el ´ultimo caso, notificar la clasificaci´on propuesta por el usuario, para que el sistema aprenda de sus errores

La extensi´on debe ser dise˜nada de forma que se maximice su usabilidad [8], es decir, que sea f´acil de aprender y usar, eficiente, flexible, tal que prevenga y sea capaz de solucionar posibles errores del usuario.

Adem´as, debe ser f´acil de instalar por un usuario sin demasiados cono- cimientos de inform´atica.

Se pretende que sea compatible al menos con la versi´on 2.0 de Thun- derbird.

La implementaci´on se har´ausando los lenguajes, tecnolog´ıas y herra- mientas t´ıpicos de la suite Mozilla (XUL, JavaScript, XML, etc.)

Se crear´adocumentaci´on adecuada, tanto de cara al usuario (tutoriales o manuales), como la interna al proyecto (control, interfaces usadas, etc.)

Se pretende comparar nuestra soluci´on con otros enfoques a este pro- blema, y con productos similares.

El nombre que le daremos a nuestra extensi´on ser´a, como dijimos en el cap´ıtulo de introducci´on, Another Mail Classifier. En el siguiente cap´ıtu- lo hablaremos de los lenguajes y tecnolog´ıas, y otros aspectos t´ecnicos que nos servir´an para la implementaci´on de nuestra interfaz, intentando dar una visi´on general de ellos, pero centr´andonos de alguna manera en los aspectos m´as relacionados con la extensi´on que pretendemos construir. Cap´ıtulo3

Consideraciones t´ecnicas

Este cap´ıtulo est´adedicado a varios aspectos t´ecnicos relacionados con nuestra extensi´on. Empezaremos hablando de usabilidad, un concepto rela- cionado con la interfaz gr´afica de usuario, de la que se busca que sea lo m´as usable posible, es decir, que se f´acil de utilizar y realice su trabajo de forma simple, eficiente y efectiva. Posteriormente hablaremos de varios lenguajes y tecnolog´ıas usados por los lenguajes de la suite Mozilla, y de la arquitectura de los programas de esta suite, desde un punto de vista general.

3.1. Consideraciones sobre usabilidad

Nuestra enfoque respecto a la usabilidad se basa en las l´ıneas maestras descritas en el ISO1 13407 (Dise˜node aplicaciones interactivas orientado al usuario)[BC97], un proceso que incluye actividades de dise˜no centradas en el usuario a lo largo del ciclo de vida de las aplicaciones. El dise˜no centrado en el usuario es una actividad multidisciplinar, que precisa de conocimiento sobre ergonom´ıa y factores humanos, con el fin de mejorar la efectividad y pro- ductividad del software. Este proceso se basa en cuatro fases, de naturaleza

1ISO, International Standardization es un organismo internacional compuesto de representantes de varios organizaciones estandarizadoras internacionales, y promulga es- t´andares industriales y comerciales a nivel mundial

29 30 CAP´ITULO 3. CONSIDERACIONES TECNICAS´ iterativa:

An´alisis

Por an´alisis entendemos la comprensi´on y especificaci´on del contexto de uso. Si queremos conseguir un sistema con buena usabilidad debemos conocer las caracter´ısticas de los usuarios, y el entorno donde van a trabajar con nues- tro sistema. Tenemos que analizar las necesidades de los usuarios atendiendo a criterios de usabilidad, como los siguientes:

Eficiencia: El usuario consigue su tarea efectuando el m´ınimo n´umero posible de pasos.

Efectividad: El sistema debe ser capaz de completar correctamente las tareas que necesita el usuario

Satisfacci´on: Es algo subjetivo; el usuario considera que interacciona con el sistema de una forma agradable y satisfactoria.

Dise˜node las posibles soluciones

El dise˜no es una actividad compleja, que podemos dividir conceptualmen- te en tres subfases:

Dise˜node las actividades

Es la actividad que se encarga de dise˜nar las actividades b´asicas de nues- tro sistema, desde un punto de vista m´as cercano al software. En esta fase visualizamos c´omo podr´ıa resolver nuestras necesidades la herramienta que estamos construyendo. Una t´ecnica recurrente en esta fase es el uso de me- t´aforas de dise˜no, una forma de relacionar la estructura y funcionalidad de nuestra aplicaci´on con las de un sistema conocido.

Por ejemplo, si estamos dise˜nando un reproductor de m´usica sin idea de qu´e 3.1. CONSIDERACIONES SOBRE USABILIDAD 31 aspecto va a tener la interfaz, podemos utilizar como met´afora un reproduc- tor de CD f´ısico. As´ı, podemos decir cosas como ”para empezar a reproducir la canci´on hacemos como en el reproductor de CD, le damos al bot´on con un tri´angulo”, o ”para cambiar de disco tenemos un bot´on que es como el “ex- pulsar” de nuestro reproductor. Las analog´ıas pueden ser visuales (nuestro programa reproductor de CD’s tendr´ael aspecto de un iPod), funcionales (el funcionamiento de nuestra tienda on-line ser´acomo el de los supermercados: metemos art´ıculos en nuestro carrito virtual, y cuando hayamos terminado, pagamos) o estructurales (nuestro sitio web estar´aorganizado en forma de ´arbol). Gracias a las met´aforas, el usuario no se tiene que enfrentar desde cero a nuestra aplicaci´on, sino que utiliza su conocimiento sobre supermer- cados, reproductores de CD o estructuras de datos arb´oreas para orientarse por nuestra aplicaci´on.

Las met´aforas son algo fundamental de cara a la usabilidad; puede que nos pa- rezca normal que un programa reproductor de m´usica simule un reproductor de CD’s real, pero hay muchas formas diferentes de dise˜narlo, posiblemente no tan intuitivas para el usuario en cuanto al uso.

Dise˜node la informaci´on

. En esta subfase, el objetivo es dise˜nar de qu´eforma se va a represen- tar en la interfaz de usuario la informaci´on que maneja nuestra herramienta. ¿C´omo hacer que el usuario perciba que las funciones X e Y est´an relacio- nadas? ¿C´omo es mejor mostrar cierta funcionalidad, con un bot´on, en un men´u, etc.? Todo esto tiene bases s´olidas en la teor´ıa psicol´ogica conocida como Gestaltpsychologie.

Por ejemplo si tenemos 9 botones y los agrupamos en grupos de 3 (rodeando cada grupo por cajas o simplemente poniendo los botones de un grupo cerca los unos de los otros), el usuario se dar´acuenta inmediatamente de que las funciones est´an relacionadas. Si ponemos un checkbox justo al lado de una 32 CAP´ITULO 3. CONSIDERACIONES TECNICAS´

Figura 3.1: Captura del buscador Google, donde se aprecia el uso de la Ley de la Cercan´ıa etiqueta, el usuario percibir´aque est´an ´ıntimamente relacionados. Esto est´a de acuerdo con la intuici´on de los usuarios; si alguien ve en una p´agina web la descripci´on del art´ıculo, y justo al lado un bot´on“Comprar”, no hace falta de- cirle al usuario que los botones ”Comprar” se refieren al art´ıculo m´as cercano. La Gestaltpsychologie trata de capturar y formalizar los principios que rigen la percepci´on y la intuici´on, y tienen importantes implicaciones en el dise- ˜no de interfaces (entre otras cosas), aunque sean aplicados inconscientemente.

Aunque no es este el lugar adecuado para hablar con demasiada profun- didad de la Gestaltpsychologie, s´ıque hablaremos de los resultados pr´acticos de ´esta, en forma de leyes, en tanto en cuanto tienen implicaciones para el dise˜no de interfaces.

La Ley de la Cercan´ıa consiste en que los objetos que est´an cercanos unos a otros son percibidos como relacionados entre s´ı. Podemos ver en la figura 3.1 como los servicios que ofrece Google (b´usqueda de im´agenes, mapas, noticias, etc.) se sit´uan muy cerca unos de otros, de forma que el usuario los percibe como un todo (conjunto de servicios ofrecidos). Otra ley es la conocida como Ley de la Semejanza: los objetos que muestran parecido entre s´ı, o que tienen caracter´ısticas en com´un, se perciben como l´ogicamente relacionados. En la p´agina de noticias de la BBC (figura 3.2) podemos ver un ejemplo de c´omo se utiliza este principio. Se ve que se clasifican los titulares seg´un su importan- cia dot´andolos, de una tipograf´ıa diferente en cada caso; los titulares con el mismo tama˜no de letra son percibidos como de similar relevancia, y los que tienen mayor tama˜no se agrupan como el conjunto de titulares principales.

Por su parte, la Ley de la Clausura afirma que los objetos que est´an ence- 3.1. CONSIDERACIONES SOBRE USABILIDAD 33

Figura 3.2: Captura del portal de noticias BBC, para ilustrar la Ley de la Semejanza rrados por un delimitador se perciben como relacionados entre s´ı. En la Wi- kipedia encontramos un ejemplo de uso de este principio (figura 3.3); vemos como los v´ınculos de navegaci´on se encierran en un cuadrado delimitado por una l´ınea continua, al igual que los de interacci´on. As´ıse consiguen crear ca- tegor´ıas l´ogicas. Por ´ultimo, mencionamos la Ley de la Figura y el Fondo, la cual afirma que se tiende a percibir un elemento como la “figura principal”, y el resto como el ”fondo”. Por ejemplo, podemos ver el dise˜no de Amazon.com (figura 3.4).

En cualquier dise˜no de interfaz podemos encontrar ejemplos de estos princi- pios combinados entre s´ıpara lograr el objetivo de estructurar la informaci´on. Otro ejemplo, en la figura 3.5, donde podemos observar c´omo las diferentes secciones l´ogicas (Summary, Licensing) se encierran en cuadrados, y adem´as tienen un dise˜no parecido (misma tipograf´ıa en el t´ıtulo, separador gris deba- jo de este, contenido encerrado en un cuadrado. En el cuadrado de Licensing, vemos como los v´ınculos a otros idiomas tienen la misma tipograf´ıa todos ellos (letra peque˜na, azul y subrayada), y adem´as est´an muy cerca unos de otros, de forma que el usuario descubre de un vistazo que todos los v´ınculos 34 CAP´ITULO 3. CONSIDERACIONES TECNICAS´

Figura 3.3: Panel principal de la Wikipedia, claro ejemplo de la Ley de Clau- sura

Figura 3.4: P´agina principal de Amazon.com, para ilustrar la Ley de la Figura y el Fondo 3.1. CONSIDERACIONES SOBRE USABILIDAD 35

Figura 3.5: Parte inferior de una p´agina de la Wikipedia, donde se observa el uso combinado de varias leyes tienen una funci´on parecida.

Dise˜node la interacci´on

. En esta subfase se decide c´omo acceder a la informaci´on, c´omo manipu- larla, c´omo conseguir que los usuarios sepan f´acilmente qu´etienen que hacer, y que lo hagan en el momento correcto. Esto es algo complejo; el usuario debe saber lo que quiere conseguir, cu´al es su objetivo. Despu´esdebe encontrar en nuestra interfaz herramientas que le hagan posible conseguir su objetivo, y debe ser capaz de utilizar estas herramientas sin complicaciones. La interac- ci´on se debe dise˜nar de forma que sea automatizable; un ejemplo de esto es las funciones cortar, copiar, pegar de los editores de texto, que suelen tener aso- ciado siempre la misma combinaci´on de teclas. Cuando una aplicaci´on tiene una combinaci´on de teclas diferente2, esto supone una carga extra de apren- dizaje para el usuario. A la vez, hay que tener cuidado de que las acciones que tiene automatizado el usuario, y que hace sin pensar (como pulsar OK en los di´alogos) no sean peligrosas (por ejemplo, si se va a borrar un archivo importante como consecuencia de una acci´on del usuario, quiz´as un simple

2El caso de Emacs es notorio en este sentido 36 CAP´ITULO 3. CONSIDERACIONES TECNICAS´ di´alogo “Aceptar”/”Cancelar” no sea suficiente). Tambi´enhay est´andares ISO para el dise˜no de di´alogos en sistemas interactivos (ISO 9241-10), y para la representaci´on de informaci´on (ISO 9241-12). El ISO 9241-10 contiene estos 7 principios fundamentales para el dise˜no de la interacci´on con el usuario:

Adecuaci´on a la tarea a realizar

Capacidad de autodescripci´on

Conformidad a lo esperado

Tolerancia a errores

Capacidad de ser controlado

Capacidad de ser individualizable

Fomento del aprendizaje

Implementaci´on de las soluciones y testeo de las soluciones

Una vez construida la soluci´on, es preciso testearla en cuanto a usabilidad. Para esto se realizan los llamados tests de usabilidad. Existen muchas aproximaciones posibles; la que nosotros vamos a usar en nuestro trabajo es la llamada evaluaci´on heur´ıstica, es decir, se comprueba si la interfaz di- se˜nada cumple unas ciertas condiciones de usabilidad. Un conocido conjunto de heur´ısticas es el propuesto por Molich y Nielsen Improving a human- computer Dialogue[MN90]. Este trabajo describe diez principios generales para el dise˜no de interfaces, concretamente los siguientes:

Visibilidad del estado del sistema. El sistema deber´ıa mantener infor- mado al usuario de lo que est´apasando. 3.1. CONSIDERACIONES SOBRE USABILIDAD 37

Correspondencia entre el sistema y el mundo real. El sistema debe hablar el lenguaje del usuario, con frases y conceptos que le sean fami- liares.

Control y libertad del usuario. A veces, los usuarios seleccionan una funcionalidad del programa por error (por ejemplo, d´andole al bot´on del al lado del que quer´ıan), y necesitan una “salida de emergencia”. Esto normalmente se consigue incluyendo una funcionalidad tipo ”Des- hacer/Rehacer”.

Consistencia y est´andares. El usuario no deber´ıa preguntarse si dife- rentes palabras, situaciones o acciones de la interfaz se refieren a lo mismo. Es bueno seguir las convenciones de la plataforma para la que se desarrolla.

Prevenci´on de los errores. Eliminar situaciones propensas a error; cuan- do el usuario vaya a hacer algo potencialmente peligroso (como borrar un fichero), el sistema deber´ıa asegurarse de que el usuario quiere hacer eso realmente.

Reconocimiento mejor que memoria. Minimizar la carga de memoria del usuario haciendo visibles los objetos, las acciones y las opciones del sistema. Para realizar una tarea, el usuario no deber´ıa tener que recordar informaci´on del panel anterior, sino que debe tener toda la informaci´on que necesita a la vista, o al menos en un lugar al que sea r´apido y f´acil acceder.

Flexibilidad y eficiencia de uso. Permitir que el usuario pueda realizar su tarea de varias formas diferentes, para que pueda elegir la que prefiera. Por ejemplo, los usuarios experimentados posiblemente trabajar´an m´as r´apido con cortocircuitos de teclado que con clicks de rat´on; es m´as r´apido y eficiente pulsar Ctrol-C y Ctrol-V que tener que ir al men´uy elegir las opciones. 38 CAP´ITULO 3. CONSIDERACIONES TECNICAS´

Dise˜no minimalista y est´etico. Los di´alogos del sistema no deber´ıan contener informaci´on irrelevante.

Ayudar al usuario a reconocer, diagnosticar y recuperarse de los erro- res. Los mensajes de error deber´ıan estar en un lenguaje familiar al usuario (por ejemplo, es mejor “Atenci´on: no se pudo escribir en el do- cumento porque se necesitan permisos de root” que ”Error 0A417 en el m´odulo docs.Perxx01”). Tambi´enes buena idea que los mensajes de error sugieran soluciones posibles.

Ayuda y documentaci´on. Lo ideal es que la interfaz sea lo m´as autoex- plicativa posible. Sin embargo, puede ser necesario incluir ayuda extra en la interfaz, en un men´uAyuda, por ejemplo. Esta ayuda tiene que ser f´acil de navegar, centrada en las necesidades del usuario, diciendo exactamente los pasos que tiene que seguir el usuario, y no ser dema- siado extensa, ya que eso har´ıa que muchos usuarios ni se plantearan mirarse la ayuda.

Puede parecer desproporcionado justificar el dise˜no de un men´utan simple de una forma tan detallada, recurriendo incluso a escuelas psicol´ogicas, librer´ıas de patrones de dise˜no, o heur´ısticas de dise˜no, cuando cualquiera llegar´ıa a un dise˜no parecido del men´usin haber o´ıdo hablar de estos conceptos. Pero es que cuando se dise˜na una interfaz, nadie empieza desde cero, sino que se gu´ıa en gran parte por su experiencia e intuici´on. Y la experiencia y la intuici´on es son algo formalizable en gran medida: los patrones de dise˜no de interfaces recogen decisiones de dise˜no que, seg´un ha demostrado la experiencia, son positivas para la usabilidad, y la Gestaltpsychologie estudia los mecanismos por los que la mente humana lee informaci´on “entre l´ıneas” cuando contempla una interfaz (qu´eelementos est´an relacionados entre s´ı, etc.). 3.2. DESARROLLO PARA LA SUITE MOZILLA 39

3.2. Desarrollo para la suite Mozilla

3.2.1. Arquitectura de la suite Mozilla. XPCOM

”La catedral y el bazar” [Ray01] es un ensayo publicado por Eric S. Ray- mond en 1997, en el que habla de su experiencia en la direcci´on de proyectos de software libre. En este ensayo se ponen en contraste dos modelos diferentes de desarrollo de software libre:

Por un lado, est´ael modelo de la “catedral”. En este modelo, el c´odigo fuente est´adisponible para cada lanzamiento (release) del producto, pero el c´odigo que se produce entre lanzamientos no se hace disponible.

Por otro lado, est´ael modelo del“bazar”, en el que el c´odigo se desarrolla en Internet, a la vista del p´ublico, por lo que siempre est´adisponible.

La tesis principal del art´ıculo afirma que “con el n´umero suficiente de ojos, todos los bugs son superficiales”, es decir, mientras m´as disponible est´eel c´odigo fuente para testeo, y experimentaci´on, m´as temprano se descubrir´an bugs. Es decir, aboga por el modelo del ”bazar”, ya que en el modelo de la ”catedral”, como el c´odigo fuente s´olo est´adisponible para unos pocos, se desperdicia m´as energ´ıa buscando y solucionando bugs. Pues esta es precisa- mente la filosof´ıa del proyecto Mozilla: el c´odigo de las aplicaciones de esta suite est´asiempre disponible y a la vista de todo el mundo, siendo la Funda- ci´on Mozilla la encargada de integrar el c´odigo.

Uno de los objetivos de la suite es la unidad de interfaz, es decir, intere- sa m´as los conceptos que la implementaci´on de los mismos. Para entender esto, fij´emonos en el correo electr´onico y las listas de noticias. Aunque se trata de dos cosas distintas, el usuario los percibe como algo similar, y de he- cho en Mozilla Thunderbird se tratan de la misma forma de cara al usuario. Es lo mismo que sucede con las descargas: el usuario percibe lo mismo (un archivo descarg´andose), ya se realice la descarga por FTP o por HTTP. Las aplicaciones Mozilla buscan abstraer lo que tienen en com´un las operaciones, 40 CAP´ITULO 3. CONSIDERACIONES TECNICAS´ y dejar los detalles de implementaci´on que las diferencian en segundo plano. As´ıpues, se busca una reutilizaci´on de las interfaces, y reaprovechar cada interfaz (por ejemplo, descargar un fichero) implementando varios protocolos concretos que la realicen (HTTP, FTP, etc.).

La mayor parte del c´odigo fuente de Mozilla utiliza C++ (compilado) y JavaScript (interpretado). Al iniciar cualquier aplicaci´on Mozilla, se inicia- lizan primero los componentes escritos en C++, pero despu´esse inicializa una tecnolog´ıa llamada XPConnect que permite que JavaScript sea capaz de comunicarse y utilizar los componentes en C++ en tiempo de ejecuci´on. Por supuesto, el c´odigo JavaScript de las p´aginas Web, por ejemplo, no es capaz de comunicarse con los elementos internos de Mozilla, ya que ello supondr´ıa un riesgo a la seguridad notable. En general, la parte del c´odigo escrita en JavaScript es la responsable de los eventos de la interfaz de usuario.

El c´odigo fuente de Mozilla est´aorganizado en varios componentes, para modularizarlo. Esto significa que s´olo se puede acceder a los datos internos de estos a trav´esde las interfaces p´ublicas. Estamos en un entorno de desa- rrollo centrado en componentes. Aqu´ı, la piezas claves son, como el nombre indica, los componentes, que tienen mucho en com´un con el concepto de clases en la programaci´on orientada a objetos, s´olo que los componentes son m´as independientes entre s´ı, ya que s´olo pueden comunicarse entre s´ıpor medio de sus interfaces; un componente puede implementar varias interfaces.

XPCOM

La plataforma que usa Mozilla para desarrollo basado en componentes, al estilo de CORBA, se llama XPCOM; este es la implementaci´on de Mozilla de COM (Components Object Model). El desarrollo basado en componen- tes busca descomponer los sistemas software en componentes l´ogicos con interfaces bien definidas, que posibilitan la interacci´on entre ellos. Esto re- presenta una visi´on m´as abstracta que la del desarrollo orientado a objetos. 3.2. DESARROLLO PARA LA SUITE MOZILLA 41

Un componente deber´ıa ser totalmente reutilizable de forma independiente del contexto. Se trata de ver el concepto de componente de forma an´aloga a las piezas mec´anicas; al igual que el mismo martillo se deber´ıa poder usar para clavar un clavo como para romper una hucha, un componente se deber´ıa poder usar en contextos muy diferentes entre s´ıe imprevisibles. Por ejemplo, un componente manejador de ficheros, con funciones para crear fichero, a˜na- dir car´acter al mismo, etc, podr´ıa ser usado para escribir los logs de eventos de un programa cualquiera o para construir un editor de texto y guardar los archivos; no se puede prever con antelaci´on. Por otra parte, los componentes software deben ser combinables entre s´ı. Al igual que se puede hacer una bicicleta uniendo ruedas, barras de metal, etc, se deber´ıa poder combinar componentes para hacer componentes nuevos.

XPCOM es una plataforma que permite la implementaci´on de componen- tes para que puedan ser usados desde las aplicaciones Mozilla (y tambi´en independientemente). XPCOM est´adisponible para m´ultiples plataformas, como Windows, GNU/Linux o MacOS. Mozilla incluye una gran cantidad de componentes, por ejemplo, para manipular ficheros o conectarnos a un ser- vidor remoto. Podemos acceder a estos componentes desde la extensi´on que estamos haciendo para Thunderbird, desde el c´odigo JavaScript (siempre que las interfaces que usemos para acceder a los componentes est´edefinida como scriptable).

3.2.2. XUL

XUL es un lenguaje basado en XML desarrollado por Mozilla para defi- nici´on de interfaces, que permite la construcci´on de aplicaciones altamente personalizables y multiplataforma [Boj07]. Es similar a DHTML, pero diri- gido a aplicaciones, no a p´aginas web. XUL est´abasado en varios est´andares del W3C 3, como XML, HTML, CSS, DOM, o JavaScript. Adem´as, XUL

3World Wide Web Consortium, la principal organizaci´oninternacional que produce est´andares para la World Wide Web 42 CAP´ITULO 3. CONSIDERACIONES TECNICAS´ facilita la separaci´on de la l´ogica de aplicaci´on (XUL y JavaScript), la pre- sentaci´on (CSS e im´agenes) y el idioma (contenido en las cadenas de texto de los “locales”, los archivos de localizaci´on).

La motivaci´on de usar este lenguaje para definir interfaces de usuario estriba en que Mozilla es multiplataforma y multiaplicaci´on: se necesita un lenguaje que sea independiente de la plataforma y de la aplicaci´on. El lenguaje XUL cumple con estos requisitos, al representar la interfaz de usuario de forma l´ogica, al estilo de HTML. Otra ventaja que tiene este lenguaje es que se tiene mucho control sobre la apariencia de las interfaces, al permitirnos el uso de hojas de estilo CSS.

Aqu´ıpodemos ver un esqueleto de fichero XUL:

La primera l´ınea es est´andar en todos los documentos XUL, y describe la versi´on de XML usada. La segunda l´ınea describe la hoja de estilos, es decir, el documento que configura la apariencia gr´afica de la aplicaci´on. Despu´es aparece el tag window, que es comparable a body en los documentos HTML. Dentro de window se ponen todos los elementos que configuren la interfaz. window tiene los siguientes atributos (entre otros): id, el identificador ´unico de la ventana. 3.2. DESARROLLO PARA LA SUITE MOZILLA 43

title, el texto que aparecer´aen la barra de t´ıtulos de la ventana

orient, describe la orientaci´on de los elementos en la ventana, es decir, si se a˜nadir´an de izquierda a derecha o de arriba a abajo.

xmlns, describe el namespace para los elementos de XUL. Aunque apa- rece una URL, no se descarga nada de ella, sino que Mozilla la reconoce internamente.

Dentro de la window se pueden incluir elementos diversos, como botones, eti- quetas, men´us, etc.

A los elementos se le pueden asociar eventos, que disparan acciones. Por ejemplo, la siguiente l´ınea: