domingo, 29 de octubre de 2023

¿Cómo puedo ver videos de YouTube sin publicidad en Ubuntu?

Durante la década de 1960, los jardines del mítico chalet de Puerta de Hierro fueron testigos de improvisadas disertaciones de Juan Perón junto a delegaciones de visitantes. En una de ellas atendió a la manera de ver y descargar videos de YouTube sin publicidad con Pstube.

(...)

Gracias, mire, yo prefiero estos que son más suavecitos [prende un Chesterfield].

Véanlo en la República Argentina con la llegada de Onganía... [fuma] Nosotros que hicimos realmente nos costó dos años de preparación primero para tener - diremos así - la preparación humana, que la hicimos de Trabajo y Previsión, y la preparación técnica que la hicimos en el Consejo Nacional de Posguerra. Nos costó dos años de trabajar día y noche, para poder llegar, porque una revolución no se puede hacer improvisada, hay que prepararla.

Onganía llega allí. Cuando yo vi que llegaba este muchacho y dijeron que iba a hacer "la Revolución Argentina", me hizo gracia. Porque si nosotros - después de dos años de preparación llegamos allí y tuvimos terribles problemas para resolverlo - cómo iba a creer yo que este hombre iba a andar en esto... [pita el faso] Tenía que fracasar, llegar ahí con peludo regalo, y hacer una revolución.

Lo que le pasó a el fue muy simple: llegó allí y se encontró con ese problema eligió su gabinete. Entre los que hacían ejercicios espirituales con él por un lado, esos trasnochados de toda la vida, un sector de el Ateneo de la República, que son esos nacionalistas macaneadores que hace cuarenta años que vienen hablando y nunca hacen nada, un sector agroexportador, y un remanente del sector gorila, que todavía quedaban. Del tipo Señorans, y todos esos tipos. Y bueno, comienzan. Y estos cuatro grupos, en lugar de gobernar, se empiezan a pelear entre ellos a ver ver quién va a quedar con el poder detrás del trono. Mientras tanto, el Fondo Monetario Internacional - del que se han hecho socios estos cretinos - porque ese es el que en realidad gobierna, le empieza a cerrar el crédito a la República Argentina en todas partes.

Cuando el país está casi en cesación de pagos le presentan el problema a Onganía y no tiene más remedio que decir "cualquier solución". ¿Cual es la solución? Cambiar el gabinete y nombrar un nuevo gabinete. Claro que al hacer eso ha mandado al ministro de economía a pedir limosna, y el crédito se ha venido abajo. Si un día le va a pedir limosna un ministro, el país de ese ministro pierde crédito inmediatamente. Muy bien, se le presenta el Fondo Monetario Internacional y le dicen "nosotros le abrimos el crédito, pero necesitamos garantías". Y cuales son las garantías?  El ministro se lo ponemos nosotros. Y entonces de una de sus compañías del monopolio yanqui sacan un empleado y se lo ponen de Ministro de Economía. Ese es Krieger Vassena.

Eso es lo que lo hace fracasar, porque en el mundo, mientras el hombre sea hombre, el humanismo es la primera virtud a practicar. Mientras no le solucionen los problemas al hombre, es inútil que se lo solucionen a la ciencia o a la técnica. Todo ese proceso está en marcha, y el hombre comienza ahora - en la era tecnológica - a darse cuenta que la tecnología es la deshumanización. Todo lo que se tecnifica, se deshumaniza simultáneamente. Es decir, usted toma la escuela - que es para niños - pero cuando se tecnifica, deja de ser para ser para niños y pasa para ser la escuela.

La medicina, es lo mismo. La medicina es para el enfermo, pero cuando se tecnifica en gran grado, la medicina pasa a ser para el médico. Se cambian los factores, y se desvirtúa totalmente su función. Esa es uno de los defectos de la tecnificación, es decir que hay que llegar a una alta tecnología, al servicio del hombre, que es lo que no se hace. Es el concepto actual de la tecnocracia.

Rusia es una tecnocracia perfecta, pero el hombre a pasado a ser como una abeja en una colmena, o como una hormiga, metido en su alvéolo y de ahí no puede salir.

En las redes de datos pasa más o menos lo mismo. Poco sentido tiene tecnificar la sociedad si no se les da el sentido humano que tienen hemos de propugnar como reflejo del Pueblo.

Vea simplemente el ejemplo de YouTube, servicio de agregado de videos.

Con él, la oligarquía no ha buscado otorgar un lugar "para que el Pueblo suba el video", ¡no!. Lo que implica realmente es una inconmensurable cantidad de datos del Pueblo al que estos taimados buscan referenciar comercialmente. Esto incluye - sin limitarse - el perfilado de intereses y consumo, historial de búsqueda, tiempos en pantalla, ciclos de atención en el material compartido por terceros, etcétera.

Indudablemente, todo esto desfalco guarda el sentido de vectorizar publicidades dirigidas según el discernimiento de las apreciaciones maquinales, junto a otros objetivos inconfesables. Y si usted intenta defenderse por medio de bloqueadores, será agredido por las políticas de uso, y combatido telemáticamente.

Pues bien señores, la Justicia Social en el ámbito de las redes de datos es una de las actividades a la que hemos de recurrir, y ello es fácil a través de una programación proactiva y agresiva que permita remover el yugo del enlace esclavo. Yo normalmente uso yt-dl, pereo gracias al Justicialismo podremos también obrar mediante clientes de escritorio que omitan tales registros, y a la vez liberar el video solicitado por medio de códecs de alta performance, todo en un empaque minimalista: el Pstube.

Podremos instalarlo abriendo una terminal con Ctrl+Alt+t e ingresando los siguientes Comandos de Organización:

cd ~/Descargas ;
wget https://github.com/prateekmedia/pstube/releases/download/2.6.0/pstube-linux-2.6.0-x86_64.deb
sudo dpkg -i pstube-linux-2.6.0-x86_64.deb

Si lo deseamos podremos crearle un lanzador. Para ello hacemos clic con el botón derecho del ratón en el panel superior sobre Aplicaciones, y en el menú contextual que aparece elegimos Editar Menús. En la ventana Menú Principal seleccionamos el menú Aplicaciones / Internet, y presionamos el botón "+Nuevo ítem" para desplegar el cuadro de diálogo Crear lanzador. En él asignamos el campo Orden con pstube. Rellenamos el resto de las opciones y presionamos el botón Aceptar.

