Fix linting, and added a main Header with the title

This commit is contained in:
Marco D'Agostini 2020-07-15 17:37:44 -05:00
parent 583a0ee80a
commit bd915436e5
7 changed files with 129 additions and 105 deletions

View File

@ -1,4 +1,6 @@
# Como funcionan los fees # Bitcoin
## Como funcionan los fees
Cada ~10m (varia mucho, muchas veces hasta se tarda mas de 30m) se genera un bloque que como máximo puede pesar hasta 1Mb de informacion. Cada ~10m (varia mucho, muchas veces hasta se tarda mas de 30m) se genera un bloque que como máximo puede pesar hasta 1Mb de informacion.
@ -6,41 +8,43 @@ La transaccion mas común y simple es de 2 entradas y 2 salidas, y esa pesa mas
Lo mineros son los encargados de decidir cuales transacciones entran o no en un bloque, y por lo general, ellos le dan prioridad a las que tengan mejor fee (la que tenga la mayor densidad de BTC, osea la mayor **BTC/vbyte**) Lo mineros son los encargados de decidir cuales transacciones entran o no en un bloque, y por lo general, ellos le dan prioridad a las que tengan mejor fee (la que tenga la mayor densidad de BTC, osea la mayor **BTC/vbyte**)
En esta pagina https://bitcoinfees.earn.com puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.025$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas: En esta pagina <https://bitcoinfees.earn.com> puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.02# Bitcoin5$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas:
- Congestión de la red, cuantas transacciones tienes haciendote competencia en el valor del fee (BTC/vbyte) - Congestión de la red, cuantas transacciones tienes haciendote competencia en el valor del fee (BTC/vbyte)
- Cuanto estás dispuesto a esperar - Cuanto estás dispuesto a esperar
Fijate en la página, cada fila es un rango de fee/byte medido en **satoshis/byte**, el tamaño de la barra indica cuantas transacciones hay/habido en ese rango, y a la derecha, al final, hay una estimacion de minutos de espera (En la práctica varía) Fijate en la página, cada fila es un rango de fee/byte medido en **satoshis/byte**, el tamaño de la barra indica cuantas transacciones hay/habido en ese rango, y a la derecha, al final, hay una estimacion de minutos de espera (En la práctica varía)
El peso de una transaccion no solo depende de la cantidad de entradas y salidas, tambien depende del tipo de direcciones de las salidas (y quizas tambien de las entradas, not sure). Y existen 3 tipos de direcciones: El peso de una transaccion no solo depende de la cantidad de entradas y salidas, tambien depende del tipo de direcciones de las salidas (y quizas tambien de las entradas, not sure). Y existen 3 tipos de direcciones:
- 1... (clásica) - 1... (clásica)
- 3... (Segwit envuelto en un script, para hacerlo compatible con la clásica) - 3... (Segwit envuelto en un script, para hacerlo compatible con la clásica)
- bc1... (Segwit nativo) - bc1... (Segwit nativo)
El primero es el mas ineficiente (el que pesa mas en una transaccion), y el último es el mas eficiente. El primero es el mas ineficiente (el que pesa mas en una transaccion), # Bitcoiny el último es el mas eficiente.
Ya todos los servicios se han adaptado al mas eficiente, asi que asegurate de que la wallet que uses tenga direcciones que empiecen por **bc1...** Ya todos los servicios se han adaptado al mas eficiente, asi que asegurate de que la wallet que uses tenga direcciones que empiecen por **bc1...**
## Wallets centralizadas vs descentralizadas
# Wallets centralizadas vs descentralizadas
Las wallet descentralizadas modernas al momento de creacion generan un número aleatorio, que es básicamente el alma de tu wallet, de hecho, ese número **es** tu wallet, y quien lo tenga puede gastar tus BTC. Ese número te lo muestran en el formato **seed/semilla**, que es una lista de 12-24 palabras, es simplemente una forma mas presentable de mostrar el numero, ya que es mas facil de memorizar, y de transcribir. Las wallet descentralizadas modernas al momento de creacion generan un número aleatorio, que es básicamente el alma de tu wallet, de hecho, ese número **es** tu wallet, y quien lo tenga puede gastar tus BTC. Ese número te lo muestran en el formato **seed/semilla**, que es una lista de 12-24 palabras, es simplemente una forma mas presentable de mostrar el numero, ya que es mas facil de memorizar, y de transcribir.
Y muchas wallet van un paso mas allá e implementan el estandar **BIP39**, para encriptar esa **seed** con un **password** que tú escojas, y en estos casos para recuperar tu wallet vas a necesitar tanto la seed, como el password. Esta opcion es la que uso yo, porque entonces yo guardo tranquilamente mi **seed** en todos lados, sin preocuparme si alguien la llega a obtener, y solo me preocupo de guardar bien la clave, que es mas corta y aún mas fácil de memorizar y de guardar. (Es importante escoger una buena clave, mas q todo q sea larga, o te le pueden hacer bruteforce) Y muchas wallet van un paso mas allá e implementan el estandar **BIP39**, para encriptar esa **seed** con un **password** que tú escojas, y en estos casos para recuperar tu wallet vas a necesitar tanto la seed, como el password. Esta opcion es la que uso yo, porque entonces yo guardo tranquilamente mi **seed** en todos lados, sin preocuparme si alguien la llega a obtener, y solo me preocupo de guardar bien la clave, que es mas corta y aún mas fácil de memorizar y de guardar. (Es importante escoger una buena clave, mas q todo q sea larga, o te le pueden hacer bruteforce)
La necesidad de guardar bien esa clave es la desventaja que tienen las wallet descentralizadas vs las centralizadas/custodeadas, es muy facil cagarla, desde dejar muy a la vista la clave secreta a guardarla tan bien que se te pierde. O tambien si tienes muchos ahorros, tambien tienes que pensar en tener backups que tu familia pueda recuperar si te llega a pasar algo. La necesidad de guardar bien esa clave es la desventaja que tienen las wallet descentralizadas vs las centralizadas/custodeadas, es muy facil cagarla, desde dejar muy a la vista la clave secreta a guardarla tan bien que se te pierde. O tambien si tienes muchos ahorros, tambien tienes que pensar en tener backups que tu familia pueda recuperar si te llega a pasar algo.
## lightning
# lightning
Está construido encima de Bitcoin. Y está basado en una especie de contrato entre 2 partes, y cada parte puede decidir meter X cantidad de BTC para usarlos dentro de ese canal, y mientras ese canal está abierto ambas partes pueden tranzar sin comision alguna, porque no son transacciones que se guardan en la blockchain, son transacciones totalmente privadas. Está construido encima de Bitcoin. Y está basado en una especie de contrato entre 2 partes, y cada parte puede decidir meter X cantidad de BTC para usarlos dentro de ese canal, y mientras ese canal está abierto ambas partes pueden tranzar sin comision alguna, porque no son transacciones que se guardan en la blockchain, son transacciones totalmente privadas.
Y aquí es donde entra lightning como tal, porque bajo ciertas condiciones, se pueden conectar los canales entre sí para así poder transferirle a entidades con las que no tengas canales abierto directamente. Y aquí es donde entra lightning como tal, porque bajo ciertas condiciones, se pueden conectar los canales entre sí para así poder transferirle a entidades con las que no tengas canales abierto directamente.
Ventajas: Ventajas:
- Transacciones son casi instantáneas. - Transacciones son casi instantáneas.
- Fees son aún mas bajos. Gratis si con quien abriste el canal de lightning es el mismo a quien le vas a pagar. - Fees son aún mas bajos. Gratis si con quien abriste el canal de lightning es el mismo a quien le vas a pagar.
Desventajas: Desventajas:
- No es suficiente con guardar la **seed** y **password**, tu aplicacion tambien necesita guardar cada cambio que se haga en tus canales abiertos. (La única aplicacion que probé creo que tenia para configurar Google Drive para guardar todos esos cambios). - No es suficiente con guardar la **seed** y **password**, tu aplicacion tambien necesita guardar cada cambio que se haga en tus canales abiertos. (La única aplicacion que probé creo que tenia para configurar Google Drive para guardar todos esos cambios).
- Tu aplicacion tiene que estar pendiente de la red cada cierto tiempo (dependiendo de cuando tiempo se le configuró al canal, por lo general varios días) - Tu aplicacion tiene que estar pendiente de la red cada cierto tiempo (dependiendo de cuando tiempo se le configuró al canal, por lo general varios días)
- Capacidad limitada de cantidad de Bitcoins que puedes enviar, depende de la capacidad de los canales de la ruta que atraviesa la transacción. - Capacidad limitada de cantidad de Bitcoins que puedes enviar, depende de la capacidad de los canales de la ruta que atraviesa la transacción.
Lightning sigue en desarrollo activo, y algunas de las desventajas son mejorables sacrificando decentralizacion, como hace Phoenix Wallet, que me parece un muy buen tradeoff para noobs. Lightning sigue en desarrollo activo, y algunas de las desventajas son mejorables sacrificando decentralizacion, como hace Phoenix Wallet, que me parece un muy buen tradeoff para noobs.

