archivo

Archivos Mensuales: diciembre 2009

Como algunos ya habéis descubierto, esta noticia es una inocentada. No existe el cliente para Twitter Quicker, aunque todo lo demás es cierto y posible. Es decir, podemos conectar nuestro QL a Internet directamente y navegar en modo texto o incluso hacer un cliente Twitter como el que se muestra. en los comentarios explico en detalle las claves de la broma.

Desde hace unos días estoy probando el cliente quicker para QL de Nicklaus Saint, quien me lo envió para que lo testara y le diera mis impresiones. Está aún en fase alpha y son pocas las opciones que funcionan completamente o no le faltan alguna característica.

Quicker es un cliente Twitter que usa el código fuente de Gwibber, un cliente GPL para Gnome, por lo tanto, también es GPL. Entro en detalles.

La instalación: Me ha resultado frustrante porque no dispongo de un modem para QL ni de un modem serie, por eso, el autor y yo, hemos tratado de averiguar la forma de conectar el QL a un servidor Linux para poder acceder a Internet, pero no hemos sido capaces todavía, así que al final he usado Q-emuLator y todo ha ido como la seda. Os adjunto en el zip el fichero de configuración que he usado por si os sirve.

La conexión: Conectar a Twitter ha sido muy fácil. Una vez ejecutamos el programa y este detecta el socket TPC/IP, nos aparece una ventana en el centro de la pantalla que nos pide el user y la password. Tras unos segundos estamos en la pantalla que podéis ver a continuación:

Captura de pantalla de Quicker

El programa: Como dije, el programa está aún muy verde, pero hay cosas que ya funcionan sorprendentemente bien, como por ejemplo el listado de twitts (los mensajes que se ven en la zona blanca de la pantalla). el scroll de texto es rápido y es muy cómodo. Se usa para ello las teclas del cursor arriba y abajo. Las teclas izquierda y derecha se emplearán para seleccionar los enlaces dentro del twitt activo (en verde). Con ENTER lanzaremos el enlace que llamará al navegador de texto Lynx para QL (aún no está implementada esta opción).

Debajo de cada twitt aparece la información correspondiente a la fecha en la que fue creado y el cliente de twitter con el que se hizo, pero en el modo Home aún no puede enlazarse con el twitt al que estamos contestando cuando aparece debajo el texto “in reply to…

Otro fallo está relacionado con los caracteres especiales. Los acentos y demás se los come literalmente. Los caracteres acentuados desaparecen.

Por último, de esta parte de la pantalla no me ha gustado su aspecto. No queda agradable a la vista con tanto cambio de tamaño de caracteres y desaprovecha mucho espacio. Por aquello de imitar a Twitter en su web, el último twitt aparece a mayor tamaño.

Una cosa que me ha gustado mucho es que la conversación se sigue de arriba a abajo, y no al revés como ocurre con la web de Twitter.

Con la tecla TAB cambiamos entre la lista de twitts y el cuadro de texto para escribir nuevos twitts.

En la parte de la derecha, abajo tenemos el número de caracteres que nos quedan para completar nuestro mensaje de 140 caracteres. El tamaño y su posición es muy cómodo de consultar.

Encima del cuadro de texto tenemos el nombre de usuario al que estamos conectados y la información de followings (a quienes seguimos) y followers (quienes nos siguen). Aunque están marcadas con una letra, estas opciones aún no están operativas, por lo que no podemos ver la lista de la gente que nos sigue todavía.

Lo mejor de todo es el menú. Hace las veces de ayuda y guía visual para saber dónde estamos en cada momento. Las 4 primeras opciones muestran respectivamente nuestro timeline, nuestro perfil (mensajes que escribimos), las respuestas recibidas y los mensajes privados.

La opción Settings aún no está operativa.

Reply, Retweet y Like actúan sobre el twitt seleccionado en cada momento. El primero pone en el cuadro de texto el nombre del usuario al que vamos a responder, la segunda opción pone el nombre y el twitt original de quien vamos a responder y like nos permite guardar el twitt seleccionado en nuestra lista de twitts favoritos.

Se echan de menos dos opciones, la de mostrar la lista de favoritos y la de borrar mensajes.