Hecho esto, será sencillo correr el programa desde Aplicaciones / Internet / Pstube.

La ventana es bastante explicativa [pone la colilla entre entre el pulgar  y el medio, y la catapulta lejos, cae en algún lugar detrás de los rosales].


Para buscar simplemente hacemos clic en el campo de la lupa y ponemos lo que anhelamos encontrar. Tras elegirlo podremos reproducirlo sin mas, en la ventana y a tamaño chico como para no molestar.

Entre las opciones tras el botón Settings contaremos con la posibilidad de definir el modo oscuro favorito de los cabecitas, así como delimitar artificialmente nuestro lugar de origen.

También podremos producir la liberación descargando videos a travésa de la lista de descargas. Para ello hacemos clic en el botón "+" superior. En el cuadro de diálogo "Download from video URL" indicamos la URL del video a descargar.

A continuación se nos presentará el cuadro de diálogo "Download Quality", donde habremos hacer clic sobre el tipo y calidad de descarga deseada. Podríamosa plantear descargar el video junto con su audio, o bien descargar sólo el audio en distintos formatos (lograremos compatibilidad con .m4a).
En cualquier caso se iniciará la descarga. Podremos ver el progreso de la cola de descargas haciendo clic en el botón Downloads, donde nos mostrará los elementos en cola y las estadísticas de descarga parcial.

Al completarse la descarga de los elementos, se conformarán los ficheros de reproducción (ya sea de videos o audio), los cuales normalmente quedarán resguardados en la carpeta ~/Descargas/pstube.

martes, 24 de octubre de 2023

¿Cómo uso ITS desde Ubuntu?

Reunidos con educadores de nivel primario, Juan Perón expone las necesidades de formar ciudadanos de provecho, a la vez que instruye cómo utilizar remotamente el ITS, el mítico sistema operativo del MIT desde Ubuntu.

¡Trabajadores!

El pasado pertenece a nuestra historia y a nuestros héroes. El presente tenemos la gran responsabilidad de tenerlo en nuestras manos. Pero el futuro - que es lo más valioso, porque es la esperanza de la Patria - es de los Maestros, que plasman y modelan diariamente en las escuelas a los hombres del mañana, de quienes depende la grandeza de la nacionalidad.

No hay país que pueda ser grande si no son grandes los que forman y acendran el temple y el alma de sus hijos. La democracia, y cualquier otra forma de gobierno en que un noble liberalismo les guíen, no será nada para la grandeza de los países, si los maestros no han preparado los hombres que han de practicarla y llevarla adelante.

Se ha dicho - y con razón - que Inglaterra es uno de los países mas libres y más importantes del mundo, y eso lo debe exclusivamente a la escuela. El liberalismo en manos de hombres mal instruidos, mal preparados, conduce mas al caos que a la liberación, y no a la grandeza de los hombres y de las Patrias.

De ahí surge, en forma indudable, la responsabilidad de los hombres y de las mujeres que están forjando - en los niños - la grandeza futura del País. De ahí surge la enorme responsabilidad de un Maestro consciente que ha de formar la fuerza mas extraordinaria del Pueblo, que es la conjunción de las Inteligencias y de las Almas de los hombres que lo integran.

La tarea del Maestro no es solamente la de instruir, sino la de educar y formar el alma y la inteligencia; dar armas a los hombres para su lucha por la vida o en la vida. Porque es necesario pensar en vivir en una Comunidad Organizada para organizarla. Es necesario pensar en vivir en paz, para lograr la paz.

En el uso del cómputo sucede más o menos lo mismo, al constituirse en una extensión técnica de la vida misma. Un ambiente de cómputo no puede estar regido como una nube, donde vuela pasajera y se deshace al capricho incontrolable del clima político, sino que debe fundarse sobre el sólido pilar técnico de factura y control comunitario, humano. Es allí donde una comunidad, en operación de su potencia de cómputo, puede desarrollar software en libertad para hoy y para el mañana.

Uno de los ambientes punteros en este aspecto fue sin duda el ITS (1969-c.1993), el mítico Sistema de Tiempo de cómputo compartido Incompatible, desarrollado en una DEC PDP-10 del Instituto Tecnológico de Massachussets, el MIT. Este fue el cimiento sobre el cual se afianzó la comunidad hacker, y por extensión, nuestro Movimiento de Software Libre.

En el Justicialismo sabemos que no todos los días debemos tirar un viejo por la ventana, y esto podremos hacerlo realidad efectiva gracias a HACTRN, proyecto que pone a público acceso telemático un sistema ITS emulado, con el cual podremos utilizar para hacer nuestra informática de forma Libre. Podremos además comprender el funcionamiento de ITS como se debe hacer: usándolo.

Para mayor fidelidad, en nuestro sistema GNU con Linux podemos emplear un emulador de terminal gráfica Knight TV11, videoterminal diseñada en la Universidad de Stanford por Tom Knight. Consistía en un monitor de tubo de rayos catódicos excitado por direccionamiento de mapeo de bits, provisto de teclado. Su memoria intermedia - controlada por una minicomputadora PDP-11, se conectaba a la PDP-10 merced de una interfaz especial que permitía incluso adosarle una impresora electrostática.

Para instalar en Ubuntu dicho emulador hemos de abrir una terminal mediante Ctrl+Alt+T, e ingresar los siguientes comandos de organización:

cd /tmp;
wget https://hactrn.org/tvcon/tvcon-linux.gz ;
gzip -d tvcon-linux.gz
chmod +x tvcon
sudo mv /tmp/tvcon-linux /usr/local/bin/tvcon

Una vez completada esta instalación ya podremos enlazar a la máquina ITS "HACTRN" con:

tvcon -2BCS  -c00000,affae2 hactrn.org

(Nota: los números en hexadecimial de la variable -c en este caso denotan el color de fondo y frontal, calculados en este caso para representar la estética televisiva de la Knight TV11).

...o bien por telnet, con

telnet hactrn.org 10003

Al establecer contacto, deberíamos recibir una imagen del bienvenida del sistema ITS del MIT emulado:


 

...o - desde telnet - el siguiente mensaje:

Connected to hactrn.org.
Escape character is '^]'.


Connected to the KA-10 simulator MTY device, line 1

