Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

sábado, 31 de enero de 2009

KeyLed


Debido a un accidente navideño con el teclado del ordenador, que incluyó el agravante de la sidra ecológica, tenemos desde hace poco uno nuevo, inalámbrico, que con estas ideas brillantes para abaratar costes, resulta que no tiene LEDs indicadores del estado de las teclas de bloqueo de mayúsculas, numérico y de desplazamiento. A resultas de esto, me ha picado el gusanillo de la programación rápida, y he creado una aplicacioncita en .NET que se encarga de controlar el estado de esas teclas e informa al usuario mediante un icono de notificación en la barra de sistema.


La verdad es que es una aplicación bastante simple, pero ya que hacía tiempo que no subía nada de programación al blog, me ha parecido interesante dejarla aquí por si interesa a alguien y, de paso para recabar la opinión de los incondicionales ;) . Su nombre es KeyLed.


También incluyo la parte relevante del código, que no es demasiado extenso: Se trata de un WinForm que muestra el estado de las teclas en varios checkboxes, y que al ser minimizada queda en el systray. En todo momento, muestra un bocadillo con el estado de las teclas de bloqueo, mediante el uso de un temporizador que va comprobándolo cada cierto tiempo (500 milisegundos). He probado utilizando un delegado para el evento Idle de la aplicación, pero no se refresca tan a menudo como debiera, de ahí el uso final del temporizador.



