Archive for Mayo, 2009

Windows, su estabilidad y rendimiento

Posted on Mayo 29th, 2009 in Sistemas operativos, Windows | 8 Comments »

Esta claro que no todas las decisiones en compañías como Microsoft se toman para beneficio del usuario. He probado contemporáneamente con la salida de cada una de las versiones de Windows desde el 3.11 hasta el Actual 7 RC. No todos los Windows fueron un éxito y algunos siquiera llegaron a ser un sistema estable y depurado.  Tal fue el caso del bochornoso Windows ME que era totalmente inestable, con el cuál era imposible trabajar. Fue por eso que muchos de nosotros en aquel momento optamos por Windows 98 para jugar o por su compatibilidad de Hardware; o por Windows 2000 para trabajar, el que si bien era menos compatible, era mucho más estable y productivo.

En la actualidad nos encontramos con una situación similar donde tenemos un sistema operativo bien logrado, maduro y estable como lo es Windows XP, y un sistema operativo prácticamente reescrito como lo es Vista, el cual no logra alcanzar mis expectativas de estabilidad y por sobre todo rendimiento.

Es importante destacar que cuando se analiza el rendimiento de cualquier software, el análisis debe hacerse sobre un hardware acorde a la época en que fue lanzado dicho soft. Es injusto para un sistema operativo contemporáneo intentar correrlo con Hardware tan viejo como de hace 3 años, ya que un nuevo sistema implica un diseño de software nuevo, pensando en que se tendrá más recursos del equipo informático. Ésta es una visión que un usuario retail no tiene simplemente porque es ajeno al proceso de diseño del software. Está claro que tanto Windows Vista como Windows 7 fueron pensados para necesitar más potencia del equipo. De todas maneras esto no justifica el tan bajo rendimiento de Windows Vista; necesitar significa que ahora utilizarán mas memoria, más poder de procesamiento y hasta aceleración grafica, ya sea para colocar mas características en el escritorio, cachear ciertos elementos (acelerando en algunas situaciones los accesos a algunas características) o bien para incorporar gadgets innecesarios. Pero esto es así señores, sólo traten de correr hoy en día en un equipo contemporáneo Windows 3.11, con Microsoft Works, simplemente volará, eso no quiere decir que Windows 3.11 sea “mejor” que Windows XP.

Respecto a Windows 7, creo que lograron depurar y optimizar el código base de Windows Vista para lograr un digno reemplazo de Windows XP; claro que puede llegar a funcionar en determinadas situaciones un poco más lento que XP, pero a cambio de nuevas características: como la búsqueda de aplicaciones y documentos incorporadas en el menú inicio, un look and feel mas acorde a nuestros tiempos, una interfaz bien lograda; y claro lo que la mayoría de los usuarios niega pero todos sabemos, a todo geek le gusta tener lo ultimo y los sistemas operativos no son la excepción. Yo por mi parte participo del programa de Microsoft, así que ya estoy utilizando para producir Windows 7 RC y verdaderamente en mi Laptop ha llegado para quedarse.

  • Share/Bookmark

Uso del historial en aplicaciones AJAX cambiando el título del documento dinámicamente

Posted on Mayo 23rd, 2009 in AJAX | No Comments »

Actualmente podemos encontrar gran cantidad de librerías que faciliten la utilización del historial del navegador para registrar cambios en el estado de la página, pero ninguna de ellas (o al menos las que yo encontré) logran resolver esta situación.

Si estás perdido y no sabes de que estoy hablando, aquí hay un muy buen artículo (en inglés) que explica en detalle como aplicar la técnica del uso del botón atrás/adelante en aplicaciones AJAX.

Detecté el problema mientras desarrollaba el portfolio de ZedPlan. Al seleccionar un proyecto se actualiza la URL, lo cual hace que mediante una solicitud AJAX se obtengan los datos del mismo y se actualice el documento. También me pareció lógico actualizar el título, ya que sino quedará guardado en el historial del navegador el título del documento oiriginal, y sería poco intuitivo para el usuario.

En ese momento noté que en Firefox el historial no estaba sincronizado con el título del documento actual. ¿Por qué?, parece que si cambiamos el título del documento una vez que se guardó la entrada en el historial, el navegador no lo actualiza y debemos aplicar un pequeño hack, el cual consiste en actualizar el hash de la URL nuevamente de la siguiente forma:

window.location.hash = window.location.hash;

