viernes, 26 de febrero de 2010

Drupalcamp Spain 2010 - Viernes - Jquery




A las 15:00 horas Ricardo Sanz comenzaba la sesión "Introducción a Jquery". Los diez primeros minutos sirvieron de introducción, presentado Jquery y comentando hasta dónde podemos llegar. Me ha gustado la analogía que ha utilizado en la sesión : "Apuntar y disparar". Apuntar, los más avispados se habrán dado cuenta, refiriéndose al DOM , y "disparar" a la ejecución del código posterior. Toda la sesión ha sido muy práctica, ilustrada siempre con ejemplos. Para ilustrarlos usaba Firefox con el complemento Firebug sobre una plataforma Micro$oft Window$.
Me ha parecido muy interesante, y una opción a plantearme en futuras ponencias, la entrega de una pequeña plantilla con el resumen y los ejemplos de la sesión. Ayuda a no perder el hilo! Enhorabuena.

Nota: 6.5 sobre 10

Drupalcamp Spain 2010 - Viernes - Llegada



Acabo de llegar hace 30 minutos al Citilab, el recinto donde se celebra la Drupalcamp Spain 2010. Después del día de ayer, con el típico retraso en el aeropuerto y llegar al hotel alrededor de la 01:15 de la madrugada; y de haber dormido más bien poco, estamos en faena.
La organización del evento, a priori, parece que ha pensado en todo( o casi). La recogida de acreditaciones con su respectiva bolsa drupalera fue muy ràpida,y ahora mismo estoy instalado en una especie de salón de unos 300 metros cuadrados con mesas, pcs , conexión a Internet y posteando un rato antes de entrar. Aún no tengo muy claro qué voy a hacer hasta la 13:00 cuando se inaugure el cotarro. Intentaré acercarme a algún Linuxero, que hay a patadas. Creo que los estoy espantando con el puto Macbook. Hay netbooks a patadas, y si antes de venir ya tenía ganas de comprarme uno, creo que tan pronto cómo pueda lo haré.
Examinando en programa de la Drupalcamp, tengo ganas de asistir a todas, pero claro, no va a ser posible. La idea es asistir a las más interesantes a nivel técnico, y dejar las institucionales y promocionales a un lado; y en los tiempos muertos, trastear un poco con lo que aprenda.

jueves, 25 de febrero de 2010

Clean URL para Drupal con lighttpd

Típico en las instalaciones de Drupal es querer mostrar la URL del tipo http://misitio.com/articulo-windows-no-funciona . Pues con lighttpd es muy sencillo.Editamos lighttpd.conf, nos aseguramos de tener el módulo mod_rewrite habilitado:

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_rewrite",
"mod_fastcgi",
"mod_redirect",
"mod_evhost",
"mod_usertrack",
"mod_rrdtool",
"mod_webdav",
"mod_expire",
"mod_flv_streaming",
"mod_evasive"
)

Ahora añadimos :

url.rewrite-final = (
"^/system/test/(.*)$" => "/index.php?q=system/test/$1",
"^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
"^/([^.?]*)$" => "/index.php?q=$1",
"^/rss.xml" => "/index.php?q=rss.xml"
)

Ahora reiniciamos a lucifer:

hansolo:~# /etc/init.d/lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
hansolo:~#



Esta configuración es para Drupal 6.x, por lo menos en esta versión sí funciona. En el wiki de lighttpd hay más información sobre mod_rewrite.

Habilitar cgi en lighttpd

