Firefox OS @ Linux Mint 13

Para poner en marcha Firefox OS  hay que hacer lo siguiente:

La gente de Mozilla recomienda usar una distribución de Linux con gcc 4.6 o Mac OS X (Mountain Lion) ya que distros con gcc 4.7 como Ubuntu 12.10 pudiesen ser incompatible al momento de compilar los fuentes de Firefox OS.

También necesitas un teléfono compatible o en caso de no contar con un teléfono compatible se puede usar un emulador (arm / x86) el cual vamos a construir para realizar nuestras pruebas con Firefox OS.

En el sitio de Mozilla se menciona que solo los dispositivos con Android 4 (aka Ice Cream Sandwich) están soportados.

Para Linux es necesario instalar los siguientes programas y para no compilar los fuentes y dependencias puedes usar un gestor de paquetes e instalar los programas rápido.

$ sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make

Necesitas instalar el programa Android Debug Bridge (ADB), instala el SDK de Android y posteriormente establece un par de variables de entorno como se muestra a continuación:

jacob@puerkita /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G $ cat /etc/profile.d/android.sh
 #!/bin/bash
export SDK_HOME=/home/jacob/Downloads/android/android-sdk-linux
 export ANDROID_TOOLS=$SDK_HOME/tools
 export PATH=$SDK_HOME/platform-tools:$ANDROID_TOOLS:$PATH

A continuación es necesario configurar ccache , ccache agiliza por ejemplo una re-compilación “cacheando” el resultado de previas compilaciones, los lenguajes soportados con C, C++, Objective C/C++

El valor por omisión para ccache es de 1GB , la compilación de Firefox OS satura muy rápido la cache de ccache , para dar un poco de mas espacio en disco usa el siguiente comando:

$ ccache --max-size 2GB

Ahora necesitamos obtener el codigo de FirefoxOS y para ello necesitamos clonar el repositorio de B2G usando Git.

$ git clone git://github.com/mozilla-b2g/B2G.git

Una vez terminado el proceso anterior debes cambiarte al directorio B2G

$ cd B2G

A continuación necesitamos saber con cual dispositivo se va instalar FirefoxOS o en el caso que solo quieras desarrollar pruebas puedes usar el emulador, en mi caso use un emulador para arm.

$ ./config.sh emulator

Las opciones de dispositivos soportados y emuladores es:

- galaxy-s2 – galaxy-nexus – nexus-s – nexus-s-4g – otoro – unagi – pandaboard – emulator – emulator-x86

Para compilar e instalar Firefox OS y una vez que te has situado en el directorio B2G , es escribir el siguiente comando:

./build.sh

Un punto interesante es que si tu computadora tiene mas de un core por procesador puedes aprovecharte de ello , por ejemplo para realizar el proceso de compilación de Firefox OS en paralelo puedes usar la siguiente opción, si tienes mas cores puedes usarlos, solo recuerda dejar algo de recursos para que tu puedas seguir trabajando mientras se compila Firefox OS ya que de lo contrario se puede quedar congelada tu computadora mientras el proceso termina.

./build.sh -j2

Dentro del directorio B2G hay un archivo de texto plano oculto el cual puedes editar para añadir opciones de compilación , por ejemplo si mueves hacia otra computadora o de directorio todo tu código de Firefox OS puedes indicar o también puedes establecer el numero de cores a usar , un punto interesante es que puedes definir que tipo de emulador vas a generar es decir basado en arm o x86, en mi caso DEVICE_NAME=emulator

$ cat .config
MAKE_FLAGS=-j2
GECKO_OBJDIR=/media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/objdir-gecko
DEVICE_NAME=emulator
DEVICE=generic
LUNCH=full-eng

En lo que termina puedes ir a tomar una o mejor dicho varias tazas de café ;)

Una vez que ha terminado el proceso puedes iniciar el emulador y antes de eso solo mencionar que hay 2 clases de emuladores , el primero basado en arm y el segundo sobre X86 siendo este mas rápido que arm , se recomienda usar arm .

Para iniciar el emulador :

Verifica si está corriendo ADB (Android Debugger)
el adb que viene dentro de Firefox OS (b2g) está en la siguiente dirección:

$B2G/out/host/<platform>/bin (Linux)
$B2G/out/host/darwin-x86/bin (Mac OS X)

jacob@puerkita /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G $ ps aux | grep adb
jacob     9754  0.0  0.0  14104   920 pts/2    S+   19:07   0:00 grep --colour=auto adb

Iniciar ADB server:

