viernes, 5 de julio de 2013

Configurar drush Drupal en hosting compartido



Sin aire no hay vida y sin drush no hay Drupal, así de claro. 
Desplegar cambios desde desarrollo, preproducción y producción con drush es una auténtica gozada. Entendiendo por gozada que tú o tu equipo de desarrollo tiene el control sobre el/los servidores del proyecto. ¿Qué sucede cuando el servidor de producción es un hosting compartido o una máquina corporativa en la que no puedes instalar drush?

En Codery solucionamos esta papeleta del siguiente modo.

Servidor no administrado:

1.- Descargamos el paquete "drush" a un directorio, p.e nuestro $HOME.

wget http://ftp.drupal.org/files/projects/drush-7.x-5.9.tar.gz
tar zxf drush-7.x-5.9.tar.gz

2.- La ejecución de drush desde $HOME es tan sencillo como:

php drush/drush.php -r www drush cc all

En ocasiones incluimos un 'alias' en .bashrc para 'agilizar'.

Servidor origen:

1.- Aquí es dónde está el 'truco'. En el fichero sitio.aliases.drushrc.php incluímos la ruta a drush en el servidor remoto

 $aliases['www.c'] = array(
  'root' => '/home/c/www',
  'uri' => 'http://www.ces',
  'remote-host' => 'www.c.es',
  'remote-user' => 'c',
  'db_url' => 'mysql://c:c@h.c.es/www',
  'path-aliases' => array(
    '%drush-script' => '/home/c/drush/drush',
    '%dump' => '/home/c/drush-backups/c-www.sql',
    '%files' => '/home/c/www',
  ),
);







Qué fácil es la vida con drush! :P

lunes, 1 de julio de 2013

Postfix masquerading


Dejo unas notas sobre cómo modificar el email del remitente de la cuenta root en una máquina corriendo Postfix.

Problema:

El destinatario recibe el email de la cuenta root@nombremáquina en lugar de una FQDN.

La solución es muy sencilla. Antes de ponerse a trastear, recomiendo encarecidamente leer el "Postfix Address Rewriting" . Al grano.

1.- Crear el fichero smtp_generic_maps con el contenido
root@nombredemimaquina  info@midominiomolon.org
2.- Hashear el fichero:

postmap hash:/etc/postfix/smtp_generic_maps

3.- Incluir la directiva smtp_generic_maps en el fichero main.cf

smtp_generic_maps = hash:/etc/postfix/smtp_generic_maps

4.- Reiniciar postfix

service postfix restart

Configuración testeada en :

SSOO: Ubuntu Server 12.04.1 64 bits
Postfix: 2.9.6-1~12.04.1




domingo, 30 de junio de 2013

"Sábados libres na Altamar" - Vigo - Junio 2013

Ayer tuve la oportunidad de asistir a la jornada "Sábados libres na Altamar" organizados por los amigos/as de GALPon en Vigo.

A las 08:00 salí de Ames y en menos de una hora ya estaba en Vigo. El evento tuvo lugar en la residencia Altamar, un lugar bastante céntrico y accesible(vamos, que es fácil llegar).

Antes de comenzar de manera oficial jornada,ya estábamos por allí unos cuantos con ganas de conocer más detalles sobre RaspberryPI. El evento de dividió en dos sesiones de mañana, de 10:00 a 13:30 y tarde, de 16:30 a 19:00 horas.


La primera charla introductoria a RaspberryPI a cargo de Miguel Bouzada(GALPon) se extendió de 10:00 a 12:00. Lo primero que me llamó la atención es la calidad de la documentación aportada en el wiki de GALPon en general, y en particular el apartado "Argallando cunha RaspberryPI". Otro tema que me llamó la atención fue el número de asistentes: 30 de 30 plazas posibles. 

A continuación turno para Xavier Villar, miembro de Inestable, que nos deleitó con unha charla super-hardcore de clustering con RaspeberryPI.  Para un ser tema muy técnico, la explicación e introducción inicial fueron muy amenas. A pesar de las dificultades técnicas de la instalación y configuración, al final de la charla pudimos comprobar las bondades de la ejecución de procesos en paralelo.


14:00, turno para comer en buena compañía con miembros de Melide, GALPon, OZulo y público en general. Por cuestiones personales no pude asistir a toda la jornada de tarde, pero me quedo con un muy buen sabor de boca y con ganas de asistir a próximas ediciones. Enhorabuena a GALPon!

Cosillas interesantes sobre RaspberryPI
  • Openmediavault
  • Moebius
  • Uso de tarjetas SDHC clase 10 y montaje de /var /home /tmp en disco o llave USB para mejorar el rendimiento.

Puntos positivos:
  • La temática.
  • La calidad de las charlas.
  • Los conocimientos de los ponentes.
  • Los asistentes.Sin conocernos prácticamente de nada, el compañerismo y el espíritu de enseñar / compartir fue excepcional.
  •  
Puntos no tan positivos:
  • La conexión a Internet.
  • Desde mi punto de vista, y a pesar de que las tres charlas me han parecido muy buenas, pienso que el nivel fue demasiado alto.

domingo, 17 de febrero de 2013

#LAV013 , de nuevo en Vedra!

Pues sí que pasa pronto el tiempo! Ya ha pasado un año desde el último post relacionado y... es tiempo de #LAV013,  un evento centrado en temática audiovisual organizado por la Asociación Cultural Senunpeso en Vedra. @probatto y es que suscribe( @apermuy ) hemos tenido la suerte de que la organización confiase en el trabajo que llevamos desarrollando desde hace una década en la Asociación Comunidade O Zulo para el montaje de la red wifi del #LAV013.


Como el año pasado usamos Zentyal, y los resultados fueron más que satifactorios. Usamos un PC con procesador Intel Celeron 1,8Ghz y 2GB de RAM para 80 clientes repartidos en dos puntos de acceso( WRT54G y Ovislink 8000 AP). En menos de 1 hora instalamos el SSOO y configuramos la reglas del firewall y proxy transparente, y como por arte de Tux la ya teníamos cobertura wireless en la mayor parte del edificio.


[ Detalle de la tabla de clientes DHCP]

Os recomiendo encarecidamente el uso de Zentyal para este tipo de despliegues. Es una distribución estable, robusta y sobre todo pensada para el usuario y para facilitar su administración.

Por lo demás, qué voy a decir, encantado de coincidir de nuevo con Mon,Xurxo, Fer,Aberlardo y todos los miembros de SenUnPeso. Encantado también de recibir a @probatto en Casa Permu y que ya estoy deseando que llegue el #LAV014.

Ah! Casi lo olvido, el próximo sábado 23 aburriré de nuevo al personal en Vedra con mi charla "Redes libres: internet sen un peso".

Salud!




jueves, 14 de febrero de 2013

Molom Error :Invalid API keys. Error 401: Invalid authentication.