Una vez presentados este "lobby" electrónico que nos invita a activar un terminal, debemos activarla presionando la tecla F1 (o Ctrl+z si usamos Telnet) y finalmente se refrescará la pantalla de login:

HX ITS.1651. DDT.1548.
TTY 1
You're all alone, Fair share = 98%
Welcome to ITS!

For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.

Happy hacking!

Debido a las muy laxas medidas de seguridad originales de los laboratorios del Instituto Tecnológico de Massachussetts - fundamento de la cultura hacker - podremos darnos de alta en el ITS clásico sin suplir luser (forma risueña de "usuario de laboratorio"), ni contraseña.

Para adentrarnos al sistema ingresamos:

:login luser

Ingresar comandos en DDT

En pantalla deberíamos ver el prompt * que denota a DDT - el intérprete de comandos original y depurador de nivel superior en ITS. Asimismo, en la parte inferior de la pantalla, aparecerá una línea de status ("wholine") que indica el nombre de luser, nombre de trabajo de cómputo activo, fecha y hora, status de sistema (ejecución, paginado, etc), el porcentaje de compartimentado justo, y otra información interesante de ITS.

Cada comando suele empezar con :, y para ejecutarlo debemos presionar la tecla Intro.

Muchas veces podremos interrumpir un programa en pleno funcionamiento mediante la combinación de teclas Ctrl+z. En otros casos los programas finalizan su ejecución por si mismos, por lo que DDT presentará el indicador :kill, lo que denota que el programa mismo se autoeliminó y liberó la memoria que consumía.

El programa de ayuda más simple que podremos ejecutar es  el comando :help indicará una introducción básica del intérprete DDT. 


El comando :luser nos indicará advertencias al usuario novato en línea. En tanto. El comando :? lista los comandos mas usuales de ITS (podremos paginarlos con la Barra Espaciadora). El comando :info presentará ayuda en pantalla.

Por supuesto, para cerrar la sesión de usuario, debemos usar el comando :logout, que cierra la sesión e interrumpe todos los trabajos que hubiésemos estado haciendo en ITS

Pues bien señores, ciertos programas requieren utilizar un nombre de luser, y tal vez incluso contar con un directorio de almacenamiento (“home”). 

Si deseamos crear tal directorio de almacenamiento debemos elegir un nombre de luser, y presionamos Ctrl+r e ingresamos el comando 

luser; ..new. (uder)

(siendo luser el nombre de usuario deseado). Si bien DDT te informará “no such file”, aún así creará el directorio. Este directorio LUSER simplemente será asignado al luser que ingrese al sistema.

Hemos de notar que contar con un directorio home implica en la práctica poder usar la mayoría de las aplicaciones de ITS, pero para afiliarnos como luser “oficial” del sistema del MIT debemos responder las preguntas del programa INQUIR. Para ello, ingresamos el comando:

:inquir

...y completamos los campos que irán apareciendo uno a uno en forma de preguntas en inglés. Para ello mecanografiamos las respuestas y presionamos la tecla Intro o Ctrl+c según se indique. Al terminar, almacenamos los resultados con el comando DONE.

Al loguearnos, DDT recavará la base de datos INQUIR por el nombre de tu directorio home. Al usar este programa, si directorio home podría ser distinto al de tu nombre de usuario (si así lo has dispuesto). 

El sistema de archivaje de ITS es relativamente potente, y consiste en directorios y ficheros, con control de versionado.

Los archivos tienen seis letras, y una extensión de tres, junto con un número de versión. Ejemplo: DIRECT;FICHER.EXTEN.1

Podremos :cwd para ver tu directorio home, y :cwd directorio para cambiar a otro directorio.

Se usa el comando :listf o Ctrl+f para listar los ficheros de un directorio. Podrás imprimir en pantalla el contenido de un fichero mediante :print fichero.

Editores

Ahora podremos usar el comando :emacs para editar con Emacs, o bien usar :teco. Los comandos de Emacs son mayormente similares a los de la versión GNU.

Ctrl+x,Ctrl+f fichero Intro Carga fichero
Ctrl+x,Ctrl+s fichero Intro Guarda fichero
Ctrl+x,Ctrl+c sale (pero no mata emacs)
Ctrl+f cursor derecha
Ctrl+b Cursor izquierda
Ctrl+a Comienzo de línea
Ctrl+e Fin de línea
Ctrl+n Línea siguiente
Ctrl+p Línea previa
Ctrl+d Borra caracter a la derecha
Supr Borra caracter a la izquierda
Ctrl+k Borra hasta el final de la línea

Control de Trabajos en ITS

Al igual que otros sistemas contemporáneos como TOPS-20,  ITS era un sistema multiusuario multitarea influyente, señero en el sentido que podía operar distintos planos los trabajos de cómputo en ejecución ("jobs").

:continue Pasa el trabajo a primer plano
:proceed Pasa el trabajo a ejecución en segundo plano
:self Selecciona al intérprete DDT como trabajo actual
:attach Une un trabajo en segundo plano pase al primer plano de la terminal.
:detach Despega el trabajo de la terminal.
:job nombretrabajo Selecciona el nombre del trabajo
:kill Elimina el trabajo activo
:massacre elimina todos los trabajos.
:forget Oculta un trabajo a tu intérprete, sin eliminarlo.
:genjob Cambia el nombre del trabajo actual.
:ujobs luser Selecciona el trabajo de un usuario ajeno para exminarlo
:snarf trabajo Toma posesión de un trabajo ajeno

Con el comando :who podrás ver los lusers conectados al sistema. En cualquier caso, podrás mandar un mensaje a otro usuario con :send luser mensaje, y utiliza Ctrl+c para enviar el mensaje a luser.

Si usas :shout mensaje y lo envías con Ctrl+c, enviarás el mensaje a todos los usuarios conectados. 

El sistema de correo electrónico interno de ITS puede usarse con :mail, o bien :msend para enviar a varios usuarios internos. Se finaliza el mensaje con Ctrl+c. Para leerlos podremos usar :rmail (lector en Emacs).

He aquí una serie de equivalencias de comandos de UNIX a un equivalente para el ITS. En ITS el $ equivale a presionar la tecla tecla Escape.

