Ubuntu como alternativa a Windows XP

ubuntu-logo32
La comunidad de Ubuntu ha iniciado una campaña de migración para todos aquellos usuarios que quedaran sin soporte a partir de este 8 de Abril, ya que Billy finalmente dará muerte al unico sistema que se ha ganado a pulso el titulo de sistema operativo universal ;-).

flyer_xp-to-xubuntu_USletterAsí pues, todos aquellos interesados y fanáticos de Ubuntu pueden colaborar con la campaña haciendo eco mediante el material gráfico disponible en Spread Ubuntu. Personalmente tengo mis dudas de la factibilidad de Ubuntu como reemplazo a Windows XP, ya sea por cuestiones de hardware o por el pésimo soporte que he recibido en aplicaciones comerciales en Linux. Siendo así , solo diré que aun falta camino por recorrer pero este es un paso importante :-).

Porque la gallina cruzó el camino

eniavlys-chicken-tux

Esta es una traducción liberal de un post de posgraduando, un blog bastante popular entre los estudiantes de postgrado en Brasil. Al momento de escribir esto estoy ya cansado de escribir textos académicos así que decidí mudar un poco para no morir de locura, confieso que me pareció bastante divertido.

Platon: “Porque buscaba alcanzar el bien”.

Aristóteles: “Es de la naturaleza de las gallinas cruzar el camino”.

Freud: “La preocupación con el hecho de que la gallina cruzó el camino es un síntoma de inseguridad sexual».

Maquiavelo: “¿A quien le interesa el porque? Establecido el objetivo de cruzar el camino, es irrelevante discutir los medios utilizados para eso”.

Marx: “El estado actual de las fuerzas productivas exigía una nueva clase social de gallinas, capaces de cruzar el camino”.

Einstein: “Si la gallina cruzó el camino o si el camino se movió con respecto a la gallina, depende del punto de vista. Todo es relativo”.

Sócrates: “Solo se que no se nada”.

Parmenides: “La gallina no atravesó el camino porque no puede moverse. El movimiento no existe”.

Darwin: “A lo largo de grandes periodos de tiempo, las gallinas han sido seleccionadas naturalmente, así pues, ahora son genéricamente predispuestas a cruzar caminos”.

Blaise Pascal: “¿Quien sabe? El corazón de la gallina tiene razones que la propia razón desconoce”.

Sartre: “Se trata de una mera fatalidad. Con su existencia la gallina esta en libertad de cruzar el camino”.

Nietzsche: “Ella desea superar su condición de gallina, para convertirse en una supergallina”.

Richard Dawkins: “Realmente los genes para cruzar caminos son los que están de hecho cruzando el camino. La gallina es solamente una forma en que los genes se encontraron para realizar esa tarea”.

Pavlov: “Porque antes yo hacia sonar una campanilla y ofrecía alimento a la gallina al otro lado del camino. Ahora, después de varios experimentos similares, basta con tocar la campanilla sin dar alimentos para que ella cruce el camino”.

Hipócrates: “Debido a un exceso de humor en su páncreas».

Kant: “La gallina solamente siguió el imperativo categórico propio de las gallinas. Es una cuestión de razón practica”.

Esotericos: “La gallina cruzó el camino porque era un acontecimiento necesario. Es el destino. Ya estaba previsto por la orden universal del cosmos”.

Epicúreos: “Es de placer para las gallinas cruzar caminos. ¿Ud. que piensa amigo?”

Filósofos de la escuela de Frankfurt: “Es una cuestión mediocre impuesta por los mentores de arte de multitudes que transformó la imagen de una gallina en otro producto de la industria cultural”.

Filósofos medievales: “Para responder a tal pregunta, debemos primero analizar si la expresión “gallina” es un termino que carece de sentido o si la palabra expresa la idea genérica universal de gallina, o incluso si se trata de una gallina concreta y particular”.

