Archivo de la categoría: Tecnología

Otra página que hace gráficas (muy chulas) de popularidad de proyectos en github

Seguro que habéis visto algún video animado de la popularidad de navegadores, consolas y tal que han salido este último año mas o menos en youtube, bueno pego el de navegadores:

Pues han hecho mas o menos lo mismo con tipos de proyectos (no se si usan las etiquetas o los categorizan basándose en sus huevos morenos en bata) en github, no es tan épico como el vídeo, ni tiene musiquilla pero lo bueno es que tarda menos es «de nuestras cosas frikis» y lo mejor que en teoría son datos reales.

Open Source Database – Monthly Ranking

Y no solo eso, tiene una gráfica interactiva muy muy visual (es que de un golpe ves todos los datos) de la posición de cada proyecto en relación a número de estrellas, por ejemplo os pego una captura de Engines de Videojuegos, donde Godot lleva 3 años siendo la 1º posición.

Por cierto, el resto del página es pura delicia de datos e informes, os recomiendo dar un paseo.

Curiosa página que da gráficas de las estrellitas de github

GitHub Star History es una curiosa página que da una funcionalidad que creo que no tiene github, algo tan simple como una gráfica de como van creciendo las estrellitas en tu proyecto.

Que van creciendo, porque salvo ataques de rabia, la vagancia de la gente hace que no disminuya las estrellas, poca gente entramos a los proyectos para des-estrellarlos…he estado buscando en varios proyectos y las gráficas que salen son las típicas que les excitan a los neoliberales mas que unas rayas de coca sobre el culo de una puta cara, siempre hacia arriba.

Pero bueno aunque falte saber si siguen siendo favoritos y no un acumulado de estrellitas cual bote de purpurina del chino, me parece interesante analizar los siguientes proyectos.

Cataclysm DDA: que decir de este gran juego de roguelike postapocaliptico de mundo abierto.

Se ve un poco influencia de la salida de la versión 0.D Danny en 2019 que hace que la gráfica pegue un subidón.

Mindustry : otro gran juegazo que por los tomates he hablado varias veces de el.

Se ve que con la versión mas o menos estable y moderna del juego que fue la 0.6 en 2020 empezó a ser conocido y a subir como la espuma las estrellitas.

Godot: otro que tal, el mejor engine software libre de videojuegos que hay ahora mismo, y que le mete mucho mucho miedo a los engines privativos. Este se ve curioso

Se ve muy bien que entorno a 2018 cuando salio la versión 3 empezó a coger popularidad y ahí sigue creciendo.

¡¡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[@]}"

Conferencia EsLibre 2020: Jesús García García «Comunicar el impacto social de la industria del software libre».

Estoy escuchando las conferencias del EsLibre 2020 (si, lo estoy haciendo en 2022 pero bueno) que el congreso de EsLibre es directo heredero de las viejas jornadas de Hispalinux.

Son todas espectaculares pero de momento recomiendo la de: Jesús García García «Comunicar el impacto social de la industria del software libre».

Que me ha encantado porque habla de los problemas que nos trae el capitalismo al software libre, mola porque deja unos chascarrillos muy interesantes mientras habla sin caer la trampa del kalimotxo, vamos que le podría escupir a la cara esta conferencia al puto de Amancio Ortega (o a su hija…que por meritocracia va ser la jefa ahora) y no poder rechistare nada ni que le ha hablado mal ni que le ha insultado.

Gracias a la gente del fediverse.tv por ofrecer esta manera de compartir videos, compartiendo los vídeos (si da la casualidad de que hay varias personas viendolo por websockets y P2P).

Video muy divulgativo de «Con una raspberry y un pedal mi coche del GTA va a pedales»

Me han pasado este vídeo por un chat grupal en telegram, y lo iba a ver con asco pensando ya veras que tontada…pero no, es muy muy bueno y divulgativo. Y encima otro youtuber que no es un chillón y habla tranquilamente.

La pena que no es para algún videojuego libre…pero bueno…

Al rico hardware libre, una versión hipervitaminada del Power Glove

Hacia mucho que no me encontraba con un «proyecto maker» que me sorprendiera…porque últimamente el tema del cacharreo parece un hobby de warhammer o magic u otro modelo consumista friki…donde la única forma de hacer cacharros es comprar y comprar y comprar y después pegarlos con cinta de carrocero. Hace muchos años hice un articulo para los compas del proyecto colaborativo el binario con el nombre de Soy ateo Friki.

Pero buceando en los vídeos de la gente de Fediverse.tv he encontrado de un nodo federado (es lo que mola de las redes no centralizadas) un proyecto muy chulo tanto el software libre que mueve todo esto como el proyecto de los compas de fediverse…como el proyecto de hardware libre que os pongo el vídeo:

Así lo de pronto, lo que mas destaco…es primero los electrodos secos «caseros», si hijo si….yo también ando dándole vueltas al VR o a la AR, a los interfaces cerebro-maquina….y por eso conozco un poquito el mundo de las conexiones no invasivas y sin vaselina (en serio que hay unos húmedos que van con eso…no hablo de conexiones por el puerto de atrás) para que el ordenador te comprenda como una novia enamorada esos primeros meses de romance. Y lo siguiente que destaco es que la gente común esta aplicando ya las redes neuronales para hacer rápido y sencillo el trabajo de limpiar de ruido una señal. Finalmente lo mas destacable es que el vídeo es muy divulgativo (es que te enteras de como va el tinglado) aunque no tenga una voz en off…es como el de primitive technologies pero a lo cyberpunk.

Mis dudas es saber si los electrodos se ponen en una posición distinta del brazo, vamos se te mueven unos centímetros…es saber si la red neuronal entrenada sigue sacando mas o menos el impulso nervioso. Y si…el lag…que yo he sufrido un mando bluetooth para móvil con un emulador de gameboy y se nota el paso del tiempo.

Por cierto si has llegado a estas lineas y te preguntas ¿Qué coño es un power glove (link a la wikipedia inglesa)? Fue un mando de videojuegos que saco Mattel para la Nintendo de 8 bits justo en los 90 que detectaba cual WiiMote (si otro mando de Nintendo) la inclinaciones de la mano y como de doblados tenias los dedos (era curioso el mecanismo porque los artículos describen que era por fibras «opticas» y como perdían luz al doblarse). Es un invento muy muy curioso e iconico, que se comió un mojón….como casi todo lo revolucionario en tecnología…yo nunca lo vi en vivo…soñaba con el por el rollo VR (que los jóvenes flipamos con la pantalla táctil de los coches de Parque Jurásico) como el hexágono de Megadrive. Y poco mas que decir del powerglove mas que salio (con unos colores chillones y también salio un Arduino) en series de dibujos como Capitan N o en la pelí de serie B (serie B, te lo repito hipster de mierda que a todo lo que no es hollywood lo llamas Cine Indie…) Turbokid:

 

 

xj: herramienta para traducir html (no muy pocho) a json

De casualidad en algún portal de estos de noticias (no se si newsycombinator u otro) he encontrado el proyecto xj que convierte cualquier html a json.

Me parece muy útil cuando lo conjugas con jq para parsear el html y sacarle algún dato sin tener que tirar de xpath o inventos similares.

Aunque en el este awesomelist en github listan muchas alternativas: https://github.com/dbohdan/structured-text-tools

Después de instalado es bastante sencillo de usar:

$ echo "<html><head><title>prueba 1</title></head><body style='background: red;'><h1>TITULO</h1><p>aaa <b>bbb</b> ccc</p><p>ddd</p></body></html>" | xj | jq '.html[] | select(.body) | .[] | .[] | select(.h1) | .[] | .[0]' -r

TITULO

Entrevista a Pablo Ruiz de Kaleidos (empresa del software libre Penpot y Taiga)

Hace muchos años cierto personaje que por desgracia nunca el karma se la devolverá pero ojala, malas personas disfrazadas de corderos.

Me soltó una mentira de esta empresa, lo curioso es que las mentiras (que no voy a reproducir porque las mentiras la mejor forma de matarlas es no volverlas a decir), lo triste de el, es que esas mentiras eran sus propias mentiras sobre el que el construyo el infierno en la tierra.

Bueno dejando a ese cabrón (si porque no decir la palabra cuando se la gano con todas las letras), volviendo a la empresa de Kaleidos esta y sus proyectos, le han entrevistado sobre Penpot.

Muy, muy interesante entrevista que explica la empresa y sus proyectos:

Video que hace un análisis de Blender en 2021 por parte de un profesional del cine

He encontrado en las sugerencias el siguiente video:

Me ha gustado pese al rollito te susurro al oído cariñosamente del autor cual locutor de programa de radio, pero realmente prefiero que me susurren al oído que el típico video adrenalinico anfetaminico de un youtuber dando voces.

Expone sus vivencias cuando en el estudio que trabajaba decidieron pasarse a Blender, hace un análisis de las cosas malas y buenas de Blender.

Aun recuerdo la primera vez que usamos Blender en un win98, era feo como pegar a un padre pero ahí estaba el futuro…tengo que buscar el CD que seguro que lo tengo en algún sitio con la revista viejuna.

Odio Postman: Alternativas en software libre (de verdad) al asqueroso Postman