[Csharp]
{
public partial class KeyLed : Form
{
const int Interval = 500;

public KeyLed()
{
InitializeComponent();

KeyLedTimer.Interval = Interval;
KeyLedTimer.Enabled = true;
}

[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
public static extern short GetKeyState(int keyCode);

private void KeyNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
//Hacemos visible el formulario
this.Show();
this.WindowState = FormWindowState.Normal;
//Ocultamos el icono de la bandeja de sistema
KeyNotifyIcon.Visible = false;
}

private void KeyLed_Resize(object sender, EventArgs e)
{
//Si el estado actual de la ventana es "minimizado"...
if (this.WindowState == FormWindowState.Minimized)
{
//Ocultamos el formulario
this.Hide();
//this.Visible = false;
//Hacemos visible el icono de la bandeja del sistema
KeyNotifyIcon.Visible = true;
}
}

private void KeyLedTimer_Tick(object sender, EventArgs e)
{
this.CapsLockCheckBox.Checked = (((ushort)GetKeyState(0x14)) & 0xffff) != 0;
this.NumLockCheckBox.Checked = (((ushort)GetKeyState(0x90)) & 0xffff) != 0;
this.ScrollLockCheckBox.Checked = (((ushort)GetKeyState(0x91)) & 0xffff) != 0;

KeyNotifyIcon.ShowBalloonTip(Interval, "", _numLock + _capsLock + _scrollLock, ToolTipIcon.Info);
}
}
[/CSharp]

Se me ocurren diversas mejoras, por ejemplo, que muestre la información de los leds cambiando el icono asociado al objeto NotifyIcon, de hecho funciona sin problema. Pero crear ocho iconos para esto me parece un pasote. Como con System.Drawing no he tenido que pelearme demasiado, a ver si existe una opción más eficiente que la que os presento. A partir del icono inicial, es posible usar el método ToBitmap() de la clase Icon para obtener un BMP en memoria sobre el que trabajar (por ejemplo, cambiando el color de un determinado pixel con SetPixel. Sin embargo, me parece poco adecuado tratar dinámicamente el icono, porque posiblemente sea mayor el tiempo de volver a dibujar el estado de los leds que cargar un icono distinto. ¿Alguna opinión al respecto? ¿Monto ambos sistemas y le hacemos pasar unos pocos benchmarks? ¿Merece la pena, realmente, todo esto? Jajaja.


Un saludo.



Actualización:
Acabo de darme cuenta, al encender el altavoz, del molesto efecto de "pop, pop" en el refresco del estado, al volver a pintar el bocadillo. Así las cosas, me da que no hay más opción que diseñarme el icono adecuado y actualizarlo dinámicamente. Así las cosas, vuelvo a la pregunta que planteaba al final de la entrada: ¿lo "repinto" en memoria, o cargo uno de una colección de iconos previamente almacenados?

domingo, 25 de enero de 2009

O.D.E., El día del Juicio

Los que nos dedicamos al mundo de las nuevas tecnologías (y, en particular, a la informática) solemos "quejarnos" de que se nos etiquete con expresiones como "friki", "frikazo", "geek" o, simplemente, "bicho raro". Lo que es innegable es que, en ocasiones, nos lo ganamos a pulso.


Este fin de semana podía ver en un blog amigo un vídeo, el de GigA: Todo es seguro, que nos caracteriza bastante bien. Y me ha hecho recordar otro que, no hace mucho, cumplía 10 añitos. Se trata del corto O.D.E., El día del juicio, que recrea bastante bien el ambientillo que se respiraba en la antigua ETSII de Granada, cuna de informáticos ya hoy, como mínimo, treintañeros. Aparte de la gracia geek del mismo, hay que tener en cuenta que se realizó contando con la colaboración de algunos profesores del centro y del propio alumnado. Imaginad la repercusión del vídeo cuando se proyectaba en El Día de la Escuela (a falta de patrón, buenas eran otras fiestas).


Lo he vuelto a encontrar en Youtube (dónde si no), en el perfil del propio autor (Miguel Angel Sanchez Cogolludo, cuya visita tuvimos el honor de recibir hace unos meses, y del que me ha encantado ver que ha colaborado en producciones nacionales tan importantes como la reciente El lince perdido) y aquí os lo dejo para vuestro disfrute.


¡Saludos, y buen comienzo de semana!




miércoles, 21 de enero de 2009

Editores de código fuente

Aunque la ayuda de la sintaxis coloreada, autocompletar y otras argucias de los entornos de programación y editores de código fuente nos hacen la vida más fácil, lo cierto es que cuando conocemos en profundidad un lenguaje, generalmente, terminamos por olvidar lo fácil que nos hicieron la vida y cómo se codificaba con herramientas tan rudimentarias como el bloc de notas, editores poco más avanzados que el edit de MS-DOS o con pico, para los que teníamos la suerte de poder sustituir con el mismo el uso de vi.


Sin embargo, es en momentos en los que tenemos que enfrentarnos a nuevos lenguajes (al menos nuevos en el sentido de no conocerlos en profundidad) cuando es más útil que nunca contar con un editor apropiado que nos haga más liviana la tarea. Generalmente suelo usar PSPad para editar archivos de texto (también binarios, en hexadecimal), o de código fuente cuando no tengo un editor más específico a mano. Hay bastante gente que prefiere Notepad++, un editor igualmente completo, y la verdad es que probados ambos, es difícil decantarse por uno u otro, porque sus prestaciones son similares y donde flaquea uno, el otro se hace más fuerte. Son, por tanto, herramientas complementarias igualmente potentes, y la elección de uno u otro vendrá dada más por los gustos personales del usuario que por cualquier otra razón.


Sin embargo, hay momentos en los que conviene explorar otros caminos, otras herramientas, y precisamente hoy ha sido uno de esos días. Andaba esta mañana analizando una serie de ficheros ASN.1 con una serie de especificaciones, y ni Notepad++ reconocía la sintaxis, ni la que incorpora PSPad (que viene desactivada de forma predeterminada, y hay que habilitar a través del correspondiente menú de opciones de configuración) ha terminado de convencerme. Incluso he tenido que agregar características tan básicas de la sintaxis como los caracteres que corresponden a los comentarios. Así que me he dicho: ¿habrá por ahí editores “ligeros” que incluyan ésta y otras sintaxis menos comunes? Dicho y hecho, me he puesto a buscar y he encontrado Crimson Editor, un editor llamado a ser sustituido por Emerald Editor, del que no he encontrado una versión compilada (de momento) y que, aunque tiene una interfaz de usuario un tanto espartana, cumple sobradamente con lo que podemos pedir a un editor de código fuente, aunque tiene bastantes carencias respecto a los dos que nombraba anteriormente; en particular, echo de menos la edición “directa” a sitios FTP y remotos.



Sin embargo, para mis necesidades era perfecto. Tiene una gran cantidad de lenguajes en su “base de datos” de sintaxis, y la de ASN.1 la muestra a la perfección. En cualquier caso, me resulta extraño que, por ejemplo, PSPad admita el tipo de comentarios de este lenguaje (--), pero sin embargo no lo trate adecuadamente. Habrá que seguir investigando, pero de momento el “problemilla” me ha permitido conocer este editor.


¿Alguno de vosotros había usado antes el Crimson Editor? ¿Qué editor/es de código fuente de este tipo soléis usar?

lunes, 19 de enero de 2009

Testing Experience


Esta tarde, al llegar a casa después del trabajo me he encontrado con una grata sorpresa. Tenía en el buzón el cuarto número de la edición impresa de la revista Testing Experience. Creo recordar haber comentado su existencia por estos lares en alguna ocasión, y ahora vuelvo a recomendaros una publicación más que interesante dentro del mundo del desarrollo del software y, en particular, de la parcela correspondiente a las pruebas del mismo.


Las revistas están disponibles para su descarga en la web de la revista,aunque es posible suscribirse de forma gratuita para recibirlas impresas. Aunque siempre abogo por el uso del ordenador para la lectura de artículos técnicos y la consulta de libros de informática, hay ocasiones (como cuando el equipo de trabajo las consulta de forma intensiva, o pueden compartirse con colegas, compañeros y amigos) en las que creo que es incluso más interesante (y ecológico, pese a lo que pueda parecer) contar con un ejemplar impreso.


Además, y aunque resulte un poco off-topic, este mediodía cuando me dirigía a casa a almorzar (sí, envidiosillos, es la ventaja de vivir cerca del trabajo, jejeje) he visto dos cuervos sobrevolando la entrada del Parque Tecnológico. Aunque es habitual contemplar aves de paso, por estar ubicado cerca de la desembocadura del Guadalhorce, no es tan común que nos topemos con este córvido, aunque no es la primera vez que les veo por aquí. En cualquier caso, hoy su paso guarda un especial significado, ya que se celebra el bicentenario del nacimiento de Edgar Allan Poe, del que seguro que conocéis su poema El Cuervo.


Pues nada, lo dicho. Os dejo para sumergirme en la lectura de la revista. Y es que hay problemas causados por los bugs y problemas de diseño que no se han detectado por no llevar a cabo unas buenas prácticas de testing que dan más miedo que los cuentos del inmortal autor norteamericano ;) .

jueves, 15 de enero de 2009

Error 404... ¡no!

Quienes mantienen un sitio web, sea éste del tamaño que sea, deben mantener la coherencia entre las páginas, y evitar que se produzca en el propio sitio la aparición de errores indeseables, como el conocido 404 de página no encontrada, por ejemplo por tener un enlace roto o erróneo. Los bloggers que usan plataformas como la de Google (Blogger) pueden olvidarse generalmente de esto, porque la gestión de las URLs le es ajena, pero no ocurre lo mismo con los blogs que usan Wordpress, Drupal, Joomla o cualquier otro gestor de contenidos en los que el formato de las URLs pueden definirse para hacerlas más “amigables” al usuario.


En el caso de Wordpress, esto se lleva a cabo mediante los permalinks. Hay que tener cuidado, una vez que los hemos definido, ya que con las actualizaciones de la herramienta se puede cometer el error de cambiar la estructura, con la consiguiente regañina del experto en SEO correspondiente, y la nueva indexación del sitio por Google que puede dar lugar a páginas no accesibles desde el buscador. Sin embargo, el principal problema (por ser permanente) vendría de la mano de los enlaces internos que tengamos entre distintas páginas (o entradas, en el caso de los blogs) de nuestro sitio web. Por eso es útil contar con herramientas como la que ofrece el Consorcio W3C que permite analizar el sitio web buscando enlaces rotos, permitiendo solucionarlos. De hecho, no es el único servicio de este tipo, pero cuenta con la ventaja de que es posible descargar el software para instalarlo en nuestro servidor.



Aquí podéis ver una captura de la herramienta en funcionamiento:

miércoles, 14 de enero de 2009

Asistente para Interop


Hay múltiples ocasiones en las que tenemos que utilizar código nativo desde una aplicación manejada en .NET. Es el caso habitual de tener que reutilizar aplicaciones o componentes COM antiguos, desarrollados tiempo atrás en lenguajes como el obsoleto Visual Basic y para los que no está prevista una migración a .NET, o bien cuando debemos trabajar con drivers y componentes a bajo nivel, programados habitualmente en C/C++. En esos casos, tenemos que vérnoslas con Interop y, de paso, con la conversión de tipos entre las distintas tecnologías.



Dicha tarea no tiene porqué ser necesariamente dificultosa (aunque puede provocarnos más de un dolor de cabeza si decide no funcionar, a la hora de llevar a cabo depuraciones y averiguar a qué componente corresponde la responsabilidad del problema que nos estemos encontrando), pero sí es, como mínimo, tediosa. Por eso, los chicos de Microsoft lanzaron hace tiempo una herramienta que, he de confesarlo, no había probado hasta ahora, que andaba investigando un poco el tema y me he topado de frente con ella. Se trata de PInvoke Interop Assistant, un asistente que genera automáticamente el código en C# o VB.NET que maneja las llamadas a la API de Windows y DLLs provenientes de código no manejado (desarrollado en C).



Como puede verse en las capturas que adjunto, basta con consultar en la API de Windows, de la que ya trae información, o cargar una DLL que contenga su correspondiente manifiesto para obtener el código fuente correspondiente.


Toda una ayuda para los desarrolladores que tengan que enfrentarse al marshalling entre código manejado y nativo. La herramienta, documentación y código fuente asociados pueden descargarse desde la página del grupo en CodePlex.

Mapas "virtuales"

Nos mudamos. No virtualmente, de servidor, ni nada por el estilo, sino de casa. La tercera mudanza en justamente dos años (sí, se hace un poco pesado :P ), que me ha dado de momento un par de sorpresas o, cuanto menos, de pequeños descubrimientos. Por un lado, comprobar cómo la Wikipedia es un compendio de todo lo posible (y, en ocasiones, de lo imposible), algo que ya sabíamos pero que se convierte en curiosidad cuando encuentras que incluso las barriadas de las ciudades tienen su huequito en la mayor enciclopedia escrita. Por ejemplo, uno de los barrios de Málaga que barajábamos era el Puerto de la Torre, si no encontramos algo más cerca de los respectivos puestos de trabajo (y, por ende, más ecológico ;) ), como El Cónsul-Teatinos.


