archivo

Archivos Mensuales: diciembre 2010

He leído recientemente un artículo de Phoebus R. Dodos sobre el uso de Internet en sistemas QL publicado en QL Today hace algún tiempo. Me he decido a hacer algunas pruebas y los resultados han sido fantásticos, ¡se puede navegar por internet con sistemas QDOS!, aunque de una forma muy limitada.

A continuación hago un extracto del artículo de Phoebus junto con los pasos que he realizado para configurar convenientemente el navegador Web Ql-lynx siguiendo las recomendaciones del mencionado artículo. (Ql-lynx es una adaptación del popular lynx para sistemas QDOS).

0. Las distintas alternativas …

El Sinclair QL y sus derivados, durante bastante tiempo, han tenido una serie de alterativas a su disposición para hacer uso de distintos aplicaciones de internet, tales como el la navegación Web, el correo electrónico o la trasferencia de ficheros vía ftp. Aunque el acceso a Internet desde sistemas QDOS no es completo, sí que es posible. Lo que en muchas ocasiones ha desalentado a los usuarios es la dificultad de la instalación y configuración de estas aplicaciones.

Existen dos caminos diferentes a la hora de conectarnos a Internet con sistemas QDOS.

El primer camino es el emplear la máquina original con algunas ampliaciones hardware, esto es, un sistema Sinclair QL + Super Gold Card + SuperHermes + Modem compatible Hayes para emula a una máquina MS-Dos. El segundo camino es mediante el uso de emuladores que den soporte a dispositivos TCP_ desde SBASIC o SuperBASIC (actualmente Q-emuLator, QPC II o uQLx).

En mi caso, como no dispongo del todo el hardware necesario para intentar la conexión con un QL real, he optado por hacer las pruebas empleando un emulador como es Q-emuLator versión 3.0 en modo expandido. El objetivo es lograr navegar por sitios Web reales empleando el navegador Lynx, el cual se ha portado también a sistemas QDOS.

1. Los pre-requisitos.

Para empezar a configurar nuestro sistema, el primer paso consiste en instalar las extensiones necesarias y algunas utilidades de interés. Estas extensiones y utilidades son las siguientes:

– La primera extensión imprescindible es ENV_BIN (Environment Variables Extension) para poder hacer uso de variables de entorno. Ya hemos comentado esta extensión en otro post dentro de QBlog.

– Toolkit II, aunque no es imprescindibles para Ql-lynx es la clásica extensión del QL altamente recomendable.

– Adicionalmente necesitaríamos un editor de textos (como puede ser QED) y un visor de ficheros .jpg (por ejemplo Photon, del cual hemos hablado también en QBlog).

En mi sistema emulado, además de esto, yo he usado como sistema operativo SMSQ/e versión Gold-Card dentro de Q-emuLator. En el artículo de Phoebus también menciona que también se ha testeado sobre Minerva 1.98, QDOS Classic, JS/JM y SMSQ/e v.2.98 o superior.

2. Instalando Ql-lynx.

