miércoles, 30 de mayo de 2012

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!


jueves, 29 de diciembre de 2011

Nginx y CDNs

No voy a hablar de lo bonito que es NGINX ni de lo rápido que sirve contenido, para eso hay miles de posts y "how to" que indican cómo hacerlo.

Desde que tuve el placer de conocer a un crack( @perusio) en la matería me han quedado claro un par de conceptos relacionados con NGINX :
  • En entornos LAMP(por favor, no entremos en que sí Apache o Cherokee, o Linux vs BSD, este tema aburre), el cuello de botella, a menudo está en el propio PHP,aunque con una configuración adecuada de PHP5-FPM se puede minimizar el "desastre".
  • NGINX "tira" con casi todo. Y con lo que no tira es por que aún nadie lo ha documentado. Queréis un ejemplo, visitad el espacio en github.com del Señor Perusio.
  • Sysadmins: si pensáis que Drupal es un simple CMS, y que las Drupaldas y Camps(no, no me refiero al de los trajes), son simples reuniones de maquetadores web, estáis completamente equivocados. [ Toma 1 ] [ Toma 2 ] .


Estoy jugando con CDNs. Si no sabéis qué es una CDN tenéis más información aquí y aquí. El clásico de los clásicos en la materia desde hace un tiempo es Amazon CloudFront, así que también he caído. Pero como suelo hacer, antes de meterme de lleno con algo, procuro documentarme. Conclusiones.

Listado de CDNs, sin orden ni prioridad, pero entiendo, tras las pesquisas realizadas que son las mejores tanto en calidad como en precio. También estoy seguro que se han escapado alguna, así que ya sabéis, enviad un comentario.

En Drupal sólo he buscado módulos relacionados con CDN para Amazon. He visto bastante cosas, aunque el que más me interesa, Amazon S3, está aún en versión alpha; y le he pillado un bug(no sé si es un bug en realidad) interesante. Sí instalas el módulo e introduces unas claves erróneas para validarte contra el REST de Amazon: adiós! Ni desinstalando el módulo he podido reconfigurar las opciones. Supongo tendré que pelearme con el módulo, cuestión de tiempo.

He leído un artículo interesante en Etnassoft sobre "Cargar JQuery desde un CDN". Muchas veces, al trabajar con un CMS pasamos por alto concepto básicos como los del post anterior.

Me ha llamado la atención un plugin para Firefox: S3Fox, que permite loggearte en el S3 de Amazon, revisar logs, transferencias....interesante.

De momento esto es todo, sigo vivo, que no es poco!

Salud!





miércoles, 28 de diciembre de 2011

Ganas...

no me faltan para continuar escribiendo en el blog. Lo único que necesitaba es un poco de descanso, sólo eso. He estado sometido a mucho stress, tanto profesional como personal. En lo laboral he tenido que meterme de lleno con C# bajo Window$.No me entusiasma, pero trabajar con gente profesional y con tantos conocimientos en la materia me ha hecho reflexionar y repleantearme ciertos matices sobre mi vida laboral, que, hace tan sólo un mes serían impensables. Ahora sí me apetece. He descubierto Mono, y ha sido como ver la luz al final de un túnel. Recuerdo, que desde la ignorancia, hace un tiempo,criticaba a Miguel de Icaza; ahora, con perspectiva, sólo tengo palabra de elogio. Reconocer los errores y aprender ellos, por lo menos a mi entender, es una consecuencia directa de la edad.

En lo personal(en relación con el software libre, quiero decir) sigo como siempre: ocupado. Últimamente muy centrado en Drupal.

En noviembre impartí un mini-taller de iniciación a Debian GNU/Linux en el local de la asociación Ociorum, en A Coruña. Lo que en un principio serían 2 horas, al final, se extendió a hasta las 00:15 llegando a superar las 5 horas de parloteo.

El pasado día 9 de diciembre, participé en la III Noite Drupal & GNU/Linux de Ordes. Personalmente, creo que ha sido la de menos nivel, pero seguimos conservando el buen rollo y las ganas de enseñar,y sobre todo de aprender.

El mismo día 9, comenzamos una nueva historia en O Zulo: "Curso de iniciación ao deseño web con Drupal". En resumen, un curso de formación básica con Drupal en modalidad mixta: teleformación + presencial. 13 personas inscritas y 10 asistentes. El curso ha sido un éxito. Pero no lo digo yo, lo han dicho los alumnos:

"El nivel demostrado por los profesores y la pasion desprendida estan fuera de duda. Para mi gusto, sin embargo, el curso es demasiado profundo para los profanos en informatica. Me alegra haber asistido porque es un salto de gigante esta introduccion, pero echo de menos una version mas "popular" del curso, algo para gente no "informatizada", que empiece explicando que es un servidor. De todas formas, es cierto que Drupal es la caña. Infinito. Veremos ahora cuando me ponga a practicar como me siento.... Enhorabuena por el interes y la disposicion del la Asocicacion. "

"Como sempre pasa neste tipo de cursos, o tempo do curso queda curto para o contido programado. Polo demáis, un 1010!"

"hola. la ostia, tíos, muy buen curso. muchas gracias."

En fin, que estos comentarios dan la fuerza necesaría para seguir en la lucha, por lo menos, un año más.

Salud!



domingo, 16 de octubre de 2011

snipMate

Uso vim desde que tengo memoria. En uno de mis post sobre la pasada DrupalCamp 2011 en Sevilla comentaba que una de las charlas, a mi entender, más interesantes fue la del compañerlo @patxangas "Drupal & VIM (Los hackers eligen VIM)".

Este post viene a cuento por un paseillo por github esta tarde que me llevó a snipMate para Vim. No voy a comentar nada más. Os dejo un vídeo:

snipMate.vim Introductory Screencast from Michael Sanders on Vimeo.

Si queréis más información sobre snipMate visitad la web del script en en vim.org.


viernes, 7 de octubre de 2011

Notas DrupalCampSpain 2011 - Parte 2



