Archivo de la categoría: Tutoriales

DNI Electrónico en GNU/Linux (Linux Mint 22.1)

El DNI electrónico (link a la wikipedia) cuando funciona es una delicia, pero hacerlo funcionar es lo todavía tiene muchos roces, aunque no muchos…y espero que los funcionarios según salgan versiones años siguientes siga al menos funcionando como ahora o mejorando (porque el autofirma…que no tenga opción de zoom y sea purito asqueroso 💩 Java es como frotarte los cojones con un rayador de quesos.

Y como me a tocado formatear el ordenador y volver a ponerle un GNU/Linux, desde hace años uso Debian para uso personal y para profesional Linux Mint. Y en este caso es el portátil del curro pues eso Linux Mint.

Y cierto es que hay muchos tutoriales por internet de muy buena gente bloguera y linuxera explicandolo, pero aquí me lo dejo un poco como autonotas para mi yo del futuro y para el que pase.

¿Para que se usa el DNI electrónico?

  • Para firmar documentos (PDFs del curro y papeles legales que piden los funcionarios).
  • Acceder a las web públicas.

(jo tiene casi 50 años la peli de las 12 pruebas de Asterix y que bien retrata el papeleo legal con los funcionarios)

Instalar DNI Electrónico

Primero a ver si funciona el lector DNI electrónicos USB, raro a estas alturas de la película pero bueno fabricantes gilipollas que venden productos rotos (que no funcione en GNU/Linux es igual a roto) hay.

Yo uso un el comando diff pipeando lsb y en 10 segundos de espera otro lsb, no se son muchos segundos pero como las clavijas USB tienen un estado cuantico mejor tener tiempo.

diff -u <(lsusb) <(sleep 10; lsusb)

Instalar PKCS#11

Descargándolo de la web de la policía

Antiguamente para instalar un paquete deb eran dos pasos usar el dpkg y después resolver las dependencias, pero desde hace años se puede hacer directamente con apt.

$ sudo apt install ./libpkcs11-dnie_1.6.8_amd64.deb --fix-broken

En teoría ya esta instalado y en firefox se vera, si vas a Ajustes y buscas certificados debe aparecer.

Allí tienes que añadir un nuevo dispositivo dando al botón de Cargar, yo le pongo de nombre DNIE y el fichero es:

/usr/lib/libpkcs11-dnie.so

Entonces si le das a Iniciar Sesión, te pedida la clave que metiste en la maquina de las oficinas del DNI en la Policía. Si todo va bien se iniciará la sesión. Si fallas 3 veces, te va tocar volver a la oficina a desbloquear el DNI.

Para probarlo lo mejor ir a la Carpeta Ciudadana y ver si puedes entrar.

Y o te pide la clave o si ya has iniciado sesión saldrá un mensaje de aviso parecido a este.

Firmar documentos

Bueno ahora lo del Java asqueroso  .

Hay que descargarlo desde Autofirma, te va dar un zip que dentro esta el paquete debian. Para instalarlo:

$ sudo apt install ./AutoFirma_1_8_3.deb –fix-broken

Ojo que te tumba el firefox….supongo para enganchar el autofirma al firefox. Y mucho paquete debian pero no pide java11 de dependencias, así que se instala y si clickas en el menú en el icono de Autofirma se queda un rato rascando y se cierra. Así que instalar Autofirma:

$ sudo apt install openjdk-11-jre

Y ya esta debería funcionar:

Eliges Continuar DNIe y pruebas a firmar cualquier PDF.

Y esta.

Spectrum: ¿Por qué RANDOMIZE USR para cargar código máquina? (parte 4)

Realmente el típico:

10 RANDOMIZE USR 666

Es un hack similar al usar la cucaracha en una play1 o el boot cd del reno rudolf de Dreamcast. Porque el Basic de los Spectrum no tenían una instrucción especifica para cambiar de lenguaje o ejecutar código maquina.

Pero lo curioso de el RANDOMIZE USR o el cargador en Basic inicial que tenía esta instrucción. Es que se usaba en todos los juegos comerciales (compilados/escritos en binario o código máquina).

¿Y por qué RANDOMIZE USR? Pues en las news de spectrum (jo que viejo me siento) alguien lo pregunto hace casi veinte años.

La respuesta corta es que es la manera menos peligrosa de ejecutar código maquina porque no cambia registros de CPU ni de memoria.

Y la respuesta larga, es lo mismo pero explicando que RANDOMIZE es la instrucción para iniciar el generador de números aleatorios de los spectrum. Y espera un número que viene en USR pos_mem es la forma de llamar al código maquina en esa posición. El RANDOMIZE espera que algún día le devuelva algún número pero nunca ocurre.

¿Y por qué no se usa directamente USR pos_mem? Pues la respuesta es simple, porque no se puede en el Basic del Spectrum y hay que engañarlo usando otro comando que podría hasta ser PRINT .

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:

https://fediverse.tv/w/bFMPTi7PdFbuCF45bMaYKJ

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 / y la herramienta de código abierto (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 #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 de la mítica radio online https://rainwave.cc/chiptune.

Pues gracias a , a jq y #watch en / 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 usa #Django con tiene un #API bastante sencillo, le pido un 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 , 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)
  4. Spectrum: ¿Por qué RANDOMIZE USR para cargar código máquina? (parte 4)

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