2010/03/24

Gmail para leer Hotmail y Yahoo Mail

Gmail permite descargar el correo de otras cuentas (actualmente hasta un máximo de 5 cuentas), que tengan el servicio POP3 habilitado.

Por ejemplo, si alguien tienen más de una cuenta Gmail, puede configurar una de ellas para que todos los demás correos lleguen allí.

Lo mismo se puede hacer para una cuenta Hotmail.

Para que los correos de Yahoo Mail también puedan llegar, hay que habilitarle el servicio POP3.

Gmail leyendo Gmail

Normalmente, cada cuenta Gmail tiene habilitado el servicio POP3.

Entonces, elija primero la cuenta desde donde desea ver todas las otras e ingrese. Allí puede entrar a Settings (Opciones), Accounts and Import (Cuentas e Importar), Check mail using POP3 (Revisar correo usando POP3) y pulsar el botón Add POP3 email account (Agregar cuenta email POP3) para agregar los datos de cada una de las otras cuentas.

Para verificar que tiene la propiedad de la cuenta que quiere asociar, Gmail le enviará un mensaje a dicha cuenta un mensaje con un código de verificación, un enlace e instrucciones para hacer la validación. Es conveniente usar otro navegador para entrar a la otra cuenta Gmail, abrir el mensaje y copiar el código que se ingresará en la ventana que dejamos abierta en el primer navegador. Por ejemplo, entrar a una cuenta A con Firefox y a la cuenta B con Chrome o IE.

Entre las opciones de una cuenta asociada, si gusta puede marcar la automáticamente aplica una etiqueta a los mensajes de esta cuenta para que pueda  distinguirlos fácilmente de los demás.

Gmail leyendo Hotmail
Puede asociar de modo similar una cuenta Hotmail.

Gmail leyendo Yahoo Mail
Si tienen una cuenta en Latinoamérica, tal vez habrá notado que desde hace algunos años el servicio POP3 está deshabilitado, a menos que adquiera Yahoo Mail Plus, que es un servicio pagado. Sin embargo, por alguna razón, las cuentas de Asia sí tienen el servicio POP3 habilitado en las cuentas gratuitas. Afortunadamente, es posible hacer el cambio.

Ingresando a su cuenta Yahoo Mail, puede entrar los datos de su cuenta. Puede ser que le tome un tiempo encontrar el enlace adecuado, pero es uno de los que aparece en la parte de arriba. Tal vez como un desplegable bajo su nombre de usuario (Edit My Account, Editar mi cuenta), o como un enlace simple (My Account, Mi cuenta).

Allí, por seguridad, le pedirá otra vez la contraseña, antes de conducirle al Account Info (Datos de la cuenta).
En la sección Accounts Settings (Opciones de la cuenta), entre a Set Language... (Establecer lenguaje...). Allí, podrá cambiar el Preferred Content (Contenido preferido) a Yahoo Asia.

Después de grabar los cambios, puede volver a mail.yahoo.com y entrar en Options (Opciones), POP & Forwarding (POP y Reenvíos), Set up or Edit... (Establecer o editar...), y marcar Web & POP Access (Acceso Web y POP). Además hay una opción que permite elegir entre recibir absolutamente todos los mensajes, o sólo aquellos que Yahoo no considere spam. Gmail tiene un filtro antismpam, así que parece buena idea pasarle todos los mensajes.

Luego de guardar la configuración en Yahoo Mail, se puede ir a Gmail y asociarla como en el caso anterior.

Referencias:

2010/03/12

Resolviendo Drupal multisite

Aunque la instalación y configuración inicial de Drupal es relativamente sencilla y directa, configurarlo para que varios sites compartan el mismo motor fue, para mí, casi un dolor de cabeza.

Drupal
Drupal es un CMS (Sistema administrador de contenidos) open source escrito en PHP. Es muy popular y, debido a su arquitectura especialmente extensible, que permite construir aplicaciones más allá del CMS, es considerado también como framework.

