martes, 28 de septiembre de 2010

Fijar una vista para todas las carpetas en Windows XP

En Windows XP tenemos la posibilidad de elegir entre varias vistas distintas cuando estamos utilizando el explorador de archivos: vistas en miniatura, mosaicos, iconos, lista y detalles (se seleccionan en el menú Ver, o en el botón Vistas de la barra de botones estándar).

Cada una de ellas tiene sus particularidades, y el decantarse por una u otra es algo que depende exclusivamente de preferencias personales. En general cada cuál es más interesante en función del contenido de la carpeta que se está explorando. Por ejemplo, la vista en miniatura está muy bien para trabajar con carpetas de imágenes o vídeos.

Por defecto Windows utiliza un tipo de vista concreto (creo que mosaicos) para todas las carpetas del sistema. Si queremos utilizar otra para explorar una capeta no hay más que cambiarla, pero, ¿cómo hacemos que una vista se utilice en todas las carpetas? ¿cómo cambiamos la vista de una carpeta concreta?

En mi caso me gusta trabajar siempre con la vista detalles, que muestra información como el tamaño y la fecha demodificación de los elementos, salvo para la carpeta Mis Imágenes, en la que prefiero la vista en miniaturas.

Para obtener esta configuración no hay más que abrir un explorador y seleccionar la vista que queramos utilizar de forma general. Accedemos después al menú Herramientas - Opciones de carpeta..., y dentro a la pestaña Ver. Lo primero que nos muestra es un cuadro Vistas de carpeta, con un botón Aplicar a todas las carpetas. Si lo pulsamos, la vista seleccionada para la carpeta actual se tomará como vista para todas las carpetas del sistema.

Antes de aceptar los cambios, revisamos las opciones del cuadro Configuración avanzada, en la misma pestaña, y nos aseguramos de que la opción Recordar la configuración de vistas de todas las carpetas está seleccionada. Esto hace que si cambiamos la vista de una carpeta, se vuelva a utilizar cuando volvamos a abrirla. Así podemos aplicar a cada carpeta una vista diferente sin problemas.

Una ayudita adicional: cuando utilizamos la vista detalles, es posible configurar los campos mostrados pulsando con el botón derecho sobre la cabecera; así podemos ver por ejemplo cosas interesantes como la fecha de creación o el propietario.

jueves, 23 de septiembre de 2010

Getting things done!!

Hoy he tenido la ocasión de asistir a una interesantísima charla sobre Getting things done (GTD) dada por D. Joaquín Peña en la ETSII de Sevilla.

GTD es una de tantas alternativas para organizar el trabajo personal (como por ejemplo la técnica pomodoro). Llevo bastante tiempo pensando en aplicar alguna de ellas, y creo que la charla de hoy será el punto de partida definitivo para lanzarme a ello.

Destacando lo que más me han calado, diría que GTD se basa en la idea de que una persona no puede retener en la cabeza todas las tareas pendientes que tiene en su quehacer diario. Este número está limitado a entre 5 y 9 tareas, cuando normalmente tendremos alrededor de 50, si no estamos demasiado ocupados.

Esto hace que caigamos en un estado de estrés, ya que nunca podremos quitarnos la sensación de tener cosas que hacer.

Por tanto, la base del método es el mantener una lista de tareas, en la que recoger todo lo que tenemos pendiente. La lista no tiene que restringirse únicamente al mundo laboral; muy al contrario, debería incluir tareas de cualquier ámbito de nuestra vida: redactar un informe para el jefe, limpiar el coche, pedir cita al médico, comprar un lámpara nueva... eso sí, cada una de esas tareas se encuadra en un determinado contexto. Generalmente todos tendremos al menos dos contextos, el laboral y el personal.

A partir de ahí, el trabajo se realiza siguiendo el ciclo Recopilar - Revisar - Hacer.
  • Recopilar - poner al día la lista de tareas, metiendo las que hayan surgido, y eliminando las que hayan perdido sentido.
  • Revisar - leer tu lista de tareas, y seleccionar aquellas que vayas a hacer.
  • Hacer - ejecutar las tareas seleccionadas.