Intentaré en estas líneas hacer un breve resumen de la DrupalCampSpain2011 celebrada los días 1 y 2 de Octubre de 2011 en Sevilla.

Recinto:
Facultad de Informática Universidad de Sevilla. Al estar alojados en un hotel muy próximo al lugar del evento, la verdad es que fue muy cómodo moverse desde/hacia el hotel. La E.T.S.I es similar a muchos recintos universitarios, así que poco os puedo contar que no imaginéis ya. Eché en falta una cafetería abierta. Salir a tomar un café a los bares cercano, entre el calor y el partido "der Betí" fue una pesadilla.
Nota 8/10

Ponencias:
Sin ánimo de ofender, y siempre desde el respeto a los ponentes, me parecieron bastante flojas. Por dos motivos:
1.- Muchas se centraban en meros aspectos descriptivos, es decir, esto es el A.P.I de Drupal y podemos hacer, esto, esto y esto. Entiendo que 45 minutos no dan para más, pero muchos de los asistentes ya sabíamos de que iba eso de Drupal y cómo funcionaba.
2.- Me ha dado la impresión de que son muchas charlas. Es decir, en mi opinión reducir el número de intervenciones y realizar un filtro más duro, ayudaría mucho al evento: podría aumentar la calidad de las ponencias, y ayudaría un poco a la imagen.Por ejemplo en la charla de Nginx, para mí de las mejores de la Camp, calculo que como máximo seríamos unos 20. Las que más me han gustado han sido:
Nota 7/10

Comunidad: Lo mejor de lo mejor. "Hacer comunidad", prefiero este término a llamarlo "networking", pero es indiferente. He disfrutado mucho con @perusio charlando sobre oportunidades de negocio con Nginx y Drupal. Con @jcartelle drupaleando todo el fin de semana. Menudas aCAMPadas en el hall de Hotel, creo que algunos fliparon un poco, pues fue llegar de la Camp y continuar Drupaleando hasta altas horas.
Me ha hecho especial ilusión desvirtualizar a @patxangas y a @josereyero, pues para mí son un referente es este campo. Que gente más maja.
Sólo una pega: Muy pocas o nulas referencias al software libre. Eso me entristece mucho, más incluso que ver la charla de Brutus Theme en PowerPoint!
Nota 9/10 : Resto 1 por la cantidad de software privativo que pululaba en el ambiente.


Organización: Si bien el catering y la coordinación técnica se puede mejorar, uno que se ha metido en mil "fregados" como este, sabe y aprecia el esfuerzo de gente, que desinteresadamente organiza eventos tan buenos como DrupalCampSpain2011. Enhorabuena cracks!
Nota 8/10


Nota final: 8. O lo que es lo mismo, el próximo año repito fijo.




martes, 4 de octubre de 2011

tmpfs , Nginx y GNU/Linux

Hablando con @perusio en la pasada DrupalCampSpain2011 de Sevilla acerca del rendimiento de Nginx como servidor web, comentaba que el uso de sistemas de ficheros en RAM para caché en Nginx aumentaba considerablemente el rendimiento del sitio.

He revisado unas notas en relación a este particular, son las siguientes.

1.- Crear el directorio, en mi caso /var/tmpfs.
mkdir /var/tmpfs
2.- Montar el directorio.
mount -t tmpfs -o size=4096K,mode=700 tmpfs /var/tmpfs
3.- Aumentar el tamaño "on fire".
mount -o remount -o size=8192k /var/tmpfs

He visto en este sitio web el uso práctico de esta configuración en Nginx y su configuración para /etc/fstab:

tmpfs /var/lib/nginx tmpfs size=8M,uid=33 0 0



sábado, 1 de octubre de 2011

Notas DrupalCampSpain 2011 - Parte 1

He escrito unas notas en gedit que me gustaría compartir.

Título charla: "Desarrolladores: Bienvenidos a Drupal 7"
Ponente: @pcambra 01/10/11 11:00 horas

Notas
Entidades -> suple en cierta medida a los nodos en D6
En la actualidad todo es una entidad -> incluso los nodos.
A todo lo que sea una entidad podemos añadirle campos.
Drupal Commerce - Organic Group - Casos de estudio de código.

#2 EntityFieldQuery
#3 Entity API
#EntityMetadataWrapper
#EntityProperties

D7 "mata" casi totalmente el módulo CCK. En la actualidad usamos Field API.
Field API, hooks recomendados
.- hook_field_attach_*
.- hook_field_storage_*
.- hook_field_extra_fields_*
Cambios en Form API
.- Incorporaciones de AJAX
.- #states, #ajax, hook_form_alter desde plantilla
.- #limit_validation_errors
.- Elementos HTML5 a través de módulo
Proyecto DBTNG ha reformado la capa de abstracción de Drupal para acercala a un modelo OOP. "Olvídense de db_query" El módulo devel permite "debugear" la query.

Render arrays
Cache -> Cambios en la cache. drupal_static reemplaza a 'static'. Se integra con render array.

Novedades JS:
.- drupal_add_js() permite cambiar el peso de los elementos.
.- Jquery 1.4.4. y Jquery UI 1.8
.- Mejoras en los behaviors

File API
.- Son entidades.
.- Nuevo interfaz de fichero en D7
.- Introducción de streams : public:// private:// temporary://
.- file_unmanaged_*(copy,move, delete).

Code registry
.- Registro de código: para inventariar los ficheros y clases que se deben cargar en cada momento.
.- El único fichero que se carga automáticamente es el .module, el resto de ficheros, plugins, includes, tests...deben declararse en el array files []

Info Files
.- Soporta versiones en las dependencias
.- Configure : ruedecilla de administración
.- Required: fuerza que un módulo o theme sea obligatorio y no pueda deshabilitarlo.

Queue API
.- Nueva API para gestionar la cola de objetos
.- Varios componentes del core como Aggregator, Bach API o Cron ya la implementan de base.
.- Permite guardar elementos en memoria o bbdd y es totalmente configurable según el caso.