La instalación es simple. Se descomprime el archivo que se descarga de drupal.org en algún lugar del directorio web. Luego se accede a la dirección correspondiente y se siguen los pasos, que incluye indicar los parámetros de acceso a una base de datos MySQL (o PostgreSQL) y definir un usuario administrador.

Drupal Multi-Site
En el árbol drupal instalado hay un directorio sites. Allí, en el directorio default podemos colocar los archivos, módulos y temas del site. Además hay un directorio all, donde el manual, los tutoriales y los libros colocan los módulos y temas para que 'estén disponibles para todos los otros sites'.

Así que uno se imagina que puede tener más sites bajo ese mismo árbol, funcionando con el mismo motor. De hecho, esa configuración se denomina multi-site.

Pareciera que es algo que no se usa mucho, porque no lo mencionan en ningún material introductorio. En la documentación hay varios casos para leer. Si antes de hacerlo uno se imagina que bastará con crear otros subdirectorios con la misma estructura, encontrará que no es así.

Entonces, lógicamente, se lee un poco el manual... luego en los foros... blogs... googleando en la búsqueda de una explicación que quién iba a pensar sería tan difícil de encontrar. Es un problema algo frustrante. Al menos para mí; me tomó todo el día dar con una solución.

Mi ambiente
En un sistema con Windows 7, desarrollo usando XAMPP 1.7.1.

XAMPP es un paquete que facilita el desarrollo PHP/MySQL. Viene con Apache, PHP, MySQL y Mercury Mail preconfigurados para trabajar juntos, lo que es realmente un gran ahorro de tiempo, respecto a realizar manualmente cada instalación/configuración. Uso la versión 1.7.1 porque usa PHP 5.2, que no emite una alarma cada vez que un parámetro es pasado por referencia (lo cual en PHP 5.3 se ha vuelto deprecated). Y como muchos módulos que corren con Drupal 6.x tienen funciones con parámetros pasados por referencia me parece mejor ser un poco prácticos y usar una versión menos que la ultimita :)


XAMPP 1.7.1 viene con Apache 2.2.11, PHP 5.2.9, MySQL 5.1.33-community, entre otros paquetes (ver Old Version of XAMPP para más detalles).

Se supondrá que XAMPP está instalado en C:\bin\dev\xampp\. Eso significa que el directorio web es C:\bin\dev\xampp\htdocs\. Allí, Drupal 6.16 está instalado en test\drupal_101\. Es decir que, para acceder a mi drupal, el url es http://localhost/test/drupal_101/.

Podría ser más sencillo, pero no es demasiado complicado y creo que tener el drupal un poco metido en el árbol ayudará a ilustrar mejor el punto.

Mi solución
Los pasos que suelen aparecer en la mayoría de la documentación, foros, blogs y otras fuentes de internet mencionan virtualhosts o aliases en apache, .htaccess, hosts, subdominios y otras cosas complicadas.

Practicamente nadie se detiene a explicar el por qué la necesidad de estas complicaciones, o cuál es la idea básica del proceso. Y me parece que deberian hacerlo, porque aclara algo muy importante del funcionamiento de Drupal.

Cuando accedo a http://localhost/test/drupal_101/, Drupal eventualmente buscará un archivo settings.php. En una instalación típica lo encuentra en sites/default/settings.php.

Lo que no se nos dice con claridad es que, en realidad, Drupal usa el url como parámetro para determinar dónde buscar el archivo settings.php. De hecho, parece que default es el último lugar donde busca. Antes ha buscado en localhost.test.drupal_101. Puede hacer la prueba renombrando sites/default como sites/localhost.test.drupal_101 y ver que funciona igual. Sorprendente ¿no?

Si yo quisiera un nuevo site, digamos http://localhost/test/drupal_202/, lo que tendría que hacer es correr la misma aplicación pero bajo ese nuevo nombre. Es decir, lograr que al entrar a ese url se corra exactamente el mismo php que antes. Eso haría que Drupal busque el archivo sites/localhost.test.drupal_202/settings.php correspondiente. Y si existiera y estuviera bien configurado, listo, ¡tendríamos Drupal multi-site!