Schopenhauer: “En el acto de cruzar, esta huyendo de si misma en un intento de aliviar la tensión y el sufrimiento que representa el estar vivo en este mundo sin sentido”.

Newton: 1) “Gallinas en reposo tienden a ficar en reposo;  gallinas en movimiento tienden a cruzar el camino”. 2) “Fue causado por la atracción gravitacional ejercida por otras gallinas que ya se encontraban al otro lado del camino”.

Encuesta comunitaria Java EE 8

Duke14
Por si aun no lo han notado, se encuentra disponible la segunda parte de la encuesta comunitaria para darle forma al próximo lanzamiento de Java EE.

¿Piensan que Oracle no esta llevando por buen rumbo Java EE?
¿Han pensado que JPA debería aumentar su soporte a bases de datos NoSQL?
¿Les gustaría un mayor soporte a Node.js?
¿Tienen en mente alguna mejora para trabajar con Java EE en la nube?

¡Es momento de expresarse!

De acuerdo a los reportes de Oracle la primera etapa tuvo una respuesta abrumadora . . . sin embargo aun están a tiempo de participar en ambas partes de la encuesta.

 

[QuickTip] Generar un archivo de configuración .config a partir del kernel en ejecución

tux

El archivo .config (generalmente ubicado en /usr/src/linux/.config) es el encargado de almacenar el listado de piezas (módulos) a ser compiladas e incluidas o enlazadas hacia nuestro kernel. Dicho de otra forma, es el mapa de ADN de nuestro Linux y se vuelve un archivo fundamental que debe ser resguardado para reutilizarlo a la hora de actualizar nuestro sistema.

No entanto, en el caso que este archivo desaparezca o un rm se ejecute a la ligera, es posible dotar a nuestro kernel con la capacidad de exponer hacia el usuario las configuraciones con las que fue creado.

Paso 1 – Habilitar la creación de .config a partir de un kernel en ejecución

Para que un kernel en ejecución pueda «exponer su ADN» primero tiene que tener esta capacidad.  Así, la primera vez que compilemos nuestro kernel debemos de habilitar la opción CONFIG_IKCONFIG_PROC disponible en:

General setup
│ -> Kernel .config support (IKCONFIG [=y])

 Paso 2 – Generar un archivo .config

Si en algún momento necesitamos ver y salvar la configuración de nuestro kernel, basta con utilizar zcat y un redirect

1
zcat /proc/config.gz > .config

Así, tendremos siempre un respaldo vivo de la configuración de nuestro kernel :).

Como instalar Gentoo en un telefono Nexus 5

android
Recientemente llego a mis manos un teléfono Nexus 5 que cuenta con hardware bastante interesante (y una bocina que convierte a Manowar en zarabanda locochona) por lo que decidí aprovecharlo e instalarle la mejor distribución Linux del universo, Gentoo Linux.

Para instalar Gentoo en un teléfono con Android, es necesario apoyarse de un proyecto desarrollado durante el GSOC-2013 denominado Gentoo RAP. RAP es una variante de Gentoo prefix que permite utilizar los ejecutables de Gentoo en paralelo a los ejecutables de Android en una ruta diferente a /, con lo que es posible utilizar Gentoo sin todas las limitaciones de un chroot como el que se crea con LinuxOnAndroid y que dicho sea de paso no soporta Gentoo.

La instalación en Android puede realizarse de dos formas, 1) haciendo bootstrap (compilando un stage desde 0 en el dispositivo)  o 2) descargando un pre-compilado para ARM-v7 como se indica en la wiki. En mi caso utilicé el segundo método, el cual traduzco/comento en esta guiá.

1) Prerrequisitos
*  Asegurarse que tenemos el bootloader liberado y con acceso root (acá dos guiás para obtener root);
* Instalar alguna implementación de busybox (yo recomiendo esta);
* De preferencia utilizar superuser como administrador de root;
* Habilitar el acceso ssh al dispositivo (recomiendo esta aplicación) o instalar en el dispositivo un emulador de terminal (yo recomiendo este).