Esta forma de trabajo te permite concentrarte al máximo en las tareas que has elegido hacer, olvidándote hasta el próximo ciclo de todo lo demás.

Este es el punto de partida. Hay muchas ideas y recomendaciones adicionales, pero de momento mi lista sólo tiene una tarea: hacer mi lista de tareas.

miércoles, 22 de septiembre de 2010

Experiencias con ITIL - El CAU

Tras la introducción que hice con mi punto de visto sobre la implantación de ITIL en los departamentos de informática, voy a contar algunas experiencias relacionadas que he tenido en mi vida laboral.

Uno de los elementos que suelen ponerse en funcionamiento en primer lugar es el Centro de Atención a Usuarios, o CAU. Teóricamente, la función de éste es servir como "interfaz" entre los usuarios y el servicio, de forma que todas las peticiones deberían ser recibidas por el CAU, de acuerdo a los medios establecidos.

Ante una petición de servicio, el CAU llevará a cabo una evaluación, tratará de ofrecer una solución definitiva o, si no está capacitado para ello, un workarround (magnífico palabrejo para referirse a una solución temporal, o apaño, en lenguaje coloquial). Posteriormente, si no ha podido dejar fino el tema, escalará la petición a segunda línea, donde los técnicos se pelearán a fondo con el problema, pero eso ya es otro tema.

Cuando se trabaja con un CAU, lo ideal es establecer unas líneas de comunicación entre este y los usuarios. Por ejemplo, un Sistema de Gestión de Incidentes (una aplicación a través de la que los usuarios pueden registrar peticiones, y esperar a que les contacten), un número de teléfono, etc.

Sin embargo, comentábamos el otro día que lo correcto es estudiar las circunstancias de cada servicio, y adaptar ITIL a nuestras necesidades. Si estamos prestando servicio en una macro-empresa con miles de trabajadores repartidos por el mundo, es lógico y necesario implantar ese mecanismo de comunicación. Sin embargo, si nuestro grupo de usuarios se reduce a unas decenas de compañeros, lo más probable es que el CAU pierda en gran parte su sentido. Cualquier usuario preferirá presentarse directamente en el puesto del técnico de turno, y comentarle en persona su problema para que se lo resuelva sobre la marcha.

La pregunta es, ¿hay que ser estrictos con este tema, y obligar a los usuarios a seguir los cauces de comunicación establecidos? Pues ni tanto ni tan poco. Es normal que los usuarios tiendan a hacer las peticiones directamente, pero lo que no se debe dejar de lado es que el servicio debe prestarse de forma ordenada. Eso implica que todas las peticiones deben ser registradas en el sistema de Gestión de Incidentes implantado, y que deben ser atendidas de acuerdo a las pautas establecidas (prioridades, colas, etc.). En ningún caso se debería permitir que un usuario recibiese una atención más rápida por el hecho de haber ido a hacer la petición en persona. En este caso sí hay que ponerse firmes y decirle a quien toque que se toma nota de la solicitud, y que se le informará cuando corresponda.

Claro que sin exagerar, o acabaremos llegando al conocido extremo de meter al departamento de informática en un sótano apartado del mundo y pasarle la comida a través de un tubito para que no puedan comunicarse con el resto del universo.

lunes, 20 de septiembre de 2010

rownum mayor que...

Cuando trabajamos con consultas en Oracle, disponemos de la pseudo-columna rownum. Se le llama pseudo-columna porque aunque no sea una columna de nuestra tabla, Oracle la añade al resultado de la consulta, poniéndola a nuestra disposición, si la queremos.

El valor obtenido es un número que indica el orden en el que Oracle selecciona la fila de la tabla. Generalmente esta pseudo-columna se utiliza en consultas con una cláusula de ordenación, para obtener los N primeros registros según el criterio de ordenación indicado. Por ejemplo:

select * from (select * from empleados order by salario) where rownum < 10

Es lo que en otros SGBD se consigue con TOP.

