Redireccionar URL’s con apache

Julio 21st, 2008

El otro día me llegó un correo de Mauricio, un amigo y “cliente” al cual le desarrollé el sitio quimeratv.com y la razón del correo era que necesitaba algunas modificaciones con las direcciones del sitio.

Resulta que cuando sacamos la idea de quimeratv.com pensamos en que sería bueno tener accesibilidad como en otro sitios de redes sociales como myspace.com en donde uno puede tener su dirección tip: myspace.com/gustavo

Para poder tener  esa funcionalidad lo primero que se me ocurrió fue utilizar el archivo htaccess de apache. Apache cuenta con un archivo llamado htaccess donde se guarda la configuración del sitio web, en este es posible utilizar directivas o funciones que le dicen al servidor web hacer algo en especial, una de ellas es RewriteRule.

RewriteRule básicamente nos srive para “reescribir reglas” o mas bien para redireccionar peticiones de un URL a otro. Cuando decidimos meter direcciones “amigables” para los usuarios busqué un poco de documentación de apache y finalmente metí la siguiente condición en el archivo htaccess:

RewriteRule ^([^/]+)/?$ /index.php?option=com_comprofiler&task=userProfile&user=’$1′ [L]

Demonios, ¿Qué significa eso? Bueno que cualquier petición que llegase al servidor cumpliendo cualquier condición sería redireccionada a la página del componente de perfiles del sitio (un plugin de joomla) pasandole como parametro el usuario que concordara precisamente con ese texto es decir:

^([^/]+)/?$

[Mete en una variable cualquier texto ingresado despues del url, ejemplo www.quimeratv.com/gustavo siendo gustavo el término]

/index.php?option=com_comprofiler&task=userProfile&user=’$1′ [L]

[Indica la dirección a la cual será redireccionada nuestra petición y finalmente le pasa la variable que habíamos guardado ($1) como parámetro a dicha url en este caso gustavo ]

Esto indica que si alguien accede a:

http://www.quimeratv.com/gustavo

El sitio será redireccionado a:

http://www.quimeratv.com/index.php?option=com_comprofiler&task=userProfile&user=gustavo

La bronca es que en el correo que me envió Mauricio, una de las modificaciones que requería era que agregará algunas direcciones “friendly” para los enlaces, por ejemplo:

quimeratv.com/qfotos

Esta dirección debería redireccionar a la galería,  el problema fué que yo ya contaba con una regla que le decía a apache que cualquier cosa después de la diagonal era un “usuario” o el username… la solución fué la siguiente:

RewriteRule !^qfotos|qchat$ /index.php?option=com_comprofiler&task=userProfile&user=’$1′

Seguido de la regla que redireccionaría cualquiera de los terminos dentro de la regla anterior, es decir, en la regla anterior dice mas o menos así: “Cualquier cosa que no sea qfotos o qchat se redirecciona a index.php?option=com_comprofiler&task=userProfile&user= pasando como parametro ese término”

Cualquier término que no este dentro de esta regla de apache será direccionado a esa dirección. Ahora, debemos escribir un manejador para qfotos que es el url que NO QUEREMOS que tome la regla anterior:

RewriteRule ^qfotos$ /index.php?option=com_rsgallery2
RewriteRule ^qchat$ /index.php?option=com_wrapper&itemid=89

De ese modo cuando los usuarios entren a quimeratv.com/qfotos serán redireccionados a quimeratv.com/index.php?option=com_rsgallery2

Muy útil el archivo de apache. Les recuerdo que esto no lo pude encontrar en ningún lado pero lo que si leí es que el archivo de configuración de apache soporta expresiones regulares como las de perl por lo tanto es fácil aplicar estas reglas si ya conocen expresiones regulares en algún lenguaje de programación.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Google
  • Live
  • Technorati

Retomando la linea geek

Julio 10th, 2008

Resulta que tenemos un proyecto en la oficina que no tiene nada que ver con clientes. El proyecto es mas bien un intento para obvservar el comportamiento de los empleados tomando otros roles, por ejemplo, quienes se desempeñan aquí como líderes de proyecto pasaron a ser simples programadores y quienes solo programaban estarán encargados de la arquitectura y el análisis de la aplicación etc.

Angel, jefe de todos en Arkus, decidió que pondríamos tres horas de nuestro viernes y se las dedicariamos a este proyecto.  Antes saliamos a las 4 p.m. los viernes lo cual estaba excelente pero desgraciadamente nos movieron el horario y ahora salimos todos los días a las seis en ves de las 6:30 pero los viernes ya no salimos a las 4.

