Archive for the ‘General’ Category

Dzign.us: 50 impresionantes muestras de arte callejero 3D

Viernes, Julio 2nd, 2010


50 impresionantes muestras de arte callejero 3D

6 mitos sobre la productividad personal

Martes, Enero 13th, 2009

Que bueno si esta lista sobre productividad personal se tomara un poquito más en cuenta.

Consola de Javascript sucia y rápida

Viernes, Agosto 8th, 2008

Ya se que existe firebug en todas su variantes, pero a veces es necesario un parchecito rapidito para los navegadores que no lo utilicen, o simplemente porque es divertido.

El código javascript:

function ejecutarJS(strSentencia, idResultado){
			var resultado = eval(strSentencia);
			document.getElementById(idResultado).innerHTML = 
			document.getElementById(idResultado).innerHTML + resultado;
		}

HTML:

<div id="boxConsola">
		<div id="jsConsola">
		<p>
			<textarea id="jsConsulta" ></textarea>
		</p>
		<p>
			<input type="button" value="Ejecutar" onClick="ejecutarJS(document.getElementById('jsConsulta').value, 'jsResultado');" />
			<input type="button" value="Borrar" onClick="document.getElementById('jsConsulta').innerHTML = '' ; document.getElementById('jsResultado').value = '' ;"
		</p>
	</div>
 
	<div id="jsResultado">
	</div>
</div>

Y finalmente, el CSS Mágico:

#boxConsola {
	position:absolute;
	bottom:0px;
	padding: 10px;
	right:0px;
	width: 660px;
	border: 1px solid #ABB0B4;
}
	/* estas cosas que hay que hacer por IE... */
	body > div#boxConsola {
		position: fixed;
	} 
 
	#jsConsola {
		width: 205px;
		float: left;
	}			
 
		#jsConsulta {
			width: 200px;
			height: 100px;
		}
 
	#jsResultado {
		width: 452px;
		height: 120px;
		float: right;
		border: 1px solid #ABB0B4;
		background-color: #EDEDED;
	}

Obviamente, como práctico, nada. Y el demo se los debo, poner una consola de javascript en un servidor es como poner un cartel invitando a hacer maldades :P .

Guía de instalación de Trac – Parte II

Jueves, Junio 5th, 2008

En el post anterior hablábamos sobre como instalar Trac en su aspecto más básico. En esta entrega veremos algo un poco más detallado.

Plugins y aspectos varios

Instalación de plugins

La mayoría de los plugins que agreguemos a nuestros proyectos tienen el siguiente esquema de instalación:

  • Descargar el plugin.
  • Descomprimir en un directorio temporal.
  • Asignarle permisos de ejecución al archivo setup.py.
  • Ejecutar [code]# python setup.py install[/code]
  • Reiniciar apache.

De no seguir este esquema, en la página de descarga del plugin deberían estar las instrucciones para instalarlo ;)

Usuarios y permisos

Si estamos trabajando en un proyecto grande, seguramente en el estarán involucrados una gran cantidad de usuarios y jerarquias, es por eso que es vital una buena configuración de usuarios y permisos para una correcta armonía del trabajo en grupo.

Mediante un plugin llamado TracAccountManager podremos configurar todos estos aspectos; usuarios, claves, grupos y permisos. Luego veremos como afilar esto último por medio de otro plugin, pero partamos desde el comienzo.

Lo activaremos desde la sección Plugins en la administración de Trac y le dejaremos la siguiente configuración:

De esta manera habilitaremos la sección de administración de usuarios, sesiones(ya no es necesario el htpasswd), métodos de autenticación por html en vez de http y el módulo de login vía web. Opcionalmente puede habilitarse el módulo RegistrationModule para permitir nuevos usuarios, pero generalmente es innescesario, a menos que el proyecto sea público.

Ahora debemos deshabilitar el modulo trac.web.auth(LoginModule) de la sección principal de la administración de plugins, ya que no lo volveremos a necesitar.

En httpd.conf comentamos la linea Require valid-user y de esta manera dejamos inhabilitada la autenticación vía http.

[code]<LocationMatch "/proyectos/[^/]+/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/trac/trac.htpasswd
# Require valid-user
</LocationMatch>
[/code]

Por último, debemos cambiar unas lineas en trac.ini para que tome los nuevos cambios

[code][account-manager]
#generated_password_length = 8
hash_method = HtDigestHashMethod
#password_file = /var/trac/trac.passwd
password_store = SessionStore

[components]
acct_mgr.admin.accountmanageradminpage = enabled
acct_mgr.api.accountmanager = enabled
acct_mgr.htfile.htpasswdstore = disabled
acct_mgr.web_ui.accountmodule = enabled
acct_mgr.web_ui.loginmodule = enabled
acct_mgr.db.SessionStore = enabled
acct_mgr.pwhash.htdigesthashmethod = enabled
acct_mgr.pwhash.htpasswdhashmethod = enabled

[/code]

Antes de desloguearnos de Trac para probar nuestro nuevo módulo de autenticación, crearemos un usuario de prueba con los permisos de administrador, ya que el usuario admin que teniamos creado anteriormente, no existe más al haber desactivado htpasswd.

En la sección Permissions:

Click en Add y ya tendremos a nuestro admin de vuelta en carrera ;)