View File

@ -38,7 +38,7 @@ END
Al ejecutar ese procedimiento almacenado, se abre una transacción, se ejecuta la **Consulta 1**, y al intentar la **Consulta 2** falla. Al ejecutar ese procedimiento almacenado, se abre una transacción, se ejecuta la **Consulta 1**, y al intentar la **Consulta 2** falla.
Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html se genera un `COMMIT` implicitamente. Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas <https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html> se genera un `COMMIT` implicitamente.
Si en este estado de la BD se hace un `SELECT` para verificar si en la BD se hicieron los cambios de la **Consulta 1**, se va a obtener distintas respuestas dependiendo de si el `SELECT` se ejecuta desde la misma conexión/sesión o no. Si en este estado de la BD se hace un `SELECT` para verificar si en la BD se hicieron los cambios de la **Consulta 1**, se va a obtener distintas respuestas dependiendo de si el `SELECT` se ejecuta desde la misma conexión/sesión o no.
@ -77,10 +77,10 @@ Esto sirve para que cualquier otra consulta que quiera leer o modificar los elem
Los `SELECT` normales no generan ningun bloqueo, para eso existen el `SELECT ... FOR SHARE` y el `SELECT ... FOR UPDATE`. Los `SELECT` normales no generan ningun bloqueo, para eso existen el `SELECT ... FOR SHARE` y el `SELECT ... FOR UPDATE`.
En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información <https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html>
### Recomendaciones ### Recomendaciones
Hay que analizar detalladamente todo lo que se mete dentro de una transacción, y reducirlo a lo mas mínimo posible, para evitar [Deadlocks](https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks.html) o retrasos debido a bloqueos innecesarios. Hay que analizar detalladamente todo lo que se mete dentro de una transacción, y reducirlo a lo mas mínimo posible, para evitar [Deadlocks](https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks.html) o retrasos debido a bloqueos innecesarios.
Usar índices en todos los `WHERE` de las consultas que bloquean, para que dichos bloqueos sean lo mas óptimos posibles, y se bloquee solo lo que hace falta bloquear. Usar índices en todos los `WHERE` de las consultas que bloquean, para que dichos bloqueos sean lo mas óptimos posibles, y se bloquee solo lo que hace falta bloquear.