En resumen: El programa, pese a su estado actual, es operativo y lo que hace lo hace bien. Necesita remodelar algo sus menús, completar sus funciones y, sobre todo, cambiar algo su aspecto en lo que respecta al listado de twitts.

Descargar: Podéis descargar la demo en fase alpha aquí

Visita nuestro twitter

Como algunos ya habéis descubierto, esta noticia es una inocentada. No existe el cliente para Twitter Quicker, aunque todo lo demás es cierto y posible. Es decir, podemos conectar nuestro QL a internet directamente y navegar en modo texto. en los comentarios explico en detalle las claves de la broma.

Uno de los aspectos más sorprendentes del QDOS y del SuperBASIC es la capacidad de cargar archivos binarios para aportar un montón de nuevos comandos al SuperBASIC. La mayoría de los equipos de los años 80 venían con un Basic integrado, pero éstos eran estáticos y no había una forma simple de extenderlos. Otros lenguajes (como C, Fortran o Pascal) usan librerías de funciones y procedimientos que permiten ampliar las capacidades de sus bibliotecas.

La primera extensión importante que se desarrolló para el QL fue el ToolKit (I y II). A partir de entonces el término toolkit fue usado para hacer referencia a extensiones cargables. Algunos de los toolkits más populares son ToolKit II (TKII), DIY ToolKit, y DJToolKit

Los primeros toolkits fueron escritos en Ensamblador, pero es poco conocido que también pueden ser creados con Q_Libertator. El formato de los ejecutables y las extensiones en QDOS son muy similares, y cuando se compilan de hecho pueden ser intercambiables. Esto significa que un ejecutable puede ser cargado también como una extensión.

Para averiguar cómo crear un toolkit, tomaremos como ejemplo una función sencilla, Q_Liberator, y seguiremos una serie de pasos muy simples. La función que vamos a incluir en nuestro toolkit de ejemplo es la siguiente:

10 REMark $$external
100 DEFine FuNction MAYUSCULA$(cad$)
110   LOCal i, temp
120   FOR i = 1 TO LEN(cad$)
130     temp = CODE(cad$(i))
140     IF temp > 96 AND temp < 123 THEN
150       cad$(i) = CHR$(temp-32)
160     END IF
170   END FOR i
175   RETurn cad$
180 END DEFine

Esta función toma cualquier cadena y convierte todas sus letras en mayúscula. El $$external de la línea 10 es una directiva del compilador que le dice a Q_Liberator que la función o procedimiento siguiente debe estar disponible fuera del ejecutable. Para cada procedimiento o función que deseemos convertir en extensión, debemos poner la directiva $$external antes de su declaración.

A continuación, lo que debemos hacer es compilar nuestro pequeño programa. Ya hemos visto en un post anterior en nuestro Blog cómo compilar programas con Q_Liberator.

Cuando compilamos nuestra pequeña función con Q_Liberator, es una buena idea desactivar la opción WINDS, ya que la extensión no necesita canales abiertos. De lo contrario se abrirán 3 canales para ella, siendo esto innecesario para nuestra simple función. Para reducir el tamaño del archivo binario también es una buena idea desactivar las opciones NAMES y LINES. Esto es importante ya que nuestra extensión permanecerá siempre en memoria y cuanto menos espacio y recursos use mucho mejor. Por convención, todas las extensiones se suelen definir en mayúsculas (en nuestro ejemplo MAYUSCULA$). Puedes comprobar esto con el comando EXTRAS donde verás todas las extensiones instaladas en tu sistema.

Si vas a cargar la extensión en un sistema donde ya esté cargado el runtime Qlib, podemos compilar nuestra extensión sin el runtime de Q_Liberator, esto nos ahorrará memoria si hay varias extensiones generadas con Q_Liberator en nuestro sistema. Si no sabes si el runtime QLib de Q_Liberator va a estar disponible en el sistema donde se vaya a cargar tus extensiones, entonces es mejor incluir el runtime en la compilación. Es una buena idea compilar la extensión de las dos formas y luego que sea el usuario el que decida la versión que más se ajuste a su sistema. Nuestra extensión de ejemplo ocupa 448 bytes sin el runtime Qlib, con el runtime ocupa unos 11,200 bytes.

