miércoles, diciembre 31, 2008

Feliz 2009



Pues na, último post del 2008... Aunque sólo sea para desear una feliz noche y de paso dejar el link al último blog técnico de año descubierto: elcaparazon.

Va de web semantica.
Si no sabeis que es alguna de estas cosas: twine, FOAF, SIOC ISNINDI, Kiwi, SearchMonkey, Diigo, pues segro que os es de utilidad.

viernes, diciembre 19, 2008

Protégé OWL Tutorial

Como ya mencioné el tutorial A Practical Guide To Building OWL Ontologies Using The
Protègè-OWL Plugin and CO-ODE Tools
está realmente bien.
Sólo con leer esto, ya nos enteramos bastante de que va el cotarro. Pero como ya he indicado en post previos, para hacerte una idea de que se cuente es conveniente leer algo mas.

Tras introducirte el tema de las ontologías, y los tipos de OWL, pasa a crear una ontología sencilla sobre pizzas, usando claro está Protégé.
El texto se basa en una versión del programa más antigua, con lo que la descripción no es fiel a las versiones actuales, pero se sigue sin problemas. Yo he usado Protégé 3.4.

Sobre el interfaz de protégé...
Me ha gustado. Es bastante intuitivo.
Veremos que hay 5 tabs, de los que nos interesarán 4:
  • Metadata: Donde se gestionan los metadatos de la ontología, las importaciones, ...
  • OWLClassses: donde trabajamos con las clases.
  • Properties: donde se definen las propiedades
  • Individuals: donde se definen los individuos
En cuanto a los menus...
Son muy evidentes. En Reasoning, tendremos las opciones para chequear la consistencia de la ontología y para clasificarla. Mediante la segunda opción es como podemos generar una ontología inferida (se generan nuevas relaciones y nodos, mediante inferencia)

En cuanto a las preferencias...
Tenemos varias:
  • Edit -> Preferences...: General y Property Files (protege.properties y Protege.lax). En el último fichero podemos controlar la memoria usada por protégé. Estas son propiedades generales de Protegé.
  • Project -> Configure...: Específicas del proyecto.
  • OWL -> Preferences...: Ya específicas del OWL. Por ejemplo los tests a ejecutar se configuran aquí.
Para ayuda a la creación, protégé proporiona wizards. Los podemos encontrar en el menú Tools, tanto en Patterns, como en Quick OWL.
En el tutorial se usan (al menos):
  • Tools -> Patterns -> Value Partition...
  • Tolos -> Quick OWL -> Create multiple subclasses...
  • Tolos -> Quick OWL -> Create multiple properties...

Sobre los ficheros usados por protégé...
Si se usa el almacenamiento en fichero, la ontología se guardará en un fichero .owl. En dicho fichero estarán las uris de las ontologías que usen la que estamos definiendo. Si esos recursos no estan accesible, por ejemplo porque los tengamos en archivos locales en el sistema de archivos, Protégé es capaz de cargarlos. Para ello usa un fichero con la extensión .repository. El tercer archivo que usa es el .pprj, en el que se almacena toda la información ya específica del nuestro proyecto con Protégé.
Si importamos una ontología y esta a su vez depende de otra que no está accesible, bien porque no dispongamos de ella, no se pueda acceder online, o la ruta en el .repository esté mal, Protégé nos dará un error al cargarla.

Y tras este preámbulo vayamos a lo que nos cuenta el tutorial...

Como ya he indicado a lo largo del tutorial, mediante OWL-DL (DL viene de Lógica Descriptiva) se crea una jerarquia de clases, propiedades (funcionales, inversas, transitivas y simétricas). Una jerarquía de clases es una taxonomía.
Las propiedades tienen dominio y rango.
Las propiedades pueden ser tres tipos: Object, Annotation, Datatype.

Posterioremente se pasa a crear restricciones.
Una cosa importante sobre las clases, y es que por defecto no son 'disjoints'.
Y otra importante, es que OWL no usa UNA (Unique Name Assumption). Es decir que dos nombres diferentes pueden referirse al mismo individuo.
En DL las clases son conceptos y las propiedades roles (vamos... relaciones).

Tenemos los siguientes tipos de Property Restrictions:
  • Quantifier Restrictions (existencial quantifier y universal quantifier). Las restricciones mas comunes son las existenciales.
  • Cardinality Restrictions
  • hasValue Restrictions