View File

@ -1,18 +1,19 @@
*copiado sin verguenza alguna de https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/* # Configurar a un servicio onion
*copiado sin verguenza alguna de <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
--- ---
# Instalar Tor ## Instalar Tor
Instalar Tor en el cliente y en el servidor: Instalar Tor en el cliente y en el servidor:
sudo apt-get install tor -y sudo apt-get install tor -y
# Configurar Tor ## Configurar Tor
1. En el servidor vamos a editar el archivo de configuración de tor `/etc/tor/torrc`: 1. En el servidor vamos a editar el archivo de configuración de tor `/etc/tor/torrc`:
sudo nano /etc/tor/torrc sudo nano /etc/tor/torrc
2. Al final del archivo vamos a agregar esto: 2. Al final del archivo vamos a agregar esto:
@ -26,7 +27,7 @@ Instalar Tor en el cliente y en el servidor:
sudo systemctl restart tor sudo systemctl restart tor
# Obtener la direccion .onion ## Obtener la direccion .onion
Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/` Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/`
@ -34,18 +35,15 @@ Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/l
Deberia arrojarte algo así: `riludi2kstjwmlzn.onion` Deberia arrojarte algo así: `riludi2kstjwmlzn.onion`
# Conectarse al servidor ssh con la direccion .onion ## Conectarse al servidor ssh con la direccion .onion
```bash
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
```
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
Por ejemplo: Por ejemplo:
torify ssh jack@riludi2kstjwmlzn.onion torify ssh jack@riludi2kstjwmlzn.onion
## Opcional ### Opcional
Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config` Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config`
@ -58,7 +56,6 @@ Ingresar configuracion:
HostName riludi2kstjwmlzn.onion HostName riludi2kstjwmlzn.onion
Port 22 Port 22
Ahora puedes conectarte así: Ahora puedes conectarte así:
torify ssh serverTor torify ssh serverTor

View File

@ -1,14 +1,16 @@
*Shamelessly copied from https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/* # Configure an onion service
*Shamelessly copied from <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
--- ---
# Install Tor ## Install Tor
Install Tor on both client and server: Install Tor on both client and server:
sudo apt-get install tor -y sudo apt-get install tor -y
# Configure Tor ## Configure Tor
1. In the server let's edit tor's config file `/etc/tor/torrc`: 1. In the server let's edit tor's config file `/etc/tor/torrc`:
@ -25,7 +27,7 @@ Install Tor on both client and server:
sudo systemctl restart tor sudo systemctl restart tor
# Get .onion address ## Get .onion address
It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh` It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh`
@ -33,17 +35,15 @@ It will be in the file `hostname` in the previously configured folder `/var/lib/
You should get something like `riludi2kstjwmlzn.onion` You should get something like `riludi2kstjwmlzn.onion`
# Connect to the Tor hidden ssh server ## Connect to the Tor hidden ssh server
```bash torify ssh ... # replace the domain/ip with the .onion address
torify ssh ... # replace the domain/ip with the .onion address
```
For example: For example:
torify ssh jack@riludi2kstjwmlzn.onion torify ssh jack@riludi2kstjwmlzn.onion
## Optional ### Optional
You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`: You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`:
@ -56,7 +56,6 @@ Set configuration:
HostName riludi2kstjwmlzn.onion HostName riludi2kstjwmlzn.onion
Port 22 Port 22
Now you can simply connect with: Now you can simply connect with:
torify ssh serverTor torify ssh serverTor

View File

@ -1,57 +1,66 @@
# Shortcuts # Terminal Shortcuts
*For Ubuntu's default keybinding settings (i.e Emacs keybindings)* ## Default shortcuts
## Insert previous arguments For Ubuntu's default keybinding settings (i.e Emacs keybindings)
- <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
*In Linux you can repeat commands to go back in history* ### Insert previous arguments
### Example: - <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
In Linux you can repeat commands to go back in history
#### Example
Last command is: Last command is:
mv foo bar mv foo bar
- <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv` - <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv`
- <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo` - <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo`
- <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo` - <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo`
### Cut/Paste commands
## Cut/Paste commands (relative to cursor's position)
*(relative to cursor's position)*
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
## Move cursor ### Move cursor
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
## Other ### Other
- <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
## To see all shortcuts available - <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
- **bash:** `bind -lp`
- **zsh:** `bindkey -L`
# Custom shortcuts ### To see all shortcuts available
## Iterate through arguments
*only works in zsh, and probably only Linux* - **bash:** `bind -lp`
- **zsh:** `bindkey -L`
## Custom shortcuts
### Iterate through arguments
only works in zsh, and probably only Linux
#### Description
### Description
Insert any argument of a previous command by iterating one by one until selection Insert any argument of a previous command by iterating one by one until selection
### Setup Instructions #### Setup Instructions
run this: run this:
autoload -Uz copy-earlier-word autoload -Uz copy-earlier-word
@ -62,7 +71,8 @@ run this:
Now use <kbd>Alt</kbd>+<kbd>.</kbd> to go as back as you want, then use <kbd>Alt</kbd>+<kbd>:</kbd> to iterate through the arguments Now use <kbd>Alt</kbd>+<kbd>.</kbd> to go as back as you want, then use <kbd>Alt</kbd>+<kbd>:</kbd> to iterate through the arguments
### Example: #### Example
Last command is Last command is
echo 1 2 3 4 5 echo 1 2 3 4 5
@ -74,12 +84,12 @@ Last command is
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `1` - <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `1`
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `echo` - <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `echo`
source: https://stackoverflow.com/a/34861762/3163120 source: <https://stackoverflow.com/a/34861762/3163120>
## Other examples
# Other examples ### Common usecases
## Common usecases
Let's consider the last command to be: Let's consider the last command to be:
mv foo bar mv foo bar
@ -88,7 +98,8 @@ Let's consider the last command to be:
<kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: first argument of last command = `mv` <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: first argument of last command = `mv`
# Limitations ## Limitations
"words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts. "words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts.
So if last argument was a url and you want to erase it with <kbd>Ctrl</kbd>+<kbd>w</kbd> it will be a pain. So if last argument was a url and you want to erase it with <kbd>Ctrl</kbd>+<kbd>w</kbd> it will be a pain.
@ -97,8 +108,6 @@ E.g: `curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questi
To erase that **url** using <kbd>Ctrl</kbd>+<kbd>w</kbd>, you'd have to repeat it 12 times. To erase that **url** using <kbd>Ctrl</kbd>+<kbd>w</kbd>, you'd have to repeat it 12 times.
--- ---
It would be great to have similar shortcuts that only stops at the **space character**
It would be great to have similar shortcuts that only stops at the **space character**

View File

@ -1,17 +1,18 @@
[//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode" [//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode"
Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android via [termux](https://termux.com/), and configure it to download links shared from another app. # Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android
*Based on https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/* Based on <https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/>
# Usage ## Usage
Click **Share**, select **Termux**, choose video or audio, and that's it!, it will be saved to `Downloads/{Provider}/` e.g `Downloads/Youtube/` Click **Share**, select **Termux**, choose video or audio, and that's it!, it will be saved to `Downloads/{Provider}/` e.g `Downloads/Youtube/`
# Install Termux ## Install Termux
https://termux.com/
# Open Termux and run one of these: <https://termux.com/>
## Open Termux and run one of these
1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended) 1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended)
2. [Youtube-dl + sharing](#youtube-dl--sharing) 2. [Youtube-dl + sharing](#youtube-dl--sharing)
@ -19,7 +20,7 @@ https://termux.com/
4. [Termux extras](#termux-extras) 4. [Termux extras](#termux-extras)
5. [All-In-One](#all-in-one) 5. [All-In-One](#all-in-one)
## Youtube-dl + sharing + dialog **(Recommended)** ### Youtube-dl + sharing + dialog **(Recommended)**
```bash ```bash
# Ask for storage permission # Ask for storage permission
@ -60,13 +61,13 @@ https://termux.com/
- A prompt to enable storage will appear, press <kbd>y</kbd> then <kbd>Enter</kbd> - A prompt to enable storage will appear, press <kbd>y</kbd> then <kbd>Enter</kbd>
- That's all!, just wait for it to finish upgrading/installing - That's all!, just wait for it to finish upgrading/installing
### Usage: #### Usage
Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio** Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio**
## Youtube-dl + sharing ### Youtube-dl + sharing
### Usage: #### Usage
Share URL to termux, this will automatically download the video. Share URL to termux, this will automatically download the video.
@ -89,7 +90,7 @@ But if you always want to download just audio, replace `youtube-dl $url` with `y
chmod +x ~/bin/termux-url-opener chmod +x ~/bin/termux-url-opener
``` ```
## Youtube-dl ### Youtube-dl
This will only install youtube-dl in termux, sharing a URL to Termux will not work, you'll need to run the command manually from the terminal, e.g `youtube-dl https://youtu.be/blahblahblah` This will only install youtube-dl in termux, sharing a URL to Termux will not work, you'll need to run the command manually from the terminal, e.g `youtube-dl https://youtu.be/blahblahblah`
@ -100,8 +101,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl
``` ```
### Termux extras
## Termux extras
```bash ```bash
# Add special keys to keyboard # Add special keys to keyboard
@ -115,7 +115,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
apt install -y nano apt install -y nano
``` ```
## All-In-One ### All-In-One
Youtube-dl + sharing + dialog + Termux extras Youtube-dl + sharing + dialog + Termux extras
@ -153,4 +153,4 @@ Youtube-dl + sharing + dialog + Termux extras
['ESC', '/', '|', 'HOME', 'UP', 'END', 'PGUP', '-'], \ ['ESC', '/', '|', 'HOME', 'UP', 'END', 'PGUP', '-'], \
['TAB','CTRL', 'ALT', 'LEFT', 'DOWN', 'RIGHT', 'PGDN', '~'] \ ['TAB','CTRL', 'ALT', 'LEFT', 'DOWN', 'RIGHT', 'PGDN', '~'] \
]" > ~/.termux/termux.properties ]" > ~/.termux/termux.properties
``` ```

View File

@ -1,9 +1,13 @@
# Ubuntu install guide
## Update & Upgrade ## Update & Upgrade
```bash ```bash
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
``` ```
## Install Packages ## Install Packages
```bash ```bash
sudo apt-get install python3-pip zsh curl wget git sudo apt-get install python3-pip zsh curl wget git
sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol ufw servefile nmap fail2ban gimp most colordiff mosh dconf-editor ncdu qcalc jq tor fonts-noto & sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol ufw servefile nmap fail2ban gimp most colordiff mosh dconf-editor ncdu qcalc jq tor fonts-noto &
@ -14,31 +18,38 @@ pip3 install youtube-dl tldr
## External Repositories ## External Repositories
### Antimicro ### Antimicro
```bash ```bash
sudo add-apt-repository ppa:mdeguzis/libregeek sudo add-apt-repository ppa:mdeguzis/libregeek
``` ```
As of today, a bionic package is still not available, but the artful works!. https://github.com/AntiMicro/antimicro/issues
As of today, a bionic package is still not available, but the artful works!. <https://github.com/AntiMicro/antimicro/issues>
`sudo nano /etc/apt/sources.list.d/mdeguzis-ubuntu-libregeek-bionic.list` Replace `bionic` with `artful` `sudo nano /etc/apt/sources.list.d/mdeguzis-ubuntu-libregeek-bionic.list` Replace `bionic` with `artful`
```bash ```bash
sudo apt update sudo apt update
sudo apt install antimicro sudo apt install antimicro
``` ```
Put config file https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e in `~/.config/antimicro`
Put config file <https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e> in `~/.config/antimicro`
### SinkSwitcher ### SinkSwitcher
https://github.com/madacol/sinkSwitcher <https://github.com/madacol/sinkSwitcher>
## Web installs ## Web installs
- docker: https://download.docker.com
- VSCode: https://code.visualstudio.com/ - docker: <https://download.docker.com>
- chrome: https://www.chrome.com/ - VSCode: <https://code.visualstudio.com/>
- syncthing: https://apt.syncthing.net/ - chrome: <https://www.chrome.com/>
- Zsh-syntax-highlighting: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md - syncthing: <https://apt.syncthing.net/>
- Zsh-syntax-highlighting: <https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md>
## Edit ~/.zshrc ## Edit ~/.zshrc
### Add shortcut "Alt+:" [to iterate through arguments](https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command/55069846#55069846) ### Add shortcut "Alt+:" [to iterate through arguments](https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command/55069846#55069846)
```bash ```bash
autoload -Uz copy-earlier-word autoload -Uz copy-earlier-word
zle -N copy-earlier-word zle -N copy-earlier-word
@ -46,19 +57,23 @@ bindkey "^[:" copy-earlier-word
``` ```
### Enable most ### Enable most
```bash ```bash
export PAGER=most export PAGER=most
``` ```
## Gnome extensions ## Gnome extensions
- Caffeine - Caffeine
- Dash to dock https://extensions.gnome.org/extension/307/dash-to-dock/ `sudo apt remove gnome-shell-extension-ubuntu-dock` https://github.com/micheleg/dash-to-dock/issues/643 - Dash to dock <https://extensions.gnome.org/extension/307/dash-to-dock/> `sudo apt remove gnome-shell-extension-ubuntu-dock` <https://github.com/micheleg/dash-to-dock/issues/643>
- suspend button NetSpeed https://extensions.gnome.org/extension/104/netspeed/ - suspend button NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
- NetSpeed https://extensions.gnome.org/extension/104/netspeed/ - NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
## Custom shortcuts ## Custom shortcuts
- `systemctl suspend` - `systemctl suspend`
- Cmus https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0 - Cmus <https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0>
## StartUp ## StartUp
- Cmus `gnome-terminal -- cmus`
- Cmus `gnome-terminal -- cmus`