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.

miércoles, 13 de mayo de 2009

¡Ordenadores para todos!

Entre las noticias que el Presidente del Gobierno hiciese públicas durante el Debate sobre el Estado de la Nación destaca una que, por afinidad a los contenidos del blog y al propio desasosiego que me creó, no puedo resistirme a comentar hoy. Se trata de la iniciativa de otorgar a las familias españolas un “cheque digital” de 50€ por niño y ayudas a la concesión de créditos de bajo coste para la adquisición de ordenadores portátiles que contribuyan a que los niños estudien, en casa y en el aula. Ante esto, me vienen a la cabeza una serie de situaciones, pasadas, presentes y futuras, que no dejan de inquietarme.


La primera, como no podía ser menos, es el actual analfabetismo digital que sufre el país. Por llamarlo de algún modo, esta carencia de conocimientos sobre informática en España es una rémora que venimos sufriendo desde que Infovía era lo más parecido a Internet que teníamos aquí y de aquellos tiempos en los que la conexión a Internet era, a la par que penosa (¡ay, qué fue de aquellos modems a 56Kb!) extremadamente cara. Ah, cierto, salvando las distancias, hoy día sigue siendo cara para el servicio que ofrece, comparativamente hablando, claro está, con respecto al resto de Europa. Obviamente, España necesita modernizarse, entrar de pleno en las nuevas tecnologías, y esta es una labor que debe llevarse a cabo fundamentalmente con los niños. Hasta ahí, totalmente de acuerdo, por más que éste y anteriores gobiernos hayan hecho caso omiso a estas necesidades de modernización.


Dicho esto, y partiendo de la necesidad de acercar la informática a los niños y jóvenes, me embarga un sentimiento de “Abuelo Cebolleta” que me lleva a plantearme cómo hemos llegado a un punto tan crítico en la falta de educación de estas generaciones. No hablo ya del acercamiento a las tecnologías, sino de materias básicas. Los diversos cambios organizativos y estructurales impulsados por las distintas legislaturas han llevado al sistema educativo español a un nivel de paupérrima calidad. Cada vez se enseña menos y peor. Los niños, los jóvenes (y hablo en general, obviamente existen honrosas excepciones que confirman la regla) a día de hoy escriben y se expresan peor, tienen menos conocimientos que antes, menor comprensión lectora… En general, y valga la redundancia, no “aprenden a aprender”. ¿Solucionará esto la introducción de los ordenadores en las aulas? Sinceramente, no lo creo. En mi caso (personal y particular), no me considero un negado para la informática. Para bien o para mal, aquí me tenéis, con más de 20 años a las espaldas de quemarme las retinas frente a monitores TFTs y CTRs, pantallas de fósforo verde y televisores (en los tiempos gloriosos de los 8 bits es lo que había :P), por devoción y profesión dedicado a la informática, y a día de hoy no concibo aprender frente a un ordenador. Aprender, entiéndase, leyendo libros o usando cursos on-line. Y que conste que he sido alumno de numerosas acciones formativas a distancia, con plataformas de todos los sabores, e incluso durante unos cuantos años me dediqué a la docencia, usando entre otros recursos formativos estos portales y otros contenidos multimedia. Sinceramente: se asimila un 50 ó 60%, siendo generoso, de lo que sería posible con un medio más tradicional, y de este porcentaje se retiene una ínfima parte. Entonces, ¿no es posible aprender con un ordenador? Mi respuesta es que sí, pero depende de cómo y de qué, los resultados serán mejores o peores. A todo esto habría que sumarle la reticencia del profesorado (como en el caso anterior, generalizo pero por desgracia la tendencia es la que describo) a reciclarse, a acercarse y aprender sobre nuevas tecnologías. Triste pero cierto, los docentes no quieren ser discentes para mejorar en su trabajo.


Por último, y pasando a un plano más técnico, se me ocurre pensar en qué condiciones establecerá el Gobierno a la hora de otorgar las ayudas, o seleccionar los equipos que deberán usar los alumnos. ¿Se decantará por una alianza con Microsoft u otras grandes compañías de software para preinstalar en los equipos el sistema operativo y software ofimático necesario para sacarles partido? ¿Pagaremos de nuestro bolsillo 100 milloncejos de euros al año en licencias? ¿O se optará, como ya están haciendo las Comunidades Autónomas de Extremadura, Andalucía y  la Comunidad Valenciana con sus distribuciones de GNU/Linux, por promocionar  y usar software libre? ¿Y el hardware? Se habla de portátiles (infiero que netbooks), muy prácticos pero a la vez difícilmente actualizables. ¿Qué ocurrirá con los equipos que vayan quedando obsoletos? ¿Se obligará a los distribuidores a garantizar su reciclado? ¿Se exigirá que cumplan con directivas internacionales en torno a eficiencia energética? Muchas preguntas y muy pocas respuestas.