No hay sitio, portal o proyecto web que se precie que no use un CAPTCHA para evitar spam, bien sea en formularios de registros de usuarios, comentarios..etc.¿He dicho CAPTCHA? Eso es historia. Si todavía sigues usando CAPTCHA sigue leyendo, te interesa.

Yo(nosotros) uso Mollom, un software desarrollado para cumplir un único objetivo: evitar spam en tu sitios web. Y lo hace muy bien! Su creador es Dries Buytaert, os suena de algo? Si queréis saber más acerca del proyecto visitad su web, está todo muy claro.

[ Detalle de las estadísticas de Mollom para el dominio www.comunidadeozulo.org ]

Al grano. El caso es que este módulo para Drupal 6.X cada X tiempo devolvía errores de validación OAuth contra el servicio de autenticación REST de Mollom.com. Y tras muchas vueltas, y bueno, por qué no decirlo, la inestimable ayuda de los fotos de Drupal.org, he encontrado la solución al error:


"Invalid API keys.Error 401: Invalid authentication."


y la he adaptado para un servidor corriendo Debian GNU/Linux y Drupal.

El error es muy simple.¡La zona horaria del servidor está mal configurada!¡Por eso "casca" el proceso de autenticación de Mollom!. La solución, muy sencilla:

1.- ntp. Sincroniza tu servidor/máquina con ntpdate. Puedes añadir una tarea "cron" para el que servidor sincronize el reloj cada día, por ejemplo:


30 * * * *    root     ntpdate.hora.rediris.es > /dev/null 2>&1

2.- Configura la zona horaria del servidor

dpkg-reconfigure tzdata


Ahora Mollom debería funcionar sin problemas!

martes, 29 de enero de 2013

SASL authentication failure: No worthy mechs found

Fácil:

apt-get install libsasl2-modules && service postfix restart && postqueue -f && postqueue -p

miércoles, 2 de enero de 2013

Snippet: DESCRIBE MySQL & PHP

Este snippet me ha librado de un buen marrón. Lo anoto a modo de "chuleta" para un futuro.

$res = mysql_query('DESCRIBE dev_wsx');
while($row = mysql_fetch_array($res)) {
    echo "{$row['Field']} - {$row['Type']}\n";
}
?>

martes, 27 de noviembre de 2012

drush y drush make Drupal

A modo de "chuletilla" publico unas notas sobre la instalación de "drush" y "drush make" para Drupal dedicadas a mi compañero de batallas drupaleras @jcartelle.

La instalación de drush en GNU/Linux es super sencilla. Nos aseguramos de que hemos instalado en nuestro sistema el paquete "php-pear".


root@toshiba-sdk:/home/apermuy/wwwroot/test/varios# dpkg-query --status php-pear
Package: php-pear
Status: install ok installed
Priority: optional
Section: php
Installed-Size: 2228
Maintainer: Ubuntu Developers
(...)
 PHP5 is a widely-used general-purpose scripting language that is
 especially suited for Web development and can be embedded into HTML.
 The goal of the language is to allow web developers to write
 dynamically generated pages quickly.
Homepage: http://www.php.net/
Original-Maintainer: Debian PHP Maintainers

En caso contrario, ya sabéis:
apt-get -y install php-pear

Seguimos las instrucciones de instalación del sitio http://drupal.org/project/drush .

pear channel-discover pear.drush.org
pear install drush/drush

Perfecto! Ya tenemos instalado drush en nuestra máquina. Ahora vamos con "drush make".  Esta maravilla nos permite levantar sitios web con Drupal 6 / 7 cargando un perfil con los módulos o temas que hemos seleccionado previamente. Para la selección de estos módulos utilizaré la herramienta http://drushmake.me/ que nos permite de un modo sencillo y rápido seleccionar tanto módulos como temas. Una vez seleccionados hacemos "clic" en "Generate makefile" y descargamos el fichero en "crudo"(link "raw makefile".



Ahora movemos el fichero(en mi caso varios.make) varios.make al directorio raíz (en mi caso) del servidor web y generamos el directorio de instalación.
mv /tmp/varios.make /home/apermuy/wwwroot/test/varios
drush make varios.make postblog



Ahora sólo tenemos en acceder al directorio y ejecutar "drush site-install".

drush site-install --site-name="Post Blog" --account-name=admin --account-pass=admin --db-prefix=test3_ --db-url=mysql://drupales:drupales@localhost/drupales

Observaciones:
  • prefix: suelo usar prefijos en las tablas para entornos en desarrollo, me permite usar una única base de datos para todas las pruebas.
Saludos.

Mi vida con los ISPs


La primera vez que me conecté a Internet fue en 1997, en un cibercafé de Ferrol. Recuerdo un obsoleto Netscape y un Windows 95 que se conectava vía RDSI. En 1999 accedía casi a diario y a finales de ese mismo año creo recordar ya me conectaba con Eresmas.Los años oscuros de la conexión por módem RTB se prolongaron hasta 2002 o 2003, no recuerdo exactamente.

En mi casa(en casa de mis padres para ser exacto) contábamos con un handicap que nos impedía conectarnos los fines de semana con asiduidad: mi padre trabajaba en el extranjero, con lo cual la línea no podía estar ocupada. Recurrimos a mil artimañas, incluso hacer una especie de puente físico con el módem y un altavoz que sólo funcionó un par de veces. Recuerdo con cierta "morriña" los tiempos de IRC, cuando un amigo(era,ahora ya no me quedan) me enseñó a descargar ficheros, podía llegar a descargar hasta 650Mb por semana, algo que con la conexiones de hoy en día haríamos en 30 minutos o menos.

Y en esto...apareció Ya.com. Contratamos el ADSL de 256Kbps y la verdad, creo que el día que configuramos aquel router USRobotics fue uno de los días más felices de mi vida delante de un PC. No sólo no "comunicaba" el teléfono, si no que no había restricción de horarios y la velocidad de descarga se multiplicaba por 5. Durante 4 años nos conectamos por Ya.com hasta que decidí independizarme ir marcharme a Ferrol a vivir una de las mejores etapas de mi vida. Por aquel entonces entre alquiler, recibos, coche y comida apenas tenía dinero para otros gastos, así que "pedí prestada" la conexión a un taller cercano a casa. Tiempos de aircrack y airodump! Incluso me curré una antena casera con el puro de un boda!  y más tarde, montamos una subred con mi PC "haciendo" de proxy-firewall con Debian GNU/Linux....

A finales de 2008 me trasladé a Compostela, a vivir con @biokeko y más de lo mismo hasta que en Enero de 2009 decidí pagarme un "pincho USB"(bueno, y también algo de la wireless del vecino/a). La conexión funcionaba realmente bien hasta que consumías 3,5G y zasca! A navegar a 128kbps.

En 2010 no podía creer que Vodafone lanzase al mercado un "pincho USB 3G" con base wireless sin límite de consumo de datos y sin permanencia, así que, a por él! . Os recuerdo que durante estos años vivía en pisos de estudiantes, o lo que es lo mismo: economía de guerra, piso alquilado por X meses y "oye tío, intenta conectarte a la wifi del vecino." 8 meses en los que en varias ocasiones creí haber quemado el pincho: que si aptitude safe-upgrade, que si Transmission... Vodafone me la jugó. En agosto de 2010 nos mudamos a un piso en Bertamiráns y por fin podía tener mi propia conexión de cable. El proceso de baja en Vodafone no fue ni rápido ni transparente ni nada que se le parezca. Son lo peor, y cuando digo lo peor es lo peor. No voy a contar las peripecias hasta que por fin pude dar de baja el servicio, sólo os cuento que tuve que pasar el "pincho" a prepago y dejar morir la tarjeta.

Desde 2010 soy cliente de R, y aunque he tenido mis historias, estoy bastante satisfecho con el servicio.

jueves, 22 de noviembre de 2012

exfat en Ubuntu 12.04 LTS


La semana pasada actualicé el MacBook de Snow Leopard a Lion, más por curiosidad que por otro motivo. El caso es que aproveché para redimensionar el disco duro y actualizar también Ubuntu 10.04 a  12.04. La copia de seguridad de los ficheros que almacenaba en OSX la realicé con el clásico "cp -R" en lugar de Time Machine. Hasta ahí todo bien. El caso es que cuando arranco Ubuntu 12.04 en el portátil y "pincho" el disco USB y descubro de Ubuntu "out of the box" no soporta "exfat". La solución, como casi siempre en GNU/Linux, muy sencilla.

apt-add-repository ppa:relan/exfat
aptitude update
apt-get install fuse-exfat

jueves, 15 de noviembre de 2012

De 1 usuario a 1 millón

Revisando mis feeds en Google Reader llego a la cuenta de Highscalability.com y me encuentro con este más  que interesante vídeo. Comenta en 10 "no tan sencillos" pasos cómo aumentar las visitas o cómo potenciar el impacto de un sitio/proyecto web. Más que recomendado.


 

viernes, 14 de septiembre de 2012

Zentyal 3.0 : primeras impresiones [ Update 1]


[ Update 1 17-09-2011 ]

He probado Zentyal 3.0 en dos máquinas. Todavía no he visitado su base de datos de "bugs" pero me he encontrado el mismo error en dos máquinas distintas y de distinta arquitectura. El "bug"(realmente no sé si es un bug, pero todo apunta a que sí lo es) congela el proceso de instalación de software vía interfaz web. Mi solución ha sido matar el proceso apt y continuar la instalación desde la línea de comandos. Lo curioso del caso es que a posteriori he probado de nuevo Zentyal 3.0 dentro de un VirtualBox y he encontrado el mismo error. Supongo que toca investigar....

¿Actualizar desde la 2.2 a 3.0? Ummmmmmmmm, no me fío. Comentan en los foros de Zentyal:


I am sure the devs will do a great job on getting a decent upgrade path, but it will take some time (probably some weeks) before it is available.


[Post original]

Tenía ganas(muchas) de probar la nueva versión de Zentyal 3.0. No voy a contar/replicar/copiar/pegar las características de esta nueva versión, pues de gente de Zentyal lo ha hecho fenomenal en este link "Novedades Zentyal 3.0".

Actualmente administro máquinas corriendo Zentyal 2.X y los resultados no pueden ser más satisfactorios: estable, segura y muy sencilla de administrar. Conclusión: clientes contentos y reducción considerable del número de "browns"(Consultar el tratado del marrón) al simplificarse la administración del sistema.

Si ya estáis trabajando con Zentyal en producción el propio ssoo os avisará de la disponibilidad de la nueva versión. De momento está testeando al distribución en una máquina virtual. Veremos como se comporta en producción. El próximo fin de semana probaré esta nueva versión con 65 usuarios en el "IX Ciberencontro Concello de Mugardos  Kernel 2012" y os contaré cuál ha sido mi experiencia.

Ubuntu 10.04.1 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/
New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

                    *** Zentyal WARNING ***

Lo primero que me ha llamado la atención en el la versión 3.2.X del Kernel de Linux, por otro lado es obvio, puesto que está basada en Ubuntu 12.04 LTS. La instalación es muy similar(visualmente quiero decir), por no decir idéntica a versiones anteriores.


Finalizada la instalación sorprende(o no) la cuidad interfaz de administración. Si ya has utilizado Zentyal con anterioridad comprobarás como se han mejorado aspectos relacionados con la usabilidad de la interfaz. Además han añadido la opción de configuración de idioma desde la propia interfaz. Para "español" no hay problema. Para "galego" es necesario realizar la operación desde la línea de comandos.

Entrando ya en temas más concretos, personalmente me interensan los módulos HTTPProxy y VPN

