Monthly Archives: May 2011

Recuperar Adwaita, el tema por defecto de GNOME3

Introducción.

Hace unos días instalé GNU/Linux Ubuntu 11.04 en uno de mis portátiles.  Aburrido con Unity lo reemplacé con GNOME3 instalado desde repositorios.  También estuve experimentando con otros escritorios que son de mi agrado: XFCE y LXDE los cuales se instalaron de manera independiente y podían elegirse libremente desde el GDM.

Aparentemente cuando se desinstalaron algunos de los componentes de estos manejadores de escritorio adicionales, desinstalaron partes necesarias de GNOME3 haciendo que su tema se modificara y apareciera diferente. El tema de GTK3 perdido era Adwaita, el cual como se puede intuír es el tema por defecto que utiliza GNOME3 para desplegar su escritorio.

A continuación se detallan los breves pasos necesarias para recuperar el tema perdido e instruír a GNOME para que lo utilice por defecto.

Procedimiento.

Instalar o reinstalar el paquete faltante en el cual se encuentra el tema requerido.

$ sudo aptitude install gnome-themes-standard

Instalar GnomeTweak para realizar el ajuste del tema.

$ sudo aptitude install gnome-tweak-tool

Ejecutar gnome-tweak-tool y bajo la sección Interface del panel izquierdo, modificar las opciones GTK+ Theme y Cursor Theme para que utilicen a Adwaita.

Gnome Tweak Tool > Interface

Gnome Tweak Tool > Interface

Finalmente se deberá reiniciar la sesión de usuario para que los cambios en esta sean tenidos en cuenta.

Primeros pasos con PhoneGap para Android

Introducción.

PhoneGap en pocas palabras es un framework para el desarrollo de aplicaciones móviles que posibilita a los desarrolladores a que implementen sus proyectos utilizando las tecnologías estándar de web: HTML5, CSS3 y Javascript, y este las convierte a aplicaciones híbridas, es decir, aplicaciones nativas de las diferentes plataformas móviles existentes que tienen acceso a gran parte del API nativo.

Tomado de http://www.phonegap.com/

Tomado de http://www.phonegap.com/

Esto lo logra empaquetando la aplicación web original con un navegador basado en webkit para desplegarla como si fuera una aplicación verdaderamente nativa.

Actualmente este framework soporta seis de las principales plataformas móviles del mercado: iOS, Android, Blackberry, PalmOS, Windows Mobile y Symbian.  Para mas información acerca del estado actual del soporte en cada una de estas plataformas consultar las características soportadas.

Existen otros frameworks similares a este entre los que se destacan Appcelerator Titanium, Mobl y Sencha Touch de los cuales espero estar escribiendo mas adelante.

En este artículo se describirá el proceso de instalación de PhoneGap, la creación de un proyecto base para el desarrollo con este framework y la elaboración de un ejemplo simple.

Instalar PhoneGap.

Descargar la última versión disponible del framework desde la siguiente ubicación.

https://code.google.com/p/phonegap/downloads/list

Para efectos de la documentación se utilizará la versión 0.9.5.1 que corresponde con las mas reciente para esta fecha.

$ wget http://phonegap.googlecode.com/files/phonegap-0.9.5.1.zip

Se descomprime el paquete recién descargado y se mueve a su ubicación final.

$ unzip phonegap-0.9.5.1.zip

$ mkdir ~/phonegap

$ mv phonegap-0.9.5.1 ~/phonegap/0.9.5.1

Crear la plantilla base de un proyecto Android.

A continuación se relacionan los pasos que se deben realizar para crear un proyecto PhoneGap para Android utilizando Eclipse y el plugin ADT instalados anteriormente.

Iniciar Eclipse y crear un nuevo proyecto a través del menú File > New > Android Project.

Crear un nuevo proyecto Android

Crear un nuevo proyecto Android

En el diálogo de información del proyecto a crearse especificar al menos los siguientes campos y presione el botón Finish para continuar.

  1. Nombre del proyecto (project name).
  2. API de Android a utilizarse (build target).  En este caso se utilizará el API 2.2.
  3. Nombre de la aplicación (application name).
  4. Crear una actividad (create activity).