¿Por qué odio Postman?

  • Porque no es software libre de verdad. Nada mas abrirlo te pide registrate en su servicio online, si no viene capado de serie. Hay otros proyectos de software libre como NextCloud que te dan la alternativa de usar «su nube» o no, pero estos no, son rollo JetBrains de repartir droga a la puerta del colegio en busca de nuevos jonkis.
  •  Bloadware, ya sabéis y no lo sabéis ahora os lo digo, soy fan de la filosofía kiss y suckless. Y el puñetero Postman es un bicho de casi 200 mb (porque tiene Electron dentro) para un interfaz incomible.
  • No es fácil de usar. ¿Cómo se hace para meter un JWT de forma fácil y automática? Supongo que tendrá algo parecido a pipelines pero no lo he encontrado. Y lo peor, te obliga (porque es Electron) a usar javascript si quieres scriptarlo.

Alternativas CLI a Postman

Dicho esto, que soluciones tenemos para jugar con API RESTFul y cositas en swagger en GNU/Linux. Ya sabéis, es lo que toca cuando eres fullstack engineer o un doctor brown.

OJO aviso (para evitar sustos): La lista de alternativas son CLI por que, digan lo que digan con un –help y autocompletado (usa tu amiga la tecla tabulador) cualquier herramienta CLI le da mil vueltas en facilidad a cualquier herramienta de botoncitos y dando vueltas con el ratoncito, además menos es mas, y cuanto menos CPU, RAM y disco duro te consuma la herramiento mejor.

  • Curl : el viejo y confiable curl te saca de un aprieto como netcat  o telnet sin pedirte nada a cambio, es que son un primor.
    • (ventaja/pro) viene en todas las distribuciones de GNU/Linux de base sin instalar nada y en casi todos los lenguajes de script python, etc. Entonces es un estándar.
    • (desventaja/contra) es un caos los parámetros…aunque cuando te haces un par de snippets o recetas con los que mas usas, vives feliz…el problema cuando quieres hacer algo raro. Truco: Firefox o Chromium si no conoces el panel de depuración web…ya estas tardando, porque en la pestaña de «network» puedes ver las llamadas al API y copiar/guardar «as Curl».
  • HTTPie : Le tengo mucho cariño a esta herramienta porque con cuatro lineas de bash puedes hacer cualquier cosa contra un API.
    • (ventaja/pro) es muy muy fácil de usar, la descripción del proyecto es «CLI, cURL-like tool for humans».
    • (desventaja/contra) bueno para algunos es que «es python» pero bueno estreñidos hay por el mundo además en Debian hay paquete httpie y si hay paquete en Debian es un estándar y punto.
  • HTTP Prompt: Es un subproyecto de la gente de HTTPie, la pena es no le dan muchos mimos a este proyecto y tiene fallos, pero es super curioso como plantea el API como si fuera un árbol de directorios.
    • (ventaja/pro) es muy fácil de usar y puede comerse el «spec» del API para autogenerar el CLI.
    • (desventaja/contra) esta un pelín verde y tiene fallos.

Como usar HTTPie

Primero hay que instalarlo, puedes o desde pip :

$ sudo pip3 install -U httpie

O desde (si es Debian o alguna derivada como Ubuntu o Linux Mint):

$ sudo apt install httpie

Hay un plugin muy interesante para soportar jwt que mas o menos es un estándar de login y mantenter sesión para comunicarse con APIs aunque hay plugins para mas estándares como Oauth2 y así. Para instalarlo, este si es necesario de momento pip porque no esta empaquetado en Debian:

$ sudo pip3 install -U httpie-jwt-auth

Aunque en algún ejemplo siguiente te enseñare que casi no es necesario mas que para ahorrase unas lineas en bash.

Por cierto la combinación httpie + jq es mucho mejor que el melón con jamón. Si no conoces jq ya estas tardando porque es el como un grep hipervitaminado de los json.

la sintaxis de httpie es:

http <verbo POST|PUT|GET> <url_endpoint> <parámetros header|get|post> <opciones_httpie>

Ejemplos con HTTPie

Usando como base publicapis.org que es un proyecto muy interesante que guarda y lista APIs públicas de muchos tipos.

Vamos a poner un par de ejemplos reales:

Sacar las categorías de publicapis

Tan simple como lanzarle un get a la enpoint de categorías

$ http get https://api.publicapis.org/categories
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Length: 716
Content-Type: application/json
Date: Sun, 17 Oct 2021 21:22:49 GMT
Server: Caddy
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 10.00
X-Rate-Limit-Request-Forwarded-For: 89.219.91.239
X-Rate-Limit-Request-Remote-Addr: 172.17.0.1:49224

