21 mayo, 2004

Spectrum 48k ayer y hoy

Mi primer microordenador personal fue un Sinclair ZX Spectrum 48k. Con él aprendí a programar, toscamente, en Basic. También me inicié en el mundo de los videojuegos, ahhh que tiempos aquellos... Y qué manuales, para una Rom de unas pocas kas tenías un manual de 200 páginas, donde aprendías a programar. Hoy en día, sistemas operativos de Gigas traen un folletín que no sirve para nada.

Por decir algunos juegos: Spy Hunter, Saboteur, Robin Hood, Bruce Lee, Jack the Nipper II, Dustin, West Bank, y una lista interminable...

Tuve mi spectrum desde los ¿8 años? hasta que se rompió (sacar el interfaz kempston en caliente no es bueno) y ... no recuerdo lo que pasó exactamente con él, se perdió (como dijo Clark Kent: con todos mis superpoderes y no he podido salvarlo). Hace tiempo conseguí rescatar algunas cintas antiguas y pasar algunos programillas al Pc por el puerto paralelo.

Por aquel entonces yo no sabía lo que era «ensamblador» y ya me hubiera gustado que alguien me lo explicase, pero hoy el spectrum sigue vivo, no solo en mi corazón sino en Internet. Vease http://www.microhobby.org, donde un grupo de voluntarios han escaneado las revistas y las han colgado online. Además tienen nuevos inventos (cargar los juegos desde Cd-Audio al doble de velocidad). Allí he podido leer un curso de programación (hay dos: Basic y Código Máquina). Es bastante rudo, no usan compiladores ni ensamblador, se programa directamente en octetos en base 10, para mas inri. El programa más sencillo es un «LD BC,#6A7F ; RET» tal que así:

 DATA 1,127,106,201

De tanta nostalgia se me ha ocurrido que tengo que adaptar un teclado de Pc para que parezca un spectrum. Con todos los comandos pintados en colores y el fondo negro... ohh... y no tener que memorizarlo para programar.

I miss you. 48k Forever!

Correción gamma

Tras varios meses con mi flamante monitor TFT hp pavilion f1523 sufriendo un problema de color he conseguido solucionarlo. El monitor parece ser que está optimizado para ordenadores hp (eso dicen las instrucciones) de manera que en mi Pc se ve mas blanco que un fantasma, en fin por 300ý qué se puede esperar.

Intenté ajustar el control de brillo y contraste del monitor pero no sirvió de nada. El problema es que hay una saturación de señal a la entrada del monitor, y eso sólo se puede solucionar ajustando los niveles de salida de la tarjeta gráfica.

Bueno, en windows el driver de la Ati Rage128 (o compatible) permite ajuste de brillo y corrección gamma-2D (ajuste del punto central de la curva en X e Y). Esto es suficiente para dejarlo más o menos fino.
En Linux, con XFree 4.3, no tenía más opción que ajustar la corrección gamma-1D a un valor menor que 1, lo cual da resultados bastante oscuros y no resuelve completamente el problema.

En mi empeño por dejar las X al menos tan bien como en windows busqué en google y envié un mensaje a la lista de correo (sin éxito), pero no ha sido hasta hoy que he encontrado en google el programita xbrightness-gui.

Resulta que desde la versión 4.1 de X, aquellos drivers que lo implementan permiten ajustar con gran libertad la curva de color, permitiendo auténticas virguerías (y barbaridades si se configura mal) mediante la función XF86VidModeSetGammaRamp(). Este sencillo programa permite definir prácticamente cualquier curva para los tres canales de color, como la herramienta curvas del gimp, permitiendo ajustar los valores extremos (más oscuro y más claro) de manera arbitraria.

