Instalando arch linux: Paso #0 la investigación


Antergos

One Does Not Simply Correctly install Arch Linux on the first try

Desde hace mucho que vengo pensando en darle una intentada a instalar Arch Linux. Me recomendaron Antergos para empezar. Y como justo tengo una mac air que le vendría bien un power up, decidí que está bueno ponerme a invstigar cómo hacerlo.

La idea es tener un dual boot de Mac OSX y Antergos para probar y si todo sale bien capaz y hacer sólo la instalación de Arch, pero eso será otro post.

Así que bueno, a intentarlo de una vez.

Acá me dejo los links de referencia que usaré (y que ya estuve leyendo).

Saludos,
Gorka


Buenas prácticas para pasar contraseñas


Cipher Disk

Only the paranoid will survive and inherit the earth

openssl

Hablemos primero de lo que pasó: necesité que me mandaran una contraseña, la manera “insegura” (y que creo todos hemos tipicamente usado) es pasarla por email o chat (a veces en partes para hacerlo más seguro, a veces no).

Y, para que me llegara una contraseña me encontré decifrando direcciones url + decriptando hashes + borrando todo y guardando las cosas en una “caja segura”.

La idea es que, para pasar una contraseña la buena práctica implica usar por lo menos dos cananales diferentes para transmitir datos - así si alguien está escuchando un canal, sólo escucha parte de la conversación.

Lo divertido es que a través de uno de los canales se hace llegar una contraseña encriptada y a través del otro, la clave para decriptar la contraseña original. Fue ahí donde descubrí openssl.

Con esta herramienta puedo encriptar/decriptar (cifrar/descifrar) palabras o frases y así transmitirlas - de una manera en la que para “entenderlas” se necesita la clave descifradora.

¿Cómo funciona?

echo 'Esta sería la contraseña' | openssl enc -base64 -e -aes-256-cbc -pass pass:esta_es_la_clave_cifradora_descifradora

Y esto nos da: U2FsdGVkX1/l9mGydcS6YSQHL7Mp564njMvaBpJZnEv/IR3mfg2Ojh3NMF/2GYEr

Genial, y luego? Pues luego la podemos descifrar así:

echo U2FsdGVkX1/l9mGydcS6YSQHL7Mp564njMvaBpJZnEv/IR3mfg2Ojh3NMF/2GYEr | openssl enc -aes-256-cbc -d -a

Y ahí nos pregunta por la clave (también se le podríamos dar como argumento en la forma -pass pass:esta_es_la_clave_cifradora_descifradora).

Y kapow!: Esta sería la contraseña

También sirve para archivos

openssl aes-256-cbc -a -salt -in 'ruta_y_nombre_al_archivo_a_encriptar' -out 'ruta_y_nombre_al_archivo_encriptado' -pass pass:esta_seria_la_clave
openssl aes-256-cbc -d -a -in 'ruta_y_nombre_al_archivo_encriptado' -out 'ruta_y_nombre_al_archivo_desencriptado'

Así que bueno, aprendiendo de buenas prácticas y nuevas herramientas.

Saludos, Gorka

PD - la imagen es de un tipo de cifrado conocido como Caesar Cipher

PD2 - buscando imágenes de cipher disk para este post como que me parace que el zodiaco, calendario azteca y las monedas se parecen mucho a este tipo de discos - paranoia lo mío?


¿Qué hay en el pipeline?


Qué hay en el pipeline?

He estado jugando mucho ultimamente con nuevas tecnologías: desde comunicación cliente-cliente con webrtc, pasando por mundos virtuales en web con webvr y webgl hasta brain control computing. COn esto me he divertido mucho también pensando en qué cosas nuevas se pueden intentar y cómo llevarlas a cabo. Sigo creyendo que con las tecnologías que se están/estamos desarrollando cada vez se “blurrean” más los límites de lo físico y lo digital/virtual.

Uno de mis principales motivadores tiene que ver con conseguir que el pensamiento de “luz encendida en el cuarto”, genere que la luz que estaba apagada se encienda.

¿Cómo se puede lograr esto?

Hay pasos a seguir y para algunos no contamos (aún) con las herramientas necesarias para construirlos, pero más o menos así:

1.- Yo pienso luz encendida en el cuarto 2.- Un dispositivo (hardware) recibe los impulsos nerviosos que generaron tal pensamiento. 3.- Un software entrenado aisla la intención entre el posible ruido entre toda la información capturada. 4.- El software envía una petición http al sistema que es capaz de prender la luz (el de la casa, del cuarto, de la bombilla, da lo mismo) 5.- Luz encendida

