Archivo de la categoría: Tutoriales

Como escribir caracteres y emoji usando su código hexadecimal

Pequeño vídeo grabado con VokoScreenNG y usando «los subtítulos» de teclas pulsadas de ScreenKey.

Básicamente es pulsar a la vez las tres teclas ctrl may u donde es la tecla Control izquierda o derecha la que te apetezca, y mayúsculas o shift (no confundir con la tecla Bloq mayús) izquierdo o derecho también y después escribir el código hexadecimal.

Después te sale una letra u subrayada. Y puedes ir despacito  escribiendo el código hexadecimal y finalizas con un intro/enter…al contrario que con windows98 y msdos que tenías que escribirlo rápido y era con la tecla Alt o AltGr (no recuerdo) e incluso puedes borrar los números hexadecimales (recordar del 0 al f) mal metidos. O incluso borrar (también con la tecla esc la u subrayada para volver al estado normal del teclado.

Si una imagen vale por mil palabras un vídeo por 30fps x 1000 palabras x tiempo, pues eso el vídeo:

Rescatando artículos: Como convertir un puñado de imágenes en un pdf

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Para probar las #diapositivas del Likedin gracias a #GNU / #Linux y la herramienta de código abierto #ImageMagick (jo desde hace años uso el fractal para cuando necesito imágenes de prueba pero tiene mas formas de generar imágenes) me he creado un «#pdf de diapos» con los siguientes comandos:

convert -size 800×600 plasma:fractal fractal.png

convert -size 800×600 xc: +noise Random tele.desintonizada.png

convert -size 800×600 plasma:fractal -blur 0x2 -swirl 180 -shave 20×20 fractal.spiral.png

convert -size 800×600 pattern:hexagons wargame.png

convert -size 800×600 pattern:checkerboard -auto-level +level-colors black,red ajedrez.png

convert $(ls *.png -1 | tr «\n» » «) diapositivas.pdf

Ahora a ver si funciona el linkedin…

Rescatando artículos: Usando jq para sacar canciones de Rainwave

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Un poquito de #jq #mañanero para activar neuronas cual #cafeína digital en este lunes.

Motivación: tener el título completo de la canción sonando en la subestación #chiptune de la mítica radio online https://rainwave.cc/chiptune.

Pues gracias a #httpie , a jq y #watch en #GNU / #Linux se puede hacer en #onelinecommand .

Primero el comando y después la explicación:

command=»http https://rainwave.cc/api4/info?sid=4 | jq ‘.sched_current.songs[0].title + \» (\» + ([.sched_current.songs[0].artists[].name] | join(\»,\»)) + \»)\»‘»; watch -t -c -n 5 eval $command

El comando esta en dos partes, primero la creación de la linea que va ejecutar el watch.

El watch, se ejecuta cada 5 segundos y le quitamos título y le damos color (aunque sea innecesario en este caso).

La linea que va ejecutar el watch es:
Con httpie y gracias a que #Rainwave usa #Django con #Python tiene un #API bastante sencillo, le pido un #json de la info de la estación de Chiptune (que tiene id=4).
Ese json lo «pipeo» a un jq que hago una concatenación de strings para dar formato al texto del título, lo primero es sacar el título de la canción con .sched_current.songs[0].title que siempre es la primera (la 0) en el array de canciones.

Y después algo mas complejo aplico un join a un a un array de los nombres de autores/as de esa canción que me creo en vivo con [.sched_current.songs[0].artists[].name] .

Y ya esta.

Rescatando artículos: Articulo sobre las funciones core de python

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Python built-in functions to know

Rescatando artículos: un array de ARG en un fichero Dockerfile usando jq

Estoy recuperando los artículos interesantes que publique en cierta red social laboral privativa, los escribía ahí para dar el contenido que le falta…porque hasta los cojones de artículos de couching y neoliberales que salen.

Cuando necesites un #array en un #ARG en un #Dockerfile, #jq es tu amigo (por cierto no funciona el #hereString en los dockerfile así que eco y tubería) :

ARG FILES='[«/tmp/42», «/tmp/autoexec.bat», «/tmp/track01.bin»]’
RUN for f in $(echo «$FILES» | jq -r ‘.[]’); \

Un puñado de vídeos de thEpOpE – Sergio sobre el «formato de ficheros» de las cintas de Spectrum: la crisis de los 40 friki versión (parte 3)

Posts in this series
  1. Volviendo : la crisis de los 40 friki versión (Parte 1)
  2. El sistema de ficheros del Spectrum : la crisis de los 40 friki versión (Parte 2)
  3. Un puñado de vídeos de thEpOpE - Sergio sobre el "formato de ficheros" de las cintas de Spectrum: la crisis de los 40 friki versión (parte 3)

Gracias al chat de telegram de encontré el canal de thEpOpE – Sergio el cual tiene muchos videos muy agradables de escuchar (como odio los youtuber/streamers chillones) , pero a destacar en este articulo recomiendo:

Y nada disfrutarlos y darles las gracias a el en algún comentario.

El sistema de ficheros del Spectrum : la crisis de los 40 friki versión (Parte 2)

Siguiendo con esta serie de artículos sobre la crisis de los 40 friki versión, vamos con lo primero que no conocía del spectrum.

Los sistemas de ficheros en cinta, porque ne mis tiempos hacías load"" (que "" era el *.* de ahora) y ya esta, bueno en mis tiempos también tenía el Pheenix (un clon del Phoenix) copiado en una cinta pirata que para cargarlo había que hacer load «» code .

Y por desgracia en mis tiempos mozos, no se por que pero mi Spectrum+2A no grababa las cintas con mi código basic, y era una tarea titánica porque los pasaba a papel y las versiones eran papeles nuevos…en algún sitio estarán.

Los siguientes datos técnicos están por un montón de lados y mejor explicados, no vengo a contaros el secreto de la rocacola.

Bueno pues las cintas de Spectrum pueden tener los siguientes ficheros:

  • ficheros de programas basic
    • los únicos autoejecutables
  • ficheros de datos binarios
    • imágenes, que hay un sugar syntax en basic para cargarlos con load "" screen$ pero son binarios.
  • ficheros de arrays de números (los json de la época o serializados)
  • ficheros de arrays de palabras (los json de la época o serializados)

Pues tengo que reconocer que hasta hace unas semanas no sabía que el único fichero autoejecutable era los ficheros de programas de basic.

Así que los juegos comerciales tienen sí o sí (salvo rayadas como el Pheenix pero no recuerdo si después tenias que ejecutarlo a mano) un pequeño programa en basic que hacia de cargador del juego propiamente dicho que venía en entero o troceado en varios ficheros binarios.

Normalmente un juego comercial simple era:

cargador pequeño basic -> fichero binario: pantalla de carga -> fichero binario: juego

Los había mas complejos que para compatibilidad con el 48kb troceaban el juego en varios ficheros binarios:

cargador pequeño basic -> fichero binario: pantalla carga -> fichero binario: juego -> fichero binario: nivel 1 -> fichero binario: nivel 2

Luego había gente que rizaba el rizo e intentaba hacer cargadores de lo mas complejos para que los críos de aquella época dijéramos «guauuu» como Dynamic con su contador de carga y sin las clásicas lineas de colores del borde del Army Moves.

Otra cosa que no viví en su época fue mini juegos durante la carga del juego principal, pero eso tuvo que ser espectacular.

En los siguiente episodios (no se en que orden o si alguno se fusionara):

  • voy a retomar el maze en basic que volví a escribir hace algunos años (que venia de un libro de programación infantil) quiero volver a re-entenderlo.
  • quiero explicar el randomize usr que por fin (hace unas semanas lo entendí)
  • quiero intentar hacer una calculadora simple en código maquina
  • quería hacer una prueba de velocidad de hacer algo en basic y hacer lo mismo en código maquina
  • los siguientes pasos para el juego

Volviendo : la crisis de los 40 friki versión (Parte 1)

Creative 40th Birthday Cake Ideas - Crafty Morning

La crisis de los 40 a los hombres (del 1/2º mundo) a los que le viene, les pasa muchas cosas como:

  • suelen irse a Turquía a ponerse el pelo cual muñeca chochona (que pena que Santiago Segura no sea un ejemplo para nadie, porque ser metalero calvo mola…en mi caso pelos locos con frontal en plan Punset).
  • suelen divorciarse y arrejuntarse con una moza joven.
  • suelen comprarse una motarro grande…aunque nunca hayan conducido en moto, y o suelen comprarse un coche caro.
  • los mas pijos se hacen un Lifting escrotal como el puto Bono (no el político, si no el cantante vendido que iba de alternativo pero era un Michael Jackson de la vida), vamos que los llevan menos colganderos….recuerdo la hermana de un amigo muy maja que consiguió la plaza de profe muy joven en un instituto y le llego el típico huevos colgaderos a comerle la oreja….y lo peor que consiguió el premio, me dio mucha pena porque le tenía mucho aprecio…pero bueno esa gente come orejas podría ser lideres de una secta.
  • algunos se vuelven unos hippis de la vida y empiezan a ir a la India y a meditar, a vestir eco, cuando en su puta vida lo mas místico que han hecho ha sido la comunión vestidos de marineritos. Me huelo que sera por pillar cacho con mozas jovenes neo-hippys.
  • se vuelven unos culturetas de la vida, que escupirían a la cara a Woody Allen por no llegar a su nivel de cultureta. Los mas pudientes se gastan los dineros en ir a algún museo de arte moderno de alguna capital Europea a ver algún cuadro de algún manchurron, solo para tener conversación de cultureta. Otros les da por escribir libros de poemas. Y por supuesto las pelis de Detectives-pastores de cabras afganos subtituladas en sueco de la filmoteca.

Estas situaciones pueden darse algunas o todas.

Y después los frikis tenemos otro tipo de crisis ¿menos autodestructiva? y comienza con ese pensamiento «Jo, pues me gustaría hacer un juego para ese ordenador que tenía de crío».

Retro Ordenadores Orty: ZX Spectrum +2A (revisión Z70830 ISSUE 2) (1987) (teclado español)

Pues allá vamos.

No es la primera vez que entro al trapo, ya con 38 me vino (o re-vino porque creo que no fue la primera vez) la crisis friki de los 40: https://gitlab.com/tres-14159/R_Tape_loading_error_0_1

Gracias a la gente del chat de telegram:  Spectrumero & Dario

Me he vuelto a enfocar, también mil y mil y mil unas gracias a Santiago Romero que ha hecho muy buenos tutoriales de programación en ensamblador del z80 y muchos otros de GNU/Linux como el de tutorial de tmux o el tutorial de vim .

Y varios pdf de libros antiguos y el manual del Spectrum +2A metidos en el móvil y mucho mejor, interesante y productivo para cagar en el WC que andar haciendo scroll al twitter.

Ya lo he dicho otras veces en este blog, en charletas en vivo, streamings y a desconocidos por la calle…mi acicate en la vida para ser un Stallmanista taliban del software libre fue en la infancia intentar hacer juegos de Spectrum con el Basic en un barrio de clase obrera (con una buena biblioteca pública pero poco mas), recuerdo la frustración de intentar hacer un triste matamarcianitos e ir eso a pedo por segundo y yo preguntadome ¿el porque?, el porque era que estaban hechos en código maquina algo que años después descubrí. Y esa rabia del código cerrado y el negar el acceso al conocimiento cuando descubrí en la uni el mundo del software libre fue como una revelación.

https://media.tenor.com/Oc4nf8N08jIAAAAM/mind-blow-galaxy.gif

¿Cómo van ha ser mis pasos en la espiral de autodestrucción de la crisis de los 40 friki?

  • Quiero intentar hacer un par de juegos «decentes» y completos para Spectrum.
    • con Basic mas o menos me apaño pero de ahí puedes sacar juegos arcade muy simples, y quizá muy buenos juegos de estrategia por turnos o aventuras de texto/conversacionales .
    • con Código Maquina ahí esta la chicha.
    • No quiero llegar (o eso espero) al punto friki de sacarlo en físico con su cajita de casete y tal….tentanciones tengo pero no.
  • Quiero al igual que los que restauran edificios romanos, de la edad media, crímenes rellenos de sobres de CalatrabaTeLaClava ser riguroso a nivel histórico. Y pienso ¿Cómo lo haría el Miguelin pequeñin de los 80/90 que programaba en Basic en su Spectrum?:
    • encontraría algún libro de código maquina que entendiera (hecho Código Maquina para Principiantes).
    • los primeros juegos los haría convirtiendo alguno lentorro de Basic a código maquina.
    • no usaría ningún ensamblador de aquella época, porque:
      • no creo que conociera la palabra ensamblador (recuerdo cuando descubrí la palabra emulador uff)
      • puede que mis padres hubieran pagado por el ensamblador de investronica (u otro), porque si se mojaban en todo lo que fuera que aprendiera eso de la informática, ains me tenían que haber enseñado a nacer rico y sin saber hacer la O con un canuto pero montar una startup IT para explotar a profesionales que sacaran el trabajo.
    • entonces al igual que en aquella época…mi spectrum no se por que pero no grababa cintas y todo el código que picaba en basic tenia que pasarlo a papel (en algún sitio estará), pues tendría enorme listados de código ensamblador que tendría que haber pasado a mano a código maquina.

Hablando seriamente de las crisis de la edad, una de las crisis de la edad que tenemos los seres humanos (del 1/2º mundo) es la de los 30, que es cuando te das cuenta de que tus padres son mayores e incluso ya están llegando a la vejez y sabes que mejor tarde pero tarde o temprano no estarán contigo, esa es la jodida.

Estad atentos en vuestras televisiones a los siguientes episodios de esta aventura del cuarentón friki quiere hacer un juego en Spectrum.

¡¡Oye que eso esta fuera de las coreutils!! Ahhh es en rust, oioioioi que bonicoooo

Un poco hasta los cojones de la tontería de que sean sustituciones no compatibles de las coreutils en Rust. Como por ejemplo Bat .

A ver me explico me encantan las mejoras, pero no me hagas el sistema lleno de incompatibilidades por ser guay….que esto no es un windoze.

Y si ahí esta el find que duele sus «long option» a lo «short» con:

$ find /tmp -type f -name "una_caca.txt"

Pero a mi lo que me ha «enfadado»…muy entrecomillas es que haya ido a preguntar al chat de #bash de Libera Chat sobre como se usa bien bien getopt que no estoy hablando de getopts.

Pues macho se me han puesto con que eso no es parte de las coreutils, que si blablabla….señores que estoy en GNU/Linux y que lo quiero porque getopts no tiene soporte para las «long option».

Pero eso si, cuando es algo en un golang o rustlang y tiene muchos colorines, la gente se la suda los estándares.

Pues al final lo resolví y me hice un pequeño ejemplo con getopt:

#! /bin/bash

#~ get_opt.example.sh
#~ Copyright (C) 2022 Miguel de Dios Matias

#~ This program is free software: you can redistribute it and/or modify
#~ it under the terms of the GNU General Public License as published by
#~ the Free Software Foundation, either version 3 of the License, or
#~ (at your option) any later version.

#~ This program is distributed in the hope that it will be useful,
#~ but WITHOUT ANY WARRANTY; without even the implied warranty of
#~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#~ GNU General Public License for more details.

#~ You should have received a copy of the GNU General Public License
#~ along with this program. If not, see <http://www.gnu.org/licenses/>.

: '
Examples the calls:

$ ./getopt.example.bash --arg-b 111 -a 2222 3333
argA 1
argB 111
argC 
argD 0
unamedOptions 2222 3333

$ ./getopt.example.bash -a --arg-b=111
argA 1
argB 111
argC 
argD 0
unamedOptions 

$ ./getopt.example.bash -c abc def
argA 0
argB 
argC abc
argD 0
unamedOptions def
'

function help() {
    echo "$0 [(--arg-a | -a)] [(--arg-b | -b) <data_b>] [(--arg-c | -c <data_c>)] [-d] [(--help | -h)]"
}

LONG_OPTION_LIST=(
    "arg-a"
    "arg-b:"
    "arg-c:"
    "help"
)
SORT_OPTION_LIST=(
    "a"
    "b:"
    "c:"
    "d"
    "h"
)
# Read the parameters
opts=$(getopt -q \
  --longoptions "$(printf "%s," "${LONG_OPTION_LIST[@]}")" \
  --name "$(basename "$0")" \
  --options "$(printf "%s" "${SORT_OPTION_LIST[@]}")" \
  -- "$@"
)
eval set -- "$opts"

argA=0
argD=0
unamedOptions=()
# It it is same a queue (process the head) because $1 and $2
while true
do
    case "$1" in
        --arg-a | -a)
            argA=1
            ;;
        --arg-b | -b)
            argB=$2
            shift 1
            ;;
        --arg-c | -c)
            argC=$2
            shift 1
            ;;
        -d)
            argD=1
            ;;
        --help | -h)
            help
            exit 0
            ;;
        --)
            # End options now the unamed options
            ;;
        *)
            unamedOptions+=("$1")
            ;;
    esac
    shift 1
    if [ $# -eq 0 ]
    then
        break
    fi
done

echo "argA $argA"
echo "argB $argB"
echo "argC $argC"
echo "argD $argD"
echo "unamedOptions ${unamedOptions[@]}"