Intentando calibrar la curva para evitar saturaciones y saltos bruscos diseñé un gradiente monocromo, y usé la imagen de prueba de tkgamma. Tras las pruebas quedé desconcertado. La corrección de gamma necesaria para que un monitor tenga un comportamiento lineal, que sería lo lógico esperar (muchos pixeles blancos=255 y negros=0 a lo lejos deben verse como gris=127), es de 2.0 a 3.0. Hay que decir que KDE o cualquier aplicación con gamma 2.0 se ve horrible. Por alguna razón todas las tarjetas en todos los sistemas operativos con todos los monitores tienen un valor por defecto de 1.0 cuando deberían ser en torno a 2.0, quizas sólo sea un problema de compatibilidad hacia atrás, quien sabe.

  • Una foto de mi Pc, monitor incluido

  • PD: Cuando lo tenía todo listo se me quemó la placa y he vuelto al P-II 400Mhz leeento...

    08 mayo, 2004

    KVIrc 3.0.0

    Está a punto de salir la versión estable de KVIrc 3. KVIrc es un maravilloso cliente de irc multiplataforma hecho en Qt. Algunas de sus caracteristicas son:

    • Potente lenguaje de scripting integrado con capacidad de programar objetos.
    • Interfaz MDI, con posibilidad de separar los mensajes del canal de texto de los eventos, resaltar los nicks, usar imagenes con cada nick (avatares), y un montón de cosas más.

    Además dispone de un módulo para ejecutar órdenes externas llamado exec, hecho por un tal SuD.

    Lee el artículo completo y verás (con capturas) por qué me parece el cliente de chat más profesional, o visita http://www.kvirc.net

    Esta es la captura (un poco retocada para que quepan todas las cosas a la vez):

    Características:

    • Imágenes personalizadas (avatares)
    • Barra horizontal de separación de los mensajes del canal (texto) de los eventos (join,part,etc)
    • Indicadores de actividad (junto a cada nick) y en los hints por cada nick y canal
    • Multiservidor
    • Codigo de color personalizable en la barra de ventanas.
    • Coloreado inteligente de nicks
    • Entrada de texto con editor multilínea
    • Cambiar la codificación, criptografía, de cada ventana al vuelo.

    Grafos de conocimiento

    Representar el conocimiento de manera formal es uno de los desafíos de la inteligencia artificial que lleva mucho tiempo sin terminar de resolverse.

    Uno desearía poder expresar cualquier idea de manera que pudiera ser procesada por una máquina (o por un humano) de manera sencilla y sin ambigüedades, y a lo largo del tiempo se han desarrollado sistemas de representación del conocimiento. Sin embargo, esto no es una tarea fácil. Piensa por ejemplo en las secciones de mi weblog. Hay una serie de categorías cerradas (matemáticas, computación, tecnología, etc) para las noticias. Cada vez que pienso en una idea para una noticia tengo que asignarle una sola categoría (o crear la categoría si no existía a priori) pero toda noticia pertenece a varias categorías simultáneamente porque hablo de distintos temas y quiero expresar distintas cosas, así que necesitaría un sistema más potente.

    El modelo entidad-relación (cada cosa es una entidad con una serie de atributos, y cada cosa se relaciona con otra mediante una relación) se usa en bases de datos porque permite manejar el conocimiento con un álgebra muy estudiada y que se puede implementar en un computador.

    El modelo orientado a objetos es similar al anterior, y aparecen los términos: clase, objeto, herencia.

    Hay una infinidad de métodos y teorías para representar y procesar el conocimiento, pero hasta donde yo sé (que no es mucho) ninguna permite representar todo el conocimiento que un humano pueda tener.

    Con todo esto llego a un par de conclusiones: el conocimiento es puñetero y sirve para hacer tesis doctorales. Hagámonos una idea de cómo funciona el único sistema que funciona actualmente sobre conocimiento puñetero: el cerebro humano. No sabemos cómo funciona, pero sabemos que se basa en un modelo de redes neuronales. Las estructuras neuronales tienden a ser aleatorias y caóticas, y son sobre todo un sistema de caja negra (desconocemos la estructura interna pero sabemos que funciona). Si no podemos estudiarlo por dentro de poco nos sirve para desarrollar un sistema formal. Así que es mejor partir desde 0.

    Ahora intentaré crear un sistema de clasificiación de noticias para un weblog. El objetivo de este sistema es, por ejemplo, separar la parte personal de la parte técnica del contenido del weblog, distinguiendo las noticias de un tipo y de otro.

    1. Categorías sueltas. Es el modelo actual. Con este modelo se pueden seleccionar noticias eligiendo un conjunto de categorías.
    2. Árboles. Extiende el concepto de categoría, haciendo categorías de categorías, a varios niveles. Permite tener una supercategoría que englobe a todas las categorías técnicas, por ejemplo.
    3. Grafos. Volviendo al título del artículo, sostengo que el conocimiento se estructura de manera tan o más compleja que un grafo. El grafo es más potente y complejo que un árbol ya que permite ciclos. Los modelos ER y de objetos permiten modelar sistemas con ciclos y por tanto son grafos.
      Un sistema de weblog con categorías basadas en grafos relacionar categorías entre sí (facilitando la búsqueda de temas relacionados), y relacionar un artículo con varias categorías a la vez (incluso asignando distintos grados de relación a cada categoría), y veríamos que cada artículo tiene varios iconos de tema de distinto tamaño en función de la relación que tenga con el tema.
      En cualquier caso un modelo basado en grafos puede ser suficientemente potente para resolver el problema de las categorías, pero para llevarlo a cabo nos encontramos los siguientes problemas
      • Requiere un esfuerzo de diseño considerable. Hay que decidir que modelo implementar, y establecer con acierto las relaciones entre los elementos.
      • Puede requerir de un sistema experto para realizar la clasificación y las búsquedas, cosa que facilitaría el diseño, si bien estos sistemas suelen estar en el límite del tipo caja negra.
      • Surgen problemas con los multigrafos. Hay que establecer las diferentes relaciones que se pueden dar entre dos nodos. Por ejemplo, el nodo «yo» puede estar relacionado con el nodo «universidad» porque estudie allí, porque trabaje allí o porque sucediera algo estando yo allí. El sistema no deben devolver resultados de búsqueda relativos con estudios si están bucando temas laborales.

    Experimento 1. Pensando en estos temas re-diseñé mi página web hace un tiempo. Enseguida me dí cuenta de que casa subpágina (que había hecho en distintas épocas y por distintas razones) podía pertenecer a una o más categorías.
    Tenía una serie de objetivos en mente:

    • Clasficiación completa. Todas las subpáginas deben pertenecer a alguna categoría
    • Navegación directa. El usuario no entrará en una sección buscando algo que en realidad está en otra sección, evitar esos «callejones sin salida» muy frecuentes en muchas páginas.

    Determinando que modelo usar en mi página.
    Tras seguir un razonamiento similar al del artículo, llegué a la conclusión de que lo óptimo sería establecer grafos que representarían las secciones y las páginas y las relaciones (enlaces) entre ellas:

    1. Categorías. Me dí cuenta de que la categorías eran aproximadamente: personal, linux, programación y humor. El problema es que algunos conceptos pertenecen a linux y programación, otros a personal y humor, etc.
    2. Árboles. En este caso no me solucionan ninguno de mis problemas.
    3. Grafos. Necesitaba realizar un diseño complejo basado en grafos para después representarlo de manera limitada (2 dimensiones) en pantalla.
      Primero tomé las categorías e hice un grafo con las relaciones entre ellas. Me pareció correcto, pero me dí cuenta de que no servía de mucho, ya que no incluía la relación entre artículos que pertenecen a varias categorías y que complican bastante el grafo.
      Después intenté ampliar el grafo añadiendo unos artículos directamente en las categorías (artículos puros), y otros artículos como relación entre varias categorías (artículos multicategoría). Tras esto tenía ya un grafo de mi web válido.

    Representando un grafo en html
    Tenía un grafo de unos 15 nodos (entre categorías y artículos), cada uno con entre 1 y 4 relaciones (relaciones entre categorías y artículos multicategoría). Mi intención era simplificarlo lo más posible perdiendo la mínima información, facilitando así su interpretación visual. Podía valerme de 2 dimensiones, y opcionalmente 3 (proyectando un grafo 3D en un plano y facilitando la navegación con el manejo interactivo usando un applet java). El problema de esta «vacilada» es que requieren más esfuerzo para captar la estructura tridimensional, y no se puede usar la memoria visual 2D para navegar (ya que el aspecto de la proyección es variable), obligando al usuario a usar la visión espacial contínuamente (y a instalar el plugin de java ;). Para hacerlo en 2D era una tarea difícil ya que aquello no era un grafo plano y siempre había algún nodo descolocado. Tras varias simplificaciones opté, muy a mi pesar, por usar una sola dimensión. Así que de todo lo propuesto el resultado es bastante más simple: una lista ordenada de categorías, con varios artículos en cada una.
    Eso sí, me hice la promesa de interenlazar aquellos artículos que, aun siendo de diferentes categorías, estaban relacionados, de manera que se podría navegar con cierta libertad sin necesidad de ir hacia atrás.
    Otra idea que apliqué es que cuando yo diera enlaces directos a mi web, crear un index.html que mantenga el frame de navegación de la izquierda y muestre en la derecha la página en cuestión.
    El resultado: http://www.latinsud.com

    Experimento 2
    Un día pensé en una especie de Wiki, pero como no tenía ganas de montar uno en php lo hice estático (se editan las plantillas, se procesan con un script y si se edita hay que volver a procesarlo). La ventaja del Wiki es que genera los enlaces entre artículos de manera automática, permitiendo una navegación directa (sin necesidad de echar marcha atrás) cuando hay suficientes enlaces.
    Quería plasmar en ese wiki un montón de conceptos de todo tipo de manera ordenada y de manera que cualquiera pudiera navegar intuitivamente desde un concepto hasta otro relacionado. Nada más lejos de la realidad, el resultado es un ente caótico donde uno no sabe qué páginas encontrará al pinchar dos veces en un enlace, y donde (por falta de enlaces) es difícil encontrar lo que se busca.
    El resultado: http://unia.ual.es/socios/sud/index2.html

    Conclusiones finales

    • Estamos en una época en la que queremos que las máquinas piensen por nosotros. El esfuerzo que debe realizar la máquina (y su diseñador) es infinitamente superior a la cantidad de trabajo que alivia a cada usuario. Esta tarea de investigación es, sin embargo, necesaria para el desarrollo de la sociedad de la información.
    • La complejidad del conocimiento crece de manera exponencial a medida que vamos incorporándolo a nuestro saber. Por esto necesitamos aislar un conocimiento de otro y trabajar con cada uno de manera separada y eficiente. Podemos ayudarnos de las máquinas para procesar este conocimiento por nosotros.

    ADMTek 8211 en Linux

    Hace un tiempo compré una tarjeta CardBus SMC 2365w con el chip ADMTek 8211.

    La tarjeta es barata pero es una patata, poca sensibilidad de recepcion, sin conexión de antena, mal soporte en Linux.

    No obstante con paciencia y cabezonería se consiguen las cosas. Al tiempo de tenerla me empeñé en usar la tarjeta para escanear redes, e hice un parche para el driver (semi-opensource), ahora mismo hay gente desarrollando un driver GPL.

    De igual manera pude ver que la tarjeta lleva un conector oculto, que no es un uFL a pesar de lo que todo el mundo dice sino un MS-156, el mismo que otras tantas tarjetas.

    En fin, poco a poco la tarjetita se va convirtiendo en la herramienta perfecta del hacker wirelero, y le voy comiendo terreno a la Airport del iBook de cierto individuo ;).

    Un weblog

    He decidido montarme un weblog. Quizás porque estaba aburrido, aunque tendria cosas más urgentes que hacer. Quizás porque tenga muchas cosas que contar, aunque soy bastante callado. O quizás como sitio de denuncia pública. Bueno espero que haya de todo.