2) Descomprimiendo el stage

El primer paso es obtener root

1
$ su

Luego procedemos a descargar el stage de Gentoo en cualquiera de los mirrors del proyecto, basta con ejecutar el siguiente comando que convenientemente realizó en /data

1
busybox wget http://gentoo.c3sl.ufpr.br/experimental/prefix/rap/gentoo.tar.bz2

Una vez con el stage listo procedemos a descomprimirlo

1
busybox bzip2 -dc gentoo.tar.bz2 | busybox tar -xf - -C /data

Este paso deberia crear una carpeta llamada /data/gentoo que es la base de nuestro Gentoo prefix.

3) Hacks previos a usar el prefix

Una vez listo el prefix es necesario que  algunos ejecutables clave para compilar sean visibles, especificamente env, sh y pwd, para esto se pueden utilizar los incluidos en el prefix mediante  enlaces simbólicos, primero remontamos / con permisos de escritura

1
/system/bin/mount -o remount,rw /

Y creamos los enlaces simbólicos

1
2
mkdir /bin; cd /bin; ln -s /data/gentoo/bin/sh; ln -s /data/gentoo/bin/pwd
mkdir -p /usr/bin; cd /usr/bin; ln -s /data/gentoo/usr/bin/env

Por ultimo también es recomendable crear /tmp ya que algunos ebuilds lo utilizan para compilar.

1
mkdir /tmp; /system/bin/mount -t tmpfs tmpfs /tmp

4) Iniciando nuestro prefix

Una vez listo el sistema, procedemos a iniciar nuestro prefix ejecutando el script en /data/gentoo/startprefix, si todo sale bien pues bienvenidos a Gentoo!

2013-12-08 18.35.20

5) Usar el prefix como root

A menos que realicemos un chmod sobre /data/gentoo, por defecto la instalación y portage solo podrá ser usada por root. No entanto algunas implementaciones de su para Android como SuperSu, utilizan una shell diferente para los usuarios normales y para root, lo cual podemos verificar mediante la variable de entorno $SHELL.

2013-12-08 18.46.55

Si este fuera el caso, lo más probable es que al iniciar el prefix como root el script falle, sin embargo basta con sobreescribir la variable $SHELL para usar la shell por defecto que en el caso de Android es /system/bin/sh

1
export SHELL=/system/bin/sh

Y listo, ahora podemos utilizar Gentoo con todo su poder

2013-12-08 18.52.46

Es conveniente que antes de cualquier cosa actualicemos portage y agreguemos el overlay de heroxbd el principal desarrollador del port.

1
2
emerge --sync
layman -s heroxbd

La parajoda de Glassfish

GlassFishMedium
Comienzo esta entrada con la frase de un twitt que me llego de rebote y me gustó bastante

La traducción liberal seria «La paradoja de Glassfish: Nadie paga soporte. Pero si se cancela el soporte como consecuencia de esto,  el producto se considera muerto»

El dia  4 de noviembre Oracle hizo publico el plan de desarrollo actualizado de Glassfish y lo que parecía ser un secreto a voces finalmente paso: el soporte comercial a Glassfish fue cancelado, lo que tomo a todos por sorpresa ya que Glassfish es despues de JBoss el servidor de aplicaciones más popular.

Cuando estaba en la Universidad tuve la oportunidad de aprender JEE sobre el otrora famoso J2EESDK que incluía Java System Application Server, la base de lo que hoy es Glassfish. Sin embargo mi profesor inicio la charla con la siguiente sentencia:

Durante el aula aprenderemos desarrollo J2EE utilizando J2EESDK sin embargo en la ultima semana migraremos nuestros programas a JBoss para que aprendan como configurar servidores que pueden ser usados en producción

En ese entonces JBoss era el rock star de Java EE , y fue asi que Sun se puso a la carga construyendo al Glassfish que conocemos hoy en dia y que Oracle termino heredando. Con el pasar del tiempo Glassfish se convirtió en un killer app server, a tal punto que los mejores libros para aprender JEE como el de Antonio Goncalves fueron creados usando ejemplos para Glassfish.