Pero ¿cómo hacer eso?. Ahí es donde la mayoría mete en el juego las complicaciones de los dominios, subdominios, hosts, virtualhosts, .htaccess, etc. Son soluciones válidas pero, en mi humilde opinión, hay un modo más sencillo, que está al alcance tanto de los usuarios Windows como Linux, y además ilustra bastante más cláramente lo que ocurre.

Abro una consola de comandos en el directorio que contiene a mi arbol drupal_101, htdocs/test/ (SHIFT+clic derecho, Open command window here), para ejecutar el comando mklink:

mklink /J drupal_202 drupal_101

Eso crea un enlace simbólico (una especie de directorio ficticio) que permite apuntar al directorio drupal_101 con un nombre nuevo adicional drupal_202.

mklink está disponible en Windows 7 y WIndows Vista. Para Windows XP puede usar el comando Junction (puede ver más información sobre esto en el post Enlaces simbólicos en Windows). En Linux usaría un comando similar a ln -s drupal_101 drupal_202 (allí primero se indica el destino y luego el link).

Hecho esto, al entrar a http://localhost/test/drupal_202/ uno esperaría ver lo mismo que si se entrara a http://localhost/test/drupal_101/. Después de todo se trata del mismo directorio, aunque tenga dos etiquetas. Pero, como Drupal usa el url como parámetro para determinar el lugar dónde debe estar el archivo settings.php, encontrará uno diferente en sites/localhost.test.drupal_202/ y así veremos un site también diferente.

En resúmen
Drupal usa el url como parámetro para determinar que settings.php usar. Y el settings.php determina el site que se carga. De ese modo podemos tener varios sites, si logramos entrar al mismo drupal usando diferentes nombres. Una manera sencilla de lograr eso es usando enlaces simbólicos. Eso me parece menos complicado que la alternativa de los aliases, y virtualhosts.

En el fondo, esta técnica aparece en la documentación cuando habla del uso de subdominios, pero la idea escencial está tan opacada por las otras dificultades que cuesta distinguirla. Ojalá este artículo sea de ayuda.

Posibilidades
Basta cambiar la configuración de la base de datos que aparece en el settings.php para que el site se transforme en algo completamente diferente. Jugar con esto me ayudó a entender un poco mejor la naturaleza de una aplicación drupal respecto de otras opciones.

El nombre localhost.test.drupal_202 sigue un patrón que se explica mejor en el comentario contenido en el archivo default.settings.php

2010/03/11

Enlaces simbólicos en Windows

En Linux, un enlace simbólico es un archivo o directorio ficticio que representa a un archivo o directorio real.

Por ejemplo, puedo tener un enlace simbolico /usr/bin/java en lugar de /usr/bin/java-1.6 (En este caso en particular me sirve para actualizar java sin tener que tocar los archivos de configuración que se refieren a /usr/bin/java).

En Windows 7, y también en Windows Vista, se puede hacer con el comando mklink.

También es posible usar una utilidad llamada Junction. Funciona para Windows XP en adelante y puede descargarse de Junction v1.05

La descarga provee un zip que contiene un único archivo ejecutable que se puede colocar en C:\Windows\. De ese modo, está disponible en cualquier lugar que se abra la consola de comandos.

En mi caso, necesitaba un enlace simbólico htdocs/site1.localhost que apuntara a htdocs/drupal/sites/site1.localhost
Para eso, me ubiqué en htdocs y ejecuté el comando:

mklink /D  site1.localhost drupal\sites\site1.localhost

o, usando junction:

junction site1.localhost drupal\sites\site1.localhost

A partir de allí, cuando entro a http://localhost/site1.localhost estoy accediendo al contenido de drupal/sites/site1.localhost.

Para eliminar el link:

rd site1.localhost

ó, usando junction:

junction -d site1.localhost

