¿Problemas de usabilidad?

31 agosto 2007 at 09:50

Fecha Filed in Curiosities
Tags Tags: ,

Usabilidad

Benchmark Lucene en PHP vs Lucene en Java

30 agosto 2007 at 00:21

Fecha Filed in Computers
Tags Tags: , , , ,

Lucene in ActionLucene es una librería opensource de recuperación de información, usada generalmente para la programación de motores de búsqueda. Fue originalmente implementada en Java por Doug Cutting, aunque ha sido portada a otros lenguajes de programación como C, C++, Python, Perl, Ruby, PHP, … Para PHP existe Zend Search Lucene, un motor de búsqueda de propósito general escrito íntegramente en PHP5. Zend Search Lucene almacena sus índices en el sistema de archivos, evitando la necesidad de un servidor de bases de datos. Nos permite una ranked searching (los mejores resultados aparecerán los primeros), diversas potentes consultas (consultas de frases, consultas por proximidad, consultas por rango, …) y búsquedas por campos específicos (por título, autor, contenidos, …).

Zend Search Lucene puede ser una opción estupenda para integrarlo en un proyecto escrito en PHP (nos olvidaríamos de la conexión puente entre Java y PHP), aunque investigando un poco en temas de eficiencia me he topado con un artículo donde el autor hace un pequeño benchmark para comparar Zend Search Lucene y Lucene en Java. Se llega a las siguientes conclusiones:

  • La indexación usando Zend Search Lucene es mucho más lenta que con Java Lucene. En el benchmark se indexó 30.000 resultados con Zend Search Lucene en 1883 segundos (aproximadamente media hora).
  • El índice creado por Zend Search Lucene es totalmente compatible con Java Lucene, por lo que un índice creado por uno puede ser leído por otro y viceversa.
  • La búsqueda con Zend Search Lucene es mucho más lenta que con Java Lucene. El tiempo para 100 búsquedas fue:
    jayant@jayantbox:~/myprogs/java$ java searcher
    Total : 30000 docs
    t2-t1 : 231 milliseconds
    
    jayant@jayantbox:~/myprogs/php$ php -q searcher.php
    Total 30000 docs
    total time : 15 seconds
    

    Aún así se pensó que tal vez el código en PHP devolvía los documentos que se estaba buscando, por lo que se hizo un cambio en el código donde se extraían todos los documentos tanto en PHP como en Java. Sin embargo el tiempo empleado por el código en PHP fue mucho mayor:

    jayant@jayantbox:~/myprogs/java$ java searcher
    Total : 30000 docs
    t2-t1 : 2128 milliseconds
    
    jayant@jayantbox:~/myprogs/php$ php -q searcher.php
    Total 30000 docs
    total time : 63 seconds
    

    El código de búsqueda en PHP usado para Lucene fue el siguiente:

    <?
    *
     * searcher.php
     * On 2007-06-06
     * By jayant
     *
     */
    include("Zend/Search/Lucene.php");
    
    $index = new Zend_Search_Lucene("/tmp/myindex");
    echo "Total ".$index->numDocs()." docsn";
    $query = "java";
    $s = time();
    for($i = 0; $i < 100; $i++)
    {
     $hits = $index->find($query);
    // retrieve all documents. Comment this code if you
    // dont want to retrieve documents
     foreach($hits as $hit)
       $doc = $hit->getDocument();
    }
    $total = time() - $s;
    echo "total time : $total s";
    ?>
    

    Y el código de búsqueda en Java usado para Lucene fue este:

    /*
     *      searcher.java
     *      On 2007-06-06
     * By jayant
     *
     */
    
    import org.apache.lucene.search.*;
    import org.apache.lucene.queryParser.*;
    import org.apache.lucene.analysis.*;
    import org.apache.lucene.analysis.standard.*;
    import org.apache.lucene.document.*;
    
    public class searcher {
    
     public static void main (String args[]) throws Exception
     {
      IndexSearcher s = new IndexSearcher("/tmp/myindex");
      System.out.println("Total : "+s.maxDoc()+" docs");
      QueryParser q = new QueryParser("content",new StandardAnalyzer());
      Query qry = q.parse("java");
    
      long t1 = System.currentTimeMillis();
      for(int x=0; x < 100; x++)
      {
       Hits h = s.search(qry);
    // retrieve all documents. Comment this code
    // if you dont want to retrieve documents
       for(int y=0; y < h.length(); y++)
       {
        Document d = h.doc(y);
       }
    
      }
      long t2 = System.currentTimeMillis();
      System.out.println("t2-t1 : "+(t2-t1)+" ms");
     }
    }
    