Información básica del proyecto Android

Información básica del proyecto Android

En el Explorador de Paquetes (package explorer)  de Eclipse crear bajo el proyecto una carpeta /assets/www y otra /libs.

Copiar en la carpeta /assets/www el archivo phonegap.0.9.5.1.js y copiar en /libs el archivo phonegap.0.9.5.1.jar.  Ambos archivos se encuentran bajo el directorio ~/phonegap/0.9.5.1/Android creado durante el paso de instalación anterior.

Estructura del proyecto Android

Estructura del proyecto Android

Hacer clic derecho sobre el directorio /libs y seleccionar el menú Build Path > Configure Build Path… Allí en la pestaña Libraries agregue la referencia a /libs/phonegap.0.9.5.1.jar presionando el botón Add JARs…

Agregar al proyecto la referencia al JAR de PhoneGap.

Agregar al proyecto la referencia al JAR de PhoneGap.

Realizar las siguientes modificaciones al código fuente de la actividad.  Este archivo se ubica bajo la carpeta /src del proyecto (/src/com.jimezam.phonegap.demo/App.java en este caso).

  1. Reemplazar la línea 3 (import android.app.Activity;) con la siguiente: import com.phonegap.*;
  2. En la línea 6 cambiar la superclase de App de Activity a DroidGap.
  3. Reemplazar la línea 11 (setContentView(R.layout.main);) con la siguiente: super.loadUrl("file:///android_asset/www/index.html");
Modificaciones a la actividad inicial.
Modificaciones a la actividad inicial.

Hacer clic derecho sobre el archivo AndroidManifest.xml y seleccionar el menú Open With… > Text Editor.  A este documento realizar las siguientes modificaciones.

1. Agregar el siguiente texto entre la apertura de la etiqueta <manifest> y la apertura de la etiqueta <application>.

<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true"
/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2. Agregar el siguiente atributo a la etiqueta <activity>.

android:configChanges="orientation|keyboardHidden"

Modificaciones al documento AndroidManifest.xml.

Modificaciones al documento AndroidManifest.xml.

Finalmente crear el archivo /assets/www/index.html con el código fuente para la demostración.

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap demostration with Android</title>
<script type="text/javascript" charset="utf-8" src="phonegap.js"></script>
</head>
<body>
<h1>Hello Android's World with PhoneGap</h1>
</body>
</html>

Ejecutar el proyecto en el emulador.

Seleccionar el menú Run > Run As > Android Application.

Ejecutar como aplicación Android.

Ejecutar como aplicación Android.

Estos son un par de ejemplos de aplicaciones web simples ejecutándose con PhoneGap en el emulador de Android.

Hola Mundo web con Android

Hola Mundo web con Android

The Simple List 0.1

The Simple List 0.1

Enlaces.

Activar las tarjetas WiFi Broadcom en Linux Mint 11

Introducción.

Como ya es conocido, en algunos casos es necesario realizar un procedimiento muy simple después de instalar algunas distribuciones de GNU/Linux para que se tenga acceso a las tarjetas WiFi Broadcom, las cuales son incluídas en equipos Dell.  Esto se debe a que las distribuciones no instalan por defecto los módulos del kernel respectivo.

Este tema lo he tratado en anteriores ocasiones desde diferentes ángulos.  La primera aproximación consiste en instalar directamente los paquetes faltantes, para hacer eso es necesario tener acceso a Internet así que será necesario conectar temporalmente el equipo a la red alámbrica.  Posteriormente descubrí que los paquetes necesarios vienen en los medios de instalación (al menos de Ubuntu y derivados) y es así como surge la segunda aproximación la cual consiste en instalar los paquetes directamente de la LiveUSB (o LiveCD) de instalación.