Nota:
Este es un paso intermedio en mi intento de lograr una configuración drupal multisite (lo que aún no consigo), sin embargo me ha parecido útil lo que se puede hacer con Junction por sí sólo. Ojalá que a ustedes también.

2010/03/09

Desarrollo por capas

Me parece que hay un paralelo en lo que pasa entre un desarrollador y el jefe del proyecto, respecto a su trabajo, con lo que pasa entre un cliente y el desarrollador, respecto a su producto.

El jefe del proyecto es el encargado de que los desarrolladores consigan el producto requerido. Y para hacerlo los organiza según cierta metodología (bueno, si hay suerte). Y suele ser una metodología genérica (waterfall, RUP, Scrum, ...).

Es como cuando un desarrollador trata de imponer una solución genérica a un cliente. Lo obliga a ejercitarse en un flujo de trabajo artificial en lugar del flujo de trabajo naturalmente determinado por sus necesidades.
Antes lo hacían a menudo, pero ahora los desarrolladores entienden que es mejor construir una solución específica, basada en las necesidades reales del cliente, en lugar de una basada en necesidades imaginadas.

De forma similar, sería necesario que la forma de organizar el desarrollo de un proyecto sea determinada por las necesidades reales del equipo de desarrollo, en lugar de necesidades imaginadas por el jefe de proyecto, o incluso por el gerente.

Es decir, se necesita una meta-metodología; algo que nos guíe en el proceso de encontrar la mejor organización para un escenario incierto de personas, recursos y problemas.

Por mi parte, me parece que hay que ser pragmáticos, flexibles, intuitivos y algo amigos de descubrir lo desconocido.

Por ejemplo, en el análisis de un problema relativamente extenso no vale la pena tener determinado de antemano todo lo que se requiere implementar.

Me parece que es mejor hacer una lista de lo que se nos va ocurriendo e ir organizándola en capas conforme llega y conforme nos vamos ocupando de las capas más internas, que contienen la base, lo más escencial. E ir cubriendo cada capa gradualmente, hasta llegar a las capas externas, las de los detalles menos escenciales.

Cada nuevo requerimiento justificado encajaría en alguna lugar de alguna capa. Las implementaciones se trabajarían por capas, dejando fuera de una iteración aquellas implementaciones que correspondan a otra capa.

Unshare un folder en Windows 7

En Windows 7, se puede compartir un folder, o directorio, haciéndole clic derecho para entrar a Properties (Propiedades), Sharing (Compartiendo), Share... (Compartir...), luego indicando con quiénes desea hacer el sharing.

Sin embargo, no hay una forma clara de revertir eso. Tampoco hay un ícono que nos indique (como en los Windows anteriores) que cierto directorio está compartido.

Una forma de revisar los directorios compartidos es ejecutando el comando compmgmt.msc (Computer Management, Administración de la Computadora), o yendo al menú inicio, y haciendo clic derecho en Computer, Manage (Administrar).

Allí, elegir Shared Folders (Directorios Compartidos), Shares (Compartidos), seleccionar el directorio, clic derecho, Stop Sharing (Deterner Compartir).

Referencias:

2010/03/02

Presentando con Prezi

Prezi.com es un servicio que permite crear presentaciones muy originales de una manera muy original.

Más agil que la clásica serie de slides a la Powerpoint. Prezi permite usar libremente en una especie de papelógrafo infinito. Coloque sus anotaciones, imágenes, video, etc, en el tamaño y posición que desee. Luego defina una ruta de vuelo y listo. Prezi hará la ruta, subiendo, bajando y girando según la orientación del texto, produciendo un efecto muy, muy memorable.

El resultado reside online, se puede compartir en las redes sociales, como Facebook o Twitter, o incluirse en páginas web como esta. Además, también se puede descargar en un autoejecutable flash que puede llevar en su usb.

Prezi tiene planes pagados además del servicio gratuito.

Aquí un ejemplo que hice, usando un cuento, pero creo que notará la idea: