02 septiembre 2009

Gestión de tareas o incidentes con trac y eclipse

Algo que no me gusta de usar trac, bugzilla, mantis u otro sistema de gestión de incidentes es que todos tienen interfaz web, y eso implica loguearse, navegar hasta un incidente y recién entonces editarlo. Muchas veces encontrar el incidente implica realizar muchas veces este proceso. Por estos motivos en general siempre veo que los incidentes terminan siendo monitoreados por los Project Leaders o alguna otra persona que termina invirtiendo su tiempo en averiguar el estado de las tareas e irlo actualizando. Es así que seguí buscando hasta dar con una combinación que me gustó: Mylyn + Trac.

Hace tiempo había escuchado de Mylyn para eclipse, pero nunca había podido probarlo ni tampoco había encontrado mucha documentación. Ahora conseguí hacerlo funcionar con el Trac. Es un proceso muy sencillo y hace que uno se sienta a gusto con su uso.

Lo primero es tener instalado el eclipse (yo tengo la versión 3.4 del eclipse classic) y un trac (http://trac.edgewall.org). Los pasos para instalar el plugin de eclipse son:
  1. Ir a actualizaciones (help -> software updates...)
  2. Ir a Available software
  3. Add site
  4. Agregar: http://download.eclipse.org/tools/mylyn/update/e3.4 y http://download.eclipse.org/tools/mylyn/update/extras (verificar que lo agregue a la lista de Available software, si no, es posible que haya que marcarlo en Manage sites)
  5. Buscar y marcar Mylyn connector: Trac
  6. Install
  7. Si no tenían instalado Mylyn, les va a instalar también las dependencias
Luego de esto habrá que reiniciar el eclipse. La lista de tareas de mylyn hay que habilitarla:
  • window -> show view -> other...
  • Tasks -> task list
La lista de tareas es muy fácil de usar, pero lo que quiero aclarar es como conectarse con trac, y para esto lo primero es agregar un "Task repository" (buscar entre las acciones de la lista de tareas). Seleccionar trac y seguir las instrucciones. Si buscan entre las opciones avanzadas se puede configurar un proxy (es útil si hay que conectarse a una vpn, pero ese es otro asunto). Prueben primero validar la conexión, y si hicieron las cosas bien, ya tendrían disponible sus tareas.

Ahora sólo falta un paso más, que es definir una Query para obtener las tareas. Ahí pueden definir con qué criterios obtener las tareas (por defecto no van a ver ninguna). Se pueden definir tantos queries como sean necesarios. Y eso es todo. Ahora si pueden gestionar sus tareas de trac desde eclipse. Y realmente ahorra mucho tiempo.

Quizás después explique un poco mi experiencia usando la herramienta, pero por ahora sólo publico la guía del usuario que está fácil de seguir y con imágenes: http://wiki.eclipse.org/index.php/Mylyn/User_Guide

09 diciembre 2008

Dual screen

Bueno, algo que pensé que era dificil lo tengo funcionando, el comando que me funcionó fue este:
sudo aticonfig --initial=dual-head --screen-layout=right --resolution=0,1680x1050 --mode2=1280x800 -v
Probé otras cosas y después tuve que retocar el archivo /etc/X11/xorg.conf a mano porque hubo algunas cosas que no las podía cambiar una vez configuradas (mal, por error mío) con el aticonfig.
Por suerte cada comando aticonfig genera un backup, así que se puede probar sin riesgo.
Otro detalle más: La resolución me quedó igual en ambos monitores (1280x800), así que tuve que cambiar el de más resolución a mano desde el menú de sistema de Ubuntu
Una página que me sirvió de envión: http://www.xaprb.com/blog/2007/08/10/how-to-set-up-dual-monitors-in-ubuntu-on-dell-inspiron-1501
Y algunos comentarios en: http://www.ubuntu1501.com/2008/03/ubuntu-hardy-heron-804.html

03 julio 2008

Host virtuales para symfony (falta pulir un poco)

Crear un Virtual Host para Symfony.
Para esto hay que tener habilitado mod_rewrite: en Ubuntu hay que crear un link simbólico de /etc/apache2/mods-available/rewrite.load a /etc/apache2/mods-enabled/rewrite.load
El código de mi vhost en /etc/apache2/sites-enabled y también debe estar en /etc/apache2/sites-available (ambos pueden ser links simbólicos a un archivo en otro lado)
NameVirtualHost symfony:80

<virtualhost symfony:80>
ServerAdmin admin@localhost
ServerName symfony
DocumentRoot /home/user/symfony/

Alias /web/sf /usr/share/php5/symfony/data/web/sf  
<Directory "/usr/share/php5/symfony/data/web">
AllowOverride All
Options FollowSymLinks +Indexes
Order allow,deny
Allow from all
</Directory>

<Directory /home/user/symfony/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/errorSymfony.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined
ServerSignature On
</virtualhost>
Lo importante son los AllowOverride All

02 julio 2008

Actualización de Symfony a 1.1

Bueno, con la actualización de symfony a 1.1 tuve algunos inconvenientes, pero nada que no se pueda solucionar leyendo el manual:
http://www.symfony.es/documentacion/actualizacion-de-symfony-10-a-symfony-11/

Vi que hay varios cambios, por lo que recomendaría a cualquiera que tenga un proyecto funcionando de hace tiempo, que tome precauciones antes de actualizar.
Lástima que ahora sólo funciona para php 5.1 o superiores, pero por suerte no voy a tener problema con mis proyectos, ya que hace rato que uso la versión 5 de php.

Yo apuesto por Symfony

Después de varios golpes con Java, demasiadas cosas para leer y aprender, muchas líneas de configuración, llegué a la decisión de que no vale la pena usar y escribir tanto código cuando la funcionalidad del sistema no lo requiere. Al final es como dice la frase: "En Java lo difícil es posible y lo fácil es difícil". Así que para lo fácil, opté por Symfony, donde lo fácil es fácil y lo relativamente complejo también es fácil.
Para empezar:
Mi sistema: Ubuntu 8.04
Requerimientos previos:
sudo apt-get install php5 apache2 libapache2-mod-php5 mysql-server php-pear
Instalar symfony:
pear channel-discover pear.symfony-project.com
pear install symfony/symfony
Autocompletar para bash: Crear el archivo /etc/bash_completion.d/symfony con este contenido:
_symfony()
{
local cur prev action
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
action=${COMP_WORDS[1]}

case "$prev" in
"init-module"|"propel-generate-crud"|"propel-init-crud"|"propel-init-admin"|"generate:module"|"propel:generate-crud"|"propel:init-admin")
COMPREPLY=( $( compgen -W "$( ls -1 apps 2>/dev/null | sed -e 's/ /\\ /g' | sed -e 's/\/$//g' )" -- $cur ) )

return 0
;;

"init-project"|"generate:project")
COMPREPLY=( $( compgen -W "$( pwd | perl -pe "s/^.*?([^\/]+)$/\$1/g" )" -- $cur ) )

return 0
;;

"init-app"|"generate:app")
COMPREPLY=( $( compgen -W "frontend backend" -- $cur ) )

return 0
;;

"sync")
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W 'go' -- $cur))
fi

return 0
;;

*symfony)
SYMFONY_VERSION=$( $prev -V | sed 's/^symfony version //g' | awk -F '.' '{print $1 "." $2;}' )

case "$SYMFONY_VERSION" in
0.*)
# Versions less than 1.0 are not supported.
COMPREPLY=()
;;

"1.0")
COMPREPLY=( $( compgen -W "$( $prev -T | awk '/^ /' | cut -d ' ' -f 3 )" -- $cur ) )
;;

*)
COMPREPLY=( $( compgen -W "$(
NAMESPACE=''
OLD_IFS=$IFS

IFS=$'\n'
for line in $( $prev -T ); do
if [ $line != 'Available tasks:' ]; then
if [ ${line:0:2} == ' ' ]; then
TASK=$(echo $line | awk -F ':' '{print $2;}' | cut -d ' ' -f 1)
if [ -z $NAMESPACE ]; then
echo $TASK
else
echo $NAMESPACE:$TASK
fi
else
NAMESPACE=$line
fi
fi
done

IFS=$OLD_IFS
)" -- $cur ) )

# Work-around bash_completion issue where bash interprets a colon as a separator.
# Work-around borrowed from the darcs work-around for the same issue.
local colonprefixes=${cur%"${cur##*:}"}
local i=${#COMPREPLY[*]}
while [ $((--i)) -ge 0 ]; do
COMPREPLY[$i]=${COMPREPLY[$i]#"$colonprefixes"}
done
;;
esac

return 0
;;

*)
case "$action" in
"propel-generate-crud"|"propel-init-crud"|"propel-init-admin"|"propel:generate-crud"|"propel:init-admin")
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W "$( find lib/model -maxdepth 1 -name '*.php' -exec basename '{}' '.php' ';' | grep -v 'Peer$' | tr [:upper:] [:lower:] )" -- $cur ) )
elif (($COMP_CWORD == 4)); then
COMPREPLY=( $( compgen -W "$( find lib/model -maxdepth 1 -name '*.php' -exec basename '{}' '.php' ';' | grep -v 'Peer$' )" -- $cur ) )
fi