A vosotros, ¿qué os ha parecido la noticia? ¿Cómo enfocaríais un proceso de enseñanza guiado por medios informáticos? ¿Qué tipo de requisitos exigiríais a los equipos y al software instalado en los mismos?



Para leer más sobre esta noticia, y conocer algunas posturas al respecto:




Actualización, a 19 de mayo de 2009:

He encontrado un par de recursos interesantísimos en torno al aprendizaje utilizando libros electrónicos, que me encantaría compartir con vosotros:

miércoles, 6 de mayo de 2009

Recursos interesantes

Aquí me tenéis estrenando la opción "QuickPress" de Wordpress, es decir, la de publicación de entradas rápidas y sin demasiada miga. Lo hago simplemente para recomendaros, en un momento, una interesante web que acabo de descubrir y que contiene una serie de Guías de Buenas Prácticas en desarrollo, diseño de arquitecturas, seguridad...


Se trata de la wiki Guidance Share, y podéis encontrarla en el enlace que os dejo.



Saludos.

martes, 5 de mayo de 2009

Escritura social


La expansión de la web cada vez colaborativa que estamos viviendo en los últimos años parece no alcanzar límites. La generación de contenidos se lleva a cabo, de momento, de forma democrática y espontánea, por lo que el volumen de información que alberga Internet crece de forma prácticamente exponencial. Ante tal avalancha de datos, se hace preciso refinar los métodos de búsqueda, selección y valoración de los contenidos, algo en lo que trabaja nuestro amigo Google, pero en lo que también colaboran los usuarios, a través de recomendaciones, enlaces cruzados, meneameses y similares herramientas. No cabe duda de que en los próximos años deberían aunarse esfuerzos en aras de conseguir una mayor optimización en la faceta organizativa de Internet, o correremos el riesgo de perecer en un naufragio de información, saturados por la tormenta digital que se nos viene encima.


En cualquier caso, la profusión de redes sociales de todo tipo que vivimos hoy día, y que nos lleva a vivir una existencia 2.0 paralela a la real dotada cada vez de mayor peso, alcanza a (casi) todos los aspectos de la vida. Entre ellos, al de la escritura colaborativa. No hablo de las wikis, que han mostrado su eficiencia a la hora de compartir información y permitir la colaboración activa de los usuarios para generar contenidos de calidad, ni de medios más obsoletos de crear contenidos comunes, como el recuerdo grato de una Internet 0.1 en la que, a través de una lista de correo (la Lista Tolkien), una serie de compañeros creamos una especie de libro colaborativo, que surgió de forma espontánea a través de los mensajes de correo, y que derivó en la llamada Guerra de la Cerveza. Otra colaboración espontánea que resultó muy interesante fue la traducción conjunta de los poemas del libro de J.R.R. Tolkien Las aventuras de Tom Bombadil, y que, dada la calidad de la traducción, fue posteriormente publicado por Minotauro en forma de libro, cubriendo así un hueco editorial que los seguidores de Tolkien acusábamos desde hacía años.


Así, si es posible colaborar y trabajar en común en una Internet que se nos antoja a día de hoy prehistórica, si existen herramientas cada vez más poderosas para la escritura y edición conjunta (las wikis, los documentos compartidos de Google o de Microsoft Live…), ¿cómo no iba a surgir una red social en torno al proceso de escritura? Existe, y su nombre es SoopBook (Social Open Book Community). Esta red social se basa en la lectura y escritura colaborativa, en crear un libro, definir quiénes pueden verlo y editarlo, y comenzar a escribir. El resultado puede ir compartiéndose, se permite el espacio para la valoración y crítica (es de esperar que constructiva). En cierto modo se trata de la traslación al mundo de las redes sociales de conceptos ya existentes en cuanto a la publicación de contenidos, como las webs de publicación de relatos, o blogs usados como herramienta de escritura, con el aliciente de que, al encontrarse centralizado todo el proceso de escritura y lectura por parte de otros usuarios, se produce un flujo continuo de comentarios que puede retroalimentar a los escritores de forma inmediata.


Una interesante herramienta que, como todas las redes sociales, necesita del respaldo de la comunidad para existir. Bueno, qué, ¿escribimos un libro de informática en modo colaborativo?

