Darwin Betancourt's blog

Configurar Skype 4.3 en Linux Debian

Virtualdevice

Es muy frecuente estos dias que usuarios linux y especialmente debianitas están teniendo problemas con el sonido en la aplicación Skype, esto gracias a que nuestro amigo Microsoft dejó de dar soporte para ALSA, lo que provoca que al intentar configurar el sonido nos muestra Virtual Device dentro de las opciones de audio y microfono, luego de buscar varias veces en foros y demás encontré una solución para mi Debian Jessie, que al menos en mi caso funcionó.

 

Solución

Se resuelve cargando el paquete pavcontrol y la librería pulseaudio para arquitectura 386, con esto nos aparecerá al configurar nuestro sonido la opción de “Pulse Audio Server Local”
apt-get install pavcontrol libpulse0:i386

Configuracion de Sonido

Configuración de su perfil

Una vez realizados los pasos anteriores debemos escoger el medio de entrada y salida, para lo cual vamos a la opción de control de volumen de skype que se encuentra en la configuración de sonido del propio skype.
Vamos a la pestaña de “Configuración” y en mi caso particular, escogí un dispositivo de sonido que solo me permitía escuchar el audio pero la entrada a través del micrófono, no funcionaba.
Al tener este inconveniente me tocó probar uno por uno y pase de:
Analog Stereo Audio => Analog soundround 5.1 Output + Analog Stereo Input

Finalmente con eso se soluciono y Skype estuvo de vuelta desde mi Debian Jessie.

Espero les sirva esta pequeña guia.
 

Secciones: 
Tags: 

Autenticando Drupal con Open LDAP

LDAP

Cuando pensamos en implementar soluciones con drupal para empresas tipo intranet, como utilizar OpenAtrium u otro tipo de Sitios en donde tenemos la interacción de muchos usuarios, siempre se nos viene a la mente la posibilidad de autenticar contra un servidor de directorios y no tener que ingresar cientos de usuarios uno por uno en nuestro sitio web, para cuando suceden estos casos los que estamos en el mundo del software libre siempre nos viene a la mente OpenLDAP.
Con LDAP nosotros podemos crear usuarios, con varios atributos los mismos que nos sirve para diferentes necesidades, como el autenticar usuarios de correo, usuarios de sistemas de recaudación y entre otras cosas autenticar nuestros usuarios de intranet, como es el caso para el cual servirá esta publicación.

Requerimientos

Para interactuar nuestra autenticación, solo necesitamos del módulo LDAP, que lo podemos encontrar en http://drupal.org/project/ldap, tengo la idea de que tenemos claro como descargar e instalar este módulo dentro de nuestra instalación Drupal, este viene con varios submodulos por decirlo de alguna manera como(server, user module, autentication, authorization).
Necesitaremos de un árbol de directorio basado en OpenLdap.
Otra de los requerimientos que me sirvió fue el utilizar el administrador de ldap basado en php (phpldapadmin), eso con el fin de identificar los nombres de cada campo que voy a mapear hacia drupal.

Configurando el módulo LDAP

Ahora lo que vamos a hacer es activar los módulos:

  • LDAP Server
  • LDAP User Module
  • LDAP Autentication
  • LDAP Authorization

Una vez que hemos activado estos módulos procederemos a configurarlos bajo el siguiente path: admin/config/people/ldap
En el path anterior encontraremos la configuración de ldap basado en pestañas entre las más importantes son: Server, User, Autentication

Pestañas del módulo

Servers

Desde mi punto de vista, esta es la parte más sensible de la configuración y en la cual pondremos mayor énfasis para que se puedan guiar con facilidad.
A través de esta sección agregaremos una nueva configuración para el server LDAP, para lo cual necesitaremos un nombre del sistema y un nombre de para etiqueta, podemos elegir cualquier texto, para nuestro caso utilizaré “ldapserver” para ambos casos y otros parámetros que enumerare a continuación

  • Tipo de Servidor: OpenLdap
  • LDAP Server: 192.168.10.100 (ip donde se encuentra el servidor ldap)
  • Puerto: 389

También encontraremos casilleros de verificación para “Uses TLS” y “Follow LDAP Referreal” los cuales para este caso dejaremos sin marcar.
Luego procedemos a configurar el el Binding Method, para lo cual podemos elegir la opción:
Anonymous Bind for search, then Bind with Users Credentials: Searches for user dn then uses user's entered credentials to bind to LDAP.
Una de las partes importantes viene “LDAP User to Drupal User Relationship” en donde debemos configurar:
Base DNs for LDAP users, groups, and other entries, en donde proporcionaremos información de nuestro DN que lo tenemos definido en ldap, en mi caso sería:
ou=usuarios, dc=drwsoluciones, dc=net
Entre otros parámetros de esta sección definimos el mapeo de campos como:

  • AuthName attribute en el cual para mi caso es: uid
  • AccountName attribute: lo dejamos en blanco
  • Email attribute: mail

