Dos Mundos

Abril 24, 2008

Hace aproximadamente 2 meses empecé una nueva aventura en mi vida que trae consigo nuevos retos y nuevas experiencias: empecé un doctorado en Informática. Esta nueva aventura significa a la vez un cambio en la dirección que llevaba en mi vida, pues es adentrarme en el mundo académico y dejar a un lado el mundo comercial y online al que estaba acostumbrado después de trabajar por casi un año en MobuzzTV. Y tomando en cuenta este corto tiempo que llevo de transición, quisiera dejar mis primeras impresiones sobre las diferencias y similitudes entre los dos mundos, ahora que por el momento no se me olvida lo aprendido en uno, y ya he aprendido otras en el segundo. Quisiera aclarar que lo que intento escribir aquí es totalmente una percepción personal, y que obviamente pueden haber diferentes opiniones, aunque al final de cuentas de eso se trata esto.

Haber trabajado en el desarrollo web de una empresa muy innovadora que necesita renovarse constantemente y mantenerse actualizada con las últimas tecnologías, me permitió observar de cerca ciertos modelos de negocio relativamente nuevos - entiéndase blogs, comunidades online, etc… - así como viejos negocios que se unen o evolucionan hacia el mercado en línea. En específico, me tocó trabajar en una empresa que compite en un mercado que aún no ha sido explotado, que no tiene una “fórmula” y que busca innovar utilizando nuevas tecnologías y nuevos métodos en todos los aspectos de la empresa. A través de esa empresa pude conocer personalmente a emprendedores que buscan a su vez entrar en mercados desiertos, creando nuevas ideas y creando nuevos paradigmas, todas siguiendo el de moda: “la Web 2.0″.

Por el otro lado, el mundo académico tiene su especial manera de mantenerse actualizado. Es este mundo el que se mantiene en constante investigación, en búsqueda de nuevas tecnologías, en creación de nuevos paradigmas, en hacer más eficiente lo que ya existe o en invalidar una percepción equivocada. En el mundo académico cada quien tiene su especialización, y va de mucho a poco: te puede gustar el tema de la seguridad en la informática, e irte especializando según te guste en temas más específicos como encriptación de datos, o incluso tomar un solo algoritmo de encriptación y especializarte en él… siempre y cuando, al final de tu investigación aportes algún conocimiento. A través de conferencias, libros, papers o artículos que distintos grupos de investigación especializados en un tema en específico alrededor del mundo publican y presentan como resultado de su trabajo, vas conociendo y teniendo un contacto directo con las nuevas tecnologías propuestas, logrando crearte un criterio sobre ellas e irte guiando con respecto al tema de investigación que te interesa.

Sin embargo cada una tiene sus contrapartes, y es importante mencionarlas pues al final de cuentas también las define. El mundo académico, en mi opinión, tiene varias desventajas que no se pueden pasar por alto. Primero, asume muchas cosas: un investigador que trata un tema que tiene relacionado otro que está fuera de su enfoque, simplemente asume que el otro funciona o que tiene cierto comportamiento esperado aunque se sepa que no es ése el caso. Por ejemplo (un caso ficticio, claro), se puede hablar de la eficiencia de algún protocolo de seguridad propuesto, que simplemente asume que las capas inferiores no sufrirán ningún ataque, y concluir que el protocolo resolverá todos los problemas que conciernen a la seguridad por tener una eficiencia del 99%.

Como segundo punto, y estrechamente relacionado con el primero, en resultados académicos generalmente no se toman en consideración aspectos económicos que pueden simplemente invalidar la propuesta. Debo aclarar que éste no es el caso típico y que en muchos grupos de investigación, la capacidad económica de realizar las propuestas es algo primordial, pero si que existen propuestas que sugieren realizar cambios de infraestructura o de proceso que simplemente no son factibles de realizar, o incluso pueden haber casos que sugieren tecnologías demasiado avanzadas que las herramientas actuales no pueden soportar. Estas propuestas no dejan de ser interesantes, y pueden crear un precedente para soluciones dentro de algunos años, pero por el momento no son funcionales ni prácticas, y hay quienes pueden pensar que se están desperdiciando recursos de investigación cuando podrían tener un enfoque más “real”.