Y en este punto es donde uno se ve tentado de ir más allá, y utilizar el rownum para paginar nuestras consultas. Es decir, para obtener, por ejemplo, del décimo al vigésimo empleado con mayor salario.

select * from (select * from empleados order by salario) where rownum <20 and rownum > 10

Sin embargo, nos llevamos la sorpresa de que esta consulta no devuelve datos. Explicar por qué es ligeramente complicado, pero lo intento.

Cuando ejecutas esa consulta Oracle obtiene la ristra de filas, y asigna a la primera el valor rownum=1. Entonces, evalúa la condición para esa fila, y como 1 no está entre 10 y 20, la elimina del resultado. Entonces, vuelve a comenzar el proceso, asignando de nuevo el valor rownum=1, a la que realmente era la segunda fila obtenida. Lógicamente, la condición vuelve a no cumplirse, la segunda fila es eliminada, y el valor rownum=1 es asignado a la tercera fila. Así hasta que nos hemos quedado sin nada.

¿Significa eso que no podemos utilizar una condición de tipo rownum mayor o igual que... en una consulta? Pues no, existe una forma de realizar esta comprobación. Para ello necesitamos que la pseudo-columna evolucione y se convierta en una columna con todas las de la ley. Si realizamos la siguiente consulta

select rownum rnum, empleados.* from (select * from empleados order by salario) empleados

obtenemos la tabla empleados ordenada por salario, con una columna (ya no pseudo-columna) rnum añadida, que asigna un número secuencial a cada una de las filas ordenadas. Por tanto, si sobre esta consulta obtenemos sólo los registros con rnum entre 10 y 20, tenemos lo que queríamos.

select * from (
select rownum rnum, empleados.* from (select * from empleados order by salario) empleados
) where rnum < 20 and rnum > 10

Es importante fijarse en que la consulta original, en la que se obtienen todas las filas de la tabla ordenadas, debe ser siempre la primera en ejecutarse, sin añadir nada. Si por ejemplo intentásemos hacer:

select * from (
select rownum rnum, empleados.* from empleados order by salario empleados
) where rnum < 20 and rnum > 10

Estaríamos obteniendo rnum y ordenando en la misma sentencia. Lo que pasaría entonces es que la ordenación se haría después de asignar los rnum, por lo que estaríamos asignando los secuenciales a las filas sin seguir el criterio de ordenación. La consulta devolvería registros, pero no los que nos interesan.

Para los políglotas, pongo un enlace bibliográfico y todo:

martes, 14 de septiembre de 2010

Google Chrome: Session Manager

Una de las cosas que más me gusta de Google Chrome es la cantidad de plugins que se le pueden añadir para hacer su uso más cómodo. El último que he descubierto es el Session Manager.

Este plugin tiene un funcionamiento muy simple, ya que lo único que hace es almacenar las páginas que tienes abiertas en tu navegador, para que puedas restaurarlas posteriormente. Puede que en un principio no parezca una función demasiado práctica, pero tiene bastantes utilidades.

Por ejemplo, lo primero que hago todas las mañanas al llegar al trabajo es abrir varias ventanas del navegador: el correo de mi empresa, el del Organismo en el que trabajo, y el sistema de gestión de incidentes, como mínimo. Pues con esta herramienta no tengo más que abrir una ventana de Chrome, y seleccionar mi sesión "A currar un poco". Automáticamente se me abrirán las ventanas (o pestañas) con las páginas que necesito.

De la misma forma se podrían tener configuraciones para tareas cotidianas: abrir las cientos de miles de redes sociales a las que estamos suscritos para ver nuestros mensajitos, los periódicos que te gusta consultar, foros técnicos, etc. etc.

Otra situación habitual en mi caso es la que me hace dejar el ordenador encendido de un día para otro, simplemente porque tengo decenas de páginas abiertas que estoy consultando durante mi trabajo, a las que he accedido tras varias búsquedas, y no quiero perderlas para continuar con ellas. Pues ahora no tengo más que guardar mi sesión, y podré continuar exactamente por donde iba cuando quiera. Además así ahorraremos un poco de energía, que siempre es recomendable.