Habiendo trabajado durante tres años con servidores de aplicaciones Java (uno con JBoss y otros dos con Glassfish) puedo decir que Glassfish tiene todos los méritos para ser ese killer app server del que todos estamos enamorados. Y como era de esperarse, las reacciones a la noticia no se hicieron esperar con algunos grandes nombres del mundo Java llamando a la calma, otros escribiendo obituarios para Glassfish y otros asegurando que Glassfish se convertira en un producto de juguete, tal cual Java System Application Server.

Revisando twitter, las reacciones no son diferentes, acá algunas de las que más me gustaron:

Habiendo dicho esto ¿que opciones tienen todos aquellos que están tristes por Glassfish?

Opción 1: Confiar en Oracle y WebLogic
Como bien Oracle ha apuntado, el soporte de WebLogic es incluso más barato que el de Glassfish y a la espera de un claro plan de migración de aplicaciones de Glassfish hacia entornos de producción Weblogic, esta podria ser una solución para todos aquellos que confían en Oracle para tener soporte.

Opción 2: Migrar a WildFly o TomEE

WildFly y TomEE son los chicos nuevos de la cuadra, mientras WildFly comparte una base de codigo con JBoss AS, TomEE ofrece soporte total a su solución de software libre y de hecho soporta los descriptores de deployment de Glassfish. Es aqui que se debe probar que una de las virtudes de JEE es la relativa independencia de los proveedores de soluciones al ser implementaciones de un standard. Como buena noticia, ya el equipo de Netbeans ha facilitado la integración de TomEE con el IDE,

Opción 3: Confiar en la naturaleza del open source y remangarse la camisa
Por si no lo notaron, una situación similar ya ocurrió en el pasado cuando IBM dejo de dar soporte comercial a Apache Geronimo. Sin embargo ante la falta de IBM, no una sino varias empresas proveen soporte al mismo. Y es que esa es la naturaleza del Open Source, independientemente si Oracle cancelo la versión comercial por no ser tan rentable como esperaba (para lo cual están en su derecho), el código siempre ha estado ahí a disposición de la comunidad. Ya lo ha dicho la propia gente de TomEE, si están tristes y quieren culpar a alguien, primero háganse esta pregunta:

¿Como esta mi contribución a Glassfish en relación a la contribución dada por Oracle?

Y si la respuesta no los satisface, pues es momento de colaborar con Glassfish. Glassfish seguirá siendo la RI de la plataforma JEE y seguirá teniendo patronicio de Oracle, así que de ustedes depende que siga siendo ese killer app server del que nos enamoramos o que todo termine en un repositorio con poco movimiento y consignas hippies.

geek-sources el kernel más genial para Gentoo que probablemente no conoces

explore_linux_kernelUna de las mayores ventajas de utilizar una distribución para «usuarios avanzados» como es el caso de Gentoo, Arch, Slackware y Debian, son las opciones de flexibilidad. Donde flexibilidad significa las infinitas posibilidades para modificar el sistema creando un sistema único y acorde a necesidades especificas. En este rubro Gentoo Linux tiene una participación destacada ya que el mismo ofrece opciones interesantes para desarrolladores que solo son posibles a través de la compilación de paquetes y el kernel Linux no es la excepción.

Desde hace varios años Gentoo ofrece la posibilidad de utilizar diferentes versiones del kernel Linux para nuestro sistema operativo y aunque los desarrolladores de Gentoo separan los kernel disponibles en dos grandes grupos (soportados y no soportados) experimentar es gratis ;-).