Solo nos queda reiniciar apache para que tome todos los cambios.

Nota: Trac maneja una extensa variedad de permisos, aquí puede verse una lista completa de estos permisos para usuarios y grupos.

Afilando permisos

Antes hablábamos de atornillar firmemente la base de este sistema. Los permisos que maneja Trac son a nivel global, es decir, ciertos usuarios/grupos pueden acceder o no a ciertas áreas del sistema. ¿Pero que pasa en el caso especifico de los tickets?. Tal vez yo, como administrador de un proyecto, quisiera poder asignar tickets a ciertas personas o grupos, pero que estos tickets no puedan ser vistos por otros usuarios. Y quisiera también que la única persona que pueda cerrar el ticket sea la persona a quien le asigné este ticket, o, solo yo.

En este caso entra en juego un plugin llamado TracPrivateTickets el cual es bastante simple de usar(una vez que nos acostumbramos a los permisos globales del sistema). Este agregado se encarga justamente de este tema.

Lo único que tenemos que hacer es instalarlo(y activarlo) y editar el archivo de configuración de trac, agregando lo siguiente:

[code][components]
privatetickets.policy.privateticketspolicy = enabled

[privatetickets]
group_blacklist = anonymous, authenticated, labusers

[trac]
permission_policies = PrivateTicketsPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy
permission_store = DefaultPermissionStore[/code]

Este plugin agrega tres nuevos permisos principales: TICKET_VIEW_REPORTER, TICKET_VIEW_CC, y TICKET_VIEW_OWNER. TICKET_VIEW_SELF es un alias para los tres anteriores.

Luego tenemos permisos para grupos: TICKET_VIEW_REPORTER_GROUP, TICKET_VIEW_CC_GROUP, y TICKET_VIEW_OWNER_GROUP.

Con esto ya podemos tener un control absoluto sobre cada ticket, veremos como más adelante este plugin se vuelve un elemento vital en nuestros proyectos.

Integración absoluta con subversion

Hasta aquí hemos visto aspectos generales de este sistema de administración de proyectos, pero nos queda pendiente el último punto, el plato fuerte. Consideremos la siguiente situación; un desarrollador de nuestro proyecto ha sido asignado a ciertos tickets, bugs, mejoras, etcetera. Nuestro desarrollador trabaja semanas sobre su branch en el repositorio hasta que decide que los cambios están listos para pasar a trunk. De la manera normal, el desarrollador haría el merge y luego tendría que entrar a la interfaz web para cerrar estos tickets a los que está asignado. Pero, ¿No sería ideal que el desarrollador pueda cerrar los tickets directamente desde estos commits? así evitariamos la molestia de haber olvidado el cerrar estos tickets. Ni hablar de haber hecho la busqueda, entrado a cada ticket y cerrarlo uno a uno.

Aquí es donde entra en juego TracSVNPolicies. Este plugin nos brinda una interfaz web a lo que llamamos ganchos o hooks contra svn. Mediante estos hooks podemos especificar acciones antes y después de un commit, por lo tanto, luego de un commit, nuestro gancho podría avisarle a Trac de cerrar tal o cual ticket como resuelto, o referenciando a otros tickets. Las posibilidades son infinitas, pero en lo que respecta a nuestra actual situación, cubriremos una configuración minima(pero sólida y estable) para satisfacer esta necesidad.

Requisitos:

  • Descargar, instalar y activar el plugin (en este caso debemos hacer un checkout) [code]svn co http://code.optaros.com/svn/oforge/trunk/plugins/svnpoliciesplugin/[/code]
  • Descargar el gancho principal provisto por Trac(click en Original Format).

Debemos crear el archivo /etc/svnpolicies con el siguiente contenido

[code][paths]
python_path = /usr/local/lib/python2.5/site-packages
trac_base_dir = /var/trac
[/code]

trac.ini

[code][components]
svnpolicies.* = enabled
svnpolicies.plugins.* = enabled

[svnpolicies]
...
svnlook = /usr/bin/svnlook
svnnotify = /usr/bin/svnnotify
trac_post_hook = /usr/local/bin/trac-post-commit-hook
[/code]

No olvidemos verificar que svnlook y svnnotify se encuentran instalados y que trac_post_hook apunte al trac-post-commit-hook descargado desde Trac.

Ahora tenemos disponible(previo reinicio de apache) una nueva sección en el panel de administración.

Habilitando el módulo Trac Commands tendremos ahora disponible poder cerrar tickets desde cada commit del svn con sintaxis como la que se encuentra en el siguiente log:

[code]Problema blah con la caracteristica blah fue resuelto con el esquema blah. closes #23 [/code]

Comandos: close, closed, closes, fix, fixed, fixes. Estos comandos cierran un ticket, mientras que references, refs, addresses, re, see dejan agregar notas al ticket sin cerrarlo(porque no todos los commits cierran tickets, de hecho, es lo que menos sucede). Pueden personalizarse estos comandos(por ejemplo, traducirlos al castellano) editando el archivo trac-post-commit-hook.

Nota: ante cualquier eventualidad, recordar verificar permisos tanto en /var/trac como en /var/svn antes de desesperarse ;)

Más información:

Página principal de Trac
Documentación en Inglés
Plugins