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.