Por defecto Linux Mint utiliza Duck Duck Go como motor de búsquedas en la web a través de Firefox. Esto lo hace debido a que este buscador mejora la privacidad del usuario en las búsquedas y además le genera un ingreso económico al proyecto sin embargo es un tanto incómodo para quienes estamos acostumbrados ya a utilizar Google para las búsquedas.
En el presente artículo se detallan los pasos necesarios para configurar a Firefox para que realice sus búsquedas en Google.
En la barra de direcciones
En Firefox abra un nuevo tab.
Acceda a la dirección: about:config.
Filtre por la llave keyword.url.
Modifique su valor (value) por http://www.google.com/search?ie=UTF-8&oe=UTF-8&q=
Después de experimentar con la versión 2.1 en Processing que era provistra por ubaa.net he decidido probar con otra diferente ya que esta al parecer ha dejado de ser actualizada.
En este caso estoy probando javacvPro la cual se ve muy prometedora a pesar de que su sitio web y documentación se encuentra escrito en francés.
Después de realizar algunas pruebas y experimentos con la versión 2.1 he decidido actualizar la versión de OpenCV a su versión mas reciente (2.3.1 agosto de 2011) para utilizar nuevas librerías mas avanzadas.
Para esto, en lugar de construír la librería desde fuentes, voy a utilizar el repositorio que hábilmente ha creado @gijzelaerr en Launchpad con esta versión.
Instalación
Agregar los repositorios necesarios al sistema operativo.
$ sudo add-apt-repository ppa:gijzelaar/cuda
$ sudo add-apt-repository ppa:gijzelaar/opencv2.3
Actualizar la lista de índices de los paquetes en los repositorios.
Después de una acción aún no determinada, posiblemente agregar un nuevo repositorio de paquetes al sistema operativo, empecé a obtener errores de firmas GPG como los siguientes durante la actualización de los índices de los paquetes en los repositorios con Aptitude.
W: GPG error: http://archive.ubuntu.com oneiric Release: The following signatures were invalid: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> W: GPG error: http://ppa.launchpad.net oneiric Release: The following signatures were invalid: BADSIG B9316A7BC7917B12 Launchpad chrislea W: GPG error: http://ppa.launchpad.net oneiric Release: The following signatures were invalid: BADSIG B6C6326781C0BE11 Launchpad All you need for Ruby/Rails development on Ubuntu W: GPG error: http://ppa.launchpad.net oneiric Release: The following signatures were invalid: BADSIG C2518248EEA14886 Launchpad VLC W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://ppa.launchpad.net oneiric Release: The following signatures were invalid: BADSIG C2518248EEA14886 Launchpad VLC
La solución
Para solucionar esta situación se siguieron los pasos mostrados a continuación.
Renombrar (mover o remover) las listas de índices de paquetes actualmente manejadas por el sistema operativo.
En el presente artículo se describirán los pasos necesarios para instalar el software de OpenCV y su correspondiente librería para desarrollar sketches con él utilizando Processing.
Durante el desarrollo de la instalación se utilizó GNU/Linux Mint 12 sin emgbargo el procedimiento debe ser compatible con Ubuntu.
Aviso! La versión de OpenCV que se encuentra en los repositorios del sistema operativo (2.1.0-7build1) es un poco antigua, sin embargo se encontraron problemas para compilar la parte nativa de la librería con una versión mas reciente. Por este motivo se decidió utilizar la versión disponible y experimentar posteriormente una posible actualización.
Ubicar correctamente el directorio con los ejemplos.
$ mv OpenCV examples/ OpenCV/examples
Recompilar el módulo nativo de la librería
La librería incluye una librería del sistema operativo (libOpenCV.so) enlazada dinámicamente con OpenCV. La incluída con la distribución de la librería recién instalada fue compilada con versiones anteriores de OpenCV motivo por el cual no se cumplen sus dependencias y en el momento de compilar los sketches se obtiene el siguiente mensaje de error.
!!! required library not found : /home/jimezam/sketchbook/libraries/OpenCV/library/libOpenCV.so: libcxcore.so.1: cannot open shared object file: No such file or directory Verify that the java.library.path property is correctly set and ‘libcxcore.so’, ‘libcv.so’, ‘libcvaux.so’, ‘libml.so’, and ‘libhighgui.so’ are placed (or linked) in one of your system shared libraries folder
Exception in thread “Animation Thread” java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V at hypermedia.video.OpenCV.capture(Native Method) at hypermedia.video.OpenCV.capture(OpenCV.java:945) at sketch_jan12b.setup(sketch_jan12b.java:35) at processing.core.PApplet.handleDraw(Unknown Source) at processing.core.PApplet.run(Unknown Source) at java.lang.Thread.run(Thread.java:662)
Por este motivo es necesario recompilar el módulo nativo con las versiones actuales. Para hacer esto se deben seguir los siguientes pasos.
$ cd ~/sketchbook/libraries/OpenCV/library/
Crear una copia de seguridad del módulo nativo a recompilarse.
$ mv libOpenCV.so libOpenCV.so.OLD
Generar la cabecera del módulo nativo de Java (JNI).
Los perfiles de reconocimiento son archivos XML donde se estructura el conocimiento que le permite a la librería reconocer rostros sin la necesidad de mayor entrenamiento. La versión actual de los paquetes de OpenCV en los repositorios instala estos perfiles en una ubicación que no permite que sean utilizados fácilmente desde Processing. Los siguientes pasos corrígen esta situación.
Una vez instalada la librería se podrán desarrollar sketches con ella, a continuación se presenta el sketch mas sencillo posible que muestra la imagen proveniente de la cámara web utilizando OpenCV.
Simple-OpenNI es una librería de Processing que actúa como un recubrimiento (wrapper) para utilizar fácilmente OpenNI desde este lenguaje de programación.
La distribución binaria de esta librería puede ser descargada directamente desde el sitio web del proyecto. En el presente artículo se describirán los pasos necesarios para construír esta librería a partir de su distribución de fuentes lo cual resulta interesante para garantizar compatibilidad con las versiones de las librerías nativas instaladas y mantener la última versión disponible, así como utilizar arquitecturas cuyas distribuciones binarias no se encuentren disponibles.
Prerequisitos
Para poder construír la librería bajo GNU/Linux Ubuntu es necesario contar con los siguientes requisitos previamente instalados.
Ajustar el script de construcción modificando la invocación a cmake de la siguiente manera. (Ajustar las rutas que se consideren convenientes, en especial a DP5_JAR)
El procedimiento anterior construye e instala la librería de Simple-OpenNI bajo ~/sketchbook/libraries/SimpleOpenNI/ dejándola lista para ser utilizada con Processing.
NodeJS es una plataforma de desarrollo de alta escalabilidad para aplicaciones en red basada en un único hilo de ejecución, una arquitectura orientada a eventos y un manejo asíncrono de E/S. Esta plataforma se programa utilizando Javascript del lado del servidor.
En el presente artículo se describen los pasos realizados para su instalación siguiendo dos estrategias diferentes.
Instalación
Utilizando el gestor de paquetes
En este caso la instalación es mas rápida y sencilla ya que el gestor de paquetes, apt/aptitude en este caso, se hace cargo de la descarga e instalación del software y sus dependencias.
Utilizando los repositorios por defecto
Los repositorios incluídos por defecto con el sistema operativo permiten instalar a NodeJS sin embargo no en su versión mas reciente sino un par de números atrasada.
Versión de NodeJS disponible en los repositorios de Ubuntu
Para realizar su instalación se debe ejeuctar el siguiente comando.
$ sudo aptitude install nodejs
Utilizando los repositorios del proyecto
Este método permite actualizar los repositorios del sistema operativo con el repositorio oficial del proyecto de donde se podrán descargar versiones mas recientes. Para hacer esto se deben ejecutar los siguientes comandos.
Versión de NodeJS disponible en los repositorios del proyecto
Una vez incluído el nuevo repositorio se procede a instalar el paquete normalmente.
$ sudo aptitude install nodejs
Desde el código fuente
Este método permite compilar una distribución de NodeJS para la versión específica del sistema operativo que se está utilizando. Esto requiere que se cuente con el soporte requerido de las herramientas de desarrollo y dependencias necesarias para construír el proyecto.
Descargar el código fuente de la última versión disponible (la 0.6.7 en este caso) desde la siguiente ubicación.
Aviso! Si desea instalar NodeJS en una ubicación central haciéndolo disponible para todos los usuarios del sistema operativo, omita el parámetro –prefix de la ejecución anterior, de lo contrario ajuste su ruta según la ubicación específica donde desee instalarlo.
Checking for program g++ or c++ : /usr/bin/g++ Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for g++ : ok Checking for program gcc or cc : /usr/bin/gcc Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for gcc : ok Checking for library dl : yes Checking for openssl : yes Checking for library util : yes Checking for library rt : yes Checking for fdatasync(2) with c++ : yes ‘configure’ finished successfully (0.776s)
El siguiente paso consiste en construír la distribución compilando su código fuente.
$ make
Y finalmente se debe instalar la distribución recién construída en la ubicación elegida.
$ make install
Aviso! Si se eligió instalar NodeJS en una ubicación central, la ejecución del comando anterior deberá ser hecha por el usuario root de la siguiente manera: sudo make install.
Actualizar el PATH para que incluya la ubicación de las herramientas de NodeJS recién instaladas. Realizar esta modificación en el .bash_profile/.bashrc del usuario o /etc/profile para tener un alcance global y garantizar que esta modificación persista cada vez que se inicia la máquina.
$ PATH=/home/jimezam/nodejs/0.6.7/bin:$PATH
Si el ajuste fue exitoso la aplicación node ya podrá ser accedida directamente desde la línea de comando.
$ which node
/home/jimezam/nodejs/0.6.7/bin/node
Prueba de funcionamiento: Hola Mundo NodeJS!
Crear el siguiente archivo de código Javascript para crear un servicio extremadamente simple que responda “Hola Mundo” ante las peticiones web de los clientes a través de navegadores.
$ vi prueba.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hola Mundo NodeJS!n');
}).listen(7777, '127.0.0.1');
console.log('Servidor ejecutándose en http://127.0.0.1:7777');
Para iniciar el servicio se debe invocar el comando node de la siguiente manera.
$ node prueba.js
Servidor ejecutándose en http://127.0.0.1:7777
Desde un navegador web acceder a la dirección mencionada.
A diferencia de otros portátiles Dell que había configurado en el pasado, el mío tenía algo particular con su tarjeta de red inalámbrica. Esta aparecía referenciada por la interfaz eth1 en lugar de la habitual wlan0.
$ iwconfig
… eth1 IEEE 802.11bg ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:off
A pesar de esto funcionaba aparentemente de manera correcta utilizando el driver STA, sin embargo empecé a tener problemas cuando quise hacer algunos ajustes a la interfaz así que tuve que darme a la tarea de solucionar este problema.
Como mencioné inicialmente, la tarjeta de red inalámbrica es una Broadcom BCM4312.
$ sudo lspci -vk
08:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01) Subsystem: Dell Wireless 1397 WLAN Mini-Card Flags: bus master, fast devsel, latency 0, IRQ 17 Memory at f0600000 (64-bit, non-prefetchable) [size=16K] Capabilities: [40] Power Management version 3 Capabilities: [58] Vendor Specific Information: Len=78 <?> Capabilities: [e8] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [d0] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [13c] Virtual Channel Capabilities: [160] Device Serial Number df-3d-0d-fd-fd-dd-0d-2d Capabilities: [16c] Power Budgeting <?>
La situación
Aparentemente esto se debe a la utilización del controlador incorrecto de la tarjeta de red inalámbrica.
La solución
Mediante la aplicación de Additional Drivers (/usr/bin/jockey-gtk) desactivar el controlador STA que se venía utilizando.
Remover los paquetes relacionados con el controlador STA (recomendado).
Reiniciar el equipo para que sean tenidos en cuenta los cambios en la configuración recién hechos.
$ sudo reboot
La verificación
Contrario a lo que esperaba, el nuevo controlador (b43) no aparece listado en la aplicación de Additional Drivers, sin embargo la interfaz ya aparece con su nombre correcto y es posible realizar la conexión a redes inalámbricas cercanas (por ejemplo utilizando el NetworkManager).
OpenNI (Open Natural Interaction) es una organización sin ánimo de lucro enfocada en el desarrollo de tecnologías para la interacción natural con dispositivos. Uno de sus principales participantes es PrimeSense, una empresa israelí responsable del desarrollo del Kinect y dispositivos similares junto con la firma Asus.
Su framework provee una infraestructura genérica basada en APIs de código abierto para acceder a los dispositivos de interacción natural, sobre él se instala el Sensor que permite acceder específicamente a los servicios provistos por el Kinect. Adicionalmente esta empresa desarrolla el middleware NITE el cual no es de código abierto y permite acceder a funcionalidades avanzadas como seguimiento del esqueleto en tiempo real y reconocimiento de gestos entre otras cosas.
Este proedimiento fue verificado en equipos utilizando GNU/Linux Ubuntu 11.10 y Mint 12.
Aviso! Se instalarán las versiones inestables de OpenNI y NITE ya que actualmente así lo sugiere el módulo de SensorKinect modificado por avin2.
Aviso! Si hay problemas con la siguiente ruta verificar si existe el directorio Linux o Linux-x86 ya que he visto algunas variaciones entre las pruebas que realicé a finales de diciembre del año pasado y esta versión mas reciente.
$ cd OpenNI/Platform/Linux/CreateRedist
$ bash RedistMaker
$ cd ../Redist/OpenNI-Bin-Dev-Linux-x86*/
$ sudo ./install.sh
Instalar Sensor Kinect
$ cd ~/kinect
$ git clone https://github.com/avin2/SensorKinect
$ cd SensorKinect/Platform/Linux/CreateRedist
$ bash RedistMaker
$ cd ../Redist/Sensor-Bin-Linux-x86*
$ sudo sh install.sh
Instalar NITE
Descargar la distribución binaria para GNU/Linux mas reciente desde la siguiente ubicación.
Es posible verificar el funcionamiento del software recién instalado con las aplicaciones de demostración que este incluye. Para hacer esto se recomienda revisar los siguientes directorios.
Una vez conectado el Kinect al puerto USB del computador y a la corriente eléctrica este debe ser reconocido por el sistema operativo.
$ dmesg
… [ 158.092116] usb 2-3: new high speed USB device number 4 using ehci_hcd [ 158.224738] hub 2-3:1.0: USB hub found [ 158.224915] hub 2-3:1.0: 3 ports detected [ 158.800196] usb 2-3.2: new full speed USB device number 5 using ehci_hcd [ 160.336252] usb 2-3.1: new high speed USB device number 6 using ehci_hcd [ 161.448177] usb 2-3.1: usbfs: USBDEVFS_CONTROL failed cmd mtp-probe rqt 128 rq 6 len 1024 ret -110 [ 162.128178] usb 2-3.3: new high speed USB device number 7 using ehci_hcd [ 162.299863] gspca: v2.13.0 registered [ 162.301016] usbcore: registered new interface driver kinect …
$ lsusb
… Bus 002 Device 005: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor Bus 002 Device 006: ID 045e:02ad Microsoft Corp. Xbox NUI Audio Bus 002 Device 007: ID 045e:02ae Microsoft Corp. Xbox NUI Camera …
error CS0117: `OpenNI.CalibrationStatus’ does not contain a definition for `ManualAbort’
Si se está realizando una actualización de OpenNI probablemente sea buena idea desinstalar los archivos previos antes de realizar nuevamente los pasos descritos en este artículo.
Aparentemente los kernels incluyen un módulo para interactuar con el Kinect que interfiere con la ejecución de OpenNI. Para verificar esto es necesario ejecutar el siguiente comando.
Instalando Apache+PHP+MySQL en mi equipo con GNU/Linux Mint 12 encuentro el siguiente problema después de instalar el soporte para SQLite (php5-sqlite).
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20090626+lfs/sqlite.so’ – /usr/lib/php5/20090626+lfs/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
La situación
Aparentemente el uso de SQLite versión 2 ha sido desestimado en pos del uso exclusivo de la versión 3, sin embargo extrañamente la configuración por defecto de PHP sigue intentando cargar su librería.
La solución
Remover la configuración de SQLite2 de PHP y utilizar la versión 3 únicamente.