Archivo de la categoría: Tecnología

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.

Un touch pero que también me cree todo el path

Es de esas cosas tontas que haces con dos comandos primero un:

$ mkdir -p <path>

Y después un:

$ touch <fichero>

Pero se puede hacer del tirón como:

$ install -D /dev/null /home/md/.config/nvim/init.vim

Donde -D es para hacer que cree todo el path. Y el /dev/null para que copie el fichero mágico de los Unix y los GNU/Linux de tamaño 0.

Lo encontré buscando como crear el init.vim para neovim de un tirón en: mkdir -p for files

Neovim pre 0.5 LSP o como mandar a tomar por culo a los cabrones de JetBrains

Me gustaría decirlo para Vim fue mi primer amor, no acabamos de entendernos pero nos queríamos mucho, paso el tiempo y nos separamos, pero me quise en serio y después descubrí NVim o NeoVim y en ese estoy…de casualidad coincidió con la famosa versión 0.5 …pero claro como buen usuario perro viejo, no voy navegando la cresta de la ola porque no me gusta darme la hostia y por ejemplo en Debian Testing la versión de neovim es:

$ apt list neovim
Listing... Done
neovim/testing 0.4.4-1 amd64

Y con eso me remangue las manos y  a base de muchos cabezazos le metí soporte de LSP.

«¿Pero…qué es LSP Miguel?»

LSP con mucha mucha desgracia es un puto invento de Micro$oft, aunque no lo parece, pero porque funciona bien, y es un protocolo basado en JSON RPC en plan anillo único, porque intenta estar entre medias de los editores y los «programas que ayudan a programar».

Normalmente los IDE son monolíticos y vienen todo metido, y este invento separa el IDE por un lado, entre medias el LSP y por el otro el servidor de lenguaje. Y esto ayuda a que se puedan hacer potentes servidores de lenguaje (como la gente de Rust) y no hacer un invento para cada IDE. Es muy disruptivo porque ya no sería necesario usar IDE piticlin para programar en algún lenguaje asqueroso de esos que es verboso y con mas capas de de lasaña..porque la gente hace las cosas tan difíciles adrede….

Por cierto hablando de IDEs, hay mucho desgraciado (he conocido mucho con portátil de manzanita) que no sabe mergear un branch de git a mano sin un IDE de jetbrains, y es una pena que gente así sea tan dependiente de la magia de un IDE y lo peor que sean tan arrogantes cuando no son nadie sin la magia que no viene de sus propias manos.

