Domesticando SQLite

Le tengo cariño a SQLite aunque no pase mucho con el, ni siquiera los findes vamos al parque a echar pan duro a los patos. Eso de tener una base de datos embebida en cualquier programa que piques o una base de datos tirando de un fichero y un cli es mágico en esta época de microservicios y apis y miles de capas.

Me recuerda también a Lua otro invento que también le tengo cariño pero menos tiempo paso con el, porque este es un lenguaje de programación para añadirlo a tus proyectos y tener un punto abierto para que la gente extienda y haga locuras con tu proyecto en forma de extensiones, plugins, mods…desde un entorno mas o menos seguro.

Pues parece que se ha vuelto a poner de moda SQLite, pero los tutoriales que he encontrado por ahí…y no quiero señalar a nadie, hablan de como instalarlo y lo bonito que es y tal.

Pero nadie habla de lo malo de SQLite, algo que descubres cuando pasas tiempo con el…y es que parece pregunta típica y tópica de entrevista de trabajo, «Del lenguaje PliPli….dime que cosas te gustan y que cosas no te gustan.».

Y una cosa que nadie trata es que SQLite es muy espartano en relación a un PostgreSQL o un MariaDB (MySQL como Belalugosi is dead), como simil o metafora, es como pasar de un Python o un lenguaje de muy alto nivel a ensamblador.

Ya que estamos hablando de Bela Lugosi is Dead, la mejor adaptación del tema original (salvo que Marilyn Manson haga una y sea decente porque últimamente el chico anda de capa baja) de Opera IX:

SQLite no trae chequeo de tipos de columnas

 

Puedes meter un entero en una columna de texto y al revés y se queda tan pancho el SQLite y no es un bug, aquí tenéis la explicación.: SQLite lets me insert a string into a database column of type integer!

Pero se puede arreglar con:

create table test (
   id integer check(typeof(id) = 'integer'),
   name "text" check(typeof("text") = 'text')
);

Y aquí, se acaba la lista de cosas….porque iba a hablar de las foreing keys, pero mira que soy perro viejo que recuerdo que hace unos años no tenía y he mirado se introdujeron en el 2009, espero que mi memoria no me falle y es porque no estaba esa versión en las distros hasta mas tarde.

Y por cierto otra cosa que me encanta de SQLite que cuando hace poco años, los SJW y demás calaña (pero en serio que calaña de gente, no hace nada mas que intoxicar los colectivos en vez de ayudar y si quiere poner su granito de arena de su ideología) se pusieron serios con mierdas de códigos de conducta, el creador D. Richard Hipp en vez de bajarse los pantalones, pues dijo «queréis código conducta, pues toma código conducta» y adopto para el proyecto las reglas de los templarios del siglo VI.

MAN, se que lo odias. Hay alternativas al man

Las páginas manual de Unix (claro esta GNU/Linux también), son oscas y duras, ayudan pero son como el viejo sabio profesor de artes marciales vas a maldecirlo pero al final vas ha seguir el camino de kungfu y transcender y luchar como Neo en Matrix sin ni siquiera mirar al contrincante.

Historias de abuelo cebolleta digital

Como siempre queridos niños acercaros aquí a la chimenea junto al abuelo cebolleta, que os voy a contar un cuento. En mis tiempos cuando era un niño pequeño e intentaba hacer mis cosillas en un ZX Spectrum +2A (con 128Kb de RAM y se podía hacer de todo), pues en aquellos tiempos sin internet ni nada, solo tenías:

  • el manual del ordenador, que en aquellos tiempos te daban en papel un manual del ordenador, y era un tocho de manual de 100 y pico páginas. Era en blanco y negro y plagado de textos, pero oye te explicaba como programar en Basic. Era bastante espartano. Y al final del libro un par de listados en Basic de juegos o programas de contabilidad.
  • bibliotecas de barrio, donde no se porque…pero tenían en mi caso libros de programación para niños. De vez en cuando me pregunto quién pensó en comprar libros de programación para niños en una biblioteca de barrio obrero del extrarradio. Era una biblioteca que pertenecía a la obra social de Caja Salamanca y Soria (obra social que era obligada por ley). Aun recuerdo el pasillo oscuro con estanterías a los lados y los libros de programación para niños en un rinconcito, y como niños no había internet, solo sabías que había mas libros de una colección por la contra portada, e incluso descubrías que había otros ordenadores ademas de nuestro querido Spectrum y el amigo raro del Amstrad (porque reconozcamoslo en aquella época fue el Spectrum en España), había ordenadores como C64, el Dragon 64. Y aprendías a base de escribir listados de código en basic y audazmente cambiar cosas y ver que pasaba.