Estos campos de uid y mail son tomados de los que tengan definidos dentro de su directorio LDAP.
Hasta aquí finalizamos con la configuración de la sección del Server.

User

Durante la configuración de usuario elegimos las siguientes configuraciones:

  • Manual Drupal Account Creation and Updates:
  • Reject manual creation of Drupal accounts that conflict with LDAP Accounts. This only applies to accounts created on user logon; Account conflicts can still be generated
  • Basic Provisioning to Drupal Account Settings

    • En esta caso les apareceŕa el nombre de la conexión que se definió en el server, debe escogerla o seleccionarla.
  • Drupal Account Provisioning Events
  • Create or Synch to Drupal user on successful authentication with LDAP credentials. (Requires LDAP Authentication module).
  • Create or Synch to Drupal user anytime a Drupal user account is created or updated. Requires a server with binding method of "Service Account Bind" or "Anonymous
  • Existing Drupal User Account Conflict
  • Associate Drupal account with the LDAP entry. This option is useful for creating accounts and assigning roles before an LDAP user authenticates.
  • Application of Drupal Account settings to LDAP Authenticated Users *
  • Account creation settings at /admin/config/people/accounts/settings do not affect "LDAP Associated" Drupal accounts.
  • Action to perform on Drupal account that no longer have a corresponding LDAP entry
  • Perform no action, but email list of orphaned accounts. (All the other options will send email summaries also.)

Con esto finalizamos nuestra configuración del usuario.

Autentication

  • Allowable Authentications
  • Mixed mode. Drupal authentication is tried first. On failure, LDAP authentication is performed.
  • Authentication LDAP Server Configurations
  • Elegimos la que hemos definido en nuestro servidor en el paso 1

Las otras secciones puede ser “sal al gusto” :)
Y hasta aquí ya tenemos configurado nuestro servidor con conexión a LDAP

Pruebas de conexión

Para realizar las pruebas de conexión, podemos hacerlo a través de la sección de usuario, en donde disponemos de “Test LDAP User Configuration”, en donde podemos proveer un uid de lo que hemos configurado anteriormente dentro del LDAP.
Dentro de la configuración del modo de testeo podemos elegir que ejecute una acción: “Execute Action”, esta puede ser “On create or synch to Drupal user when successfully authenticated with LDAP credentials. (Requires LDAP Authentication module).”

Probando la autenticación

Una vez que hemos pasado la configuración y pruebas, podemos loguearnos contra nuestro servidor LDAP desde el formulario de autenticación de Drupal, si recibimos un mensaje que hubo problema creado el usuario, quizás es porque llenaste el dato dentro de la sección del server: AuthName, borralo y vuelve a intentarlo.

Espero les sea de utilidad, cualquier comentario o sugerencia es bienvenida.

 

Secciones: 

Consumiendo webservices con drupal desde el código

webservice

Hablar de webservices es sin duda hablar de versatilidad e integración de sistemas para interactuar en el intercambio y operación sobre los datos.

 

Y una de las ventajas de Drupal es su API de desarrollo que nos facilita el trabajo de manera impresionante, para que reinventar la rueda.

Hace un tiempo en mi trabajo surgió la necesidad de implementar un servicio de consulta que consuma un webservice generado en java (jboss) desde el sitio web institucional (drupal), para lo cual lo primero fue googlear un buen rato y encontrar un ejemplo de webservice implementado con reglas(rules) desde la interfaz de usuario https://www.drupal.org/node/1114308, sin embargo esto conllevaria a limitarse un poco para dar formato a los datos obtenidos y a exponer datos sensibles como datos de acceso al webservice.
Los módulos de las cuales hablaré en esta publicación son:

Como lo había mencionado anteriormente, lo primero que hice fue googlear un rato y proponer una solución de la cual tenía documentación, sin embargo para reutilizar esta configuración en otro sitio, era necesario llevar sus configuraciones, lo que sin duda es algo tedioso, para solventar este percance lo más obvio dirían los expertos, sería desarrollar un módulo personalizado y tener el control de todo, desde utilización de operaciones del webservice, así como en la presentación de los datos.
Puntualmente en este post no hablaré sobre la creación de un módulo personalizado, pero si lo que respecta a la utilización del webservice desde código.

LLamando al hook_default_wsclient_service