Comando de UNIX Comando de DDT Comando con :
login: usuario luser$u :login luser
logout $$u :logout
TERM=vt52
:tctyp vt52
TERM=vt100
:crtsty vt100
clear
:clear
ls Ctrl+f :listf
ls directorio directorioCtrl+F :listf directorio
ls / Ctrl-R m.f.d. (fichero) :print m.f.d. (fichero)
ls *.foo Ctrl-R directorio: second foo :print directorio: second foo
more fichero Ctrl-R fichero :print fichero
mkdir directorio Ctrl+R directorio;..new. (udir) :print directorio;..new. (udir)
cd directorio directorio$$CTRL-S :cwd directorio
cp f1 f2 $Ctrl+r f1,f2 :copy f1,f2
rm fichero CTRL+o fichero :delete fichero
ln f1 f2 $Ctrl+o f1,f2 :link f1,f2
mv f1 f2 $$Ctrl+o f1,f2 :rename f1,f2
mv fichero directorio :move fichero,directorio
emacs emacsCtrl+K :emacs
ps $$v :listj
kill pid pid$Ctrl+x :job pid :kill
sudo -u u comando u$Ctrl+s comando
top peekCtrl+h :peek
Ctrl+u Ctrl+d
Ctrl+c Ctrl+g
Ctrl+z Ctrl+z
Ctrl+d Ctrl+c
fg $P :continue
bg Ctrl+p :proceed

Juegos

El ITS cuenta con varios juegos. Con :advent te permitirá jugar la versión clásica de la aventura de texto. :wumpus era un juego para cazar la míticaa criatura Wumpus. :eliza y :doctor eran juegos de psiquiatría. Los juegos de tablero están presentes con :games,ckr (damas), :games;ocm, :chess y :games;chess2 (ajedrez), :go (ajedrez chino go) y el primer FPS multiusuario :games;maze, o :chase, un laberinto para dos jugadores. :cube es un juego de cubo de rubik. También está el juego de la vida de Conway con :games;mlife. El clásico trek puede jugarse con :games;trek, mientras que el viejo juego de adivinar números con :games;guess.

También puedes jugar la aventura de texto Zork, pero requiere tener un archivo en tu directorio para trabajar, de modo que debes ingresar:

:login luser
:print luser; ..new. (udir)
:create luser; _msgs_ luser

Presiona Ctrl+c e ingresa:

:zork

Finalmente, podrás observar el mítico PDP Spacewar (se sale presionando varias veces con Ctrl+q o Ctrl+c):

Subsistemas

ITS es una plataforma de programación y virtualización que cuenta con gran cantidad de intérpretes y subsistemas. Podremos compilar C con :cc, usar Macsyma 1001 con :macsyma, contamos con :forth para dicho lenguaje, el intérprete de Macro Z80 con :macn80 y DEC Macro-10 con :macro-10, LISP con :lisp y :lisp11, Scheme con :scheme y LOGO con :llogo y :logas. :fail nos permite usar el ensamblador del SAIL, mientras que :cross permite usar un compilador cruzado para distintas microcomputadoras, pero existen muchos más.

A su vez, contaremos con una shell tipo Unix con :shell (lo abandonamos con q).

En tanto, podremos usar :finger, :telnet, :ftpu, :kermit, :xmodem, para tareas respectivas con dichas aplicaciones de transmisión de datos.

Naturalmente, podremos encontrar información en la Wiki de ITS.

jueves, 12 de octubre de 2023

¿Cómo juego PixelWheels en Ubuntu?

El 9 de marzo de 1952, durante la inauguración del Autódromo "17 de Octubre", Juan Perón enseña cómo instalar y jugar PixelWheels en Ubuntu.

¡Trabajadores!

Son ciento veinte mil personas las que colman las gradas de este colosal autódromo. Las competencias internacionales que se desarrollan en Argentina y las grandes actuaciones que llevaban a cabo nuestros pilotos, hacían indispensable la construcción de un circuito que contara con la jerarquía que se merecía el automovilismo de la Patria.

Es así que este nuevo Autódromo "17 de Octubre" cuenta ya con 10 trazados distintos y la mayor infraestructura de seguridad que puede concebirse. El deporte motor nos convoca hoy ante tres pruebas, de entre la que destacarán la Fórmula Libre "Copa Perón", a 30 vueltas. Tengo aquí a Juan Manuel Fangio para muñequear una Ferrari 166FL. mientras que Froilán González lo hará con una Ferrari 166C. Y damos la bienvenida al carioca Francisco Landi con su Ferrari 125C.

Mi profesión es la de Conductor, para eso me he formado toda la vida (porque como político, soy un aficionado). Pero estos muchachos tienen mucha maña para tirar cambios porque se entrenan con Pixel Wheels. Se trata de un juego de carreras multijugador escrito por Aurélien Gâteau para la máquina virtual Java, y por tanto compatible con un sistema GNU con Linux provisto de tal aditamento.

La distribución de juego puede pagarse opcionalmente en su plataforma de descarga, pero por amabilidad de su autor, podremos hacernos con el juego de manera gratuita. Para ello nos dirigimos a la página de descargas de Pixelwheels y presionamos el botón rojo rectangular que aparecerá en nuestro navegador, en particular el que dice "Download". 

Acto seguido podremos escoger un precio sugerido a pagar a la plataforma de descargas. Como nada de eso le llega al buenazo de Aurélien y al único signo $ al que debemos prestar atención es al del prompt del intérprete de comandos de GNU, podremos hacer click en el mensaje "No tanks, just take me to the downloads" ("No, gracias. Sólo llevame a las descargas").
El sistema nos llevará así a la página con los ficheros correspondientes a múltiples plataformas de cómputo. Pixel Wheels está escrito puede funcionar en GNU con Linux, y para ello debemos descargar el fichero pixelwheels-linux-stable.zip - haciendo click en el botón Download que lo indica. Tras unos segundos nos haremos con la última versión del mismo, que normalmente irá a parar a nuestra carpeta ~/Descargas/.

Una vez descargado los aproximadamente 80 megabytes del juego, podemos instalarlo. Recurriremos a la terminal para tal menester, abriendo una con Ctrl+Alt+T e ingresando los siguientes Comandos de Organización:

cd ~/Descargas/
unzip pixelwheels-linux-stable.zip
cd pixelwheels-0.25.1-linux64/
./install.sh

Normalmente el juego instalará un vínculo en /home/$USER/.local/ y se agregará a los juegos instalados de forma automática. Por tal motivo, podemos ejecutarlo desde Aplicaciones / Juegos / Pixel Wheels.

Al arrancar el juego se nos presentará un sencillo menú en castellano, donde podremos optar por jugar de a uno, o entre varios (hasta 4 jugadores). Asimismo, el modo de juego puede definirse entre carrera rápida, o modo campeonato, donde debemos disputar la serie de carreras.

Al preparar la carrera podremos elegir uno de los circuitos. Tres de ellos estarán disponibles al inicio, y los otros habremos de desbloquearlos.



Para correr necesitamos elegir un coche. A diferencia de las Ferraris de los muchachos, hay varios activados, desde un pistero, un patrullero, un rastrojero, etcétera. Cada uno de ellos tiene distintas características de pique, aceleración, agarre al piso, inercia, velocidad, etcétera. El resto podremos desbloquearlos conforme vayamos ganando carreras.

La carrera rápida es frenética y a tres vueltas: no bien el semáforo de la orden de largada, debemos ponerlo al taco. En mi rastrojero, cuando mando rebajes para curvar, el motor brama aullando "¡pe-róoon, pe-róooon!".

Podemos jugar de a dos en un teclado (e incluso de a cuatro, si sumamos dos gamepads o joysticks USB a la computadora). 

El jugador 1 maneja con las flechas del cursor: dobla con las flechas de cursor izquierda/derecha, y acelera y frena con las flecha cursor arriba/abajo, a la vez que activa las opciones con la barra espaciadora y retrocede con la tecla Escape.

El jugador 2 usa las teclas dxcv: o sea que acelera con la tecla d y frena con la tecla c, mientras que gira a la izquierda con x y a la derecha con v. A la vez activa las opciones con la tecla Ctrl izquierda y retrocede con tecla q.

En este aspecto multijugador es donde el Pixel Wheels se torna mucho más competitivo y divertido, ya que funciona perfectamente incluso en las Netbooks con Huayra del Conectar Igualdad/Juana Manso.

Como su nombre lo indica, la estética de PixelWheels replica los clásicos juegos de 8 bits, y si bien no se caracteriza por su imaginería absolutamente pixelada, lo cierto es que no reinventa la rueda. Tiene un cierto parecido al libre Dust Racing 2, aunque también podremos recoger power-ups y encontrar "turbos" tirados en la pista, al estilo de SuperTuxKart. Al tomarlos podremos usar armas de energía y cohetazos para desbancar a nuestros oponentes.

Como novedad contamos ahora con una pista de sonido de música electrónica, que podemos regular en volumen o desactivar.

En fin, un excelente juego para hacerse un as del volante por $0.

miércoles, 11 de octubre de 2023

¿Cómo instalo yt-dlp-gui en Ubuntu?

¡Compañeros!

El cómputo sigue mas o menos las mismas premisas que la Política. Si en esta no debemos perder los principios, en nuestro sistema GNU con Linux no debemos perder el backend; el front-end responde a las necesidades tácticas. Es decir, los principios han de ser inconmovibles, en tanto que el método con el cual llegamos a la acción puede variar fluidamente de acuerdo a una percepción lúcida de la situación imperante.

Esto, que lo hemos reconocido y con lo cual operamos, también cuenta con un raciocinio que puede portarse a los sistemas similares a UNIX. Es que muchas de las herramientas más útiles cuentan con una sencillez espartana, pero donde la complejidad de la tarea lo requiera, contaremos con herramientas mucho más complejas, y ello las hará difíciles de dominar.

yt-dlp es una de ellas. Sin duda este programa para terminal es excelso para bajar videos de YouTube desde la terminal (así como otros sitios de contenidos agregados). Y si bien su uso  es simple, una vez que demandamos extracciones de streams de audio por separado, diferentes codificaciones y demás, deja de ser moco de pavo.

Afortunadamente, podremos contar con un front-end gráfico que puede atemperar el problema al neófito. Tal es la tarea de yt-dlp-gui, una interfaz gráfica de usuario escrita en Python 3.9 que opera junto al yt-dlp y permite facilitar las operaciones de descargas de video.

Abrimos una terminal con Ctrl+Alt+t e ingresamos el siguiente bloque de comandos de organización para instalar todo lo necesario:

sudo apt update ;
sudo apt install ffmpeg -y
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp ;
sudo chmod a+rx /usr/local/bin/yt-dlp ;

sudo yt-dlp --update
cd ~ ;
git clone https://github.com/dsymbol/yt-dlp-gui ;
cd yt-dlp-gui ;
pip install -r requirements.txt ;
cd app ;
pyinstaller --name=yt-dlp-gui --clean -y app.py
cd ~/yt-dlp-gui/app/dist/
cp -r yt-dlp-gui/ ~/.local/bin/

Una vez instalada la interfaz, por comodidad deberíamos crear un lanzador. Para ello vamos a Sistema / Preferencias / Aspecto y comportamiento / Menú principal. En la ventana Menú Principal, podremos seleccionar la categoría de menú Aplicaciones / Internet, y a continuación presionar el botón "+Nuevo ítem". Este abrirá el cuadro de diálogo Crear Lanzador. En el campo Nombre de dicho cuadro asignar le al lanzador "yt-dlp-gui", mientras que en el campo Comando o Órden debemos asignar la ruta /home/usuario/.local/bin/yt-dlp-gui/yt-dlp-gui.

Ahora podremos lanzar yt-dlp-gui desde Aplicaciones / Internet / yt-dlp-gui, con lo cual se abrirá su ventana.

El uso del programa es bastante sencillo. Debemos pegar el link (URL) del video que queremos descargar en el campo Link. Asimismo, en el campo Path debemos indicar la carpeta donde irán a parar los ficheros descargados (por ejemplo, /home/usuario). 

Opcionalmente, el indicador Format nos desplegará un menú que nos permite escoger un formato preferido de descarga. La opción por defecto best elige el mejor, mp4 utiliza tal formato de video. Para audio y extracción de audio de un video contempla el formato mp3 (compresión con pérdida), wav (sin compresión), o flac (compresión sin pérdida).

En el campo filename podremos escoger un nombre de archivo a descargar (por ejemplo, video.mp4), o bien por defecto se indicaría una estructura de renombrado "%(title)s.(ext)s", que simplemente asigna el nombre o título de la pista de audio y la extensión escogida.

Una vez que incluimos la URL, ruta y nombre de archivo, podremos agregar el link  a la cola de descarga presionando el botón "+" ("agregar"). Para iniciar la carga de los links ingresados en la lista, presionamos el botón Descargar.