Cambios en Schema
.- En D7 declarar hook_schema en el fichero .install es suficiente

Simpletest en Core
.- D7 incorpora el módulo SimpleTest en su núcleo y tiene su unite testing e integration testing en todos los componentes por defecto
.- Tener los elementos verificados proporciona seguridad y calidad.

Plugin: selenium para Firefox.

viernes, 30 de septiembre de 2011

¿Por qué apoyar a una asociación sin ánimo de lucro?

Hace un par de días me comunicaron ex-miembros ya de una asociación sin ánimo de lucro, educadamente todo hay que decirlo, que dejaban de apoyar la causa y que causarían bajan tan pronto como fuese posible de una asociación que lleva desde el 2003 luchando, peleando y trabajando para difundir el software y la cultura libre en un pequeño pueblo de Galicia.

Al llegar a casa, analicé la situación y he sacado mis propias conclusiones, que intentaré plasmar en este espacio, respondiendo al título del post "¿Por qué apoyar a una asociación sin ánimo de lucro?".
  • Una asociación sin ánimo de lucro sigue y persigue un fin social, lejos de intereses económicos y/o de otra índole(profesional, p.e). ¿Crees en una sociedad justa? Pues apoya una causa justa. No hablo de dinero, hablo de apoyo: asistencia a eventos, colaboración, acción, difusión.
  • En segundo lugar por que es fácil y muy barato.¡Es fácil por que sólo tienes que estar! El apoyo de una persona, llámese socio/a,amigo/a, simpatizante o X, tan sólo un minuto, uno, en todo un año es muy importante, más incluso que cualquier aportación económica.
  • En tercer lugar por higiene cultural. Una asociación sin ánimo de lucro ayuda a limpiar, con sus eventos, charlas y discurso, la cultura de la apatía,del "sálvame" y de las "princesas del pueblo".
  • En cuarto lugar por salud mental. Importante en los tiempos que corren. Conocer gente nueva, con distintos modos de ver la vida ayuda,a mi entender,a sanear la mente.
  • En quinto lugar por reconocimiento. Llegar es muy fácil. Montar una charla o un evento es muy sencillo, pero mantenerlo año a año hasta llegar casi a una década, es muy complicado, y menos si no tienes recursos.¿No creéis que esta gente merece una reconocimiento a modo de apoyo o difusión?. Sinceramente, yo creo que sí.
Las asociaciones sin ánimo de lucro puede que no tengan recursos económicos, la organización de eventos no sea perfecta, pero su labor es indiscutible.Reflexionando llegué a la conclusión de que prefiero tener el carnet de una asociación sin ánimo de lucro, antes que ayudar a lucrar a una empresa.

La libertad es la capacidad que tiene el ser humano para poder obrar según su voluntad, amigo lector, actúe en consecuencia!


viernes, 19 de agosto de 2011

Moodle, Drupal, SHA512 y John The Ripper.

A ver si no me lío mucho y voy al grano.

Problema:

"Sincronizar" usuario de una plataforma Moodle 1.9.x y un Drupal 7. Los usuarios deben poder acceder al Drupal7 con la misma cuenta que Moodle. No he visto módulo SSO para Drupal 7 así que decide cocinarme yo el tema. El problema es que no sabía que en Drupal 7 no "hashea" el password con MD5 sino que lo hace con SHA512.

Marrón:

Las pruebas las hice con Drupal 6, hace un tiempo, y le he comentado por anticipado al cliente "eso con un script lo soluciono en una mañana". Mal. Muy mal. Pero bueno, el proyecto está en marcha y lo único que falta es solucionar este pequeño inconveniente.

Descripción del marrón:

  • "El" Moodle y "el" Drupal se ejecutan en distintas máquinas. No es problema, por lo menos yo no veo inconveniente, a priori.
  • Tengo funcionando un script en PHP que exporta los usuarios a un fichero CSV en la máquina Moodle. Sin problema.
  • La máquina Moodle envía por scp el fichero a la máquina Drupal. Sin problema.
  • En la máquina Drupal ejecuto un script lee los registros del CSV y los inserta en la tabla users de Drupal. Aquí está el marrón.
Como indicaba, Drupal no usa md5 sino sha512, por lo tanto si intentas logearte en el sistema no podrás acceder.

Posible solución:

La mejor solución, o la más adecuada en este caso, a mi modo de ver, sería instalar OpenLDAP y se acabarían los problemas, pero no es posible.

La posible solución(no válida a efectos de LOPD, privacidad y demás, pero bueno, al final lo que cuenta es solucionar el problema( ¿?¿?¿? ) ) sería.

A) Averiguar el password del usuario.
B) Insertar/actualizar el campo password de la tabla users de Drupal.


Para el punto B, Drush es la solución, máxime cuando vamos a usar PHP y bash(shell_exec vía PHP). No voy perder el tiempo en este punto, ya que en este post viene bien explicado.

Para el punto A) voy a utilizar el fichero listado_users_passwords.txt generado en la máquina que corre Moodle, cuyo contenido(es un ejemplo, así que no os molestéis en hacer el gamberro que he modificado los datos ^_^).
user,12c41121e857a474b1ce23e24166019, guillermopuertas@microsoft.com

Preparo el fichero para que John The Ripper pueda leerlo e intentar que me indique el password del usuario y poder pasarlo como parámetro a Drush para actualizar el password.

Ahora viene el verdadero motivo por el cual escribí este post: aplicaciones multihilo.

Instalar John en un sistema basado en Debian GNU/Linux no tiene ciencia. Aptitude o apt-get install john y problema resulto. Luego bastaría con:

john -format=raw-MD5 listado_users_passwords.txt