Para Linux Mint es posible seguir cualquiera de las dos aproximaciones, sin embargo si se desea realizar la segunda deberá tenerse en cuenta que la partición con los paquetes es de tipo SQUASHFS y por ende tendrá que montarse antes de acceder a ellos.  En este artículo se detallará el procedimiento para realizar la segunda aproximación que no requiere de acceso a Internet, adaptado a esta distribución de GNU/Linux.

Solución.

Se crea un punto de montaje temporal para la partición de los paquetes de la LiveUSB que podrá ser borrado posteriormente.

$ mkdir /tmp/paquetes

Se inserta la LiveUSB en el equipo y se monta la partición de los paquetes en el punto de montaje anterior.  Reemplace la ruta /media/LIVEUSB/ por la ubicación real donde se encuentra montado el medio de instalación.

$ sudo mount -o loop -t squashfs /media/LIVEUSB/casper/filesystem.squashfs /tmp/paquetes

Instalar los paquetes necesarios para activar las tarjetas WiFi Broadcom.  Actualice de ser necesario los nombres de los archivos incluyendo la versión que corresponda con su distribución, en este caso se utilizó Linux Mint 11 (Katya).

$ sudo dpkg -i /tmp/paquetes/usr/share/local-repository/binary/dkms_2.1.1.2-5ubuntu1_all.deb

$ sudo dpkg -i /tmp/paquetes/usr/share/local-repository/binary/bcmwl-kernel-source_5.100.82.38+bdcom-0ubuntu3_i386.deb

Finalmente desmonte la partición de los paquetes y remueva el punto de montaje temporal.

$ sudo umount /tmp/paquetes ; rmdir /tmp/paquetes

Reinicie el equipo para que los paquetes recién instalados sean tenidos en cuenta.

De ser necesario utilice la aplicación de Additional Drivers (jockey-gtk) para activar el controlador.

Enlaces.

vesamenu.c32: Not a COM32R image

Introducción.

Ubuntu y sus derivados incluyen una utilidad propia muy útil para generar sus propias LiveUSB (con persistencia) llamada Startup Disk Creator (usb-creator-gtk).

Las versiones incluídas en las distribuciones basadas en Ubuntu 10.x y 11.x vienen con problemas entre este software y la versión de syslinux instalada, lo cual provoca que las LiveUSB generadas no inicien normalmente y muestren el siguiente mensaje.

vesamenu.c32: Not a COM32R image
boot:

Solución.

Existen dos soluciones para este problema, una primera solución es temporal y a pesar de que permite ejecutar exitosamente el sistema operativo incluído en la LiveUSB, no resuelve el problema y debe realizarse cada vez que se utilice la unidad.  Una segunda solución es mas dispendiosa que la primera pero resuelve por completo el problema presentado con las imágenes de las LiveUSB generadas.

Solución #1: temporal.

En el prompt, después de que se muestre el mensaje mencionado anteriormente escribir la palabra live y presionar Enter.  Es posible que se deba presionar la tecla tab para poder acceder al prompt.

Solución #2: definitiva.

Es necesario actualizar el paquete syslinux a una versión mas reciente.  Para hacer esto se deberán obtener los paquetes syslinux y syslinux-common desde la siguiente ubicación.

http://mirrors.kernel.org/ubuntu/pool/main/s/syslinux/

Para mayor información consulte este artículo relacionado.

Actualizar GNU/Linux Mint 10 (Julia) a 11 (Katya) mediante APT

Introducción.

Linux Mint es una distribución de GNU/Linux basada en Ubuntu, al cual le añaden mejoras propias tanto en interfaz de usuario como en aplicaciones propias.  Así mismo facilitan la instalación del sistema operativo en los clientes de escritorio al incluír incorporadas las aplicaciones y codecs mas utilizados.  Esta distribución incluye software que no se encuentra cobijado por licencias libres así que, al igual que Ubuntu, no es del total agrado de los puristas del tema.

En mi caso personal lo he utilizado en uno de los portátiles durante dos periodos diferentes de tiempo y me ha agradado.  No soy un usuario que utilice aplicaciones extrañas o que pase horas personalizando el escritorio así que para hechos prácticos, esta distribución es muy similar a Ubuntu con cositas interesantes preinstaladas que me evitan en esos casos tener que buscar como hacerlo por mi mismo.

En los últimos meses Mint me ha traído una ventaja adicional no planeada: al seguir basado en GNOME2 me ha evitado el dilema Unity || GNOME3 que se ha sucitado y que por supuesto tengo en el otro portátil :-)

Mint también viene en diferentes sabores: el original con sabor a GNOME y otros sabores como XFCE, LXDE y KDE todos basados en Ubuntu, además de un sabor especial basado en Debian.

En el presente artículo se describe el procedimiento para actualizar la versión 10 (Julia) de Mint a la versión actual -11- (Katya) basada en Ubuntu 11.04 mediante la actualización de los repositorios.  Debe tenerse muy en cuenta que este no es el método sugerido por el proveedor ya que ellos sugieren que se realicen preferiblemente instalaciones frescas del sistema operativo.  Por este motivo, realice una copia de seguridad de todos los archivos importantes antes de intentar la actualización.  Realice este procedimiento bajo su propia responsabilidad.

Actualizar los repositorios.

Crear una copia de seguridad de la lista de repositorios actual.

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.MINT10

Modificar las ocurrencias de la versión julia de Mint por katya y las de maverick de Ubuntu por natty.  En mi caso particular el resultado fue el siguiente.

$ sudo vi /etc/apt/sources.list

deb http://packages.linuxmint.com/ katya main upstream import
deb http://archive.ubuntu.com/ubuntu/ natty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ natty-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ natty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu/ natty partner
deb http://extras.ubuntu.com/ubuntu natty main
deb http://packages.medibuntu.org/ natty free non-free

# deb http://archive.getdeb.net/ubuntu natty-getdeb apps
# deb http://archive.getdeb.net/ubuntu natty-getdeb games

Actualizar el índice de los paquetes de los repositorios.

$ sudo apt-get update

Actualizar los paquetes.

Realizar la descarga e instalación de los paquetes de la nueva distribución del sistema operativo.

$ sudo apt-get dist-upgrade

$ sudo apt-get upgrade

Solución de problemas.

Problemas con Pango.

Durante el proceso de actualización se obtiene el siguiente mensaje.

cp: cannot stat `/usr/lib/pango/1.6.0/module-files.d/libpango1.0-0.modules': No such file or directory
cp: cannot stat `/usr/lib/pango/1.6.0/modules/pango-basic-fc.so': No such file or directory

Para solucionarlo cree el siguiente enlace.

$ sudo ln -s /usr/lib/i386-linux-gnu/pango /usr/lib/pango

Durante el inicio del sistema operativo aparecen mensajes quejándose de la no existencia del archivo /etc/pango/pango.modules.  Este archivo se crea de la siguiente manera.

$ pango-querymodules | sudo tee /etc/pango/pango.modules

Problemas pendientes.

Hasta el momento Linux Mint está funcionando normalmente con la única excepción del paquete libgl1-mesa-dri el cual no está siendo actualizado ya que depende de libdrm-nouveau1a el cual a su vez parece estar dependiendo de múltiples paquetes con las versiones previas a la actualización.

Enlaces.

Instalar Eclipse y el plugin ADT en GNU/Linux

Introducción.

Para el desarrollo de aplicaciones en Android además de la instalación del SDK es necesario instalar Eclipse como ambiente de desarrollo -oficial- y el plugin ADT para su interacción con Android.

Obtener Eclipse.

Distribuciones de Eclipse

Distribuciones de Eclipse

Descargar de la siguiente ubicación una distribución de Eclipse que corresponda con el sistema operativo y arquitectura donde se desee instalar.  Para el desarrollo de aplicaciones con Android se recomienda utilizar la distribución clásica o la de Java, sin que esto aparentemente sea obligatorio.

http://eclipse.org/downloads/

Instalar Eclipse.

La instalación de Eclipse consiste únicamente en desempaquetarlo y ubicarlo en la ruta donde finalmente residirá.