return 0
;;
esac

return 0
;;
esac

return 0
}

complete -F _symfony symfony
Para desarrollar con Eclipse:
Symfoclipse

07 octubre 2007

Ubuntu, compiz-fusion, java y swing

Una de las primeras cosas que quería hacer cuando me empecé a mudar a Linux, fue impresionar a mi familia con los espectaculares efectos de compiz. Luego apareció compiz-fusion y se quedaron mudos.
Más allá de eso, mi intención era desarrollar en linux y lo primero que hice fue instalar la jdk de java y el eclipse con subversion. Bajé mi proyecyo java y me llevé la sorpresa de que la interfaz hecha en Swing no andaba. La pantalla se veía en blanco... mi primer pensamiento fue ¿no se suponía que java es multiplataforma?
Pero después recordé que alguna vez me habían funcionado estas interfaces en Ubuntu, así que empecé a investigar y descubrí que el problema venía de la instalación de compiz-fusion en mi notebook siguiendo los pasos de http://ubuntu1501.blogspot.com/2007/08/compiz-fusion-in-fiesty-with-xgl.html
En realidad el problema no es la guía sino XGL. Para solucionarlo seguí las instrucciones de http://edgjavier.wordpress.com/2006/11/19/haciendo-que-beryl-y-java-swing-funcionen/ que también están en http://ubuntuforums.org/showthread.php?t=252594
Esto solucionó el problema y ahora estoy terminando la aplicación

01 octubre 2007

Time tracking

Llevar la cuenta del tiempo dedicado a cada proyecto suele no ser fácil para un desarrollador que tiene varios proyectos en mente. Por esto decidí recurrir a algún administrador que me permita tener el control de las horas dedicadas a cada proyecto.
Si bien había escuchado que el KArm es muy bueno, decidí inclinarme por algún programa del entorno Gnome pues no quería tener que tener cargadas en memoria cosas del entorno kde en un programa que estuviera corriendo constantemente en mi pc. Ah, un dato que olvidé mencionar: estoy usando Ubuntu...

Empecé con el gtimer que parecía bastante bueno hasta que intenté hacer un reporte en html y me dió un segmentation fault y perdí todas las tareas y proyectos que había configurado.

Luego pasé a probar el Gnome Time Tracker (http://gttr.sourceforge.net/) que si bien no me gustó del todo la interfaz, es al único que le funcionaron los reportes. Lo que figura en Diary Entry es en lo que se está trabajando, y debajo se pueden agregar notas. Le falta alguna forma de quedar funcionando de forma poco intrusiva, por ejemplo en la barra de tareas.

Sin duda el premio a la mejor interfaz lo lleva el gtimelog (http://mg.pov.lt/gtimelog/), sin embargo no me gustó no poder cambiar facilmente el tiempo restante de trabajo, ya que mis horario es de 6 horas y por defecto está para 8 horas. Tampoco me anduvieron los reportes, pero me pareció genial la integración con el escritorio ubuntu ya que muestra en la barra de tareas un reloj con el tiempo de trabajo en la tarea actual.

A la hora de decidir, los reportes pesan mucho, así que voy a elegir el Gnome Time Tracker. Seguramente con el uso le descubra alguna cosa nueva, así que voy a actualizar o comentar con alguna novedad.