Si cargas una extensión que no incorpora el runtime Qlib, y el sistema donde se ejecuta tampoco tiene cargado este runtime, no recibirás un mensaje de error cuando cargues la extensión (con LRESPR por ejemplo). Sin embargo, cuando invoques alguna función o procedimiento de dicha extensión recibirás un error. El mensaje de error exacto es:

Error “Runtimes Missing !”

Una vez hayas compilado una extensión, todo lo que se necesita es cargar la extensión con LREPSR y probarla. Recuerda que no puedes cargar una extensión con LRESPR cuando cualquier otro trabajo, distinto del Job 0 (SuperBASIC), se está ejecutando.
A partir de ahora, ya tienes una nueva función en SuperBASIC (cada vez que cargues esta extensión) y usarla como cualquier otra función nativa del lenguaje, algo similar a esto:

100 PRINT MAYUSCULA$("hola mundo, mi primera extensión")

Con esta simple guía y el uso de Q_Liberator, ¡ya puedes desarrollar nuevos comandos para ampliar el SuperBASIC!


Fuente:
Artículo original de Timothy Swenson
en QL Hacker’s Journal

Q_Liberator es quizás el compilador más aceptado y común para programas SuperBasic. Fue diseñado y escrito, tal como narran sus creadores, en “muchas largas” tardes entre abril de 1985 y septiembre de 1986. Es un proyecto de dos personas, Adrian Soundy, que fue el principal responsable del diseño e implementación del compilador y Ian Stewart que escribió el sistema runtime y el manual. El compilador en si fue desarrollado en SuperBASIC.

Ya hemos comentado muchas veces que SuperBASIC es un lenguaje elegante y flexible. Fue considerado como un gran avance con respecto a otras implementaciones de BASIC de principios de los años 80 y contiene algunas características que son únicas. Al mismo tiempo actúa como lenguaje para automatización de las tareas del sistema, integrado con el propio QDOS. Pero también es cierto que tiene una serie de limitaciones, tales como:
– Su relativa lentitud.
– No es muy compacto.
– La carga de programas largos toma cierto tiempo para su ejecución.
– No existe la posibilidad de ejecutar dos programas SuperBASIC en multitarea (con SMSQ/E y su SBASIC si existe dicha posibilidad).

Para resolver estos problemas se crearon compiladores como Q_Liberator. El principio de diseño de este compilador es su compatibilidad con SuperBASIC, de tal forma que el programador no tenga que entrar en aspectos muy distintos de los que debe considerar en cualquier programa SuperBASIC ordinario.

Sólo con unas pocas excepciones (bien documentadas), virtualmente cualquier programa SuperBASIC puede ser compilado satisfactoriamente. Normalmente no hay necesidad de cambiar el programa original.

El resultado es que QLiberator produce programas con las siguientes ventajas:
– La carga del programa es muchísimo más rápido.
– Ocupa menos espacio en ficheros y en memoria.
– Se ejecuta más rápido.
– Se pueden ejecutar los programas en multitarea.
– Se protege el código fuente.

Q_Liberator es mucho más que una herramienta para crear programas más rápidos, podemos compilar con él “extensiones” del sistema que ofrecen la posibilidad de ampliar las facilidades que no vienen incorporadas al propio SuperBASIC. Además abre la puerta a explotar funcionalidades que no incorpora el lenguaje. Por ejemplo un manejador de errores puede ser incluido en los programas e interesantes posibilidades de comunicación entre distintos jobs, así como mecanismos simples para el empleo de pipes entre distintos programas.

Q_Liberator también ha sido diseñado de tal forma que sea completamente usable en sistemas sin ningún tipo de expansión. Así podemos compilar nuestros programas en cualquier QL sin expansiones y con simplemente sus unidades microdrive.

A pesar que no hay nuevas versiones desde el año 91, este compilador sigue siendo espectacularmente compatible con los nuevos desarrollos en la plataforma QDOS y SMSQ/E. En dichos sistemas, Q_Liberator será capaz de aprovechar las ampliaciones del sistema, memoria y unidades de almacenamiento más rápidos que podamos adherir a un QL estándar.

Q_Liberator se compone de los siguientes programas principales que se facilitan en el disquete o microdrive del compilador.