$ tar zxvf eclipse-java-helios-SR2-linux-gtk.tar.gz

$ mv eclipse ~/

Instalar el plugin ADT.

Iniciar Eclipse y seleccionar la opción Install new software… del menú Help.

Presionar el botón Add… (esquina superior derecha) y especificar los siguientes valorses.

  • ADT Plugin como Name.
  • https://dl-ssl.google.com/android/eclipse/ como Location.
Agregar un repositorio a Eclipse

Agregar un repositorio a Eclipse

Seleccionar la casilla de verificación de la rama Developer Tools.

Paquete Developer Tools del plugin ADT de Eclipse.

Paquete Developer Tools del plugin ADT de Eclipse.

Presione el botón Next en los dos diálogos siguientes.  Seleccione la opción I accept the terms of the license agreements y presione el botón Finish para terminar el procedimiento.  Reinicie Eclipse cuando este lo solicite.

Configurar el plugin ADT.

En Eclipse acceda al diálogo de preferencias a través del menú Window > Preferences.

Seleccione la opción Android en el árbol del lado izquierdo.

Presione el botón Browse… y ubique el directorio de instalación del Android SDK si este no aparece correctamente.  Presione el botón Apply y finalmente Ok.

Preferencias del plugin ADT

Preferencias del plugin ADT

Enlaces.

Instalación del SDK R11 de Android en GNU/Linux

Introducción.

A pasado un tiempo desde que se describió el proceso de instalación del SDK 1.0 de Android y muchas cosas han cambiado desde entonces.  A continuación se describirá el procedimiento de instalación del SDK de Android en GNU/Linux, el cual deberá ser muy similar al de las demás plataformas.

Obtener y desempaquetar la distribución.

Descargar de la siguiente ubicación el paquete correspondiente al sistema operativo utilizado.

http://developer.android.com/sdk/index.html

En mi caso, como mencioné anteriormente, es GNU/Linux.

$ wget http://dl.google.com/android/android-sdk_r11-linux_x86.tgz

A continuación se descomprime el paquete recién descargado.

$ cd ~/

$ tar zxvf /<ruta>/android-sdk_r11-linux_x86.tgz

Instalar componentes adicionales.

En este paso se instalan los componentes del SDK como diferentes versiones del API, documentación, ejemplos y módulos provistos por terceros.

$ ~/android-sdk-linux_x86/tools/android

En este caso se va a realizar la instalación de los siguientes componentes.

  1. Android SDK Platform-Tools.
  2. Documentation for Android SDK.
  3. SDK Platform Android (2.2, API 8, revision 2).
  4. Samples for SDK (API 8, revision 1).
  5. Android Compatibility Package.
  6. Google Inc.
  7. LG Electronics.
Instalando componentes adicionales.

Instalar componentes adicionales.

Si decide instalar el componente de Google Inc. seleccione específicamente los módulos que desee segun las versiones del API que esté instalando.  Si elige instalarlos todos forzará a que se instalen también todas las versiones del API de Android.

 

Crear un AVD.

Un AVD hace referencia a un Android Virtual Device, es decir, a la imágen de un dispositivo virtual en el emulador.  El SDK de Android permite crear varios imágenes de este tipo con diferentes características.

Para las pruebas del software se creará el AVD de un dispositivo con una resolución de 320×480.

Crear un nuevo AVD.

Crear un nuevo AVD.

 

Enlaces.

Experimentando con jQuery Mobile: The Simple List 0.1

Introducción.

Después de experimentar con jQTouch durante la implementación de un prototipo de aplicación para el 6CCC, me ha tomado unas cuantas horas para elaborar un nuevo prototipo de aplicación web móvil, esta vez utilizando jQuery Mobile como framework para el nivel de presentación.

Su uso es muy similar al visto anteriormente, sin embargo considero que este proyecto cuenta con mejor documentación que el primero.  Ambos se basan en la mejora progresiva (Progresive Enhancement) y en la degradación aceptable (Graceful degradation) lo que los hace fáciles de entender por parte de los desarrolladores que estén habituados al uso de HTML/CSS/Javascript.