El yt-dlp-gui usará el programa yt-dlp para ir descargando secuencialmente los elementos según su posición están en la cola. Los archivos descargados quedarán en la carpeta que le solicitamos.

Es importante destacar que el módulo de descarga es siempre yt-dlp, y como tal este debe actualizarse manualmente para poder afrontar los desafíos que pudiesen surgir en los distintos agregadores de contenidos. Normalmente la actualización de dicho módulo no es automática, sino que debe realizarse manualmente en la terminal con el siguiente comando:

sudo yt-dlp --update

Una vez que esté instalado el programa, opcionalmente podríamos eliminar el clon local del repositorio con:

rm -r yt-dlp-gui/

domingo, 8 de octubre de 2023

¿Cómo juego al ajedrez online desde la terminal de Ubuntu?

Recordando el "match telegráfico" de Ajedrez entre el Jockey Club de La Plata y el Manhattan Chess Club neoyorquino, Juan Perón explica cómo jugar ajedrez en línea desde la terminal de Ubuntu.

¡Estimados Maestros y Grandes Maestros!

Las características que hacen del Ajedrez el más respetado de los deportes, lo sustancian de las virtudes más universales. 

No solo es un juego de estrategia en el que se enfrentan dos jugadores, cada uno de los cuales tiene 16 piezas de valores diversos que pueden mover, siguiendo ciertas reglas, sobre un tablero dividido en cuadrados blancos y negros. El objetivo de "derrocar al Rey" propone la bondad de agilizar la mente, sino que la lid sobre el tablero bien puede consagrar la amistad entre sus muy temporales oponentes.

Ha sido a través de la historia que el más duradero de los kriegsspiel ha propuesto los mayores desafíos, y - por que no - divertimentos. Como tal, hubiese sido extraño que nuestro país escapase a estas visiones positivas. El Juego Ciencia se había popularizado en estas tierras ya desde la épocas coloniales, y una vez establecida la Nación no puede ignorarse la labor del ciertamente oligárquico Club del Progreso. A este le siguieron una buena cantidad de círculos y clubes ajedrecísticos de distintas proveniencias y montas, con fuerte jugadores. De todos ellos, sin duda el Club Argentino de Ajedrez (1905) y el vanguardista Círculo de Ajedrez de Buenos Aires (1916) contaron con temibles mesas. En 1922, la formalización de la unidad entre veintidós de estos círculos vio nacer a la Federación Argentina de Ajedrez (FADA), cuya labor se vio aureolada en la realización del Campeonato Mundial de Ajedrez de 1927, sede del legendario choque Capablanca-Alekhine.

Sin embargo, distintas acepciones fueron dando lugar un "cisma" federativo local. La solución a tal división no podía venir sino de mano del Justicialismo, lo que confluyó en lo que podríamos describir como una Segunda Era del Ajedrez Argentino, regada con merecidos apoyos y subvenciones gubernamentales. La Cámara de Diputados aprobó un subsidio anual para la Federación Argentina De Ajedrez (FADE) por $ 50.000, en tanto que el Club Argentino de Ajedrez adquirió su sede de Paraguay 1858 merced de un subsidio del Congreso de la Nación. 

Esto permitió elaborar una fuerte serie de torneos locales, culminados por encuentros internacionales auspiciados por la FIDE. El Torneo Internacional de Mar del Plata se constituyó en un gran certamen a equipos, con 18 Grandes Maestros de altísimo calibre. Fue ganado por Najdorf en gran forma, seguido por Ståhlberg, Eliskases, Pilnik, Euwe, Julio Bolbochán. Posteriormente se jugó el fortísimo Sextangular Buenos Aires/La Plata, coronando a Ståhlberg. 

El IV Torneo Memorial Roberto Grau fue algo más fuerte que el del año anterior, dominando Ståhlberg. Rossetto se impuso en el Campeonato Argentino.

Sin duda uno de los logros que permitieron las subvenciones fue maridar al ajedrez con los desarrollos tecnológicos. En este marco es de especial trascendencia el mítico match telegráfico Jockey Club de La Plata-Manhattan Chess Club de 1947 donde el equipo argentino integrado por Ståhlberg, Najdorf, Julio Bolbochán, Pilnik, Maderna, Michel, Rossetto, Guimard, García Baladó y Marcos Luckis dio por tierra con el seleccionado neoyorkino a través de terminales teletipo, en un épico 6½:3½.

Difícilmente este tipo de matchs ajedrecísticos "por télex" podrían haberse extendido como una Realidad Efectiva si no fuese por el alcance de las redes de datos en materia de la lúdica. Un sistema de tipo UNIX, donde un computador hace las veces de tablero, reloj, ujier y árbitro, nos permitió replicar e incluso superar esta propuesta, máxime si consideramos la posibilidad que ofrece el acceso público. Este logro se conoce como FICS, un servidor libre de ajedrez en la red de datos. 

Pues bien señores, hoy todo el mundo puede usar dicho programa desde múltiples avenidas, incluyendo la popular freechess.org, lo que permite jugar contra otros parroquianos electrónicos. Si bien FICS acepta perfectamente clientes gráficos libres (incluyendo al superclásico xboard, pychess o Gnome Chess), no escapa a lo interesante jugar "a la télex", usando una terminal enlazada a un sistema GNU con Linux.

Es que todo sistema GNU que se precie cuenca aún con un cliente capaz de enlazar a redes a través del viejo protocolo Telnet. Este podrá utilizarse para establecer el enlace que nos interesa.

Para ello abrimos una terminal con Ctrl+Alt+t y llamamos al servidor con el cliente de telnet. Podremos hacerlo ingresando el comando:

telnet freechess.org