Una restricción, de hecho, describe lo que es una 'anonymous class' (o 'unnamed class').
Las existenciales también se las conoce como 'some' o 'at least one'.
Las universales también se las conoce como 'only' o 'all'.

Lo siguiente que pasa es a probar el Razonamiento. Con Protégé 3.4 y escogiendo como razonador Pellet, no hace falta instalar nada adicional. Esto nos servirá para detectar inconsistencias en la ontología. Intenté usar DIG, pero no me funcionó (usando RacerPro).

Posteriormente se muestra la diferencia entre las condiciones 'necesarias' y las 'necesarias y suficientes', lo que da lugar a clases primitivas y definidas (El icono tiene tres lineas).Una clase primitiva sólo tiene condiciones necesarias.
Es posible tener mas de un bloque de condiciones 'necesarias y suficientes'.

Llegados a este punto es importante tener en cuenta dos cosas:
  • Podemos pensar que con crear una restricción universal vale, ¡¡¡pues no!!!. Si creamos una restricción universal normalmente deberemos crear la correspondiente existencial, ya que la universal no garantiza la existencia. Lo que indica es que si la relación existe para una determinada propiedad, lo será con los miembros de una determinada clase.
  • Y por otro lado, OWL trabaja con Open World Assumption (en contraposición con Close World Assumption).
Mediante razonamiento, se pueden crear nuevas relaciones de tipo superclass-subclass.