Como era de esperarse, en Internet Exporer 6 y 7 tenemos otro problema. Para ver reflejado en el historial el título del documento, debemos cambiarlo en el iframe que se usa como hack, ya que se extrae de la etiqueta <title>. Para esto, al src del iframe le enviamos como parámetro el título del documento junto con el hash. El truco acá es cambiar el título antes de actualizar el iframe, ya que si lo cambiamos con javascript no se va a ver reflejado el cambio en el historial.

Veamos un ejemplo usando la clase HistoryManager, la cual desarrollé hace unos meses y la modifiqué para agregar soporte a los títulos dinámicos. Requiere al framework Prototype, aunque con pocas modificaciones se podría adaptar a otros frameworks como jQuery.

Supongamos que tenemos una página donde tenemos contenido agrupado en tabs, según el tab seleccionado mostramos u ocultamos lo que corresponda, pero guardando en el historial cada cambio de tab para permitir bookmarking.
Al cargar la página ejecutamos la función init():

function init() {
	hm = new HistoryManager(
			update, // callback
			200, 	// intervalo en milisegundos para revisar cambios en el hash
			'/history.php', // URL del documento que se usa como hack para el IE (abajo está el codigo fuente)
			true // habilitar títulos dinámicos, asi debemos llamar manualmente al metodo setTitle() en la función update()
		);
}
/**
 * Esta función se ejecuta cuando hubo cambios en el hash.
 * @param string nuevo hash
 * @param string hash anterior
 */
function update(hash, prev) {
	 // si no hay ni hubo hash no hacemos nada en este caso.
	if (!hash && !prev) return;

	// en este caso el contenido que generamos depende de un id, el cual lo obtenemos del hash
	// por ejemplo, si queremos mostrar un contenido u otro dependiendo de un tab seleccionado
	// el formato del hash podría ser "#tab-1" o "#tab-2"
	var id = hash.split('-').last();

	// establecemos el titulo del documento segun el nuevo contenido
	// acá lo sabemos de antemano, pero sería mas común obtenerlo mediante AJAX segun el id
	if (hash) this.setTitle("Tab " + id); // debería ser mas descriptivo el título!
	else this.setTitle("Home"); // si no hay hash, reestablecemos el titulo original
}

Y el código fuente de history.php

<?
	$hash = json_encode(isset($_GET['hash']) ? $_GET['hash'] : '');
	$title = isset($_GET['title']) ? $_GET['title'] : '';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title><?=htmlspecialchars($title)?></title>
	<meta name="robots" content="noindex, nofollow" />
	<script type="text/javascript">/*<![CDATA[*/
		hash = <?=$hash?>;
		function update() {
			if (!parent) return;
			parent.location.hash = hash;
		}
	/*]]>*/</script>
</head>
<body onload="update()"></body>
</html>

Esta clase fué probada en Firefox 3, IE 6 & 7, Chrome, Safari 4 para Windows y Opera 9.64.

  • Share/Bookmark

Quizás a Ud. no le convenga trabajar aquí

Posted on Mayo 16th, 2009 in Recursos Humanos | No Comments »

Cada vez que tomo una entrevista, además de contarle a mi entrevistado las virtudes de mi empresa, me aseguro de comunicarle las mayores debilidades y problemas con las que nos enfrentamos a diario.

Muchos piensan que con esta acción estoy achicando las posibilidades de que esa persona acepte ingresar a la empresa (de hecho, lo he tenido que discutir con antiguos jefes), sin embargo, la realidad siempre me mostró claros beneficios:

- Le demostramos al postulante que en nuestra empresa somos sinceros, que la comunicación cuando esté trabajando con nosotros será realmente franca y abierta.

- Mostramos que somos conscientes de nuestros problemas, y estamos trabajando para resolverlos.

- Le permitimos al interesado en el puesto, que haga un análisis correcto acerca de si sus capacidades son compatibles o no con nuestra organización. Gran parte de este análisis lo harán en la misma entrevista, intercambiando opiniones con el “entrevistador sincero

- Alentamos a que el postulante se sincere acerca de sus propias debilidades. Es increíble ver como las personas dejan de estar a la defensiva al ver que enfrente tienen a una persona que se maneja con la verdad.

Tras varios años de comunicarle a mis entrevistados que mi empresa no es perfecta, que quizás a él o ella no le conviene trabajar con nosotros, siempre he obtenido muy buenos resultados. Por lo tanto, no piense que espantará a su postulante, sino que por el contrario, lo más probable es que quiera trabajar con usted.

  • Share/Bookmark