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.
El problema mas común que impide que se pueda acceder correctamente a un sitio o aplicación web que se está instalando o desarrollando es que los archivos y directorios no cuenten con los permisos de acceso apropiados para que el servidor de páginas (Apache por ejemplo) pueda accederlos correctamente. En estos casos se obtiene un mensaje de error similar al mostrado a continuación.
failed to open stream: Permission denied in /ruta/al/proyecto/index.php on line xx
La solución
En términos generales, los directorios deben contar con permisos 755 (drwxr-xr-x) y los archivos -como .php- 644 (-rw-r–r–). Esta modificación puede realizarse de manera recursiva aprovechando la flexibilidad del comando find de la siguiente manera.
$ find /ruta/al/proyecto -type d -exec chmod 755 {} ;
$ find /ruta/al/proyecto -type f -exec chmod 644 {} ;
Inclusive es posible establecer filtros a los nombres de los recursos actualizados para mayor precisión en el cambio.
Intentando utilizar un software web que incluía un .htaccess y este se aprovechaba de la funcionalidad del RewriteEngine de Apache2, obtenía siempre el siguiente mensaje de error.
Invalid command ‘RewriteEngine’, perhaps misspelled or defined by a module not included in the server configuration
Solución
Activar el módulo del RewriteEngine de Apache2.
$ sudo a2enmod rewrite
Reiniciar Apache2 para que tenga en cuenta al módulo recién activado.
NodeJS es una plataforma de desarrollo de alta escalabilidad para aplicaciones en red basada en un único hilo de ejecución, una arquitectura orientada a eventos y un manejo asíncrono de E/S. Esta plataforma se programa utilizando Javascript del lado del servidor.
En el presente artículo se describen los pasos realizados para su instalación siguiendo dos estrategias diferentes.
Instalación
Utilizando el gestor de paquetes
En este caso la instalación es mas rápida y sencilla ya que el gestor de paquetes, apt/aptitude en este caso, se hace cargo de la descarga e instalación del software y sus dependencias.
Utilizando los repositorios por defecto
Los repositorios incluídos por defecto con el sistema operativo permiten instalar a NodeJS sin embargo no en su versión mas reciente sino un par de números atrasada.
Versión de NodeJS disponible en los repositorios de Ubuntu
Para realizar su instalación se debe ejeuctar el siguiente comando.
$ sudo aptitude install nodejs
Utilizando los repositorios del proyecto
Este método permite actualizar los repositorios del sistema operativo con el repositorio oficial del proyecto de donde se podrán descargar versiones mas recientes. Para hacer esto se deben ejecutar los siguientes comandos.
Versión de NodeJS disponible en los repositorios del proyecto
Una vez incluído el nuevo repositorio se procede a instalar el paquete normalmente.
$ sudo aptitude install nodejs
Desde el código fuente
Este método permite compilar una distribución de NodeJS para la versión específica del sistema operativo que se está utilizando. Esto requiere que se cuente con el soporte requerido de las herramientas de desarrollo y dependencias necesarias para construír el proyecto.
Descargar el código fuente de la última versión disponible (la 0.6.7 en este caso) desde la siguiente ubicación.
Aviso! Si desea instalar NodeJS en una ubicación central haciéndolo disponible para todos los usuarios del sistema operativo, omita el parámetro –prefix de la ejecución anterior, de lo contrario ajuste su ruta según la ubicación específica donde desee instalarlo.
Checking for program g++ or c++ : /usr/bin/g++ Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for g++ : ok Checking for program gcc or cc : /usr/bin/gcc Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for gcc : ok Checking for library dl : yes Checking for openssl : yes Checking for library util : yes Checking for library rt : yes Checking for fdatasync(2) with c++ : yes ‘configure’ finished successfully (0.776s)
El siguiente paso consiste en construír la distribución compilando su código fuente.
$ make
Y finalmente se debe instalar la distribución recién construída en la ubicación elegida.
$ make install
Aviso! Si se eligió instalar NodeJS en una ubicación central, la ejecución del comando anterior deberá ser hecha por el usuario root de la siguiente manera: sudo make install.
Actualizar el PATH para que incluya la ubicación de las herramientas de NodeJS recién instaladas. Realizar esta modificación en el .bash_profile/.bashrc del usuario o /etc/profile para tener un alcance global y garantizar que esta modificación persista cada vez que se inicia la máquina.
$ PATH=/home/jimezam/nodejs/0.6.7/bin:$PATH
Si el ajuste fue exitoso la aplicación node ya podrá ser accedida directamente desde la línea de comando.
$ which node
/home/jimezam/nodejs/0.6.7/bin/node
Prueba de funcionamiento: Hola Mundo NodeJS!
Crear el siguiente archivo de código Javascript para crear un servicio extremadamente simple que responda “Hola Mundo” ante las peticiones web de los clientes a través de navegadores.
$ vi prueba.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hola Mundo NodeJS!n');
}).listen(7777, '127.0.0.1');
console.log('Servidor ejecutándose en http://127.0.0.1:7777');
Para iniciar el servicio se debe invocar el comando node de la siguiente manera.
$ node prueba.js
Servidor ejecutándose en http://127.0.0.1:7777
Desde un navegador web acceder a la dirección mencionada.
Mientras que en producción mostrar al usuario final la información relacionada con el error producido es un riesgo de seguridad demasiado alto, durante el desarrollo del software es una condición necesaria para entender que está pasando con el código que se está probando.
En la mayoría de despliegues de Apache/PHP vienen ahora con esta opción desactivada, redireccionando por defecto los mensajes de error al archivo de registro habitualmente ubicado en /var/log/apache2/error.log.
Procedimiento
Es posible activar la opción de mostrar los errores de PHP en pantalla a tres diferentes niveles de acuerdo con el alcance que se le desee dar a este comportamiento.
A nivel global, esta modificación aplica a todo el servidor o sitios web publicados bajo esa configuración.
$ sudo vi /etc/php5/apache2/php.ini
error_reporting = E_ALL display_errors = On
A nivel de un directorio o una aplicación, esta modificación afecta a los scripts ubicados bajo un directorio específico.
$ vi /var/html/un/directorio/especifico/.htaccess
<IfModule mod_php5.c> php_value error_reporting E_ALL php_value display_errors on </IfModule>
A nivel de una sección de código específico, esta modificación afecta sólo una parte de un script.
Para que los ajustes de configuración de los últimos dos niveles sean tenidos en cuenta, el directorio donde del sitio web publicado deberá tener por lo menos activa la siguiente opción.
AllowOverride Options
Esta se deberá modificar bajo /etc/apache2/mods-enabled/userdir.conf para los sitios personales de los usuarios (public_html) o /etc/apache2/sites-enabled/* para los virtualhosts existentes.
Instalando Apache+PHP+MySQL en mi equipo con GNU/Linux Mint 12 encuentro el siguiente problema después de instalar el soporte para SQLite (php5-sqlite).
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20090626+lfs/sqlite.so’ – /usr/lib/php5/20090626+lfs/sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
La situación
Aparentemente el uso de SQLite versión 2 ha sido desestimado en pos del uso exclusivo de la versión 3, sin embargo extrañamente la configuración por defecto de PHP sigue intentando cargar su librería.
La solución
Remover la configuración de SQLite2 de PHP y utilizar la versión 3 únicamente.
Tenía deseos de instalar la versión mas reciente de Firefox (6.0) ya que esta promete por primera vez, manejar mucho mejor la memoria y así no consumirse todos los recursos del equipo unas horas después de trabajar con este navegador.
En uno de mis equipos utilizo GNU/Linux CentOS 6 el cual está enfocado principalmente a servidores y sus actualizaciones provienen directamente de la línea de RedHat. Por este motivo las versiones del software tardan bastante en actualizarse. Desafortunadamente la versión de Firefox que incluye la versión actual de CentOS es la 3.6.9 así que se puede suponer que tardarán bastante en llegar a la 6.0.
En el presente artículo se explican los pasos necesarios para instalar Firefox 6.0 manualmente en CentOS 6, sin embargo estos pasos pueden ejecutarse de manera genérica en la mayoría de las principales distribuciones de Linux.
Obtener Firefox.
Descargar el paquete de distribución mas reciente de Firefox para Linux en el idioma que se desee desde la siguiente ubicación.
En mi caso obtuve el archivo firefox-6.0.tar.bz2 después de la descarga.
Instalar Firefox.
Se instalará la versión de Firefox recién descargada bajo el directorio /opt.
# tar xjvf firefox-6.0.tar.bz2
# mkdir -p /opt/firefox/
# mv firefox/ /opt/firefox/6.0/
Se remueve el ejecutable desplegado por la versión previa de Firefox.
# mv /usr/bin/firefox /usr/bin/firefox_3.6.9
Establecer las alternativas de versiones.
Se utiliza alternatives para diferenciar las versiones de Firefox instaladas y elegir una de ellas como activa según se desee. Para hacer esto se crean las dos alternativas.
El artículo presentado a continuación describe el procedimiento necesario para instalar el navegador web Google Chrome en GNU/Linux CentOS 6 utilizando repositorios Yum. Este procedimiento probablemente aplique también para otras versiones de CentOS y Fedora.
FuelPHP es un framework para el desarrollo de aplicaciones que a pesar de su muy reciente aparición es muy interesante y prometedor para el entorno del desarrollo de aplicaciones web con software libre. Este framework es similar a Codeigniter o Kohana en términos de su simplicidad, sin embargo no se basa directamente en ninguno de ellos sino que por el contario, toma los conceptos e ideas de diseño exitosas de los principales frameworks y los integra en una única base para la implementación de aplicaciones web.
Teniendo una relativa corta edad, su desarrollo ha sido veloz y su versión 1.0 se encuentra muy próxima a publicarse. La documentación también ha evolucionado rápidamente y se encuentra en contínua actualización. Esta se presenta por secciones que se pueden revisar directamente siendo esto muy apropiado para las consultas rápidas de la misma sin embargo -en mi opinión personal- no es tan útil cuando se está aprendiendo del framework por primera vez ya que no es posible realizar una revisión o búsqueda líneal de los temas ni mucho menos imprimirlos.
Dado lo prometedor del framework decidí tomarme un par de minutos para desarrollar una solución que me permitiera consolidar fácilmente la documentación en un único documento para poder imprimirlo y estudiar de él. Terminé con una pequeña herramienta basada en Javascript con jQuery que realizar esta tarea. Debido a las limitaciones de seguridad impuestas por los navegadores es necesario que se descargue en un servidor web local la documentación para que pueda ser procesada por esta herramienta.
Debe tenerse en cuenta que los documentos generados o impresos no recibirán las contínuas actualizaciones que si recibe la versión en línea, por este motivo prefiero no distribuír el documento completo con la versión del día sino compartir el método para que pueda ser creado frecuentemente.
Instalación.
Crear una carpeta en el árbol de directorios (DOCUMENT_ROOT) públicos del servidor de páginas.
Descargar la distribución actual de FuelPHP y descomprimirla en el directorio web al mismo nivel de la herramienta.
Los archivos contenidos en la carpeta de mas alto nivel serán similares a los mostrados a continuación en la cual se utilizó la versión 1.0-RC3 del framework.
Contenidos de la carpeta web
Configuración.
El único paso necesario para configurar la herramienta consiste en editar el archivo FuelPHPOneDoc/FuelPHPOneDoc.js y modificar apropiadamente el valor de la variable baseUrl la cual deberá contener la dirección absoluta en la cual se publicó localmente la documentación de FuelPHP. De esta manera en el ejemplo anterior, si la carpeta pública web corresponde con la dirección http://localhost/onedoc/ entonces el valor de baseUrl será http://localhost/onedoc/v1.0-rc3/docs/.
Ejecución.
Acceder al URL de la herramienta utilizando un navegador web. En el caso del ejemplo anterior sería a la dirección http://localhost/onedoc/FuelPHPOneDoc/FuelPHPOneDoc.html.
Documentación de FuelPHP en un unico documento
Requerimiento: servidor de páginas web.
Por la razón que se mencionó anteriormente, es necesario contar con un servidor de páginas web para publicar tanto el contenido de la documentación original de FuelPHP como la herramienta para modificar su presentación.
En caso de no contarse con un servidor de páginas instalado, este podrá obtenerse de diferentes maneras: Apache (todas las plataformas), Internet Information Service (sólo Windows), XAMPP (todas las plataformas) y nginx (todas las plataformas) entre muchos otros.
Si no se cuenta con ninguno de estos servidores de páginas web pero se cuenta con soporte para el lenguaje Python, es posible utilizar temporalmente el servidor web de desarrollo que incluye este lenguaje. Para utilizarlo será necesario abrir una terminal y ubicarse en el directorio que se convertirá en público a través de web e invocar la aplicación.
$ cd /home/jimezam/tmp/FuelPHP
Si cuenta con soporte para Python 2.x:
$ python -m SimpleHTTPServer
En cambio, si se cuenta con soporte para Python 3.x, la instrucción a ejecutar será la siguiente.
$ python -m http.server 8000
En ambos casos el puerto que se utilizará para lanzar el nuevo servidor web será el 8000 así que este tendrá que ser tenido en cuenta durante la determinación del respectivo URL. En este caso, el URL que deberá ser consultado será http://localhost:8000/FuelPHPOneDoc/FuelPHPOneDoc.html.