Lo primero que debemos hacer es invocar el HOOK dentro nuestro módulo personalizado, como lo veremos en el siguiente ejemplo:
/**
 * Implements hook_default_wsclient_service().
 */
function taxes_default_wsclient_service() {  

  // Taxes from another system (SOAP)
  $ip = '192.168.1.20'; // IP from webservice source
  $port = '8080';  
  
  $service = new WSClientServiceDescription();
  $service->name = 'taxes';
  $service->label = 'Taxes getting from another system';
  $service->url = 'http://' . $ip . ':'. $port . '/paymentPlatform?wsdl';
  $service->type = 'soap';
      
  try {
    $service->endpoint()->initializeMetaData();
    $services[$service->name] = $service;
  }
  catch (WSClientException $e) {
    watchdog('wsclient', $e->__toString());
  }  
  return $services;

  // Here we can call more webservices

}

Con el código que he mostrado nos permite realizar la conexión al webservice, es decir apuntar al ip, puerto y el nombre del webservice con su extensión que en este caso es wsdl, con esto ya hemos hecho lo que normalmente se haría desde la interfaz de usuario
http://www.misitio.com/admin/config/services/wsclient
El código lo he tomado de los ejemplos que proporciona el propio módulo wsclient, he cambiado los parametros que me sirven para mi escenario.

Operaciones del webservice

Para hacer uso de nuestro webservice podemos referirnos al README.txt del propio módulo en donde tiene la documentación para desarrolladores al final.

Usage for developers
--------------------

* You can create web service descriptions in code, see for example
   wsclient_examples.module
* You can easily invoke web services by loading the description and executing
   an operation (the operation name can be used a dynamic method name):

     $service = wsclient_service_load('google');
     $result = $service->translate('Hallo Welt', 'de|en');

Aqui claramente nos especifica que podemos referirnos al wsclient_examples.module para crear un web service description (lo que vimos en el apartado anterior).
Para invocar a uno de los web services que pudimos haber definido en el apartado anterior, lo podemos hacer así:

$service = wsclient_service_load('taxes');

Aquí debemos asegurarnos que el nombre que el enviamos a esta función es el mismo que definimos en el apartado anterior como $service->name = 'taxes' es decir el nombre del webservices, ya que como mencioné puede haber más de uno.
Luego podemos hace uso de las operaciones como se muestra en este caso:

$result = $service->taxesquery('1100232587');

En esta variable $result nos proporcionará los datos devueltos contenido en un arreglo, para ver como esta estructurado este arreglo, podemos hacer uso de la función dsm, que es propia del módulo devel.
dsm($result);

Tipos de datos y operaciones del webservices

Para conocer en detalle como fuciona cada operacion y que parametros requeiere podemos hacer un seguimiento desde la parte grafica http://www.misitio.com/admin/config/services/wsclient desde aqui podremos ver, las operaciones y los tipos de datos que requiere cada uno para su funcionamiento.

Espero les haya servido este pequeño tutorial y cualquier comentario o sugerencia es bienvenido.
 

Secciones: 

Elimine por error mi directorio ETC en debian

PLOP

Poco tiempo atrás hice una de las tonterias mas grandes con el comando rm -Rf ya que la tecla de tabulador me jugó una mala pasada, y como es costumbre digite con rapidez y presione el enter, para resumirlo borre apenas mi directorio /etc de mi computadora personal, imagino lo que piensan y su reacción, justamente esa misma fue la mía “que chuc… hice !!! “.
“Piensa rápido” me decía una y otra vez, mi primera opción fue googlear para buscar la forma de recuperar mi informacion, pero oops… malas noticias no encontré ninguna.
Mi segunda opción fue copiar el directorio etc de otra maquina con configuraciones parecidas a las mías, y luego realizar una actualización de paquetes para sobreescribiera la configuración.
Luego de hacer efectiva mi segunda opción, era el momento de la verdad, reiniciar el equipo para ver si funciona o no, como era de esperarse no funciono, se los explicare porque:

  • Mi instalación cuenta con diferentes particiones para cada directorio como home, usr, var, opt, backup y como era de esperarse estos tenían otro UUID, lo que provoca que no reconozca mis particiones al intentar ser montadas (fstab)
  • Mi archivo /etc/fstab tiene otros UIDs debido a que lo copie de otra maquina

Soluciones

Una de las soluciones óptima hubiese sido reescribir mi archivo fstab antes de reiniciarlo al equipo (esto de haberlo sabido), sin embargo tome la otra ruta en mi “nerviosismo y escalofrío”