QLIB_SYS – Contiene una extensión del sistema para invocar al compilador (no es necesario para la ejecución de programas compilados)
QLIB_BIN – contiene el código de la primera fase del compilador
QLIB_OBJ – contiene el código correspondiente a la segunda fase del compilador
QLIB_RUN – contiene el sistema runtime (puede ser embebido dentro de los programas compilados o puede ser cargado externamente en el sistema)
QLIB_EXT – contiene algunas extensiones del SuperBASIC

En el disco o microdrive del compilador encontramos también otros ficheros de ejemplo, un fichero con la ayuda, un fichero boot, así como diversa información adicional.

¿Qué debemos hacer para compilar un programa SuperBASIC con Q_Liberator?

El proceso es muy simple. Lo primero que debemos hacer es cargar en nuestro sistema una extensión para invocar las distintas fases del compilador. Estas extensiones se encuentra en el fichero QLIB_SYS las cuales podemos cargar empleando el programa boot que nos ofrece el compilador o incluir dicha carga directamente en nuestro boot ordinario con una instrucción similar a esta:

100 LRESPR flp1_QLIB_SYS

Es muy práctico también cargar el runtime de Q_Liberator para no estar añadiendo este a cualquier programa compilado. Para ello incluiremos en nuestro boot una línea semejante a la siguiente:

110 LRESPR flp1_QLIB_RUN

(En mi sistema yo cargo QLIB_SYS y QLIB_RUN antes que cualquier otra extensión y después de TK2_EXT).

Una vez cargada estas extensines debemos configurar las rutas donde se encuentra el compilador y los ficheros de ayuda. Esto lo podemos hacer también con otro pequeño programa en SuperBASIC que viene suministrado con el compilador llamado boot_use. En él se invoca a una extensión para configurar estas rutas, esta instrucción tiene la siguiente forma:

200 QLIB_USE flp1_, flp1_help_

Esto indica que el compilador se encuentra en flp1_ y los ficheros de ayuda están localizados en flp1_help_. Una vez esto, ya tenemos nuestro sistema listo para compilar cualquier programa SuperBASIC

Lo primero que debemos hacer es cargar en memoria el programa SuperBASIC que queramos compilar. Sigamos el ejemplo del manual de Q_Liberator y carguemos el programa de ejemplo con:

LOAD flp1_demo_sort

(demo_sort es un programa de demostración para evaluar el tiempo que se invierte en ordenar un conjunto de números enteros, números en punto flotante y cadenas)

Q_liberator compila los programas en dos fases distintas. La primera fase ejecuta algunas comprobaciones iniciales y produce un fichero de trabajo (work file) para ser usado en la segunda fase.

La segunda fase toma este fichero de trabajo, realiza el resto de chequeo de errores y produce el programa objeto. Este programa objeto ya puede ser ejecutado como cualquier otro programa escrito en código máquina y puede ser ejecutado en multitarea.

Estas dos fases de la compilación pueden ser ejecutadas independientemente una de la otra (útil si no tenemos expansión de memoria) o de forma automática una detrás de otra.

En nuestro ejemplo, para compilar demo_sort basta con teclear

LIBERATE flp1_demo_sort,

Esto tomará el programa SuperBASIC que tenemos en memoria y producirá el programa objeto flp1_demo_sort_obj (es importante no olvidar la ‘,’ al final).

Resultado del proceso de compilación

Este programa objeto ya puede ser ejecutado en multitarea con:

EXEC flp1_demo_sort_obj

En caso de que no tengamos suficiente memoria en nuestro sistema, podemos ejecutar estas dos fases del proceso de compilación de manera separada e interactivamente siguiendo los siguientes pasos.

Una vez tengamos nuestro programa en memoria, teclearemos la siguiente instrucción:

LIBERATE flp1_demo_sort

(Vemos que no hemos puesto la ‘,’ al final).

Esto hace que Q_liberator construya el fichero de trabajo en flp1_. Este fichero se construye con el nombre flp1_demo_sort_wrk para nuestro ejemplo.

Una vez esto podemos liberar la memoria (NEW) para dar espacio libre y ejecutar la segunda fase de la compilación.

La segunda fase la ejecutamos con la instrucción:

LIBERATE

Tras esta instrucción vemos que nos aparece un cuadro de diálogo con las distintas opciones del compilador. Lo esencial es introducir el nombre del fichero de trabajo (pero sin la extensión _wrk) y el nombre del programa objeto. A continuación seleccionar la opción “Compile” y ¡ya está!.