Cómo usar el man

Antes de ver alternativas al MAN, vamos a ver como usar MAN por si acaso ayuda. Recordar que el Man no necesita internet para nada, puedes estar después de una guerra nuclear, encerrado en un bunker soviético sobreviviendo al invierno nuclear y si tenéis un ordenador con GNU/Linux y tenéis que buscar como hackear un t1000 si podréis….con un Atari Porfolio…

Para ver el Man de un commando en GNU/Linux:

$ man <comando>

Las ayudas o mejor dicho páginas de man tienen el siguiente formato o estructura (hay raras excepciones):

  • Nombre: nombre y descripción corta.
  • Sinopsis: ejemplos muy cortos de como se usa.
  • Descripción: descripción de como se usa, mas o menos larga.
  • Opciones: lista de parámetros posibles.
  • Copyright: quien hizo en comando, licencia y tal.
  • Errores: sección que describe errores conocidos o como reportar errores.
  • Véase también: lista otros comandos parecidos o relacionados.
  • Notas: sección de notas.

Para moverse y usar el Man (es parecido a Vi/Vim)

  • con la flecha arriba y flecha abajo, hacer scroll por el texto.
  • AvPág y RePág para desplazarte como bloques de páginas.
  • G para ir al final del archivo (páginas se llaman) Man.
  • g para ir al principio del página Man.
  • q para salir del man.
  • / para entrar en modo busqueda, entonces abajo te aparece una barra donde escribir lo que buscas.
  • n para buscar el siguiente
  • N para buscar el anterior
  • q para salir del modo buscar

Si no te apañas en la terminal…golpe de remo…bueno siempre es duro esa pantalla de fondo negro y letras blancas, pues tienes unos ruedines para el man que es verlos en navegador con:

$ sudo apt-get install groff

Y después con:

$ man -H <comando>

Si se queja de que no encuentra navegador puedes forzarlo con:

$ man --html=<navegador> <comando>

¿Qué son esos números en plan chmod(2) que salén en las páginas man algunas veces?

Pues son otras páginas sobre un comando (si se usa por ejemplo en C):
Sección – Descripción

  1. Comandos Generales
  2. Llamadas al sistema
  3. Biblioteca C de funciones
  4. Ficheros especiales (normalmente dispositivos, que se pueden encontrar en /dev) y drivers
  5. Formatos de fichero y convenciones
  6. Juegos y salvapantallas
  7. Miscelánea
  8. Comandos de administración del sistema y Demonios

Y para abrir por ejemplo chmod(2) es:

$ man 2 chmod

Y finalmente para buscar entre todas la páginas man que hay instaladas, un texto en especial es:

$ man -wK <texto buscar>

Te devuelve una lista de ficheros que cada linea es:

<path_man>/man<num_página>/<nombre_página>.<num_página>.gz

Por ejemplo para:

$ man -wK game

Devuelve una lista larga (en mi caso porque cada programa puede instalar su página de manual), y la última linea mía pone:

/usr/share/man/man7/tc-hfsc.7.gz

Y para abrirlo:

$ man 7 tc-hfsc

Por cierto hay commandos que no tienen binarios en el sistema por ejemplo el cd (que es como una función de bash), si haces:

$ whatis cd
cd: nothing appropriate.

Si haces por ejemplo un:

$ whatis ls
ls (1) - list directory contents

Y para ver ayuda del cd es en la página builtins:

$ man builtins

Alternativas a man

Hay un montón, parece que cada lenguaje moderno se a quedido hacer su própia alternativa…usando su sistema de paquetería, que si python, que si ruby, que si nodejs…

Las voy a dividir en si necesitas internet o no (una vez instaladas para instalarlas sera necesario internet), por si estas en un bunker soviético sobreviviendo al desastre nuclear por culpa del capitalismo e internet no existe…quiza packet rádio sigue ahí.

Por cierto un truco para comprobar si un comando necesita internet es usar

unshare -r -n <comando>

Alternativas de ayuda en GNU/Linux con internet

Bropages

Son listados de ejemplos de comandos, porque algunas veces se aprende mas fácilmente viendo ejemplos que leyendo tochazos de documentación. Además incluso puedes votar los ejemplos. El nombre de bro es por el rollo ya de hace unos años de la invasión por chulos de discoteca en las carreras de ingenieria dejando a parte a la fauna friki y que se les llamo brogramers gente mas interesada en el gimnasio que en el dado de 20 caras.

Esta ayuda se instala con el sistema de paquetes de Ruby, que se llama gem, para instalar gem (en Debian/Ubuntu) es:

$ sudo apt install ruby
$ sudo apt-get install ruby-dev

Y después:

$ sudo gem install bropages

Para usarlo es tán fácil como:

$ bro <comando>

Se pueden botar las chuletas, pero  creo que hay que registrarse.

cheat.sh

Este es curioso porque puede consultarse vía nuestro gran amigo el comando curl como un servicio, pero te lo pinta con colores (que queda todo mas hacker) y todo en terminal. O descargarse un bash que te da una shell para hacer las consultas. Tiene su propio «lenguaje de consultas» por ejemplo:

$ curl cheat.sh/

Devuelve una tabla de ayuda muy vistosa de como funciona cheat.sh .

Te devuelve ejemplos de la llamada de php

$ curl cheat.sh/php

Te devuelve ejemplos de zip.

$ curl cheat.sh/php/zip

Para listar terminos posibles en cada rama que hay se puede hacer con:

$ curl https://cht.sh/:list
$ curl https://cht.sh/php/:list

Ayuda

$ curl https://cht.sh/:help

Incluso por lenguaje

$ curl https://cht.sh/php/:help

También te da un articulo o bigcheatsheet como lo llaman ellos sobre variados temas del lenguaje:

$ curl https://cht.sh/php/:learn

Para buscar en todos los articulos es:

$ curl cheat.sh/~list

Para descargar el bash es tan fácil como:

$ curl https://cht.sh/:cht.sh > ~/bin/cht.sh

Para ejecutar

$ bash curl cheat.sh

Y te da una shell para ir de forma interactiva.

Alternativas de ayuda en GNU/Linux sin internet

Cheat

También devuelve listados de ejemplos de un comando, este se instala con pip el sistema de paquetes de Python. Al no necesitar conexión a internet, los listados de ejemplos se actualizan con cada nueva versión del paquete cheat.

Para instalar pip (para python3) es:

$ sudo apt install python3-pip

Y para instalar cheat es:

$ sudo pip3 install cheat

Para usarlo es realmente fácil con:

$ cheat ls

TLDR

Otra ayuda para comandos en terminal programada en nodejs (javascript) y por lo tanto para instalarla es con su gestor de paquetes npm. También es un listado de ejemplos de comandos como el resto. Su nombre viene «too long didn’t read» en español «demasiado largo; no lo leí». Lo meto en la categoría «sin conexión» pero es no es cierto del todo porque este tiene una cache de ayudas de comandos, que se descarga la primera vez que lo usas y que puedes actualizar de vez en cuando.

Para instalar npm te recomiendo el siguiente link de como instalar npm en Ubuntu/Debian ya que siempre es un poco jaleo de instalar

Y para instalar tldr es:

$ sudo npm install -g tldr

Y usarlo es:

$ tldr <comando>

Y actualizar la cache:

$ tldr --update

Tiene una cosa curiosa como mostrar un commando al azar (por aprender mola) que es así:

$ tldr --random

Incluso lo puedes «pipear» con cowsay y queda una cosa muy hacker y curiosa:

Resumen

El mundo de software libre siempre hay alternativas mas o menos curiosas a todo. Y además se ve que lo estándar es importante, porque las páginas Man ya pronto tendrán 50 años.

Lo cierto, a nivel personal, tengo instaladas todas estas alternativas pero siempre se me olvidan usar.