lunes, 13 de septiembre de 2010

Conectar a SQL Server desde SQLDeveloper

SQLDeveloper es una herramienta bastante apañada que ofrece Oracle para realizar los trabajos más habituales de los desarrolladores sobre bases de datos: ejecución de scripts, generación de DDL y DML, navegación sobre los objetos de los esquemas, depuración de bloques PL/SQL, generación de diagramas de bases de datos (ERD)...

Aunque viene preparada principalmente para trabajar con bases de datos Oracle, sirve también para Access, MySQL y SQLServer. Vamos a ver cómo configurarla para este último SGBD. El proceso debería ser equivalente para MySQL, pero a mí no me miren, que no lo he probado.

Como siempre que vamos a trabajar con conexiones a bases de datos, lo primero que tenemos que hacer es localizar el driver adecuado. En nuestro caso necesitamos el fichero jtds-1.2.5.jar; no hay más que pedírselo a Google. Una vez que lo tengamos en nuestro equipo, lo ubicaremos en la ruta jdbc/lib, dentro del directorio de instalación de SQLDeveloper (por ejemplo, C:\Archivos de programa\SqlDeveloper). Para referenciarlo desde la herramienta, accederemos a la opción del menú Herramientas - Preferencias, y dentro, a la sección Base de Datos - Controladores JDBC de Terceros. Ahí añadimos una entrada, y seleccionamos el jar.

Una vez aceptado, podemos acceder al wizard de creación de una nueva conexión. Tras introducir el nombre que queramos darle a la conexión y el usuario/password, tenemos una serie de pestañas que se corresponden con los distintos SGDB. Seleccionamos SQLServer, e indicamos el host y puerto, que normalmente será el 1433. Pulsamos entonces el botón Recuperar Base de Datos. Si la configuración es correcta, nos aparecerán las distintas bases de datos accesibles por el usuario. No tenemos más que seleccionar la que corresponda, y guardar los cambios.


En la lista de conexiones veremos una que destacará sobre el resto por tener el logotipo de Windows, lo que nos indica que es una conexión a SQLServer. No tenemos más que desplegarla y podremos comenzar a trabajar con la base de datos.

jueves, 9 de septiembre de 2010

Rotación de la pantalla

Me he dado cuenta de que últimamente me estoy dedicando demasiado a publicar divagaciones, dejando de lado el objeto tecnológico del blog, así que a ver si me enmiendo un poquito.

En cualquier caso, hoy toco un tema liviano e intrascendente que me ayude a ir retomando la senda correcta. Esta funcionalidad puede seros útil en dos situaciones:

1. De repente os encontráis que a vuestra pantalla se le ha ido la pinza y se ha dado la vuelta, y eso os ha descuadrado.
2. Estáis aburridos en el trabajo, y tenéis ganas de gastarle una broma a un compañero (no tecnólogo, para tener mayor posibilidad de éxito).

Ante todo, por favor, si os encontráis en el primer caso, no giréis vuestro monitor. Vale que sería una solución, pero no podemos darla por válida.

Existe una combinación de teclas, alt gr + cursor, que permite girar la pantalla de nuestro ordenador, orientándola en la dirección del cursor pulsado. Así, si pulsamos alt gr + abajo, nuestra pantalla se dará la vuelta.

Si estás leyendo esto porque 1, no tienes más que pulsar alt gr + arriba, y tu pantalla volverá a la normalidad.

Si no estás aquí por 1, y además 2, ya sabes lo que tienes que hacer. Recomiendo grabar en vídeo la reacción del afectado, porque puede ser bastante interesante.

Por cierto, si la combinación de teclas no surte efecto en tu PC, seguramente sea por tu tarjeta gráfica o drivers; en mi caso es una opción del Intel(R) Graphics Media Acclerator Driver. Si tú también lo tienes en la barra de tareas, puedes acceder a Propiedades de gráficos... En configuraciones de pantalla activas y desactivas la rotación, y en teclas de acceso rápido puedes indicar (y consultar) la combinación de teclas a utilizar.