Y de esa manera podremos tener al alcance de un pensamiento algo que años atrás era motivo de risa.

¿Cómo se verá el futuro?

Me gustaría hacer otro post acerca de mis predicciones, aquí en realidad les cuento lo que yo he publicado ultimamente:

Los proyectos son un “work in progress” que ya iré puliendo. Todos los proyectos están en github (https://github.com/AquiGorka). Me encantaría escuchar lo que piensan y si se quieren sumar de alguna manera.

Saludos,
Gorka


Aprendiendo a usar ssh


ssh

Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over an unsecured network. The best known example application is for remote login to computer systems by users.
ssh @ Wikipedia

ssh

Eso, la aplicación más conocida es para conectarte de manera segura con otras computadoras. Esto puede ser desde la terminal o con otros programas que usan ssh con algún tipo de interfaz gráfica.

Hay dos programas:

El cliente se conecta al servidor. Es decir, se necesita una computadora que tiene algún servidor ssh corriendo - en mi caso, he usado openSSH pero hay más. Seguramente que se puede tener el cliente en la misma computadora que tiene el servidor pero aún estoy aprendiendo así que hagamos esto fácil y paso a paso.

Para los siguientes ejemplos tengo un servidor corriendo en [email protected]

ssh -L

Sirve para hacer un tunel en un puerto local hacia algun otro lugar via el servidor definido.

ssh -L 9000:localhost:8888 [email protected]

Al entrar yo (en cualquier browser) a http://localhost:9000 lo que voy a ver es lo que regresa el localhost de la computadora corriendo el openSSH (server de ssh) en el puerto 8888.

También podría apuntar a cualquier otro lugar del mundo (eg www.google.com:80) pero no logré un ejemplo que funcionara (me mandaban paginas 404 supongo que por error de configuración local a la petición via localhost).

ssh -R

Sirve para hacer un tunel a un puerto remoto de un puerto local, es decir, lo que se tenga en mi computadora (que por ahora es el cliente ssh) se va a ver en la computadora remota (la que tiene el server ssh y en el puerto definido).

ssh -R 9090:localhost:8080 [email protected]

Esta opción está rebuena para desarrollo en dos casos específicos (ambos casos necesitan que la computadora con el server ssh sea accesible via web):

ssh -D

La última por hoy, y una muy divertida: sirve para usar la computadora con el server ssh como proxy para las peticiones locales - hay que hacer una configuración más local, hay que decirle al OS o al browser o a curl (ver ejemplo abajo) que use socks5 proxy para los requests.

Esto está muy divertido ya que ahora tenemos una VPN (por ahora de emergencia, y siguiendo las recomendaciones que me han hecho, si quieres una VPN lo mejor que puedes hacer es pagar por una VPN).

ssh -D 9002 [email protected]

curl --socks5 localhost:9002 www.aquigorka.com

Así que ahí está, ya iré aprendiendo más y compartiendo como hacer más cosas.

Saludos,
Gorka


Décimo aniversario


Important Dates

Todo lo que ves a tu alrededor fue contruido por hombres.

Hace unos días me puse a hacer cálculos y resulta que en estas fechas este blog/web cumple 10 años de mi primer post. Quería hacer algo simbólico y encontrar el primer post y hacer algún tipo de restrospectiva o por lo menos referencia, pero no logré encontrarlo - lo más atrás que llegué fue a un post que había escrito de blood diamond, que podría ser el primero pero creo que escribí algo antes, en fin.

Y lo que sí me dieron ganas es de recuperar muchos de los posts que fui escribiendo y que en cambios de web dejé en el pasado… todo esto gracias a Wayback Machine de Archive.org: http://web.archive.org/.

Así que por los siguientes días voy a republicar/recuperar viejos contenidos (y con mucho gusto leerlos), me regresan a lo que estaba viviendo cuando los escribí y me recuerda que desde siempre tuve este tema en el blog de “Seguir aprendiendo” (antes era “Aprende por ti mismo”) - y también me hizo notar que antes tenía mucha participación, así que voy a ver como recuperar comentarios con este nuevo sistema y luego fomentar la conversación.

Saludos,
Gorka

P.D. - de las cosas que ya estuve republicando está la serie de experimentos que había escrito, qué buenas ideas! jajaja


Hugo vs. Jekyll


Static site generators

Managing software becomes central to the success of any businesses

Y que mejor que probar las diferentes herramientas posibles. En este caso me puse a jugar con dos herramientas para blogs/websites estáticos (Hugo y Jekyll),

¿Qué son los generadores de websites estáticos?

Un poco de contexto: las páginas web son basicamente html (y js y css pero para hacerlo fácil, no digamos nada de eso). Y los navegadores saben que el contenido que viene en html se enseña de diferentes maneras (tablas, parrafos, links, menus, etc.). Entonces si uno agarra un editor de texto y escribe html y guarda el archivo y lo abre con google chrome entonces se ve una página web - así lo más sencillo de lo sencillo. Genial y estático, es decir que para cambiar el contenido de esa página habría que abrir el archivo y modificarlo y luego guardarlo de vuelta y abrirlo con chrome.

Pero y cómo hago (o como se hacía antes de los spas y ajax) para que las páginas tuvieran contenidos dinámicos - momento cerebrito, contenido dinámico?

¿Qué son los contenidos dinamicos?

Si entras a una página web que tenga sistema de registro y te loggeas y en algún lugar en la página te dan la bienvenida por tu nombre (ej “Bienvenido Gorka”) bueno, ese nombre va a ser diferente para cada persona (que no tenga el mismo nombre no?), es decir, de manera dinámica se cambia el nombre de la persona que hace login.

Retomando, entonces para hacer eso, se usan lenguajes que funcionan en los servidores (de todos los sabores y colores que uno se pueda imaginar, y aqui es donde pueden llegar a sonar nombres como PHP, Node, Python, Java, Go, Ruby, Perl, etc.) que hacen eso mismo, cambian los contenidos de las páginas cada vez, y eso es, en sí, escribir el archivo html y mandarlo al navegador. Y pues aqui es donde se inicieron muchos sitemas de gestión de contenidos dinámicos (otros nombres como Wordpress, Joomla, Drupal, etc.).

Pero ese dinamismo viene con un costo, es decir, el tiempo que el servidor se toma para saber qué contenidos escribir (y hasta de dónde sacar los contenidos en sí). Así que para evitar caer en esos “costos” algunas personas decidieron desarrollar programas de gestión de contenidos que generan páginas estáticas. Esto viene con otros costos, pero como este blog post es super introductorio, eso lo explicaré en otra ocasión.

En fin, así que probando los sistemas, dejo mi opinión: prefiero Hugo - con todo y que este mismo blog usa Jekyll.

Voy a seguir usando ambos, y eventualmente haré posts de como instalar y usar cada uno.

Las ventajas de ambos: mis dos blogs (este y AquiGorka.net) van mucho más rápidos, y al estar ambos hosteados como contenidos estáticos también es mucho más barato.

Se me hizo medio largo el post de introducción, así que acá lo dejo por ahora.

Saludos,
Gorka


Nuevas Herramientas


Digital toolset

La tecnología.
La tecnología ha de ser invisible para los usuarios. No tienes por qué entregar una lata de refresco con un drone si puedes entregarla en mano previamente, porque lo que importa es que el usuario tiene sed, no que tú tengas un drone.
Daniel Granatta

No sé si estoy de acuerdo. Tampoco creo que estoy en desacuerdo.

Lo que pienso en ambos casos es así (está mezclado):

Creo que ese tipo de propuestas harían que no hubiera innovación por el gusto de hacer innovación. Para qué se necesita el drone si se puede entregar el refresco en mano, si la necesidad es la sed del usuario - pero y la necesidad de saciar la sed en un lugar al que se puede acceder mucho más rápido vía drone?

En la ciudad entregar refrescos con drone es un claro overkill, pero en zonas austeras donde no hay acceso a tiendas en cada esquina, ahí tiene sentido.

Entonces, entregar refrescos en drones tiene sentido sólo cuando existe la necesidad? Ahí es donde digo que no estoy de acuerdo, el hecho que se puedan entregrar refrescos con drones abre las puertas a repensar muchos otros lugares/necesidades donde se puede aplicar ese overkill de tecnología - lugares donde no es un overkill y donde el status quo no hacía/dejaba ver que había una necesidad, un problema a mejorar; y el uso de drones en otro lado por efímero que parezca puede ser un disparador de innovación en otro.

Un par de ideas para empezar el post. Ahora a las nuevas herramientas:

Vim

Es lo más divertido. Es un editor de texto al estilo línea de comando, dónde escribir es sólo un modo y en realidad, todo lo que haces lo haces por comandos - para todos ya es común usar CTRL+V y CTRL+C para copiar y pegar, bueno Vim es así para todo, hay comandos y combinaciones de teclas para cada cosa (y las que no existen se pueden crear).

Tiene un learning curve alto, pero te acostumbras y poco a poco lo usas para todo. Y lo divertido es que tiene plugins y una comunidad gigante haciendo mejoras constantemente. Hoy por hoy, mi editor of choice.

tmux

Trabajando con Vim ahora de repente me la vivía acomodando ventanas por todos lados y tuve que buscar un tile manager para hacer eso de manera rápida. Luego aprendí que con Vim puedo tener varios archivos abiertos y trabajar entre ellos, así sólo necesito 1 ventana abierta al máximo y hacía el splitting desde Vim. Kapow!, llegó tmux (y es gracioso, uso tmux en iTerm que puede ser un overkill pero hay lugares donde no tengo iTerm así que de esta manera es todo una sola forma). En fin, tmux: una solo programa tamaño máximo y ahí mismo múltiples sesiones, es algo como múltiples escritorios dentro de un solo programa.

Muy cómodo y fácil de usar, y también todo configurable - apenas estoy aprendiendo qué y cómo para ver como lo defino a mi gusto personal.

Zsh

Al estar usando Vim y tmux (y menos Sublime, Atom y Visual Studio) me encontré cada vez más trabajando con línea de comando, si bien ya instalaba y jugaba un poco con Zsh ahora empecé a configurar a mi gusto todo (desde alias, binarios propios, plugins e instalaciones automaticas). Y por supuesto Oh My Zsh - una comunidad de agregados super chulos para Zsh.

Los temas son muy cómodos y variados, y la idea es que con un dotfiles te puedes llevar esas configuraciones a todos lados facilmente (https://github.com/AquiGorka/dotfiles)

Go

Aprendí a programar en C y luego C++. Nunca más los volví a ver, nunca los usé y no creo usarlos (nunca digas nunca). Pero de repente me crucé con un lenguaje que te ofrece la potencia, fuerza y velocidad de C pero con una sintaxis y con interfaces más sencillas de usar: Golang.

No jugué aún con los channels pero parece que para hacer sistemas que corren en paralelo ya viene optmimziado - genial!

Lo que si hice ya, y sigo haciendo es usar Go para mis servers de api (https://github.com/AquiGorka/kickoff/game) y viniendo de Node, la verdad es que es muy fácil hacer esto.

Luego encontré Crystal, que sería el Go para los que vienen de Ruby (yo vengo de Node) y plantea la misma idea: La fuerza y poder de C pero con la sintaxis sencilla y limpia de Ruby - no niego que me da curiosidad, pero por ahora no lo voy a probar, solo lo mantengo en el radar.

Docker/Vagrant

Los casos de uso por los cuales ya estoy usando este tipo de programas (si es que los puedo llamar así, en realidad son virtualizaciones de software):

Para el primero: no me hace falta instalar las herramientas y programas para desarrollar si ya vienen en una imagen - para que instalar node, ruby, go, php, mysql, mongo, etc, etc. si puedo tenerlo listo en un ambiente virtualizado donde simplemente monto/comparto los archivos de mi máquina y los trabajo con mi editor de costumbre y listo.

Tampoco es overkill isntalar esos otros programas de desarrollo en mi máquina, lo acepto PERO que pasa cuando tienes versiones que chocan entre lo que quieres y lo que tienes - ejemplo las mac vienen con ruby y gem pero no puedes usarlo para desarrollos propios y no lo vayas a modificar porque si lo jodes, kapow! te llevas el sistema. Cómo se resuelve esto? Con version managers, que PAJA - un version manager de ruby, otro de node, otro de npm, nel. Ambientes virtualizados con las versiones que necesito y punto.

Para el segundo: estuve aprendiendo a hacer un continuos delivery desde bitbucket a google cloud engine (futuro post y código en github). Y pues qué más fácil que bajar la imagen de la máquina de bitbucket que hace el test y build y delivery, correrlo local y cuando todo funcionaba mandar el script a bitbucket y confirmar que todo seguía ceteris paribus.

Para el tercero: cuando lo haga lo cuento.

Así que bueno, ahí está un resumen rápido (pero no corto) de las herramientas que vengo aprendiendo y usando ultimamente - me faltaron otras: jekyll, hugo y github pages pero esas las contaré en otro post.

Saludos,
Gorka


Pagination