Usando Jekyll con Docker

01 Jul 2020

Hasta ahora habia usado Jekyll instalando el paquete desde los repositorios de Ubuntu, pero resulta que por un problema de incompatibilidad no para de dar warnings del tipo:

/usr/lib/ruby/vendor_ruby/jekyll/tags/include.rb:194: warning: Using the last argument as keyword parameters is deprecated

Y me resulta extremadamente molesto, por lo que estuve buscando alguna opción que evitara dichos mensajes. Parece que en la siguiente versión de Jekyll está corregido, pero desafortunadamente implica compilar y bueno, no me apetecía instalar las dependencias necesarias.

Se me ocurrió que podría existir una imagen de Docker y … Bingo! Con la imagen de Docker funciona y no escupe esos dichosos warnings. De esta forma iniciamos Jekyll en modo servidor:

$ docker run -ti --rm -p "4000:4000" -v "$(pwd):/srv/jekyll" jekyll/jekyll:3.8 jekyll serve

Mejorando lo mejorable

Cómo podríamos hacerlo incluso más fácil? Con nuestro viejo amigo el Makefile:

GREEN := \033[1;32m
BLUE := \033[1;34m
RESET := \033[0m

# The directory of this file
DIR := $(shell echo $(shell cd "$(shell dirname "${BASH_SOURCE[0]}" )" && pwd ))

IMAGE_NAME ?= jekyll/jekyll
IMAGE_VERSION ?= 3.8

# This will output the help for each task
# thanks to https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help

help: ## This help
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "${GREEN}%-30s${RESET} %s\n", $$1, $$2}' $(MAKEFILE_LIST)

.DEFAULT_GOAL := help

serve: ## Local server
	@echo "${BLUE}Server $(IMAGE_NAME):$(IMAGE_VERSION)${RESET}"
	docker run -ti --rm -p "4000:4000" -v "$(DIR):/srv/jekyll" $(IMAGE_NAME):$(IMAGE_VERSION) jekyll serve

build: ## Build site
	@echo "${BLUE}Build $(IMAGE_NAME):$(IMAGE_VERSION)${RESET}"
	docker run -ti --rm -v "$(DIR):/srv/jekyll" $(IMAGE_NAME):$(IMAGE_VERSION) jekyll build

De esta forma, para iniciar Jekyll en modo servidor simplemente tenemos que escribir:

$ make serve

Genial, verdad?

Docker

Instalar Docker en Linux Mint 20 y Ubuntu 20.04

01 Jul 2020

Para instalar Docker en Linux Mint 20 (también aplica a Ubuntu 20.04 Focal Fossa) podemos hacerlo de dos formas:

  • Instalar la versión de Docker de los repositorios de Ubuntu
  • Instalar la versión del repositorio de Docker

A mi me gusta más la segunda opción porque instala una versión más reciente de Docker y se actualiza más a menudo. Para ello seguimos estos pasos:

$ echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" | sudo tee /etc/apt/sources.list.d/docker.list
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io pigz

Para poder usar el comando docker desde cualquier usuario, no olvides añadirlo al grupo docker:

$ sudo usermod -aG docker $USER

Docker Compose

Lo mismo pasa con Docker Compose, que también se podría instalar desde los repositorios de Ubuntu, sin embargo también prefiero una versión más actualizada:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Y con esto ya lo tendríamos todo.

Docker

Utilizar un servo de rotación continua con Arduino

21 Apr 2017

En otro post anterior vimos como controlar un servo de los “normales” con Arduino. Este tipo de servo tienen una limitación y es que sólo permiten girar entre 0 y 180 grados. Hay casos en los que necesitamos tener una libertad de movimiento de 360 grados, y es aquí donde entran en escena los servos de rotación continua. La parte negativa es:

  • Son más caros.
  • No podemos controlar la posición.
  • No dispondremos de un control preciso de la velocidad.

Sin embargo, y dependiendo del uso que le demos, podremos vivir con estos inconvenientes.

He encontrado tutoriales en los que convierten un SG90 en uno de rotación continua, pero corres el peligro de romper el servo. Ademas, el rendimiento no es equiparable al de un servo comercial. Por tanto está la opción de comprar un FS90R que, por poco más de 3 euros en Aliexpress, no ahorra toda esa película. Según la ficha técnica del producto las conexiones con estas:

FS90R Arduino
Naranja PWM
Rojo Vcc (5V)
Marrón GND

La forma de usar un servo de rotación continua es igual a la de un servo normal, por lo que también haremos uso de la librería Servo. Veamos un ejemplo de uso en el que podemos ver que, según el ángulo de rotación podemos cambiar tanto la velocidad de rotación como el sentido de giro.

#include <Servo.h>

Servo myservo;  // create servo object to control a servo 
 
void setup() {
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  // Servo 100% CW (angle 0 degrees)
  Serial.println("100% CW");
  myservo.write(0);
  delay(1500); 
  
  // Servo stopped(angle 90 degrees)
  Serial.println("Stop");
  myservo.write(90);
  delay(1500);

  // Servo 100% CCW (angle 180 degrees)
  Serial.println("100% CCW");
  myservo.write(180);
  delay(1500);
}

Y poco más.

Arduino