«¿Pero…cómo Miguel?»

  • Instalar nvim por ejemplo:
    $ sudo apt install neovim
  • Instalar un gestor de paquetes para vim/neovim (si hijo si, hasta los platanos van a tener gestores de paquetes…bueno en este caso es útil), hay varios famosos, yo elegí vim-plug (no recuerdo porque) pero en la sección de Install vim-plug neovim tienes la linea de código de curl para instalarlo, que básicamente es ponerlo en los scripts autoload de neovim.
  • Editar el fichero init.vim, ojo que no esta de creado por defecto puedes probar su existencia con el comando :checkhealth  …una vez que tengas el fichero de configuración de neovim, añadir los siguientes plugins en el bloque de plugins de plug, te quedará mas o menos que así:
    "PLUGINS
    call plug#begin()
    <otros_plugins_tuyos>
    Plug 'autozimu/LanguageClient-neovim', {
    \ 'branch': 'next',
    \ 'do': 'bash install.sh',
    \ }
    Plug 'ncm2/ncm2'
    Plug 'roxma/nvim-yarp'
    <otros_plugins_de_tu_perro>
    call plug#end()
  • Explicación de los plugins:
    • autozimu/LanguageClient-neovim: es el plugin (escrito en Rust) que te da soporte para LSP para versiones pre 0.5 de neovim, creo que hay mas plugins…no recuerdo porque riguroso estudio elegí este plugin frente a otros, creo que porque era el mas optimizado (había otro en python y la gente se quejaba de que comia mucha memoria e iba muy lento, pero este al ser rust…).
    • ncm2/ncm2: este plugin complementa al anterior porque aunque ya tienes LSP solo con el anterior…oye un poco de ayuda visual con popups y mensajes en colorines ayuda mucho, este te lo da.
    • roxma/nvim-yarp: plugin  necesario para ncm2, le da soporte para que el otro haga llamadas remotas.
  • Una vez añadidos, y recargada la configuración (ahora no recuerdo el comando) o reiniciado el neovim, los instalas con:
    :PlugInstall
  • Y ahora te falta ir instalando los servidores de lenguaje, uno a uno, cada uno tiene su forma, te pongo un par, puedes encontrar una lista de lenguajes y proyectos de servidor de lenguajes en https://langserver.org/ pero te pongo los mios:
  • Y después los configure en el init.vim así:
    let g:LanguageClient_serverCommands = {
    \ 'python': ['/usr/local/bin/pylsp'],
    \ 'rust': ['rls'],
    \ 'javascript': ['typescript-language-server', '--stdio'],
    \ 'typescript': ['typescript-language-server', '--stdio'],
    \ 'javascript.jsx': ['typescript-language-server', '--stdio'],
    \ 'typescript.tsx': ['typescript-language-server', '--stdio'],
    \ }
  • También añadí las lineas estas de configuración necesarias para mejorar el funcionamiento de ncm2:» enable ncm2 for all buffers
    autocmd BufEnter * call ncm2#enable_for_buffer()
    » enter inserts newline when completion window is open
    inoremap <expr> <CR> (pumvisible() ? «\<c-y>\<cr>» : «\<CR>»)

    » tab completion
    inoremap <expr> <Tab> pumvisible() ? «\<C-n>» : «\<Tab>»
    inoremap <expr> <S-Tab> pumvisible() ? «\<C-p>» : «\<S-Tab>»

    » IMPORTANT: :help Ncm2PopupOpen for more information
    set completeopt=noinsert,menuone,noselect

  •  Y ya esta.

Tienes funcionalidades iguales a los asquerosos IDEs de JetBrains ocupando megas de memoría frente a Gigas de memoria y kilos de falsedad e hipocresía porque son de los mejores ejemplos de droga a la puerta del colegio porque van del rollo open source cuando su core es privativo y asqueroso para enganchar a los desprevinidos infantes a la siguiente dosis de su droga.

Nota final: Puede que este mintutorial te valga para vim pero no lo he probado. Para 0.5 nvim, ya trae soporte, pero todavía no he tenido el momento de ponerme a probarlo. Y como siempre agradecer a Victorhck por sus tutoriales de vim/neovim que tanto me han ayudado.

Probando los temas de plantuml con un par de lineas de bash

Seguro que se puede hacer mejor, pero bueno me ha funcionado.

No sabia que PlantUML ahora han metido un themes. Y para probarlos he tirado 4 lineas en bash y parece que ha salido.

Me he creado este fichero en /tmp/caca.puml :

@startuml
!theme spacelab

skinparam backgroundColor #7f7f7f

Pepito <- DonJose : Hola Don Pepito
Pepito -> DonJose : Hola Don Jose
Pepito <- DonJose : ¿Paso ayer por mi casa?
Pepito -> DonJose : Por su casa yo pasé
@enduml

Esta puesto adrede después de !theme spacelab el skinparam para poner en gris el fondo para machacar la configuración del theme.

Y después creo un directorio /tmp/resultados/ .

Y finalmente otro fichero donde saco los themes disponibles en plantuml /tmp/list_themes.puml :

@startuml
help themes
@enduml

Y convierto ese help a un txt (que es en plan asciiart):

java -jar plantuml.jar /tmp/list_themes.puml -ttxt

Y el churro en una linea:

line=$(cat /tmp/list_themes.atxt | tr -d " " | grep -Ev "^$" | grep "Thepossiblethemesare:" -n | cut -d: -f1); for theme in $(cat /tmp/list_themes.atxt | tr -d " " | grep -Ev "^$" | tail +$(( $line + 1 ))); do echo "$theme"; cat /tmp/caca.puml | sed -e "s/spacelab/$theme/" | java -jar plantuml.jar -pipe -tpng > /tmp/resultados/caca.$theme.png ; done

