Descargar manualmente imágenes (boxes) de Vagrant desde el catálogo de HashiCorp’s Atlas

Obtener la box

Para descagar manualmente la imágen base (box) de una máquina virtual desde el catálogo de HashiCorp’s Atlas para ser utilizada con Vagrant se deben seguir los siguientes pasos.

  1. Ubicar la box que se desea descargar en el catálogo.
  2. Identificar el URL de la box deseada.

    Por ejemplo: https://atlas.hashicorp.com/thdengops/boxes/ubuntu-14.04-dev.

  3. Teniendo en cuenta la información mostrada en el sitio web, agregar a la URL la versión y el proveedor (sistema de virtualización) de la box que se desea descargar.

    Vagrant Box Info

    De la manera URL/versions/{VERSION}/providers/{PROVEEDOR}

    Para el caso del ejemplo sería entonces: https://atlas.hashicorp.com/thdengops/boxes/ubuntu-14.04-dev/versions/0.0.7/providers/virtualbox.box

Crear una máquina virtual a partir de una box local

Se debe agregar la box local al sistema de boxes de Vagrant, este procedimiento se debe realizar una unica vez.

$ vagrant box add miBox /ruta/boxes/ubuntu-14.04-dev.virtualbox.box

Posteriormente se crea el Vagrantfile para la instancia de la máquina virtual.

$ vagrant init miBox

Finalmente, una vez configurado apropiadamente el Vagrantfile, se inicia la máquina virtual.

$ vagrant up

Recursos

Los primeros 10 minutos con Vagrant

Instalación

Instalar Virtualbox como prerequisito si aún no se cuenta con este software.

$ sudo aptitude install dkms virtualbox

Es recomendable instalar su correspondiente Extension Pack.

Para el caso de Ubuntu/Debian descargar el archivo .deb correspondiente a la arquitectura desada del sitio web de descargas e instalarlo localmente.

$ sudo dpkg -i vagrant_*.deb

Obtener la caja (box) a obtenerse

Una box hace referencia a la máquina virtual base que se utilizará para crear la que se asociará al proyecto.

$ vagrant box add ubuntu/trusty32

En este caso ubuntu/trusty32 hace referencia al nombre de la imagen que va a descargarse.  Pueden  utilizarse otras imágenes que se encuentran en linea gracias al repositorio oficial de Vagrant.

Los archivos asociados a estas imágenes son descargados bajo el directorio ~/.vagrant.d/boxes.

Crear el archivo de configuración

En el directorio del proyecto ejecutar el siguiente comando

$ vagrant init ubuntu/trusty32

Esto básicamente crea una versión base del archivo Vagrantfile para configurar la máquina virtual y asigna automáticamente la box a utilizarse en el proyecto.

$ vi VagrantFile

   ...
   config.vm.box = "ubuntu/trusty32"
   ...

Una vez se cree la máquina virtual por primera vez (con el primer vagrant up) sus archivos quedarán por defecto bajo ~/VirtualBox\ VMs/.

Reenvío de puertos

Para configurar el reenvío de puertos entre la máquina virtual y la máquina física se deben agregar una o mas opciones config.vm.network al archivo Vagrantfile.

$ vi VagrantFile

   ...
   config.vm.network :forwarded_port, guest: 80, host: 8080
   config.vm.network :forwarded_port, guest: 443, host: 80443
   ...

Configurar la interfaz de red

El acceso a la red de la máquina virtual puede configurarse de manera privada (sólo el host y otras máquinas pueden acceder a ella) o de manera pública en la cual cualquier equipo en la red puede interactúar con la máquina virtual.

Configuración privada

Es posible utilizar una dirección IP estática de la siguiente manera.

$ vi VagrantFile

   ...
   config.vm.network "private_network", ip: "192.168.1.100"
   ...

O una dirección IP dinámica.

$ vi VagrantFile

   ...
   config.vm.network "private_network", type: "dhcp"
   ...

Configuración pública

Al igual que con la configuración privada, es posible asignar una dirección IP estática.

$ vi VagrantFile

   ...
   config.vm.network "public_network", ip: "192.168.1.100"
   ...

O una dirección IP dinámica basada en el DHCP de la red.

$ vi VagrantFile

   ...
   config.vm.network "public_network"
   ...

Directorios sincronizados

Por defecto el directorio /vagrant de la máquina virtual se encuentra sincronizado con el directorio del proyecto en la máquina física, es decir, en este directorio se deberán ubicar los archivos que deberán perdurar en el tiempo.

Es posible especificar otros directorios sincronizados mediante diferentes métodos.

Gestión de la máquina virtual

Iniciar la máquina virtual

$ vagrant up

Acceder a la máquina virtual a través de una sessión de SSH

$ vagrant ssh

Suspender una máquina virtual activa

$ vagrant suspend

En este caso el estado de la máquina en memoria (además de sus archivos) es almacenado en disco.  Su reinicio es muy rápido (entre 5 y 10 segundos).

Detener una máquina virtual activa

$ vagrant halt

Este comando realiza un apagado limpio de la máquina virtual.  El reinicio de la máquina toma un poco mas de tiempo.

Destruir una máquina virtual

$ vagrant destroy

Este comando apaga abruptamente la máquina virtual si esta se encuentra activa y remueve todos los archivos asociados a la misma sin incluir las carpetas compartidas (/vagrant).

Obtener ayuda de los comandos vagrant

Para listar los comandos disponibles utilice el siguiente comando.

$ vagrant list-commands

Para obtener ayuda adicional sobre un comando en especial utilice la siguiente variante.

$ vagrant COMANDO -h

Recursos

Instalación de Cloud9 IDE en Ubuntu 13.04

Introducción

Cloud9IDE_logoDespués de una primera instalación hace poco mas de un año, quedé con la sensación de que este procedimiento era demasiado complejo y me di a la tarea de experimentar un poco en busca de simplificarlo un poco.

Concluyo que el prinicpal obstáculo que tuve durante las pruebas fue la versión de NodeJS de la cual depende Cloud9 IDE.  De momento la mejor opción es utilizar la rama 0.8.x ya que aún no es compatible con la 0.10.x y la 0.9.x se considera inestable.  Al respecto encontré que la herramienta nvm (Node Version Manager) permite gestionar diferentes versiones de Node JS instaladas para ser utilizadas con diferentes aplicaciones de terceros sin que estas interfieran entre sí.

Otra herramienta que ayudó a simplificar el proceso de instalación fue npm (Node Packaged Modules) la cual se encarga ahora de realizar la construcción de Cloud9 IDE y sus dependencias.

A continuación se detallan los pasos necesarios para realizar esta instalación y posteriormente ejecución del software.

Instalación

Prerequisitos

$ sudo apt-get install -y build-essential g++ curl libssl-dev apache2-utils git libxml2-dev

Desinstalar cualquier versión previa de NodeJS que pueda interferir con la versión que se va a utilizar con Cloud9.

$ sudo apt-get remove nodejs

Node Version Manager

El Node Version Manager (NVM) permite gestionar diferentes versiones de NodeJS evitando su instalación y control manual para el uso con software de terceros (como es el caso de Appcelerator Titanium).

$ git clone git://github.com/creationix/nvm.git ~/nvm
$ echo '. ~/nvm/nvm.sh' >> ~/.bashrc && . ~/.bashrc

Node JS

La versión utilizada durante esta instalación fue la 0.8.25 la cual era la última versión disponible de la serie 0.8.x.  Se constató que sucedían problemas con la versión 0.10.12 y se omitió experimentar con la versión 0.9.x al ser esta (impar) inestable.

Para identificar las versiones de Node JS disponibles consulte el listado de archivos de las distribuciones.

$ nvm install v0.8.25
$ nvm use v0.8.25

Cloud9 IDE

$ git clone https://github.com/ajaxorg/cloud9.git
$ cd cloud9
$ npm install

Ejecución

Para ejecutar una instancia de Cloud9 IDE se recomienda utilizar los siguientes comandos que seleccionan la versión de NodeJS a utilizarse y levantan el servicio del IDE.

$ nvm use 0.8.25 && ~/cloud9/bin/cloud9.sh -w /directorio/de/trabajo

Estos son los principales parámetros que puede recibir cloud9.sh.

-w /directorio/de/trabajo Permite especificar el directorio de trabajo que utilizará el IDE.
-p puerto Permite especificar el puerto que utilizará el servicio.  Por defecto es el 3131.
-l interfaz Por defecto el servicio sólo escucha a localhost, esta opción permite escuchar una interfaz diferente.  Utilizar la interfaz 0.0.0.0 para escuchar a través de todas las direcciones IP disponibles.
--username usuario --password contraseña
Permite especificar un nombre de usuario y una contraseña para autenticar el acceso a la instancia del IDE.

 Recursos

Creando un nuevo proyecto en GitHub bajo GNU/Linux

Introducción

Una vez instalado Git y configurado para GitHub es posible empezar a crear proyectos que sean monitoreados por este software de control de versiones.

Para cada proyecto se crea un repositorio donde se almacenarán las versiones de sus archivos y las ramas que se creen con ellos.

A continuación se describirán los pasos necesarios para crear un nuevo repositorio.

Crear el repositorio en GitHub

Para crear un nuevo repositorio en GitHub se debe ingresar con la información de la cuenta del usuario que será su propietario, acceder al enlace Create a new repository e ingresar la siguiente información.

Crear un nuevo repositorio en GitHub
Crear un nuevo repositorio en GitHub

Crear el directorio del proyecto

Si todavía no existe un directorio para el proyecto en el sistema de archivos del equipo del desarrollador, este se debe crear en la ubicación que la se requiera.

$ mkdir /ruta/al/proyecto123

$ cd /ruta/al/proyecto123

Esta nueva ubicación se debe activar para ser monitoreada por Git de la siguiente manera.

$ git init

Agregar una descripción ampliada del proyecto

Este paso es opcional pero se recomienda hacerlo.  Es posible agregar un archivo README al proyecto cuyo contenido se mostrará junto con la descripción del proyecto en GitHub.

$ vi README

Como este archivo es nuevo debe agregarse al registro de Git.

$ git add README

De ser necesario es posible agregar en un solo paso a todos los archivos ubicados en un directorio específico.

$ git add .

Una vez agregado y registrado el archivo es necesario hacer commit de esas modificaciones.

$ git commit -m 'First commit'

Enviar las modificaciones a GitHub

Debe tenerse en cuenta que el commit realizado en el paso anterior se realiza en la base de versiones local.  Para publicar estas modificaciones en el proyecto en GitHub es necesario sincronizarlo con el repositorio remoto de la siguiente manera.

Primero es necesario asociar el repositorio local con el remoto.

$ git remote add origin git@github.com:USERNAME/PROYECTO.git

Reemplazar las palabras USERNAME y PROYECTO con el nombre de usuario GitHub de quien va a publicar y el nombre del proyecto respectivamente.

Finalmente se realiza la sincronización con el repositorio remoto.

$ git push -u origin master

Consultar la página del repositorio en GitHub

Al consultar la página del repositorio en GitHub se deberá ver el listado de archivos sincronizados y el texto de la descripción ampliada (archivo README) especificado.  Para consultar este sitio se deberá acceder al URL con la siguiente estructura.

https://github.com/USERNAME/PROYECTO

Enlaces

Implementando la carga dinámica de clases en Processing

Introducción

La carga dinámica de clases es una característica muy conocida de los lenguajes orientados a objetos que permite crear instancias de clases con solo conocer su nombre.  Esto permite a los desarrolladores crear aplicaciones que utilicen clases que sean creadas después de la aplicación sin necesidad de recompilar la misma.  También es muy útil cuando se desea generalizar la creación de un conjunto de objetos mediante el patrón de fábrica.