Al establecer el enlace telemático, con la potencia de los baudios se nos presentará en pantalla el aviso de login al sistema ajedrecístico remoto FICS de freechess.org:

             _       __     __                             __      
            | |     / /__  / /________  ____ ___  ___     / /_____ 
            | | /| / / _ \/ / ___/ __ \/ __ `__ \/ _ \   / __/ __ \
            | |/ |/ /  __/ / /__/ /_/ / / / / / /  __/  / /_/ /_/ /
            |__/|__/\___/_/\___/\____/_/ /_/ /_/\___/   \__/\____/ 
       ^^__                  _____________________                 _  _  _ 
      /  - \_               / ____/  _/ ____/ ___/   _            | || || |
    <|    __<              / /_   / // /    \__ \   (_)           |_______|
    <|    \               / __/ _/ // /___ ___/ /  _              \__ ___ /
    <|     \             /_/   /___/\____//____/  (_)              |___|_|
    <|______\                                                      |_|___|
     _|____|_        ======================================        |___|_|
    (________)         freechess.org  ----  54.39.129.129         (_______)
    /________\       ======================================       /_______\ 
                       (Login screen designed by Alefith)

   ****** Welcome to the Free Internet Chess Server at freechess.org ******

Webpage: http://www.freechess.org
Head admin : mattuc   Complaints to : complaints@freechess.org
Server location: freechess.org   Server version : 1.25.20

      If you are not a registered player, enter guest or a unique ID.
             (If your return key does not work, use cntrl-J)

login:

Naturalmente si ya tuviésemos un usuario registrado podríamos ingresar con el nombre de usuario específico y una contraseña. Sin embargo, al tratarse de un ordenador público podremos perfectametne utilizar un nada pretencioso usuario “invitado”. Para ello debemos logueamos como "g" o "guest". 

Con este recibiremos un alias del tipo Guestxxxx podremos darnos de alta y acercarnos a un tablero para jugar partidas sin obtener puntaje (como quien va a la plaza a jugarle a los jubilados).

Una vez ingresado al servidor por Telnet, veremos el intérprete de comandos del servidor ajedrecístico FICS, indicado con prompt:

fics%

Ahora bien, existen varias maneras de localizar un oponente:

Al entrar a un servidor ajedrecísitico tan concurrido como freechess.org, normalmente deberían ir apareciendo las solicitudes de otros concurrentes invitados, que desea jugar en alguna modalidad de juego. Estas aparecerían según este formato:

GuestQRXX (++++) seeking 15 0 unrated standard ("play 13" to respond)

Esto indica que el jugador GuestQRXX quiere jugar una partida en el tablero 13. Para jugar contra este jugador, en el prompt fics% deberíamos ingresar el comando play 13.

Además: 

  • Podemos ver quién está en línea con el comando who, y usar el comando match con el nombre del jugador en línea que nos interesa.
  • Podremos usar el comando seek para buscar un jugador que ya conocemos.
  • Podremos usar el comando de chat general cshout y gritar en el servidor "Quiero jugar una partida del tipo...".

Nuestro oponente recibirá en pantalla nuestra solicitud y podrá aceptarla o rechazarla. De aceptarla, el servidor determinará al azar el color de piezas de cada contrincante. Cada uno recibirá un tablero inicial en su pantalla, y las Blancas podrán iniciar la partida. 

(Naturalmente, también nos podrían proponer una partida, la cual podremos aceptar o declinar).

Durante la partida a través FICS con Telnet, debemos mover las piezas en el tablero introduciendo varias órdenes o solicitudes. Para ello introducimos comandos en el prompt FICS%.

Cada vez que el oponente mueve, el servidor enviará la nueva posición del tablero a ambos oponentes. 

Los escaques del ajedrez están divididas en filas del tablero, que van de la a a la h (siendo la a el lado de Blancas y la h el lado de Negras), y columnas del tablero, que van de la 1 a la 8 (siendo la 1 el lado de Blancas y la 9 el de Negras). 

En la notación algebraica, cada escaque está definido por sus coordenadas fila-columna. En notación algebraica, cada pieza del ajedrez está representada por una letra propia, según su nombre en inglés:

Símbolo Pieza
k rey
q reina
b alfil
n caballo
r torre
p peón (aunque realmente no se usa la “p”).

Por este motivo, el tablero que representa la jugada se ilustria de esta manera (con símbolos ASCII):

        ---------------------------------
     8  |   | *R|   |   | *R|   | *K|   |
        |---+---+---+---+---+---+---+---|
     7  | *P|   |   | *B| *P| *P| *B| *P|
        |---+---+---+---+---+---+---+---|
     6  |   |   |   |   |   | *N| *P|   |
        |---+---+---+---+---+---+---+---|
     5  | *Q|   |   | *P|   |   | B |   |
        |---+---+---+---+---+---+---+---|
     4  |   |   |   |   |   | P |   |   |
        |---+---+---+---+---+---+---+---|
     3  |   |   | N | B | P |   |   |   |
        |---+---+---+---+---+---+---+---|
     2  | P | P |   |   | Q |   | P | P |
        |---+---+---+---+---+---+---+---|
     1  |   |   | R |   |   | R | K |   |
        ---------------------------------
          a   b   c   d   e   f   g   h

Según este ejemplo, las Blancas se disponen en la parte inferior del tablero, mientras que las Negras lo hacen en la parte superior. Los símbolos de las piezas aparecen en mayúsculas, mientras que el símbolo * denota que es una de las piezas Negras. El Rey de las Negras (*K) está en el escaque g8; el rey de las Blancas (K) está en el escaque g1, etcétera. Juegan las Negras.

Movidas

Podemos usar varias notaciones para mover las piezas. 

Aquellos jugadores que deseen emplear la Notación algebraica, pueden definir en su comando las piezas a mover y los escaques. Supongamos que las Negras desean mover su caballo (*N) del escaque f6 al escaque e4. La movida algebraica a ingresar sería Ne4 (o directamente ne4, pues el servidor de ajedrez es insensible a mayúsculas). Como normalmente siempre avanzan sobre una columna, para mover peones el intérprete es sensato, por lo cual no suele ser necesario consignar p para denotar al peón; basta con indicarle el escaque al cual queremos moverlo. Suponiendo que las Negras deciden mover el peón (*P) del escaque h7 al escaque h6, el comando sería h6 (aunque opcionalmente se puede especificar al peón, indicando Ph6). Para hacer enroque corto (lado del rey) usamos O-O, mientras que para enroque largo usamos O-O-O

Este método funciona bastante bien si somos ágiles con la notación algebraica inglesa. Es importante al principio elegir jugadas estándar en lugar de rápidas ("blitz"), pues puede llevarnos algunos segundos introducir la jugada y ser ágiles con la notación algebraica.

Sin embargo, debemos tener cuidado con aquellas jugadas que resultan ambiguas en esta notación. Durante el juego podría suceder que hubiesen varios peones, caballos, torres e incluso reinas en capacidad de desplazarse a un mismo escaque de destino. Ante tales casos no alcanzaría con ingresar simplemente Nd4, Rd4 o Qd4 pues se produciría una ambigüedad que el servidor estaría incapacitado de discernir correctamente (no distinguiría cuál de las piezas de dicho tipo es la que debe mover). Ante tal incidencia, debemos consignarle específicamente cuál de es la pieza a mover. Esto se hace de varias maneras:

  • Indicando las coordenadas de fila o columna de la pieza en cuestión (cualquiera que aclare la posición). Por ejemplo, en caso que las Negras tuviesen caballos en los escaques c2 y e2, ambas piezas podrían moverse al escaque d4. Por ello para definir el movimiento del caballo del escaques c2 a d4, conviene indicar Ncd4, donde la c aclara cuál de los caballos debe mover (en este caso, el caballo situado en la fila c). Si fuese el caso que ambos caballos se sitúan en la fila c, entonces se debe indicar la coordenada algebraica completa de la pieza interesada, ya sea N2d4 o bien N6d4.
  • Describir la coordenada algebraica completa para la movida, esto es: indicar el tipo de pieza, el escaque de origen y el escaque de destino; por ejemplo Nb6c4.

Captura de piezas

En notación algebraica, la captura de piezas se denota con un x (se pronuncia en su acepción algebraica como "por").

Supongamos que las Negras desean usar la torre de las Negras (R*) situada en b8 para comer el peón (P) de las Blancas situado en b2; en la notación algebraica inglesa tradicional la movida se escribe como Rxb2. Sin embargo, el servidor podría interpretar esto tanto como:

  1. una movida simple Rb2, y sabría que es una captura,
  2. RxP pero no sabría cuál escaque se quería decir (ya que en esta posición la torre puede capturar únicamente un peón).

Nuevamente podría suceder que en ciertas posiciones de tablero tanto el peón de una fila b y un alfil pudiesen moverse hacia un mismo escaque. En tal caso el intérprete confundiría el significado de la b (ya que puede referirse tanto al peón en la fila b o un alfil de Blancas, B). En tal caso, si ingresamos bc6 se produciría tal ambigüedad y el servidor se ve incapaz de saber cual de las dos piezas realizará la captura (si el peón en fila b o el alfil). Para subsanar esto debemos consignar qué pieza es la que consagrará la captura, indicandolo como pxc6.

Naturalmente de esto se desprende el otro caso que puede dar lugar a movida ambigua: el concierne a cuál pieza deseamos comer. 

Por ejemplo, Rxb4 ¿significa “Torre captura en escaque b4” o “torre captura alfil en la columna 4”? Para evitar tales malentendidos, debemos evitar especificar dicha captura como una movida algebraica simple desde un escaque a otro (por ejemplo, Rb4), y especificarla la movida de manera completa (indicando la pieza a mover, su posición inicial y la pieza situada en la posición de destino final, de esta manera: RxPb4

En cualquier caso, para evitarse problemas con las movidas ambiguas, también es posible utilizar la poco tradicional notación de computadora que os explicaré a continuación.

La manera más simple (aunque tal vez no la más ágil o utilizada) es usar la notación de computadora. Esta es puramente en base al sistema de coordenadas, y consconstan de la siguiente sintaxis:

escaque_de_origen-escaque_de_destino

Por ejemplo, en la posición de tablero indicada, para mover la torre de Negras desde b8 a b2 deberíamos ingresar simplemente b8-b2.

Como se ve, no se usan las letras identificadores de las piezas, simplemente los escaques, y por este motivo las movidas ingresadas en notación de computadora no pueden ser ambiguas, simplemente son más largas de ingresar y no son descriptivas.

Comandos de solicitudes

Durante la partida también será necesario introducir algunos comandos de solicitudes en el prompt FICS, que se utilizan para realizar determinadas solicitudes al oponente. El oponente debería aceptarlas para que ocurran. Estos comandos son:

Comando Función
abort Solicita cancelar el juego
adjourn pide guardar y detener la partida para poder seguirla más adelante
draw Solicita tablas (declarar empate)
flag finaliza la partida porque el oponente se quedó sin tiempo
moves pide al servidor FICS que le envíe la lista de movidas de la partida
pause solicita suspender temporalmente la partida, sin detenerla para continuarla mas adelante
promote configura la pieza a coronar cuando el peón llegue a coronación
refresh Presenta la posición actual del tablero
resign Otorga la victoria al oponente, y finaliza la partida
say Se comunica con el oponente actual (o el último)
switch solicita que su oponeten cambie de piezas (color)
takeback solicita que una o más movidas sea retrocedidas (cancela movidas)
unpause solicita que una partida en pausa continúe
withdraw cancela una solicitud que ha realizado (siempre que no hubiese sido concedida)

Podremos decirle algo al contrincante con el comando say. Naturalmente, también existen muchos más comandos que se pueden aprender a través del comando general de ayuda help.

Una vez dominado el entorno, podremos incluso jugar partidas con más de un contrincante, a la manera de un torneo de exhibición en simultáneas. Para ello deberíamos introducir el comando simuls.

Para cerrar la sesión, ingresa el comando logout

Logging you out.
                                         .::.
                               _()_      _::_
                      _O     _/____\_  _/____\_    _O   
 _  _  _    ^^__     / //\   \      /  \      /   / //\     ^^__    _  _  _ 
| || || |  /  - \_  {     }   \____/    \____/   {     }   /  - \_ | || || |
|_______|<|    __<   \___/    (____)    (____)    \___/  <|    __< |_______| 
|__ ___ |<|    \     (___)     |  |      |  |     (___)  <|    \   \__ ___ /
 |___|_| <|   _ \     |_|      |__|      |__|     _|_|   <|_    \   |___|_|
 |_|(_)| <|__(_)_\   /(_)\    /(_) \    (_)  \   (_)  \  <(_)____\ (_)|___|
 |_(___)  _|(___)_  ((___))  ((___)_)  (___)__) (___)__) (___)__|_(___)_|_| 
(_ _|_|_)(_ _|_|_ )( _|_|_ )(__|_|_ _) _|_|____)_|_|____)_|_|_ ___)|_|_____)
/_(_____)/_(_____)\/(_____)\/(_____)_\(_____)__(_____)__(_____)__(_____)___\
  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\  /_____\

                         (Logout screen by Alefith)

Thank you for using the Free Internet Chess server (http://www.freechess.org).