jueves, 23 de abril de 2009

La economía del ahorro

En el mes de abril se unen dos días señalados, el de la Tierra, ayer mismo y el del Libro que se celebra hoy mismo, y que pueden, entre ambos, hacernos pensar un poco cómo podemos dar cumplida cuenta de ellos desde el blog y homenajearlos como merecen.


Por un lado, está claro que nuestro pequeño planeta está cada día más agotado. Los recursos son finitos y, tanto por esto como porque nos interesa desde todos los aspectos (medioambiental, económico, social…) deberíamos contener nuestro gasto de recursos para minimizarlo en lo posible.



Por otro, la aplicación el invento de Gutenberg a la impresión de los libros revolucionó literalmente el acceso a la cultura por parte de la población. Sin embargo, bien lo sabemos, el uso de la imprenta y sus “derivados” también repercutieron en el SPAM de épocas pretéritas: la publicidad indeseada, con el consiguiente desperdicio de papel y tinta, que tanto daño ha hecho al medio ambiente.
Si unimos ambas situaciones y tenemos en cuenta lo fácil que resulta hoy día instituirse en nuestros propios impresores utilizando ordenadores e impresoras a destajo, es fácil darse cuenta del despilfarro que llevamos a cabo en la impresión de correos y documentos (especialmente cuando se trata de borradores) en nuestro día a día. Así, aunque intentemos aprovechar las dos caras del folio o imprimir dos o más páginas, de forma reducida, en una sola, lo cierto es que seguimos gastando tinta y papel a destajo.

Por eso, además de utilizar estos medios por todos conocidos para minimizar un poco más el impacto sobre el medio así como para nuestro bolsillo, os invito a probar la Ecofuente. No, no se trata de un manantial inagotable de agua fresca y potable, sino de una tipografía para nuestro ordenador que, creando huequitos  en las letras como si de un queso gruyer se tratase, intenta ahorrar un poco de tinta cuando imprimimos nuestros documentos.



Ah, y si incluso Ecofont os parece poco, tal vez será de vuestro gusto la impresora manual de café. ¡Eso sí, es posible que ante un pico de trabajo nos quedemos sin suficiente tinta porque lleguemos a consumirla nosotros mismos!

miércoles, 22 de abril de 2009

Ironías de la vida

Hace tiempo “regresé” a los tiempos de la carrera al llevar a cabo un trabajo relacionado con ASN.1, ya que estaba relacionado con el análisis léxico y sintáctico de definiciones llevadas a cabo usando esta notación. Aunque las asignaturas relacionadas con este campo más formal de los lenguajes de programación no eran las que más me apasionaban, lo cierto es que llegaron a gustarme bastante en su día, y comprobé la evolución que habían sufrido herramientas de análisis sintáctico y semántico, como los clásicos lex y yacc, e incluso sus “descendientes” Flex/Bison o JFlex/Cup, para llegar a un generador de analizadores como el potente ANTLR, capaz de generar un analizador léxico, sintáctico o semántico en varios lenguajes (Java, C#...) a partir de una serie de reglas EBNF.


Así las cosas, no es de extrañar que, unos meses después investigase un poco más por mi cuenta en este campo, y me encontrase con una interesante herramienta que, de manos de Roman Ivantsof, tenemos disponible en Codeplex. Se trata de Irony.NET, un generador de compiladores/interpretes para los lenguajes definidos a partir de una gramática. Hasta aquí, nada novedoso. Pero lo interesante es que las gramáticas LALR(1) se definen directamente en C#, utilizando las clases que la propia plataforma proporciona, usando claro está notación BNF. A partir de esta definición de la gramática, puede generarse el árbol sintáctico de una entrada en dicho lenguaje. Por ejemplo, un SELECT de SQL quedaría definido así:



La distribución de la herramienta, al estar en Codeplex, es a partir de su código fuente, por lo que podemos bajar la solución completa para estudiarla y ejecutarla. Incorpora varias gramáticas definidas como ejemplo, entre las que se incluyen lenguajes tan suculentos como C#, Ruby o Python, e incluso SQL y JSON.


Si ejecutamos el proyecto de prueba Irony.GrammarExplorer, podemos “cargar” la DLL con las gramáticas definidas en el proyecto Irony.Samples como si de un plugin se tratase, así comoactivarlas y desactivarlas.



Incluso es posible escribir código en el explorador y estudiar la generación de código y del árbol de sintaxis abstracta para la entrada. tanto en forma de árbol "visual" como en XML:




Todo un descubrimiento que puede ayudarnos a mejorar nuestro conocimiento sobre la generación de compiladores e intérpretes de lenguajes, así como a crear los nuestros propios. ¿Qué tal un parser para aventuras conversaciones, como los clásicos PAWS o Inform? ;)