Posteriormente muestra como crear Closure Axioms, Value Partitions (es un 'patrón de diseño) y Covering Axioms.
Y va acabando con hasValue Restrictions, Enumerated Classes, Annotation Properties, namespaces, imports, tests, todo lists.

Al final tiene un par de apendices:
  • A: donde repasa todos los tipos de restricciones: quantifier (someValuesFrom, allValuesFrom), hasValue, cardinality, minCardinality, maxCardinality.
  • B: Intersection Classes, Union Classes.

Unos apuntes aleatorios:
  • todas las clases son descendientes de owl:Thing
  • como se ha indicando antes, por defecto las clases se superponen (overlap). Es decir, cuando creamos dos hermanas, no se asume que sus miembros pertenecen a una u a otra. Si es lo que queremos hay que indicarlo explicitamente.
  • Se puede introducir metadatos a varios elementos. Para ello se dispone de Dublin Core ontology.
  • Lo que en el tutorial llama 'Properties Matrix Wizards', en el menú actual es 'Create multiple properties...'.

python y webSemantica

Ahora que he tenido mas tiempo para mirar todos estos temas piensas ¿y con python que?
Pues bien, con python poco, la verdad.

Con respecto a rdf tenemos rdflib [wen]. Aparte de rdf/xml soporta N3, NTriples, Turtle, TriX yRDFa .
Otras librerias, que parece ya no se mantienen son sparta y tramp.
Como razonador (forward chaining), existe cwm. O pychinko (usa RETE).


Ya en cuanto a owl...
Desde luego el artículo a leer es este: Deep Integration of Python with Web Ontology Languaje.
Relacionado con el artículo está seth, pero no es puro python, tiene dependencias de java, ya que usa como razonador pellet. Para la integración usan JPype.

jueves, diciembre 18, 2008

miércoles, diciembre 17, 2008

Creando y distribuyendo paquetes en python

Hay un hilo interesante sobre este tema, distribuido entre varios blogs. Enlazo el último post de Ian, sobre el tema, ya que desde él podeis tirar del hilo: Using pip Requirements.

Me quedo con la idea de probar pip y virtualenv.
Un buen artículo sobre migración de java a python. Todavía no le leido los comentarios, pero parece que también merecen la pena.

martes, diciembre 16, 2008

A vueltas con el OWL

Como podeis ver por el post anterior ando enredando un poco con protégé.
Sobre OWL y ontologías tengo un post anterior.

El motivo de estar mirando esto, no es por estar ahora mismo involucrado en algo; es simplemente que en mi anterior proyecto, usabamos protégé como herramienta, y teníamos una base de datos de conocimiento en formato OWL.

Mas que una ontología, teníamos varias: una taxonomía genérica, una taxonomía léxica y gramátical, reglas para clasificar documentos, y alguna cosilla mas.

Este paper está muy bien, para ver de que va el tema este de las ontologías junto a protégé. Es un poco antiguo, con lo que el GUI ha cambiado, pero sigue siendo válido.
Para complementarlo no estaría mal hechar un vistazo a rdf-primer y a owl-overview.
Pero vamos... todo depende del nivel que querais profundizar...

La primera vez que ves un archivo OWL, piensas.... ¿pero este cristo que es? Tiene el problema del XML, que es muy verboso. Pero es que el OWL lo es brutalmente. El tema es que no está pensado para un lector humano, sino para ser interpretado por una máquina.
El ser tan verboso, puede tener como problema lo que nos pasó a nosotros, y es que la ontología que manejabamos ya no se podía cargar si la manteniamos en formato OWL. Tuvimos que pasar a usar una BD (en en el fondo para un entorno multiusuario es lo correcto). Y cuanto se requiera, pues exportar a OWL. Para las exportaciones, usabamos el API de Protégé (Java).
La ventaja es que es algo estándard.

Ojo! he visto que las versiones mas recientes de protegé se comportan mejor con ficheros grandes. Por ejemplo la 3.4 es capaz de cargar un fichero que la 3.1 no puede.

Paso de OWL a DRL

Una de las cosas que hicimos, fue pasar de OWL a DRL. Inicialmente trabajamos directamente con el OWL, y mediante un script en python generabamos un fichero DRL para Drools (o JBoss Rules). Osea... Java.
Posteriormente esto se hizo en Java, tirando del API.

Bueno... sobre esto quería comentar que parsear el OWL en python fue un poco jaleoso, ya que se hizo a pelo. Creo recordar que en su momento ni siquiera miramos si había algun parser específico para OWL y usamos uno genérico para XML.
Bueno esto empezó como muchas cosas... un trabajo rápido para ayudar a un compañero, y al final el marrón que lo quedas tu...

Bueno sobre esto y python, en un post futuro...

Poniendolo en contexto

Con los recursos que ya he enlazado, son suficientes para meterse en este tema, pero faltaría poner todo esto en contexto. Y el contexto no es mas que la Web Semántica, que es una de las 'ramas' de la Web 3.0.
Me he encontrado un par de artículos en eslomas.com, que os pueden servir muy bien, para poner todo esto en contexto:
Su autor, Francisco Echarte, ha estado investigando sobre folksonomías: [paper][memoria]

Como no podía ser de otro manera en hipertexto, también teneis una entrada.

domingo, diciembre 14, 2008

Code as Design

Vía RG llego a un artículo que es de muy interesante lectura: Code as Design: Three Essays by Jack W. Reeves. Bueno... realmente son 3 escritos que os podeis bajar en pdf.

Lo triste es que llegue esto a mis manos ahora.... Un ensayo de los noventa, que me llegue ahora tras mas de 10 años currando y una Ingeniería Superior. En fin...
Mejor tarde que nunca...

Yo al igual que RG y Reeves he visto la programación como parte fundamental del desarrollo de software (al contrario que mucha gente, que parece que lo que están deseando es dejarlo; considerando por ello que evolucionan profesionalmente). Por eso siempre me he considerado 'desarrollador' o Ingeniero del Software. Porque veo el desarrollo como un todo: desde el análisis a la codificación y las pruebas. Nunca me han gustado las etiquetas esas de 'analista', 'diseñador',... Por eso me ha gustado mucho el artículo. La idea está realmente bien expuesta.

Otro tema es que quieras dejar la programación porque te muevas mas hacia la gestión. Pero si estas en el lado técnico, no programar creo es un error.

jueves, diciembre 11, 2008

Protegé


Ya llovió desde que publiqué un post sobre Ontologías y OWL.
Pues bien, para manejar ontologías disponemos de Protégé, que es una herramienta open source.
La herramienta soporta dos modos de edición de ontologías:

  • The Protégé-Frames editor: que permite editar de acuerdo a el Open Knowledge Base Connectivity protocol (OKBC).
  • The Protégé-OWL editor: que permite editar ontologías para la web semantica. En concreto en formato OWL (W3C's Web Ontology Language ).
En mi proyecto anterior creamos una ontología en formato OWL.
El OWL realmente es XML, y la herramienta puede trabajar directamete con el fichero de texto o bien con el respaldo de una base de datos (pero *creo* que el diseño de la misma es muy pobre; de hecho en la versión 4 están cambiando esto y no está disponible).

Actualmente la versión 'release' es la 3.3.1, aunque hay dos versiones beta, la 3.4 y la 4.
La versión 4, soporta OWL 2.0, mientras que la versión 3 soporta OWL 1.0, RDF(S) y Frames.

La aplicación va sobre un GUI (Java), pero parece que hay un proyecto sobre web: WebProtege.
En principio todo se puede correr sobre la misma máquina, o no.


Instalación
En Windows, es trivial, pero si quereis instalarlo en Linux y no teneis escritorio te puedes encontrar un poco perdido, ya que no hay mucha información.
Si ejecutais el script de instalación con '-?' os da una pequeña ayuda, donde podeis ver que con '-i console' se puede instalar en modo consola.

Si procedeis a instalar en modo consola, no aparece ningún mensaje, pero se instala en el $HOME del usuario con que ejecuteis el script.

En el directorio donde se instala hay un fichero xml con información sobre la instalación.
En teoría se puede parametrizar la instalación pero de momento no he encontrado información al respecto.

EGroupWare


Minipost para reseñar esta aplicación [wikipedia].
Tienen una demo online.

Mi bro la está usando y me ha comentado que está realmente bien, y es forfree. ¿Que mas se puede pedir?
En la wikipedia está catalogada como una herramienta de Gestión de Proyectos, pero es mas que eso... es una solución mas integral.

wiki


Bueno... ya tengo un wiki corriendo.
Escogí MoinMoin. Los motivos principales por ser python y no usar BD.
El otro candidato finalista a probar que tenía en mente, era DokuWiki pero ya no lo voy a probar...
Escribiendo este post he visto que hay otra wiki realmente interesante TWiki.

En caso de querer usar BD supongo que hubiera tirado a MediaWiki.

Como podeis ver, los enlaces son todo de wikimatrix, y es que la página es la caña. Realmente es la referencia en el tema wiki. Te permite comparar cartacterísticas..., los lenguajes, ver estadísticas... Además en su foro hay mucha info.

Si alguna vez teneis que escojer una wiki, darle tiempo, no es un tema trivial. Merece la pena hacerlo bien, que luego hay que apechugar... En wikimatrix, vais a encontrar todo lo necesario para ayudaros.

Sobre el tema de los wikis en general comentar:
  • Es una pena que no haya un éstandar de codificación wiki. Te facilitaría el hecho de migrar de una a otra.
  • Si tienes muy claro que carácterísticas quieres se te facilita la elección.
  • En todo caso, en wikimatrix, hay un 'wizard' que te puede ayudar en la elección.
  • Una cosa a tener en cuenta, es usar las mas usadas. Por algo será.
  • El tema de los pluggings no es una cosa a despreciar... si usas una engine muy usada (como mediawiki) vas a disponer de un gran número de pluggings. Un ejemplo de MediaWiki: puedes pasar la página a pdf mediante un plugging.
  • Lo del WYSIWYG puede ser muy a tener en cuenta. Sobre todo si lo van a usar usuarios poco técnicos.

lxml marketing

Ha publicado un muy buen post Ian Bicking haciendo marketing sobre lxml.
Yo *realmente* no he usado, se lo sugerí a un compañero de proyecto, y le eché un cable con el tema... pero no le he dado un uso intensivo.
Pero tampoco se lo he dado a BeatifulSoup. He trasteado un poco, pero tampoco le he dado un uso serio.
Si tuviera que decidir me decantaría por lxml, porque lo que si que he usado es libxml2. A dia de hoy no me quedaría con libxml2, sino que me quedaría con lxml.

Por otro lado es interesante uno de los comentarios donde indican la imposibilidad de usar lxml en GAE. Por el contrario BeatibulSoup si se puede...

miércoles, diciembre 10, 2008

Sobre Dijkstra

A raiz de un post de RGalli, me he leido el artículo que linka (uno de los EWDs de Dijkstra, vamos un manuscrito): On the cruelty of really teaching computing science. [es][wiki].

Es de recomendada lectura a todo Ingeniero Informático, en estos tiempos que corren.
Ah! un regalo final, el link al archivo lo los EWDs.

viernes, diciembre 05, 2008

wiki vs CMS

Y aqui me ando montando un site para un grupo interno de mi empresa...
Tras hacer una página temporal a manubrio con html, tengo que escoger que soft usar para ir metiendo contenidos.
La duda es un wiki o un CMS....
La respuesta un wiki. Y además será MoinMoin. No porque esté hecho en python, sino porque no usa BD (de momento no quiero usarla), y he visto que realmente es potente.
En caso de haber tirado por un CMS, supongo que hubiera escogido Drupal.

El porque una wiki... sencillo. No necesito lo que hace que un framework de este tipo pase a ser considerado CMS (gestion mas potente de usuarios, mangement roles, workflow, tracear el contenido, ...). Aparte de lo que dice el artículo de la wikipedia, aquí podeis ver que es lo que hace a un CMS realmente serlo.

Otro soft que quiero usar es trac, que también incorpora wiki. Pero de momento no.

jueves, diciembre 04, 2008

Hoy me he encontrado un post interesante de python. Una buena recopilación de herramientas para acelerar python. Alguna no la conocía: Tools for Accelerating Python [Amund Tveit's Blog].

miércoles, diciembre 03, 2008

ntlmaps

Si habeis montado una maquina linux y teneis la desgracia que teneis que pasar con un proxy de microsoft con autentificación teneis la opción de usar NTLM Authorizaton Proxy Server.

Lo configuras, lo arrancas (es un script python) y a correr....
Claro, para poder correr tienes que usar como proxy http://localhost:5865 (una opción es meter el valor en la variable de entorno http_proxy).

Fedora 10 vs Ubuntu 8.10

Tenía que instalar un servidor linux. En principio tenía pensado meter Ubuntu, que es la distro que ultimamente he instalado en desktops. Pero a ultima hora me vino la duda....
Ummm, ¿y porque no Fedora?

Indagando esto es lo que he encontrado en la red:

+ I think their dev cycle is very similar, the installation manager and the community is better in Ubuntu, while Fedora is the distribution to use if you want to be serious about working at a professional level with Linux (meaning, RedHat
+ Fedora 10 vs ubuntu 8.10: "El resumen de la gran comparativa así como la conclusión es que en rendimiento las diferencias son ínfimas y la elección de una u otra distribución viene dada por las preferencias o las características extras de cada una según el gusto del usuario.
+ Next time, especially if your using Linux professionally, purchase hardware that has OEM support for Linux.
+ Ubuntu 8.10 has also gained Dynamic Kernel Module Support (DKMS), a new framework developed by Dell that will automatically rebuild kernel modules when new versions of the kernel are released. This improvement will hopefully prevent third-party drivers from breaking when kernel updates are pushed down to users.
+ Fedora is the leader in innovation, what you see in ubuntu has been implemented and developed in fedora six months ago.
+ Ubuntu is a great "just works" distro, whereas Fedora is much nicer for tweakers.

Resumiendo.... que me he decantado por una Ubuntu Server. La diferencia entre la Server y la WorkStation es que la Server no tiene X, ni programas de escritorio.
El sistema de paquetes de Ubuntu es mejor, y aunque las novedades no estan disponibles tan rápidamente, pues como que me da igual... prefiero la estabilidad.

La instalación es en modo texto, y te da opción de instalar paquetes típicos de servidor: samba, LAMP, ...

Nota final: Lo interesante de trabajar con Fedora es que lo que mas te vas a encontrar luego en entornos reales es Red Hat ES.
La fábula del pastor y el jefe de proyectos [de Rodrigo Corral].
Habrá que seguir este blog...

lunes, diciembre 01, 2008

Sobre Webkit

Ese post es un autoapunte sobre la 'rendering engine' Webkit [wikipedia].
En principio no podemos correla tal cual en linux, pero tenemos webkitgtk, y un par de futuribles ports: qtwebkit y wxWebkit. (osea sobre wxWidgets).

Así a bote pronto, me interesa el primero (que es el desarrollado), ya que disponemos de pywebkitgtk.

Para variar... comentar que hay poca documentación sobre webkit. Creo que lo mejor que debe de haber es la doc del port a Objective-C.

Y ya para acabar, un regalo; unos links sobre el tan recurrente tema de qt vs gtk: [1][2][3].
Resumiendo:
  • gtk: licencia lgpl, menos documentado, C (pero hay ports a C++ y a python)
  • qt: licencia dual, mas sencillo, mejor documentado, C++

Alrededor de Oracle

Pregunta el gerente al empleado -- ¿Y que tal de Oracle?
-- Siempre he estado alrededor de Oracle

¿¿¿¿¿ Mande????? Vaya respuesta ingeniosa. ¿Que debemos entender?
  • La persona en cuestión siempre ha estado currando en las Rozas
  • o por el contrario en los proyectos es que ha estado, se ha usado Oracle, pero el siempre ha escurrido el bulto, y se ha logrado zafar de implementar las queries
  • .../...