¿Por qué? El por qué es sencillo. Necesito habilitar la ejecución de CGIs en un webserver para mostrar en una gráfica el envio de mensajes de una máquina corriendo Postfix. ¿Qué es un CGI? En la wikipedia tienes una definición mucho mejor de la que pueda escribir. Si sueles leer este blog(cosa que dudo), habrás observado algún que otro post sobre lighttpd. Pues bien, la máquina que ilustra este ejemplo, es la tercera que tengo actualmente en producción sirviendo webs con lighttpd y puedo decir que estoy muy satisfecho con los resultados. El rendimiento en relación a Apache2 y Cherokee es espectacular. Por partes. No se trata de desmerecer a ningún software httpd, pero tengo mis predilecciones dependiendo del escenario.
  • Apache2: Máquinas con hardware "potente" dónde el procesador y el consumo de RAM no supongan un problema. Es muy sencillo de configurar. Hay mucha documentación tanto en la red Internet como impresa. Lo instalo en máquinas que no sólo administro yo, es decir: "Alberto, mira, que el PHP dice que "not found curl extension"", y claro, entonces le dejas subir al cielo contestando "estás en el grupo sudoers, ¿sabes instalar paquetes en Debian GNU/Linux?", entonces el luser del programador contesta "claro!Uso chupiBuntu Linux desde hace 6 meses, ya lo instalo yo"; y claro, luego le comentará a sus amigos "...y claro, el Administrador no tiene ni puta idea y tuve que instalar en un servidor que tenemos en la provincia Hoth , en Dinamarca, el soporte CURL para PHP5". ¿Lo habéis entendido, verdad?
  • Cherokee. Máquinas con hardware "normal"[fíjense en la notación entrecomillada, que debería ir con ], con un equilibrio relativo entre el número de peticiones y las prestaciones de la máquina. Lo instalo(instalaba, ahora estoy "fall in love" con lighttpd) en escenarios dónde el tiempo de respuesta es realmente importante. Cherokee responde bien, se actualiza constantemente, y la interfaz gráfica de cherokee-admin es de lo mejor que he visto en los últimos meses.
  • Lighttpd. Ideal para un VPS, con poca RAM, limitada por el propio entorno de virtualización. Es muy rápido y el consumo de memoria es muy muy escaso, tanto, que muchas veces ni te darás cuenta de que se está ejecutando en el servidor. El fichero de configuración, si estás acostumbrado a Apache2, al principio es un poco hostil, pero luego te acabas acostumbrando.
Después de esta chapa, vamos al tema.Lo primero es cargar el módulo cgi en el fichero de configuración[/etc/lighttpd/lighttpd.conf]. En Debian GNU/Linux 5.0.x por el paquete precompilado de lighttpd ya soporta cgi's.

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_cgi"
)
include "mod_cgi.conf"

Mediante una directiva include, indicamos que lea el contenido del fichero mod_cgi.conf, cuyo contenido es el siguiente:
Fichero /etc/lighttpd/mod_cgi.conf

alias.url = ( "/cgi-bin/" => "/var/www/cgi-bin/" )
$HTTP["url"] =~ "^/cgi-bin/" {
#Deshabilitamos el listado de directorios
dir-listing.activate = "disable"
cgi.assign = (
".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl"
)
}

Ahora sólo nos queda localiza este bloque de código en el fichero lighttpd.conf y añadir la extensión .cgi para que sea excluída por el servidor a la hora de manejar ficheros estáticos.

# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".cgi" )

Reiniciamos a lucifer y listo.

hansolo:~# /etc/init.d/lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
hansolo:~#

Uso mailgraph para generar las gráficas, y el resultado es.....

miércoles, 24 de febrero de 2010

PEAR para comprobar respuestas icmp

PEAR es un repositorio de extensiones para PHP, que añade funcionalidades "extra" a este lenguaje de programación. Personalmente me interesan todas las relacionadas con el networking. Esta mañana he revisado mis enlaces y he "escrito" un pequeño script PHP que devuelve esta estado de un host. Simplemente comprueba si responde a un paquete ICMP. Si es así, muestra un mensaje en pantalla.

Si aún no conoces PEAR, y programas aplicaciones PHP , o simplemente tienes curiosidad, en este enlace tienes documentación sobre cómo instalar PEAR en Ubuntu. Aún no he implementado PEAR en ninguno de los servidores que administro. En mi máquina con Ubuntu 9.10 [Linux apermuy-desktop 2.6.31-19-generic #56-Ubuntu SMP Thu Jan 28 01:26:53 UTC 2010 i686 GNU/Linux] he seguido las instrucciones para la instalación de la web oficial. Si tienes experiencia instalando aplicaciones desde el terminal no tendrás demasiados problemas.

El paquete que he utilizado en el script es Net_Ping. En un primer momento y con el ejemplo de la web, el resultado es confuso: "escupe" en un array el resultado de un var_dump, con lo cual os podéis imaginar...Sí he comprobado, por lo menos en este paquete, que a pesar de que los programadores corrigen bugs y añaden nuevas características, el ejemplo de código para describir el uso de Net_Ping es "bastante cutre". He recurrido a esta web para comprender totalmente la utilización de la extensión.

Fichero ping.php :

require_once "Net/Ping.php";
$ping = Net_Ping::factory();
if (PEAR::isError($ping)) {
echo $ping->getMessage();
} else {
$ping->setArgs(array('count' => 1));
$servidores = array(
0=>"www.gnome.org",
1=>"www.debian.org",
2=>"www.gnu.org");
foreach($servidores as $posicion=>$host){
if($ping->checkhost($host)){
echo "El host ".$host." esta levantado
";
}
else{
echo "El host ".$host." esta caido
";
}
}
}
Es evidente que no soy ni programador ni experto en PHP, pero estos días me documentaré más sobre PEAR, un proyecto realmente interesante.