Y en cinco minutos tema resuelto. Esto está muy bien si sólo tienes un usuario, pero cuando son 429, necesitas sí o sí agilizar el proceso. La verdad es que todavía no tengo muy claro el concepto de multihilo a nivel de programación, pero lo que sí he observado es que muchas aplicaciones compiladas para distribuciónes Linux NO tiene soporte multicore, por lo tanto tu dual o quad core por el que has pagado XXX€ y del que tanto farda con tus compis, se queda en un cutre core la mitad del tiempo de proceso. John The Ripper no es una excepción. En el proceso anterior, abrí htop y pude comprobar a ojímetro como uno de los cores del procesador/(Intel(R) Core(TM)2 Duo CPU E7200 @ 2.53GHz) del PC del trabajo estaba más ocioso que Paquirrín en agosto.

Decidí investigar,leer y comprender el por qué. John The Ripper, por lo menos en la versión para Ubuntu/Debian GNU/Linux , sólo va a usar 1 core de tu máquina.En el wiki de Openwall encontré un artículo muy interesante acerca de "Parallel and distributed processing with John the Ripper", que por supuesto recomiendo leer. Seguí navegando y no recuerdo en qué web, leí algo acerca de la versión Jumbo de John The Ripper. En la práctica es un patch que permite usar varios cores. Lo mejor de todo no es esto. Lo más interesante es que me he enterado de que hay una "Community-enhanced version" Jumbo Powered. Genial. La descargo, la compilo y a probar. Juzguen ustedes mismos.

Comando: john -format=raw-MD5 listado_users_passwords.txt
Versión John: Version: 1.7.3.1-1
Paquete: deb
SSOO: Ubuntu 10.10 x86
Kernel: 2.6.35-30-generic-pae
Resultado John:
Loaded 1 password hash (Raw MD5 [raw-md5])
3169Y (user)
guesses: 1 time: 0:00:05:25 (3) c/s: 4876K trying: 314d* - 318bh

Comando: john -format=raw-MD5 listado_users_passwords.txt
Versión John: Version: 1.7.8-jumbo-5
Paquete: src(tar.gz)
SSOO: Ubuntu 10.10 x86
Kernel: 2.6.35-30-generic-pae
Resultado John:
Using raw-md5 mode, by linking to md5_gen(0) functions
Loaded 1 password hash (Raw MD5 [gen])
3169Y (user)
guesses: 1 time: 0:00:02:32 DONE (Fri Aug 19 13:06:13 2011) c/s: 10374K trying: 314d* - 3132E

No sé si al final consiguiré mi propósito, seguro que aplicaré KISS y solucionaré de otro modo el problema.

Nota: sí, he elimando el fichero .john de mi $home.


jueves, 18 de agosto de 2011

bootinst.sh : Permission denied Slax


Me gusta Slax. La uso a menudo para instalar Gentoo en otras máquinas. En caso es que esta tarde me disponía a instalar Gentoo en mi HP-Mini y durante un tiempo(unos minutos :P ) fue imposible cambiar el permiso el fichero pues al ejecutar bootinst.sh devolvía: Permission denied. Revisando los foros de Slax, un crack apuntaba que es probable que la distribución que utilizo (Debian GNU/Linux) montase el pendrive con el atributo noexec, por lo tanto no sería posible cambiar los permisos a +x al fichero en cuestión. La solución, como casi siempre en GNU/Linux, muy sencilla:
mount /dev/sdb1 -o exec /media/usb
Ahora ya podemos ejecutar bootinst.sh y disfrutar de Slax. Por cierto, nunca está de más echar un vistazo a las páginas del manual de mount.

miércoles, 17 de agosto de 2011

"Instalar" Gingerbread en un tablet Archos 101 [OpenAOS] [Android 2.3]

Ni en vacaciones tenía ganas de mirar este tema. No por tiempo, sino por que simplemente no me apetecía. Esta tarde, en lugar de darle vueltas a la configuración de los servidores del Kernel 2011, he preferido frikear un buen rato e instalar Gingerbread en el tablet Archos 101 del curre.

Antes de comenzar, que quede claro una cosa: este post se resume básicamente en "instalar CyanogenMod" en un tablet Archos. ¿Que no sabes lo que es CyanogenMod? Pues visitas la web del proyecto, muy interesante, por cierto. Ahora en serio y hablando claro: CyanogenMod es una "modificación" de Android 2.3 Gingerbread que añade funcionalidades extra a las proporcionadas por el original de Google.

Paso 1: Instalar el SDE de la web oficial de Archos.
  • Navegas hasta www.archos.com, link Soporte & Cuenta, item Descargas. En la parte inferior encontrarás un enlace a "Special developer edition firmaware", clic ahí.
  • Dependiendo del modelo de tablet elige el enlace que coincida con tu modelo. En mi caso el primero "SDE firmware for ARCHOS Generation 8 devices:"
  • Aceptas las condiciones y el aviso de Archos y descarga el fichero AOS en tu PC.
  • Activa el "modo" almacenamiento masivo en el tablet.
  • Copia el fichero que has descargado en la carpeta raíz del tablet.
  • Apaga el tablet.
  • Enciende el tablet y mantén pulsado el botón "Volumen -" unos 10 segundos hasta que veas el "Boot Menu".
  • Para desplazarse por el menú usa las teclas de "Volumen". Selecciona "Recovery System" pulsando la tecla de encendido. A continuación selecciona "Update firmware".
  • Una vez finalizado el proceso, apaga el tablet.
  • Enciende de nuevo el Archos 101 y verás que se ha añadido un nuevo ítem al menú "Developer edition menú".
  • Apaga de nuevo el tablet.
Paso 2: Instalar el bootloader OpenAOS.