Una vez configurado nuestro sistema procederemos a instalar y configurar Ql-lynx (disponible en http://www.daria.co.uk).

Ql-lynx es uno de esos programas que nunca ha sido muy aceptado por los usuarios QL, a pesar de que funciona increíblemente bien y es muy estable en el QL. Una de las razones de la impopularidad Ql-lynx, es la enorme cantidad de archivos que aparecerán una vez que se descomprime el fichero qlynx.zip. Esto es debido a la licencia GPL que dicta que los binarios deben estar disponibles junto con el código fuente (aunque por lo visto no hay nada que impida que lo binarios se distribuyan en un fichero y los fuentes en otro). En realidad, sin embargo, los archivos necesarios son sólo unos pocos y QL-lynx puede funcionar perfectamente después de configurar algunas variables de entorno.

Una estrategia limpia podría ser descomprimir selectivamente sólo aquellos archivos que son estrictamente necesarios, pero en mi caso he optado por descomprimirlo todo y sólo he tenido que mover algunos archivos de lugar según pude deducir del artículo de Phoebus.

Ql-lynx sólo necesita tres directorios:

– El directorio raíz (por ejemplo win1_lx_)
– Un directorio para la ayuda (por ejemplo win1_lx_h_)
– Un directorio para terminfo (por ejemplo win1_lx_terminfo_)

Los archivos indispensables para que ql-lynx pueda funcionar, son los siguientes:

– lynx (ejecutable) (se encuentra en el directorio raíz del comprimido)
– lynxrc (fichero de texto) (localizado en el directorio qdos del archivo comprimido)
– lynx_cfg (fichero de texto) (localizado en dos lugares dentro del comprimido, hay que usar el que está dentro del directorio qdos)
– fork, cp, mv (ejecutables) (localizados en el directorio qdos del archivo comprimido)
– lynx_hlp (fichero de ayuda) (localizado en directorio raíz del comprimido)
– Todos los ficheros en el directorio ‘help’ del comprimido debemos descomprimirlo al directorio win1_lx_h_
– qdos (fichero de definición de terminfo) (localizado en el directorio qdos_terminfo en el archivo comprimido, debe ser descomprimido en win1_lx_terminfo)

Además de todo lo anterior, si queremos que Ql-lynx incorpore las facilidades de edición y visualización de imágenes .jpg debemos colocar los programas qed y photon en el directorio raíz de ql-lynx (win1_lx_).

Una vez que hemos copiado todos los archivos necesarios en el lugar adecuado, debemos crear un fichero boot del programa que establezca las variables de entorno adecuados. El siguiente programa hará precisamente esto y lo llamaremos boot_lynx.

100 REMark **Lynx environment variables**
110 :
115 REMark This changes the terminal type to a VT-52 compatible 
      qdos terminal
120 SETENV "TERM=qdos" 
125 REMark This lets lynx know where the terminal Definition file
      is located
130 SETENV "TERMINFO=win1_lx_terminfo"
135 REMark For Q-emuLator and Small screen uQLx
140 IF VER$  'HBA' THEN SETENV "LYNX_CON=512x256a0x0_6_7_0"
145 REMark for SMSQ/e this sets up a lynx screen at the maximum 
      possible resolution looks nice that way
150 IF VER$ = 'HBA' THEN SETENV "LYNX_CON=" & SCR_XLIM
      & "x" & SCR_YLIM & "a0x0_6_7_0"
155 REMark This uses a different font that can Correctly 
      render the ISO-8859-1 charmap
160 SETENV "LYNX_FONT=win1_lx_pcql_font"
165 REMark This sets the location of the lynx main 
      Configuration file
170 SETENV "LYNX_CFG=win1_lx_lynx_cfg" 
175 REMark This sets the location of the user prefs  file
180 SETENV "LYNXRC=win1_lx_lynxrc"
190 PUSHD
200 SETLYNXD
210 PRINT "TYPE POPD to restore the data/prog defaults when done
      with lynx"
220 EX lynx
230 DEFine PROCedure PUSHD
240 defprog$ = PROGD$
250 defdata$ = DATAD$
260 END DEFine PUSHD
270 DEFine PROCedure SETLYNXD
280   PROG_USE "win1_lx_"
290   DATA_USE "win1_lx_"
300 END DEFine SETLYNXD
310 DEFine PROCedure POPD
320   PROG_USE defprog$
330   DATA_USE defdata$
340 END DEFine

3. Configurando parámetros.

Ql-lynx tiene dos ficheros de configuración principales: lynx_cfg y lynxrc. En ellos se almacenan datos de configuración generales y las preferencias de usuario respectivamente. Los ajustes en lynxrc tienen prioridad sobre los de lynx_cfg.

A pesar de que QL-lynx funciona muy bien con los valores por defecto, lo mejor es que “tocar” algunos parámetros para que podamos hacer que el programa sea útil.

En primer lugar (y suponiendo que seas es un novato con lynx, como es mi caso) lo adecuado es cargar lynxrc en tu editor de texto favorito y cambiar los siguientes parámetros:
Buscar la línea que pone:

user_mode=ADVANCED

y cambiarla con:

user_mode=NOVICE

Esto provoca que Ql-lynx muestre más opciones visible en la pantalla y hace la vida más fácil hasta que nos familiaricemos con el entorno.

A continuación debemos grabar este fichero y cargar lynx_cfg en nuestro editor de textos.

En torno a la línea 25 se encuentra la opción

STARTFILE: 

que establece la “homepage” que queremos usar. Podemos ajustarla a nuestras preferencias, por ejemplo:

STARTFILE:http://www.sinclairql.es/

A continuación podemos configurar la localización de los ficheros de ayuda. Esto lo haremos con el parámetro

HELPFILE:

En nuestro caso estableceremos la ruta local donde hemos ubicado las ayudas, este sería el valor:

HELPFILE:file://localhost/win1/lx/h/lynx_help_main.html

Una vez hecho esto, QL-lynx está listo para funcionar, pero podemos mejorar la configuración estableciendo los visores de los distintos tipos de archivo MIME. Para habilitar estos visores, tendremos que localizar las líneas que empiezan con

#VIEWER

y cambiar los valores de forma apropiada. Por ejemplo, para hacer que “photon” sea el visor de ficheros .jpg tendremos que des-comentar la línea:

#VIEWER:image/jpeg:xv %&:XWINDOWS 

y cambiarla por la línea:

VIEWER:image/jpeg:fork photon %s

(El símbolo # es el utilizado para comentar líneas).

Siguiendo estos pasos podemos configrar ql-lynx para que trate de forma adecuada otro tipo de ficheros (.gif por ejemplo).

4. Ql-lynx en acción.

Una vez que hemos realizado todo lo anterior, ya estamos en disposición de ejecutar Ql-lynx y empezar a navegar por Internet desde nuestro sistema QDOS. Para ello debemos ejecutar el programa boot_lynx que hemos detallado anteriormente y a continuación teclear

EX lynx

Ql-lynx tiene muchas opciones vía línea de comandos que están documentadas en su manual. Una de las más útiles es que acepta una URL por la línea de comandos. Por ejemplo, si queremos navegar directamente a http://www.sinclairql.es podemos teclear

EX lynx; "http://www.sinclairql.es/"

A continuación pongo algunas pantallas de Ql-lynx en acción (muestro también la versión equivalente de la misma página en Explorer).

Ql-lynx en acción (1)

.

Ql-lynx en acción (2)

.

Página equivalente en Explorer

.


Fuente:
– Internet on the QL – Part I (Emulators). Por Phoebus R. Dodos. QL-Today.
http://www.dilwyn.me.uk/internet/index.html

.

Anuncios

Olvídate de esos calendarios con mujeres escasamente vestidas, o esos calendarios con imágenes de animalitos lindos y tiernos, o de esos paisajes rurales, ….

Aquí tienes un bonito calendario con motivos “Sinclair QL” para el año 2011. Un calendario con el que puedes adornar tu oficina, tu estudio o tú “rincón retro”.

Calendario QL 2011

Pues eso es lo que encontramos un año más en el sitio de Dilwyn Jones, el tradicional calendario QL, esta vez para el 2011.

A raíz de esto me viene a la mente la “competición” que se organizó espontáneamente el año pasado en ZDP con los calendarios de las distintas plataformas.

Aquí algunos enlaces de calendarios retro 2010:
http://www.bytemaniacos.com/ficheros/sinclairql/calendario_2010.pdf
https://sinclairqles.wordpress.com/2009/12/21/calendario-de-ql-wiki/
http://www.zonadepruebas.com/modules/newbb/viewtopic.php?topic_id=7584&forum=17#forumpost62596
http://www.zonadepruebas.com/modules/newbb/viewtopic.php?topic_id=7578&forum=17#forumpost62951

A ver si este año se organiza de nuevo “la competición” de calendarios retro.

En CyberHades se ha publicado un post interesante sobre el recorrido de Lunus Torvald con el Sinclair QL, en su edad de adolescente.

Linus Torvalds, el creador del núcleo de Linux, es citado en la comunidad de QLers como un desatacado usuario del QL de mediados de los 80. Tras tres años de trabajo intenso con esta máquina logró retos brillantes para un joven de la época.

Aquí está la referencia a este fantástico post con la historia detallada. ¡Lectura recomendada!

El algoritmo Ratcliff/Obershelp consiste en una estrategia para calcular la similitud entre dos cadenas de caracteres. Para este cálculo se emplean el número de caracteres coincidentes dividido por el número total de caracteres en las dos cadenas. La búsqueda de las coincidencias se basa en ir hallando la mayor sub-secuencia de caracteres en común entre las dos cadenas de forma recursiva.

El algoritmo está diseñado para comparar dos cadenas y devolver un porcentaje que represente la similitud o lo cerca que están la una de la otra. Un resultado de 67 significa que las dos cadenas tienen un porcentaje de igualdad del 67%.

Podríamos usarlo para comparar una palabra mal escrita con una serie de posibles palabras correctas en el corrector ortográfico de un procesador de textos. La palabra con el mayor porcentaje de igualdad se tomaría como la ortografía correcta de la palabra. También podríamos emplear esta rutina en algún juego conversacional en el que quisiéramos ayudar al usuario en caso de que comenta errores ortográficos o tipográficos.

El programa es un buen ejemplo de cómo utilizar la recursividad en SuperBASIC. El algoritmo toma las dos palabras y extrae la mayor subcadena común coincidente entre ellas (llamemos a esta subcadena MSC). Para cada cadena, se toma la parte de la palabra a la izquierda y a la derecha de la MSC y con esta sub-cadenas se vuelve a repetir el proceso comparando unas y otras. El proceso finaliza cuando la cadena completa es analizada.

Como ejemplo, echemos un vistazo a las dos palabras “pennsylvania” y “pencilvaneya”. La MSC es “lvan”. El programa toma entonces las subcadenas s más a la izquierda de ambas palabras (“Pennsy” y “penci”) y las procesa siguiendo la misma estrategia. La MSC es ahora “pen”. Dado que no hay nada a la izquierda de la MSC (“pen” en este caso), el programa intenta entonces el lado derecho, “NSY” y “ci”. Con estas dos cadenas, no hay MSC. El programa entonces sube hacia arriba en el árbol y trata las otras subcadenas de la derecha, “ia” y “eya”. Esto continúa hasta que todas las subcadenas se analizan.

La implementación que presentamos en SuperBASIC consiste en una función que devuelve un valor con el “parecido” de las dos cadenas que vamos a analizar.

Podemos invocar a la función de la siguiente manera:

   x = percent_alike(a$,b$) 

Siendo a$ y b$ las variables de cadena que queremos comparar.

La función puede tomar también literales como argumentos, por ejemplo:

   x = percent_alike("sofware","softwear")

Hay que tener en cuenta que el programa distingue mayúsculas y minúsculas, con lo cual hay que convertir las dos cadenas a mayúsculas o a minúsculas antes de realizar la comparación.

A continuación mostramos el código fuente en SuperBASIC de este algoritmo.

100 REMark Test ---
110 CLS
120 x = percent_alike("sofware","softwear")
130 PRINT "Percent alike: sofware - software", x
140 STOP
150 :
160 :
170 DEFine FuNction percent_alike(a$,b$)
180   LOCal total
190   total = num_alike(a$,b$)
200   RETurn INT( total/(LEN(a$)+LEN(b$))*100)
210 END DEFine percent_alike
220 :
230 :
240 DEFine FuNction num_alike (a$, b$)
250   LOCal total, temp$, a1, a2, b1, b2, large$
260   total = 0
270   IF a$=b$ THEN RETurn LEN(a$)*2
280   IF LEN(a$)=1 AND LEN(b$)=1 THEN RETurn 0
290   REMark  ** make a$ the shortest string
300   IF LEN(a$) > LEN(b$) THEN
310     temp$ = a$
320     a$ = b$
330     b$ = temp$
340   END IF
350   REMark ** if a$ = one char and b$ > one char
360   IF LEN(a$)=1 THEN RETurn (a$ INSTR b$)
370   large$ = find_gt_com$ (a$, b$)
380   IF large$ = "" THEN RETurn 0
390   length = LEN(large$)
400   total = length*2
410   a1 = large$ INSTR a$
420   a2 = a1 + length
430   b1 = large$ INSTR b$
440   b2 = b1 + length
450   IF (a1>1) OR (b1>1) THEN
460     total = total+num_alike (a$(1 TO (a1-1)), b$(1 TO (b1-1)))
470   END IF
480   IF (a2LEN(a$)+1) OR (b2LEN(b$)+1) THEN
490     total = total+num_alike (a$(a2 TO), b$(b2 TO))
500   END IF
510   RETurn total
520 END DEFine num_alike
530 :
540 :
550 DEFine FuNction find_gt_com$ (a$, b$)
560   LOCal temp$, i, j, temp, large$
570   IF LEN(a$) > LEN(b$) THEN
580     temp$ = a$
590     a$ = b$
600     b$ = temp$
610   END IF
620   LET large$=""
630   FOR i = 1 TO LEN(a$)
640     FOR j = i TO LEN(a$)
650       temp = a$(i TO j) INSTR b$
660       IF (temp0) AND (LEN(a$(i TO j))>LEN(large$)) THEN
670         large$=a$(i TO j)
680       END IF
690     END FOR j
700   END FOR i
710   RETurn large$
720 END DEFine find_gt_com

—–
Fuente:
Ratcliff/Obershelp Pattern Matching (por Tim Swenson)
QL Hacker’s Journal
—–