jacob@puerkita /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G $ out/host/linux-x86/bin/adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

Comprobar que ADB está corriendo:

jacob@puerkita /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G $ ps aux | grep adb
jacob    11428  0.0  0.0  20016   660 pts/0    Sl   19:44   0:00 adb fork-server server

Por omisión solo 512 MB de memoria ram y partición de disco son usados para cambiar estos parámetros puedes editar el script “run-emulator.sh”, en mi caso establecí 1GB de ram y disco.

export PATH=$PATH:$TOOLS_PATH
${DBG_CMD} $EMULATOR \
   -kernel $KERNEL \
   -sysdir $B2G_HOME/out/target/product/$DEVICE/ \
   -data $B2G_HOME/out/target/product/$DEVICE/userdata.img \
   -memory 1024 \
   -partition-size 1024 \
   -skindir $B2G_HOME/development/tools/emulator/skins \
   -skin HVGA \
   -verbose \
   -gpu on \
   -qemu $TAIL_ARGS

recordar que es un imagen que corre en Qemu, para especificar un dns para que tu emulador pueda resolver dominios en internet puedes añadir las opciones dentro del mismo script como lo hice yo, por ejemplo:

if [ "$DEVICE" = "generic_x86" ]; then
    EMULATOR=$TOOLS_PATH/emulator-x86
    KERNEL=$B2G_HOME/prebuilts/qemu-kernel/x86/kernel-qemu
else
    EMULATOR=$TOOLS_PATH/emulator
    KERNEL=$B2G_HOME/prebuilts/qemu-kernel/arm/kernel-qemu-armv7
    TAIL_ARGS="$TAIL_ARGS -cpu cortex-a8 -dns-server 10.128.128.128"

A continuación puedes lanzar el emulador

./run-emulator.sh

Básicamente esto es lo que se está ejecutando a traves del script “run-emulator.sh”

jacob     7585 94.5 11.6 1771812 434480 pts/1  Rl+  18:15  36:50 /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/out/host/linux-x86/bin/emulator64-arm -kernel /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/out/target/product/generic/ -data /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/out/target/product/generic/userdata.img -memory 512 -partition-size 512 -skindir /media/bsdfreedisk/all/Downloads/FirefoxOS/B2G/development/tools/emulator/skins -skin HVGA -verbose -gpu on -qemu -cpu cortex-a8

Algunas capturas de pantalla:

Nginx upload module

pues nada que Facebook tiene la culpa pues cada ves menos uso el blog para escribir…en fin.

En días pasados estuve trabajando con Galaxy para análisis de datos etc y etc, si bien es cierto que para usar Galaxy en modo “pro” , por así llamarlo, es necesario configurar e instalar una serie de dependencias por ejemplo PostgreSql, un servidor ProFtpd para usuarios virtuales, un servidor web y proxy como Nginx..etc y etc, sin embargo un problema que sucede es que al compilar Nginx, mi ejemplo:

./configure –prefix=/usr –with-http_ssl_module –with-http_perl_module –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/nginx_error.log –pid-path=/var/run/nginx/nginx.pid –lock-path=/var/lock/nginx/ –http-log-path=/var/log/nginx/nginx_access.log –add-module=/home/jacob/Downloads/bio/galaxy/nginx_upload_module-2.2.0 ; make

al compilar Nginx con el modulo para “uploads” en Linux Mint 13 hay un error y el error no es mas que el uso de una variable “sin uso” ya que gcc está tratando todos los warnings como error, la solución es muy sencilla , yo escogería alguna de estás opciones que seguro no son las únicas..

  1. Eliminas la variable.
  2. Editas el archivo “Makefile” y eliminas “-Werror”  al menos para la parte donde compila el fuente en cuestión.
  3. Inicializas a un valor nulo o en una sentencia haces uso de la variable , verifica con calma lo que sucede en el codigo fuente y listo.

La opción #1 no la recomiendo mucho puede que en alguna otra parte del código de Nginx haga referencia y te lleves sorpresas, cuestión de revisar.

El error:

/home/jacob/Downloads/bio/galaxy/nginx_upload_module-2.2.0/ngx_http_upload_module.c:1681:18: error: variable ‘result’ set but not used [-Werror=unused-but-set-variable]

¿ un parche ? hice uno pero no tiene ningún sentido , pierdes menos tiempo en editar el fuente o el archivo Makefile.