Como tercer y último punto, algunas investigaciones pueden utilizar métodos estadísticos - como encuestas, entrevistas, etc… - para confirmar o validar su propuesta, pero que al igual que el primer punto, pueden asumir, esconder o incluso llegar a modificar la evaluación de ciertos aspectos para reafirmarse en su teoría. Todos estos aspectos llegan a poner un gran signo de interrogación sobre algunas propuestas - es importante y por lo tanto válido repetir, estos puntos se aplican sólo a algunas investigaciones, no quiero ni trato de decir que todas son así - ya que en el mundo “real”, estos aspectos tirarían a la basura algunos proyectos, invalidando las propuestas y obligando a tomar una opción distinta. Obviamente si llegas a una empresa ofreciendo un sistema de seguridad con eficiencia del 99% pero que implica cambiar toda la infraestructura de la empresa y que aún así no se hacen responsables por algún ataque en capas inferiores, no te lo van a aceptar.

Por otro lado, el mundo comercial también tiene sus contrapartes a mencionar que hasta cierto punto son lo opuesto a lo mencionado en el mundo académico. Para mí, uno de los aspectos más importantes es que obviamente las empresas generalmente van a buscar el método que sea más económico. El problema con esto, es que el más económico casi nunca será el más eficiente o el que mejores resultados obtenga, y aunque la opción ineficiente pero barata emule los resultados de la opción correcta, esto al final de cuentas puede traer resultados “inesperados” - lo pongo entre comillas, pues al final de cuentas sí que se deberían de esperar - y que se cumpla la frase de “lo barato sale caro”. Una empresa siempre buscará reducir gastos y aumentar las ganancias, y si para reducir gastos se toman medidas sobre proyectos, tecnologías e incluso empleados, esto tiene consecuencias directas sobre la eficiencia de la empresa en general. Como segundo aspecto, son muy pocos los casos de empresas que se atreven o se arriesgan a entrar en el mundo de una tecnología reciente, siguiendo la corriente o siguiendo una fórmula de otras empresas exitosas tratando de conseguir igual o mejores resultados, y de cierta manera - y probablemente sin intención alguna - ralentizando la adaptación y/o evolución de dicha tecnología en el mundo real. En este punto creo que también vale la pena aclarar que no todas las empresas actúan de la misma manera, y que sí existen empresas innovadoras que prefieren calidad o eficiencia funcional encima de eficiencia económica.

También cabe mencionar que los puntos mencionados en ambos mundos son aspectos negativos, pero que se mencionan con el simple objetivo de emitir una opinión y hacer una comparativa entre ambos, para tratar de cierta manera buscar un equilibrio entre ellos. Ésta no es una guerra, sino todo lo contrario, ambos mundos coexisten, se necesitan mutuamente y se retroalimentan: la investigación no podría existir si no tuviera al final un aporte práctico o una aplicación en el mundo real y económico; y el comercio y las empresas no tendrían el avance ni oportunidades en nuevos mercados sin la existencia de grupos de investigación que aportan y han aportado tecnologías usadas diariamente, aunque éstas no se vean.

Por mi parte me gustaría no olvidar lo aprendido y tratar de cierta manera de absorber lo mejor de ambos mundos, y tomando eso en cuenta tratar de trabajar en un proyecto que trate de encontrar, como ya lo he mencionado, un balance entre ambos, que al final de cuentas están relacionados, co-existen y son co-dependientes. Existen otras semejanzas interesantes y curiosas entre los dos mundos, como por ejemplo el paradigma de comunidad y de información creada, revisada y corregida por los mismos usuarios, y su análogo en lo académico, con correcciones hechas por otros investigadores, aportes inter-universitarios y retroalimentación entre grupos de investigación, pero ese es otro tema que quizás podría tocar más adelante en otro post, especialmente porque éste ya resultó demasiado largo.

Así que con esto me despido y cierro mi primer post publicado en sinctrl.com! saludos! :)

** Todas las imágenes aquí utilizadas son de una tira cómica que ahora me divierte pues tristemente la entiendo! La tira cómica es PhD Comics y bueno, es el crédito de ellos :) **

¿Qué son las Rewrite Rules?

Abril 14, 2008

Son un conjunto de reglas que se valen de expresiones regulares para poder reescribir solicitudes de direcciones URL “on the fly” y de forma transparente. Son parte del módulo de Apache mod_rewrite y soportan un número ilimitado de condiciones utilizando variables e inclusio los “headers” HTTP para cambios avanzados de las direcciones URL.

En palabras más claras nos permiten reescribir la dirección URL utilizando patrones fáciles de entender para los humanos y haciendolos fáciles de indexar y convertirlos a peticiones que nuestra programación pueda entender. Este módulo es comunmente utilizado para poder usar las denominadas “Clean URL’s” (URL limpias) para hacerlas más lógicas, un ejemplo sería cuando el usuario ve esta URL http://www.dominio.com/buscar/termino y el mod_rewrite se encarga de convertir esa URL en http://www.dominio.com/cgi-bin/buscar.cgi?term=termino.

De esta forma para el usuario es fácil recordar esa URL ya que mantiene una sintaxis más clara de entender. Esta no pretende ser una guía muy extensa del mod_rewrite, si quieres ampliar información puedes verla en la Wikipedia y el sitio de Apache, así como las directivas de configuración.

Algunos usos prácticos de las rewrite rules

  • Permitir que las direcciones URL sean más amigables al usuario y los buscadores.
  • Prevenir el “hot linking” o que usen tus imagenes en otros sitios.
  • Esconder las direcciones web reales de tu servidor a los usuarios.
  • Redirigir de forma transparente las peticiones web.

Es una herramienta muy potente, y nos da muchísimas posibilidades de juego a costa de un pequeño incremento en la carga de procesamiento en el servidor, por lo que no es aconsejable el uso excesivo de estas.

Para habilitarlas es aconsejable hacerlo desde la raíz del servidor web, creando un archivo .htaccess con las siguientes cabeceras

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Abajo de estas líneas ya pueden empezar a detallarse las reglas que necesitemos configurar.

Desde hace algún tiempo he estado utilizando estas herramientas y me han ayudado a mejorar mi sitio web, son muy fáciles de usar si tienes un mínimo conocimiento de expresiones regulares y de las cabeceras del Apache. Así que me gustaría explicar algunos problemas que me encontre y como los hemos resuelto usando las rewrite rules:

Rewrite rules para el uso de “Clean URL’s”

RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]

Esta regla lo que hace es buscar la palabra user seguida de una “/” desde el inicio de linea, es decir, el primer caracter despues del dominio, por ejemplo

http://www.dominio.com/user/edeleon

Si la encuentra reenvía la petición al servidor Apache de la siguiente forma

http://www.dominio.com/mt/mt-cp.cgi?username=edeleon

Y el servidor devuelve al usuario la página sin cambiar la URL en el navegador del usuario. Al usar el flag [L] le decimos al mod_rewrite que esa es la última regla evitando así que las siguientes reglas puedan cambiar el resultado de la petición.

Rewrite rules para el uso de “Clean URL’s” utilizando los “headers HTTP”

RewriteCond %{HTTP_REFERER} www [OR]
RewriteCond %{HTTP_REFERER} docs
RewriteCond %{REQUEST_URI} /user/(.*[^/])
RewriteRule ^user/(.*)$ /mt/mt-cp.cgi?username=$1 [L]

En esta ocasión utilizamos el RewriteCond para condicionar la regla de tal forma que preguntamos si la petición viene de un sitio que contenga www O docs en el dominio Y si la URL contiene /user/ seguida de cualquier caracter que utilice el patrón de RewriteRule para reescribir la petición. Ojo a la forma de utilizar [OR] para que el operador acepte una condicion u otra, y si no lo usamos usa el operador “and” por defecto.

Rewrite Rule para redirigir la petición a otra URL

RewriteRule ^categoria/(.*)$ /category/$1 [R]

Esta regla es útil cuando necesitamos redirigir al usuario a una nueva URL, al usar el “flag” [R] estamos diciendo al mod_rewrite que fuerze la redirección, cambiando la URL en la barra del navegador del usuario y pasando todo el texto despues de “/” como parámetro a la nueva URL.

otra forma de hacer un redirect de forma fácil sería

Redirect permanent /rss/comentarios.xml http://feeds.feedburner.com/my_feef_url

Este ejemplo es práctico si usamos por ejemplo a feedburner como proveedor de nuestros RSS, al usar la directiva Redirect hacemos una redirección del tipo permanente a la nueva URL. De manera que podemos seguir usando nuestras propias direcciones para que los usuarios se subscriban y de ser necesario cambiarlas en el futuro poder hacerlo de forma transparente para el usuario y asi evitar links rotos.

Otros usos de las rewrite rules podrían ser redirigir a los usuarios dependiendo del lenguaje del navegador a la versión específica de nuestro sitio web más adecuada. O verificar el tipo de navegador y si detectamos que es un móvil poder enviar al usuario a la versión móvil de nuestro sitio web. Las posibilidades son infitinas, y espero poder ir contando otras formas curiosas para usar las rewrite rules.