¿Qué es OpenAOS? Es la versión Gingerbread para dispositivos Archos. Tiene más información en la web www.openaos.org.. Como veis voy al grano, citando sólo lo más importante para completar el proceso. Luego que cada uno se pare en lo que más le interese :P.
  • Del sitio web http://download.openaos.org/bubu/gen8/ descargas dos ficheros: initramfs.cpio.gz y zImage. Recomiendo comprobar la suma md5 de los dos ficheros. Recordad que estamos "jugando" con el firmware del tablet.
  • Enciende el tablet pulsando el botón "Volumen -" durante 10 segundos hasta que veas el "Boot menu".
  • Selecciona en el menú "Recovery System"/"Developer Menu Edition"/"Flash kernel and initramfs".
  • El almacenamiento USB debería haberse activado. Copia los fichero initramfs.cpio.gz y zImage en el directorio raíz del tablet y pulsa "Flash kernel and initramfs"
  • Espera a que finalice el proceso y apaga el tablet.
Paso 3: Instalar la imagen Cyanogenmod en el tablet.
  • Descargar la imagen más reciente desde la URL http://download.openaos.org/bubu/gen8/android/
  • Nombre del fichero debería ser similar a este: openaos-gingerbread-gen8-20110708_183154.img.gz
  • Descomprime el fichero y renómbralo a : openaos-gingerbread.img. MUY IMPORTANTE: Si no lo descomprimes y lo renombras NO podrás arrancar con Cyanogenmod.
  • Reinicia el Archos 101 con el clásico "Volumen - ". Elige "Developer Edition", espera unos segundos y verás un nuevo menú donde podrás elegir Gingerbread. He leído en algún sitio que si no aparece la entrada para el boot en Gingerbread, con un nuevo reinicio sería suficiente.
En teoría, y si no he olvidado nada, estos son los pasos(muy resumidos) para instalar Gingerbread en tu Archos 101. Por cierto, la mayor parte de este post viene de aquí. He añadido el paso 1, ya que en el original no se citaban los pasos. Si que decir tiene, que NO me responsabilizo de nada de lo que le pueda pasar a tu tablet.





jueves, 11 de agosto de 2011

No he perdido la fe...

...desde 1999 en el mundo del software libre ni en GNU/Linux. Ni siquiera en 2008 cuando compré un Apple Macbook.*1

Conocí la obra de Neal Stephenson, si no recuerdo mal, en 2005. Había leído fragmentos de Criptonomicón e incluso, con un buen amigo, charlado largo y tendido sobre cómo había cambiado su concepción de la vida después de leer Snow Crash.

Este verano en la mochila, a parte de unos cuantos gadgets, guardo también "En el principio... fue la línea de comandos.". Ayer, a punto de terminar una estupenda jornada playera, finalicé por no sé qué veces este ensayo. Desconozco la razón, pero tenías más ganas que nunca de llegar a mi casa, arrancar "mi" Debian GNU/Linux y pulsar la tecla "Vivir".

Vamos a dejar los desvaríos y a centrarnos en el verdadero motivo de este post. "En el principio...fue la línea de comandos" es una obra maestra, una verdadera apología de la libertad y de la capacidad innata para decidir libremente tu futuro, tus pensamientos...tu vida.

Si bien es cierto que Stephenson en la actualidad afirma que si reescribiese el libro no escribiría ni la mitad de las afirmaciones libertarias(en términos de software claro.Se confiesa, ahora, fiel usuario de MacOSX) que escribió en 1999, a mi este particular me trae sin cuidado.

Os recomiendo encarecidamente la lectura de este ensayo. En el que podréis deleitaros con párrafos tan maravillosos como estos:

"Todo esto es perfectamente congruente con la pertenencia a la burguesía, que es un estado tanto mental como material. Y explica por qué Microsoft se ve constantemente atacado en la Red desde ambos lados. Los que se siente pobres y oprimidos interpretan todo lo que hace Microsoft como parte de algún siniestro complot orwelliano. A los que les gusta considerarse usuarios inteligentes e informados, les desquicia lo chapucero que es Windows."

"Pero el precio que tuvimos que pagar los dueños de un Mac por una estética y un diseño superiores no fue meramente financiero. Había un precio cultural también, debido al hecho de que no podíamos abrir el ordenador y enredar con él. Doug Barnes tenía razón. Apple, pese a su reputación de ser la opción de los hackers creativos y contestatarios, había creado de hecho una máquina que desalentaba el hackeo, mientras que Microsoft, considerada una perezosa tecnológica y una plagiaria, había creado un vasto bazar de componentes sin orden ni concierto: una sopa primordial que había acabado autoorganizándose en Linux."


"Unix es difícil de aprender.El proceso de aprenderlo tiene múltiples pequeñas epifanías. Lo típico es estar a punto de inventar una herramienta o utilidad necesaria cuando te das cuenta de que alguien ya la inventó, y la incorporó, y eso explica algún extraño archivo o directorio que viste pero que nunca comprendiste realmente antes. "

Y el que da sentido a este blog y a gran parte de mi "vida y demás historias":

"¿Qué diría el ingeniero, una vez hubieras explicado tu problema y enumerado todas las insatisfacciones de tu vida? Probablemente te diría que la vida es una cosa muy difícil y complicada; que ninguna interfaz puede cambiar eso; que cualquiera que crea lo contrario es un imbécil; y que si no te gusta que escojan por ti, deberías empezar a elegir por ti mismo."







*1: Esto es otro debate. Considero que para poder hablar de un tema, cualquiera en general, y Apple en este particular, es necesario conocer, saber e informarse, antes de emitir un juicio de valor. Muchos de vosotros lo hacéis sin tener ni la más remota idea de lo que estáis diciendo. A menudo, yo también cometo este error, pero día a día intento no caer en el pozo de la ignorancia.

jueves, 4 de agosto de 2011

PPA para Hotot

Si usais Twitter o Identi.ca os habréis dado cuenta de las miles y miles de apss que existen para gestionar las cuentas.

He usado alguna que otra app para GNU/Linux, concretamente en GNOME, y la verdad es que ninguna me ha gustado, salvo Hotot.

Gwibber es muy pobre, las actualizaciones raras veces funcionan. Tweetdeck es de Adobe, por lo tanto propietario, entonces lo descarto. He probado incluso alguna para KDE que no recuerdo.