Modo interactivo, opciones de Q_Liberator

En este cuadro de diálogo vemos también que podemos seleccionar distintas opciones del compilador, como por ejemplo la inclusión del runtime dentro del programa objeto, nombre del job, etc.

La diferencia entre los tiempos de ejecución entre el programa interpretado y el compilado es abismal. A continuación, vemos la pantalla final del programa demo_sort, las medidas equivalen al programa interpretado en mi QL con GolCard y empleando series de 100 elementos para las distintas pruebas de ordenación, en la versión compilada ninguno de los test pasó de los 2 segundos. Las diferencias son abismales llegando a ser en algunos casos de 10 a 1.

Demo_sort

En definitiva, si te gusta SuperBASIC y la programación en el QL, Q_Liberatos no te puede faltar.


Los científicos que trabajan en la creación de la quinta generación de ordenadores muestran cada vez mayor interés en las investigaciones de este pensador

Gottfried Leibniz fue la figura científica principal de su tiempo -el periodo conocido como el Siglo de las Luces-. Nació en la ciudad centroeuropea de Leipzig en 1646, y murió en Hannover en 1716. Durante sus setenta años de vida (el tipo de número exacto que se puede esperar de un matemático), formuló los principios del cálculo infinitesimal, realizó estudios sobre la dinámica y contribuyó con valiosas aportaciones a los campos de la geología, teología, historia, lingüística y filosofía. Y lo más importante para nosotros: desarrolló teorías básicas para la creación del ordenador.

Empezó a viajar a la edad de veinte años, después de que la Universidad de Leipzig rehusara concederle el doctorado en leyes debido a su juventud. Carente de recursos propios, Leibniz se vio obligado a desempeñar trabajos que interferían con sus investigaciones científicas. Con poco más de veinte años fue abogado y diplomático; más tarde fue bibliotecario y consejero de la familia real.

Los intereses de Leibniz eran muy amplios y en su naturaleza cosmopolita le condujo a viajar frecuentemente por Europa, manteniendo conversaciones y contacto con todos los grandes pensadores de su tiempo. Era prolífico escritor de cartas: mantuvo correspondencia con más de 600 personas.

Su primera contribución importante a la filosofía se produjo en 1672, cuando formuló el principio de la “razón suficiente”. Éste sostenía, simplemente, que tiene que haber una razón para todo, y “todo lo conduce alguien en el mejor de los mundos”.

Centrando su interés en las matemáticas, empezó a trabajar en el perfeccionamiento de la máquina de sumar de Blaise Pascal, inventada en 1642. Leibniz intentó mejorarla de forma que fuera capaz de multiplicar y dividir. Lo logró mediante un dispositivo mecánico llamado “cilindro de Leibniz”. El mecanismo de Leibniz fue un adelanto decisivo para su tiempo. Antes, debido a la complejidad de multiplicar con números romanos, esta operación aritmética sólo se enseñaba en los centros de estudio de mayor categoría. Una máquina que pudiera multiplicar mecánicamente la volvía más accesible. Después de haber perfeccionado esta máquina, Leibniz centró sus esfuerzos en la creación de un método que permitiera convertir el sistema decimal en otro de base binaria.

La mayor ambición del filósofo y matemático alemán era idear un lenguaje universal que pudiera emplear la claridad y precisión de las matemáticas para resolver cualquier problema que se le pudiera presentar a la humanidad. Su lenguaje debería utilizar símbolos abstractos para representar los “átomos” fundamentales del entendimiento, con un conjunto de reglas para manejar estos símbolos. Su intento resultó fallido; pero sus ideas fueron recogidas a principios del siglo XX por Bertrand Russell, quien intentó explicar las matemáticas en términos de “lenguaje” lógico formal.

En los últimos años, se ha visto incrementado el interés en las investigaciones de Leibniz por parte de los científicos que trabajan en el proyecto a largo plazo de crear la quinta generación de ordenadores. Estas máquinas, según se cree, podrán resolver cualquier problema humano con la misma velocidad y fiabilidad con que los ordenadores actuales ejecutan cálculos matemáticos. Para ello será necesario un tipo de lenguaje totalmente nuevo.

(Fuente: Enciclopedia Mi Computer, fascículo 13. Editorial Delta, 1984.)