Más información | Whatever….

Qué descanses en paz Antonio Puerta

28 agosto 2007 at 15:42

Fecha Filed in Football
Tags Tags: , ,

Antonio Puerta

Fallece Antonio Puerta, un campéon en toda regla. 22 años, andaluz, sevillista, su mujer embarazada de ocho meses, … Todos recordaran el gol que marcó en la copa de la UEFA al Schalke 04 en 2006, gol que le valió al Sevilla FC para meterse en su primera final europea. Que descanses en Paz.

En el Apple Shop de la Fnac de Barcelona

25 agosto 2007 at 13:07

Fecha Filed in Curiosities, Computers
Tags Tags: , ,

Ayer estuve en el Apple Shop (dentro de la Fnac del Triangle en Barcelona), la primera tienda oficial de Apple en España que abrió sus puertas el jueves pasado. Cabe decir que no es un Apple Store ni mucho menos, aunque puedes encontrar demostraciones de los últimos productos en vivo y en directo.

Nuevo iMac

El Apple Shop está situada justo en la entrada de la primera planta de la Fnac de Plaça Catalunya.. Al entrar te encuentras con un stand de Apple (información) y dos mesas bastante amplias donde están dispuestos diversos productos de demostración (nuevos iMacs, MacBooks, iPod, accesorios de Apple…) donde los clientes pueden trastear libremente.

Nuevo iMac

Como curiosidad, la tienda fue montada en solo una noche y no ha quedado nada mal ;)

Nuevo iMac

12 Angry Men

24 agosto 2007 at 09:32

Fecha Filed in General, Curiosities
Tags Tags: , ,

12 Angry Men

Well, I’m not used to supposin’. I’m just a workin’ man. My boss does all the supposin’ - but I’ll try one. Supposin’ you talk us all out of this and, uh, the kid really did knife his father?

No uses innerHTML, usa DOM

20 agosto 2007 at 18:30

Fecha Filed in Computers
Tags Tags: , , ,

A pesar de que innerHTML sea relativamente mucho más rápido, existen ciertas cuestiones que hacen más recomendable el uso de DOM para manejar documentos xHTML.

  • innerHTML no es un estándar, es una propiedad de Microsoft (al igual que outerHTML).
  • Se supone en un futuro innerHTML no funcionará en los documentos xHTML basados en el MIME type application/xhtml+xml.
  • Una de las diferencias principales entre innerHTML y DOM es que el primero es un string y el segundo una estructura de objetos jerárquica (un árbol). Meter un string en un objeto es una auténtica chapuza, por llamarlo de algún modo.
  • Perdemos interacción con el objeto (fijar atributos, cambiar valores, …) al ser un string.

Crear un elemento

innerHTML

document.getElementById("contenedor").innerHTML =
                    "<div id="capa" >Texto<!--comentario--></div>";

DOM

div = document.createElement("div");
div.setAttribute("id", "capa");
texto = document.createTextNode("Texto");
div.appendChild(texto);
div_comentario = document.createComment("comentario");
div.appendChild(div_comentario);
document.getElementById("contenedor").appendChild(div);

Obtener el texto de un elemento

innerHTML

texto = document.getElementById("contenedor").innerHTML

DOM

texto = document.getElementById("contenedor").firstChild.nodeValue;

Crear varios elementos

innerHTML

data = new Array("one","two","three");
mHTML = "<ul>";
for(i=0; i<data.length; i++) {
	mHTML+="<li>" + data[i] + "";
}
mHTML+="</ul>";
document.getElementById("contenedor").innerHTML = mHTML;

DOM

data = new Array("one", "two", "three");
eUL = document.createElement("ul");
for(i=0; i<data .length; i++) {
	eLI = document.createElement("li");
	eLI.appendChild(document.createTextNode(data[i]));
	eUL.appendChild(eLI);
}
document.getElementById("contenedor").appendChild(eUL);

Más información | SlayerOffice
Más información | Mozilla Developer Center

Número de cuernos de un unicornio

