jueves, 29 de abril de 2010

¡ Bienvenido Ubuntu Lucid Lynx !

Hoy se espera el lanzamiento oficial de Ubuntu 10.04 (Lucid Lynx) . Vendrá con 3 años de soporte para estaciones de trabajo y cinco para servidores. A continuación les muestro el calendario de las distribuciones y la armonización con Debian squeeze que se ha considerado.

Calendario de las distribuciones

Armonización con Debian squeeze

Ubuntu Debian RHEL SLES
Kernel 2.6.32 + drm-33 2.6.32 + drm-33 2.6.32 2.6.32
GCC 4.4 4.4
Python 2.6 2.6
OpenOffice.org 3.2 3.2
Perl 5.10.1 5.10.1
Boost 1.40 1.40
X Server 1.7 1.7
Mesa 7.7 7.7
Mono (thanks Jo Shields) 2.4-snapshot 2.4-snapshot

miércoles, 21 de abril de 2010

Kohsuke Kawagushi se despide de Sun (Oracle). ¿También Hudson?

Kohsuke Kawagushi a la izquierda

En entradas anteriores ya les había comentado acerca de la fusión entre Oracle y Sun, y comentaba acerca de las implicaciones de la alianza. Brevemente quería hacerles saber que a principio de este mes de abril Kohsuke Kawagushi 1 ha decidido pasar página a sus años como empleado de Sun. Según el anuncio oficial en el blog de Hudson, en lo sucesivo sus esfuerzos estarán dirigidos a organizar una compañía que promueva el desarrollo del producto que le ha hecho mundialmente reconocido: el servidor de integración continua Hudson.

La calidad de este software está avalada por su vasta comunidad de usuarios y los galardones que le han sido otorgados. Entre ellos podemos mencionar el 2008 Duke's Choice Award. Hudson tiene un lado comercial conocido como Sun Continuous Integration Server. Realmente no se menciona nada sobre la posibilidad de ser asumido por Oracle. Solo se conoce que

We are revisiting the support offering as we transition into Oracle. Please check back later for updates.

Sin embargo espero que, en el global, todo esto beneficie al producto y mantenga viva su comunidad de usuarios. Para más detalles le invito a seguir el blog de Hudson. Próximamente (cuando aprenda dos o tres cosas ;o) espero poder comentarles un poco más acerca de este excelente producto. Simelo pide, no faltará un consejo útil para que Usted comience a experimentar los beneficios de la integración continua. No pierda las oportunidad de estar actualizado.

jueves, 15 de abril de 2010

Soporte para AMF (RPC) en Trac

Parche de la API multi-protocols para Trac

Otro día histórico. Después que Odd Simon Simonsen me invitara a participar en el desarrollo del muy útil y exitoso plugin TracXmlRpc y añadir soporte para Hessian, le ha tocado el turno a Action Message Format. Este es un protocolo binario diseñado por Macromedia, actualmente absorbido por Adobe Systems. Su objetivo es proporcionar un medio ligero y eficiente para codificar, decodificar y transportar datos entre Flash Player y el Flash Remoting gateway. En otras palabras se puede utilizar Flash Remoting MX con ActionScript para hacer aplicaciones interactivas, en este caso utilizando datos de proyectos administrados por Trac. El nuevo componente que ha sido construido permite tener más elementos de juicio para evaluar la API que se desarrolla actualmente, y que permitirá ejecutar los métodos disponibles a través de múltiples protocolos. Hace solo unos minutos efectué la primera llamada exitosa utilizando AMF desde Python . Los detalles ...

... no quiero adelantar mucho todavía porque la implementación no está estable y muy probablemente se le hagan cambios incompatibles al prototipo de la API que existe hoy. Pero bueno, todo comenzó con un parche ofrecido por thijs para incorporarlo en el plugin plugin TracXmlRpc. En ese momento solo existían implementaciones para dos protocolos muy populares: XML-RPC, JSON-RPC. Hay soporte para el primero en la librería estándar (i.e. xmlrpclib.ServerProxy), mientras que el segundo es accesible si se utilizan otras librerías (e.g. wsgi-jsonrpc). En el caso específico de AMF, el autor del parche ofreció un ejemplo basado en PyAMF que luego modifiqué un poco hasta obtener lo siguiente :

