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