Pues bien, no sólo aparece en la Wikipedia, sino que aparece en un sistema de información geográfica denominado: Mapa Interactivo Ciudadano, que me parece una interesantísima aplicación de los mapas virtuales del tipo de Google Maps (en el que se basa, por cierto). Ya comenté meses atrás que durante la Hackmeeting de Málaga se habló del uso de Wikimapas para dar un contexto más real a la información construyéndolos de forma colaborativa y abierta, e incluso en otras ocasiones he traído sus aplicaciones para el diseño de rutas, localizar hipotéticas bases de ECHELON o ver las calles de nuestras ciudades.


Otros compañeros blogueros también han tratado el uso de Google Maps y sus curvas de nivel, la integración con Google Earth de herramientas GPS o cómo encontrar gasolina más barata utilizando estos mapas.



Siempre he sido un enamorado de los mapas: desde sus 2 dimensiones son capaces de trasladarnos a cualquier punto del globo, darnos información de la zona que nos encontramos explorando en nuestra última excursión e, incluso, trasladarnos a fabulosos e imaginarios lugares. Y desde un punto de vista más práctico de los mapas en Internet, me ha gustado el Mapa Interactivo Ciudadano: ofrece información sobre los comercios, paradas de autobús, edificios públicos e, incluso, problemáticas de la población y promesas electorales cumplidas e incumplidas. Una idea que sería interesante que se extendiese incluso desde la propia administración para propiciar así una efectiva y verdadera participación ciudadana.