#!/usr/bin/env python

"""
AMF client for the Trac RPC plugin.
"""

import base64
from optparse import OptionParser
from socket import error
import sys

from pyamf.remoting import RemotingError
from pyamf.remoting.client import RemotingService

p = OptionParser()

p.add_option("-U", dest="username",
                  help="Trac USER", metavar="USER")
p.add_option("-P", dest="password", metavar="PASSWORD",
                  help="use PASSWORD to authenticate USER")
p.add_option("-e", dest="env", metavar="URL",
                  help="base URL of target environment")

(opts, args) = p.parse_args()

username = opts.username
password = opts.password
try :
  url = opts.env + '/rpc'
except :
  sys.exit("Missing Trac environment. Use -e option.")

service_name = 'system'

gw = RemotingService(url)
if (username, password) != (None, None):
  auth = base64.encodestring('%s:%s' % (username, password))[:-1]
  gw.addHTTPHeader("Authorization", "Basic %s" % auth)

service = gw.getService(service_name)

try:
    print service.getAPIVersion()
except RemotingError, e:
    print e
except error, e:
    print e[1]

Como se puede ver, si la base del servidor se encuentra, por ejemplo, en http://localhost/trac entonces el protocolo está disponible en http://localhost/trac/rpc. Realmente esta URL debe servir para todos los protocolos disponibles que ya mencioné anteriormente y los que vendrán. El tipo de protocolo se determina considerando el encabezado Content-Type de la petición HTTP, que en este caso es application/x-amf. Esta es la idea fundamental que utilizó Odd para diseñar la API.

El script anterior muestra el número de la versión del protocolo. Para probar, ejecutamos el módulo de la siguiente forma

$ python ./amf-client.py -U username -P mypassword -e http://localhost/trac
[1, 1, 0]

¡Y ya está! . A continuación les muestro otro ejemplo más simplificado utilizando solamente el intérprete de Python.

>>> import base64
>>> from pyamf.remoting import RemotingError
>>> from pyamf.remoting.client import RemotingService
>>> username, password = 'olemis', 'mypassword'
>>> url = 'http://localhost/trac/rpc'
>>> gw = RemotingService(url)
>>> auth = base64.encodestring('%s:%s' % (username, password))[:-1]
>>> gw.addHTTPHeader("Authorization", "Basic %s" % auth)
>>> service = gw.getService('system')
>>> print service.getAPIVersion()
[1, 1, 0]

¡Eso es todo! Todas estas implementaciones serán ofrecidas próximamente por el plugin TracRpcProtocols. Si quiere estar al tanto del desarrollo de esta nueva funcionalidad le invito a seguir los próximos artículos. El soporte de AMF para Trac es solo el segundo capítulo de la primera temporada (gracias osimons y thijs ;o) .

martes, 6 de abril de 2010

Demanda sobre patente impide distribuir Microsoft Word

Microsoft Office

El gigante Microsoft acaba de ver rechazada su petición a la corte de apelaciones de los Estados Unidos. Por segunda vez, la firma sigue siendo acusada de haber violado las patentes relacionadas con el procesamiento de ficheros XML en el producto Microsoft Office Word . El 22 de diciembre pasado el tribunal había dictaminado la indemnización por un monto de $ 290 millones USD que engrosarían las arcas de la sociedad canadiense i4i. Además se ordenó la prohibición de la venta de su producto Microsoft Word en territorio estadounidense. Recientemente la sociedad canadiense i4i explica en un comunicado que la instancia judicial ha rechazado la demanda del gigante de Redmond con el objetivo de que un panel de 11 jueces reconsidere el caso. 

Loudon Owen, presidente de i4i declaró que "El proceso fue largo y desgastante, pero esta decisión refuerza fuertemente el mensaje de que las pequeñas empresas y los titulares de las invenciones amparados por la propiedad intelectual pueden ser protegidos, y lo serán" . Como resultado Microsoft está obligado a retirar inmediatamente la función XML de Microsoft Word 2003 y 2007 . Sin embargo los recursos no están agotados. Todavía es posible continuar el proceso de apelación o solicitar al veredicto de la Corte Suprema para seguir revisando el caso.