El prototipo.

Esta aplicación permite administrar una lista simple de elementos al estilo de las cosas por hacer.  La idea con este prototipo es el experimentar el uso del framework jQuery Mobile.

Para la persistencia se utiliza la facilidad del LocalStorage provisto por HTML5 y que es soportado por los navegadores web modernos incluyendo los incorporados en los sistemas operativos de los dispositivos móviles.

Estas son a grandes razgos las funcionalidades y flujos de información del prototipo.

The Simple List 0.1

The Simple List 0.1

 

Estas son algunas de las pantallas (page) de la aplicación web.

El prototipo puede probarse en línea a través de la web (ver sección de enlaces) y ya que su código fuente se encuentra completamente documentado, servirá también como ejemplo práctico para quienes estén interesados en aprender a desarrollar utilizando este framework web.

Enlaces.

Charla "Mercadeo en la era de la web 2.0"

Gracias a la invitación que me extendió la facultad de Comunicación Social y Periodismo de la Universidad del Quindío, el de hoy en horas de la tarde (6:30 pm.) estaré dictando una charla muy interesante acerca de las implicaciones de las tecnologías y el nuevo modo de pensar de las personas que trajo la llegada de la Web 2.0 a principios de este siglo.  El objetivo principal de la charla es unificar conceptos y plantar las bases de la necesidad y las posibilidades que tiene una empresa establecer su presencia en Internet.  Están cordialmente invitados todos quienes puedan asistir.

Invitación a la charla

He publicado la presentación que voy a utilizar bajo la licencia CreativeCommons Attribution-NonCommercial-ShareAlike 3.0 Unported License y puede ser consultada a continuación.

Aplicación para el 6CCC: cómo llego ? Version web móvil

Introducción.

Otro prototipo que estuve preparando para el sexto Congreso Colombiano de Computación fue una aplicación web móvil basada en jQTouch para facilitarle a los visitantes consultar fácilmente la agenda de las conferencias y obtener la ruta que se deberá recorrer para llegar a los lugares del evento o demás sitios de interés de la ciudad.

El prototipo.

  • Como se mencionó, se desarrolló utilizando jQTouch el cual es un plugin de jQuery por ende, la mayor parte de la aplicación se encuentra desarrollada en Javascript.
  • La estructura de la información se encuentra implementada en HTML5 (sin validar aún).
  • Se utilizó el servicio de mapas y rutas de Bing Maps ya que según los requerimientos de esta aplicación Bing cuenta con mejor información de Colombia que los demás proveedores.
  • La aplicación realiza la geocodificación de la ubicación del usuario, intentando identificar la dirección en que se encuentra.
  • También permite realizar la geocodificación inversa (de dirección a posición geográfica) según solicitud del usuario.  En este caso parece que la calidad del servicio de Bing es inferior a la de Google y valdría la pena cambiar al proveedor de este servicio específico.
  • Por restricciones de seguridad de los navegadores web modernos, es necesario que el usuario autorice el acceso al GPS por parte de la aplicación web.  Si esto no se realiza, la aplicación no podrá contar con la posición del usuario en la ciudad.
  • Para la demostración se manipuló el código de la aplicación para que en el momento de trazar una ruta siempre se tome una ubicación en Manizales (Caldas) como posición del usuario y permitir así experimentar con esta funcionalidad del prototipo.

Conclusiones.

  • Por falta de tiempo no pudo hacerse pública la aplicación web móvil ya que no fue posible realizar suficientes pruebas con dispositivos móviles reales.
  • Es necesario investigar mas acerca de jQTouch para utilizarlo en aplicaciones reales en producción.  Hasta el momento me parece una opción muy interesante para el desarrollo fácil de aplicaciones web móviles sin embargo hasta el momento no he encontrado buena documentación al respecto.
  • La mayor parte del prototipo se encuentra lista, espero en un futuro cercano realizar mayores pruebas y ajustes para publicarlo como una versión final.

Enlaces.