martes, 13 de enero de 2009

El caso de la tetera caliente

Ayer aparecía una noticia que ha trascendido a todos los noticiarios debido a su capital importancia: realizar dos búsquedas en Google consume la misma energía que calentar una tetera, lo que equivale a una emisión similar de CO2 a la atmósfera (unos 15 gramos). Esta noticia parece ser la única información de interés que han extraído los medios del informe que, como resultado de dos años de estudios sobre consumo energético en sitios web, ha publicado el Doctor en Física Wissner-Gross.


Desde mi punto de vista, creo interesante que la población sea consciente de que todo, absolutamente todo, tiene una repercusión sobre nuestro medio ambiente. Esto es obvio, ya que formamos parte de un sistema que está en un delicado equilibrio, y cualquier alteración que causemos en el mismo tiene sus implicaciones. Así que si la forma de que nos llame la atención que usar algo tan “inofensivo” como es Internet tiene su coste es que se publiquen noticias como esta, bienvenidas sean.


En cualquier caso, creo que no hay que llegar a ser excesivamente simplistas. El ordenador que usamos para llevar a cabo las consultas también lleva asociado un consumo energético, que podemos estimar con herramientas como Local Cooling; “dejarlo bajando” para “amortizar” el coste de la conexión a Internet obviamente no es lo más recomendable para contribuir a minimizar nuestra huella ecológica. También es cierto que tanto Google como otras grandes empresas informáticas son conscientes de que lo verde vende, así que existen investigaciones en torno a medios para minimizar el consumo de sus servidores y, de paso, intentar ahorrar unas pesetillas. Ahora bien, medidas como instalar los datacenters en Islandia, porque el clima frío (que cada vez lo será menos, a pesar de que algunos digan que el cambio climático es una falacia), o al lado de un río para aprovechar la energía hidroeléctrica y tener una fuente de refrigeración cercana no son tan ecológicas como nos quieren hacer ver. Porque, por ejemplo, el calentamiento de los equipos sigue produciéndose, disipando además el calor sin que sea suficiente para reutilizarlo en la calefacción de los edificios, pero sí como para que altere su entorno, al producirse de forma constante. Por otro lado, los ríos ni son ni vertederos ni canales de riego (pese a quien pese, y se piense lo que se piense), sino ecosistemas en delicado equilibrio del que depende la vida en los mismos, en las zonas que riegan y en el mar o lago al que desembocan.