¿Cuales versiones de kernel existen?
Cuando el kernel comun de Gentoo (gentoo-sources) no es suficiente o se necesitan más opciones, es bastante común optar por versiones  experimentales. Para ver todas las versiones disponibles basta con hacer un emerge –search sources y obtener el listado completo, entre estas puedo destacar:

  • vanilla-sources (codigo fuente integro publicado en kernel.org)
  • ck-sources (una variante de vanilla-sources con los parches de Con Kolivas)
  • tuxonice-sources (una variante de gentoo-sources con soporte para los parches tuxonice)
  • pf-sources (una variante del kernel vanila-sources, incluyendo los parches ck, ukms, bfq y tuxonice)
  • hardened-sources (una variante de gentoo-sources como parte del proyecto Gentoo Hardened)

¿Porque geek-sources es especial?

Uno de los problemas de elegir entre una u otra implementación es que los subconjuntos de características son mutuamente excluyentes entre kernels. Por ejemplo (como fue mi caso) al elegir pf-sources se gana el escalonador BFQ (nuevo rockstar del desempeño), pero se pierden los parches específicos del proyecto Gentoo, o si se opta por tuxonice-sources se gana la hibernación mejorada pero se pierden los parches de alto desempeño presentes en pf. Es aqui donde geek-sources llega al rescate.

geek-sources es un proyecto creado por el equipo del overlay init6 cuyo objetivo es tener lo mejor de todos los kernels en una sola instalación. Dicho de otra forma es un kernel diseñado para crear hibridos entre las versiones tradicionales de kernels presentes en Gentoo acorde a nuestras necesidades.

¿Como instalo geek-sources?

El primer paso es instalar el soporte para init 6 con layman:

1
layman -a init6

Luego verificamos las use flags que tiene disponibles, con emerge (buscar con eix y/o gentoolkit tambien es opción)

1
emerge --pretend --verbose geek-sources

Al momento de este articulo, geek sources contiene las siguientes flags:

1
[ebuild   R    ] sys-kernel/geek-sources-3.10.17:3.10::init6  USE="-brand -gentoo -pf -reiser4 -aufs -bfq -bld -build -cjktty -ck -deblob -fedora -grsec -ice -lqx -mageia -optimization -pax -rsbac -rt -suse -symlink -uksm -zen -zfs" 0 kB

Como se puede observar en la información del emerge, geek-sources soporta varias use flags donde cada use flag habilita variantes de kernel (pf,ck,fedora,lqx,mageia,gentoo) o características individuales (reiser4,brand,bfq,build,deblob). Así pues el kernel resultante dependerá de cuales use flags queramos activar. La descripción completa se encuentra en el repositorio de Github del proyecto, del cual copio el diagrama de módulos:

relationship_of_patches_in_geek-sources

Como se observa en la gráfica variantes como pf, ck o gentoo funcionan como conjuntos de otros parches que a su vez pueden ser activados de forma individual y la elección dependerá de nosotros. Vale la pena resaltar que si por ejemplo se activa la variante pf y el parche tuxonice (incluido en pf) el ebuild se encargara automáticamente de aplicar los parches por prioridad que puede ser sobreescrita con la variable  GEEKSOURCES_PATCHING_ORDER en el archivo /etc/portage/kernel.conf. El orden predeterminado es el siguiente:

GEEKSOURCES_PATCHING_ORDER=»zfs optimization pax lqx pf zen bfq rifs ck cjktty gentoo grsec rsbac ice rh reiser4 exfat rt bld uksm aufs mageia fedora suse ubuntu xenomai brand fix upatch squeue»

Es asi que, para crear nuestro kernel, basta con activar las use flags ya sea globalmente o en el archivo package.use. Por ejemplo si se desea la variante pf, con los parches de Gentoo y el logo de larry the cow al inicio del proceso de arranque, se han de activar las flags gentoo, pf y brand usando package.use

1
echo "sys-kernel/geek-sources pf gentoo brand" >> /etc/portage/package.use

Luego se procede a instalar el código fuente con

1
emerge sys-kernel/geek-sources

Es aqui que el emerge preparara el código fuente y preparar un archivo .config si fuera posible, para que posteriormene el kernel sea compilado con los pasos habituales en Gentoo.

