Acortar enlaces en Node.js

En alguna ocasión puede resultar necesario acortar enlaces desde nuestra aplicación en Node.js. Además, muchos acortadores añaden anuncios intersticiales de los que podemos sacar un dinero. Algunos ejemplos de acortadores que comparten ganancias son:

Para facilitar el manejo de estos servicios y generar ingresos de manera sencilla he diseñado paquetes para todos esos servicios. Están disponibles en el registro de npm y todos usan una API similar.

Ejemplo práctico

Para el ejemplo voy a usar el paquete de Adf.ly, por ser quizá el proveedor de este tipo de enlaces más conocido.

Lo primero es instalar el paquete que provee acceso a Adf.ly:

npm install adf.ly --save 

Ahora tenemos que cargar el módulo donde lo vayamos a usar. Aquí tenemos que escribir nuestra clave de API. Si lo dejais vacío seguirá funcionano, pero no ganareis nada, ¡los ingresos irán para mí!

var adfly=require("adf.ly")("TU_CLAVE_DE_API");
o
var adfly=require("adf.ly")();

Para transformar un enlace en normal en uno acortado simplemente se usa el método short.

adfly.short("http://nexcono.appspot.com",function(url){
	console.log("Enlace acortado: "+url);
    // Podemos usar la URL en algún motor de plantillas como Jade o EJS o donde queramos
});

adfly-npm

En el paquete de Shink.in hay una particularidad. Shink.in permite acortar enlace en modo adulto. Esta opción está desactivada por defecto pero si quereis usarla solo hay que indicar true como tercer parámetro

shinkin.short("http://nexcono.appspot.com",procesarURL,true);
// El enlace se acorta en Modo Adulto

Listado de paquetes

El listado completo de paquetes que he creado es este. Todos tienen una API similar.

loading...

Usar GNU Parallel para aumentar el rendimiento de tus scripts

La computación ha avanzado. Ha aumentado la potencia de cálculo. Y no lo ha hecho subiendo la velocidad del reloj del procesador, pues no queremos tener minitostadoras. En vez de eso se ha escogido el camino de paralelizar. Todo lo que sea susceptible de ser paralelizado deberá ser paralelizado. Desafortunadamente la programación en paralelo es compleja y requiere una planificación mucho más larga. ¡Pero no desistamos! ¡Podemos usar GNU Parallel para paralelizar algunas tareas que llevan tiempo pero son independientes las unas de las otras! ¡Usemos GNU Parallel en nuestros scripts!

GNUParallel

Ejemplos prácticos:
– Convertir una biblioteca de MP3 en OGG (con ffmpeg)
– Normalizar el audio (con sox)
– Optimizar las imágenes de un sitio web (con OptiPNG, jpegoptim, etc)

Instalar GNU Parallel

En Debian/Ubuntu:

sudo apt install parallel

En Fedora:

dnf install parallel

En openSUSE:

zypper install gnu_parallel

En Arch Linux:

pacman -S parallel

En NetBSD/SmartOS:

pkgin install parallel

Convertir una biblioteca de MP3 en OGG y normalizar el audio

Esta era la tarea que tenía que realizar. Primero realicé una versión sencilla, que funcionaba utilizando un solo core del procesador.

#!/bin/bash
shopt -s globstar
for i in **/*.mp3; do
	BASENAME="${i%.mp3}"
	ffmpeg -i "${BASENAME}.mp3" "${BASENAME}.tmp.ogg"
	sox --show-progress --norm "${BASENAME}.tmp.ogg" "${BASENAME}.ogg"
	rm "${BASENAME}.tmp.ogg"
done

Con este script conseguimos el objetivo que nos habíamos propuesto, pero podemos optimizar el rendimiento. Usando GNU Parallel:

#!/bin/bash

# Guardar como "normalize.sh"

if [ "$2" = "1"  ]; then
	BASENAME="${1%.mp3}"
	ffmpeg -i "${BASENAME}.mp3" "${BASENAME}.tmp.ogg"
	sox --show-progress --norm "${BASENAME}.tmp.ogg" "${BASENAME}.ogg"
	rm "${BASENAME}.tmp.ogg"
else
	find  . -name "*.mp3" | parallel ./normalize.sh "{}" 1
fi

Con esta modificación GNU Parallel se encarga de poner en cola los trabajos de conversión y normalización y los reparte entre los cores disponibles del procesador. La gráfica explica claramente la diferencia de uso entre los dos scripts.

Versión básica

TradicionalCore

Versión GNU Parallel

GNUParallel

Optimizar las imágenes de un sitio web

Aquí viene otro ejemplo que usa GNU Parallel para realizar la tarea más rápidamente.

#!/bin/bash

# Guardar como "optimize-img.sh"

if [ "$2" = "1"  ]; then
	BASENAME="${1%.png}"
	optipng -o7 "${BASENAME}.png"
elif [ "$2" = "2"  ]; then
	BASENAME="${1%.jpg}"
	jpegoptim "${BASENAME}.jpg"
else
	find  . -name "*.png" | parallel ./optimize-img.sh "{}" 1
	find  . -name "*.jpg" | parallel ./optimize-img.sh "{}" 2
fi

Hay muchos más usos para GNU Parallel, solo tienes que usar tu imaginación. ¿Y tú? ¿Conocías GNU Parallel? ¿Qué opinas al respecto?

La gran lista de BitCoins gratis

¿Quieres algún BitCoin extra? En estas páginas encontrarás metódos gratuitos para aumentar los números de tu monedero BitCoin. Las páginas se encuentran agrupadas por categorías y en ninguna es necesario registrarse.

Bitcoin

Visitar páginas

Faucets

3 minutos

4 minutos

5 minutos

10 minutos

15 minutos

20 minutos

30 minutos

45 minutos

1 hora

24 horas