Tiempo de hablar de las soluciones para revivir mi equipo, luego del escalofriante sensación de haber “cagado” mi sistema.

  • Primero monté mi partición usr para poder hacer uso del editor vi
  • Con cada partición ejecute el comando tune2fs -l /dev/sda7 | grep UUID > uuid.txt
  • Con el comando anterior lo que estoy haciendo es filtrar la salida y enviarla a un archivo de texto para luego poder copiarla.
  • Una vez hecho esto en cada una de las particiones solo tenía que sustituir mis UUID que había obtenido en el archivo /etc/fstab y reiniciar nuevamente el sistema
  • Para la partición swap no funciona igual, para esto debes primero desactivarla a través del comando swapoff -a, obtener el UUID con el comando anterior y volver a encender el swapon -a

Finalmente estaba en pie mi sistema nuevamente, únicamente tenía que volver a crear mis host virtuales nuevamente.

gnome-screensaver no desbloquea

Otro de los percances que se me presentaron luego de revivir mi sistema, fue que una vez que se activa el protector de pantalla gnome-screensaver este no me reconocia mi clave (password) la solución empírica era cambiar de usuario en la misma ventana de autenticación, pero no era tan cómodo hacer eso cada vez.
Revisando un poco los logs, específicamente el /var/log/auth.log al intentar desbloquear el protector de pantalla recibe un error del tipo:

unix_chkpwd[7648]: password check failed for user (drw)

Revisando un poco en Internet me di cuenta que al copiar mi /etc los permisos del archivo /etc/passwd eran root.root cuando deberían ser root.shadow, entonces procedi a realizar este cambio a través del comando

chown root.shadow /etc/shadow

Y finalmente volvió a funcionar mi clave en el protector de pantalla gnome-screensaver

Moraleja: No te digites tan rápido en comandos que es obligatorio hacer una verificación (rm -Rf).

Espero este post basado en una experiencia les sirva.

Cualquier comentario o sugerencia es siempre bienvenido.

Secciones: 
Tags: 

Primeros pasos en aplicaciones con Facebook

Facebook

Hoy en dia generar aplicaciones para facebook es una área que ha tenido mucha demanda, varios negocios promocionan sus productos y servicios a través de este sitio web, por lo que que sus necesidades van más allá de publicar fotografías y recibir “me gusta” dentro de su página.
A través del presente post voy a documentar mi inicio en este entorno de aplicaciones para facebook, también incluiré una solución a un error muy común al iniciar a desarrollar.