Los usuarios tampoco tenemos fácil la elección. ¿Equipos “ecológicos” de madera o bambú? ¿Desechar mi equipo antiguo por uno nuevo, cuando aún sigue funcionando y se utilizó tantísima agua y energía para fabricarlo, además de todo tipo de sustancias contaminantes, o tan escasas como el coltan?


Total, que todo esto de la noticia de la tetera, aparte de rellenar el hueco que vienen dejando en los informativos y la prensa escrita la huelga de pilotos de Iberia, las nevadas de Madrid (sí, soy consciente de que en toda la franja norte está nevando estos días, pero amigos míos, sólo se habla de la capital de España, qué le vamos a hacer ;) ) y la más que preocupante guerra (infinita) en la franja de Gaza, no creo que sea demasiado concluyente. Hay que consumir menos, sí, ahorrando energía antes que seguir produciendo más, dando a lo que compramos (dispositivos electrónicos, coches, muebles…) la vida más larga y útil que podamos. Y, sobre todo, hay que ser conscientes de cuanto hagamos tendrá sus implicaciones. Porque los gobiernos y las empresas, por supuestísimo, tienen su responsabilidad, pero ésta no nos exime de la nuestra. En relación con todo esto, os recomendaría un par de libros del gran pensador Saramago: su Ensayo sobre la lucidez y La Caverna.


Finalizando ya, según el estudio de Wissner-Gross los servidores que emiten vídeo generan 0.02 gramos de CO2 por segundo (aunque imagino que adicionalmente vendrá asociada una emisión paralela en múltiples servidores debido al streaming de vídeo). Así que os invito a una tacita de té, la cuarta parte de la tetera, si queréis oír esta canción sobre genocidio (llevado a cabo por el pueblo) judío, que desgraciadamente sigue tan vigente a día de hoy.



jueves, 8 de enero de 2009

Propósitos de año nuevo

Llegamos al final de la primera semana del año (la primera laborable para mí, al menos), y arranco con la primera entrada del año en Lobosoft, que se ha hecho de rogar. La verdad es que uno de los objetivos que llevaba en mente al terminar el año con unas ansiadas y necesarias vacaciones navideñas (de las que crean adicción, de tan parecidas a las de la infancia) era el de desconectar en lo posible de la informática: sin juegos, blog, Internet ni, por supuesto, un entorno de programación. El año 2009 se presentaba divertido, en lo laboral y en lo personal, y plagado de momentos informáticos, así que quería darme el “capricho” y dejar de lado un poco la disciplina que, por afición y profesión, me lleva acompañando la friolera de cuatro lustros. Y lo he conseguido, en parte al menos, ya que al final algún ratejo he dedicado a leer algunos blogs desde mi Adelita, o a cometer la locura de crear otro, que se suma a la colección para mayor esclavitud respecto a las publicaciones.


El nuevo año suele ser el momento de hacernos el propósito de enmienda, la propuesta de objetivos y deseos a cumplir. Generalmente son promesas que nos hacemos a nosotros mismos y que rara vez llegamos a cumplir: dejar de fumar, hacer deporte, comer con mayor moderación… Así que, aunque nunca he sido partícipe de esa fiebre de autoimplicación (tal vez por conocimiento propio y por evitar el escarnio de no cumplir con lo que me propongo), me gustaría arrancar el año con la intención de mantener el blog actualizado (que ha sido lo primero que he hecho, que ya le iba tocando a mis plugins anti-rusos, visto lo visto la que tienen montada con la energía en este invierno), también en lo tocante a las entradas, que me gustaría que fuesen más espaciadas que en el pasado verano, y más abundantes que el último mes de 2008. También intentaré que sean más técnicas, aunque me conozco y más de una vez pecaré de apóstata de uno u otro Imperio, o me dejaré llevar por la necesidad de evangelizar sobre un uso moderado y racional de los recursos. En cualquier caso, sí que intentaré centrarlos más en temas relacionados con la seguridad y el desarrollo de software, especialmente a la conjunción de ambos temas (que para eso constituyen el subtítulo del blog, y especialmente a lo primero me gustaría dedicarme con mayor interés durante el año presente).




Así las cosas, bienvenidos un año más, que esperemos sea fructífero y permita aprender mucho unos de otros.