miércoles, 17 de junio de 2009

XLS Office 2007 y anteriores con Java (SpreadsheetML incluído)

Apache POI es el framework de referencia y casi un estándar de facto para acceder a los formatos Microsoft usando un API Java Nativo. El subproyecto HSSF+XSSF de la versión 3.5 (aún en beta, pero totalmente funcional para el 90% de las operaciones) admite los nuevos formatos Open XML (como por ejemplo xlsx, introducidos en Office 2007). Y hasta aquí, aparentemente, todo solucionado. Si sólo pretendes importar/exportar datos, y no vas a usar funciones muy avanzadas, la Beta 5 de la versión 3.5 te va a funcionar perfectamente. No obstante, te puedes encontrar con alguna sorpresa desagradable en el lío de formatos de Office de MS. Concretamente la que se me ha dado a mí recientemente con un fichero Excel (xls) ha sido la siguiente:


Exception in thread "main" cestel.tk.uf.dao.file.DAOImportException: java.lang.IllegalArgumentException: Your InputStream was neither an OLE2 stream, nor an OOXML stream at cestel.tk.uf.dao.file.DAOHssf.loadAgenda(DAOHssf.java:79)
    ...

Obviamente se trataba de un fichero que se podía abrir en Excel normalmente, aunque me llamó la atención el hecho de que OpenOffice (al menos la 2.4) no era capaz de abrirlo como hoja de cálculo y en su lugar, presentaba el diálogo de importación. Abriendo el fichero con un editor de texto, me encuentro con que resulta que es un fichero XML con un contenido así:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <?mso-application progid="Excel.Sheet"?>
3 <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
   xmlns:o="urn:schemas-microsoft-com:office:office" 
   xmlns:x="urn:schemas-microsoft-com:office:excel" 
   xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
   xmlns:html="http://www.w3.org/TR/REC-html40">
...
 
¿Y qué demonios es esto? Pues eso es, concretamente, SpreadsheetML, uno de los formatos de Microsoft Office XML, creados con anterioridad al Office 2007 y ya obsoletos, siendo sustituídos por los formatos Office Open XML (también llamados OOXML u Open XML)... y el problema está en que estos formatos no están soportados por Apache POI.

Afortunadamente, para estos casos, existe Xelem, una librería que te permite leer y escribir ficheros SpreadsheetML, con los que pude resolver el problema de la importación de datos.

viernes, 5 de junio de 2009

Sideralis: un Stellarium en tu móvil

Este año 2009 se celebra el Año Internacional de la Astronomía (declaración de la UNESCO ratificada por la resolución de la ONU en 2007). El AIA 2009 es la excusa perfecta para publicar una entrada a propósito de uno de los temas que más me han fascinado: la astronomía. Quizá este post debería haber sido el primero de todos, ya que el nombre de este blog se debe a mi atracción por la astronomía. Balteus es nombre que se le daba al cinturón que llevaban los legionarios romanos, también llamado cingulum, y que portaba la espada. También se ha llamado así al famoso trío de estrellas Alnitak, Alnilam y Mintaka, de la constelación Orión, una de las más conocidas de nuestro cielo. Este trío conforma el cinturón que porta la espada de Orion, típicamente conocido como "el cinturón de Orion" y también conocido como Al-Nijad (el cinturón), Al-Nasak (la línea), Balteus (el cinturón), "Los tres reyes", "Las tres marías", etc, etc... Siempre me han atraído esas tres estrellas alineadas.

Cuando miramos al cielo a simple vista nos puede parecer que estamos viendo millones de estrellas... pero nada más lejos de la realidad: raras veces llegamos a ver más de 300 (magnitud 4).. ¡y eso en el campo y en circunstancias perfectas!. Lo máximo que podríamos llegar a ver, en el mejor de los casos (a 4.000 metros de altura, sin luna, con cielo despejado y con una vista envidiable) serían 1.500, como mucho. Con este panorama, y teniendo en cuenta contaminación lumínica, cielos poco despejados y nuestra limitada vista, en la mayoría de los casos normalmente sólo alcanzamos a ver entre 30 (magnitud 2) y 100 (magnitud 3). Además, todas son del vecindario: de la Vía Láctea. De 200.000 millones de estrellas repartidas en un radio de 100.000 años luz de nuestra propia galaxia, apenas alcanzamos a ver unas decenas de estrellas... Aquí, en la ciudad de Madrid, en buenas condiciones, apenas se perciben, a simple vista, menos de una docena (sin contar Venus, que se ve perfectamente, pero no es una estrella). Ya que vemos tan pocas estrellas, ¿no os gustaría saber cuáles son? ¿cómo se llaman? En mi caso, sin referencias, y siendo un simple curioso/seguidor "de documentales" (ni siquiera me puedo considerar un aficionado a la astronomía), es prácticamente imposible saber qué estoy viendo... hasta ahora.

Los curiosos de la astronomía conocerán casi seguro Stellarium (el sitio web en español es éste). Probablemente uno de los mejores mapas de cielo (o mapa estelar, o planetario, como queráis llamarlo) para ordenador. Si no lo conoces, bájatelo y pruébalo. Aunque sea sólo por curiosidad. Es espectacular. Está disponible para varios sistemas operativos (e incluso para Windows). Probarlo es muy sencillo y, comprobar que lo que estás mirando por la ventana es lo que te aparece en la pantalla, es cuestion de unos pocos minutos. Es una forma muy divertida y agradable de introducirse en el fantástico mundo de la observación del cielo.

Cuando Galileo apuntó por primera vez al cielo con un telescopio, 400 años atrás, no creo que se imaginara que llegaríamos a tener un planisferio luminoso en un aparato minúsculo que, además (mira tú qué cosas), sirve también para llamar por teléfono y decirte la hora. ¡Por fin un móvil sirve para algo interesante!.

Sideralis es un equivalente a Stellarium, pero en tu móvil. Funciona perfectamente en mi N82 y, en principio, en prácticamente cualquier móvil más o menos reciente que soporte MIDP 2.0. La aplicación es muy completa: vistas horizonal y cénit, e información de más planetas, estrellas (más de 800) y objetos Messier de los que podamos ver incluso aunque tengamos unos prismáticos a mano.

La ventaja del programa es evidente. Si estás por la noche en un lugar despejado (o en cualquier sitio que puedas observar al cielo) sin haberlo podido planificar, es difícil que lleves un planisferio, una PDA o un PC encima... ¿pero el móvil? casi seguro que lo tienes a mano para arrancar esta maravilla y empezar a ponerle nombre a lo que ves.

Está disponible en español y además es gratuito. Sólo le falta (puestos a pedir) que tome la localización automáticamente del GPS integrado de los móviles que lo tengan. Desde aquí, le doy las gracias al autor por brindarnos gratuitamente esta joya


Ah!... y está hecha en Java, claro.

P.D.: por cierto, hay un post muy bueno sobre planetarios para Linux aquí.


ACTUALIZACIÓN [16/06/09]: La versión 1.2.7 (etiquetada internamente como 1.02(7)) ya incluye tres formas de posicionamiento: manual (introduciendo longitud y latitud), seleccionando tu ciudad, o vía GPS.
Related Posts Plugin for WordPress, Blogger...
cookieassistant.com