Y si todo sale bien, al reiniciar nuestro computador la salida debería ser similar a la siguiente :D:
geek

Un motivo más para utilizar Gentoo Linux y sus hijos.

 

 

Java Day Guatemala 2013

rsz_afiche

El grupo de usuarios y desarrolladores Java de Guatemala -Guatejug- les hace la cordial invitación para formar parte de este evento en su tercera edición.

Las actividades del grupo se han realizado por y para la comunidad y el Java Day de este año no es la excepción, en esta oportunidad la organización del evento ha creado un website especial para estar al tanto de las ultimas noticias:

http://www.guate-jug.net/jday13/

El evento sera realizado el sábado 9 de noviembre en el centro TICS del INTECAP en la calle del estado Mateo Flores de la ciudad de Guatemala, la entrada es totalmente libre.

Si existe algún interesado en participar como expositor aun hay espacios abiertos y se puede contactar con la organización a través de los diversos medios de comunicación utilizados por el grupo, disponibles en el website principal:

http://www.guate-jug.net/

Regresa la fanpage de Gentoo Linux

Gentoo LogoPara los que aun no lo han notado, existe una Facebook fanpage de Gentoo Linux con poco más de 10k likes (lo cual ya es destacable para una distribución como Gentoo).

Resulta que, esta fanpage fue creada por algun desarrollador de Gentoo que despues de un tiempo decidió borrar su cuenta en Facebook y la misma nunca fue considerada oficial o tuvo alguna información oficial. Sin embargo el equipo de relaciones publicas de Gentoo (gentoo-pr) decidio rehabilitarla y llevar a la red de Mark la palabra de Larry :).

De momento la pagina servirá como punto de contacto entre los usuarios/aficionados a Gentoo, noticias ocasionales de Gentoo y serán publicadas las noticias a partir del rss de Planet Gentoo. Asi que para todos los que sean usuarios de Facebook y Gentoo, no olviden pasar y dejar su like.

Historia original: http://dilfridge.blogspot.com.br/2013/10/gentoo-on-facebook.html

[QuickTip] Eliminar URL de template IEEEtran

tex

Recientiemente tuve la necesidad de utilizar el template del IEEE para conferencias, el cual es tal vez el template universal en ciencias de la computación a la par del template de la ACM.

El evento tenia un requerimiento bastante particular y era que las referencias no debían llevar el url de origen. Sin embargo Mendeley genera automáticamente este campo con lo que estaba en la encrucijada si esperar hasta el ultimo día para hacer una copia del archivo .bib generado o editar el template, con lo cual encontré un thread interesante en stack overflow con la solución.

Si utilizamos el template de IEEE instalado en el sistema, basta con que descarguemos el template del sitio original y conservemos el archivo IEEEtran.bst que contiene el estilo bibliográfico para luego aplicarle el siguiente parche:

--- IEEEtran.bst.orig
+++ IEEEtran.bst
@@ -403,7 +403,6 @@
default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
default.name.format.string 'name.format.string :=
default.name.latex.cmd 'name.latex.cmd :=
-  default.name.url.prefix 'name.url.prefix :=
}

@@ -1080,7 +1079,7 @@
if$
"\begin{thebibliography}{"  longest.label  * "}" *
write$ newline$
-  "\providecommand{\url}[1]{#1}"
+  "\def\url#1{}"
write$ newline$
"\csname url@samestyle\endcsname"
write$ newline$

Para aplicar el parche podemos guardar el texto anterior en un archivo IEEEtran.bst.patch en el mismo directorio donde se encuentre nuestro archivo IEEEtran.bst que a su vez debe estar en el mismo directorio que nuestro archivo .tex, luego basta con parcharlo usando la linea de comandos

1
patch < ./IEEEtran.bst.patch

El resultado debe ser similar al siguiente, como se observa el campo URL se ha eliminado:

Selection_003