20 agosto 2007 at 17:28

Fecha Filed in Internet, Curiosities
Tags Tags: ,

Number of horns on a unicorn

Ya vimos hace tiempo como Google nos daba la respuesta a la vida al universo y a todo. Hoy navegando por internet me encuentro con este easter egg, donde el gigante de colorines nos responde si le preguntamos por el número de cuernos en un unicornio (number of horns on a unicorn).

BCNEmprende

11 agosto 2007 at 14:29

Fecha Filed in Events, Bussiness 2.0
Tags Tags: ,

Torre AgbarA raíz de un debate en el blog de Sacha Fuentes, se lanza la propuesta de montar un evento tipo Iniciador en Barcelona. La idea es crear un evento seminformal cada mes para compartir experiencias, contar ideas, comentar diversos temas de interés, … Para empezar, se ha fijado una fecha para celebrar una reunión donde se comenzará a modelar el evento:

* Fecha: 12 de septiembre de 2007
* Hora: 19:30
* Lugar: por determinar, dependiendo de la gente que se apunte

Puedes apuntarte libremente a la primera reunión en el wiki que se ha puesto a disposición.

Xurrency causa furor en Japón

11 agosto 2007 at 12:59

Fecha Filed in Curiosities, Bussiness 2.0
Tags Tags:

Xurrency en Japón

El fichaje más feo de la historia

10 agosto 2007 at 09:41

Fecha Filed in Football, Curiosities
Tags Tags: ,

¿Creías que nadie podía superar a Iván Campo? Es el gran Atila Kasac, aquel delantero serbio que vino a jugar a España en el CD Logroñés. A parte de ser feo, fue un auténtico fracaso en el equipo riojano. Solo jugó varios partidos y se pasó casi toda la temporada 94-95 lesionado.

Atila Kasac

Atila Kasac

A aquellos niños que coleccionaron cromos de ediciones Este, recordarán que había otra versión trucada de Atila Kasac (más feo todavía):

Atila Kasac

API de Xurrency disponible

07 agosto 2007 at 18:03

Fecha Filed in Internet, Computers, Bussiness 2.0
Tags Tags: , , , ,

XurrencyAunque ya lleva bastante tiempo terminada, hoy encuentro un hueco y lanzo la API de Xurrency. Ahora puedes integrar datos en tu sitio o aplicación web directamente desde Xurrency. Como ya comenté en un principio, la API está basada en SOAP, así que podrás usarla en diferentes lenguajes de programación (multiplataforma). Para PHP, sugiero usa la libreria NuSOAP, una colección libre de clases que permiten a los usuarios enviar y recibir mensajes SOAP.

Actualmente los métodos disponibles son los siguientes:

  • string getName(string $code)
  • string getZone(string $code)
  • string getURL(string $code)
  • int getNumCurrencies()
  • int isCurrency(string $code)
  • array getCurrencies()
  • array getValues(string $code)
  • array getValuesInverse(string $code)
  • float getValue(float $amount, string $base, string $target)

El uso de la API con NuSOAP es tan sencillo como el siguiente ejemplo, donde se muestra el nombre de la divisa con código eur.

        require('lib/nusoap.php'); 

        $cliente = new soapclient('http://xurrency.com/api.wsdl', 'wsdl');
	$err = $cliente->getError();
	if($err)
	   exit();
        $proxy  = $cliente->getProxy();
        $resultado = $proxy->getName('eur');

        if (!$cliente->getError())
          echo $resultado;
        else
          echo $cliente->getError();

Además, he publicado una lista sandbox que muestra las salidas de todos los métodos que ofrece la API.

Más información | API Xurrency

Instalando el Avivo Driver en Ubuntu (Open Source R500 Driver)

07 agosto 2007 at 10:10

Fecha Filed in Computers
Tags Tags: , ,

Avivo DriverEste post es una adaptación al castellano de la guía que se publicó en Phoronix hace unos días, incluyendo algunos fixs para posibles problemas (fruto de mi experiencia). Desde hacer un par de meses, un grupo reducido de personas estuvieron investigando (en su tiempo libre, el porqué de la tardanza) las tarjetas gráficas ATI con chip R500 usando ingeniería inversa. El código que actualmente hay disponible permite inicializar y fijar modos de videos en los modelos de Radeon X1300 y X1600. Cabe decir que el driver no tiene todavía soporte 3D.