martes, 21 de abril de 2009

Funciones Variadic

José Manuel, un compañero de trabajo, tuvo que enfrentarse no hace mucho a las delicias de la interoperatibilidad (menudo palabro) de .NET con el código no administrado en C y C++. Entre las interesantes situaciones que se le ofrecieron, le llamó la atención especialmente la llamada a funciones con un número indeterminado de parámetros, y que puede llevarse a cabo llevando a cabo unos cuantos malabares. Interesado por el tema, y conociendo la existencia de este blog, me ofreció la posibilidad de compartir con la comunidad el siguiente artículo. Sobra indicar mi agradecimiento ante su colaboración. Aquí os dejo con su artículo:


En C y C++ se permite definir funciones con un número indefinido de argumentos. Son las llamadas funciones variadic, las cuales se declaran igual que las demás, salvo que en su lista de argumentos aparece, siempre en último lugar, el símbolo de elipsis (tres puntos).


Un ejemplo de función variadic es wsprintf, que se declara como:



int cdecl wsprintf(LPTSTR  lpOut, LPCTSTR  lpFmt, ...);

La función wsprintf da formato y almacena una serie de caracteres y valores en un búfer. Cualquier argumento se convierte y copia al búfer de salida de acuerdo al formato correspondiente especificado en la cadena de formato.


En esta declaración observamos que la función necesita al menos dos argumentos fijos y luego un número variable de argumentos, es decir, en diferentes invocaciones a la función, no tiene por que pasarse necesariamente el mismo número de parámetros.


Uso de funciones variadic no administradas desde .NET


En ocasiones tenemos que invocar desde código que se ejecuta bajo el control de la Common Language Runtime (código manejado), funciones que se ejecutan fuera de CLR, como por ejemplo las funciones de la API de Win32 (código no administrado).


Si además de eso, la función que queremos usar es variadic, dos son las posibilidades que tenemos para hacerlo. Supongamos que queremos hacer uso de la función wsprintf desde un proyecto de consola en Visual C#.NET.



La 1ª opción:

Digamos que es la “forma oficial”, la recomendada por Microsoft. Se trata ni más ni menos de sobrecargar la función abarcando todas las posibilidades de uso que vamos a necesitar. Esta no es para nada una solución flexible.



[csharp]
using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Interop.UnmanagedCode.VariadicsFunctions
{
class wsprintfUse
{
// 1ª sobrecarga
[DllImport("user32.dll",
CallingConvention=CallingConvention.Cdecl)]
static extern int wsprintf(
[Out] StringBuilder buffer,
string format,
int arg);

// 2ª sobrecarga - varargs
[DllImport("user32.dll",
CallingConvention=CallingConvention.Cdecl)]
static extern int wsprintf(
[Out] StringBuilder buffer,
string format,
int arg1,
string arg2);

static void Main(string[] args)
{
StringBuilder buffer = new StringBuilder();
int result = wsprintf(buffer, "%d + %s", 2, "posibilidades.");
Console.WriteLine("result: {0}\n{1}", result, buffer);
}
}
}
[/csharp]

Ejecutar este código arrojaría el siguiente resultado:



Realizamos la llamada a través del atributo DllImport. Este atributo se puede aplicar a métodos y proporciona la información necesaria para importar una función exportada desde un archivo DLL no administrado. Como requisito mínimo, debe suministrarse el nombre del archivo DLL que contiene el punto de entrada.


Señalar que la convención de llamada necesaria para llamar a métodos implementados en código no administrado es Cdecl, en la que el llamador limpia la pila. Esto permite llamar a funciones con varargs, que resulta apropiado para funciones que aceptan un número variable de parámetros como la que nos ocupa.



La 2ª opción:

Si está dispuesto a basarse en características indocumentadas (= no deberían usarse), también puede utilizar la palabra clave __arglist para definir un método “varargs”.


No es conveniente utilizar la convención de llamada “varargs” o elipsis (...) ya que no es compatible con la Common Language Specification (CLS). Además, no es accesible para todos los lenguajes. Visual Basic no admite la convención de llamada VarArgs.


El beneficio es que, de esta forma, se puede utilizar un método único para todo tipo de parámetros sin necesidad de la sobrecarga:



[csharp]
using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Interop.UnmanagedCode.VariadicsFunctions
{
class wsprintfUse
{
// 1ª sobrecarga
[DllImport("user32.dll",
CallingConvention=CallingConvention.Cdecl)]
static extern int wsprintf(
[Out] StringBuilder buffer,
string format,
__arglist);

static void Main(string[] args)
{
StringBuilder buffer = new StringBuilder();
int result = wsprintf(buffer, "%d + %s", __arglist(2, "posibilidades"));
Console.WriteLine("result: {0}\n{1}", result, buffer);
}
}
}
[/csharp]

En este caso, la salida quedaría:




__arglist se utiliza tanto en el método de declaración como en la llamada (adjuntando entre paréntesis, separados por comas, los parámetros a pasar).

Por último añadir que para bibliotecas de clases administradas, no hay necesidad de utilizar esa convención de llamada. Es mejor utilizar la palabra clave params (ParamArray en Visual Basic).



[csharp]
public void VariableArguments(params string[] wordList)
{
for(int i = 0; i < wordList.Length; i++)
{
Console.WriteLine(wordList[i]);
}
}
[/csharp]

Usando __arglist, habría que marcar al método con el siguiente atributo:
[csharp]
[CLSCompliant(false)]
public void VariableArguments(__arglist)
{
ArgIterator argumentIterator = new ArgIterator(__arglist);
for(int i = 0; i < argumentIterator.GetRemainingCount(); i++)
{
Console.WriteLine(
__refvalue(argumentIterator.GetNextArg(), string));
}
}
[/csharp]

domingo, 12 de abril de 2009

Ranaremake


Recuerdo con gratitud los años mozos en los que las vacaciones eran, en buena parte de su duración, tiempo para “viciarse” a los juegos de ordenador que compartía con mis amigos, y que intentábamos pasarnos de forma cooperativa o competitiva, tanto daba una cosa como la otra. Si el juego se nos resistía, colaborábamos, si no, nos empecinábamos en terminarlo antes que los demás. Eran tiempos de seguir al vejete de Mêlée Island y combatir con insultos a la Sword Master, de aprender la palabra mágica Muzaq para enfrentarnos a Uukrul, o de batir un record en tiempo a la hora de rescatar a la princesa de las garras del terrible Jaffar.



Antes incluso de todo esto, me viene a la memoria un increíble juego para los 8 bits, el primero que adquirí, llamado Ranarama. Aunque se ha dicho una y mil veces que era una especie de clon del Gauntlet, nada más lejos de la realidad. Ranarama abrió el camino de los juegos de rol, llevando a Mervin, su protagonista convertido en rana, a lo largo y ancho de varios niveles de laberintos con el único objetivo de limpiar de enemigos el castillo y, de paso, recuperar la forma humana. Digo que Ranarama no es una nueva versión de Gauntlet y lo digo con conocimiento de causa: sus laberintos permanecían ocultos, desvelándose habitación por habitación, existían numerosos tipos de hechizos (de ataque, defensa, conocimiento…) que mermaban las fuerzas de Mervin cuando los invocaba, por lo que debían usarse con prudencia, aunque podían tener efectos devastadores. Requerían del fortalecimiento de nuestro héroe para poder acceder a niveles mayores de sabiduría. Si conseguíamos por un casual suficientes runas, tras la lucha con los Warlocks, para adquirir hechizos demasiado poderosos, y aún no estábamos preparados para su uso, posiblemente caeríamos rendidos por nuestras propias ansias de poder.



Con semejante argumento y desarrollo, Ranarama, de Steve Turner (Graftgold) y publicado por Hewson en 1987, se convirtió en uno de mis títulos preferidos de Spectrum. Así, es natural que cuando descubrí años después que se estaba desarrollando un remake del mismo para PC, acudiera ansioso a la web de los creadores para ver las maravillas que prometía el nuevo juego. Gráficos y banda sonora renovada y, sobre todo, la posibilidad de jugar de nuevo a Ranarama, me maravillaron. Sin embargo, por aquel entonces, hará unos dos años, el proyecto parecía detenido. Esta Semana Santa, aprovechando las vacaciones, he vuelto a recordarlo y me he sorprendido al encontrarme el juego terminado y listo para su descarga, bajo el nombre de Ranaremake. La verdad es que lo he estado jugando y promete ser un digno sucesor de aquel maravilloso juego que me tuvo enganchado durante meses. Os lo recomiendo encarecidamente. Y de paso, no dejéis de echar un vistazo a otros remakes de juegos imprescindibles, como el Capitán Sevilla o Sir Fred.