[
    "Animals",
    "Anime",
    "Anti-Malware",
    "Art & Design",
    "Authentication",
    "Blockchain",
    "Books",
    "Business",
    "Calendar",
    "Cloud Storage & File Sharing",
    "Continuous Integration",
    "Cryptocurrency",
    "Currency Exchange",
    "Data Validation",
    "Development",
    "Dictionaries",
    "Documents & Productivity",
    "Entertainment",
    "Environment",
    "Events",
    "Finance",
    "Food & Drink",
    "Games & Comics",
    "Geocoding",
    "Government",
    "Health",
    "Jobs",
    "Machine Learning",
    "Music",
    "News",
    "Open Data",
    "Open Source Projects",
    "Patent",
    "Personality",
    "Phone",
    "Photography",
    "Science & Math",
    "Security",
    "Shopping",
    "Social",
    "Sports & Fitness",
    "Test Data",
    "Text Analysis",
    "Tracking",
    "Transportation",
    "URL Shorteners",
    "Vehicle",
    "Video",
    "Weather"
]

Y por ejemplo usando jq para sacar la lista de API relacionados con la música los parámetros get se ponen como == :

$ http https://api.publicapis.org/entries category=="Music" | jq ".count"
31

Guardar el json de los API relacionados con la música

$ http https://api.publicapis.org/entries category=="Music" > /tmp/music.json

Y revisando el listado me fije que teniamos a mi querido jamendo pero también se puede filtrar con ayuda de jq la entrada de este proyecto de música libre:

$ http https://api.publicapis.org/entries category=="Music" | jq '.entries | .[] | select(.API=="Jamendo")'

Y para hacer un post de un formulario los parámetros se separan con = , la gente de httpie tiene un api simple para hacer pruebas:

$ http --form POST pie.dev/post name='John Smith'
HTTP/1.1 200 OK
CF-Cache-Status: DYNAMIC
CF-RAY: 69fd13e64d786611-MAD
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
Date: Sun, 17 Oct 2021 22:49:01 GMT
NEL: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
Report-To: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=FhO29LNgr1Dn0bY%2FDOESxrq5o%2BR5tePJpkCOElIS0asl4hDNC6uhN%2F8EYa4NU37kSUEqfMrHvKt6OMJh4s4rZ4BCSPQawxVVpT%2FQ0Q1KJAfq%2FcIG0yn01Zop"}],"group":"cf-nel","max_age":604800}
Server: cloudflare
Transfer-Encoding: chunked
access-control-allow-credentials: true
access-control-allow-origin: *
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400, h3-28=":443"; ma=86400, h3-27=":443"; ma=86400

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "name": "John Smith"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip",
        "Cdn-Loop": "cloudflare",
        "Cf-Connecting-Ip": "87.219.94.239",
        "Cf-Ipcountry": "ES",
        "Cf-Ray": "69fd13e64d786611-FRA",
        "Cf-Visitor": "{\"scheme\":\"http\"}",
        "Connection": "Keep-Alive",
        "Content-Length": "15",
        "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
        "Host": "pie.dev",
        "User-Agent": "HTTPie/2.6.0"
    },
    "json": null,
    "origin": "87.219.94.239",
    "url": "http://pie.dev/post"
}

Hacer un post de un json a un API, yo lo hago en dos partes para trabajar tranquilamente en el terminal:

$ json="{\"name\": \"pepito\", \"description\": \"El pinocho.\", \"color\": \"shitbrown\"}"
$ echo "$json" | http POST http://127.0.0.1:8080/api/v1/prueba

Y subir un fichero es tan simple (en comparación con curl) como, donde fichero es nombre del parámetro de fichero:

$ http POST "http://127.0.0.1:8080/api/v1/uploads/" fichero@"file.png"

Si necesitas cookies o guardar algún tipo de sesión, lo puedes hacer como por ejemplo:

$ http --session=/tmp/caca.json POST http://127.0.0.1:8080/api/v1/auth

Y después el típico jwt lo puedes hacer a mano con por ejemplo:

user="usuario"
password="mi voz es mi pasaporte, verifícame"

$ passhash=$(echo -n "$password" | sha256sum | cut -d" " -f1)
$ jwt=$(echo "{ \"username\": \"$user\", \"password\": \"$passhash\" }" | http POST http://127.0.0.1:8080/api/v1/auth | jq .token -r)

En este ejemplo ya con ayuda de jq he metido en la variable $jwt el token para usarlo por ejemplo en las siguientes llamadas:

$ http GET http://127.0.0.1:8080/api/v1/caballos Authorization:"Bearer $jwt"

El parámetro Authorization es un parametro del header que le mandamos, httpie lo detecta por el : .

Y ahí le metemos tal cual dice el estandár de jwt el token de autorización.

Pero también se puede hacer con el plúgin httpie-jwt-auth mas sencillo y con menos lineas:

$ http GET http://127.0.0.1:8080/api/v1/caballos --auth-type=jwt --auth="$jwt"

O metiendo la variable como variable de entorno

$ export JWT_AUTH_TOKEN=$jwt
$ http GET http://127.0.0.1:8080/api/v1/caballos --auth-type=jwt

Y los script en bash es que son tan legibles con httpie, porque empiezas con un login y después con la ristra de acciones que tienes que ir haciendo.