martes, mayo 30, 2006

Buscan sobre sobre motores de reglas en Java, me he encontrado esta página que no conocía: The Java Community Process. En ella están todas las Specification Request.

Mas sobre Web Services

(continuación del post anterior)

Bueno bueno..., ya nos vamos enterando mas de este mundillo hasta ahora desconocido para mi.
Ya me enterado un poco mas de que va este jaleo de los webservices. En pocas palabras....
Del cliente al servidor va a viajar un XML que se define en un WSD (esto son los datos). La funcionalidad del servicio estará definida en el DWSDL.

En la parte servidora:
  • Se obtendrá un objeto Java a través del binding XML -> Java.
  • Habrá un objeto Java que implemente el servicio.
En la parte cliente:
  • Se pasará un XML. Teniendo dos opciones:
    • Pasar el XML tal cual (mas engorroso, ya que hay que generarlo)
    • Pasar un objeto python => el binding Python -> XML se encarge de general el XML.
Tanto SOAPpy como ZSI que son los dos candidatos a usar en el cliente usan pyXML, que me da a mi que es la librería que se va a encargar de los bindings...

Sobre pyXML he encontrado un par de artículos de recomendada lectura: [1] y [2]

Sobre el Servicio:
  • Va a usar un motor de reglas. Para independizarns del motor, se usará el interfaz JSR94.
Y por si no me habia metido todavía con tecnología XML además voy a tener que usar XSLT. ¡Toma yá!.

lunes, mayo 29, 2006

Web Services desde Python

De nuevo aventurandonos en aguas fanganosas.... (aguas que no conozco).
Tengo que implementar en un cliente (Python) el interfaz con un Web Service (Java). Y también encargarme de parte del servicio en si (el core, que no del WebService).

Servidor
Para la parte servidora según el guru de turno (en este mundillo web, hay mucho gurú suelto y mucha sigla...) va a usar JAXWS.
Es posible que tenga que usar un parser de XML. Si al final es así usaré el que viene ya con java, JAXP.

Cliente
Y para la parte cliente, según he visto, hay dos opciones:
La verdad... todavía no se cual usaré, a ver que puedo ver por la web... Parece que ZSI es mas completa pero SOAPpy mas sencilla de usar.
Ambas usan wstools y pyXML . La verdad... he echado un vistazo al enlace, y parece que la librería está muy bien. Hay que instalarla, ya que no viene incluida con python.

Para empezar abriendo boca, tutoriales para ambos productos: ZSI y SOAPpy.
Dentro de wstools hay un script muy util, xsdl2py.py que genera definiciones python a partir de un wsdl.

¿Cual usar: ZSI o SOAPpy?
En principio me decantaba por usar SOAPpy, porque parecía mas sencillo, pero tras instalar ambos, parece que ZSI es un producto mas maduro. Además ZSI ha pasado el test básico de ejecutar un ejemplo tonto de la distribución, mientras que SOAPpy no.
Nota posterior: ¡vaya! la versión que me habia instalado de SOAPpy era muy antigua. Actualmente las versiones estables son la 1.7 y la 0.11.5 para ZSI y SOAPpy respectivamente. Aunque ya van por la 2.0 y la 0.12.

Ambos usan la lista Pywebsvcs-talk [el archivo].


Web Services
El servicio que vamos usará el protocolo SOAP (sobre HTTP).
Para definir el servicio se usa WSDL. Que se tendrá que validar contra un XSD (un 'XML Schema')
Y ya para acabar unas entradas de la wikipedia:

Para acabar, un tutorial de SOAP.

Notas finales:
  • Para C++ está AXIS.
  • Esto del web service es algo impuesto. Pero otras alternativas para hacer el servicio hubieran sido CORBA o XML RPC. Hay soporte para xml-rpc en python, y como orb que soporte python tenemos omniorb.
  • En 'IBM developer works' IBM tienen un area sobre Web Services. En contreto hay varios articulos sobre python y SOAP: 1, 2, 3, 4 y 5. Que van de:
    • Part 5: (2004) Nuevos desarrollos en SOAPpy.
    • Part 4: (2003) Nuevos desarrollos en ZSI
    • Part 3: (2002) Cambio de roles con ZSI y SOAPpy
    • Part 2: (2002) Con y sin WSDL (sobre ZSI)
    • Part 1: (2001) Introducción a varias librerías.