Encontrar el camino para iniciarse como desarrollador facebook es fácil, lo único que necesitas es disponer de una cuenta en esta plataforma y luego activar tu ambiente de desarrollador (https://developers.facebook.com) para lo cual será validada tu cuenta con tu numero de celular o con una tarjeta de crédito.

Existen diferentes ambientes para desarrollador de facebook, ya sea para PHP que es lo puntual que voy a documentar en este post, sin embargo también es necesario mencionar ambientes como IOS, Java, Android entre otros, para todos estos ambientes necesitas descargar estas librerías para disponer del API de desarrollo.

Dentro de las aplicaciones de facebook se contempla las plataformas, lo que tiene que ver con Aplicaciones en Facebook, Sitios Web entre otras, estas son las que hablaré ligeramente aqui.
En drupal podemos hacer lo que se conoce aplicaciones para “Sitios Web” para lo cual necesitaremos el modulo facebook (http://drupal.org/project/fb) en donde nos facilitará una interfaz en la cual introduciremos los datos indispensables de conexión a facebook como son:

  • Identificador de la aplicación
  • Codigo secreto de la aplicación

Más sobre este módulo lo documentare más adelante en otro post.

Aplicaciones en Facebook (Apps on Facebook)

Para generar aplicaciones facebook lo que se conoce como Canvas Pages podemos hacerlo siguiendo este tutorial proporcionado por la propia pagina https://developers.facebook.com/docs/php/howto/profilewithgraphapi/ para lo cual necesitas disponer de tu dominio un certificado de seguridad es decir https, a muchos como me paso a mi, puede sucitarles un problema como que la linea en ese script $facebook->getUser(); siempre les da como resultado 0, para lo cual deberian autenticarse en la aplicacion, pero dentro de ese script se debe agregar lineas adicionales como las siguientes.
Definir el alcance de permisos que tendrá la aplicación, para esto debemos seguir los pasos que se indica en este enlace.
https://developers.facebook.com/docs/games/canvas/canvas-tutorial#authenticate

La diferencia radica en las líneas al llamar la función getLoginUrl()
“If the player ID is 0 then create the Login URL. This Login URL uses the Login Dialog to prompt the player to authorize the game. We then direct the player to this URL in order to authenticate them. An important note: since on Canvas our game is loaded into an iframe, we can't do a server side redirect here as we need to redirect the top frame. For this reason, we implement a client side redirect in JavaScript with top.location.”

$loginUrl = $facebook->getLoginUrl(array(
        'scope' => $scope,
        'redirect_uri' => $app_url,
        ));
print('<script> top.location.href=\'' . $loginUrl . '\'</script>');

Luego de eso veremos que nuestras primeras líneas que ya funcionan.

Espero les sirva este pequeño tutorial.
 

Secciones: 
Tags: 

Drupal Picchu 2014

Comunidad Latina

La comunidad Drupal en todo latinoamérica se viene fortaleciendo cada día más, un evento tras otro, sin duda esta edición del Drupal Picchu no es la excepción, la cual se desarrolló en la ciudad de Cusco en Perú, el mismo que se convierte en otro precedente para futuros eventos y fortaleza de nuestra comunidad latina.

La planificación

Durante su planificación se contó con la participación, de la mayor cantidad de voluntarios de diferentes países, personas con una “bandera flameante” de entusiasmo para llevar a cabo un evento sin precedentes.
Nick Vidal(@nickvidal) un activista e impulsor del crecimiento y fortaleza de la comunidad Latina de Drupal, posteo la primera convocatoria el 26 de septiembre de 2012, la cual recibió la mejor de las acogidas dentro de la comunidad, conjuntamente con Fernando Paredes (@develcuy), Nancy Contreras (@JoyitaViajera) y Bonifacio Chambilla como organizadores principales del evento, invirtieron muchas horas de trabajo y esfuerzo para lograr llevar a cabo este fabuloso encuentro drupalero.

Mi arribo a Cusco fue a través de Guayaquil - Lima - Cusco, tuve que hacer una escala de diez horas en el aeropuerto de Lima para partir al siguiente dia entre las primeras horas a Cusco, el vuelo tuvo un ligero retraso, mi salud con un pequeño percance, pero a pesar de todo mantenía mi entusiasmo por llegar a reunirme con mis viejos y nuevos amigos drupaleros.

El evento

El evento empezó el día lunes 20 de enero con la agenda de talleres en diferentes niveles, cada taller contaba con un periodo de tiempo de dos horas, desde el primer día se podía evidenciar el trabajo de calidad que habían realizado los diferentes equipos de organización, el material gráfico era de primera, así como badget, camisetas (polos), guías, refrescos, programas impresos, publicidad, entre otras cosas.

Inauguracion
El siguiente día fue la inauguración en la cual se contó con la participación de la directora ejecutiva de la Asociación Drupal, Holly Ross (@drupalross), la intervención de las autoridades de la Universidad Andina del Cusco representada por el Rector de la Universidad dando por inaugurado el Drupal Picchu 2014.
Así fueron transcurriendo los días con varias conferencias el martes y miércoles, durante el cual he aprendido cosas que no sabía de Drupal 7 y su sucesor Drupal 8, conferencias y foros acerca de mejores prácticas, modelos de negocio, entornos de desarrollo, comunidad, organizaciones sin fines de lucro, educación entre otros.

El miércoles en la tarde alrededor de las 5pm se desarrolló la clausura del evento, con el agradecimiento a todos quienes sumaron su granito de arena para realizar este evento, así mismo se obsequió algunos presentes a los ponentes, los participantes también obtuvieron un libro a través de un sorteo, contamos con la grabación de un programa de televisión local, lo cual fue muy divertido, posteriormente se dejó abierta la invitación para los Drupal Devs durante el jueves y viernes de 9 a 1pm, coordinada por Marco Villegas.

El turismo

Druplicon

Desde el viernes partimos a las míticas ruinas de Machu Picchu para lo cual nos trasladamos en un interesante viaje en tren - Inca Rail, el viaje duró alrededor de una hora con treinta minutos desde Ollanta y Tambo hacia Aguas Calientes en donde pasariamos la noche.
El sábado desde las 4:30am emprendimos el camino a Machu Picchu con desafío de escalar el Wayna Picchu, debido a un derrumbre tuvimos que subir varios niveles de gradas hasta llegar a la estación de control, pero esto no fue un impedimento para poner a prueba nuestras capacidades físicas al momento de subir por mucho tiempo a la cima del Wayna Picchu, partimos alrededor de 32 personas de diferentes países, aqui escuchamos un poco de historia y admiramos la belleza del lugar.
Degustamos de la variedad de comidas y bebidas típicas de la localidad, la cual fue muy buena, también visitamos algunos centros de entretenimiento (Papachos, El templo en Cusco).

Los amigos

Como en todo evento Drupalero se amplía mi círculo de amigos, esta vez conocer a Victor Kane fue algo sorprendente, ver su capacidad física e intelectual sin dejar de lado su buen humor fue una grata experiencia, también la oportunidad de conocer a Carlos Ospina, Ivan Campana, Mauricio, Ariel, Vanessa, Renato, Sebas, Joao entre otros.
Además el reencuentro con viejos amigos como Nancy, Fernando, Nick Vidal, Luis Dueñas, Molly Byrnes, Joaquin Bravo, Liz Zabala, Erick Aguayo, Alberto Arancibia, Leandro Nunes, Eduardo Telaya, David Jeyachandran, Luis Curo, Cristian Mamani.
Conocer en persona a Holly Ross durante una grande y deliciosa cena con los líderes de las comunidades latinas para hablar sobre un posible DrupalCon en Latinoamérica.

Es bueno pertenecer a una comunidad sólida y que va fortaleciéndose cada día más, también aprovechamos la oportunidad de establecer una de las primeras reuniones de la comunidad Drupal Ecuador conjuntamente con Ivan Campana, Eric Aguayo y mi persona, hablando sobre los desafíos y tareas que nos esperan para fortalecer y sacar en adelante nuestra comunidad Nacional y local.

Las fotos

Las fotos como en todo evento han sido subidas en FLICKR y estan indexadas con dos hashtags #DrupalPicchu y #dlatino

Enlaces

Me llevo una experiencia grata de poder compartir este evento junto a personas muy profesionales, pero sobretodo muy humanas y amigables, que es un condimento especial dentro de la comunidad Latina de Drupal.

Llegas por la herramienta, te quedas por la comunidad.

Secciones: 

Traducir plugins para Squirrelmail

Logo de squirrelmailHace algún tiempo me encontraba implementando una solución de Webmail con software libre, para lo cual me encontré con squirrelmail, un software muy práctico al momento de satisfacer mi necesidad en ese momento.
Instale varios plugins para proporcionar a los usuarios mayor funcionalidad y usabilidad, sin embargo tenía serios problemas con el idioma de algunos de los plugins cargados, mucho más cuando mis usuarios son un tanto apáticos al idioma Inglés.

Es así que decidí buscar cómo generar archivos de traducción para los plugins, y no tener que realizar traducción embebida dentro de cada plugin, es decir que funcione solo para idioma español, una solución no ortodoxa.

Bueno basta de palabrería y empecemos con este tutorial de como traducir los plugins para squirrelmail, cabe recalcar que trabajo bajo la distribución Debian,quizas en otras distribuciones varia la ubicación de los archivos a los cuales me refiero, ademas ya tengo precargado el paquete gettext.

Lo que veremos esta enmarcado dentro del contexto de:

  • Obtener o crear un archivo PO
  • Traducir las cadenas o textos al español
  • Convertir el archivo PO a MO
  • Cargar la traducción para que la lea squirrelmail

Existen casos en que existen archivos del tipo POT, el cual podemos renombrarlo a PO y modificar una linea que explicaré mas adelante en una NOTA, sin en caso no disponemos de este tipo de archivo que lo acabo de mencionar procedemos a realizar la siguiente acción.

Lo primero que debemos hacer es ir hacia el directorio del plugin, dentro de este realizaremos la siguiente operación para obtener todas las cadenas de los archivos PHP

xgettext --keyword=_ -d <plugin_name> -s -C *.php

Ejm:

xgettext --keyword=_ -d miplugin -s -C *.php

Realizada la operación anterior obtendremos un archivo PO con todas las cadenas que se necesita traducir para el lenguaje que se necesite.

#: functions.php:94
msgid "(set to zero to turn off)"
msgstr "(Setear a cero para apagar)"

Como podemos observar la variable msgid es el lenguaje original seteado dentro de los archivos PHP, con la variable msgstr es lo que nosotros necesitamos traducir, como se puede ver en el código anterior.

Realizado este paso necesitas transformar este archivo PO a MO, para lo cual se debe realizar el siguiente comando:

msgfmt -o <nombre de tu plugin>.mo <nombre de tu plugin>.po

Ejm.

msgfmt -o miplugin.mo miplugin.po

NOTA: Una vez realizado este procedimiento necesitas cambiar dentro de este archivo la codificación para tu idioma, lo que se refiere a CHARSET, en mi caso utilizo el iso-8859-1, en caso de que no lo hagas recibirás un mensaje de error al intentar transformarlo a la extensión MO.

“El conjunto de caracteres "CHARSET" no es un nombre de codificación portátil.
La conversión de mensajes al conjunto de caracteres del usuario podría no funcionar.”

Tenemos listo nuestro archivo de traducción, ahora lo que necesitamos es poder cargarlo dentro del lenguaje que necesitamos, es decir en espanol, para esto debes copiar este archivo MO a /usr/share/squirrelmail/locale/es_ES/LC_MESSAGES

Refrescar nuevamente tu página de squirrelmail y podrás ver que ya cuentan con traducción a español.

Espero les sirva este pequeño pero práctico tutorial.

No olvides compartirlo a través de nuestros enlaces de redes sociales.

Saludos.
 

Secciones: 

ATI Radeon en Debian Wheezy

AMD CatalystHace unos dias atras que habia actualizado Debian de squeeze a wheezy, tal parece que todo funcionaba bien en mi gnome, hasta desapareció la marca de agua que antes tenía en squeeze para el vídeo ATI, pero al momento de intentar ejecutar aplicaciones como knotes o audacity note que algo no andaba bien con la configuracion de video, no podía abrir algunas aplicaciones porque se me quedaba pegada(colgada) la aplicación y tenia que reiniciar, algunas veces solo me sacaba de la sesión y tenía que iniciar nuevamente, el problema parecía que era generado por el acelerador 3D.
Entonces procedí a monitorear el syslog desde un equipo remoto a través de ssh para saber en donde se quedaba colgado y que tipo de registro tenía en el log.
Detecte que el problema era con el fglrx es decir el driver.
Siguiendo algunas pautas que encontre aqui en

http://wiki.debian.org/ATIProprietary#Debian_7_.22Wheezy.22

en este enlace me proporciona detalles de como cargar el driver para mi ATI RADEON HD 6450.
Debía asegurarme de que el driver funcionaba, el comando para hacer esto es fglrxinfo, que deberá arrojar algunos datos, como los siguientes:

display: :0.0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 6450
OpenGL version string: 4.2.11762 Compatibility Profile Context

Si no dispones del comando en tu Linux, entonces debes instalar antes el siguiente mesa-utils
Una vez que sabes que el driver funciona a la perfección puedes seguir la siguiente guia
http://wiki.cchtml.com/index.php/Verifying
Es necesario renombrar el archivo xorg.conf que esta en /etc/X11, una vez hecho esto procedes a generar nuevamente un archivo de configuración, ejecutando el comando
aticonfig --initial
Una vez generado el nuevo xorg.conf puedes reiniciar el servidor X y ya tendrás funcionando la nueva configuración sin problemas.
/etc/init.d/gdm restart

 

Espero que les sirva esta pequeña guia.

Todos los comentarios y sugerencias son bienvenidos.

Saludos.

Secciones: 

Analogías para enseñar Drupal

Analogías con DrupalA inicio de julio empecé realizando la capacitación a un alumno de un instituto de la ciudad de Loja (Ecuador), esta persona no sabía mucho de lo que es Drupal y es así que llegó hasta mí, sin embargo su entusiasmo por aprender era superada por su premura del tiempo para entregar un proyecto de dicho centro de estudios.

En esta publicación voy a escribir un poco sobre lo que se refiere a la creación de contenido, tipos de contenido y vistas, partiendo la analogía que he descrito en el título de esta publicación (contenido, formularios y consultas), justamente para cubrir algunas preguntas y dudas que nacieron de este alumno en particular.

Para todos quienes están empezando en el mundo de Drupal, voy a darles ciertas instancias para que se puedan ubicar en tiempo y espacio con los conceptos y términos de este CMS.
Como sabemos al momento de terminar de instalar Drupal disponemos de la creación de dos tipos de contenido (Artículos, Páginas) es decir contenido dinámico y contenido estático respectivamente, pero como siempre pasa se quiere un poco más de esos tipos de contenido, ahí es donde podemos crear nuevos “formularios” para poder ingresar este tipo de contenido.

Agregando “formularios”

Mi alumno de la capacitación durante todo el desarrollo tenía su idea centrada en la creación de formularios en PHP para agregar información de docentes, sin embargo me “canse” de hablar sobre los Tipos de Contenido de Drupal, esto me llevó a realizar la analogía de los “formularios” para que pueda llegar la idea mucho más clara.

En Drupal podemos crear “formularios” lo que se conoce como Tipos de contenido, esto lo encontramos en el menú principal de administración bajo “Estructura”.
Es aquí donde podemos definir estos “formularios” para que se puedan llenar con nuevos datos o contenido, dentro de esta sección se puede encontrar la manera de agregar campos, pero estos campos necesitan tener un tipo definido de almacenamiento, es decir TEXTO, IMÁGENES, ENLACES, FECHAS y disponemos de las facilidades para hacerlo a través del CCK (Kit de creación de contenido) que viene incorporado en drupal.

Definiendo “Consultas”

Al hablar de Vistas en primera instancia y en segunda nadie entiende a un usuario Drupal, pero es muy fácil tomar el concepto de consultas, es decir:

SELECT titulo, imagen, fecha FROM tabla WHERE tipo=docentes and publicado=si order by title desc

Pues bueno igual aqui se aplica el concepto de vistas, pero desde el lenguaje natural a través de un entorno gráfico.
Cuando definimos una VISTA (view) necesitamos mostrar ciertos campos, lo que serian los campos en la instrucción SQL, también necesitamos definir los FILTROS, lo mismo que hacemos en la sección WHERE en SQL.
Partiendo de esta analogía tenemos un panorama mucho más claro acerca de lo que se refieren a las VISTAS de forma introductoria en drupal.

Espero que les sirva de ayuda a quienes inician en el mundo Drupal, no es una guia muy avanzada pero tengo la impresión que les dará un poco más de claridad en su concepto.

Saludos Cordiales.

Los comentarios y sugerencias son bienvenidos.

Secciones: 

Reorganizando módulos Drupal

Reorganizar módulosAl iniciar en el mundo de sistemas de administración de contenido (CMS) tiendes a buscar como darle mayor funcionalidad a estos, a través de módulos, componentes o plugins dependiendo el caso del CMS.

Este caso en particular les voy a hablar acerca de mi primera experiencia con Drupal, esto fue con la  versión 5.x, en la queria darle mayor funcionalidad, como es el caso de instalar un módulo para disponer de un editor WYSIWYG (What you See is What you Get), he aqui mi primer error que quizá lo cometieron muchos, luego avance a las 6.x con algunas correcciones y finalmente a la 7.x, sin embargo es necesario recalcar los errores.
Error 1:
Instalar el módulo bajo <raíz del sitio>/modules
Error 2:
Instalar el módulo bajo <raíz del sitio>/sites/all/modules
Bueno según como vamos aprendiendo y desarrollando en drupal, te encuentras el caso como que es difícil organizar todos los módulos en un solo sitio, luego conoces la posibilidad de poder ordenarlos, pero OOPS ya tienes montado un sitio con los errores que te acabo de mencionar, pero hey tranquilo, se puede solucionar.

Los expertos recomiendan

Cuando implementas un sitio en Drupal 7.x, sabes que a través de esta plataforma puedes crecer en desarrollo, ya que es un framework y que cuenta con un API, investigando un poco más notas que esta funcionalidad del API busca los módulos en los directorios que te mencione y sus subdirectorios, e igual funciona, sin embargo esta no es la mejor manera.

Los expertos recomiendan hacerlo de la siguiente manera y te lo explicaré porqué.
¿Qué pasa si incluyes todos los módulos en modules como yo lo hice, es decir en el directorio de la raíz?
Pues bien pasa que no sabrás cuales son los módulos que descargaste adicionales y cuales vienen con el core de Drupal es decir con el paquete que descarga drupal-7.x.tar.gz.

Algo parecido sucede cuando los cargas en <raíz del sitio>/sites/all/modules
Qué pasa si creaste un módulo personalizado para tu empresa, pero alguien más debe darle soporte, creo que si te vas de la empresa deberían llamarte para saber en donde esta o lo colocaste.

Pues bien he aquí algunas buenas prácticas que recomiendan los expertos
crear dentro de <raiz del sitio>/sites/all/modules los siguientes directorios:

  • contrib este directorio contendrá todos los módulos adicionales que hayas descargado de Internet
  • features este directorio contendrá lo que se llama caracteristicas importadas desde otro sitio con el módulo features
  • custom este directorio estará disponible para los módulos a la medida o personalizados para la empresa en donde funciona el sitio

Reorganizando

Esperanza la tuya, aún puedes corregirlo y a través de esta sección te lo voy a decir
Lo primero que debo aclarar es que esta guia esta basada en un entorno Linux, instalado el paquete drush (drupal shell).
Lo primero que debes hacer es lo siguiente.

  • Ejecutar drush dl registry_rebuild
  • Luego ordenar los módulos en los directorios(moverlos) que te he mencionado en la recomendación de expertos.(contrib, features, custom).
  • Finalmente ejecutar el comando drush rr

Con esto ya tienes reorganizado tus módulos en los directorios adecuados.

Espero les sirva de ayuda.

Comentarios y sugerencias son bienvenidos.

Secciones: 
Tags: