martes, mayo 30, 2006
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.
- 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.
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.
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:
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:
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]:
- Programación Lógica (y en inglés).
- Declarative programming.
- Lógica matemática. (y en inglés).
Tipos de programación Lógica:
- Calculo lambda (y en inglés). Vamos... en lo que se basa LISP.
- Lógica de primer orden o de predicados (y en inglés). Aunque mejor ésta. Este último link es de lectura obligada para refrescar conocimientos antes de meternos con Drools.
- Lógica proposicional (y en inglés). Aunque una introducción mas sencilla es ésta.
- Higher-order logic.
- .../...
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."
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."
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.
Comentan también en barrapunto sobre TorPark: un cliente web, para navegar anonimamente.
miércoles, mayo 10, 2006
martes, mayo 09, 2006
lunes, mayo 08, 2006
miércoles, mayo 03, 2006
Suscribirse a:
Comentarios (Atom)