lunes, 6 de septiembre de 2010

Gmail Labs

Ellos mismos se refieren a este apartado de su correo como experimientos disparatados, y mayormente la definición encaja perfectamente con lo que hacen.

Gmail Labs ofrece una serie de herramientas, opciones... cosas en general, como añadidos al gestor de correo, que desarrollan los cracks de Google y son candidatos a formar parte de la versión final del producto. De antemano advierten que al estar en fase experimental pueden desaparecer sin dejar rastro en cualquier momento.


Yo clasificaría las propuestas de labs en 3 grupos: imprescindibles, interesantes, y simples frikadas.

Entre los imprescindibles destaco Avance de contenido del mensaje, que permite tener una vista previa de los mensajes sin necesidad de abrirlos, y por tanto sin marcarlos como leídos. Esta función es habitual en todos los gestores de correo (la típica vista previa), y Gamil no podía quedarse atrás.

Pero lo que realmente hace interesante a Gmail Labs son los servicios novedosos, "made in Google", que personalmente no había visto nunca antes, y pueden ser muy útiles.

¿Ejemplos? Pues los que más me han gustado son los que analizan los destinatarios de tus correos y te avisan tanto si creen que te estás olvidando de alguien como si creen que te estás confundiendo de persona. Llevo un tiempo con esta función habilitada, y su funcionamiento es magnífico. Por ejemplo, cuando voy a enviar un correo a mi grupo de trabajo, en cuanto escribo las dos primeras direcciones, él me muestra al resto del grupo y me propone agregarlos con un simple clic.

De forma similar, si en mi grupo hay un Enrique, y yo escribo el correo de otro, Gmail me pegará un toque para que me espabile; no sería la primera vez que alguien le envía a su jefe el correo que debería ser para su coleguilla homónimo.

Por si esto no fuese suficiente, otra posibilidad que ofrece Labs es la de concederte un margen de tiempo cada vez que envías un correo para arrepentirte. Otra que también puede salvarte la vida en algunas situaciones.

Y para termianar están las frikadas. Opciones cuya utilidad es cuestionable, pero que tienen sin duda su punto de interés, como poder jugar a la serpiente, utilizar superestrellas para destacar tus mensajes con mayor colorido, o hacer que Gmail vuelva a mostrar la etiqueta beta. En mi opinión la palma se la lleva el test de facultades mentales intactas, que te someterá a una prueba matemática cuando intentes enviar un email a horas intempestivas, para comprobar que te encuentras en un estado aceptable para comunicarte con alguien.

Así que animo a todos a que echéis un vistazo a Gmail Labs, porque ofrece algunos servicios que mejoran mucho la herramienta, y además te pueden hacer pasar un buen rato.

miércoles, 1 de septiembre de 2010

Decompilador de Jasper

A la vuelta de vacaciones me he encontrado con un pequeño problema laboral. Necesitábamos hacer cambios en los informes de una aplicación que fueron desarrollados hace unos añitos, y como en esa época no teníamos repositorio de código, los fuentes no aparecían por ningún lado.

Así que nuestra única opción, descartando rehacer desde cero los informes, claro, era buscar el modo de obtener los ficheros jrxml a partir de los jasper. Esto se puede hacer con un código tan simple como el siguiente.

JasperReport report = (JasperReport) JRLoader.loadObject(jasper.getAbsolutePath());
JRXmlWriter.writeReport(report, jrxml.getName(), "UTF-8");

Donde jasper es un File que apunta al fichero jasper que queremos decompilar, y jrxml es un File que apunta al fichero de destino.

Para evitar tener que montar un proyecto cada vez que necesite conseguir el código fuente de jasper, he creado un programa que permite decompilar un fichero completo de forma rápida. No hay más que arrancarlo, indicar el directorio en que se encuentran los jasper, y el directorio en que se quieren crear los jrxml.


La aplicación se puede descargar aquí.