Clientes SOAP en Python y PHP

En el post anterior vimos como crear servicios Web personalizados con el protocolo SOAP en Drupal. Por supuesto, un servicio Web en SOAP puede hacerse en multitud de lenguajes. Al igual que los clientes que lo consumen. En este caso vamos a ver ejemplos para consumir el servicio Web creado en el post anterior con clientes SOAP escritos en los lenguajes Python y PHP.

Cliente en Python
En primer lugar, instalamos easy_install:

  1. neonigma@neonigma-desktop:~$ sudo apt-get install python-setuptools python-dev build-essential

A continuación, instalamos suds:

  1. neonigma@neonigma-desktop:/opt/lampp/htdocs$ sudo easy_install suds
  2. install_dir /usr/local/lib/python2.6/dist-packages/
  3. Searching for suds
  4. Reading http://pypi.python.org/simple/suds/
  5. Reading https://fedorahosted.org/suds
  6. Best match: suds 0.4
  7. Downloading http://pypi.python.org/packages/2.6/s/suds/suds-0.4-py2.6.egg#md5=94a9414e90e01243262548ad9eaf2784
  8. Processing suds-0.4-py2.6.egg
  9. creating /usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg
  10. Extracting suds-0.4-py2.6.egg to /usr/local/lib/python2.6/dist-packages
  11. Adding suds 0.4 to easy-install.pth file
  12.  
  13. Installed /usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg
  14. Processing dependencies for suds
  15. Finished processing dependencies for suds

A continuación, con sólo este pequeño programa en Python usando la librería suds podemos utilizar la operación que definimos en el servicio Web del post anterior:

  1. from suds import WebFault
  2. from suds.client import Client
  3. import traceback as tb
  4. import logging
  5.  
  6. logging.basicConfig(level=logging.INFO)
  7. logging.getLogger('suds.client').setLevel(logging.DEBUG)
  8.  
  9. try:
  10.     client = Client('http://debian-virtual/drupal/?q=services/soap/?wsdl')
  11.     print client.service.add_numbers(10,3)
  12. except WebFault, f:
  13.     print f
  14.     print f.fault
  15. except Exception, e:
  16.     print e
  17.     tb.print_exc()

El resultado de la ejecución es el siguiente:

  1. root@debian:/var/www# python cliente.py
  2. DEBUG:suds.client:sending to (http://debian-virtual/drupal/services/soap/?wsdl/)
  3. message:
  4. <?xml version="1.0" encoding="UTF-8"?>
  5. <SOAP-ENV:Envelope xmlns:ns3="http://debian-virtual/drupal/services/soap/?wsdl/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns0="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  6.    <SOAP-ENV:Header/>
  7.    <ns1:Body>
  8.       <ns3:add_numbers>
  9.          <number_one xsi:type="ns2:int">10</number_one>
  10.          <number_two xsi:type="ns2:int">3</number_two>
  11.       </ns3:add_numbers>
  12.    </ns1:Body>
  13. </SOAP-ENV:Envelope>
  14. DEBUG:suds.client:headers = {'SOAPAction': u'"http://debian-virtual/drupal/services/soap/?wsdl/add_numbers"', 'Content-Type': 'text/xml; charset=utf-8'}
  15. DEBUG:suds.client:http succeeded:
  16. <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:soap_call_wrapperResponse xmlns:ns1="http://debian-virtual/drupal/services/soap/?wsdl/"><return xsi:type="xsd:int">13</return></ns1:soap_call_wrapperResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
  17. 13

Cliente en PHP
Para el cliente en PHP, necesitamos la librería nuSOAP. En este caso, la tenemos ya instalada del post anterior, por lo que apuntaremos a esa ruta. Escribimos este pequeño cliente en PHP:

  1. <?php
  2. ini_set('soap.wsdl_cache_enabled', '0');
  3. require_once('drupal/modules/soap_server/nusoap/lib/nusoap.php');
  4.  
  5. $wsdl = "http://localhost/drupal-testing/?q=services/soap/?wsdl";
  6. $soap = new soapclient($wsdl);
  7.  
  8. $result = $soap->add_numbers(10,3);
  9. print "El resultado es: " . $result;
  10. ?>

Apuntando a la URL de este ejemplo (http://localhost/cliente.php en este caso), veremos que nos imprime el resultado de la suma correctamente.

Sé el primero en valorar positivamente

Crea tu propio servicio Web con NuSOAP en Drupal

Una de las cosas que más me gustan del software libre es la liberación del conocimiento. Incluso (o sobre todo), cuando lo que has investigado, usado o desarrollado al final no te sirve. Me parece realmente mal que se deseche todo ese conocimiento, ya que se ha invertido el tiempo en ello, por qué no invertir 20 minutos más en estructurarlo y escribirlo. Otro podría necesitar ese conocimiento tan cercano. Aunque no esté 100% depurado y sea directamente utilizable, podría ser un gran punto de partida para otras personas, o incluso para uno mismo en momentos posteriores.

El presente artículo es uno de los que sí me han servido, pero ya empezaba a olvidar. Así que lo escribo. Y tengo en mente el siguiente, totalmente relacionado, que cumple una de las premisas del párrafo anterior: al principio no me sirvió para mucho y meses más tarde ha sido la llave para desbloquear el cierre de un proyecto.

Sin más preámbulos, veamos como crear tu propio servicio Web utilizando SOAP en Drupal. Esta forma da una idea de lo extendible que es un servicio Web dentro de este CMS y me sirve para recordar en cualquier momento cómo llevar a cabo este proceso de extensión.

En primer lugar, como siempre, instalamos drush:

  1. neonigma@neonigma-laptop:~$ sudo apt-get install drush

Descargamos el módulo services:

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules$ drush dl services -r modules
  2. Project services (6.x-2.3) downloaded to                             [success]
  3. /var/www/drupal-testing/modules/.

Lo habilitamos:

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules$ drush en services
  2. The following modules will be enabled: services
  3. Do you really want to continue? (y/n): y
  4. Services was enabled successfully.                                   [ok]

Descargamos el módulo soap_server:

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules$ drush dl soap_server -r modules/services
  2. Project soap_server (6.x-1.2-beta1) downloaded to                    [success]
  3. /var/www/drupal-testing/modules/.

Lo habilitamos:

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules$ drush en soap_server
  2. The following modules will be enabled: soap_server
  3. Do you really want to continue? (y/n): y
  4. SOAP Server was enabled successfully.                                [ok]

Para completar la instalación de SOAP Server, no basta con haber instalado el módulo. Debemos instalar la librería NuSOAP que es la que proporcionará realmente el servicio. La descargamos de este enlace por ejemplo a /tmp y la descomprimimos de la siguiente forma:

  1. neonigma@neonigma-laptop:/tmp$ mkdir nusoap
  2. neonigma@neonigma-laptop:/tmp$ mv nusoap-0.9.5.zip nusoap
  3. neonigma@neonigma-laptop:/tmp$ cd nusoap/
  4. neonigma@neonigma-laptop:/tmp/nusoap$ unzip nusoap-0.9.5.zip
  5. neonigma@neonigma-laptop:/tmp/nusoap$ rm nusoap-0.9.5.zip
  6. neonigma@neonigma-laptop:/tmp/nusoap$ cd ..
  7. neonigma@neonigma-laptop:/tmp$ mv nusoap/ /var/www/drupal-testing/modules/soap_server/

En este punto, tenemos un servidor SOAP escuchando en http://localhost/drupal-testing/?q=services/soap. Pero existe un bug en esta versión de SOAP server, por el cual al acceder a esa URL por primera vez no nos muestra las operaciones disponibles, sino el mensaje de error You must specify a name when you register an operation.

Afortunadamente tiene fácil solución. Nos bajamos este parche visto en este enlace en la ruta del módulo soap_server y lo parcheamos de esta forma:

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/soap_server$ wget http://drupal.org/files/issues/751326.patch
  2. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/soap_server$ patch -p0 < 751326.patch

Si volvemos a acceder de nuevo a la URL de escucha, ahora deberíamos de ver las operaciones disponibles y un enlace al WSDL. Esta URL al WSDL para mi no encaja con la realidad, por lo que yo siempre uso http://localhost/drupal-testing/?q=services/soap/?wsdl a la hora de proporcionar este parámetro a los clientes que deseen conectarse al servicio Web personalizado.

Otro de los hándicaps de utilizar SOAP en Drupal es que se requiere URLs limpias, tema bastante espinoso en Drupal 6, al menos para mi gusto. Para habilitarlas debemos seguir los siguientes pasos:

  • Comprobamos si tenemos instalado el módulo rewrite de Apache:
    1. root@neonigma-laptop:/var/www/drupal-testing# apache2ctl -M
  • Si no está instalado, lo instalamos:
    1. root@neonigma-laptop:/var/www/drupal-testing# a2enmod rewrite
    2. Enabling module rewrite.
    3. Run '/etc/init.d/apache2 restart' to activate new configuration!
    4. root@neonigma-laptop:/var/www/drupal-testing# /etc/init.d/apache2 restart
  • Visitar la URL http://localhost/drupal/?q=admin/settings/clean-urls y, si está disponible el botón de radio con la opción Activado, lo marcamos y guardamos la configuración. Si el botón no está disponible para marcado, debemos revisar cómo habilitar las URLs limpias en este post.

Con todo instalado, toca el turno de lo interesante, crearnos nuestro propio servicio Web. Los servicios Web preinstalados y listos para usar se encuentran en modules/services/services, por lo que un buen punto de partida es copiarnos uno de ellos y modificarlo a nuestro gusto.

  1. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/services/services$ cp -R comment_service/ nuestro_service
  2. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/services/services/nuestro_service$ mv comment_service.info nuestro_service.info
  3. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/services/services/nuestro_service$ mv comment_service.inc nuestro_service.inc
  4. neonigma@neonigma-laptop:/var/www/drupal-testing/modules/services/services/nuestro_service$ mv comment_service.module nuestro_service.module

La utilidad de cada fichero es la siguiente:

  • nuestro_service.info: este fichero contiene la información de visualización del módulo. Es decir, la identificación del módulo dentro de http://localhost/drupal-testing/?q=admin/build/modules, en la zona Services.
  • nuestro_service.module: este fichero contiene la descripción estática de las funciones del servicio Web que se van a compartir.
  • nuestro_service.inc: este fichero contiene el código de las funciones del servicio Web definidas en el fichero anterior.

Lo primero que vamos a hacer es cambiar la información de identificación de nuestro servicio Web en el fichero nuestro_service.info. Para ello, modificamos el primer bloque del código original:

  1. ; $Id: comment_service.info,v 1.1.2.1 2009/06/06 22:57:40 marcingy Exp $
  2. name = Comment Service
  3. description = Provides a comment service.
  4. package = Services - services
  5. dependencies[] = services
  6. dependencies[] = comment
  7. core = 6.x

y escribimos en su lugar este otro:

  1. ; $Id: nuestro_service.info,v 1.1.2.1 2010/12/04 11:28:00 marcingy Exp $
  2. name = Nuestro propio servicio Web
  3. description = Proporciona nuestra propia funcionalidad
  4. package = Services - services
  5. dependencies[] = services
  6. core = 6.x

Nótese que hemos eliminado la dependencia al módulo comment.

A continuación, editamos el fichero nuestro_service.module:, eliminando todo el código existente y colocando este en su lugar:

[PHP]
<?php
// $Id: nuestro_service.module,v 1.1.2.1.2.9 2010/07/16 02:59:56 skyredwang Exp $

/**
* @file
* Link functionality to services module.
*/

/**
* Implementation of hook_perm().
*/
function nuestro_service_perm() {
return array(‘access add two numbers’);
}
/**
* Implementation of hook_service().
*/
function nuestro_service_service() {
return array(

// nuestro.add
array(
‘#method’ => ‘add_numbers’,
‘#callback’ => ‘nuestro_service_add’,
‘#access arguments’ => array(‘access add two numbers’),
‘#file’ => array(‘file’ => ‘inc’, ‘module’ => ‘nuestro_service’),
‘#args’ => array(
array(
‘#name’ => ‘number_one’,
‘#type’ => ‘int’,
‘#description’ => t(‘The first number.’),
),
array(
‘#name’ => ‘number_two’,
‘#type’ => ‘int’,
‘#description’ => t(‘The second number.’),
),
),
‘#return’ => ‘int’,
‘#help’ => t(‘This method adds two numbers and return the result’),
),
);
}[/PHP]

Por último, editamos el fichero nuestro_service.inc:, eliminamos todo el código existente y definimos lo que hará la función que acabamos de exponer:

  1. &lt;?php
  2. // $Id: nuestro_service.inc,v 1.1.2.1.2.5 2010/05/08 19:26:00 heyrocker Exp $
  3.  
  4. /**
  5.  * @file
  6.  *  Link functionality to services module.
  7.  */
  8.  
  9. /**
  10.  * Returns the addition of two parameters received.
  11.  *
  12.  * @param $number_one
  13.  *   First number to add.
  14.  * @param $number_two
  15.  *   Second number to add.
  16.  * @param $since
  17.  *   Timestamp to indicate what nodes are new. Defaults to time of last user acces to node.
  18.  * @return
  19.  *   Number of nuestros that node has.
  20.  */
  21. function nuestro_service_add($number_one, $number_two) {
  22.   return (int)($number_one + $number_two);
  23. }

Es el momento de verificar que todo está en su sitio. Ahora veamos la configuración de módulos en http://localhost/drupal-testing/?q=admin/build/modules. Debemos activar nuestro nuevo módulo que representa el servicio Web que acabamos de crear.

Nos vamos a http://localhost/drupal-testing/?q=admin/user/permissions y verificamos que los permisos que hemos creado en el fichero services.modules, concretamente access add two numbers, están disponibles para asignar a los roles que tenemos creados. Inicialmente se encuentran desmarcados, deberemos marcarlos para acceso a usuario anónimo si es nuestro deseo.

Daremos permisos a todo el mundo para utilizar nuestro servicio Web. Para hacer que sólo puedan utilizar el servicio Web los usuarios registrados, me remito a la entrada anterior en este blog, donde se explicaba este hecho.

En http://localhost/drupal-testing/?q=admin/build/services podemos ver el servidor SOAP ejecutándose y las operaciones expuestas de nuestro servicio Web.

Para acceder a un testeador de nuestro servicio Web pulsamos en el enlace a nuestro.add. En la pantalla que aparece podemos escribir los dos argumentos y pulsar en Call method para realizar la llamada al servicio Web y obtener el resultado.

A 1 persona le gusta esta entrada

Gestión ligera de máquinas virtuales con KVM y Virtual Manager bajo Ubuntu

De la mano de mi compañero jhernandez descubro un gestor de máquinas virtuales mucho más ligero que el pesado VMWare al que llevaba acostumbrado muchos años.

Antes que nada nos creamos un directorio en nuestro home para almacenar nuestras máquinas virtuales.

  1. neonigma@neonigma-desktop:~$ mkdir vm

La idea es instalar KVM junto con la GUI Virtual Manager:

  1. neonigma@neonigma-desktop:~$ sudo apt-get install kvm virt-manager

Luego podemos acceder de la forma que se muestra en la imagen:

Si al acceder nos muestra un error de este tipo:

Significa que nuestra carpeta personal de virt-manager se ha creado erróneamente con permisos de root. La solución es cambiar el propietario de esta carpeta:

  1. neonigma@neonigma-desktop:~$ sudo chown neonigma:neonigma .virt-manager -R

Una vez abierto, añadiremos una conexión nueva en el menú Archivo – Añadir conexión y especificaremos como Hipervisor QEMU/KVM y como conexión Local. Si a continuación vemos el error que aparece en esta imagen:

instalaremos el siguiente paquete para resolverlo:

  1. neonigma@neonigma-desktop:~$ sudo apt-get install libvirt-bin

y daremos acceso al fichero /var/run/libvirt/libvirt-sock:

  1. neonigma@neonigma-desktop:~$ sudo chmod 777 /var/run/libvirt/libvirt-sock

Ya podemos ejecutar tranquilamente Virtual Manager como usuario. Ahora podemos ver en la pantalla principal una conexión a Localhost. Pulsamos dos veces sobre ella y nos aparece un menú con cuatro pestañas. Seleccionamos la pestaña Almacenamiento, y pulsamos en el botón que muestra un icono con el símbolo + en verde. En la ventana que se nos abre, podemos poner como nombre myHome y en Tipo elegimos Directorio del sistema de archivos. Pulsamos Adelante y donde pone Ruta de destino escribimos la ruta que creamos en el primer paso del artículo, es decir, /home/neonigma/vm en mi caso. Ya tenemos un espacio creado y dentro de nuestro /home.

Cerramos esta ventana donde hemos creado nuestro espacio de almacenamiento y volvemos a la ventana principal. Ahora pulsamos en el único icono activo que muestra un monitor y que nos va a permitir crear nuestra máquina virtual. En la primera pantalla escribimos el nombre de nuestra máquina virtual y dejamos el parámetro intacto:

En la siguiente pantalla seleccionamos Utilizar imagen ISO, pulsamos en el botón Explorar y a continuación pulsamos el botón Explorar localmente, seleccionamos la ISO del sistema operativo a instalar y pulsamos Aceptar. La siguiente imagen muestra cómo debería quedar la configuración:

En la siguiente imagen, indicamos el tamaño de memoria RAM que cedemos al sistema operativo virtual, pulsamos Adelante y vemos la última pantalla que se refiere al almacenamiento en el disco virtual. En esta pantalla seleccionamos la opción Seleccione un almacenamiento gestionado o de otro tipo existente, pulsamos en explorar, en la zona izquierda en nuestro espacio myHome, y finalmente en la zona derecha en nuestro debian-virtual.img. La configuración queda así:

La pantalla final nos muestra un resumen de la configuración escogida y pulsamos en Finalizar. En este momento, comienza automáticamente la instalación de nuestro sistema operativo virtual.

A 1 persona le gusta esta entrada

Manifiesto: En defensa de los derechos fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Este manifiesto, elaborado de forma conjunta por varios autores, es de todos y de ninguno. Si quieres sumarte a él, difúndelo por Internet.

Sé el primero en valorar positivamente

Serializer / Parser de ficheros XMI en Java con Netbeans

Ante las preguntas de ana y GG en este post, me he decidido a liberar el código de un proyecto que estaba desarrollando y que desafortunadamente, por falta de tiempo, he tenido que cancelar.

Se trata de un generador y parser de ficheros XMI, uno de los tantos estándares de XML, concretando, una especificación para el intercambio de diagramas que fue escrita para proveer una manera de compartir modelos UML entre diferentes herramientas de modelado.

La forma tanto de utilizar el serializer (escritura en fichero XMI) como la de utilizar el parser es muy sencilla y parecida. Por ejemplo, para el serializer basta con:

  1. KXmlSerializer serializer = new KXmlSerializer();
  2. serializer.startTag(null, "packagedElement");
  3. serializer.attribute(NAMESPACE_XMI, "xmi:id", pClassID);
  4. serializer.attribute(null, "name", pClassName);
  5. serializer.attribute(null, "visibility", "public");
  6. serializer.attribute(null, "isAbstract", "true");
  7. serializer.endTag(null, "packagedElement");

Lo que da lugar a un XMI del tipo:

  1. &lt;packagedElement xmi:type="uml:Class" name="Jam" xmi:id="BOUML_0x1f883_4" visibility="public" isAbstract="true"&gt;

Espero que le sirva a alguien el código desarrollado. Podéis descargarlo de aquí.

Sé el primero en valorar positivamente

Instalar Ubuntu 8.10 Intrepid en HP 2133 Mini-Note mediante USB

hp2133

La verdad que no ha sido un camino de rosas instalar Ubuntu 8.10 Intrepid Ibex en mi nuevo y flamante HP 2133 (gracias Morty!).

Al final lo conseguí instalar en una ocasión con un CD Ubuntu 8.10 versión alternate y en otra ocasión con la versión Desktop.

Vamos a ver la instalación con la versión Alternate y seguidamente comentaré más o menos los cambios para instalar la Desktop.

Requisitos para este tutorial:

  • Un mini Notebook HP 2133, por supuesto.
  • ISO de Ubuntu 8.10 alternate.
  • Conexión por cable Ethernet disponible.
  • Un pc de escritorio con Ubuntu o Windows XP instalado.
  • Un pendrive USB. Como nota importante, reseño que utilizando un MP4 de Saytes todo eran problemas y que, sin embargo, utilizando un pendrive de 8gb de la marca Kingston la velocidad de lectura / escritura aumenta y el proceso transcurre sin errores.

Pasos para la instalación:

  • Formatear el pendrive. Desmontarlo y desde una terminal escribir:
    sudo mkfs.vfat /dev/sdX1

    donde X es la letra de la unidad USB, en mi caso es sdb1.

  • Para hacer el pendrive bootable, vamos a Ubuntu en nuestro PC de escritorio, y buscamos en el menú Sistema => Administración la opción Create a USB Startup Disk.
  • Una vez finalizado el proceso, debemos eliminar las referencias al CD-ROM en los ficheros que ha grabado la utilidad de autoarranque del pendrive. Esto evita que te pida montar el CD en uno de los pasos. En una de las carpetas hay una serie de archivos con extensión cfg que habrá que modificar de la siguiente forma:
    • En text.cfg, modificar la linea 5:
      append  noprompt cdrom-detect/try-usb=true persistent file=/cdrom/preseed/ubuntu.seed initrd=/install/initrd.gz quiet --

      por esta

      append  noprompt cdrom-detect/try-usb=true persistent file=/preseed/ubuntu.seed initrd=/install/initrd.gz quiet --
    • En adtext.cfg, modificar la linea 4:
      append  file=/cdrom/preseed/ubuntu.seed priority=low initrd=/install/initrd.gz --

      por esta

      append  file=/preseed/ubuntu.seed priority=low initrd=/install/initrd.gz --
    • En gfxboot.cfg, modificar la linea 8:
      replace cli=file=/cdrom/preseed/cli.seed

      por esta

      replace cli=file=/preseed/cli.seed

      y la linea 11:

      replace ltsp=file=/cdrom/preseed/ltsp.seed

      por esta

      replace ltsp=file=/preseed/ltsp.seed
  • Desmontar el pendrive del equipo de escritorio e insertarlo en el HP 2133. Arrancar el equipo y pulsar F9 para escoger el dispositivo USB como el que arrancará primero.
  • Seguir los pasos de la instalación de forma normal teniendo en cuenta que, al menos en mi caso, en el paso Seleccionar e instalar programas no puedes elegir nada, porque si lo haces, el sistema te dice que no se puede descargar (a pesar de estar conectado vía cable). Al no elegir nada se instala el sistema base.
  • Cuando termina la instalación te suelta en un terminal. Inicias sesión e instalas gdm:
    sudo apt-get install gdm
  • ANTES DE REINICIAR vamos a hacer uso de los pasos que nos ofrece Daniel Alberto Rodríguez Méndez, para dejar la tarjeta gráfica instalada y que al reiniciar podamos ver el entorno gráfico.

    Lo que yo he hecho, guiándome por esta referencia, ha sido lo siguiente:

    • Bajarme el driver correspondiente a nuestra tarjeta gráfica de este enlace.
    • Descomprimir el fichero descargado con el siguiente comando:
      tar xvzf 85a-43862-u810-2d-bin.tar.gz
    • Nos colamos en el directorio que se ha extraído del archivo:
      cd 85a-43862-u810-2d-bin/

    • Copiamos el driver al directorio que nos comentan en el Readme:
      cp via_drv.so /usr/lib/xorg/modules/drivers/
    • Nos descargamos el magnífico xorg.conf.chi ya preparado en el sitio de dabeto en este enlace.
    • Lo renombramos a xorg.conf:
      mv xorg.conf.chi xorg.conf
    • Y lo copiamos, sobrescribiendo el xorg.conf original:
      mv xorg.conf /etc/X11/
    • Listo el tema gráfico. Ahora ya podemos reiniciar y, al volver a Ubuntu, deberíamos ver la pantalla de bienvenida. Pero podemos observar que no tenemos WiFi. Para cargar el driver, he encontrado tres formas válidas. La primera, sirve para todos los kernels y no la he encontrado en ninguna referencia. Simplemente observando los errores que me "chillaba" Ubuntu, me di cuenta de que se "casi" se reconocían los drivers del chipset WiFi, pero se informaba que había que bajarse e instalar la última versión. Las otras dos formaron parte de instalaciones anteriores y, o bien no funcionaban en el kernel 2.6.27-11-generic, o bien la WiFi se iba y volvía de vez en cuando.
      • Se trata de seguir los pasos indicados en este enlace, que son los siguientes:
      • wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
        tar xjf b43-fwcutter-011.tar.bz2
        cd b43-fwcutter-011
        make
        cd ..
        export FIRMWARE_INSTALL_DIR="/lib/firmware"
        wget http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2
        tar xjf broadcom-wl-4.80.53.0.tar.bz2
        cd broadcom-wl-4.80.53.0/kmod
        sudo ../../b43-fwcutter-011/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

        Esta solución, al ser los drivers oficiales, funciona hasta en el kernel 2.6.27-11, al contrario que las dos soluciones que vienen a continuación.

      • La segunda solución, que no funciona en el kernel 2.6.27-11, trata de seguir los pasos de este enlace. Básicamente se traduce en ejecutar los siguientes comandos:
        sudo su
        wget docnielsen.dk/linux/hp2133-wlan-`uname -r`-wl.ko.gz
        mv hp2133-wlan-`uname -r`-wl.ko.gz wl.ko.gz
        gzip -d wl.ko.gz
        mv wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless/
        depmod -a
        rmmod ndiswrapper
        rmmod wl
        insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/wl.ko
        reboot
      • Otra solución es seguir los pasos de este otro enlace, que dan en la sección "To install wireless". Esta solución trata de usar ndiswrapper, para instalar los drivers disponibles para Windows. Básicamente, se traduce en:
        • Ir a este enlace.
        • Seguir el Paso 1: All BCM43XX - Install NDISWrapper and Blacklist Native Driver.
        • Seguir el Paso 2a: SP34152 Driver Download / Extraction
        • Seguir el Paso 3: All BCM43xx - Configure NDISWrapper (and WPA Supplicant).
        • Una vez finalizados los pasos anteriores, seguir el paso HARDY BUG FIX.
        • Reiniciar Ubuntu.

Con esto, ya tenemos las dos cosas más importantes configuradas, que son la tarjeta gráfica y el chip WiFi. Es bueno seguir los consejos de una de las páginas que he dado para ajustar configuraciones como habilitar el escalado de la CPU o deshabilitar los altavoces externos cuando se enchufan unos auriculares.

Todo esto ha sido probado, como ya se ha dicho, con el CD de instalación Alternate. Recientemente he conseguido instalar de nuevo Ubuntu pero con el CD de instalación en su versión Desktop y realizando la instalación desde un lector de DVD externo conectado al puerto USB. Como contrapartida a lo que se puede leer en el 90% de los foros, a mi no me ha funcionado con el CD de instalación Desktop el incluir la opcion xforcevesa en los parámetros del kernel, ni tampoco arrancando directamente el CD con la orden live xforcevesa.

Lo que a mi me funcionó fue pulsar F4 y escoger la opción "Modo gráfico seguro" para la instalación. El único inconveniente es que no se veían los botones de aceptar y cancelar y tuve que ir jugando con la tecla Tab.

A 1 persona le gusta esta entrada

‘Cannot redeclare pclziputilpathreduction’ en WordPress 2.7

Algunos habréis notado que al actualizar de forma automática con la nueva herramienta que nos ofrece WordPress 2.7 nos aparece un error Cannot redeclare pclziputilpathreduction, justo al intentar desempaquetar la nueva versión de WordPress.

La solucion es bien sencilla. Hay que desactivar el plugin WordPress Automatic Upgrade, con el que ya disfrutábamos de esta características que ahora WordPress integra de forma interna.

Sé el primero en valorar positivamente

Breve recordatorio de expresiones regulares

Os ofrezco 3 referencias que me han venido muy bien a la hora de reactivar mis neuronas para que recordasen el manejo correcto de expresiones regulares.

En la web txt2re podemos escribir la cadena de texto que deseemos y, en un segundo paso, elegir para cada ítem cómo queremos procesarlo. Por ejemplo, podemos elegir que algo empiece por la subcadena “blog” o podemos elegir que empiece por 4 letras.

Continuando con el repaso, os hago referencia a una página perteneciente a la Universidad de Oviedo, en la que podemos validar una cadena de texto cualquiera frente a un patrón determinado por el usuario. Se nos indican alrededor de la página algunos ejemplos útiles de patrones.

Terminamos el repaso con una librería bastante extensa de expresiones regulares, con prácticamente todos los tipos de patrones utilizados más frecuentemente: urls a páginas Web, direcciones de correo electrónico, nombrado de ficheros de imagen, etc. La única pega es que todo el contenido se encuentra en el idioma de Shakespeare.

Sé el primero en valorar positivamente

Easy Eclipse: distribuciones específicas de Eclipse


A pesar de que lleva en activo mucho tiempo, lo he descubierto ahora (cosas que pasan).

EasyEclipse empaquete nuestro entorno de desarrollo favorito junto con diferentes plugins que te hacen la vida mucho más Easy. En mi caso, todo lo que explicaba para desarrollar con EclipseME en este post, se hace con un solo clic gracias a EasyEclipse Mobile Java. Me falta por comprobar si también se instala la javadoc correspondiente de J2ME.

Os dejo una lista de las distribuciones de EasyEclipse junto con la correspondiente descripción que ayuda a comprender los plugins que lleva integrada cada distribución comentada.

EasyEclipse Expert Java: Bare-bones Eclipse distro para desarrolladores experimentados en Java que son nuevos en Eclipse.

EasyEclipse Desktop Java: Para desarrollo de aplicaciones de escritorio GUI con Swing or SWT.

EasyEclipse Server Java: Para desarrollo de aplicaciones Java del lado del servidor, como páginas JavaServer, EJBs y Servicios Web.

EasyEclipse Mobile Java: Para desarrollo de aplicaciones Java para Dispositivos Móviles, utilizando J2ME.

EasyEclipse for Plugins and RCP Apps: Para desarrollo de aplicaciones RCP y plugins para Eclipse.

EasyEclipse for LAMP: Para desarrollo con PHP, Python, Perl y Ruby con un servidor web y una base de datos.

EasyEclipse for PHP: Para desarrollo con PHP y una base de datos.

EasyEclipse for Ruby and Rails: Para desarrollo con Ruby y Ruby On Rails.

EasyEclipse for Python: Para desarrollos con Python.

EasyEclipse for C and C++: Bare-bones Eclipse distro para desarrolladores experimentados de C y C++ que son nuevos en Eclipse.

Cada versión de Eclipse incorpora los plugins y añadidos necesarios para implementar el desarrollo específico.

A 1 persona le gusta esta entrada