Y la explicación:

  • $line se saca de hacerle un cat al fichero de la lista de themes como asciiart, quitarle todos los espacios en blanco (porque por suerte todos los themes son sin espacios en blanco), con grep inverso ( -v) y regex (con -E) quito las lineas en blanco. Y de esto lo pipeo para sacar el número linea de donde empieza los themes buscando la frase apiñada (sin espacios en blanco) «Thepossiblethemesare» y le saco el campo con cut.
  • Después  tiro un bucle for del cual chupo de (suerte otra vez que no tiene espacios en blanco porque si no tendría que tirar de IFS) casi completa la anterior churro para sacar $line, salvo el grep final que lo cambio por un tail para sacar a partir de la linea N.
    • Y en cada iteración tengo el $theme que le hago una sustitución en vivo al fichero de template de hola don pepito y voy creando fichero a fichero de cada theme finalizando el nombre con .theme.png .

Y subo un puñado de ficheros generados:

Volviendo a intentar aprender bien bien Vim

Es de esas cosas recurrentes que me vienen para sentirme realizado, programar en ensamblador en Z80, aprender a usar bien bien Vim.

Y en eso vuelvo, a ver yo creo que ya cualquier hijo de vecino sabe el :q! , :w , :wq , el rollo de buscar con / y n y shift+n. Y ya para coronar el famoso :set number y :set nonumber. Lo que no trago es el tema de usar h j k l para moverme pero bueno. Pero me pierdo cuando me aparecen varios paneles en la pantalla al final tiro de :q

Y claro pues si te apañas y tal, pero después vas a un editor de código come ram y peor privativo, o vas a algo mas liviano como mi querido Geany y dices como hago el autocompletado de estos como poco primero. Pues a ver ya esta ya te sientes inútil con Vim.

Pero es que he visto gente (me gustaría poner el nombre pero tendría que preguntarle) muy buena usando el Vim como verdadero y único editor, y flipás sin gastar RAM y CPU a lo tonto (y si me apuras sin gastar píxeles de pantalla a lo tonto) y sin dar paseos al ratón por la mesa, sin levantar las manos del teclado.

¿Y que hacemos con neovim? Pues de momento me esta llamando mucho la atención, el tema asíncrono y que le da un poco de vida al Vim.

Me falta entender y encontrar un buen gestor de paquetes y saber cuales son «los paquetes» estándar…si el rollito este que se sufre estos años con NPM o Pip, mucho nos reíamos de las guerras de editores de texto, pero al menos no era una peli de chinos donde salen un motón a la vez se pegan rápido rápido y no sabes a que caballo ganador apostar tu tiempo en aprenderlo. Por cierto no hay un único gestor de paquetes, ya el retorticimiento de lo torcido…pero bueno ahí esta Python con los miles de inventos…o js con npm y yarn.

Así que en esa estamos, y gracias a victorhck que esta haciendo mucha labor educativa y desde aquí se lo agradezco (aunque cuando lo conocí físicamente en las jornadas hacker de la EKO estuve un poco apagado…lo siento) y os pego links de su labor:

Después he encontrado cosas como:

  • VimAwesome: un listado de los paquetes de vim (no se si estarán todos pero eso parece) con un buscador y una ficha muy visual y estética.
  • Neovim en la wiki de archlinux: nunca he usado esa distribución pero todos amamos su documentación que nos ha sacado de muchos problemas.

Y de el señor Santos Gallegos el cual no tengo el placer de conocerle y que creo que será difícil porque esta del otro lado del charco:

Después la persona que no puedo nombrar (respeto su privacidad) me mando hablando de este tema estos días un dotfile (es curioso, la gente comparte su fichero de configuración orgullosamente por internet) que supuestamente es el principio y el fin de todo lo que necesitarías, os lo pego pero yo voy en plan rollo minimalista y poco a poco ir metiendo cosas en la configuración y entendiendo porque, pero bueno lo pongo el link The Ultimate vimrc .

Perdón añado uno que se me olvido: awesome-neovim.

Actualización:

Se me olvido también los tutoriales de Santiago Romero que leí hace años y que siguen online: