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

Procesando la documentación de Laravel 4 para mejor lectura o impresión

Introducción

Aún no me acostumbro a leer textos largos desde un PDF en el computador, en especial libros y manuales me gusta tenerlos impresos para resaltarlos y hacer anotaciones en ellos.  Por este motivo hice este script muy sencillo en PHP que obtiene las secciones del sitio web de la documentación de Laravel 4 y las une en un único documento que puede ser impreso o leído con mayor facilidad.

Documentación de Laravel 4

Requisitos

El único requisito para ejecutar el script es contar con el paquete de la interfaz de línea de comando de PHP (php-cli) instalado.

Ejecución

$ php laravel4.php

Al final la ejecución se encontrará el archivo output.html en el mismo directorio con la documentación generada.

Personalización

Si desea seleccionar cuales secciones de la documentación son finalmente incluidas durante la generación del documento, modifique la variable $urls (inicialmente comentada) definiendo en ella los URL de las respectivas secciones.  En caso de no definirse (por defecto) se tomarán automáticamente las secciones encontradas en la página en linea de la documentación.

También es posible modificar la presentación del documento resultante.  Para esto ajuste como se considere las clases CSS definidas en la plantilla en la función prepareTemplate.

Licenciamiento

Este script se distribuye bajo la licencia MIT.

Versiones

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

Reemplazar DuckDuckGo con Google en las búsquedas de Firefox en Linux Mint

Introducción

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

about:config - Mozilla Firefox

  1. En Firefox abra un nuevo tab.
  2. Acceda a la dirección: about:config.
  3. Filtre por la llave keyword.url.
  4. Modifique su valor (value) por http://www.google.com/search?ie=UTF-8&oe=UTF-8&q=

Enlaces

  1. Change address bar search in Firefox
    http://community.linuxmint.com/tutorial/view/1109

Crear una granja de wikis en dominios virtuales con Dokuwiki

Introducción

Dokuwiki es un excelente software para la implementación de sitios wiki en internet.  Una de las facilidades que tiene y que había experimentado sin éxito hasta ahora, es la creación de granjas de wikis que permiten tener una única instalación del software (farm) y a partir de ella crear diferentes wikis (animals) independientes con las ventajas que trae consigo la centralización de la distribución para actualizaciones e instalación de plantillas y complementos.

La instalación de la granja puede realizarse de dos maneras: mediante virtual hosts que permiten utilizar cualquier tipo de dominio o subdominio o mediante el uso de archivos ”.htaccess” que sólo permiten utilizar subdirectorios bajo un dominio específico.  La presente documentación detalla el procedimiento para crear una granja de wikis con Dokuwiki utilizando virtual hosts.

Procedimiento

Instalación de Dokuwiki

El primer paso consiste en realizar una instalación convencional de Dokuwiki en una ubicación que sea pública para el servidor web.  Para efectos de este ejercicio esta instalación se realizó bajo la ruta /home/jimezam/public_html/wiki.

Activación de la granja

A continuación se debe activar el modo farm en el wiki recién instalado copiando y modificando el archivo preload.php.

$ cp ~/public_html/wiki/inc/preload.php.dist ~/public_html/wiki/inc/preload.php

$ vi ~/public_html/wiki/inc/preload.php

    // set this to your farm directory
    if(!defined('DOKU_FARMDIR')) define('DOKU_FARMDIR', '/home/jimezam/farm/');

    // include this after DOKU_FARMDIR if you want to use farms
    include(fullpath(dirname(__FILE__)).'/farm.php');

La ubicación establecida como la constante DOKU_FARMDIR deberá corresponder con el directorio bajo el cual se ubicarán los archivos de datos de los wikis que se creen en la granja.  En este caso los animales estarán almacenados bajo/home/jimezam/farm.  Es preferible que esta ubicación se encuentre por fuera del árbol de directorios publicados con el servicio web o se impida su acceso directo mediante el uso de .htaccess.

Si no se cuenta con una versión reciente de Dokuwiki es posible que los archivos farm.php y preload.dist.php no se encuentren disponibles, en ese caso es posible descargarlos de su sitio web.

Creación de un nuevo Dominio

Los sitios wiki a crearse en la granja deberán ubicarse bajo los dominios o subdominios deseados.  Para la creación de estos se deberán utilizar las herramientas convencionales, la única restricción consiste en que la configuración de todos los virtual host de Apache hagan referencia a la instalación de Dokuwiki como su DOCUMENT_ROOT.

NameVirtualHost *

<VirtualHost *>
    # this is the URL of your wiki animal
    ServerName miWiki.miDominio.com
    # the document root always needs to be the DokuWiki *farmer* directory
    DocumentRoot /home/jimezam/public_html/wiki/
</VirtualHost>

 Creación de un wiki (desde cero)

Para crear un nuevo wiki desde cero en la granja se debe crear un directorio bajo el DOKU_FARMDIR cuyo nombre coincida con el del dominio que se utilizará para accederlo.

En esta ubicación se deberá descomprimir el contenido de la plantilla de los animales.

$ cd /home/jimezam/farm

$ wget https://www.dokuwiki.org/_media/dokuwiki_farm_animal.zip --no-check-certificate

$ unzip dokuwiki_farm_animal.zip

$ mv _animal miWiki.miDominio.com

Configuración del nuevo wiki

Para configurar el wiki recién creado acceda normalmente al dominio especificado utilizando un navegador web autentíquese con el usuario admin cuya contraseña es admin también y realice las acciones de configuración necesarias.

También es necesario ajustar la configuración de las listas de control de acceso (ACL) bajo Admin > Access Control List Management ya que por defecto el animal permitirá la consulta (read) y escritura (edit) pública lo que rápidamente atraerá a SPAM bots.

Por ejemplo, si desea que la wiki pueda ser consultada libremente por los usuarios pero que sólo los usuarios registrados y autenticados puedan modificarla debería ajustar sus ACL de la siguiente manera propuesta.

Dokuwiki ACL

Consideraciones de seguridad

Se debe tener en cuenta que una vez finalizado el procedimiento se termina con dos wikis: el primero corresponderá con la granja y el segundo con el animal recién creado.  En ambos casos es recomendable que como mínimo realice su configuración básica y ajuste la contraseña del usuario admin según considere prudente.

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

Servidores DNS públicos y gratuitos

Introducción

El servicio de DNS (Domain Name System) se encarga de traducir los nombres de los dominios de los requerimientos a sus correspondientes direcciones IP para poder ser físicamente localizados y consultados.  Este procedimiento toma unos cuantos milisegundos los cuales a lo largo del día pueden significar cantidades significativas de tiempo.  En casos como este o de problemas específicos es conveniente algunas veces utilizar el servicio de servidores DNS diferentes a los provistos por el ISP.

A continuación se muestra una lista de los servidores DNS gratuitos y públicos que he recopilado.

Servidores DNS

  1. Google
    8.8.8.8
    8.8.4.4
  2. Google (IPV6)
    2001:4860:4860::8888
    2001:4860:4860::8844
  3. OpenDNS
    208.67.222.222
    208.67.220.220
  4. Norton DNS
    198.153.192.1
    198.153.194.1
  5. OpenNIC
    69.164.208.50
    216.87.84.211
  6. Level3
    209.244.0.3
    209.244.0.4
  7. DNS Advantage
    156.154.70.1
    156.154.71.1
  8. ScrubIT3
    67.138.54.120
    207.225.209.77
  9. Public-Root5
    199.5.157.131
    208.71.35.137
  10. Comodo Secure
    8.26.56.26
    8.20.247.20

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

Experimentando un poco con el Canvas de HTML5

Introducción

Entre las muchas maravillas que nos trae HTML5 está el componente Canvas cuya funcionalidad es sorprendente en comparación con lo que nos tenía acostumbrados la versión anterior.  Durante este fin de semana decidí jugar un poco con el Canvas para experimentar con su funcionalidad básica de dibujar.

Para esto desarrollé una aplicación web muy simple que permite dibujar puntos y líneas en un lienzo blanco.  El color de las lineas puede ser modificado entre amarillo, azul y rojo.

La aplicación web resultante puede ser consultada desde un navegador web de escritorio o uno de un dispositivo móvil ya que no sólo se manejaron los eventos de ratón convencionales sino que también se incluyeron los eventos de touch que permiten detectar la interacción con las pantallas táctiles.

Demostración

Demostración uso básico de Canvas
Demostración uso básico de Canvas

Enlaces