Total que, las tres horas después de la entrada de comida del viernes (a las 3 p.m.) tendremos que dedicarlas a este proyecto. Yo tuvé muchas ideas que tenían que ver con software organizacional pero al parecer no muchos me siguieron la onda. La mayoría opinaba que desarrollar un juego sería lo mas divertido pero después de ver que, 3 horas a la semana, es muy poco para un proyecto que es “técnicamente” complicado decidieron pensar de nuevo y todos votaron por un sitio tipo “red social”

Al final se llegó a la conclusión de que debíamos solucionar un problema con nuestro software y terminó siendo (o terminará, ya que no existe código aun)  una aplicación web para hacer pedidos de comida. Quizá en otro post lo explique mejor.

Después de decidir cual sería la aplicación se repartieron los puestos o cargos. Yo decidí no tomar la iniciativa ya que no sería un “reto” pues sabía que había algo que nadie iba a querer tomar. Todos estaban emocionados con la arquitectura, el análisis, el backend, el frontend… pero había algo que nadie (y que usualmente, nadie hace) quería hacer y que fue lo que “quedó” a lo último y lo que finalmente tomé: La documentación.

Me parece que documentar un proyecto es una de las actividades mas importantes para cualquier software que se jacte de decir que está “organizado” de algún modo. La documentación que tendré que desarrollar es la de usuario y la del desarrollador.

Para poder llevar la documentación y el código ordenados creí que sería buena idea llevar un software tipo wiki. También pensé que tendriamos que tener un software de bug tracking y al final parece que Trac es lo mas adecuado que existe ya que bugzilla me parece demasiado complejo y además no está integrado con nada. Aprovechando que tenía pretexto he adquirido un servidor en webfaction para poder hospedar la aplicación y el depósito de subversion ya que la idea es que este proyecto sea lanzado como Open Source.

Otra razón más por la cual decidí adquirir mi cuenta en webfaction es que desde que aprendí a programar con python nunca desarrollé nada en serio y hoy que ya vivo de esto me gustaría retomar el aprendizaje pero enfocado a algo mas útil. Por el momento estoy en el debate si debería empezar a aprender django o turbogears. En realidad aún no se por donde empezar pero creo que al menos tendré que retomar mis libros y actualizarme.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Google
  • Live
  • Technorati

Día cotidiano en la oficina

Julio 3rd, 2008

Estos días he tenido muy muerto el blog. Lo acepto. La verdad es que como sucede comunmente en mi vida, he tenido algo de trabajo, lo cual no significa que todo el día estoy trabajando simplemente el tiempo que tengo libre trato de no pasarlo frente a la computadora :)

Me han estado cambiando mucho de proyectos y la verdad no me agrada la idea pero al final es trabajo. Pasa que, invariablemente estos proyectos donde me han asignado tareas tienen fecha límite de entrega de “ayer” así que en teoría algunos estan ya retrasados. Sinceramente no me gusta trabajar así todo el tiempo ya que es molesto hacer las cosas apurado pero supongo es una racha, si no ya veremos a que me dedico después :)

Algo con lo que me he topado estos días precisamente es mi falta de experiencia con bases de datos. En general puedo considerar que tengo buena experiencia con desarrollo de software pero las bases de datos siguen siendo algo con lo que me sigo peleando día a día y es que como alguna vez comenté por aquí, yo tuve la fortuna o desgracia, depende el punto de vista, de comenzar a desarrollar software utilizando un ORM y hoy que tengo que usar día a día SQL y todo lo que ello conlleva (al menos de la parte de Microsoft) he tenido que pensar seriamente en tomar algún curso. De hecho ya tengo bastantes videos que baje del sitio de ASP.Net es solo que me he vuelto un poco perezoso para leer manuales y documentacion o ver videotutoriales pero creo que esta misma tarde comienzo.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Google
  • Live
  • Technorati

Existe vida después de Crystal Reports…

Junio 29th, 2008

Ya alguna vez Emilio mi ex jefe y master de programación me comentó que usar Crystal Reports era como meterte al castillo de Vlad el Empalador sin previo permiso defendiendo a los Sajones.

Estos últimos días tuve la “suerte” de tomar un proyecto en la oficina que había que entregar pronto. Uno de los requerimientos del proyecto era imprimir una factura la cual se diseña con un reporte. La “tecnología” de reportes utilizada es la que viene por default con Visual Studio 2005: Crystal Reports.

La sensación de desolación que me dejó utilizar crystal reports es incomparable con cualquier otro tipo de dolor. De entrada quise utilizar dos DataTable’s que tenía definidos en un DataSet, de ahí, uno de estos datatables contenía la información general de la factura y por otra parte el otro datatable contenía los detalles o conceptos de la factura, o sea los datos que se “repiten” en la factura. Después de intentar me dí por vencido hasta que Alfredo, compañero de trabajo y mi jefe anterior de proyecto me dijo que lo mejor para mi tranquilidad mental era meter como parámetros los datos generales y solamente meter un datatable para los detalles. Sí, de algún modo crystal reports no soportó manejar dos tablas para generar el reporte, solamente una, algún error de autentificación me marcó que ya no recuerdo.

Ayer pasé la tarde y la noche diseñando la factura y fué una experiencia terrible, las herramientas de diseño que tiene crystal reports son bastante inestables y de hecho muy, pero muy limitadas. Después de pasar preciadas 6 a 8 horas de mi sabado de descanso en esta tarea (y arreglando algunos otros bugs) me quedé a ver TV un rato y me fuí a dormir ya que Yari se había ido a Rosarito con sus amigos y todos los demás conocidos que viven aquí se habían ido a San Luis.

Hoy recordé que tenía un pendiente con el proyecto y mañana debo ir a instalarlo con el cliente así que decidí solucionarlo hoy domingo. Sorpresa que, al abrir Visual Studio e intentar cerrar las pestañas de los archivos aspx que habían quedado abiertas al abrir la solución, este se colgaba.

No me había pasado esto de hecho hasta que comencé a utilizar Crystal Reports, la solución fue cerrar unicamente la pestaña del reporte y acto seguido cerrar visual studio, posteriormente lo volví a abrir y el problema desapareció. Parece ser que el problema es que crystal reports carga algún control ActiveX no soportado por Windows Vista lo cual crea incompatibilidad e inestabilidad.

Uno de los bugs que me causó mas problemas fue que, al agregar un objeto tipo “CrystalReportSource” a la página aspx y dirijirme a seleccionar el reporte este se negaba a mostrarme la vista previa y por lo tanto el reporte no se visualizaba. Resulta que al seleccionar el archivo de reporte me aparecía la siguiente ventana:

 

Después de varios intentos y de estar seguro que el reporte que estaba seleccionando era el correcto decidí eliminarlo y crear uno nuevo. Después, también gracias a la ayuda de Alfredo, pude solucionarlo, me dijo con una tranquilidad de monje tibetano: “No, así no va a funcionar, quitale el path y deja solamente el nombre del archivo” y es que sucede que, crystal (o visual studio) tiene un bug que hace que no tome el path correctamente del archivo, es decir, el archivo aspx que contiene el código que utilizará este reporte estaba mas o menos así:

/Invoice/getInvoice.aspx

Y el reporte:

/Invoice/Invoice.rpt

Por lo cual dí por hecho que lo que me estaba mostrando el combobox era correcto, para solucionar el problema debía eliminar la carpeta “/Invoice” de la ruta del repore aun sabiendo que efectivamente ahí estaba el reporte:

Sé, y entiendo perfectamente que todos los desarrolladores de software nos equivocamos, nadie es perfecto, pero, por Dios, ¿Cómo algo tan importante paso las pruebas de calidad? Supongo que nadie en el grupo de desarrollo de Visual Studio utiliza Crystal Reports, de hecho, hablando con varios compañeros de la oficina me dí cuenta que efectivamente ahí nadie utilizaba crystal reports, preferian hacerlo “a mano” generando páginas con código html.

¿Alguién tiene alguna buena historia con este producto? Por que creo que de lo contrario de hoy en adelante trataré de mantenerme al margen del mismo ya que la primera impresión fué mala y en esto como en las relaciones amorosas, eso es lo mas importante.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Google
  • Live
  • Technorati

It’s my birthday, bitches

Junio 19th, 2008

Así es, hoy cumpli 23 añotes, ¿Qué se siente? Bueno, nada en particular, solo estoy agradecido de estar donde estoy actualmente.

La actividad del día no fué muy activa, valgame la rebusnancia, mañanitas por la mañana de Yari y varias llamadas al celular que por cierto apagué en el día por que pues, estaba en el trabajo. A todos los que me felicitaron o me dieron un regalo, pues muchas gracias.

Recibí lo de siempre: abrazos, felicitaciones, ropa y si, como cada cumpleaños Yari me regaló un CD, bueno esta vez es un combo, un CD y un DVD de música y comfort para volar (el unplugged de Soda), excelente!!

Mañana hay peda en el “pockets”, nunca he ido, solo se que es un billar de aquí de Tijuana y es que varios compañeros de trabajo se graduan de la escuela y otros cumplen años (incluyendome) asi que mañana quizá haya mas actividad social. Por el momento solamente hubo una cena “de pareja” con Yari, comida Italiana :)

Como “plus” hoy se lanzó la versión final de OpenSuSE 11, ya tenía instalada la versión 11 en RC1 (Release Candidate) así que supongo que el fin de semana podré actualizar. Estos días he andado con mucha chamba en la oficina así que lo de las actualizaciones linuxeras tendrá que esperar.

Salu2.

Compartir: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • del.icio.us
  • Google
  • Live
  • Technorati