Antes que nada, debemos de tener instalado la versión 1.3 del X server. Para conseguir esta versión del servidor X en Ubuntu 7.04 Feisty Fawn deberás de instalarlo desde el código de fuente o actualizar con los paquetes de Ubuntu 7.10 Gutsy Gibbon (o actualizar a una versión Tribe). Para la instalación, yo actualicé mis paquetes editando mi lista de repositorios (/etc/apt/sources.list) y actualizando mi sistema:

apt-get update
apt-get dist-upgrade

Nota: Algunos comandos que usaré en la guía requieren privilegios de administrador.

Una vez el X server 1.3 instalado, hay algunos paquetes que deberán instalarse para adquirir el último código de fuente de Avivo usando git y para construir el driver.

apt-get install build-essential git-core configure-debian
apt-get install xorg-dev libtool libpciaccess-dev autoconf

Cuando tengamos git instalado, podremos proceder a obtener el código de fuente del Avivo driver.

git-clone git://anongit.freedesktop.org/git/avivo/xf86-video-avivo

Nota: Si no puedes instalar el paquete git-core, descárgalo de Ubuntu Packages.

Ya con el código del driver en nuestro poder, comenzaremos a generar los archivos.

./autogen.sh --prefix=/usr/

Durante la compilación obtenía el siguiente error:

aclocal configure.ac 78 macro AM_CFLAGS not found in library

Para arreglarlo es suficiente con actualizar a automake1.9:

apt-get install automake1.9

Una vez que tengamos el driver generado sin errores, podremos instalarlo en el sistema. El driver contiene soporte para varias tarjetas gráficas con el chip R500, desde la Mobility FireGL V7200 hasta la Radeon X1950GT. Sin embargo, si por casualidad tu PCI ID o tarjeta gráfica no está listada, se puede añadir nuevas PCI ID en xorg/avivo_chipset.c y include/avivo_chipset.h. Ten en cuenta que si haces alguna modificación en el código de fuente, debes de generar el código con autogen.sh otra vez. Para instalar el driver en el sistema, lo haremos con make.

make; make install

Si todo fue bien, el Avivo X.Org driver habrá sido instalado correctamente. Sin embargo, el archivo xorg.conf necesita actualizarse manualmente para reflejar el nuevo driver instalado. Hay que editar la sección de device, fijando avivo (antes vesa o fglrx).

Section "Device"
        Identifier  "Targeta de vídeo genèrica"
        Driver       "avivo"
        BusID       "PCI:1:0:0"
        Option      "ShadowFB"  "On"
EndSection

Además, también necesitarás añadir las siguientes líneas al archivo xorg.conf, para prevenir errores cuando ejecutemos X.

Section "Extensions"
      Option "Composite" "Disable"
EndSection

Section "ServerFlags"
      Option "AIGLX" "Off"
EndSection

Después de que hayas configurado el archivo xorg.conf, reinicia al servidor X ;) Finalmente, este driver también tendrá soporte para las Radeon HD 2000. El Avivo driver también funciona con RandR 1.2 para el soporte de dynamic display.

Closed timelike curve

06 agosto 2007 at 11:59

Fecha Filed in Curiosities

Enlace

In a Lorentzian manifold, a closed timelike curve (CTC) is a worldline of a material particle in spacetime that is “closed”, returning to its starting point.

El Ayuntamiento de Sevilla quiere comprar licencias de MS Office

06 agosto 2007 at 11:39

Fecha Filed in Andalusia, Computers
Tags Tags: , , , ,

Tux SevillaVergüenza me da al leer en el BOJA (Boletín Oficial de la Junta de Andalucía) del pasado mes de Julio, el desembolso derroche de 150.000 euros en concepto de licencias de Microsoft Office para el Ayuntamiento de Sevilla. Algo despampanante y sin sentido, un dinero malgastado que se podría invertir en otras necesidades. La noticia saltó a la luz hace unos días en Kriptópolis, donde alguien solicitó una explicación al Ayuntamiento de Sevilla y recibió la siguiente contestación, por parte de un tal José Miguel Rufo Ortíz, del Gabinete de Alcaldía:

Por indicación del Sr. Alcalde y en referencia a su atento email he de informarle que el Ayuntamiento de Sevilla es usuario de los productos de Microsoft, en concreto de Microsoft Works y Office desde 1992 aproximadamente y es usado por el personal de administración. El cambio a Open Office requería una formación de todo ese personal, la instalación en todos los equipos y migración de las actuales aplicaciones que utilizan estos productos.

En el momento actual nos encontramos adquiriendo equipos personales nuevos, que deben tener instalados los productos adquiridos legalmente y esta es la causa de la adquisición de las 400 licencias de Microsoft Office.

No obstante lo anterior y conjuntamente con la Junta de Andalucía, se han comenzado a instalar aplicaciones con software libre y utilizando el Open Office. Este proceso ha comenzado a principios de año y su duración será larga en el tiempo, por lo complejo que son estos procesos de migración.

Esperando haber resuelto su preocupación, reciba un cordial saludo, atentamente:

Jose Miguel Rufo Ortiz
Gabinete de Alcaldía

Me gustaría hacer unos comentarios respecto a tal respuesta, que en mi opinión, no hay por donde cogerla.

…he de informarle que el Ayuntamiento de Sevilla es usuario de los productos de Microsoft, en concreto de Microsoft Works y Office desde 1992 aproximadamente y es usado por el personal de administración.

Bueno, siempre hay tiempo de rectificar…

El cambio a Open Office requería una formación de todo ese personal, la instalación en todos los equipos y migración de las actuales aplicaciones que utilizan estos productos.

Ah, y por eso hay que desembolsar ahora la cantidad de 150.000 euros (unos 25 millones de las antiguas pesetas) en 400 licencias de Microsoft Office… ¡Semejante tontería! Con la mitad de ese dinero se podría pagar años de formación a todo el personal. Además, ¿formación para Open Office? Pienso que cualquier persona con nocciones básicas de ofimática puede usar Open Office sin ningún problema.

En el momento actual nos encontramos adquiriendo equipos personales nuevos, que deben tener instalados los productos adquiridos legalmente y esta es la causa de la adquisición de las 400 licencias de Microsoft Office

¿Ein?

No obstante lo anterior y conjuntamente con la Junta de Andalucía, se han comenzado a instalar aplicaciones con software libre y utilizando el Open Office. Este proceso ha comenzado a principios de año y su duración será larga en el tiempo, por lo complejo que son estos procesos de migración.

Vamos a ver, si el Ayuntamiento ha comenzado un proceso de migración (complejo, como ellos dicen), ¿por qué quieren adquirir las licencias de Microsoft Office para los equipos nuevos? Ya que están en proceso migración, ¿por qué no usan software libre desde un principio? (sino volveríamos al mismo problema). Creo que el problema radica en lo de siempre, la gente no tiene ni puta idea de informática. Los que saben, usan software libre :)

Grigori Perelman. Un genio en su esencia

02 agosto 2007 at 10:05

Fecha Filed in Curiosities
Tags Tags: ,

Hace unas semanas en el metro de San Petersburgo un blogger rusó captó con su móvil estas instantáneas de Grigori Perelman, aquel matemático que rechazó el premio de un millón de dólares tras resolver la conjetura de Poincaré, uno de los siete problemas matemáticos abiertos. Perelman muestra un estado denigrante y un aspecto desaliñado. Según algunas fuentes Perelman se encuentra sin empleo y vive con su madre en un barrio a las afueras de San Petersburgo. Además, comentó que había abandonado las matemáticas, ya que está decepcionado y no tiene nada que decir interesante.

Grigorij Perelman

The Simpsons Movie

02 agosto 2007 at 09:45

Fecha Filed in General

Tienes que ir a verla. La verdad es que me esperaba otra cosa (peor), pero está realmente bien. Es como un capítulo de los de antes, con ese humor ácido que cautivó a casi todo habitante del planeta, pero más largo de lo habitual. La trama principal está basada en una amenaza natural que recae sobre Springfield, tal vez con la intención de parodiar de cierto modo la amenaza del cambio climático sobre nuestro planeta (ya conocemos la faceta científica de la serie). Debido a la excesa contaminación de Springfield, el gobierno decide poner en marcha un plan para destruir la ciudad. La familia Simpson tratará de salvar al pueblo de tal amenaza.

Nuevos chistes, nuevos gags que hacen reir a la sala. Muy recomendable.

The Simpsons Movie