[ Bug #1 Fixed ] RPy – Python interface to the R Programming Language

En días pasados estuve trabajando un poco con Galaxy localmente en mi computadora, sin embargo la instalación normalita es muy sencilla pero si quieres algo ya mas “pro” es necesario leer la documentación del wiki, pero un problema que sucedió fue que al tratar de instalar la interfaz de programación en Python para R salieron algunos errores en el código de RPy por lo que esto me fastidio y tuve que, como regularmente me  pasa, arreglar el problema.

RPy necesita R compilado como librería compartida para eso necesitas compilar R con:

1. $./configure   – -enable-R-shlib  – -prefix=/usr

1.1 $make ; $make install (usar sudo o root)

2. establecer la variable de entorno para R (RHOME , R_HOME),en mi caso :

$sudo vim /etc/profile.d/libR.sh
#!/bin/bash
export RHOME=/usr/lib64/R
export R_HOME=$RHOME
export PATH=$PATH:$RHOME/bin

establecí 2 variables puesto que por el momento olvide el nombre de la variable de entorno para R  y como buen mexicano pensé “naa..cualquiera de esas 2 variables (RHOME, R_HOME) debe jalar..”

3. Configuración del entorno para R

$source /etc/profile.d/libR.sh
$sudo vim /etc/ld.so.conf.d/libR.conf
solo añadir “/usr/lib64/R/lib”

$ sudo ldconfig

Ahora si ya podemos instalar RPy

Después de descomprimir RPy  y tratar de instalar

sudo python setup.py install
RHOMES= [ ]
DEBUG= True
Setting RHOMES to  ['/usr/lib64/R']
Traceback (most recent call last):
File “setup.py”, line 109, in <module>
RVERSION = rpy_tools.get_R_VERSION(RHOME, force_exec=True)
File “/home/jacob/Downloads/bio/galaxy/dependencys/rpy/rpy-1.0.3/rpy_tools.py”, line 103, in get_R_VERSION
raise RuntimeError(“Couldn’t obtain version number from output\n”
RuntimeError: Couldn’t obtain version number from output
of `R –version’.

$ R –version
R version 2.10.0 (2009-10-26)

se ve claramente que RPy al tratar de obtener la versión no puede !!  y es que si analizas en detalle la salida y el código fuente en python se observa que no estaba pensado para versiones más allá del rango 0..9

veamos la linea 101 en el código que genera el problema:

ln101:  version = re.search(” +([0-9]\.[0-9]\.[0-9])”, output)

la expresión no corresponde a 2.10.0 , por lo que solo es necesario añadir otro rango en la expresión:

ln101: version = re.search(” +([0-9]\.[0-9][0-9]\.[0-9])”, output)

Ahora RPy ya puede leer algo como R version 2.13.0 (2011-04-13)

Hotot: The hottest new Twitter app for GNU/Linux

Hotot es una aplicación excelente para Twitter muy rápida.Aún no hay un versión estable para descargar pero puedes usar una versión de pruebas que funciona muy bien como te muestro en la siguiente captura de pantalla:

¿Como instalar Hotot en Ubuntu Linux?

1. añadir el repositorio en Ubuntu, yo hice las pruebas en Ubuntu 10.04 (Lucid)

sudo add-apt-repository ppa:hotot-team

2. instalar hotot

sudo apt-get update && sudo apt-get install hotot

Fixing Haskell Bioinformatic Library

Thanks Ketil

En días pasados arregle un problema con una librería escrita en Haskell para análisis bioinformatico y le sugerí al desarrollador ( Ketil ) sobre la solución y bueno..la tomo en cuenta y yo aprendí Haskell ;)

Blog original: http://blog.malde.org/index.php/the-haskell-bioinformatics-library/

Solución:

you will need to download and to install tagsoup 0.4

download from here:

http://hackage.haskell.org/package/tagsoup-0.4

then,  use following commands to install it :

runhaskell Setup configure
runhaskell Setup configure – -user
runhaskell Setup build
runhaskell Setup install

download bio-0.4 haskell source packages, then edit bio.cabal file like this:

Build-Depends: base>=3 && =1.2.0.0, binary, tagsoup= 0.9.1, containers, array,
parallel, parsec, random, old-time, mtl

QuickCheck to >=1.2 and tagsoup =1.2.0.0: using QuickCheck-2.1.0.3
Dependency tagsoup <=0.4: using tagsoup-0.4

ok, now install biohaskell lib using:

runhaskell Setup configure – -user
runhaskell Setup build

opps !!  you will see following error :

[18 of 43] Compiling Bio.Sequence.TwoBit ( Bio/Sequence/TwoBit.hs, dist/build/Bio/Sequence/TwoBit.o )

Bio/Sequence/TwoBit.hs:37:31:
Module `Test.QuickCheck’ does not export `check’

Fix ?, let’s do it,  open Bio/Sequence/TwoBit.hs haskell source file and locate line 37 with your vi or emacs editor

by default you will see:

import Test.QuickCheck hiding (check) — QC 1.0
– – import Test.QuickCheck hiding ((.&.)) — QC 2.0

please,  apply changes like :

- – import Test.QuickCheck hiding (check) — QC 1.0
import Test.QuickCheck hiding ((.&.)) — QC 2.0

this change is because I am using QuickCheck 2

ok, good , we are try to build once again :

runhaskell Setup build

opps error again :

[35 of 43] Compiling Bio.Util.TestBase ( Bio/Util/TestBase.hs, dist/build/Bio/Util/TestBase.o )

Bio/Util/TestBase.hs:81:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:85:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:90:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:98:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:105:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:109:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:117:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:125:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

Bio/Util/TestBase.hs:132:4:
`coarbitrary’ is not a (visible) method of class `Arbitrary’

you will need to edit bio.cabal, find Bio.Util.TestBase and delete it then save file.

runhaskell Setup install
Installing library in $HOME/.cabal/lib/bio-0.4/ghc-6.12.1
Registering bio-0.4…

ls $HOME/.cabal/lib/bio-0.4/ghc-6.12.1/
Bio HSbio-0.4.o libHSbio-0.4.a

ready, that’s all

ketil, what’s your opinion ?

Fixing Haskell 2010 broken compilation

Ahora necesito haskell para trabajar con algunas secuencias de 454, para instalar haskell es necesario instalar el compilador(ghc) y varias herramientas más, puedes consultar la siguiente liga de los paquetes que necesitas exactamente para ubuntu karmic y/o ubuntu lucid (10.04 LTS).

http://davidsiegel.org/haskell-platform-in-karmic-koala/

Al satisfacer los requisitos y compilar haskell , configure termina con el siguiente error (configure.log):

configure:3867: checking GL/gl.h presence
configure:3867: gcc -E  conftest.c
configure:3867: $? = 0
configure:3867: result: yes
configure:3867: checking for GL/gl.h
configure:3867: result: yes
configure:3875: checking for library containing glEnd
configure:3906: gcc -o conftest -g -O2   conftest.c -lz  >&5
/tmp/cc9dxvn2.o: In function `main':
/home/jacob/Downloads/haskell-platform-2010.1.0.0/conftest.c:31: undefined reference to `glEnd'
collect2: ld returned 1 exit status
configure:3906: $? = 1
configure:3906: gcc -o conftest -g -O2   conftest.c -lGL  -lz  >&5
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status

inmediatamente podemos inferir qué posiblemente no tenemos opengl instalado, pero previamente ya instalamos las dependencias necesarias,  revisando el irc de la gente de haskell (http://tuukka.iki.fi/tmp/haskell-2009-06-06.html) encontré que un usuario estaba reportando el mismo problema, pero ninguna solución en concreto, por lo que decidí invertir tiempo y meterme como acostumbro a la raíz de los errores o problemas.

el problema son dos enlaces, el primero es un enlace de /usr/lib/libGL.so que apunta a /usr/lib/mesa/libGL.so, para empezar estaba roto el enlace y los 2 enlaces apuntan a nada, solo hay que enlazar como muestro a continuación:

jacob@puerca:~/Do$ sudo unlink /usr/lib/mesa/libGL.so 
jacob@puerca:~/Do$ sudo ln -s /usr/lib/libGL.so.1 /usr/lib/mesa/libGL.so
jacob@puerca:~/Do$ ls -l /usr/lib/mesa/
total 4
-rw-r--r-- 1 root root 14 2010-04-15 04:47 ld.so.conf
lrwxrwxrwx 1 root root 19 2010-06-01 23:14 libGL.so -> /usr/lib/libGL.so.1

ahora la salida de configure:

checking GL/gl.h usability... yes
checking GL/gl.h presence... yes
checking for GL/gl.h... yes
checking for library containing glEnd... -lGL
checking GL/glu.h usability... yes
checking GL/glu.h presence... yes
checking for GL/glu.h... yes
checking for library containing gluNewQuadric... -lGLU
checking GL/glut.h usability... yes
checking GL/glut.h presence... yes
checking for GL/glut.h... yes
checking for library containing glutMainLoop... -lglut
configure: creating ./config.status
config.status: creating scripts/config

despues solo hacer make ; make install