jueves, mayo 25, 2006

Y ya que estamos con Drools, pues vamos a refrescar unas cosillas de IA [los enlaces iniciales con de la wikipedia]:

Tipos de programación Lógica:
Vamos que mejor que la info de la wikipedia, ésta (al menos mas elemental).

La lógica de predicados es superior a la lógica preposicional por:
"La principal debilidad de la lógica proposicional es su limitada habilidad para expresar conocimiento. Existen varias sentencias complejas que pierden mucho de su significado cuando se las representa en lógica proposicional. Por esto se desarrolló una forma lógica más general, capaz de representar todos los detalles expresados en las sentencias, esta es la lógica de predicados."

martes, mayo 23, 2006

lunes, mayo 22, 2006

Drools


Bueno pues ahora me toca trastear con Drools. Lo primero que veo es que usan para hacer las 'build' tanto ant, como maven, y como repositorio CVS.

El motivo de usar este motor de reglas, es que se pueden escribir la reglas en python.
La versión que estoy probando es la 2.5. Es decir... la útima antes de la compra de drools por parte de JBoss, pasando a ser JBoss Rules (Drools 3.0).

¿Y porque usar la 2.5 en lugar de la 3.0? Pues muy sencillo, en la 3.0 se han calzado el módulo semantico para python. Al menos de momento...

Tras leer un poco, e instalarse la version con todas las dependencias (drools-2.5-final-bin-withdeps.zip) es interesante hacer una primera prueba para ver si tira. Para ello lo mejor es usar el ejemplo mas tonto del tutorial. ¡Ojo! Hay que modificar la línea de ejecución. La correcta es (sin los espaciados tras los ':'):

java -classpath drools-base-2.5-final.jar: drools-core-2.5-final.jar: drools-io-2.5-final.jar: drools-smf-2.5-final.jar: drools-examples-2.5-final.jar: drools-python-2.5-final.jar:jython-20020827-no-oro.jar: xml-apis-2.0.2.jar: xercesImpl-2.7.1.jar: commons-jci-SNAPSHOT20051110.jar: commons-logging-1.0.4.jar org.drools.examples.helloworld.HelloWorldExample helloworld.python.drl


Por lo visto los dos ejemplos que vienen precompilados son:
  • Hello World Example y
  • Fibonacci Example

En el caso de que queramos ejecutar el mismo ejemplo pero usando el modulo para python, el comando sería (sin los espaciados tras los ':'):

java -classpath drools-base-2.5-final.jar: drools-core-2.5-final.jar: drools-io-2.5-final.jar: drools-smf-2.5-final.jar: drools-examples-2.5-final.jar: drools-java-2.5-final.jar: antlr-2.7.5.jar:janino-2.3.15.jar: xml-apis-2.0.2.jar: xercesImpl-2.7.1.jar: commons-jci-SNAPSHOT20051110.jar: commons-logging-1.0.4.jar: jdtcore-3.1.0.jar org.drools.examples.helloworld.HelloWorldExample helloworld.java.drl

jueves, mayo 11, 2006

Una utilidad curiosa de google, google trends [barrapunto.com].

Comentan también en barrapunto sobre TorPark: un cliente web, para navegar anonimamente.

miércoles, mayo 10, 2006

Torvalds on the Microkernel Debate [slashdot.org]
Sobre Windows Live.
Un thread interesante en python-es sobre si python es un buen lenguaje para programación funcional.

martes, mayo 09, 2006

Validar un fichero xml


Será bastante corriente que en un sistema Unix tengamos alguna de estas utilidades:
  • xmllint: Pertenece a la libreria libxml2
  • xmlwf: Pertenece a la librería expat.

lunes, mayo 08, 2006

Ya de donde quiero trabajar.
Y una noticia relacionada.