El caso es que hace unos meses buceando por Google Code encontré Hotot. Siempre(o casi siempre) funciona a las mil maravillas. He migrado mi ssoo de escritorio a Linux Mint y al buscar información sobre el proyecto me he enterado de que ya tienen PPA. Buena noticia. El proyecto ha madurado, me alegro!

Tenéis más info sobre los PPA de Hotot aquí: http://www.hotot.org/get_hotot.html

Autenticación básica Nginx en Debian 6.0

Desde hace un año aproximadamente uso Nginx en alguno de los servidores que administro y la verdad es que los resultados son más que aceptables, sobre todo desde que liberaron la versión 1.0.

No había trasteado aún no la autenticación básica sobre Nginx, pero es muy muy sencillo, incluso me atrevería a afirmar que más sencillo que en Apache2.

Indico los pasos que debéis seguir para habilitar "basic_auth" en Debian GNU/Linux Squeeze:

1.-Lee la documentación oficial!
2.- Instala apache2-utils(si, paradojas de la vida, dejas Apache2, pero....)
aptitude install apache2-utils
3.-Crea el fichero que almacenará las credenciales:

root@:/etc/nginx/conf.d# htpasswd -c /etc/nginx/conf.d/htpasswd admin
New password:
Re-type new password:
Adding password for user admin

4.- El fichero de configuración de Nginx debería ser similar a este:

server {
listen 3312;
auth_basic on;
server_name server.org;
include /etc/nginx/php.conf;
access_log /var/log/nginx/server.org.access_log;
error_log /var/log/nginx/server.error_log;
root /var/www/myfolder;
location /admin {
auth_basic "E logho ti, de quen ves sendo...";
auth_basic_user_file conf.d/htpasswd;
}
}

5.- Recargar la configuración de Nginx

root@x:/home/apermuy# /etc/init.d/nginx reload
Reloading nginx configuration: nginx.

jueves, 7 de julio de 2011

Qué opino del Google Nexus S...ahora.

Lo bueno se hace esperar: tengo un Google Nexus S. Creo que este es el primer post relacionado con Android, no lo recuerdo...

El principal motivo del cambio es la operadora: de Movistar a Vodafone. La verdad es que no he tenido problemas ni cobertura ni de navegación vía móvil con Movistar, pero después de 7 años como cliente, he decido cambiar. Cambio por que las tarifas(de todas la compañías en general) son abusivas, pero lo de Movistar es de juzgado de guardia.

Al grano:

Mi opinión sobre Android 2.3.4 "Gingerbread"
Lo bueno:
  • Rapidísimo, supongo que el terminal cuenta, pero esta versión está muy trabajada en temas relacionados con usabilidad y UX.
  • El soporte para múltiples cámaras funciona muy bien.
  • El teclado multi táctil idem que las cámaras.
  • El modo "hotspot" wifi es una auténtica pasada.¿No tienes internet?El Nexus S hace de punto de acceso wireless! :)
Lo malo:
  • Es pronto para una opinión sincera sobre lo malo de Android 2.3.4.
  • Me preocupa Google, todo: desde cómo ha cambiado el "don't be evil", la privacidad, Chrome, Android...Necesito probar, jugar,programar, explorar todavía más para poder afirmar si los buenos son tan buenos y los malos son tan malos.
Mi opinión sobre el hardware del Nexus S
  • Las especificaciones las tenéis aquí, así que no voy a hacer un copia-pega.
Lo malo:
  • Batería: Día y medio. Con 3gwatchdog y JuiceDefender(aunque no es necesario)
  • Tamaño: un poco grande. A veces me olvido de que realmente es un teléfono. Aunque esto no sé si es malo o no.
Lo bueno:
  • La pantalla es una pasada!
  • La wireless va de cine!
  • Peso: no es excesivo, se lleva bien! :)
  • Multimedia: he leído que si el Samsung Galaxy S II es mejor, que si HTC Desire HD...no śe. El Nexus S reproduce Youtube, Mp3, vídeos en general con una calidad más que aceptable. No soy un geek de los teléfonos, ni un "experto" de sites como Xataka: el Nexus S es una pasada, digan lo que digan es un gran terminal, el mejor, no lo sé.
  • Web y redes sociales: No sólo es cuestión del terminal, sino de SSOO, pero es muy manejable y navegar/twittear es un placer con este cacharro.
Resumiendo: pasar de un Nokia 5800 a un Nexus S es como viajar en un Seat 131 y cambiar a un Mercedes SLK AMG. Ustedes mismos!
Salud!

jueves, 23 de junio de 2011

SELinux, RHEL y cosas extrañas...

Últimamente entre reuniones de proyectos y coordinación apenas tengo tiempo para ponerme con temas de administración de sistemas, aún así, le sigo dedicando tiempo.
El caso es que he finalizado la fase de desarrollo de un sitio web con Drupal 7 y quería subirlo al servidor de producción. Todo iba como la seda hasta que al levantar el vhost me encuentro con :
[root@XXX httpd]# /etc/init.d/httpd restart
Parando httpd: [ OK ]
Iniciando httpd: Warning: DocumentRoot [/var/www/html/biblioteca] does not exist
Warning: DocumentRoot [/var/www/html/moodle-testing20/moodle] does not exist
[ OK ]


¡DocumentRoot does not exist! Imposible, pensé. Al final, después de darle muchas vueltas leí en este post que podría ser que SELinux impidiese añadir directorios. Basta con añadirlo al contexto de SE y listo:
chcon -R system_u:object_r:httpd_sys_content_t /var/www/html/biblioteca

martes, 21 de junio de 2011

logwatch

La próxima semana voy a impartir un curso de Drupal en Lugo, de 16:30 a 20:30 de Lunes a Viernes y el Sábado día 2 de 10:00 a 13:30.

El primer día lo dedicaré completo a conocer el entorno de trabajo, desde VirtualBox hasta PHPMyAdmin y demás.

