Blind 75 Semana 1, Ejercicio 1
En la siguiente serie de posts voy a mostrar mis soluciones a un conjunto de problemas de preparación para entrevistas técnicas denominado Blind 75. Los problemas están divididos por semana y por tipo de problema.
Mis soluciones estarán en typescript. Sin más que añadir, empecemos a programar.
Despliegue a S3 con Github Actions
En los últimos meses he estado actualizando la forma de hacer despliegues de mis proyectos desde mi computadora a la nube. Anteriormente, utilizaba aplicaciones como capistrano, ssh con rsync e incluso en algunos casos he llegado a hacer despliegues manualmente. Sin embargo, desde que descubrí Github actions me enamoré de lo fácil que es configurar despliegues de mis repositorios hospedados en Github. En este tutorial describiré cómo hacer despliegues de archivos a un bucket de S3 utilizando Github actions.
Proxy reverso con Nginx
Para un proyecto de trabajo necesitaba configurar un servidor que pudiera aceptar peticiones http y websockets al mismo tiempo, así que me di a la tarea de investigar como hacerlo y a continuación describo el proceso que llevé a cabo para lograr dicha tarea.
Funciones Aws lambda con Nodejs
AWS lambda es un servicio que permite ejecutar programas sin necesidad de un servidor (serverless), es decir, puede ejecutar código con tan solo subirlo a AWS y estar listo para ser invocado posteriormente. AWS cobra por número de peticiones a la función lambda y por el tiempo de ejecución de la misma. Entre los lenguajes soportados en la funciones lambda están: Java, Python, Go, Ruby, .Net y Nodejs. Es de éste último del cual voy a hablar en este artículo.
Migrar de bash a zsh en Mac
Empezando en macOS 10.15 Catalina, Apple eligió zsh
como shell por defecto lo cual fue un cambio significativo para usuarios como yo que siempre habíamos utilizado bash
como shell de preferencia. bash
había sido para el único shell con el que me sentía familiar, ya que lo venía usando desde años cuando dejé Windows por sistemas basados en Unix.
Servidor NAS con Raspberry Pi
Desde hace unos años tengo una rapberry pi (modelo 3B) que había utilizado mayormente para jugar emuladores de juegos retro con recalbox, sin embargo, últimamente le he sacado un provecho más técnico utilizándola para bloquear anuncios en mi red local con pi-hole (más adelante haré un tutorial acerca de esto) y también como servidor NAS.
NAS (Network Attached Storage, por sus siglas en inglés) es básicamente una unidad de almacenamiento que está disponible por medio de una red. En términos generales, un NAS pudiera compararse con algún servicio de almacenamiento en la nube como Dropbox o Onedrive, donde puedes guardar respaldos de tus datos y compartir archivos con otras personas, y su instalación/configuración puede ser tan compleja o sencilla dependiendo del caso de uso. En mi caso específico de uso, los únicos requerimientos son tener un lugar donde respaldar mis archivos y poder compartir los mismos dentro de la red local de mi hogar.
Docker detrás de un proxy
En el lugar donde trabajo hay instalado un proxy para bloquear cierto tráfico de internet y fuera de ser una pesadilla para navegar libremente, me dio problemas para comunicarme con el docker daemon en mi Mac. Curiosamente al correr
docker ps -a
el daemon escuchaba sin problema, el problema surgió al intentar correr un archivo compose
docker-compose up -d
ERROR: Couldn't connect to Docker daemon - you might need to run \`docker-machine start default\`.
Problemas de escritura en unidades montadas en OSX con Docker
El día de hoy estuve lidiando con un problema que impedía a mi container docker escribir en un volumen montado desde mi Mac. Investigando, descubrí que fuera del usuario root (del container) otros usuarios no pueden escribir en el sistema host (OSX) como se indica aquí. En este caso particular el usuario www-data de nginx intentaba escribir archivos de cache necesarios para las vistas volt del framework PHP phalcon (como en otros frameworks también). Algunas soluciones propuestas eran otorgar todos los permisos a esa carpeta, agregar al usuario creado al iniciar un container al grupo _www-data, _cambiar los permisos con los que Vbox monta los volúmenes compartidos, entre otras. Fuera de que algunas no me funcionaron, no quedé conforme hasta encontrar una solución más “elegante”.
Incrementar historia de comandos en bash
Si eres de los que utiliza CTRL + R para ejecutar un comando que ya habías ejecutado previamente o simplemente deseas buscar un comando en la historia de bash, quizá te resulte frustrante darte cuenta que el comando que querías ya no está en la memoria. Por defecto bash guarda un número limitado de comandos en la historia, en mi caso particular descubrí que OSX Yosemite conserva los últimos 500 comandos mientras que Ubuntu 12.04 preserva 1000. Por fortuna hay dos variables globales las cuales puedes editar para incrementar o disminuir el número de comandos almacenados en la historia: HISTSIZE y HISTFILESIZE. HISTSIZE indica cuantos comandos guarda bash en memoria durante la sesión activa. Por otro lado HISTFILESIZE indica cuantos comandos se pueden almacenar en el archivo .bash_history. Para mayores detalles sobre estas variables puedes leer este link.