Infraestructura TécnicaLos proyectos de software libre dependen en la tecnología
que aportan la captura selectiva e integral de información.
Mientras mejor se sea usando estas tecnologías y persuadiendo a otros
para utilizarlas, mayor será el éxito del proyecto. Esto se vuelve más
cierto mientras el proyecto crece. Un buen manejo de la información es
lo que previene a un proyecto open source de colapsar bajo el peso
de la Ley de Brook,De su libroEl mes mítico
del hombre, 1975. Más en y en
.
la cual afirma que asignar fuerza de trabajo adicional a un proyecto
retrasado lo demorará aún más. Fred Brooks observó que la complejidad
de un proyecto se incrementa alcuadradodel
número de participantes. Cuando solo unas pocas personas están
involucradas, todos pueden hablar entre todos fácilmente, pero cuando
cientos de personas están involucradas, ya no es posible que cada uno
de los individuos se mantengan constantemente al tanto de lo que todos
los demás están haciendo. Si dirigir bien un proyecto de software libre
se trata de hacer que todos se sientan como si estuviesen trabajando
juntos en la misma habitación, es obvio preguntar: ¿Qué sucedería si
todas las personas en una habitación atestada de gente hablase a la vez?
Este problema no es nuevo. En una habitación no metafórica
atestada, la solución es un procedimiento parlamentario
: guías formales acerca de como tener discusiones en tiempo
real en grupos grandes, como asegurarse de que las disensiones más
importantes no se pierdan entre comentarios irrelevantes, como formar
subcomites, como reconocer cuando se toman decisiones, etc. Las partes
más importantes en un procedimiento parlamentario especifican como
deben interactuar los grupos con su sistema de manejo de información.
Algunos comentarios se hacen para el registro, otros no. El registro
mismo es sujeto a manipulación directa y se entiende que no es una
transcripción literal de lo que ha ocurrido, sino que es una
representación a lo que el grupo está dispuesto a acordar
sobre lo sucedido. El registro no es monolítico, sino
que toma diferentes formas para diferentes propósitos. Comprende los
minutos de encuentros individuales, una colección completa de todos
los minutos de todos los encuentros, sumarios, agendas y sus
anotaciones, reportes de comités, reportes de corresponsales no
presentes, listas de acción, etc.Dado que Internet no es realmente una habitación, no debemos
preocuparnos acerca de replicar aquellas partes de los procesos
parlamentarios que mantiene a algunas personas calladas mientras
las demás hablan. Pero cuando nos referimos a técnicas de manejo de
la información, proyectos open source bien dirigidos son como
procesos parlamentarios en esteroides. Ya que todas las comunicaciones
en los proyectos open source suceden por escrito, sistemas muy
elaborados han evolucionado para enrutar y etiquetar apropiadamente
los datos, para minimizar las repeticiones de forma que se eviten
divergencias espuriosas, para almacenar y buscar los datos, para
corregir información incorrecta u obsoleta y para
asociar bits dispares de información con cada uno mientras que nuevas
conexiones son observadas. Los participantes activos en los proyectos
open source integran muchas de estas técnicas y a menudo realizaran
complejas labores manuales para asegurar que la información sea dirigida
correctamente. Pero todo el esfuerzo depende al final de un sofisticado
soporte informático. Tanto que sea posible, los mismos medios
de comunicación deben realizar éste enrutamiento, etiquetado y
registro y debería mantener la información al alcance de los humanos
de la manera más conveniente posible. En la práctica, por supuesto,
los humanos siguen necesitando intervenir en muchos puntos durante
el proceso y también es importante que estos programas hagan ésta intervención
lo más conveniente. Pero por lo general, si los humanos se encargan de
etiquetar y enrutar información acertadamente desde su primera entrada
en el sistema, entonces el software debería estar configurado para dar
el máximo uso posible a esa metadata.El consejo de éste capítulo es intensamente práctico, basado en
las experiencias con aplicaciones y patrones específicos. Pero el objetivo
no es sólo enseñar una colección particular de técnicas. Es también
demostrar, utilizando pequeños ejemplos, la actitud general que mejor
fomentará el correcto uso de los sistemas de manejo de información
en el proyecto. Esta actitud incluye una combinación de habilidades
técnicas y don de gentes. Las habilidades técnicas son esenciales
porque las aplicaciones de manejo de información siempre requieren
cierta configuración y además una cierta cantidad de mantenimiento
y puesta apunto mientras nuevas necesidades vayan surgiendo (por ejemplo,
mirad la discusión de como manejar el crecimiento del proyecto en
más adelante
en éste capítulo). El don de gentes es necesario porque la
comunidad humana también requiere de cierto mantenimiento: no siempre
es inmediatamente obvio como utilizar estas herramientas para obtener
una ventaja completa y en algunos casos los proyectos tienen convenciones
conflictivas (por ejemplo, la discusión de como crear cabeceras
Reply-to en los mensajes salientes de las
lista de correos, en ).
Todos los involucrados en el proyecto van a necesitar ser animados,
en el momento correcto de la forma correcta, para que sigan manteniendo
la información del proyecto bien organizada. Mientras más involucrado
esté el contribuyente, más complejas y especializadas serán las técnicas
que se esperará que aprendan.El manejo de información no tiene soluciones rápidas ya que existen
demasiadas variables. Pueden que finalmente se tenga todo configurado
justo como se desea y tener a la mayoría de la comunidad participando
pero luego el crecimiento del proyecto hace de estas practicas no escalables.
El puede que el crecimiento del proyecto se estabilice y que la comunidad
de usuarios y desarrolladores acuerden una relación confortable con
la infraestructura técnica pero llega alguien e inventa un nuevo servicio
de manejo de información completo y pronto muchos de los recién llegados
empezarán a preguntar que por qué no es utilizado en el proyecto—
por ejemplo, esto está sucediendo mucho últimamente en proyectos de software
libre que son anteriores a la invención del Wiki (más en
). Muchas cuestiones son
materia de juicio, incluyendo las desventajas entre la conveniencia de
aquellos generando información y la conveniencia de aquellos quienes la
consumen o entre el tiempo requerido para configurar el software de
manejo de la información y los beneficios que le brinda al proyecto.Cuidado con la tentación de automatizar demasiado, esto es,
automatizar cosas que realmente requieren de atención por parte de los
humanos. La infraestructura técnica es importante, pero lo que hace que
los proyectos de software libre funcionar es el cuidado—y la
expresión inteligente de éste cuidado—de los humanos involucrados.
Principalmente, la infraestructura técnica está para ofrecer medios
convenientes para hacer esto.Lo que necesita un proyectoLa mayoría de los proyectos open source ofrecen al menos un mínimo
y estándar conjunto de herramientas para manejar información:Sitio Web
Principalmente, conducto de información centralizado
en un sentido del proyecto para el público. El sitio
web puede también servir como una interfaz para
otras herramientas del proyecto.Listas de Correo
Usualmente es el foro de comunicación más activo
del proyecto y el "medio de registro."Control de Versiones
Permite a los desarrolladores realizar cambios al código
convenientemente, incluso retroceder y exportar cambios.
Le permite a todos mirar lo que está sucediendo con el
código.Gestión de fallos
Permite a los desarrolladores mantener un registro de en qué
están trabajando, coordinandose entre ellos y planear
lanzamientos. Permite que todo el mundo pueda realizar
búsquedas acerca del estado de los fallos y registrar
información (p.e. recetas reproducibles) acerca de fallos
en particular. Puede ser utilizado para seguir no solo
fallos, sino también lanzamientos, tareas,
nuevas características,etc.Chat en tiempo real
Un sitio para discusiones rápidas, sencillas e
intercambios de preguntas/respuestas. No siempre
se archiva completamente.Cada una de estas herramientas está dirigida a distintas necesidades,
pero sus funciones están también interrelacionadas y se debe hacer que
estas herramientas trabajen en conjunto. Más abajo examinaremos como podemos
lograr esto y más importante aun como hacer que las personas se acostumbren
a usarlas. El sitio web no se discute hasta el final, ya que actúa más como
un pegamento para otros componentes que como una herramienta en sí.Se pueden evitar muchos dolores de cabeza por escoger y configurar
estas herramientas si en su lugar utilizamos un hosting enlatado
: un servicio que ofrece todas las herramientas necesarias
para un proyecto open source ya listas para su uso gracias a plantillas y
empaquetado. Más en
a continuación en éste mismo capítulo para una discusión más
profunda acerca de ventajas y desventajas de estas soluciones.Listas de correoLas listas de correo son el pan y la mantequilla de las comunicaciones
del proyecto. Si algún usuario es expuesto a algún foro aparte de las
paginas web, probablemente sea la lista de correos del proyecto. Pero
antes de trabajar con las listas en si mismas, deben tomar experiencia
con la interfaz—esto es, el mecanismo por el cual se pueden
unir ("suscribirse a") a la lista. Esto nos brinda la regla número
uno de las listas de correo:
No intentes dirigir las listas de correo a mano—consigue
un software de manejo de listas.
Será tentador dejar esto de lado. Configurar un software
para listas de correo puede parecer demasiado difícil al principio.
Manejar listas pequeñas de bajo tráfico a mano puede parecer
seductor al principio: sólo hay que montar una lista de suscripción
que te reenvía todo y cuando alguien envía un mensaje, se agrega (o
elimina) su dirección de correo en algún tipo de fichero de texto
que almacena todas las direcciones de la lista. ¿Qué podría ser
más sencillo?El truco está en hacer un buen manejo de las listas
de correo—lo cual no es lo que la gente espera—
no es nada sencillo. No es solo sobre suscribir y de suscribir
usuarios cuando lo solicitan. También es sobre moderar para prevenir
SPAM, ofrecer la lista resumida en lugar de mensaje por mensaje,
proporcionar una lista estándar e información del proyecto a través
de auto respuestas y muchas otras cosas. Un ser humano monitorizando
las direcciones de suscripción es solo una pequeña parte del mínimo
de funcionalidad e incluso así, no es la forma más segura y puntual
que un software podría ofrecer.Un software para el manejo de listas de correo usualmente
ofrece las siguientes características:Suscripción a través de correos o basada en web
Cuando un usuario se suscribe a la lista, debería
recibir una respuesta de bienvenida sin demora,
explicándole como seguir interactuando con el software
y (más importante) con eliminar la suscripción.
Esta respuesta automática puede ser modificada para
contener información específica del proyecto, por
supuesto, como el sitio web, localización del FAQ,
etc.
Suscripción al modo de resúmenes o al modo
de mensaje por mensaje
En modo resumen, el suscriptor recibe un correo conteniendo
toda la actividad de la lista en ese día. Para aquellos
quienes desean seguir la lista indirectamente, sin participar,
el modo resumen es a menudo el preferible, porque les permite
revisar todos los temas a la vez y evitar las distracciones
de los correos que llegan en momentos al azar.Características para la moderación
Moderar es revisar los mensajes para asegurar que: a) no
es SPAM y b) en tema, antes de que lleguen a la lista.
La moderación incluye necesariamente a seres humanos, pero el
software puede hacer mucho para hacerlo más sencillo. Se discute
más acerca de la moderación luego.Interfaz Administrativa
Entre otras cosas, le permite a un administrador eliminar
direcciones obsoletas fácilmente. Esto puede hacerse urgentemente
cuando la dirección del receptor empieza a enviar respuestas
automáticas del tipo "Ya no tengo ésta dirección de correo"
a la lista en respuesta a cada mensaje. (Algunas aplicaciones
para listas de correo pueden incluso detectar esto por si
mismas y eliminar la suscripción de ésta persona automáticamente.)
Manipulación de las cabeceras
Muchas personas tienen sofisticados filtros y reglas de respuestas
configuradas en sus clientes de correo. Las aplicaciones de
listas de correo pueden añadir y manipular ciertas cabeceras
estándar de las que estas personas se puedan beneficiar (más
detalles a continuación).Archivo
Todos los mensajes enviados a las listas son almacenados
y hechos públicos en la web. Alternativamente, algunas
aplicaciones de software para listas de correo ofrecen
interfaces especiales para conectar alguna herramienta
externa de archivo como MHonArc
(). Al igual
en se discute
que el archivo es crucial.El objetivo de todo esto es sencillamente enfátizar que la
administración de las listas de correo es un problema complejo sobre
el cual se ha pensado mucho y que está casi resuelto. Ciertamente
no es necesario convertirse en un experto, pero hay que reseñar que
siempre hay lugar para el aprendizaje y que la administración de las
listas ocupara algo de atención de vez en cuando durante la duración
del proyecto. A continuación examinaremos algunos de los problemas
más comunes que podemos encontrar al configurar las listas de correo.
Prevenir el SpamEntre el momento cuando ésta frase es escrita y cuando es
publicada, el problema a lo largo y ancho de Internet el problema
del Spam probablemente sea el doble de severo—o al menos
parecerá que es así. Hubo una época, no mucho tiempo atrás, cuando
se podía administrar una lista de correos sin la necesidad de tomar
medidas para prevenir el Spam. Algún mensaje extraviado ocasional
aparecía pero con tan poca frecuencia que solo era una molestia
de bajo nivel. Esa época ya es historia. Hoy, las listas de correo
que no toman medidas preventivas en contra del Spam se verá
sumergida rápidamente en correo basura hasta el punto de ser inútil.
Prevenir el Spam es una prioridad.La prevención de Spam se divide en dos categorías: prevenir
que mensajes basura aparezcan en la lista y prevenir que la lista
sea utilizada como fuente de nuevas direcciones de correo para los
spammers. La primera es la más importante, así que la examinaremos
primero.Filtrado de los mensajesExisten tres técnicas básicas para prevenir mensajes basura y
muchas aplicaciones para listas ofrecen las tres. Lo mejor es utilizarlas
en tandem:Sólo permitir automáticamente
mensajes de los suscriptores a la lista.
Esto es efectivo hasta cierto punto y necesita
de poca administración ya que usualmente es sólo
cuestión de cambiar algunos puntos en la configuración
de la aplicación de listas. Hay que apuntar que
aquellos mensajes que no son aprobados automáticamente
no deben ser desechados. En su lugar, deben ser
moderados por dos razones. Primero, se deben permitir
mensajes de quienes no están suscritos. Alguna
persona con una pregunta o sugerencia no debería
tener que suscribirse a la lista para enviar un solo
mensaje. Segundo, incluso quienes están suscritos
envían mensajes desde cuentas diferentes de la que
han utilizado para suscribirse. Las direcciones de
correo electrónico no son un método eficaz para
identificar a las personas y no debe ser utilizado
para esto.Filtrar los mensajes utilizando
un programa de filtro de spam.Si la aplicación de listas de correo lo permite (la mayoría
lo hace) se pueden filtrar los mensajes utilizando un filtro
anti-spam. El filtrado automático de Spam no es perfecto, y
nunca lo será, ya que existe un pulso sin fin entre los
spammers y los escritores de filtros. A pesar de esto, se puede
reducir enormemente la cantidad de Spam que llega a la cola
de moderación y dado que mientras más larga sea ésta cola, se
necesitaran más tiempo examinándola, así que cualquier filtrado
automático es beneficioso.No hay lugar suficiente para unas instrucciones detalladas
sobre como configurar filtros de Spam. Habrá que consultar la
documentación de la aplicación de listas de correo para esto
(en
más adelante en éste capítulo). Las aplicaciones para
listas vienen con características para la prevención de Spam,
pero quizás sería una buena idea añadir una solución de un
tercero. He tenido buenas experiencias con estas dos:
SpamAssassin ()
y SpamProbe ().
Esto no es una crítica contra otros filtros anti spam open
source que al parecer son muy buenos también. Sucede que sólo
he tenido la oportunidad de utilizar estos dos y estar
satisfecho con ellos.Moderación.Para aquellos correos que no son automáticamente
aceptados por su virtud de ser enviados por un suscriptor
a la lista y que pasan a través del filtro anti-spam, si es
que lo hay, la ultima fase es la moderación:
el correo es enrutado a una dirección especial, donde alguien
lo examina y lo confirma o rechaza.Confirmar un mensaje se puede hacer de dos formas:
se puede aceptar el mensaje sólo una vez o se le puede indicar
a la aplicación que acepte éste y todos los mensajes futuros
de éste remitente. Casi siempre deseamos hacer lo último
de manera que podamos reducir la carga futura en la moderación.
Los detalles sobre como confirmar esto, varían entre sistemas
pero usualmente es una cuestión de responder a una dirección en
especial con el comando "aceptar" (lo que significa que sólo
se aceptará éste mensaje) o "permitir" (permitir éste y todos
los mensajes futuros).
Rechazar un mensaje se hace simplemente ignorando
el correo de moderación. Si la aplicación nunca
recibe confirmación de que algo es un mensaje valido
entonces no pasará a la lista, así que con solo
ignorar el correo de moderación creará el efecto deseado.
En algunos casos, existe la opción de responder con los
comandos "rechazar" o "denegar" para que automáticamente
se desaprueben los mensajes del remitente sin siquiera
pasarlos por la moderación. Raramente existe una razón
para hacer esto ya que la moderación es por lo general
para prevenir el spam y los spammers no suelen utilizar
una misma dirección dos veces.Hay que asegurarse de que la moderación sólo
se utiliza para filtrar el spam y mensajes fuera de contexto, como
cuando alguien envía un correo a la lista equivocada. El sistema de
moderación por lo general ofrece una manera de responder directamente
al remitente pero es mejor no utilizarlo para responder a preguntas
que realmente pertenecen a la lista, incluso si se sabe la respuesta
inmediatamente. De hacer esto, se privaria a la comunidad del proyecto
de una visión exacta de que tipo de preguntas la gente hace y privarlos
de la oportunidad de responder ellos mismos a preguntas y/o ver las
respuestas de otros. La moderación de las listas debe ser estrictamente
para mantenerlas libres de basura y de correos fuera de contexto,
nada más.Ocultar las direcciones en los archivosPara prevenir que los spammers utilicen las listas de correo
como una fuente de direcciones, una técnica muy común es la de ocultar
las direcciones de correo de la gente en el registro, reemplazándolas
como por ejemplo:
jrandom@somedomain.com
por
jrandom_AT_somedomain.com
o
jrandomNOSPAM@somedomain.com
o algo similar igual de obvio (para un humano). Ya que los
recolectores de direcciones por lo general funcionan reptando por
paginas web—incluyendo el archivo de nuestra lista de correo—
y buscando secuencias conteniendo "@", modificar las direcciones
es una forma para que sean invisibles o inútiles para los spammers.
Esto no hace nada para prevenir que se envié spam desde la lista,
por supuesto, pero si evita que se incremente la cantidad de spam
enviado directamente a las cuentas personales de los usuarios de
la lista.Ocultar las direcciones puede ser algo controversial. A algunas
personas les puede gustar mucho y se sorprenderán si el registro no lo
hace automáticamente. Otras pueden pensar que es demasiado inconveniente
(porque los humanos también tenemos que traducir las direcciones antes
de utilizarlas). Algunas veces las personas afirman que es inefectivo,
porque los recolectores en teoría pueden compensar cualquier patrón
de modificación consistente. No obstante, hay que señalar que existe
evidencia empírica de que ocultar las direcciones es
efectivo, como se puede ver en .Lo ideal sería que la aplicación administrativa de la lista
diese la posibilidad de escoger a cada individuo, utilizando una cabecera si/no
especial o configurándolo en las preferencias de la cuenta del
suscriptor. Sin embargo, no conozco ninguna aplicación que permita hacer
esto para cada suscriptor o para cada mensaje, así que por ahora el
administrador de la lista debe tomar la decisión en nombre de todos
(asumiendo que el archivador ofrece ésta característica, lo cual no
es siempre así). Yo me inclino ligeramente hacia ocultar las direcciones.
Algunas personas son muy cuidadosas para evitar enviar sus
direcciones de correo electrónico en paginas web o en cualquier lugar
donde un recolector de spam pueda verla, y podrían ser decepcionante
que todo ese cuidado sea perdido gracias al registro de la lista de correo.
Mientras tanto, la inconveniencia al ocultar las direcciones que impone en
los usuarios del registro es muy pequeña, dada la trivialidad de transformar
las direcciones al formato correcto si se necesita contactar con esa
persona. Pero hay que seguir pensando en que, al final, sigue siendo
una lucha sin fin: para cuando haya leído esto, los recolectores
podrían haber evolucionado hasta el punto de reconocer la mayoría
de formas comúnmente utilizadas para ocultar y tendremos que pensar
en algo más.Identificación y Administración de cabecerasPor lo general, los suscriptores de las listas mueven estos
correos a una carpeta específica para el proyecto, separados de su
otro correo personal. Sus clientes de correo hacen esto automáticamente
al examinar las cabeceras de los mensajes.
La cabecera son los campos que se encuentran en la parte superior de los
correos, los cuales indican el remitente, destinatario, asunto, fecha
e información variada sobre el mensaje. Cabeceras certeras son bien
conocidas y obligatorias:
From: ...
To: ...
Subject: ...
Date: ...
Otras son opcionales, aunque de cierta manera estándar. Por ejemplo,
no es estrictamente requerido que un correo electrónico tenga la cabecera
Reply-to: sender@email.address.here
pero muchas lo tienen, porque da al destinatario una manera a prueba
de errores de responder al remitente (es especialmente útil cuando el
remitente ha tenido que enviar un correo desde una dirección diferente
a la cual las respuestas deben ser dirigídas).Algunos clientes de correo ofrecen una interfaz fácil de usar para
rellenar correos basados en patrones en la cabecera Asunto. Esto lleva
a que la gente pida que la lista de correo añada automáticamente un prefijo
a todos los Asuntos, de forma que puedan configurar sus clientes para que
busquen esos prefijos y archivar los correos en el directorio correcto.
La idea es que el autor original escribiría:
Asunto: Trabajando en la versión 2.5
pero el correo aparecería en la lista así:
Asunto: [discuss@lists.example.org] Trabajando en la versión 2.5
Aunque la mayoría de las aplicaciones de administración de listas
ofrecen la opción de hacer esto, yo recomiendo no utilizarla. El problema
que resuelve puede ser resuelto de otras formas menos intrusas y los
costes de utilizar espacio en el campo del Asunto son demasiado grandes.
Los usuarios experimentados de las listas de correos revisan el asunto
de los correos entrantes del día para decidir acerca de qué van a leer
y qué van a responder. Fijar el nombre de la lista al Asunto puede
mover hacia la derecha el verdadero Asunto y fuera de la pantalla,
haciéndolo invisible. Esto oculta información necesaria para aquellos
quienes dependen en la decisión de cuales correos van a abrir, reduciendo
la funcionalidad conjunta de la lista para todos.En lugar de sobrecargar el Asunto, hay que enseñar a los usuarios
para que saquen ventajas de otras cabeceras estándar, empezando con el
campo "Para", el cual debería contener el nombre de la lista de correos:
To: <discuss@lists.example.org>
Cualquier cliente de correo capaz de filtrar los mensajes basándose en
el Asunto debe ser capaz de filtrar utilizando el campo Para facilmente.Existen otras cabeceras opcionales pero estándar para las listas
de correo. Filtrar utilizándolos es incluso más fiable que utilizar
las cabeceras "Para" o "Cc" dado que estas cabeceras son añadidas
a todos los mensajes por el programa de administración de la lista, así
que algunos usuarios están contando con su presencia:
list-help: <mailto:discuss-help@lists.example.org>
list-unsubscribe: <mailto:discuss-unsubscribe@lists.example.org>
list-post: <mailto:discuss@lists.example.org>
Delivered-To: mailing list discuss@lists.example.org
Mailing-List: contact discuss-help@lists.example.org; run by ezmlm
La mayoría se explican en si mismos. En se explican
mejor o en para
una especificación formal más detallada.Hay que señalar como estas cabeceras implican que si se tiene
una lista de correos llamada "list" entonces se tienen también unas
direcciones administrativas "list-help" y "list-unsubscribe". Además
de estas, es normal tener "list-subscribe" para unirse y "list-owner"
para contactar con el administrador de la lista. Dependiendo en la
aplicación administrativa que se use, estas y/o otras direcciones
administrativas varias pueden ser configuradas; la documentación
debería detallar esto. A menudo una explicación completa de todas
estas direcciones especiales es enviada a cada nuevo suscriptor
como parte de un mensaje de bienvenida automático. Probablemente
usted mismo reciba una copia de esto correo de bienvenida. Si no lo
ha recibido, pida una copia a alguien, de manera que pueda saber
qué están recibiendo los nuevos suscriptores. Mantenga la copia
a mano de manera que pueda responder preguntas acerca del funcionamiento
de la lista, o mejor aun, ponerlo en una página web en alguna
parte. Así, cuando alguien pierda su copia de las instrucciones
y pregunte cómo pueden eliminarse de la lista, se les facilita
la URL.Algunas aplicaciones para listas de correos ofrecen la opción
de agregar al final de cada mensaje las instrucciones para
eliminar la suscripción. Si ésta opción está disponible, usela.
Solo causa algunas lineas extra por mensaje en un sitio inofensivo
y puede ahorrar mucho tiempo al reducir el número de gente que escriba
—o peor aún, que escriban a la lista—preguntando cómo
eliminar la suscripción.El gran debate del Reply-ToAntes en hice incapie
en la importancia de asegurar que las discusiones se mantengan en foros
públicos y hable acerca de porque a veces tomar medidas activas es necesario
para prevenir que algunas conversaciones deriven a hilos privados. Este capítulo
es acerca de todo lo relacionado con preparar el software de comunicación
del proyecto para que realice la mayor cantidad de trabajo posible. Así que,
si la aplicación para la administración de las listas de correo ofrece una
manera automática de encausar las discusiones a la lista, habría que
pensar que habilitarla es la opción correcta.Bueno, quizás no. Existe tal característica, pero tiene algunas
desventajas muy importantes. Usarla o no es uno de los debates más
calientes en la administración de las listas de correo—admitamoslo,
no es una controversia que vaya a aparecer en las noticias, pero se puede
iniciar de vez en cuando en los proyectos de software libre. A continuación,
voy a describir esta característica, proponer los argumentos de cada
posición y hacer la mejor recomendación que puedo.Esta característica en si misma es muy sencilla: la aplicación
para las listas puede, si lo deseamos, automáticamente establecer
la cabecera Reply-To en todos los mensajes para dirigir todas las
respuestas a la lista. Así que, sin importar lo que escriba el
remitente en este campo (o si ni siquiera lo establecen) para
cuando los suscriptores a la lista vean el mensaje, éste contendrá
la dirección de la lista en la cabecera:
Reply-to: discuss@lists.example.org
Esto puede parecer algo bueno, porque virtualmente todos
los clientes de correo prestan atención a esta cabecera y ahora
cada vez que alguien responda a algún mensaje, su respuesta
será automáticamente dirigida a la lista, no sólo a quien ha
enviado el mensaje que se responde. Por supuesto que el remitente
puede manualmente modificar esto, pero lo importante es que
por defecto las respuestas son enviadas a
la lista. Este es un ejemplo perfecto de como utilizar la tecnología
para animar la colaboración.Desafortunadamente, existen algunas desventajas. La primera es
conocida como el problema No puedo llegar a casa:
a veces, el remitente original establece su dirección de correo
real en el campo Reply-To porque por alguna razón u otra envían
correos utilizando una dirección diferente a la que utilizan
para recibirlos. Las personas que envían y reciben correos desde el
mismo sitio no tienen éste problema y quizás se sorprendan de que
siquiera existe. Pero para quienes utilizan configuraciones de correo
inusuales o quienes no pueden controlar como se forma el campo
From de su dirección de correo electrónico (quizás porque envían
correos desde sus trabajos y no tienen ninguna influencia sobre
el departamento de sistemas) el utilizar el campo Reply-To quizás
sea la única manera que tienen para asegurarse de que las respuestas
a sus mensajes les llegan (encuentran el camino a casa). Así que si
la aplicación de las listas sobre escribe esto, esta persona
puede que nunca vea las respuestas a sus mensajes.La segunda desventaja se refiere a las expectativas y en mi
opinión, el argumento más fuerte en contra del cambio del Reply-To.
La mayoría de los usuarios experimentados de correo electrónico
están acostumbrados a dos métodos básicos de responder:
Responder a todos y Responder
al remitente. Todos los clientes de correo tienen
botones separados para estas dos acciones. Sus usuarios saben que
para responder a todos los incluidos en la lista, deben escoger,
responder a todos y que para responder sólo al remitente en privado,
deben seleccionar Responder al remitente. Aunque se desee animar
a que la gente responda a la lista siempre que sea posible, existen
ciertas circunstancias cuando un mensaje privado al remitente es
prerrogativo—por ejemplo, desean compartir información
confidencial, algo que sería inapropiado para una lista pública.Ahora consideremos lo que sucede cuando la lista sobre escribe
la cabecera Reply-To original del remitente. Quien responde pulsa
la opción de Responder al remitente, con la esperanza de enviar
un mensaje privado al autor original. Porque esta es la conducta
esperada y quizás esta persona no se moleste en examinar
cuidadosamente la dirección del destinatario en el nuevo mensaje. Redacta
su correo privado, un mensaje confidencial, uno que puede diga algo
embarazoso acerca de alguien de la lista y pulsa el botón de enviar.
Inesperadamente el mensaje llega a la lista
unos minutos después. Cierto, en teoría debería haber revisado
cuidadosamente el destinatario y no debería haber asumido nada
acerca del campo Reply-To. Pero por lo general este campo se
compone con su dirección de correo personal (o en su lugar, los clientes
de correo lo hacen) y muchos usuarios asiduos del correo electrónico
dan esto por seguro. De hecho, cuando alguien determina
deliberadamente el campo Reply-To a alguna otra dirección, como la de
la lista, usualmente señalan esto en el contenido del mensaje, de forma
que quienes respondan no se sorprendan de lo que sucede cuando lo hacen.Dada la posibilidad de consecuencias muy severas de esta conducta
inesperada, mi preferencia es la de configurar la aplicación de la lista
para que nunca toque la cabecera Reply-To. Este caso de cuando se utiliza
la tecnología para animar la colaboración tiene, a mi parecer, efectos
colaterales potencialmente peligrosos. Por otro lado, existen argumentos
concretos del otro lado de este debate. Sea lo que sea que se escoja,
puede que en ocasiones algunas personas pregunten por qué no se ha
escogido el otro camino. Dado que esto no es algo que se quiere sea
el principal tema de discusión en la lista, puede ser conveniente
tener una respuesta preparada del tipo que sea más propensa a poner
fin a la discusión en lugar de animarla. Hay que asegurarse de
no insistir en que esta decisión, sea cual sea,
es obviamente la única correcta (incluso cuando se crea que esto es
así). En cambio, hay que señalar que este es un viejo debate, que
existen buenos argumentos de cada lado, que ninguna decisión iba a
satisfacer a todos los usuarios y que por esto se ha tomado la mejor
decisión que se podía. Amablemente se pide que el tema no
vuelva a surgir a menos que alguien tenga algo realmente nuevo que decir,
entonces hay que mantenerse alejado y esperar a que muera
por causas naturales.Alguien podría sugerir una votación. Se puede permitir esto si se
quiere, pero personalmente no creo que contar manos sea una solución
satisfactoria en este caso. El castigo para alguien que se vea sorprendido
por este comportamiento es demasiado (accidentalmente enviar un correo
privado a la lista publica) y las molestias para todos los demás es
pequeña (ocasionalmente recordarle a alguien que deben responder a la
lista) por esto no está claro de que la mayoría, aunque sean la mayoría,
deban poner a una minoría bajo ese riesgo.No he llegado a tocar todos los aspectos acerca de este tema, sólo
los que me han parecido de especial importancia. Para una discusión completa,
se pueden leer los siguientes documentos, los cuales son siempre citados
cuando se entra en el debate:
Leave Reply-to alone,
por Chip RosenthalSet Reply-to to list,
por Simon HillA pesar de las benignas preferencias indicadas anteriormente, no
creo que exista una única respuestas correcta y he participado
felizmente de muchas listas que cambiabanel Reply-To.
Lo mejor que se puede hacer, es centrarse en alguna de las dos vías desde
el principio e intentar no verse enredado en debates sobre esto despues.Dos fantasíasAlgún día, alguien tendrá la brillante idea de implementar una
opción Responder a la lista en su cliente de correo.
Podría utilizar alguna de las cabeceras para listas mencionadas antes
para descubrir la dirección de la lista de correos y luego direccionar
las respuestas directamente a la lista, ignorando cualquier otro destinatario,
ya que probablemente muchos estén suscritos a la lista de todas formas.
Eventualmente, otros clientes implementarán esta característica y todo
el debate desaparecerá. (De hecho, el cliente de correos
Mutt ofrece esta opción.
Poco después de que este libro apareciera, Michael Bernstein me escribió para comentarme lo siguiente:
"Existen otros clientes de correos que implementan una función de
responder a la lista a parte de Mutt. Por ejemplo, Evolution tiene
una combinación de teclas, pero no un botón (Ctrl+L).")Una mejor solución sería que el tratamiento del campo Reply-To fuese
una opción por suscriptor. Quienes deseen que la lista modifique
sus cabeceras Reply-To (ya sea en sus mensajes o en los de otros)
podría solicitarlo, y quienes no lo desean, se les deja tranquilos.
Aunque no conozco ninguna aplicación para listas de correo que permita
esto para cada suscriptor. Así que por ahora, parece que estamos atados
a una configuración global.Desde que escribí esto, he
aprendido que existe al menos un sistema de gestión de listas que ofrece
esta característica: Siesta.
Hay un artículo sobre este en ArchivoLos detalles técnicos para configurar un archivo para
la lista de correos son específicos de la aplicación utilizada y están
fuera del alcance de este libro. Al escoger o configurar un archivador,
es conveniente considerar lo siguiente:Actualización rápidaA menudo la gente querrá ser referida a un mensaje enviado
durante la ultima hora o dos. Si es posible, el archivador deberá
archivar cada mensaje instantáneamente, de tal manera de que cuando
el mensaje aparezca en la lista de correos, ya esté en el archivo.
Si esa opción no esta disponible entonces al menos hay que intentar
configurar el archivado para que se realice cada hora o así. (Por
defecto, algunos archivadores ejecutan el proceso de actualización
cada noche, pero en la práctica esta demora es demasiado larga
para una lista de correos.Estabilidad referencialUna vez que un mensaje es archivado bajo una URL en
particular, debe ser accesible desde esa URL para siempre.
Incluso si el archivo es reconstruido o restaurado de un
respaldo, cualquier URL que haya sido hecha publica debe
permanecer igual. Las referencias estables hacen posible
que los buscadores de Internet sean capaces de indexar el
archivo, lo cual es una gran ventaja para los usuarios que
buscan respuestas. Las referencias estables son también
importantes porque los mensajes de la lista y los hilos
son enlazados desde el gestor de fallos (
)
más adelante en este capítulo o
en la documentación de otros proyectos.Lo ideal sería que la aplicación de la lista de correos
incluya la URL del mensaje archivado o al menos la porción
de la URL específica del mensaje en una cabecera cuando este
es distribuido. De esta manera la gente que haya recibido el
mensaje podrá conocer su lugar en el archivo sin la necesidad
de visitar el archivo, lo cual es de gran ayuda, ya que cualquier
actividad que implique el uso del navegador web es automáticamente
un consumo de tiempo. Que alguna aplicación de listas de
correos ofrece esta posibilidad no lo sé. Desafortunadamente,
los que he utilizado no la tienen. Pero esto es algo que hay
que buscar (o si desarrolla una aplicación de listas, esta es
una característica que debe considerar implementar, por favor).Respaldos (Backups)Debe ser obvio como respaldar el archivo
y la receta para restaurarlo no deben ser muy complicada.
En otras palabras, no hay que tratar el archivo como una caja
negra. Debe conocer donde se almacenan los mensajes y como
restaurar las páginas del archivo del almacén si alguna vez
es necesario. Estos archivos contienen datos muy preciados—un
proyecto que los pierde, pierde buena parte de su memoria
colectiva.Soporte de los hilosDesde cualquier mensaje debe ser posible ir al hilo
(grupo de mensajes relacionados) al que pertenece el mensaje. Cada
hilo debe tener su propia URL también, separado del URL de los
mensajes del hilo.BúsquedasUn archivo que no permita búsquedas—tanto en el cuerpo
de los mensajes como por autor o según el asunto—es casi
inútil. Hay que señalar que algunos archivadores permiten búsquedas
al remitir la labor a un buscador externo como
Google. Esto es
aceptable, pero por lo general, las búsquedas directas son más
finas, porque permiten a quien busca, especificar que los
resultados sean mostrados, por ejemplo, según el asunto y no
según el cuerpo del mensaje.
Lo anterior es sólo una lista técnica para ayudar a evaluar y
configurar un archivador. Hacer que la gente de hecho utilice
el archivo como ventaja para el proyecto es discutido en capítulos posteriores
en particular en .SoftwareAquí hay algunas herramientas open source para la gestión de
las listas de correo y su archivo. Si el hosting del proyecto ya
tiene una configuración por defecto, quizás no sea necesario siquiera
decidir cual herramienta utilizar. Pero si se tiene que instalar una,
existen algunas posibilidades. Las que he utilizado son Mailman, Ezmlm,
MHonArc e Hypermail, lo cual no significa que no haya otras que sean
igual de buenas (y por supuesto, probablemente existan otras que no
he logrado encontrar, así que no considere esto como una lista completa).Aplicaciones de gestión de listas de correo:Mailman — (Tiene un archivador incorporado y la posibilidad de
conectarse a archivadores externos.)SmartList — (Para ser utilizado con el sistema de procesamiento de correos Procmail.)Ecartis — ListProc — Ezmlm — (Diseñado para funcionar conQmail
.)Dada — (A pesar del bizarro intento de su sitio web,
es un software libre, liberado bajo la licencia GNU GPL.
También tiene un archivador incluido.)Software para el archivo de las listas de correo:MHonArc — Hypermail — Lurker — Procmail —
(Software que acompaña a SmartList, un sistema de procesado
general de correos que puede, aparentemente, ser configurado
como un archivo.)Control de VersionesUn sistema de control de versiones (o
sistema de control de revisiones) es una combinación
de tecnologías y practicas para seguir y controlar los cambios
realizados en los ficheros del proyecto, en particular en el código
fuente, en la documentación y en las páginas web. Si nunca antes se ha
utilizado un control de versiones, lo primero que hay que hacer es conseguir
a alguien que sí lo haya hecho y hacer que se una al proyecto. Hoy en día
todo el mundo espera que al menos el código fuente del proyecto este
bajo un control de versiones y probablemente no se tomen el proyecto
seriamente si no se utiliza este sistema con un mínimo de competencia.La razón por la cual el control de versiones es universal es porque
ayuda virtualmente en todos los aspectos al dirigir un proyecto: comunicación
entre los desarrolladores, manejo de los lanzamientos, administración de fallos,
estabilidad entre el código y los esfuerzos de desarrollo experimental y
atribución y autorización en los cambios de los desarrolladores. El sistema
de control de versiones permite a una fuerza coordinadora central
abarcar todas estas áreas. El núcleo del sistema es la
gestión de cambios: identificar cada cambio a los ficheros
del proyecto, anotar cada cambio con meta-data como la fecha y el autor
de la modificación y disponer esta información para quien sea y como sea.
Es un mecanismo de comunicación donde el cambio es la unidad básica de
información.Aun no hemos discutido todos los aspectos de utilizar un sistema
de control de versiones ya que es un tema tan extenso que será
introducido según el tópico a lo largo de este libro. Ahora, vamos a
concentrarnos en seleccionar y configurar un sistema de control de versiones
de forma que fomentemos un desarrollo cooperativo.VocabularioEn este libro no podemos enseñar como utilizar el control de
versiones si nunca antes lo ha utilizado, pero sería imposible continuar
sin conocer algunos términos clave. Estos son útiles independientemente
del sistema particular utilizado: son definiciones básicas y verbos sobre
la colaboración en red y serán utilizados a lo largo del libro. Incluso
si no existiera ningún sistema de control de versiones, el problema del
control de los cambios aun existiría y estas palabras nos dan un lenguaje
para hablar acerca de este problema consistentemente.
commit
Realizar un cambio en el proyecto. Formalmente, almacenar
un cambio en la base de datos del control de versiones de
forma que pueda ser incorporado en lanzamientos futuros del
proyecto. "Commit" puede ser utilizado como un verbo o como
un sustantivo. Como un sustantivo, es esencialmente un
sinónimo de "cambio". Por ejemplo: "He commited una reparación
para un fallo reportado en Mac OS X que hacia que el servidor
se colgara. Jóse ¿podrías por favor revisarlo y verificar que
no estoy haciendo mal la asignación?"
Mensaje de registro
Un pequeño comentario añadido a cada commit que describe
el tipo y el propósito del commit. Los mensajes de
registro forman parte de los documentos más importantes
de cualquier proyecto ya que son un puente entre el
lenguaje altamente técnico de los cambios individuales
en el código y el lenguaje más orientado al usuario de
características, resolución de fallos y progreso del
proyecto. Más adelante vamos a ver la forma de distribuir
estos mensajes a la audiencia apropiada y también
en discutimos
como ENCOURAGE a los voluntarios para que escriban mensajes
de registro útiles y concisos.
update
Solicitar los cambios (commits) que han realizado
otros en la copia local del proyecto, esto actualiza
esta copia a la ultima versión. Es una operación muy
común ya que la mayoría de los desarrolladores actualizan
su código varias veces al día y así saben que están
ejecutando casi lo mismo que los otros desarrolladores, así
que si se descubre un fallo es muy posible que este aun
no haya sido resuelto. Por ejemplo: "Hey, he notado
que el código del índice está fallando en el último
byte. ¿Es esto un nuevo fallo?" "Sí, pero fue resuelto
la semana pasada—prueba actualizar para resolverlo."
repositorio
Una base de datos en la que los cambios son almacenados. Algunas
versiones de sistemas de control de versiones son centralizados,
es decir, existe un único repositorio maestro, el cual almacena
todos los cambios en el proyecto. Otros sistemas son descentralizados,
cada desarrollador tiene su propio repositorio y los cambios pueden
ser intercambiados entre repositorios arbitrariamente. El sistema
de control de versiones mantiene un registro de las dependencias
entre estos cambios y cuando llega el momento de realizar un
lanzamiento, un conjunto particular de cambios es aprobado
para ese lanzamiento. La cuestión de cual sistema es mejor
es otra de las guerras santas del desarrollo de software.
Intentad no caer en la trampa de discutir sobre esto en las
listas de correo del proyecto.
checkout
El proceso de obtener una copia del proyecto desde el repositorio.
Por lo general, un checkout produce un árbol de directorios
llamado "copia funcional" desde el cual los cambios serán
enviados de vuelta al repositorio original. En algunas versiones
descentralizadas de sistemas de control, cada copia funcional
es en si mismo un repositorio y los cambios son empujados (o
atraídos) a cualquier repositorio que este dispuesto a aceptarlos.
copia funcional
El árbol de directorios privado de cada desarrollador que
que contiene el código fuente del proyecto y posiblemente
las páginas web u otros documentos. Una copia funcional
también contiene un pequeña cantidad de meta-data administrada
por el sistema de control de versiones, informando a la copia
funcional cual es repositorio central de procedencia, la
revisión de los ficheros presentes, etc. Generalmente, cada
desarrollador tiene su propia copia funciona en la cual
realiza y prueba los cambios y desde la cual envía sus
commits (cambios).revisión,
cambio,
conjunto de cambios
Una revisión es usualmente una encarnación específica de un
fichero o directorio en particular. Por ejemplo, si el proyecto
se inicia en la revisión 6 del fichero F y alguien envía un
cambio al fichero F, esto produce la revisión 7 de F. Algunos
sistemas también utilizan revisión (revision), cambio (change)
o conjunto de cambios (changeset) para referirse a un conjunto
de cambios enviados juntos como una unidad conceptual.Estos conceptos pueden tener distintos significados técnicos
en cada sistema de control de versiones, pero en general, la idea es
siempre la misma: dar un sistema para comunicar de manera precisa la
historia de cambios en un fichero o conjunto de ficheros (inmediatamente
antes y después de que se ha corregido un fallo). Por ejemplo: "Eso
se ha resuelto en la revisión 10" o "Se ha corregido eso en la revisión
10 del fichero foo.c."Cuando se habla sobre ficheros o una colección de ficheros sin
especificar una revisión en particular, por lo general se asume que
nos referimos a la revisión disponible más reciente."Versión" Versus "Revisión"El termino versión es a veces utilizado
como un sinónimo para "revisión", pero aquí no voy a utilizarla de esta
forma, ya que se puede confundir fácilmente con "versión" en el sentido
de una versión de un programa—así que, el número de lanzamiento
o edición como en "Versión 1.0". Y aunque la frase "control de versiones"
es un estándar, continuare utilizándolo como sinónimo para "control
de revisiones" y para "control de cambios".diff
Una representación contextual de un cambio. Un diff muestra las lineas
que han sido modificadas, como y además, algunas lineas contextuales
rodeándolas a cada lado. Un desarrollador familiarizado con el código
puede, con leer un diff de ese código, entender lo que hace el cambio
e incluso detectar fallos.etiqueta (tag)
Una etiqueta para una colección particular de ficheros en una revisión
específica. Los tags son utilizados para preservar capturas interesantes
del proyecto. Por ejemplo, un tag es hecho para cada lanzamiento público,
de forma que cada persona pueda obtener, directamente desde el sistema
de control de versiones, el conjunto exacto de ficheros/revisiones
que componen el lanzamiento. Algunos tags comunes son como
Release_1_0, Delivery_00456,
etc.rama (branch)
Es una copia del proyecto, bajo el control de versiones, pero aislado,
de forma que los cambios realizados en esta rama no afecten al resto
del proyecto y vice versa, excepto cuando los cambios sean
deliberadamente "unidos" de un lado al otro. Las ramas también son
conocidas como "lineas de desarrollo". Incluso cuando un proyecto
no tiene ramas específicas se considera que el desarrollo se esta
produciendo en la rama principal, también conocida como "línea
primaria" o "trunk".Las ramas o branches, permiten aislar diferentes lineas de
desarrollo de si mismas. Por ejemplo, una rama puede ser utilizada
para un desarrollo experimental que sería demasiado inestable para
la rama principal. O al contrario, una rama puede ser utilizada
como sitio para estabilizar una versión para lanzamiento. Durante
el proceso de lanzamiento, el desarrollo regular se mantendría ininterrumpida
en la rama principal. Mientras tanto, en la rama de lanzamiento,
ningún cambio es aceptado excepto aquellos aprobados por el
responsable del lanzamiento. De esta manera, realizar un lanzamiento
no tiene porque interferir con el trabajo de desarrollo que se está
realizando. Para más información
más adelante en el capítulo para una discusión más
detallada sobre las ramas.merge
Mover un cambio de una rama a otra, lo que incluye unir desde
la rama principal a otra rama o vice versa. De hecho, estos
son las uniones más comunes y es rara la ocasión en la que
esto se hace entre dos ramas no principales. Para más
información sobre los merge .
"Merge" tiene otro significado: es lo que hace el sistema de control
de versiones cuando se encuentra con que dos personas han realizado
cambios en un mismo fichero sin relación alguna. Ya que estos cambios
no interfieren entre ellos, cuando alguna de estas personas actualizan
su copia del fichero (el cual ya contiene los cambios) los cambios
de la otra persona serán unidos automáticamente. Esto sucede muy a
menudo, especialmente en proyectos con múltiples personas realizando
cambios en el mismo código. Cuando dos cambios diferentes están
relacionados, el resultado es un "conflicto".conflicto
Sucede cuando dos o más personas intentan realizar diferentes
cambios en la misma porción de código. Todos los sistemas
de control de versiones detectan estos conflictos automáticamente
y notifican a al menos uno de los humanos involucrados de que
sus cambios entran en conflicto con los de alguien más. Es
entonces tarea de esta personas resolver
el conflicto y comunicar esa resolución al sistema de control
de versiones.bloqueo (lock)
Declaración de un intento exclusivo para cambiar un fichero
o directorio en particular. Por ejemplo, "No puedo enviar
cambios a las paginas web ahora mismo, ya que parece que
Alfredo las tiene bloqueadas mientras arregla sus
imágenes de fondo." No todos los sistemas de control de
versiones ofrecen la posibilidad del bloqueo y aquellos
que sí lo permiten, no es necesario que se utilice. Esto
es porque el desarrollo paralelo y simultaneo es la norma
y bloquear a la gente para que no puedan modificar los
ficheros es contrario a la idea del sistema.El modelo del sistema de control de versiones que requiere el bloqueo
de ficheros suele ser llamado bloqueo-modificación-desbloqueo
y el modelo que no requiere del bloqueo es llamado
copia-modificación-unión. Una excelente explicación
en profundidad y comparaciones puede ser encontrada en
. En
general, el modelo de copia-modificación-unión es el mejor
para el desarrollo open source y todos los sistemas de control
de versiones discutidos en este libro soportan este modelo.
Escoger un sistema de control de versionesHasta ahora, los dos sistemas de control de versiones más
populares en el mundo del software libre son Concurrent
Versions System (CVS),
)
y Subversion (SVN,
).CVS lleva largo tiempo y los desarrolladores más experimentados
ya están familiarizados con el. Hace más o menos lo necesario
y ya que ha sido popular durante mucho tiempo es probable que no
se termine discutiendo su utilización. A pesar de todo, CVS tiene
algunas desventajas. No ofrece facilidad para hacer referencia a cambios
en múltiples ficheros, no permite renombrar o copiar ficheros dentro
del sistema de control (así que puede ser muy doloroso reorganizar el
código después de iniciar el proyecto), el soporte para las uniones
es algo pobre, no trabaja muy bien con ficheros muy grandes o
con ficheros binarios y algunas operaciones son lentas cuando muchos
ficheros están involucrados.Ninguno de estos fallos de CVS son fatales y sigue siendo muy
popular. Sin embargo, durante los últimos años Subversion ha venido
ganando terreno, especialmente con nuevos proyectos.
Más información en
y para evidencia sobre su crecimiento en
.. Si esta iniciando un nuevo proyecto, recomiendo
Subversion.Por otra parte, dado que estoy involucrado en el proyecto
Subversion, mi objetividad puede ser razonablemente cuestionable y
durante los últimos años han ido surgiendo un número de nuevos sistemas de control
de versiones open source. Podemos encontrar una lista de todos los
sistemas que conozco
en según su popularidad. Como muestra
esta lista, escoger un sistema de control de versiones puede convertirse
en una interminable tarea de investigación. Posiblemente esta decisión
ya haya sido tomada por el sitio donde hospedamos el proyecto,
liberándonos de esta carga, pero si es necesario tomar una decisión,
lo mejor es consultar con otros desarrolladores, indagar un poco
para tener una idea de las distintas experiencias que haya tenido
la gente y luego escoger uno y mantenerse con este. Cualquier
sistema de control de versiones estable y listo para entornos
de producción será suficiente, no hay que preocuparse demasiado
sobre tomar una decisión equivocada. Si simplemente no se puede
decidir, entonces la opción es Subversion. Es relativamente
fácil de aprender y es probable que se mantenga como el estándar
por unos años más.Utilizando el sistema de control de versionesLas recomendaciones realizadas en esta sección no están
enfocadas hacia un sistema de control de versiones en particular
y debería ser sencillo implementarlas en cualquiera. La documentación
específica del sistema debe ofrecer los detalles necesarios.Versiones de todoNo solo hay que mantener el código del proyecto bajo el control
de versiones también las paginas web, documentación, FAQ, notas de
diseño y cualquier cosa que pueda ser necesario editar. Todo esto
hay que mantenerlo cerca del código, en el mismo árbol que el
repositorio. Se deben mantener versiones de cualquier pieza de
información que pueda cambiar y archivar la que no cambie.
Por ejemplo, un correo electrónico,
una vez enviado, no cambia, por lo tanto, mantener versiones de este
no tiene sentido (a menos que se convierta en una parte importante
de la documentación).La razón de mantener versiones de todo en un mismo sitio, es
para que la gente sólo tenga que aprender un sistema para realizar
cambios. A menudo, un voluntario se iniciara modificando algunas
paginas web o partes de la documentación, para luego pasar a realizar
pequeñas contribuciones al código, por ejemplo. Cuando el proyecto
utiliza el mismo sistema para todo tipo de cambios, las personas sólo
tendrán que aprender THE ROPES una vez. Mantener las versiones juntas
significa que nuevas características pueden ser añadidas junto
a la actualización de la documentación, y que al crear ramas del
código, se crearan ramas de la documentación, etc.No hace falta mantener los ficheros generados
bajo el sistema de control de versiones ya que no son datos editables
generados por otros programas. Por ejemplo, algunos sistemas de
compilado generan los ficheros configure basandose
en una plantilla configure.in. Para realizar
cambios al fichero configure bastaría con
modificar configure.in y volver a generarlo.
Entonces, sólo el fichero configure.in es
un fichero editable. Sólo es necesario mantener versiones de las
plantillas—si se hace con los ficheros generados, la gente
se olvidará de volver a generarlos cuando realicen algún cambio
en las plantillas y las resultantes inconsistencias crearan una
mayor confusión. Alexey Mathotkin tiene una
opinión diferente sobre el tema de controlar las versiones de los
ficheros configure en un artículo llamado
"configure.in and version control" en
.La regla de que todos los datos editables deben ser mantenidos
bajo el control de versiones tiene una excepción desafortunada: el
gestor de fallos. La base de datos de fallos almacena una gran cantidad
de datos editables pero generalmente, por razones técnicas, no se puede
mantener bajo el control de versiones principal. (Algunos gestores
tienen características primitivas de control de versiones, pero
independiente de repositorio principal del proyecto.)NavegabilidadEl repositorio del proyecto debe ser accesible desde Internet.
Esto no solo significa la habilidad de visualizar la ultima revisión
de los ficheros del proyecto, pero permitir volver atrás en el tiempo
y ver en revisiones anteriores, mirar las diferencias entre revisiones,
leer los mensajes de registro para cambios específicos, etc.La navegabilidad es importante porque es un ligero portal a los
datos del proyecto. Si el repositorio no es accesible desde un navegador
web entonces alguien que desea inspeccionar un fichero en particular (por
ejemplo, para mirar si una mejora ha sido incluida en el código) tendrá
que instalar el mismo programa utilizado por el sistema de control
de versiones, lo cual convierte una simple consulta de dos minutos en
una tarea de medio hora o más.También implica URLs CANONICAL para visualizar revisiones
específicas de un fichero y para la ultima revisión en cualquier
momento. Esto puede ser muy útil durante discusiones técnicas o para
indicar alguna documentación a la gente. Por ejemplo, en lugar de
decir "Para ayudas sobre como encontrar fallos en el servidor,
mirad el fichero www/hacking.html en vuestra copia funcional" se puede
decir "Para ayudas sobre como encontrar fallos en el servidor,
mirad http://subversion.apache.org/docs/community-guide/,"
dando una URL que siempre lleva a la ultima revisión del fichero
hacking.html. La URL es mejor porque no es nada
ambigua y evita la cuestión de si existe una copia funcional
actualizada.Algunos sistemas de control de versiones incluyen un mecanismo
que permite la navegación del repositorio, mientras que otros
dependen de herramientas de terceros. Tres de estas herramientas son
ViewCVS (),
CVSWeb (), and
WebSVN ().
La primera trabaja muy bien con CVS y con Subversion, la segunda
sólo con CVS y la tercera sólo con Subversion.Correos de cambiosCada commit al repositorio debería generar un correo electrónico
mostrando quien ha hecho el cambio, cuando, cuales ficheros y directorios
han cambiado y como. Este correo debe ser dirigido a una lista de correos
separada de las listas a las que envían los humanos. Los desarrolladores
y todos aquellos interesados deben ser animados para suscribirse a las
lista de commits ya que es la manera más efectiva de mantenerse al día con
lo que sucede en el proyecto al nivel del código. Aparte de los obvios
beneficios técnicos de la revisión por la comunidad (),
los correos con los cambios ayudan a crear un sentido de comunidad
porque establecen un ambiente compartido en el que la gente puede
reaccionar ante diferentes eventos (commits) que saben son visibles
a otros tambien.La configuración específica para habilitar estos correos varia
dependiendo de la versión del sistema de control de versiones pero
a menudo existe un script o paquete que facilita esto. Si se tiene
algún problema para encontrar estos, intente buscar en la documentación
el tema relacionado con los hooks,
específicamente el post-commit hook, también
llamado loginfo hook en CVS. Los
Post-commit hooks son tareas automatizadas que se ejecutan como
respuesta a los cambios enviados (commits). El hook es ejecutado
por un cambio individual, se rellena con la información acerca del
cambio y luego es liberada esa información para ser utilizada como
se desee—por ejemplo, para enviar un correo electrónico.Con los sistemas de correos con cambios ya listos para usar,
quizás sea necesario modificar alguna de las siguientes conductas:Algunos de estos sistemas no incluyen el diff en el correo
que envían sino que enlazan con una URL para poder ver el cambio
en la web utilizando el sistema de navegación del repositorio.
Aunque esta bien dar una URL para que se pueda revisar el cambio
luego, también es muy importante que el
correo del commit incluya los diff. Leer el correo electrónico
ya es parte de la rutina de la gente, así que si el contenido es
visible allí mismo en el correo, los desarrolladores podrán
revisar el commit en el mismo sitio sin la necesidad de abandonar
sus clientes de correo. Si tienen que seguir un enlace a una
página de revisiones, muchos no lo pulsarán, ya que esto requiere
de una nueva acción en lugar de una continuación de lo que ya
estaban haciendo. Por si fuera poco, si el lector desea preguntar
algo acerca del cambio, es mucho más fácil responder al mensaje
incluyendo el texto original y simplemente realizar anotaciones
en el diff, en lugar de tener que visitar una página web y
tomarse la molestia de copiar y pegar partes del diff en el
navegador web al cliente de correo.(Por supuesto que si el diff es gigantesco, como cuando
una gran parte de código nuevo ha sido añadido al repositorio,
entonces tiene sentido omitir la parte del diff y ofrecer
sólo la URL. Muchos de los sistemas permiten hacen esto
automáticamente. Si el utilizado en el proyecto no es capaz
de hacer esto, entonces sigue siendo mejor incluir los diffs
completos. La conveniencia de la revisión y los comentarios
es una piedra angular del desarrollo cooperativo, algo demasiado
importante para olvidar.)Los correos con los cambios deben tener su cabecera
Reply-To direccionada hacia la lista regular de desarrollo, no
a la lista de los cambios, de esta manera cuando alguien revise
un cambio y escriba una respuesta, esta debe ser dirigida
automáticamente a la lista de desarrolladores, donde los temas
técnicos son discutidos normalmente. Existen varias razones para
esto, primero, se quiere mantener todas las discusiones técnicas
en la lista, porque es allí donde la gente espera que sucedan y
porque así ésta es la única lista que será necesario archivar.
Segundo, puede que existan partes interesadas no suscritas a la
lista de cambios. Tercero, la lista de cambios es publicitada
como una lista para los commits y no como una lista para los
commits y las discusiones técnicas ocasionadas. Quienes se han
suscrito sólo a la lista de cambios, no se han suscrito a nada
más que commits, al enviarles correos con material sin relación
utilizando ésta vía, es una violación del contrato implícito.
Cuarto, algunas personas escriben programas que procesan los
correos con los cambios (para publicarlos en una página web,
por ejemplo). Estos programas están preparados para manejar
correos con un formato consistente y son incapaces de trabajar
con correos escritos por humanos.Hay que señalar que ésta recomendación no contradice
las recomendaciones anteriores en
.
Siempre esta bien que el remitente del mensaje configure
la cabecera Reply-to. En este caso, el remitente es el
sistema de control de versiones y su Reply-to lo configura
de tal manera que indique que el lugar apropiado para responder
es la lista de desarrollo y no la lista de cambiosCIA: Otro mecanismo de publicación de cambiosLos correos con los cambios no son la única forma de propagar
las noticias de los cambios. Recientemente, otro mecanismo llamado CIA
() ha sido desarrollador. Este es un
distribuidor y AGGREGATOR de estádisticas de cambios. El uso más popular
de CIA es el de enviar notificaciones de los commits a un canal IRC de
forma que las personas en el canal pueden ver los commits en tiempo
real. Aunque es una utilidad menos técnica que los correos electrónicos,
ya que los observadores puede que estén o no conectados cuando las alertas
sobre nuevos cambios llegan al canal, esta técnica tiene una inmensa
utilidad social. La gente tiene la sensación de
pertenecer a algo vivo y activo, y siente que pueden ver el progreso
que se está haciendo ante sus propios ojos.El programa de notificaciones del CIA es invocado por el
post-commit hook, da formato al commit en un mensaje XML y lo envia
al servidor central (por lo general cia.navi.cx).
Este servidor luego distribuye la información a los otros
foros.CIA también puede ser configurado para enviar
feeds RSS. Más detalles en la documentación en
.Para ver un ejemplo de CIA en acción conectese a
irc.freenode.net, y al canal
#commits.Las ramas para evitar cuellos de botellaLos usuarios inexpertos del control de versiones pueden sentirse
temerosos de crear ramas y uniones. Esto sea probablemente un efecto
colateral de la popularidad de CVS: su interfaz de ramas y uniones puede
ser poco intuitivo, así que muchas personas han aprendido a evitar
estas operaciones por completo.Si se encuentra entre estas personas, decidase ahora mismo a
conquistar cualquier miedo que pueda tener y tómese el tiempo de aprender
cómo funcionan las ramas y las uniones. No son operaciones muy complicadas
una vez que se acostumbra a ellas y se vuelven muy importantes mientras
el proyecto adquiere más desarrolladores.Las ramas son muy importantes porque convierten un recurso
escaso—espacio de trabajo en el código del proyecto—en uno
abundante. Normalmente, todos los desarrolladores trabajan juntos
en la misma caja de arena, construyendo el mismo castillo. Cuando alguien
desea añadir un nuevo puente levadizo, pero no puede convencer a los
demás de que sería una mejora, entonces las ramas hacen posible que vaya
a una esquina aislada donde probar su puente. Si el esfuerzo tiene éxito,
puede invitar a otros desarrolladores para que evalúen el resultado. Si
todos están de acuerdo en que el resultado es bueno, pueden hacer que
el sistema de control de versiones mueva ("merge") el puente levadizo
de la rama del castillo a la rama principal del castillo.Es fácil ver como esta habilidad ayuda al desarrollo colaborativo,
ya que la gente necesita de cierta libertad para probar cosas nuevas
sin sentir que están interfiriendo con el trabajo de otros. Igual
de importante es cuando el código debe ser aislado del CHURN usual
de desarrollo de manera que un fallo sea reparado o un lanzamiento
sea estabilizado (más en y
en en
) sin la preocupación
de seguir un blanco en movimiento.Hay que utilizar las ramas libremente y fomentar su uso entre
otros. Pero también hay que asegurarse de que una rama en particular
se mantenga activa exactamente durante el tiempo que sea necesaria.
Incluso quienes no trabajan en la rama principal mantienen una visión
periférica de lo que está sucediendo en ésta. Esta visión es deseable,
por supuesto, y los correos con cambios deben salir de estas ramas
como de cualquier otra. Pero las ramas no deben convertirse en un
mecanismo que divida a la comunidad de desarrolladores. Con raras
excepciones, el objetivo eventual de la mayoría de las ramas debe
de ser su unión a la rama principal y desaparecer.Singularidad de la informaciónLas uniones tienen un corolario importante: nunca se debe enviar
el mismo cambio dos veces, es decir, un cambio dado sólo debe ser
introducido al sistema de control de versiones solo una vez. La revisión
(o conjunto de revisiones) en la que el cambio es introducido es su
identificador único desde ese momento. Si debe ser aplicado a otras
ramas aparte de la cual en la que ha sido hecho, entonces deberá ser unido
desde su punto de entrada original a sus otros destinos —al
contrario de enviar cambios textualmente idénticos, que tendrían el
mismo efecto en el código, pero harían del mantenimiento eficaz y de
la gestión de lanzamientos una tarea imposible.Los efectos prácticos de este consejo difieren entre sistemas
de control de versiones. En algunos sistemas, las uniones son eventos
especiales, fundamentalmente distintos de los commits y acarrean sus
meta-datos propios. En otros, el resultado de las uniones son enviadas
de la misma manera que los cambios son enviados así que la mejor manera
de distinguir una unión de un nuevo cambio es leyendo los mensajes de
registro. El mensaje de registro de una unión no repite el mensaje
de registro del cambio original, en cambio, sólo indica que es una
unión y da la identificación de la revisión del cambio original, con
como mucho una línea de sumario del sus efectos. Si alguien desea ver
el mensaje de registro completo, deberá consultar la revisión original.La razón por la cual es importante evitar la repetición de los
mensajes de registro es que estos pueden ser editados después de que
se hayan enviado. Si un mensaje de registro es repetido en el destino
de cada unión, entonces incluso si alguien edita el mensaje original,
deja todos los otros mensajes sin corregir—lo cual sólo puede
causar confusión a largo plazo.El mismo principio se aplica al retirar un cambio. Si esto llegara
a suceder, entonces el mensaje de registro para la retirada solo debe
indicar que una revisión en particular está siendo retirada,
no debe describir el cambio en el código resultante, pues la semántica
del cambio se puede intuir al leer el mensaje de registro original del
cambio. Por supuesto, el mensaje de registro del retiro también debe
indicar la razón por la cual ese cambio ha sido retirado, pero no debe
duplicar nada del mensaje de registro del cambio original. Si es posible,
hay que volver y editar el mensaje de registro original para señalar
que ha sido retirado.Todo lo anterior implica que se debe utilizar una sintaxis
consistente al referirnos a las revisiones. Esto es de gran ayuda
no sólo en los mensajes de registro, sino en los correos electrónicos,
en el gestor de fallos y en todas partes. Si se esta utilizando
CVS, recomiendo "directorio/al/fichero/del/proyecto/rama:REV",
donde REV es un número de revisión en CVS como "1.76". Si se esta
utilizando Subversion, la sintaxis estándar para la revisión
1729 es "r1729" (el directorio de los ficheros no es necesario
porque Subversion utiliza números globales para las revisiones). En
otros sistemas, existe por lo general una sintaxis estándar para
expresar el nombre del conjunto de cambios. Cualquiera que sea
la sintaxis apropiada para el sistema utilizado, hay que animar
a la gente a que lo utilicen al referirse a algún cambio. El
uso consistente en el nombre de los cambios permiten que el
mantenimiento del proyecto sea mucho más sencillo (como ya
veremos en y en
), y dado que mucho de este
mantenimiento será realizado por voluntarios, debe ser lo más
sencillo posible.Más información en
.AutorizacionesMuchos de los sistemas de control de versiones ofrecen la posibilidad
por la cual a ciertas personas se les permite o no, realizar cambios
en áreas específicas del repositorio. Siguiendo el principio de que
cuando a las personas se les entrega un martillo empiezan a buscar
clavos para golpear, muchos proyectos utilizan esta característica
con ABANDON, permitiendo cuidadosamente el acceso solo a las áreas
donde tienen permiso de enviar cambio y asegurándose de que no lo puedan
hacer en ningún otro sitio. (Más información en
sobre como
los proyectos deciden quienes pueden hacer cambios y donde.)Probablemente hayan pequeños daños implementar un control
así de estricto, pero una política un poco más relajada también
esta bien. Algunos proyectos utilizan un sistema basado en el honor:
cuando a una persona se le permite la posibilidad de realizar cambios,
aunque sea a una pequeña área del repositorio, lo que reciben es una
contraseña que les permite realizar cambios en cualquier otro sitio
del repositorio y sólo se les pide que mantengan sus cambios en su
área. Hay que recordar que no existe ningún peligro aquí: de todas formas,
en un proyecto activo, todos los cambios son revisados. Si alguien hace
un cambio donde no debía, alguien más se dará cuenta y dirá algo. Es muy
sencillo si un cambio debe ser rectificado—todo está bajo el control
de versiones de todas formas, así que sólo hay que volver atras.Existen varias ventajas en tal aproximación tan relajada.
Primero, mientras los desarrolladores se vayan expandiendo en las
diferentes áreas (lo cual harán a menudo si siguen en el proyecto),
no es necesario un trabajo administrativo extra de tener que dar y
quitar privilegios. Una vez que la decisión es tomada, la persona
puede empezar a enviar sus cambios a la nueva área sin problemas.Segundo, la expansión se puede filtrar mejor, ya que generalmente,
quienes realizan cambios en el área X y desean expandirse al área Y
sólo tienen que empezar a enviar sus cambios contra Y y solicitar
su revisión. Si alguien con acceso a cambios al área Y recibe alguno
de estos parches y lo aprueba, puede pedir que el cambio sea enviado
directamente (mencionando el nombre de quien ha revisado/aprobado el
cambio en el mensaje de registro). De esta manera, el commit vendrá
de quien ha hecho el cambio, lo cual es preferible desde un punto de
vista administrativo y de credibilidad.Por último, y quizás la razón más importante, al utilizar
un sistema basado en el honor, se crea una atmósfera de confianza
y respeto mutuo. Al darle a alguien permiso para enviar cambio a
un subdominio se hace una declaración acerca de su preparación
técnica—la cual dice: "Hemos visto que tienes la capacidad
para realizar cambios en cierto dominio, así que a por ello". Pero
imponer controles estrictos en las autorizaciones dice: "No sólo
estamos juzgando tus limitadas capacidades, sino que también
sospechamos de tus intenciones." Este no
es el tipo de declaraciones que se desean hacer si pueden ser
evitadas. Incluir a alguien dentro del grupo de desarrolladores
del proyecto es una oportunidad de iniciarlos en un circulo de
confianza mutua. Una buena manera de hacer esto es dar más
poder del que se supone deben tener e informarles que es su
responsabilidad mantenerse dentro de los límites impuestos.El proyecto Subversion ha operado bajo este sistema por más
de cuatro años, con 33 desarrolladores con privilegios completos
y 43 con privilegios parciales. La única distinción que el sistema
fuerza esta entre quienes envían cambios y quienes no, otras divisiones
son mantenidas sólo por humanos. Incluso así, nunca hemos tenido
ningún problema con que alguien realice un cambio deliberado fuera
de su dominio. Una que otra vez han habido inocentes mal entendidos
sobre la extensión de los privilegios de alguna persona, pero siempre
es resuelto rápida y amigablemente.Obviamente, en situaciones donde esto es poco práctico se debe
depender en controles estrictos en las autorizaciones, pero dadas
situaciones son raras. Incluso cuando hay millones de lineas de
código y ciento o miles de desarrolladores, un commit hecho a
cualquier módulo del código sigue siendo revisado por quienes
trabajan en dicho módulo y son quienes pueden reconocer si quien
lo ha intentado hacer puede hacerlo. Si una revisión regular no
está sucediendo entonces el proyecto tiene problemas más importantes
con los cuales lidiar que el sistema de autorizaciones.Para concluir, no hace falta pasar mucho tiempo con las
autorizaciones del sistema de control de versiones a menos que se
tenga una razón en específico. Usualmente esto no trae beneficios
tangibles y confiar en el control humano tiene sus ventajas.Por supuesto que nada de esto significa que las restricciones mismas son poco
importantes. Sería malo para un proyecto el animar a las personas
a realizar cambios en áreas para las cuales no están cualificadas. Incluso
en algunos proyectos, el acceso ilimitado tiene un status especial:
implica derecho de voto en cuestiones que atañen al proyecto por
completo. Este aspecto político del acceso es discutido en mayor
profundidad en
en .Seguimiento de erroresEl seguimiento de errores es un tema muy amplio y varios
aspectos de este son discutidos a lo largo de este libro. Aquí
intentare concentrarme principalmente en las consideraciones técnicas
y en la instalación, pero para llegar a esto, debemos empezar con
una política de preguntas: exactamente ¿qué tipo de información
va a ser mantenida en el sistema de seguimiento?.El término seguimiento de errores puede
generar confusión ya que estos sistemas se utilizan frecuentemente
para seguir solicitudes para nuevas características, tareas que se
efectúan sólo una vez, parches no solicitados—en realidad se
utilizan para cualquier cosa que pueda tener estados distinguibles
de comienzo y final, con estados opcionales de transición entre
estos y que acumulan información a lo largo de su existencia. Por
esta razón, los sistemas de seguimiento de fallos también son
llamados de seguimiento de temas,
de defectos,
de solicitudes, trouble ticket
system, etc. Más información en
donde hay una lista de programas.En este libro continuare utilizando "gestor de fallos" para la
aplicación que hace el seguimiento, porque es así como la mayoría
de la gente lo llama y utilizare issue al
referirme a un punto en particular en la base de datos del gestor
de fallos. Esto nos permitirá distinguir entre los buenos y malos
comportamientos que el usuario se puede encontrar (el fallo en si
mismo) y el registro en el gestor del
descubrimiento, diagnostico y eventual resolución del fallo. Hay
que recordar que aunque la mayoría de las entradas sean fallos,
también pueden ser otras tareas.El clásico ciclo de vida se parece al siguiente:
Alguien crea una entrada. Ofrecen un resumen, una descripción
inicial (incluyendo como reproducir el fallo si es posible. En
en hay ejemplos
de como se puede animar la correcta creación de reportes de fallos)
y cualquier otra información que el gestor solicite. Quien crea
la entrada puede ser un desconocido al proyecto—los reportes
de fallos y las solicitudes de características provienen tanto
de los usuarios como de los desarrolladores.Una vez enviada, la entrada entra en un estado llamado
abierto porque ninguna acción ha sido
tomada aun. Algunos gestores etiquetan las nuevas entradas
como sin verificar o como
sin iniciar. No está asignada a nadie,
o en algunos sistemas, es asignada a un usuario fantasma que
representa la falta de una asignación real. Llegado a este
punto, la entrada se encuentra en el área de espera: ha sido
registrada, pero aun no ha sido integrada en la conciencia
del proyecto.
Otros leen la entrada, añaden comentarios y quizás soliciten
el esclarecimiento de algunos puntos a quien realizo la entrada.
El fallo es reproducido. Este puede que
sea el momento más importante en su ciclo vital, ya que incluso
que el fallo aun no ha sido resuelto, el hecho de que alguien
haya podido reproducirlo además de quien creo la entrada prueba
que es genuino y, no menos importante, confirma al creador
de la entrada que ha contribuido al proyecto reportando un
fallo real.
El fallo es diagnosticado: su causa
es identificada, y si es posible, es estimado el esfuerzo
requerido para repararlo. Hay que asegurarse de que todo esto
es registrado en la entrada, ya que en el case en que quien
haya hecho el diagnostico abandona el proyecto (lo cual
sucede a menudo con desarrolladores voluntarios), alguien más
debe ser capaz de continuar con su trabajo.Llegados a este punto, o a veces en uno de los anteriores,
puede que algún programador ya se haya "adueñado" de la entrada y se
lo asigne a si mismo (el proceso es examinado
en mayor detalle en en ).
La prioridad de la entrada puede que también
sea fijada en esta etapa. Por ejemplo, si el fallo es tan severo
que debería retrasar el próximo lanzamiento, debe ser identificado
desde el principio y el gestor debe proporcionar un mecanismo
para hacer esto.
La entrada es programada para su resolución. Esto no implica
necesariamente fijar una fecha para cuando debe ser resuelta.
A veces sólo significa decidir para cual próximo lanzamiento (no
necesariamente la siguiente) el fallo debe estar corregido o
decidir si debe o no bloquear un lanzamiento en particular.
Incluso nos podemos olvidar de planificar la reparación del
fallo si es algo que se puede hacer rapidamente.
El fallo es reparado (o la tarea es completada, o el
parche es aplicado o lo que sea). El cambio o conjunto de
cambios que arreglan el fallo deben ser registrados en un
comentario en la entrada, después de lo cual ésta es
cerrada o marcada como
resuelta.Existen variaciones en este ciclo. A veces el problema es cerrado
seguidamente después de ser archivado, porque resulta que no es un fallo,
sino que es un malentendido por parte del usuario. Mientras el proyecto
vaya ganando usuarios, más y más de estas entradas invalidas aparecerán,
y los desarrolladores las cerraran con respuestas cada vez menos
respetuosas. Hay que intentar protegerse de ésta tendencia, pues no le
hace ningún bien a nadie, porque el usuario en cada caso no es responsable
de las entradas invalidas previas. Esta tendencia estadísticas sólo es
divisada por los desarrolladores, no por los usuarios. (En
más adelante
en este capítulo, examinaremos algunas técnicas para reducir
el número de entradas invalidas.) También puede suceder que varios
usuarios estén experimentando el mismo malentendido una y otra vez,
lo cual significa que algún aspecto de la aplicación necesita volver
a ser diseñada. Este tipo de patrones son los más sencillos de ver
cuando se utiliza un gestor de entradas que monitorice la base de
datos de fallos. Más en
en .Otra variación muy común de este ciclo de vida es cuando la entrada
es cerrada al ser un duplicado poco después
del paso 1. Un duplicado aparece cuando alguien crea una entrada para
un problema ya conocido por el proyecto. Los duplicados no están
limitados a entradas abiertas: es posible que un fallo haya reaparecido
después de haberlo reparado (esto es conocido como regresión),
por lo cual, la vía preferida es usualmente reabrir la entrada original y
cerrar cualquier nuevo reporte como duplicado de este. El sistema
de gestión de fallo debe mantener un seguimiento de esta relación
bidimensional, de forma que la información en los duplicados este
disponible en la entrada original y vice versa.Una tercera variación es cuando los desarrolladores cierran la
entrada pensando que ya ha sido resuelta y el usuario que la ha
reportado rechaza esa reparación y es reabierta. Por lo general esto
es porque el desarrollador no tiene la capacidad de reproducir
el fallo o porque no han probado su reparación siguiendo
la misma receta para la reproducción descrita por el usuario.A parte de estas variaciones existen pequeños detalles de
este ciclo de vida que pueden variar dependiendo de la aplicación
de seguimiento. Pero la forma básica es la misma e incluso cuando
el ciclo de vida no es sólo para el software open source, tiene
implicaciones acerca de cómo los proyectos utilizan sus
sistemas de control de fallos.Implícito en el paso 1, el sistema es una cara tan publica
del proyecto, como lo pueden ser las listas de correo o las paginas
web. Cualquiera puede crear una entrada, cualquiera puede ver
una entrada y cualquiera puede navegar la lista de entradas
abiertas. De tal manera que nunca se sabe cuantas personas están
interesadas en ver el progreso en una entrada en particular. Aunque
el tamaño y la capacidad de la comunidad de desarrolladores constriñe
la frecuencia con la que los problemas son atacados, el proyecto
debe al menos intentar reconocer cada entrada mientras vayan
llegando. Incluso si el problema persiste por un tiempo, una
repuesta anima al usuario a mantenerse involucrado porque siente
que un humano ha visto lo que ha hecho (recordad que rellenar
una entrada requiere mucho más tiempo que un correo electrónico).
Incluso mejor, una vez que una entrada es vista por un desarrollador,
entra en la conciencia del proyecto, en el sentido en que este
puede mantenerse al acecho de otras instancias del mismo problema,
puede comentarlo con otros desarrolladores, etc.La necesidad de reacciones oportunas implica dos cosas:
El sistema de seguimiento debe conectarse a la lista de correos
de manera que cada cambio a una entrada, incluyendo su redacción
inicial, genere un correo describiendo lo sucedido. Esta lista
de correos es, a veces, diferente de la lista de desarrollo ya
que quizás, no todos los desarrolladores quieran recibir correos
automáticos con fallos, pero (al igual que con los correos con
cambios) la cabecera Reply-to debe ser fijada a la lista
de desarrollo.
El formulario donde se rellena la entrada debe almacenar la
dirección de correo electrónico de quien la reporta, de forma
que pueda ser contactada para solicitar más información.
(No obstante, no debe requerir la
dirección ya que algunas personas prefieren realizar el
reporte anónimamente. Más información sobre el anonimato
en
a continuación en este capítulo.Interacción con las Lista de CorreoHay que asegurarse de que el gestor de fallos no se convierte
en un foro de discusiones. Aunque es importante mantener una presencia
humana en el gestor, no está preparado para discusiones en tiempo
real. Hay que pensar en éste como un archivador, una forma de
organizar hechos y referencias a otras discusiones, principalmente
aquellas que suceden en las listas de correo.Hay dos razones por las cuales es importante hacer esta distinción.
Primero, el gestor de fallos es un sistema más engorroso que las
lista de correo (o que salas de chat). Esto no es porque estén mal
diseñados, es sólo que sus interfaces han sido diseñadas para capturar
y presentar estados discretos, no discusiones. Segundo, no todo el
mundo que este involucrado en una discusión sobre una entrada en
particular, esta revisando el gestor de fallos frecuentemente. Parte
de una buena gestión de fallos (más en
en
) está en asegurarse
de que cada problema es llevado a la atención de las personas
indicadas en lugar de requerir que todos los desarrolladores
monitoricen todos los problemas. En
en
,
veremos como asegurarnos de que la gente no desvíe accidentalmente
las discusiones de los foros apropiados hacia el sistema
de gestión de fallos.Algunos gestores pueden monitorizar listas de correos y
automáticamente registrar todos los correos que son acerca de un
problema conocido. Por lo general, hacen esto reconociendo el
número de identificación de la entrada en el asunto de los
correos, como parte de una línea especial, así los desarrolladores
pueden aprender a incluir estas lineas en sus correos para atraer
la atención del gestor. El sistema puede guardar el correo completo
o (incluso mejor) registrar un enlace al correo en el archivo regular
de la lista de correos. De cualquier forma, ésta es una habilidad
muy útil, así que si el sistema utilizado la aporta hay que utilizarla
y hay que recordarle a la gente que la utilice.Pre-filtrado del gestor de fallosMuchas de las bases de datos de fallos sufren eventualmente del mismo
problema: una cantidad devastadora de fallos duplicados o inválidos hechos
por usuarios bien intencionados pero sin experiencia o poco informados. El
primer paso para combatir esta tendencia es, por lo general, colocar un vistoso
aviso en la página principal del gestor de fallos, explicando como saber si
un bug es realmente un bug, como buscar si el bug ya está incluido y finalmente,
como reportar efectivamente si aun se cree que es un nuevo fallo.Esto reducirá el nivel de ruido por un tiempo, pero mientras el
número de usuarios vaya creciendo, el problema regresara eventualmente.
Ningún individuo puede ser culpado de esto, ya que cada uno está
intentando contribuir en beneficio del proyecto e incluso cuando
su primer reporte no sea de verdadera utilidad, se desea animarlos
para que continúen involucrándose y para que puedan hacer mejores
reportes en el futuro. Mientras tanto, el proyecto necesita mantener
en lo posible la base de datos libre de basura.Las dos cosas que tendrán el máximo efecto a la hora de prevenir
este problema son: asegurarnos de que hay gente vigilando el gestor de fallos
quienes tienen el conocimiento suficiente para cerrar problemas como
inválidos o duplicados mientras vayan llegando y requiriendo (o fomentando
duramente) a los usuarios que confirme su reporte con otras personas antes
de reportarlos en el gestor.La primera técnica parece ser utilizada universalmente. Incluso
proyectos con gigantescas bases de datos de fallos (digamos, el gestor
de Debian en
, el cual contenía 315,929 reportes
al momento de escribir este libro) siguen ordenando todo de tal manera
que todos puedan ver los reportes mientras llegan.
Puede que sea una persona diferente dependiendo de la categoría del
problema. Por ejemplo, el proyecto Debian es una colección de paquetes
de software, de manera que el proyecto automáticamente enruta cada
reporte a la persona que mantiene el paquete específico. Por supuesto,
a veces los usuarios no identifican bien la categoría a la que pertenece
el problema, con el resultado de que el reporte es enviado a la persona
equivocada, quien entonces deberá redireccionarlo. No obstante, lo
importante es que la carga sigue siendo distribuida—cada vez que
un usuario crea correcta o incorrectamente al reportar, la vigilancia
de las entradas sigue siendo distribuida más o menos uniformemente entre los
desarrolladores, de manera que cada reporte es respondido en un tiempo
justo.La segunda técnica esta menos extendida, probablemente sea porque
es más difícil de automatizar. La idea esencial es que cada nuevo
reporte es apadrinado hacia la base de datos. Cuando un usuario cree
haber encontrado un bug, se le pide que lo describa en una de las
listas de correo o en algún canal de IRC para que reciba confirmación
de alguien de que en realidad es un fallo. Al introducir este segundo
par de ojos puede prevenir muchos reportes falsos. A veces esta segunda
persona puede identificar que este comportamiento no es un fallo o que
ha sido resuelto recientemente. O puede que este familiarizado con los
síntomas gracias a problemas anteriores, evitando un duplicado
al señalar al usuario el viejo reporte. A veces es tan sencillo como
preguntar al usuario "¿Has revisado el gestor de fallos para asegurarte
de que no ha sido reportado ya?" Muchas personas no piensan en esto,
pero se contentan con hacer la búsqueda sabiendo que hay alguien
a la expectativa de que lo hagan.El sistema de apadrinamiento puede mantener la limpieza de
los reportes en la base de datos, pero también tiene algunas
desventajas. Muchas personas harán los reportes sin consultar,
al no buscar o despreocupándose de las instrucciones de buscar a un
padrino para el nuevo reporte. Aun así, es necesario que los
voluntarios sigan vigilando las bases de datos y dado que la
mayoría de los nuevos usuarios que reportan fallos no entienden
la dificultad de mantenerlas, no es justo
reprenderlos duramente por ignorar las directrices. Aun así, los
voluntarios deben ser vigilantes y ejercitar restricciones en como
se rechazan reportes sin apadrinar de vuelta a quien lo haya hecho.
El objetivo es entrenar a cada reportero para que utilice el sistema
de apadrinamiento en el futuro, de tal manera que haya una siempre
creciente fondo de gente quienes entienden el sistema de filtrado
de fallos. Al encontrarnos con un reporte sin padrino, los pasos
ideales a tomar son:
Inmediatamente responder el reporte, agradeciendo al usuario
por hacerlo, pero dirigiéndolo a las directrices de apadrinamiento
(las cuales deberían, por supuesto, estar publicadas en un lugar
prominente del sitio web.)
Si el reportes es claramente valido y no un duplicado, hay que
aprobarlo de todas formas y de esta manera que inicie su
ciclo de vida normal. Después de todo, quien ha realizado el
reporte ya ha sido informado sobre el apadrinamiento, así que
no tiene sentido perder el trabajo ya hecho al cerrarlo como
invalido.
Si el problema no es claramente valido, hay que cerrarlo, pero
solicitando que sea reabierto si reciben la confirmación por
parte de un padrino. Cuando lo hagan, deberán colocar una
referencia al hilo de confirmación (por ejemplo, una URL en
el archivo de la listas de correo).Hay que recordar que a pesar de que este sistema mejorara la proporción
señal/ruido en la base de datos de problemas a lo largo del tiempo, nunca
pondrá fin a los reportes inválidos. La única manera de evitar esto
por completo es cerrar el gestor de fallos a todos quienes no sean
desarrolladores—una cura que casi siempre es peor que la
enfermedad. Es mejor aceptar que la limpieza de reportes inválidos siempre
será una parte de la rutina de mantenimiento del proyecto e intentar obtener
la mayor cantidad de ayuda para hacerlo.Más en
en el
.IRC / Sistemas de Chat en Tiempo RealMuchos proyectos ofrecen salas de chat utilizando Internet
Relay Chat (IRC), foros donde los
usuarios y desarrolladores pueden hacerse preguntas y obtener respuestas
instantáneas. Mientras que se puede llevar un
servidor de IRC para nuestro sitio web, por lo general no vale la pena. En
cambio podemos hacer lo que todo el mundo: crear canales de IRC en
Freenode (). Freenode proporciona
el control necesario para administrar los canales IRC del proyecto,
No es un requerimiento ni tampoco se espera ninguna donación
a Freenode, pero si usted o el proyecto se lo pueden permitir, por favor
considerelo. Son una caridad exenta de impuestos en EE.UU. y proveen
de un servicio muy valioso.mientras que nos evita
la molestia de tener que mantener un servidor de IRC.Lo primero que hay que hacer es decidir un nombre para el canal. La
opción más obvia es utilizar el nombre del proyecto—si es que se
encuentra disponible en Freenode. Si no, se puede utilizar algo lo más
parecido al nombre del proyecto y que sea en lo posible, fácil de recordar.
Hay que publicitar la disponibilidad del canal en el sitio web del proyecto,
de manera que un visitante con una duda pueda verlo rápidamente. Por ejemplo,
esto aparece en un contenedor prominente en la parte de arriba de la página
principal de Subversion:
Si está utilizando Subversion, le recomendamos que se una
a la listausers@subversion.tigris.org y lea el Libro de Subversion
y el
FAQ.
También puede comentar sus dudas en IRC en el canal #svn enirc.freenode.net
Algunos proyectos tienen varios canales, uno para cada tema. Por
ejemplo, un canal para problemas de instalación, otro para dudas sobre su
uso, otro para charlas sobre el desarrollo, etc.
( en el
se discute como dividirse
en múltiples canales). Cuando el proyecto es joven, sólo debe haber un canal
en el que todos hablan juntos. Luego, mientras el proyecto vaya creciendo, la
separación de canales será necesaria.¿Cómo podrá la gente encontrar todos los canales disponibles y además,
en cuales entrar? ¿Y al entrar, cómo sabrán los criterios de la sala?La respuesta a todo esto es publicándolo en el tópico
del canal.Para establecer el tópico del
canal se utiliza el comando "/topic. Todos los comandos
en IRC empiezan con el signo "/". Si no se está familiarizado
con la utilización y administración de IRC id a .
Hay un excelente tutorial en
.
El tópico del canal es un breve mensaje que ven todos los usuarios cuando
entran en el canal. Da una guía rápida para los recién llegados y apunta a información
necesaria. Por ejemplo:
Ha entrado en #svn
El tema para #svn es Foro para usuarios de Subversion. Más información en
http://subversion.tigris.org/. || Las discusiones sobre el desarrollo
están en #svn-dev. || Por favor, no pegue transcripciones muy largas,
para ello utilice un sitio como http://pastebin.ca/ || Noticias:
Subversion 1.1.0 ha salido, más en http://svn110.notlong.com/
Es algo tosco, pero informa a quienes entran al canal lo que necesitan
saber. Dice exactamente para lo que es el canal, muestra la página
web del proyecto (en caso de que alguien entre al canal sin antes haber
visitado el sitio web del proyecto), menciona canales relacionados y
da algunas directivas sobre el pegado.Sitios de pegadoUn canal de IRC es un espacio compartido: todos pueden ver lo que
todos escriben. Normalmente esto es algo bueno, ya que permite que la
gente entre en una conversación cuando creen que tienen algo para
contribuir y permite a los espectadores aprender leyendo. Pero puede
tornarse problemático cuando alguien suministra una gran cantidad
de información a la vez, como la transcripción de una sesión de
debugging, porque al pegar muchas lineas de texto en el canal
se interrumpen las conversaciones de otros.La solución a esto es el uso de los llamados sitios de pegado
pastebin o pastebot.
Al requerir una gran cantidad de datos de alguien, pida que no los pegue
en el canal, sino que vayan a (por ejemplo) ,
peguen la información necesaria allí y suministren el nuevo URL resultante
al canal de IRC. Así cualquiera puede visitar la URL y revisar los
datos que allí se encuentran.Existen muchos sitios gratuitos de pegado disponibles, demasiados
para una lista comprensiva, pero aquí hay algunos que he utilizado:
,
,
,
,
y
.BotsMany technically-oriented IRC channels have a non-human member,
a so-called bot, that is capable of storing and
regurgitating information in response to specific commands.
Typically, the bot is addressed just like any other member of the
channel, that is, the commands are delivered by "speaking to" the bot.
For example:Muchos canales técnicos de IRC tienen un miembro no humano, un tal
llamado bot, el cual es capaz de almacenar y
regurgitar información en respuesta a comandos específicos. El bot
se parece a un miembro más del canal, esto es, los comandos se hacen llegar
"hablándole" al bot. Por ejemplo:"
<kfogel> ayita: learn diff-cmd = http://subversion.tigris.org/faq.html#diff-cmd
<ayita> Thanks!
Esto le ha dicho al bot (el cual está en el canal como ayita)
que recuerde cierto URL como la respuesta a la pregunta "diff-cmd". Ahora
podemos dirigirnos a ayita pidiendole al bot que le diga a otro usuario
acerca de diff-cmd:
<kfogel> ayita: tell jrandom about diff-cmd
<ayita> jrandom: http://subversion.tigris.org/faq.html#diff-cmd
Lo mismo puede ser logrado con un comando más corto:
<kfogel> !a jrandom diff-cmd
<ayita> jrandom: http://subversion.tigris.org/faq.html#diff-cmd
El conjunto exacto de comandos y conductas difieren entre bots. El
ejemplo anterior utiliza ayita
(), del cual
existe una instancia en #svn en Freenode. Otros
bots son Dancer
() y Supybot
(). No son necesarios privilegios
específicos en el servidor para ejecutar un bot. Un bot es un programa
cliente; cualquiera puede fijar y dirigirlo para que escuche en un
servidor/canal en particular.Si el canal del proyecto tiende a recibir las mismas preguntas
una y otra vez, recomiendo utilizar un bot. Sólo un pequeño porcentaje
de usuarios del canal adquirirán la habilidad necesaria para manejar el
bot, pero serán los que sí lo hagan quienes responderán a una cantidad
desproporcionada de preguntas, porque el bot permite que sean respondidas
con mayor eficiencia.Archivando IRCAunque es posible archivar todo lo que sucede en los canales de
IRC, no es algo necesario. Las conversaciones en IRC pueden ser
públicas, por lo que muchas personas piensan en ellas como conversaciones
informales semi-privadas. Los usuarios puede que no cuiden la gramática
y a veces expresen opiniones (por ejemplo, acerca del software o sobre
otros desarrolladores) que no querrán que sean preservadas eternamente
en un archivo en línea.Por supuesto que existen extractos que deberían
ser preservados. Muchos de los clientes de IRC pueden registrar conversaciones
a un fichero bajo demanda por el usuario, o si esto falla, se puede
copiar y pegar la conversación del IRC a otro foro permanente
(a menudo, el bug tracker). Pero el registro indiscriminado puede incomodar
a algunos usuarios. Si se archiva todo, hay que declararlo claramente en el
tópico del canal y proporcionar una URL del archivo.WikisUn wiki es un sitio web que permite a
cualquier visitante editar o extender su contenido; el término "wiki"
(una palabra Hawaiana que significa "rápido" o "super-rápido") también
es usado para la aplicación que permite este tipo de edición. Los wikis
fueron inventados en 1995, pero su popularidad alzo vuelo a partir del
año 2000 o 2001, impulsado parcialmente por el éxito de la Wikipedia
(), un enciclopedia de contenido
libre basada en un wiki. Imaginemos un wiki como algo entre IRC y las
páginas web: los wikis no trabajan en tiempo real, así que la gente tiene
la posibilidad de deliberar y pulir sus contribuciones, pero a la vez son
muy sencillos de utilizar, facilitando más la edición que una página
web.Los wikis no son aun equipamiento estándar para los proyectos
open source, pero probablemente pronto lo serán. Dado que son una
tecnología relativamente nueva y la gente aún experimenta con las
diferentes maneras de utilizarlos, sólo ofreceré algunas precauciones
—llegados a este punto, es más fácil analizar los usos equivocados
de los wikis en lugar de analizar sus exitos.Si decide ofrecer un wiki, hay que poner un gran esfuerzo en
tener una organización clara de las paginas y un diseño visual
atractivo, de manera que los visitantes (p.e. editores potenciales)
instintivamente sepan como incluir sus contribuciones. Igual de
importante, hay que publicar estos estándares en el mismo wiki,
de manera que la gente tenga un lugar a donde ir en busca de
orientación. Muy a menudo, los administradores de los wikis caen
en la trampa de creer que porque hordas de visitantes añaden
individualmente contenido de alta calidad al sitio, el resultado
de todo esto debe ser también de la más alta calidad y esto no es
como funcionan los sitios web. Cada página individual o párrafo
puede que sea bueno al ser considerado individualmente, pero no
será tan bueno si está encuadrado dentro de un todo desorganizado
o confuso. Demasiadas veces, los wikis sufren de:Falta de principios de navegación.
Un sitio web bien organizado hace que los visitantes se sientan
como si supieran donde se encuentran en todo momento. Por ejemplo,
si las paginas están bien diseñadas, la gente puede intuir las
diferencias entre una región con la "tabla de contenidos" y otra
con el contenido. Los contribuyentes del wiki respetarán tales
diferencias también si y solo si las diferencias están presentes.Información duplicada.
Frecuentemente los wikis acaban con diferentes páginas
con información similar, porque los contribuyentes
individuales no se han dado cuenta de la duplicidad. Esto
puede ser una consecuencia de la falta de principios de
navegación mencionados antes, en que la gente puede que
no encuentre contenido duplicado si este no se encuentra donde
esperaban encontrarlo.Audiencia objetivo inconsistente.
Hasta cierto punto este problema es inevitable cuando existen
tantos autores, pero puede ser ralentizado si existen guías
escritas acerca de como crear nuevo contenido. También ayuda
editar nuevas contribuciones al principio dando un ejemplo a
seguir de manera que los estándares se vayan asentando.La solución más común para todos estos problemas es el mismo:
tener estándares editoriales y mostrarlos no sólo publicándolos sino
que editando paginas y adheriendose a estos. En general, los wikis
amplificaran cualquier fallo en el material original, ya que los
contribuyentes imitaran cualquier patrón que vean. No sólo hay que
configurar el wiki y esperar que todo funcione a la perfección. Se
debe preparar con contenido bien escrito, de manera que la gente
tenga una plantilla que seguir.El ejemplo más brillantes de un wiki bien llevado es la
Wikipedia, aunque esto sea parcialmente a que el contenido
(artículos enciclopédicos) sea idóneo para el formato del wiki.
Pero si se examina la Wikipedia en profundidad verá que sus
administradores han establecido unas fundaciones muy
estrictas para las contribuciones. Existe una extensa documentación
acerca de como añadir nuevo contenido o de como mantener un punto
de vista apropiado, los tipos de ediciones que hacer (involucrando
varios grados, incluyendo una eventual moderación) y así sucesivamente.
También tienen controles de autorización, de manera que si una página
es el objetivo de ediciones inapropiadas, pueden bloquearla hasta
que el problema sea resuelto. En otras palabras, no pusieron unas
cuantas plantillas en un sitio web y se sentaron a esperar. La
Wikipedia funciona porque sus fundadores pensaron cuidadosamente
acerca de como conseguir que cientos de contribuyentes pudieran
adaptar sus escritos a una visión común. Aunque puede que no
necesite de toda esta preparación al montar un wiki para un
proyecto de software libre, está bien emular el espíritu.Para más información acerca de los wikis visitad
.
El primer wiki sigue vivo y coleando y contiene mucha información
sobre los wikis:
,
, y
para
varios puntos de vista.Sitio WebNo hay mucho que decir acerca de los aspectos técnicos del sitio
web del proyecto: montar un servidor web y crear las páginas web son
tareas sencillas, y los aspectos más importantes acerca del diseño y
contenido ya han sido tratados en capítulos anteriores. La principal
función del sitio web es ofrecer una visión general clara y unir las
otras herramientas (Sistema de control de versiones, gestión de fallos,
etc.). Si no se tiene la experiencia suficiente para configurar un
servidor web, no será difícil encontrar a alguien que pueda hacerlo
y desee ayudar. Sin embargo, para ahorrar tiempo y esfuerzos, es
preferible utilizar uno de los sitios web enlatados.Soluciones de hospedajeExisten dos ventajas importantes de utilizar sitios preparados. La
primera es la capacidad y ancho de banda del servidor. Sin importar cuan
exitoso pueda a llegar a ser el proyecto, el espacio en disco no se va
a acabar y la conexión no se verá superada. La segunda ventaja es sencillez.
Estos sitios ya han seleccionado un gestor de fallos, un sistema de control
de versiones, un gestor de listas de correos, archivador y todo lo que sea
necesario para llevar un sitio web. Ya han configurado las herramientas
y se realizan los respaldos necesarios de los datos almacenados por
estas. No es necesario tomar decisiones. Sólo es necesario rellenar un
formulario, presionar un botón y se tiene un sitio web así de fácil.Estos son beneficios muy significativos. La desventaja, por
supuesto, es que se debe aceptar sus opciones
y configuraciones, incluso si algo diferente sería mejor para el
proyecto. Por lo general, estos sitios se pueden ajustar bajo ciertos
parámetros pero nunca se obtendrá el control total que se tendría
si se hubiera hecho en casa teniendo acceso de administrador al
servidor.Un ejemplo perfecto de esto es la gestión de los ficheros generados.
Ciertas paginas web del proyecto puede que sean ficheros creados—por
ejemplo, existen sistemas para mantener los datos del FAQ en un formato
fácil de modificar, desde el cual se pueden generar ficheros HTML, PDF y
otros formatos. Al igual como se explica en
anteriormente en este capítulo, no se desean diferentes versiones
de los formatos generados, sólo del fichero maestro. Pero cuando el sitio
web está hospedado en el servidor de otra persona, puede que sea imposible
crear un hook personalizado que permita regenerar la versión HTML pública
cada vez que el fichero maestro del FAQ sea modificado. La única solución
es tener diferentes versiones de los ficheros generados de manera que
aparezcan en el sitio web.Pueden haber consecuencias más importantes también. Puede que no se
tenga el control sobre la presentación deseado. Algunos sitios de
hospedaje permiten editar las páginas web, pero el diseño original
del sitio termina apareciendo en diversas formas. Por ejemplo, algunos
proyectos hospedados en Sourceforge tienen páginas web totalmente
personalizadas pero apuntan los enlaces a la página web de Sourceforge
para más información. La página en Sourceforge sería la página
principal del proyecto si no se hubiera utilizado una personalizada. La
página de Sourceforge tiene enlaces al gestor de fallos, repositorio CVS,
descargas, etc. Desafortunadamente, una página en Sourceforge también
contiene una gran cantidad de ruido de fondo. La parte superior es un
anuncio en banner, por lo general, una animación. El lado izquierdo es
un arreglo vertical de enlaces con poca relevancia para alguien interesado
en el proyecto. El lado derecho es por le general más publicidad. Sólo
el centro de la página es dedicado a material específico del proyecto e
incluso esto esta organizado de forma confusa lo cual hace que los visitantes
no estén seguros de donde pulsar a continuación.Detrás de cada aspecto individual del diseño de Sourceforge existe
sin lugar a dudas una buena razón—buena desde el punto de vista
de Sourceforge, como la publicidad. Pero desde el punto de vista individual
del proyecto el resultado puede que sea una página web alejada de la
ideal. No es mi deseo criticar a Sourceforge; estas mismas preocupaciones
se aplican a muchos de estos sitios de hospedaje. El punto es que hay que
hacer un sacrificio. Se obtiene el alivio de los aspectos técnicos de
llevar el sitio del proyecto, pero con la condición de aceptar la
forma de llevarlo de otra persona.Sólo usted puede decidir acerca de cual sitio de hospedaje es
el mejor para el proyecto. Si se decide utilizar un sitio de hospedaje,
deje abierta la posibilidad de cambiar a un servidor propio más adelante
utilizando nombres de dominio personalizados para la página principal
del proyecto. Se puede remitir el URL al sitio hospedado o tener una
página totalmente personalizada detrás de la URL pública y llevar
a los usuarios al sitio hospedado para funcionalidades más sofisticadas.
Sólo asegúrese de organizar las cosas de manera que si decide cambiar
de solución para el hospedaje, la dirección del proyecto no deba ser
modificada.Escoger un sitio de hospedajeEl sitio de hospedajes más grande y conocido es SourceForge. Otros dos sitios
que proveen los mismos servicios sonsavannah.gnu.org y BerliOS.de. Algunas organizaciones,
como Apache Software
Foundation y Tigris.orgDisclaimer:
Soy empleado de CollabNet, la cual patrocina
Tigris.org, y lo utilizo regularmente.,
ofrecen hospedaje a proyectos open source que encajan su misión y su
comunidad con proyectos ya existentes.Haggen So ha hecho una evaluación exhaustiva de varios sitios
de hospedaje como parte de su investigación para su tesis de
doctorado titulada Construcción of an Evaluation Model for Free/Open Source
Project Hosting (FOSPHost) sites. Los resultados se encuentran
en , y en
hay un gráfico
comparativo.Anonimato y participaciónUn problema que no está estrictamente limitado a los
sitios de hospedaje pero que usualmente se encuentra en estos,
es el abuso de sus funcionalidades de login. La funcionalidad
es suficientemente sencilla en si misma: el sitio permite a cada
visitante registrarse con un nombre de usuario y contraseña. A partir
de ahí mantiene un perfil para este usuario de manera que los
administradores del proyecto puedan asignar ciertos permisos a este
usuario, por ejemplo, el derecho de enviar cambios al repositorio.Esto puede ser extremadamente útil y de hecho es una de las
principales ventajas de los sitios de hospedaje. El problema es que
a veces, el login de los usuarios termina siendo requerido para tareas
que deberían ser permitidas para visitantes anónimos, especialmente
la habilidad de añadir bugs en el gestor de fallos o comentar en
bugs ya existentes. Al requerir que sólo sean usuarios registrados
quienes puedan llevar a cabo estas acciones, el proyecto eleva la vara
de participación para lo que debería ser algo rápido y conveniente. Por
supuesto, se desea poder contactar con alguien que ha introducido algún
dato en un bug en el gestor de fallos, pero sólo con tener un campo
donde introducir la dirección de correo electrónico (opcional) debería
ser suficiente. Si un nuevo usuario encuentra un fallo y desea reportarlo,
se verá molestado por tener que rellenar un formulario para crear una
nueva cuenta antes de poder introducir el fallo. Puede que simplemente
decida no hacerlo después de todo.Las ventajas de la gestión de usuarios generalmente superan
las desventajas. Pero si se pueden escoger cuales acciones pueden
ser hechas anónimamente, asegúrese no sólo de que todas
las acciones de sólo lectura sean permitidas a visitantes sin registro,
pero también algunas acciones de introducción de datos, especialmente
en el gestor de fallos y, si se tiene, en el wiki.