El servidor web que utilizaremos será Apache2, como suele ser habitual en este tipo de cursos express. Veremos temas básicos, desde la instalación a la configuración de virtual hosts y como no, también algo de seguridad, que nunca está de más. Repasando apps interesantes me he topado con logwatch, que para los que no lo conocéis es un script en Perl que facilita la visualización amigable de logs. La instalación es vía apt y lo único de debemos hacer para que muestre información en la consola es copia el fichero de ejemplo a /etc/logwatch:
cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/

Es posible configurar los reportes para que se envíen vía email y demás, pero esto lo dejamos para otro momento. Ahí os va la salida de logwatch directamente en la consola:
################### Logwatch 7.3.6 (05/19/07) ####################
Processing Initiated: Tue Jun 21 08:51:10 2011
Date Range Processed: yesterday
( 2011-Jun-20 )
Period is day.
Detail Level of Output: 0
Type of Output/Format: stdout / text
Logfiles for Host: creba
##################################################################
--------------------- dpkg status changes Begin ------------------------

Installed:
libconfig-inifiles-perl 2.52-1
mytop 1.6-6
---------------------- dpkg status changes End -------------------------

--------------------- httpd Begin ------------------------

Requests with error response codes
404 Not Found
/calendar/view.php?view=month&cal_d=1&cal_m=12&cal_y=2037: 1 Time(s)
/calendar/view.php?view=month&cal_d=1&cal_m=3&cal_y=2030: 1 Time(s)
/calendar/view.php?view=month&cal_d=1&cal_m=6&cal_y=1925: 1 Time(s)
http://98.126.15.13/proxyheader.php: 1 Time(s)
http://healthforcaring.com/proxyheader.php: 3 Time(s)
http://www.ezhealths.com/proxyheader.php: 1 Time(s)
http://www.hardjob.net/proxyheader.php: 2 Time(s)


lunes, 13 de junio de 2011

Charla "Introducción ao software libre - O Grove 2011"

El pasado 6 de Mayo tuve la oportunidad de "evangelizar" en O Grove. Os dejo la presentación por si os interesa.



domingo, 24 de abril de 2011

Charla Drupal Xornadas Inestable Ordes

El pasado Jueves 21 tuve la oportunidad de dar una ponencia de introducción a Drupal en el marco de las VIII Xornadas de Software Libre de Ordes, organizadas por Inestable. Lo que en un principio se concretó para una charla de 90 minutos superó las dos horas y media, buena o mala señal la verdad es que no lo sé, pero sí pude comprobar cómo Drupal y el desarrollo web con CMSs interesa al público asistente a este tipo de eventos.

Desde aquí quiero agradecer la amabilidad de Nika, Salva, los demás miembros de Inestable y todos los asistentes al evento. ¡Seguid así amigos!

Si os interesa la presentación, como suele ser habitual, la he subido a mi rincón de Slideshare:

Obradoiro Drupal
Ver todas las presentaciones de Alberto Permuy Leal

La verdad es que el tema Drupal en Galicia, actualmente me tiene un poco abrumado. Hay mucho interés, y me da la impresión de que después de la II Noite Drupal & GNU/Linux esto va a ir a más. Estamos organizando la segunda, y ya nos han ofrecido colaboración para la III. No soy ni pretendo ser un gurú del tema. Me interesa Drupal por que reconozco que es software de calidad, y lo más importante : es libre.

Salud!

martes, 19 de abril de 2011

Exportar consulta MySQL a CSV desde Python

A modo de apunte dejo un pequeño script en Python para exportar una consulta MySQL a CSV. Estoy bastante liado con un pequeño proyecto relacionado con Moodle y Drupal. El caso es que NO se puede tocar NADA del Moodle y los mismos usuarios de Moodle deben tener acceso a Drupal. He dedicado tiempo a buscar un módulo que permita cambiar el modo de validación de Drupal, pero no he encontrado apenas información. No, no me vale el MoodleSSO.


#!/usr/bin/python
#-*- coding: UTF-8 -*
import _mysql
mysql_servidor = 'localhost'
mysql_usuario = 'user'
mysql_clave = 'ejemplo'
mysql_bd = 'moodle'
conexion = _mysql.connect(host=mysql_servidor, user=mysql_usuario, passwd=mysql_clave, db=mysql_bd)
sql = "SELECT username,password,email INTO OUTFILE '/tmp/drupal_export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' FROM mdl_user "
conexion.query(sql)
conexion.close()

martes, 12 de abril de 2011

apt y cacheo de paquetes



Preparando la "I Noite Drupal & GNU/Linux " que celebraremos en Mugardos este próximo Viernes día 15 de Abril me ha surgido una duda que sinceramente sí había visto en alguna ocasión pero no recordaba el "tip" para solucionarla. ¿Cómo le indico a apt que "tiene que salir" por un proxy? Por lo que he visto podemos hacerlos dos modos.

Modo 1: El chapucero.

Añadimos al fichero /etc/bash.bashrc lo siguiente:

export http_proxy=”http://proxy.noite.drupal:3128”
export ftp_proxy=”http://proxy.noite.drupal:3128”


Modo 2: El modo "pro".

Creamos el fichero /etc/apt/apt.conf.d/proxy con el siguiente contenido.

Acquire::http::Proxy "http://proxy.noite.drupal:3128/";
Acquire::ftp::Proxy "http://proxy.noite.drupal:3128/";


Particularmente me decanto por la opción dos por un motivo fundamental. En el modo 1 optamos por definir dos variables de entorno, estando estas disponibles para cualquier script o aplicación que lo necesite. En la opción 2 sólo indicamos a APT que debe salir por un proxy.

Rizando el rizo, he visto que en lo repositorios de Debian GNU/Linux existe una aplicación que se llama apt-cacher, que en resumidas cuentas viese a ser un proxy para apt. No voy a tocar nada más de este tema, si os interesa en el blog de Alberto Molina se explica muy bien el funcionamiento básico de la aplicación apt-cacher.

sábado, 9 de abril de 2011