Gracias a la reflexión en Java y otros lenguajes como C# es muy fácil de implementar, sin embargo en Processing (derivado de Java) su implementación fue un poco mas elaborada ya que las clases que implementa el usuario son en realidad clases internas del proyecto desarrollado.

Explicación

En Processing cuando se crea un Proyecto y en él se implementan las clases A, B y C, y este se compila, internamente se crea un archivo de código fuente Java conteniendo a este código de la siguiente manera.

import processing.core.*;

// Imports del usuario

// Otros imports

public class Proyecto extends PApplet {

    class A
    {
        // ...
    }

    class B
    {
        // ...
    }

    class C
    {
        // ...
    }

    static public void main(String args[]) {
        PApplet.main(new String[] { "--bgcolor=#DFDFDF", "Proyecto" });
    }
}

Implementación

Para realizar la implementación de una versión simple del patrón de fábrica utilizando la carga dinámica de clases en Processing se supondrá que existe la clase Padre de la cual se derivan las clases Hijo1 e Hijo2 del proyecto Demostracion.

Crear un objeto donde se almacenará la instancia a crearse de manera dinámica.

Padre instance = null;

Recuperar la referencia al cargador de clases del sistema.

ClassLoader classLoader = ClassLoader.getSystemClassLoader();

Cargar la referencia de la clase a partir de su nombre (className), en este caso podría ser Hijo1 o Hijo2.  Recuerde que esta clase es realmente interna a la clase Demostracion.

Class loadedClass = classLoader.loadClass("Demostracion$" + className);

Obtener una referencia al constructor que se desea utilizar para crear la instancia.  En este caso se eligió un constructor que recibe dos parámetros: una cadena y un real.  Nótese además que todos los constructores reciben una referencia al applet de Processing, en este caso de Demostracion (que hereda a su vez de PApplet).

java.lang.reflect.Constructor constructor = loadedClass.getConstructor(new Class[] {PApplet.class, String.class, float.class});

Crear la nueva instancia utilizando el constructor obtenido en el paso anterior.  Al método newInstance se le especifican los valores de los parámetros que serán suplidos en el constructor.

instance = (Padre) constructor.newInstance(new Object[] {applet, str, flt});

Nótese como el primero de ellos, applet, hace referencia al applet de Processing que se está ejecutando.  Al no encontrar una forma mas elegante para obtener esta referencia al applet, declarar una variable global para almacenarlo.

PApplet applet;

Y obtener su valor en el procedimiento setup.

void setup()
{
    // ...

    applet = this;

    // ...
}

En el código mostrado anteriormente se deberán manejar las excepciones ClassNotFoundException y ClassCastException para poder llevar a feliz término su ejecución.

Enlaces

Instalación y configuración de Git para el uso con GitHub bajo GNU/Linux Ubuntu 12.04

Introducción

GitHub es un servicio de hospedaje de proyectos basado en web incluye funciones de red social como feeds, seguidores y estadísticas como clasificaciones.  Este sistema se basa en el software de control de versiones llamado Git.

El servicio se ofrece de manera gratuita para los proyectos de código abierto y bajo un costo mensual para los proyectos privados.

Una vez se ha creado la cuenta del usuario en GitHub este debe instalar y configurar Git para que se pueda interactúar de manera con los repositorios de los proyectos que se crearán en él.

Para hacer esto se deben realizar las siguientes actividades que se describen a continuación.

Procedimiento

Instalar Git

$ sudo aptitude install git

Crear la pareja de llaves SSH

En este paso se debe decidir si se va a utilizar una combinación de llaves existente o si se creará una nueva como se describe a continuación.

$ cd ~/.ssh

$ ssh-keygen -t rsa -C "correo@electronico.com"

Recuerde especificar un contraseña (passphrase) segura a su llave privada, de esta forma evitará que pueda ser utilizada de manera maliciosa si pierde el control sobre el archivo.

Registrar la llave pública a GitHub

Ingrese al sitio web de GitHub con la información de su cuenta de usuario y seleccione en el menú de Account Settings la opción SSH Keys y presione el botón Add SSH key.

Especifique un nombre (Title) para la llave SSH y copie/pegue el contenido del archivo ~/.ssh/id_rsa.pub (o el que haya especificado) en el área Key.

Verificar la configuración de la llave pública en GitHub

Desde una terminal en el equipo de desarrollo ejecutar el siguiente comando.

$ ssh -T git@github.com

Si la llave ha sido correctamente establecida se deberá recibir un mensaje como el siguiente.

Hi username! You’ve successfully authenticated, but GitHub does not provide shell access.

Configurar el nombre de usuario y el correo electrónico

En este paso se establecen localmente el nombre de usuario (de GitHub) y el correo electrónico del desarrollador para relacionarlo con los commits que haga a los diferentes proyectos del repositorio.

$ git config --global user.name "Nombre Completo"

$ git config --global user.email "correo@electronico.com"

Configurar el token de GitHub

Este token (secreto) se utiliza como medida de seguridad para autenticar las herramientas que no utilicen SSH y que deseen acceder a GitHub en nombre del usuario.

Para determinar el valor del token del usuario, seleccione en el menú de Account Settings la opción Account Settings y copie el valor mostrado frente al texto Your API token is.

Finalmente ejecute las siguientes instrucciones en una terminal teniendo en cuenta que username deberá corresponder con el nombre de usuario elegido en GitHub y reemplazar el TOKEN con el obtenido anteriormente desde el sitio web de GitHub.

$ git config --global github.user username

$ git config --global github.token TOKEN

Importante, debe tener en cuenta que cada vez que modifique la contraseña del usuario de GitHub se generará un nuevo valor del token.

Enlaces

Instalando el IDE de Cloud9 en GNU/Linux Ubuntu

Introducción

Cloud9 es un ambiente integrado para el desarrollo de software diseñado específicamente para ser ejecutado en la nube.  Este trae consigo múltiples características muy interesantes, incluyendo el soporte para diferentes lenguajes de programación como C/C++, C#, CSS, Java, Javascript, Lua, PHP, Python, Ruby, SQL y HTML entre otros mas.

Este software ha sido desarrollado en Node.js el cual es también su plataforma objetivo para el desarrollo de proyectos.  Cloud9 pueden ser accedido desde dos diferentes perspectivas: como un servicio en el cual el usuario se inscribe en la página (gratuitamente o con un pago) y accede remotamente al servicio.  La otra perspectiva corresponde con instalar este software en un servidor propio y acceder a él de manera privada.

Cloud9 IDE running on Firefox
Cloud9 IDE running on Firefox

A continuación se describirán los pasos seguidos para la instalación de Cloud9 IDE en un GNU/Linux Ubuntu 12.04.

Instalación

Se decidió instalar el software asociado bajo la carpeta ~/local del usuario que utilizará al ambiente de desarrollo.

Requerimientos

$ sudo apt-get install -y build-essential g++ curl libssl-dev apache2-utils git libxml2-dev

Ajustes iniciales

Crear la ruta donde se instalarán los diferentes paquetes de software necesarios.

$ mkdir ~/local

Agregar la ruta de los paquetes binarios al PATH.

$ echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc

$ . ~/.bashrc

Instalación de Node.js

Verificar cual es la versión mas reciente del software, en este caso era la 0.6.14.

$ cd ~/local

$ git clone git://github.com/joyent/node.git

$ cd node

$ git checkout v0.6.14

$ ./configure --prefix=~/local

$ make

$ make install

$ cd ..

Instalación de npm (Node Package Manager)

$ curl http://npmjs.org/install.sh | sh

Instalación de Cloud9 IDE

$ git clone git://github.com/ajaxorg/cloud9.git

$ cd cloud9

$ git checkout devel

$ git submodule update --init --recursive

$ cd ..

Instalación del framework de componentes O3

$ git clone http://github.com/ajaxorg/o3

$ cd o3

$ ./tools/node_modules_build

$ cp ./build/Release/o3.node ../cloud9/support/jsdav/support/node-o3-xml-v4/lib/o3-xml/

$ cd ..

Ejecutar el IDE

Para lanzar el ambiente de desarrollo es necesario ejecutar el siguiente comando.  Debe tenerse en cuenta que si no se especifica un puerto su valor por defecto será de 3000 y si no se especifica un lugar de trabajo se utilizará el directorio actual donde fue ejecutado el comando.

$ ~/local/cloud9/bin/cloud9.sh --port 3000 --workspace ~/proyectos/xxx

Otro aspecto a tenerse en cuenta es que se deberá crear una instancia del IDE por cada proyecto ya que estos se trabajan de manera independiente.

Enlaces

Detectando movimiento con Processing utilizando Flob

Introducción

Movement detection with Flob
Movement detection with Flob

En la búsqueda de como detectar movimiento en las imágenes recibidas de una cámara web utilizando un sketch de Processing para ser utilizado como medio para la interacción entre el usuario y el computador, he iniciado el día de hoy algunas pruebas con la librería Flob que facilita este proceso.

Hasta el momento se ha utilizado la característica para calcular la imagen de movimiento y la facilidad para determinar las áreas de movimiento (blobs) agrupándolas según su cercanía.

El sketch de demostración se desarrolló utilizando Processing 2 (alpha 4) por lo que se descargó la versión de desarrollo de la librería.

Enlaces

Instalación de GMate para GEdit en GNU/Linux Ubuntu

Introducción

Con el crecimiento en el uso de lenguajes de script como PHP, Python y Ruby en diferentes ámbitos y la aceptación globalizada de HTML5/CSS/Javascript como plataforma de hecho en múltiples ambientes, la idea de un ambiente de desarrollo (IDE) único y especializado se diluye.  Para muchos desarrolladores es mas cómodo y funcional utilizar un editor de texto con funcionalidades de desarrollo de software que pesados, complejos y elaborados ambientes como Eclipse y Netbeans.  Este es el caso de editores como vi, Notepad++ y Sublime Text que son apetecidos por desarrolladores de las diferentes plataformas.

En este caso potenciaremos GEdit, el editor de texto que incluye el proyecto GNOME en las distribuciones que lo soportan.  Esto se hará a través del proyecto GMate el cual incluye plugins y temas para acercar su funcionamiento al de TextMate según sus desarrolladores.

Acerca de GMate

Actualmente GMate incluye 31 plugins nuevos.

  • Advanced Bookmarks. Highlight, remenber and toggle bookmarks in your files.
  • Align columns. Align text blocks into columns separated by pipe ( | )
  • Classbrowser. A Classbrowser (depends of ctags, I use exuberant-ctags).
  • Encoding. Reopen the document in a different encoding
  • Embedded Terminal. Terminal with multiple windows
  • File Search. This is a search plugin for Gedit to search for a text inside a directory.
  • Find in Project. Search in the project with ack/grep.
  • Fuzzy Open. Quick way to open file in project.
  • Gedit Open File. Regex based file open (like textmate Go to file…).
  • Gedit Todo. Find Todo Marks in source files (integrated with filebrowser).
  • Gemini. Pair complete for quotes and braces.
  • Highlight Edited Lines. Highlights lines changed during your edit session.
  • Indent Converter. Converts tabs to spaces and spaces to tabs.
  • Multi Edit. Check it out at author’s page
  • Pair Character Completion. Pair complete for quotes and braces, that also wrap selected text.
  • Pastie. Paste a selection of code or a source file to pastie.org directly from editor
  • Quickhighligthmode. Fast change current highlight mode.
  • Rails Extract Partial. Extract selected region of rhtml as a partial.
  • Rails Hotcommands. Execute Rails Commands (such rake tasks).
  • Rails Hotkeys. Navigation in Rails Project Files.
  • Regex Search Replace. Search and replace with regular expressions.
  • Reopen Tabs. Saves opened tabs on exit to restore them on next run.
  • Simple Folding. Collapse selected text.
  • Smart Indent. Smart Indentation regex based.
  • Tabulation. Auto set tabs and spaces based on file type.
  • TextMate Style Autocompletion. Better autocompletion. Tap Esc to cycle through the available completions.
  • Text Map. Navigatable thumbnail of the entire file
  • Text Tools. Some text manipulation improvements (adapted from line tools).
  • Trailsave. Remove trailing spaces before save a document.
  • Word Completion. Word completion plugin.
  • Zen Coding. Tools for faster HTML/CSS coding
  • Zoom. Adds the ability to change the text size.

Soporte mejorado para los siguientes sintáxis.

  • Basic YAML
  • CoffeeScript
  • ColdFusion
  • Cucumber
  • Groovy and gsp
  • HAML
  • Markdown
  • reStructuredText
  • rhtml/erb
  • Ruby on Rails
  • SASS

Además de 100 nuevos temas para personalizar su interfaz.

Instalación

Instalar el repositorio de Ubuntu on Rails PPA.

$ sudo apt-add-repository ppa:ubuntu-on-rails/ppa
$ sudo apt-get update

Instalar el paquete de GMate.

$ sudo apt-get install gedit-gmate

Enlaces

Ocultando la barra de direcciones del navegador de Android

Introducción

Con los beneficios que las nuevas características de HTML5 y CSS3 traen a los desarrolladores de aplicaciones móviles cada día es mas frecuente que se desarrollen sitios y aplicaciones web diseñadas específicamente para estos dispositivos.

Las aplicaciones web móviles son en esencia una página web que emula en cierta medida el look-and-feel de las aplicaciones nativas para permitirle al usuario acceder a la funcionalidad de la aplicación con los beneficios (y desventajas) de una aplicación web pero con una experiencia similar a las aplicaciones convencionales.  Para hacer esto existen varios frameworks sin embargo hay ocasiones en las que es preferible no basarse en ellos sino implementar una página web estándar.

Ocultando la barra de direcciones en el navegador web de Android
Ocultando la barra de direcciones en el navegador web de Android

En esos casos probablemente la primera de las adaptaciones que se desea realizar es el ocultar la barra de direcciones del navegador ya que así se dará la impresión de aplicación nativa y no de página web convencional inmersa en un navegador.

En Android esto es posible lograr de cierta manera.  La barra de direcciones no puede ser eliminada por completo pero puede ser ocultada, es decir, no se verá durante la ejecución de la aplicación web móvil hasta que el usuario decida hacer el scroll necesario para acceder a ella.

Procedimiento

El procedimiento para lograr esto se basa en dos pasos que se deben realizar mediante Javascript.  El primero de ellos consiste en garantizar el la página web de la aplicación móvil cuenta con suficiente altura para poderse realizar.  Para esto se manipula el alto del body.  El segundo paso consiste en simular desde código un scroll lo que activará la característica del navegador de ocultar la barra de direcciones.

/**
 * Hide the URL address bar on standard Android's browser by setting enough
 * document height and auto scrolling to active the bar hiding feature
 */

function hideAddressBar()
{
  if(!window.location.hash)
  {
      if(document.height < window.outerHeight + 10)
      {
          document.body.style.height = (window.outerHeight + 50) + 'px';
      }

      setTimeout(function()
      {
      	window.scrollTo(0, 1);
      }, 50);
  }
}

Finalmente se invoca esta función una vez se ha cargado completamente (load) la página web, garantizando también que esto se haga durante los cambios de orientación del dispositivo.

/**
 * Start up procedure to hide the Android's URL bar
 */

window.addEventListener("load", function()
{

	if(!window.pageYOffset)
	{
		hideAddressBar();
	}

	window.addEventListener("orientationchange", hideAddressBar);

});

Enlaces