Para el módulo HTTPProxy siguen apostando por Squid. Estos son los "pequeños" cambios que he apreciado a primera vista:
  • Pasan de la versión 2.7.STABLE7  a la 3.1.19-1. No tengo experiencia con Squid3(está mis objetivos a corto plazo, así que poco puedo aportar. Y eso? Pues en Debian Lenny siguen con 2.7 y por el momento....
  • Han mejorado la gestión de las "Delay pools".
  • Desde mi punto de vista han mejorado la gestión de las reglas de acceso. En esta nueva versión, aplicarlas es más intuitivo que la versión anterior.
Qué podrían mejorar?
  • Podrían incluír una opción para poder gestionar las políticas de control de caché. [ Más info ]
  • Podrían incluír una opción para poder gestionar "cache_peer" [ Más info ]

En resumen: Zentyal 3.0 es una solución estable y robusta para la implantación en PYME. Esta nueva versión, a pesar de no ser "revolucionaría", continúa con la progresión ascendente en cuanto a calidad, usabilidad y estabilidad de sus predecesores. Enhorabuena!


miércoles, 12 de septiembre de 2012

SSH práctico

A modo de recordatorio dejo unas notas sobre OpenSSH.

Problema:Conexión "automática" a servidores corriendo OpenSSH en distintos puertos con diferentes usuarios,configuraciones y llaves.

Consejo: Edita el fichero ~/ssh/config tal y como se indica en este ejemplo:


 Host dama
    User powerslave
    Port 666
    Hostname iron.maiden.com



Host blind
    User ozzy
    Port 1024
    Hostname crazy.train.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/ozzy_rsa


En la práctica: 


ssh dama


Establecerá una conexión SSH al host iron.maiden. com en el puerto TCP 666


ssh blind


Establecerá una conexión SSH al host crazy.train.com en el puerto TCP 1024 usando la llave almacenada en ~/.ssh/ozzy_rsa

Problema:Ejecutar comandos en un servidor remoto.

Consejo: Recomiendo incluir el host en fichero  ~/ssh/config

Ejemplo: 

apermuy@vpn:~$ ssh apermuy@vps 'cat /proc/cpuinfo|grep model'
model           : 6
model name      : QEMU Virtual CPU version 0.9.1


Problema: Al intentar conectarnos a un servidor remoto recibimos el mensaje "WARNING: POSSIBLE DNS SPOOFING DETECTED!  " y/o "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! "

Consejo:  Como indica el propio mensaje "Alguien está haciendo algo malo...". Revisa tus llaves RSA/DSA, logs, accesos....

Ejemplo:


ssh-keygen -R vps.algunhost.org


Problema: Backup directorio con tar sobre ssh.
Consejo: No uses la opción verbose( -v). Incluye siempre que sea posible el host en el fichero  ~/ssh/config

 Ejemplo: Este ejemplo envía el contenido del directorio /tmp al server definido en ~/ssh/config y, lo empaqueta en tar y lo comprime con gzip.

 tar zcf - /tmp | ssh apermuy@vps "cat > tmp.tgz"



 Problema: No solicitar que se verifique un host desconocido. 

root@vpn:/home/apermuy# ssh apermuy@vps
The authenticity of host 'vps.algunhost.org (111.111.222.333)' can't be established.
RSA key fingerprint is 2b:11:13:49:11:f9:72:71:28:67:51:2f:d7:2a:5d:6d.
Are you sure you want to continue connecting (yes/no)?


Ejemplo: 

 UserKnownHostsFile /dev/null
 StrictHostKeyChecking no 

Problema: Compactar con tar al vuelo vía ssh hacia un host remoto.

Ejemplo:

 tar zcf - /home/apermuy | ssh apermuy@111.222.333.444 "cat > /tmp/test.tar.gz"



miércoles, 29 de agosto de 2012

Putty Gen “Server refused our key”


Por motivos laborales me he visto obligado a utilizar Microsoft Windows Vista como sistema operativo. El caso es que al generar un par de claves RSA e intentar conectarme a un servidor corriendo OpenSSH recibo "siempre" el siguiente error:

Server refused our key

La solución es muy sencilla. Una vez hemos copiado la clave pública al servidor en cuestión usamos "ssh-keygen" para limpiarla y "convertirla" a "formato openssh" con el siguiente comando:


apermuy@vpn:~$ ssh-keygen -if id_rsa_vbox_sdk.pub > pub_vbox


El siguiente paso es añadir la "llave limpia" al fichero %h/authorized_keys . Tan sencillo como:


cat pub_vbox >> .ssh/authorized_keys


El problema por el cual el servidor rechaza la llave es el formato de la misma. Resumiendo. El "formato" de la llave que genera "putty-gen" es distinto a que espera el servidor(openssh).Veamos un ejemplo:

Contenido de la llave en formato "putty-gen":

El mismo contenido después de convertirla a formato ssh, tal y como se indica en este post:


ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAvkO+GR3NqkGdPxn2MesgSiJBoZ7zzIsULb/JzdP48z6LKAT5YbKs0sRdoUv2iK9pgrJXn18y62yVFAf0BPkgJOS6u7sGkwIHLnyhFI0Pb+NEpXALtCYIUKv6Vh8NfaAcy7M4icM8wRMZ14CAe3SCmoby/MZbqfo9GeUXuBAYxDH---------------------VylMVhxRnuUnMjKkjzSEYNZvc0/dq6omuEGw2VbyTjLcYel5kmmvM8OFXFnqg9Kr0ITjZBxvNk56S9jfOqs9qgt9TMFFHUgHGaYpS+S42JG7m5k7HSp57ZrRaP/9l4BqOQLnwTJLFjOCV272uQzbbUQ==

En resumen: el formato "openssh" sólo espera una línea con el contenido de la llave, comenzando la cadena(p.e) por "ssh-rsa".
Saludos!

lunes, 27 de agosto de 2012

Mi visión particular del verano

El verano se ha terminado, por lo menos para mí. Hoy he comenzado a trabajar después de 21 días de vacaciones. Apenas he viajado, sólo un paseo de 3 días a Bueu y Cangas. No puedo quejarme, máxime después de visitar Polonia el pasado mes de mayo.

Estas vacaciones no me apetecía nada ponerme a estudiar C# ni ASP.net, que es con lo que estoy lidiando últimamente, sin embargo si he tocado, aunque fuese por encima:


  • Squid : He actualizado el repo de Github.com de la versión 2.X. Si os interesa podéis echarle un vistazo a la configuración básica en :  https://github.com/apermuy/squid2
  • He colaborado con GALPon redactando un "mini-howto" para la instalación de un Moodle 2.4 en Debian GNU/Linux Squeeze. Podéis echarle un vistazo en  http://www.galpon.org/wiki/index.php/Instalando_Moodle_en_%C2%ABlocal%C2%BB_para_pruebas
  • He re-escrito el formulario de inscripción del IX Ciberencontro Kernel 2012 de Mugardos, además también me he currado una app en Gambas para la lectura de los datos.
  • tune2fs : Un "tune2fs -m 0 /dev/sda4" me "ha devuelto" todo el espacio que non encontraba en una de la particiones de mi PC de sobremesa.
  • Drupal: He tocado Drupal 6 + CCK + Views en la web de "Asociación Comunidade O Zulo". Espero que en el Kernel 2012 podamos migrar todo el contenido a Drupal 7.
  • Zentyal: He trasteado con la versión 2.2. Nada nuevo, pero igual de interesante.
  • Debian GNU/Linux: Encantado con la versión unstable en mi PC de escritorio.
  • PHP: Recomiendo visitar  http://www.eugeniabahit.com/ , sobre todo la sección PHP POO.

He dejado miles de temas en el tintero, supongo que con algo más de tiempo y ganas, algún día los escribiré en este espacio.


martes, 24 de julio de 2012

Moodle, logs y cómo salvar el culo...

Ayer Lunes día 23 de Julio de 2012 fue uno de los días más jodidos desde que estoy trabajando en esta empresa. Estamos en plena "justificación", es decir: "sacar/imprimir/generar miles de informes de toda la actividad de los últimos 12 meses", y todo se necesita "ya".

El pasado Viernes día 20 me avisaron de que "para ayer" deberíamos tener listos los accesos y calificaciones de todos los alumnos que han cursado algún plan formativo con nosotros. Lo de todos los años: ir a Moodle, entrar en el curso, generar informe y asunto zanjado. Nada más lejos de la realidad!

Comienza el "marrón" con la operación descrita en el párrafo anterior y bueno, la verdad es que aunque suene raro, hasta parecía divertirme y todo! Que si un informe por aquí, que si lo guardo por allá, hasta que "0 registros" encontrados para el curso XXXYYYZZZ: "No puede ser!"  pensaba en voz baja. "Voy a generar de nuevo el informe", pero nada: 0 registros! Llamo a mi compañero y le comento el problema: "Yo genero los informes cuando termina el curso, pues 'el Moodle' está configurado para eliminar los registros después de 100 días de inactividad", responde. El cielo se vuelve negro y yo comienzo a plantearme seriamente abandonar el país de inmediato, dejarlo todo y comenzar una nueva vida en Cuba vendiendo postales en el Malecón. "Keep calm and carry on!".

"Copias de seguridad, eso es" vuelvo a repetir en voz baja. Descargo vía "scp" los últimos backups de los cursos en cuestión y los intento restaurar en mi máquina local. Imposible! Ni aumentando "timeouts" , ni "tuneando MySQL", nada, ni una sola operación de restauración se realizaba correctamente...Las 16:05. 35ºC en el estudio. No sabía qué hacer. Bajo a tomar algo frío, subo de nuevo al estudio y pienso "puedo descargar toda la bbdd e intentar recuperar los logs de acceso, luego los exporto a XLS y asunto arreglado". No fue tan fácil como pensaba, pero sí, lo logré. Es muy probable que a nadie le interese cómo lo he logrado pero voy a dejarlo escrito por aquí, por que es probable que algún día necesite volver a leer este post.

1.- Restaurar la bbdd.

mysql -u root -p bbdddepruebas < copiabbdd.sql

2.- Ni se os ocurra trabajar con PhpMyAdmin o similar. En mi caso he usado MySQLWorkBench y no he tenido ni un problema. Hablamos de 2.100.000 registros en una sóla tabla.....

3.- Crear una "View" sólo con los registros del curso en cuestión. Sabéis que en Moodle todos los cursos tienen un "id" único, pues bien, yo he creado una "View" para cada curso del que había perdido los logs.

CREATE VIEW idcurso AS SELECT * FROM mdl_log WHERE course = 80

4.- Bien, ahora creamos una consulta sobre la vista pero con dos "INNER JOIN" sobre las tablas mdl_user(para obtener el nombre del usuario a partir del userid) y mdl_resource(para obtener el nombre del recurso/actividad a partir del resource_id).

SELECT
    FROM_UNIXTIME(x.time),
    x.ip,
    CONCAT(u.firstname, ' ', u.lastname) AS NombreAlumno,
    x.action as Accion,r.name as Informacion
FROM
    idcurso x
INNER JOIN mdl_user u ON x.userid = u.id
INNER JOIN mdl_resource r ON x.info = r.id
LIMIT 0 , 100000 


Pasteamos directamente la consulta en MySQLWorkbench, esperamos a que finalice la ejecución y listo! Ya podemos pulsar el botón exportar y generar el informe de acceso.


Así es como pasé el Lunes 23 de Julio de 2012, entre Moodle y sentencias SQL. Lo bueno: he entregado el trabajo a tiempo. Lo malo: era mi día libre.

Salud!



jueves, 31 de mayo de 2012

mount.nfs: access denied by server

Sigo bastante rayado con Fedora 17 y esta tarde me he encontrado con un pequeño problema al configurar un servidor nfs y montar los directorios desde un cliente:


root@mabu apermuy#mount -a
mount.nfs: access denied by server while mounting 192.168.20.50:/home/apermuy/Música



La solución es muy sencilla, basta con añadir "nfsvers=3" a la cadena correspondiente en el fichero /etc/fstab, en mi caso:


 #Polinico BTMS
192.168.20.50:/home/apermuy/Música /home/apermuy/Desktop/nfs/polinico/Musica    nfs     nfsvers=3,rsize=8192,wsize=8192,nosuid,soft     0 0



Ahora intentamos montar los directorios y comprobar que todo está en orden.


root@mabu apermuy#mount -a && df -hT
Filesystem                          Type      Size  Used Avail Use% Mounted on
rootfs                              rootfs     78G  8.1G   70G  11% /
devtmpfs                            devtmpfs  976M     0  976M   0% /dev
tmpfs                               tmpfs     985M   88K  985M   1% /dev/shm
tmpfs                               tmpfs     985M  1.3M  984M   1% /run
/dev/sda4                           ext4       78G  8.1G   70G  11% /
tmpfs                               tmpfs     985M     0  985M   0% /sys/fs/cgroup
tmpfs                               tmpfs     985M     0  985M   0% /media
192.168.20.50:/home/apermuy/Música/ nfs       801G  543G  218G  72% /home/apermuy/Desktop/nfs/polinico/Musica



Parece que si... :)

miércoles, 30 de mayo de 2012

Sublime Text Fedora 17

Dejo un pequeño "tip" para la instalación del editor  "Sublime Text" en Fedora 17. Es muy probable que al ejecutar "sublime_text" devuelva este error:

"./sublime_text: error while loading shared libraries: libpng12.so.0: cannot open shared object file: No such file or directory"

Un simple " ldd sublime_text" devolverá las dependencias de las librerias con las que ha sido compilado el binario.  En mi caso:

root@mabu Sublime Text 2#ldd sublime_text
        linux-vdso.so.1 =>  (0x00007fff72dff000)
        libgtk-x11-2.0.so.0 => /lib64/libgtk-x11-2.0.so.0 (0x0000003a3b800000)
        libgdk-x11-2.0.so.0 => /lib64/libgdk-x11-2.0.so.0 (0x0000003a3c000000)
        libatk-1.0.so.0 => /lib64/libatk-1.0.so.0 (0x0000003a3b400000)
        libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x0000003a42600000)
        libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x0000003a38a00000)
        libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x0000003a38e00000)
        libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0 (0x0000003a37a00000)
        libcairo.so.2 => /lib64/libcairo.so.2 (0x0000003a39200000)
        libpng12.so.0 => not found

No busqueis el paquete "libpng12.so.0" en Fedora 17 por que no lo encontraréis. La librerías compartidas para libpng 1.2.x se encuentran en el paquete libpng-compat, así que ese el paquete que debemos instalar. Así de simple:

yum install libpng-compat

y en medio minuto tendréis "Sublime Text" funcionando.




Mis impresiones sobre Fedora 17


Desde hace unas semanas uso Fedora 16( desde ayer Fedora 17 ) tanto el PC de escritorio como el portátil. El cambio no tiene un por qué concreto, simplemente me apetecía cambiar de distrubución y de entorno de escritorio.

Me ha gustado:
  • KDE 4. Mucho no, muchísimo. A mi enteder es mucho más sencillo e intuitivo que GNOME3. No voy a entrar en guerras ni afirmaciones absurdas, actualmente me gusta más KDE. Desactivando los efectos el entorno, Dolphin y demás es rapidísimo, desde mi punto de vista, está años luz por encima de GNOME3. 
  • Kernel 3.3. Indispensable contar con un Kernel actualizado. En esta versión se incluyen mejoras en el driver Nouveau para Nvidia;mejoras en los sistemas de ficheros Btrfs, FUSE, NFSD; mejoras en Netfilter(iptables)...Si queréis ver todas las novedades del Kernel 3.3 os dejo un enlace a los "features".
  • Yum. Rapidísmo. Por el momento no echo de menos apt.
  • Software: Versiones actualizadas de la mayoría de apps que uso a diario : Firefox, git, vim, Thundebird, K3B...
  • Instalación: Si sabes leer puedes instalar Fedora 16 / 17. Sencillo e intuitivo. 
  • Fedora Spins: Ya he hablado de los Spins en este blog, y vuelvo a insistir, echadle un ojo si no os convence la versión "out of the box" . http://spins.fedoraproject.org/
  • Documentación . Aunque la versión 17 está sin traducir, la documentación de Fedora es muy completa. Incluye apartados para: instalación, mantenimiento de paquetes, guía de seguridad. http://docs.fedoraproject.org/es-ES/index.htmlhttp://docs.fedoraproject.org/es-ES/index.html
 De momento estoy muy contento con esta gran distribución, de lo que no tengo duda, es que tarde o temprano regresaré a Debian GNU/Linux.

martes, 10 de abril de 2012

lunes, 9 de abril de 2012

Renombrar CTID OpenVZ "on the fly"



Ojo al crear máquinas virtuales con OpenVZ y asignar un 'ctid' menor que 100, pues están reservados para el sistema.He creado dos máquinas en "enjuto" , el servidor que tengo "rulando" en casa con OpenVZ y al realizar un backup con vzdump de una de las máquinas devolvía en siguiente error:


root@enjuto:/backups# vzdump --suspend --dumpdir /backups --snapshot 2
ERROR: got reserved VM ID '2'


Supongo que en la actualidad OpenVZ tendrá un modo más rápido(en realidad lo es) que teclear 5 líneas para cambiar ctid's, pero lo que he leído en este foro ha funcionado al 100% .


enjuto# vzctl chkpnt 1 --dumpfile /tmp/Dump.1
enjuto# mv /etc/vz/conf/1.conf /etc/vz/conf/100.conf
enjuto# mv /vz/private/1 /vz/private/100
enjuto# mv /vz/root/1 /vz/root/100
enjuto# vzctl restore 100 --dumpfile /tmp/Dump.1


Ahora sí funciona el comando vzdump sin problemas:

root@enjuto:/backups# vzdump --dumpdir /backups --snapshot 100
unable to find command 'lvcreate'
root@enjuto:/backups# vzdump 100
INFO: starting new backup job: vzdump 100
INFO: Starting Backup of VM 100 (openvz)
INFO: CTID 100 exist mounted running
INFO: status = CTID 100 exist mounted running
INFO: mode failure - unable to detect lvm volume group
INFO: trying 'suspend' mode instead
INFO: backup mode: suspend
INFO: bandwidth limit: 10240 KB/s
INFO: starting first sync /var/lib/vz/private/100/ to /var/lib/vz/dump/vzdump-openvz-100-2012_04_09-11_38_50.tmp
INFO: Number of files: 24892
INFO: Number of files transferred: 19140
INFO: Total file size: 456167369 bytes
INFO: Total transferred file size: 455391436 bytes
INFO: Literal data: 455391436 bytes
INFO: Matched data: 0 bytes
INFO: File list size: 573708
INFO: File list generation time: 0.001 seconds
INFO: File list transfer time: 0.000 seconds
INFO: Total bytes sent: 456866413
INFO: Total bytes received: 398372
INFO: sent 456866413 bytes received 398372 bytes 4595625.98 bytes/sec
INFO: total size is 456167369 speedup is 1.00
INFO: first sync finished (99 seconds)
INFO: suspend vm
INFO: Setting up checkpoint...
INFO: suspend...
INFO: get context...
INFO: Checkpointing completed succesfully
INFO: starting final sync /var/lib/vz/private/100/ to /var/lib/vz/dump/vzdump-openvz-100-2012_04_09-11_38_50.tmp
INFO: Number of files: 24892
INFO: Number of files transferred: 0
INFO: Total file size: 456167369 bytes
INFO: Total transferred file size: 0 bytes
INFO: Literal data: 0 bytes
INFO: Matched data: 0 bytes
INFO: File list size: 573708
INFO: File list generation time: 0.001 seconds
INFO: File list transfer time: 0.000 seconds
INFO: Total bytes sent: 575625
INFO: Total bytes received: 1916
INFO: sent 575625 bytes received 1916 bytes 231016.40 bytes/sec
INFO: total size is 456167369 speedup is 789.84
INFO: final sync finished (2 seconds)
INFO: resume vm
INFO: Resuming...
INFO: vm is online again after 5 seconds
INFO: Total bytes written: 473118720 (452MiB, 9.3MiB/s)
INFO: tar: Exiting with failure status due to previous errors
INFO: archive file size: 451MB
INFO: Finished Backup of VM 100 (00:02:40)
INFO: Backup job finished successfuly

sábado, 7 de abril de 2012

How Linux is built

Como suele ser habitual, la gente de Linux Foundation se ha publicado un vídeo muy interesante sobre cómo y quién construye el kernel de Linux.

viernes, 6 de abril de 2012

debootstrap con Ubuntu UCK de una imagen ISO


Esta semana he dedicado tiempo a trastear con deboostrap tanto en Linux Mint, Debian GNU/Linux y Ubuntu.


Para los que no conozcan debootstrap comentar que es una herramienta que permite instalar Debian GNU/Linux o derivados en un subdirectorio. No requiere de un CD para la instalación, sólo el acceso a un repositorio Debian GNU/Linux(u otros). Si dispones de un buena conexión a Internet podrás descargar e instalar vía deboostrap (p.e) Ubuntu 11.10 en menos de 10 minutos(puede que en 5). No voy a escribir cómo hacerlo pues hay miles de sitios web donde indican cómo hacerlo.

El caso es que me preguntaba cómo instalar el SSOO vía imagen ISO y en el sitio web de Ubuntu Linux he encontrado un buen "how to" . Intentaré explicar cómo hacerlo tomando como referencia dicho sitio web. El sistema operativo anfitrión en mi caso es Linux Mint 12 Lisa con kernel 3.0.0-16-generic-x86_64

El primer paso es instalar el paquete uck. Más información en http://uck.sourceforge.net/

Nota: Este ejemplo lo que realizado como "root". Os recomiendo usar "sudo".

aptitude install uck

La variable BASEDIR debe tomar el valor del directorio dónde vamos a "enjaular" el ssoo, en mi caso:
export BASEDIR=/home/apermuy/debootstraps/oneiric_64/

Descomprimir la imagen ISO. Este proceso puede durar unos minutos.
uck-remaster-unpack-iso /home/apermuy/software/ubuntu-11.10-desktop-amd64.iso "$BASEDIR" && sudo uck-remaster-unpack-rootfs "$BASEDIR" && sudo uck-remaster-unpack-initrd "$BASEDIR"

Ahora sólo queda entrar en la "jaula":
uck-remaster-chroot-rootfs /home/apermuy/debootstraps/oneiric_64/


Mounting /proc
Mounting /sys
Mounting /dev/pts
Mounting /var/run
Mounting /tmp
Mounting /home/apermuy/debootstraps/oneiric_64//remaster-root-home
Mounting /home/apermuy/debootstraps/oneiric_64//remaster-apt-cache
Copying resolv.conf...
Copying fstab/mtab...
Creating DBUS uuid...
Deactivating initctl...
Deactivating update-grub...
Remembering kernel update state...


Comprobamos si realmente estamos "dentro" de Ubuntu 11.10:


root@mabu:/# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.10
Release: 11.10
Codename: oneiric




En otro post comentaré como crear subinterfaces, algo esencial,a mi entender después de instalar el sistema "enjaulado"

lunes, 26 de marzo de 2012

Sobre logs y rendimiento

El pasado fin de semana en la IV #noitedl en A Coruña los asistentes al evento que tuvieron la desgracia de escucharme vieron estupefactos cómo un webserver en producción escribía sin parar en el fichero /var/log/apache2/access-dominio.log más de 600.000 líneas, y claro, la culpa no "fue del cha cha chá" si no del sysadmin quepor suerte o por desgracia no soy yo.

Al grano. Cada vez que un servidor web recibe una petición HTTP "suceden un montón de cosas" pero en lo que a "logs" se refiere, a menos que "alguien" se encargue del tema, estamos ante una carnicería de llamadas al sistema. Cuando una aplicación "necesita hablar con el sistema operativo" lo suele hacer vía "system calls", siendo estas diferentes para cada sistema operativo.Debemos ser conscientes de que un syscall es "caro": necesita "comunicarle" al ssoo que tomará el control de la CPU, el ssoo tendrá que "guardar y comunicar su estado"; en definitiva : consumo de recursos. Podéis consultar el listado de syscalls para sistemas operativos Linux en este enlace: syscall(2) - Linux man page.

¿Evitando el uso de operaciones I/O en un webserver podemos incrementar su rendimiento? Por supuesto.

Para Apache2.

Módulo: setenvif
Testeado en : Apache 2.2.21
Doc del módulo: http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html
Ejemplo de uso: Queremos evitar que cada vez que un VirtualHost sirva .css|.jgeg|.png no escriba en el fichero log.

Definimos una "variable de entorno" basura del tipo "Request URI" e incluímos las extensiones de los ficheros que no queremos incluír en el "log".



SetEnvIf Request_URI "(\.png|\.jpeg|\.css|\.js)$" basura



Indicamos en el fichero "log" que no incluya las peticiones http que coincidan con el patrón definido para la variable basura.


CustomLog /var/log/apache2/access-sitio-org-log common env=!basura


También para Apache2 me ha gustado mucho el ejemplo de este sitio web en el que redirecciona a otros sitios web peticiones típicas de exploits. Por cierto, leer algo sobre mod_rewrite es más que recomendable para entender cómo funciona el módulo setenvif. Otro enlace interesante y directo al grano.

Para Nginx
Módulo: HttpCoreModulo
Testeado en : Nginx 1.0.14
Doc del módulo: http://wiki.nginx.org/HttpCoreModule

Incluir en el fichero de configuración del virtual host:


location ~* ^.+\.(?:css|js|jpe?g|png)$ {
access_log off;
}


Poco más voy a añadir sobre Nginx. Os recomiendo revisar el espacio github de Antonio Almeida ,@perusio , una eminencia en Nginx y High Perfomance.

miércoles, 21 de marzo de 2012

Consejos para asistir a la IV Noite Drupal & GNU/Linux en A Coruña


Se acerca la IV Noite Drupal & GNU/Linux en A Coruña . Comentaré unos detalles a modo de consejos que pueden ser útiles para los asistentes, sobre todo para los que acuden por primera vez a este tipo de eventos.

  • Descansa. Duerme bien por que la jornada promete. En esta edición comenzaremos a las 11:00 de la mañana, así que imagínate....No te acuestes "a las tantas" sobre todo si tienes que desplazarte el mismo día del evento.
  • Contactos. Email , Twitter o incluso el teléfono de alguno de los organizadores puede ser de gran ayuda si tienes dificultades para llegar, buscar aparcamiento...En drupal_gl(@)googlegroups.com puedes incluso preguntar si alguno de los asistentes viajará en coche.
  • Más contactos. No tengas reparo en pedir "email", "twitter" o "perfil en Drupal.org". La #noitedl es un evento para promocionar Drupal, GNU/Linux y software libre, pero también para conocer a gente "nueva" y proyectos más que interesantes en los que poder participar o aportar. Visitar los sitios web de los organizadores también puede ayudarte: Ociorum, GALPon, Inestable e Comunidade O Zulo .
  • "Be social". ¿Tienes identi.ca?¿Twitter? ¿Facebook?¿Web?¿Flickr?Promociona el evento en las redes sociales! El hashtag "oficial" será #noitedl .
  • ¿Portátil?. Sí, es recomendable traer portátil, sobre todo si estás interesado en aplicar los conocimientos, módulos y "hacks" que se comenten/aporten durante toda la jornada. Mi consejo particular es que NO te pares demasiado en la instalación. Céntrate en lo que es Drupal(siempre desde mi punto de vista) los conceptos básicos : core, módulos y theming.
  • ¡No uso GNU/Linux! . Nadie se ha muerto por no usar GNU/Linux. Estarás rodeado de fauna GNU/Linuxera, así que si decides dejar el lado oscuro, es un buen momento. En caso contrario, saber qué es un "stack" puede facilitar tu aterrizaje en la #noitedl.
  • Colabora. Si tienes tiempo colabora con la organización. ¿Cómo? En ocasiones ayudar a montar una mesa o configurar un punto de acceso wireless es más importante que "un nuevo módulo que lo flipas". Ayúda a la organización!
  • Únete.Hemos creado un grupo de "usuarios galegos" de Drupal en http://groups.google.com/group/drupal_gl . ¿Tienes dudas?¿Alguna consulta? ¿Recomendaciones? Únete, te estamos esperando.

Nos vemos este sábado en A Coruña!

miércoles, 8 de febrero de 2012

#lav012 primeras impresiones

El pasado fin de semana, y en representación de la "Asociación Comunidade O Zulo" de Mugardos estuve junto a @probatto en el #lav012 en Vedra.



#lav012 es un evento organizado por la "Asociación Sen un peso"(sin un duro), creada en 2009 con el objetivo principal de organizar el Laboratorio Audiovisual de Vedra.


¿Qué pinta @apermuy en este fregado?
@quenerapu me planteó la posibilidad de colaborar vía @ozulo con la gente de @senunpeso, y claro, como me ofreció todo tipo de sustancias psicotrópicas, pues...acepté.

¿Qué necesitaban, tecnologícamente hablando, de tí y de @ozulo?
El principal problema es que no tenía ni sabían como montar un red wireless usando las famosas redes educativas de edu.xunta.es. Nosotros(@ozulo) tenemos experiencia acumulada tras ocho(8) ediciones del CiberEncontro Kernel, así que nos lanzamos.


¿Mucho software libre en #lav012?
La red que montamos corre sobre Zentyal, así que por parte de @ozulo, como suele ser habitual, siempre libres. @quenerapu en su "master class" también usaba GNU/Linux, pero por lo demás no he visto mucho swlibre.

Y entonces..qué?
Para @ozulo es muy importante la asistencia a #lav012, pues la filosofía del evento y de la asociación Senunpeso.org es muy similar a "nuestra" forma de pensar. En lo personal, qué os voy a comentar. Conocer a Mon, a Xurxo y a @tuitfer a sido un verdadero placer, y bueno, coincidir de nuevo con @quenerapu , ni te cuento. Lo mejor: que aún queda otro fin de semana!

Salud!

Curso #cdiets Vimianzo, primeras impresiones.



Ayer Martes impartí la primera sesión de un curso presencial de 12 horas en Vimianzo. Drupal, como casi siempre desde los últimos dos años, es el "culpable" de que yo sea el docente de este curso.

Llegar a Vimianzo desde Santiago de Compostela es una pequeña odisea, sobre todo si te dejas aconsejar por un GPS. En varias ocasiones durante el viaje de ida pensaba que no llegaría a tiempo a la primera jordana.

Vaya si llegué. La primera sorpresa fue el aula. Un aula limpia y ordenada, con unos 20 pcs para los alumnos y alumnas y un pc para el docente con conexión a Internet y un cañon de vídeo. Me sorprendió gratamente la proporción masculino/femenina: 1 a 17 para las "chicas". La verdad es que no suele ser habitual encontrarse con estas proporciones, sobre todo en el mundo de la tecnología. Espero dentro de un tiempo no volver a hacer este tipo de comentarios.

Mis alumnas/os llegaban a la jornada Drupal con carencias palpables para citar un navegador que no fuese Internet Explorer. Después de una charla de "evangelización" , descripción del entorno y una pequeña dosis de confianza, todos, incluídos el que suscribe,nos fuimos soltando. Tanto que al final de la clase ya podían distinguir funcionalidades del "core" y otras aportadas por "módulos contribuídos". Nunca tuve dudas sobre la enseñanza pública en el estado español, si bien es cierto que en ocasiones he criticado el sistema educativo, y puede que incluso que también lo haya echo duramente contra los docentes. No es el caso. En la primera sesión(y esperemos que sea así en las tres restantes) han demostrado una capacidad de asimilación y de aprendizaje que ya les gustaría a muchos "engineering" y "project manager" con los que coincido en el algún que otro proyecto. (Creo) que han vencido el miedo a enfrentarse a una tecnología nueva. Estoy contento. Y lo estoy por que no es mérito mio, yo sólo recito lo que he aprendido estos 12 años, es suyo.

Salud!

martes, 31 de enero de 2012

Pesadillas...



Si alguna vez habéis trabajado con Unix/Linux/MacOSX y después con Microsoft Windows, os habreis dado cuenta de que el S.O de Redmond es una pesadilla. Pesadilla para sysadmin, pero sobre todo para developers.Un par de ejemplos ayudarán a ilustrar la afirmación.

El pasado fin de semana "compramos" un libro en formato Adobe Digital Editions, por supuesto con su flamante DRM. El caso que sólo puedes imprimir 20 páginas. ¿Sólo 20? Si señoras y señores, sólo 20, así que si necesitas imprimir 300, como es el caso(el libro tiene 1091 páginas) pues te compras la versión "física" y te buscas la vida. Pero, si el libro es mio?. Lo sé, pero el DRM también lo sabe...Buscando información sobre cómo eliminar la restricción encontré este post "Desproteger documentos de Adobe Digital Editions con Calibre" de Álvaro Matiz , que con un par de scripts escritos en Python soluciona la papeleta al 100%. ¿Python en Windows? Sí, en Windows. Echo de menos ejecutar una aplicación .py con un simple ./ , pero con el maligno es imposible. A descargar Python 2.7 para Windows. Como aquí no tenemos apt ni yum ni zipper pues tocar navegar y buscar. Instalo Python, ejecuto el script y "fail", dependencia de la librería pycrypto, otra vez la misma historia: busca, instala, prueba...Después de 30 minutos terminé la operación con éxito. Una operación en GNU/Linux podría llevarme a lo sumo 5 minutos....Por cierto, si no conocéis Calibre, ya estáis tardando...

El segundo ejemplo es más de lo mismo. Actualmente estoy trabajando, en mi tiempo libre en un proyecto con Drupal 6 y webservices. Al instalar el módulo simpletest es necesario patchear el core de Drupal, y claro, con Microsoft Windows, es una pesadilla. En la documentación de Drupal, entre otros, recomiendan Eclipse para solucionar la "papeleta", pero ¿cómo? ¿Eclipse? Yo no uso Eclipse, y ni por asomo lo pienso instalar para aplicar un patch. El caso es que navegando encontré "UnxUtils" , port de las "GNU utils", nativas para Win32, que sólo dependen la librería msvcrt.dll: Microsoft C-Runtime y no una emulación vía Cygwin, como indican en la web del proyecto.

Un consejo: piensa un poco antes de encender tu ordenador y arrancar un sistema operativo Microsoft Windows.

Salud!
P.D: Utilizo Microsoft Windows por imposición laboral. ;)


martes, 3 de enero de 2012

CodePlex

No me he pasado al lado oscuro, tranquilos. Durante los próximos meses tendré que lidiar con C# y MSSQL, así que tendré que ponerme las pilas. Cuando me transmitieron la noticia, pensé inmediatamente en tirar la toalla, pero 10 segundos más tarde, decidí aceptar el reto.

La verdad es que necesito un reformateo de cerebro y conceptos.Trabajar con swlibre los últimos 6 años me ha ayudado a ser más productivo y, en definitiva, a trabajar mejor. Hace unos años recibí un consejo de un buen amigo, cuando comentamos que ya no dedicaría el 100% de mi jornada laboral a administrar sistemas. Con acierto apuntó : "¿Tienes buen horario?¿Estás cómodo con tus compañeros de trabajo?¿Aprendes con tu trabajo?" Si la respuesta es sí, piensa que tienes el resto del día para dedicarte a "tus rayadas". Así ha sido, y me alegro. No intento justificarme, ni mucho menos, pero sin esa conversación en 2008 y sin el cambio drástico de mentalidad no hubiese conocido: Drupal, Moodle, Nginx y un sin fin de tecnologías interesantes, y lo mejor, la cantidad de gente maja con la que he coincidido en multitud de eventos...

El caso es, y haciendo referencia al título de este post, he estado de paseo por "CodePlex", el repositorio de software "Open Source" de Microsoft(un día de estos escribiré un post detallando este atropello) y me he encontrado con algún proyecto interesante:
  • PCap.net: A .NET wrapper for WinPcap written in C++/CLI and C#.
  • CosmOS: C# Open Source Managed Operating Systemis a complete operating system built from the ground up in C#.Cosmos currently only runs on x86 and x64 processors, but we are investigating many other platforms, including ARM processors, Apple's iPhone, and the Nintendo Wii.
  • Indihiang Web Log Analyzer: Analizador de logs para Apache e IIS.

Salud!