Remake: Unixbench

Preparando el servidor OpenVZ para la "I Noite Drupal & GNU/Linux" de Mugardos he encontrado una perla en Google Code: UnixBench. El objetivo de la aplicación es muy claro: ser un indicador de rendimiento para sistemas operativos basados en Unix partiendo de los resultados base de un SPARCstation 20-60(valor 10,0)

Entre los múltiples tests realizados destacan:
.- Dhrystone : Prueba de manejo de cadenas(sin coma flotante :P)
.- Whetstone: Mide la velocidad y efiencia de las operaciones con coma flotante.
.- Execl Throughput : mide la velocidad a la cual los datos pueden ser transferidos de un archivo a otro, con diferentes tamaños de búfer.

Un consejo. No es un test rápido. En un AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ con frecuencia de 2,5ghz y 8GB de RAM el test necesitó más de 40 minutos para finalizar y mostrar resultados.
Para curiosos, geek y demás fauna, ahí van los resultados:



Version 5.1.3 Based on the Byte Magazine Unix Benchmark

Multi-CPU version Version 5 revisions by Ian Smith,
Sunnyvale, CA, USA
January 13, 2011 johantheghost at yahoo period com


1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10

1 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10

1 x Execl Throughput 1 2 3

1 x File Copy 1024 bufsize 2000 maxblocks 1 2 3

1 x File Copy 256 bufsize 500 maxblocks 1 2 3

1 x File Copy 4096 bufsize 8000 maxblocks 1 2 3

1 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10

1 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10

1 x Process Creation 1 2 3

1 x System Call Overhead 1 2 3 4 5 6 7 8 9 10

1 x Shell Scripts (1 concurrent) 1 2 3

1 x Shell Scripts (8 concurrent) 1 2 3

2 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10

2 x Double-Precision Whetstone 1 2 3 4 5 6 7 8 9 10

2 x Execl Throughput 1 2 3

2 x File Copy 1024 bufsize 2000 maxblocks 1 2 3

2 x File Copy 256 bufsize 500 maxblocks 1 2 3

2 x File Copy 4096 bufsize 8000 maxblocks 1 2 3

2 x Pipe Throughput 1 2 3 4 5 6 7 8 9 10

2 x Pipe-based Context Switching 1 2 3 4 5 6 7 8 9 10

2 x Process Creation 1 2 3

2 x System Call Overhead 1 2 3 4 5 6 7 8 9 10

2 x Shell Scripts (1 concurrent) 1 2 3

2 x Shell Scripts (8 concurrent) 1 2 3

========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)

System: polinico: GNU/Linux
OS: GNU/Linux -- 2.6.32-5-openvz-amd64 -- #1 SMP Mon Mar 7 22:25:57 UTC 2011
Machine: x86_64 (unknown)
Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
CPU 0: AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ (2009.1 bogomips)
Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET
CPU 1: AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ (2009.1 bogomips)
Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET
18:09:05 up 1:48, 3 users, load average: 0.25, 0.30, 0.23; runlevel 2

------------------------------------------------------------------------
Benchmark Run: sáb abr 09 2011 18:09:05 - 18:38:11
2 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 18476798.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2613.2 MWIPS (9.9 s, 7 samples)
Execl Throughput 1260.8 lps (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 308577.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 100308.1 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 697625.5 KBps (30.0 s, 2 samples)
Pipe Throughput 987893.9 lps (10.0 s, 7 samples)
Pipe-based Context Switching 102266.6 lps (10.0 s, 7 samples)
Process Creation 3968.2 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 2277.5 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 804.0 lpm (60.0 s, 2 samples)
System Call Overhead 2051427.4 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 18476798.9 1583.3
Double-Precision Whetstone 55.0 2613.2 475.1
Execl Throughput 43.0 1260.8 293.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 308577.4 779.2
File Copy 256 bufsize 500 maxblocks 1655.0 100308.1 606.1
File Copy 4096 bufsize 8000 maxblocks 5800.0 697625.5 1202.8
Pipe Throughput 12440.0 987893.9 794.1
Pipe-based Context Switching 4000.0 102266.6 255.7
Process Creation 126.0 3968.2 314.9
Shell Scripts (1 concurrent) 42.4 2277.5 537.2
Shell Scripts (8 concurrent) 6.0 804.0 1340.0
System Call Overhead 15000.0 2051427.4 1367.6
========
System Benchmarks Index Score 667.9

------------------------------------------------------------------------
Benchmark Run: sáb abr 09 2011 18:38:11 - 19:07:26
2 CPUs in system; running 2 parallel copies of tests

Dhrystone 2 using register variables 36832151.8 lps (10.0 s, 7 samples)
Double-Precision Whetstone 5246.4 MWIPS (9.9 s, 7 samples)
Execl Throughput 3706.6 lps (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 402547.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 121746.1 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 911624.0 KBps (30.0 s, 2 samples)
Pipe Throughput 1990029.1 lps (10.0 s, 7 samples)
Pipe-based Context Switching 437120.2 lps (10.0 s, 7 samples)
Process Creation 10823.0 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 6206.0 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 809.3 lpm (60.1 s, 2 samples)
System Call Overhead 2618061.3 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 36832151.8 3156.1
Double-Precision Whetstone 55.0 5246.4 953.9
Execl Throughput 43.0 3706.6 862.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 402547.4 1016.5
File Copy 256 bufsize 500 maxblocks 1655.0 121746.1 735.6
File Copy 4096 bufsize 8000 maxblocks 5800.0 911624.0 1571.8
Pipe Throughput 12440.0 1990029.1 1599.7
Pipe-based Context Switching 4000.0 437120.2 1092.8
Process Creation 126.0 10823.0 859.0
Shell Scripts (1 concurrent) 42.4 6206.0 1463.7
Shell Scripts (8 concurrent) 6.0 809.3 1348.9
System Call Overhead 15000.0 2618061.3 1745.4
========
System Benchmarks Index Score 1258.5