La simplificación de la complejidad de la arquitectura de las aplicaciones web

La nueva generación de javascripters cree que inventó justo ayer la programación web, pero resulta que hace 25 años ya se libraba la misma batalla que libran ahora, sólo que exclusivamente con LAMP. A Docker y Kubernetes no se llegó precisamente de sopetón… La solución a los problemas fue aumentar la complejidad, lo que a su vez creó nuevos problemas, esta situación y su evolución se describe en este breve artículo de Ben Johnson de lectura muy recomendable.

Asimismo, propone una solución en la que se deshace gran parte de la complejidad añadida durante más de 2 décadas. Esta solución consiste en aumentar la capacidad de un servidor en vez de aumentar el número de los mismos y emplear… ¡el denostado SQLite! (Al menos denostado para las aplicaciones web) Hoy en día Amazon, a través de AWS, ofrece servidores con 96 núcleos y cientos de gigas de RAM. En un servidor bastante más grande, pero dentro de lo que puede administrar un kernel de Linux, se ha conseguido con SQLite la friolera de 4 millones de consultas SQL por segundo con un solo hilo.

El inconveniente de SQLite, es que a diferencia de los sistemas gestores de bases de datos relacionales como MySQL u Oracle, no tiene capacidades de red, con lo que no hay replicación de los datos a otros servidores, entre otros inconvenientes, por lo que si el servidor revienta, se perdieron los datos desde la última copia de seguridad realizada. Para solucionar este problema, Ben ha creado Litestream, una herramienta que se encarga de replicar continuamente una base de datos SQLite en un Amazon S3 (un servicio de almacenamiento en la nube).

Curiosa e interesante iniciativa, que lleva el principio KISS (Keep it simple, stupid!) al extremo. A ver cómo evoluciona…

Uso avanzado de Find y Grep

comando grep

Durante todos mis años de desarrollado LAMP, han habido una serie de comandos UNIX que me han sido muy útiles. En este artículo voy a compartir unos ejemplos de su uso que van más allá de su empleo básico, con el objetivo de que sirva de ayuda para otros desarrolladores. En esta ocasión voy a centrarme en find y grep, más adelante me gustaría ampliar este artículo con otros comandos que facilitan la vida al programador y al usuario de Unix / Linux en general.

Entrada, salida y su redireccionamiento

Antes de empezar, no estaría de más, para una mayor claridad de los ejemplos, explicar que en Unix el standard output (salida) e input (entrada) es la consola. Debemos tenerlo en cuenta para redireccionar tanto la salida como la entrada de datos de las órdenes mediante pipelines ( < > | ) Sigue leyendo

Cómo alargar la duración de la batería en un portátil con Linux

Batería bajaDesde sus inicios y hasta hoy los portátiles, como todos los ordenadores, han ido incorporando un hardware cada vez más potente que conlleva un aumento del consumo energético. A pesar de que se sigue logrando que un elemento de hardware en su versión para portátiles tenga un menor consumo que su equivalente para ordenadores de sobremesa y de los avances en la capacidad de las baterías, no se ha logrado aumentar la duración de la batería, más bien ha sido al contrario.

El software, concretamente el sistema operativo, también está involucrado y es clave en el aumento de la duración de la batería. Así como Windows entra en modo de ahorro de energía cuando el equipo se alimenta de la batería, podemos lograr lo mismo con Linux. Para ello existe el paquete Tlp, disponible para las distribuciones Ubuntu, Mint, Arch, Fedora, Debian y Gentoo. Veamos como se instala en Ubuntu o cualquier otra distribución que use el sistema APT:

sudo apt-get install tlp tlp-rdw
sudo tlp start

Con tan sólo estas dos líneas en la shell ya está instalado y se iniciará cada vez que arranque el equipo. Para asegurarnos de que está correctamente instalado podemos usar la siguiente orden:

tlp-stat -s

Si todo ha ido bien debe devolver algo parecido a esto:

--- TLP 0.8 --------------------------------------------
+++ System Info
System = Notebook Not Applicable W51PU
BIOS = 5.12
Release = Ubuntu 16.04.3 LTS
Kernel = 4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:59 UTC 2017 x86_64
/proc/cmdline = BOOT_IMAGE=/boot/vmlinuz-4.10.0-37-generic.efi.signed root=UUID=20661533-13a9-49ec-8c9e-e4e601699661 ro quiet splash vt.handoff=7
Init system = systemd

+++ System Status
TLP power save = enabled
power source = AC

Además Tlp es una manera muy sencilla de tener el equipo configurado para una bajo consumo de energía sin necesidad de entender los aspectos técnicos. Tan es así que no es necesario pelearnos con sus opciones de configuración pues la configuración que lleva por defecto es suficiente: podemos instalarlo y olvidarnos.

Ya para finalizar, doy un pequeño tirón de orejas a Pcubuntu.es, quienes me vendieron este equipo sin ninguna herramienta para economizar la batería. Después de instalarla la duración de la batería ha pasado a ser el doble. Además de crítica a la empresa, sirva esto también como ejemplo para el lector del ahorro que supone tenerla instalada. Sin duda debería venir incorporada pues es a lo que otros sistemas operativos nos han acostumbrado a todos los usuarios, ténganlo en cuenta señores de Pcubuntu.es

Vant MiniMoove 11,6″ Pentium N4200

Hacía un par de meses que tenía la idea de comprar algún dispositivo para aprovechar las largas horas que paso en el transporte público, 34 horas mensuales según Google Maps Timeline. Obviamente está la opción del móvil que, como todo el mundo, llevo tiempo usando, pero quería algo donde poder leer más cómodamente, así que dudaba entre una tableta y un portátil. Finalmente me decanté por el portátil pues con él, además de leer, también puedo adelantar trabajo: desde responder un email a programar pues puedo instarle un IDE, un servidor web, etc. La conexión a Internet no es problema pues la proporciona el móvil mediante Bluetooth.

Recientemente ha sido mi cumpleaños, ocasión para que la familia aportara capital como regalo para comprar el ordenador que había ojeado por Internet: el Vant MiniMoove 11,6″, Pentium N4200. Como podéis ver por el tamaño de la pantalla, se trata de un portátil realmente pequeño, por lo que cumple los dos requerimientos más importantes para el uso que le voy a dar: fácil de transportar y larga duración de la batería.

 

Vant MiniMoove 11,6″ Pentium N4200

Su pantalla de 11,6 pulgadas en todo su esplendor.

La parte final de su nombre hace referencia a la CPU. Se trata de la siguiente generación de las series Atom de Intel. Está compuesta por cuatro núcleos y un reloj entre 1.1 y 2.5 GHz. En este modelo es de 1.1 GHz, probablemente porque la refrigeración de la CPU no es muy óptima y con una mayor velocidad hay riesgo de que se sobrecaliente. También incorpora una GPU aunque es bastante irrelevante para el uso que le voy a dar.

Como en mi experiencia para el rendimiento es más determinante la memoria que la CPU, lo compré con 8 GB en vez de los 2 GB del modelo básico. Hay que tener en cuenta que dispone de un único slot para la memoria, por lo que no existe la opción de añadirle otro DIMM del mismo tamaño más adelante para duplicar la memoria, si lo hubiera comprado con menos y quisiera ampliarla más adelante debería desechar el DIMM viejo y reemplazarlo por otro de mayor capacidad.

Otro factor importante para el rendimiento del equipo, por detrás de la memoria, es la velocidad del disco duro. Escogí un disco duro sólido, por ser estos mucho más rápidos que los mecánicos. En cuanto a la capacidad de almacenamiento, es de tan solo 128 GB frente a los mecánicos de 1 o 2 TB y aunque se puede optar por un disco sólido con el doble o triple de capacidad, los 128GB de este cubren sobradamente mis necesidades de almacenamiento y no me compensa el incremento del precio de los discos de mayor capacidad.

Sobre los discos duros sugiero al lector no comprar ningún pequeño portátil Windows con disco duro mecánico pues, a día de hoy, todos se venden con Windows 10, la versión 8 desapareció del mercado, y el uso del disco duro que hace el último sistema operativo de Microsoft es tan intensivo que sólo un disco sólido puede proporcionar al usuario una experiencia óptima. En definitiva, sólo un portátil de altas prestaciones puede proporcionar al usuario una experiencia óptima en Windows 10.

Para este portátil me decanté por un Linux como sistema operativo. Además de ser el de mi preferencia tanto para ordenadores de sobremesa como para portátiles por las ventajas que he expuesto en este blog, en el caso de un Notebook se añade la ventaja de consumir menos recursos, la cual destaca cuando los recursos son algo más limitados.

GNU/ Linux Inside Vant MiniMoove 11,6″ Pentium N4200

Tux inside.

El precio total, IVA incluido, con el canon digital de la ADEPI, es de 383€ sin los gatos de envío. Creo que he comprado un notebook reducido en el precio pero no en las prestaciones pues un equipo de rendimiento similar pero con Windows estaría por encima de los 500€.

Teclado Vant MiniMoove 11,6″ Pentium N4200

Teclado de membrana. Mejor tratarlo con suavidad si quiero que dure años.

Lateral izquierdo Vant MiniMoove 11,6″ Pentium N4200

De izquierda a derecha: conectores VGA, HDMI, USB 3.0 y las clavijas del micrófono y del audio.

Lateral derecho Vant MiniMoove 11,6″ Pentium N4200

De izquierda a derecha: 2 puertos USB 2.0, lector de tarjetas, conector de red RJ-45 y alimentación.

Si os interesa comprar un ordenador con Linux y por lo tanto no queréis pagar una licencia de un software que tampoco vais a usar, echadle un vistazo a Vant, una marca de ordenadores que vienen con la distribución Ubuntu de Linux instalada. Este modelo lo compré a través de Pcubuntu. De momento todo ha ido bien, las únicas dos pequeñas quejas que tengo están relacionadas con la configuración del sistema operativo:

Sobre este último punto, cómo aumentar la duración de la batería en los portátiles con Linux, escribiré en un próximo artículo.

Modificar imágenes desde la línea de comandos con ImageMagick

ImageMagick es un completísimo paquete de programas multiplataforma para el tratamiento de imágenes. A diferencia de programas como Photoshop o Gimp, los programas que lo componen se ejecutan desde la línea de comandos, aunque también dispone de un sencillo entorno para X Window en Linux.

Entorno gráfico de ImageMagick en Linux

Tiene numerosas herramientas que, entre otras cosas, permiten:

  • Convertir entre una gran cantidad de formatos de imágenes.
  • Manipular la paleta de colores de una imagen.
  • Añadir tramados.
  • Crear un gif animado a partir de varias imágenes.
  • Superponer una imagen encima de otra.
  • Añadir texto a una imagen.

En la documentación se puede ver un listado detallado.

En la web es frecuente que el gestor de contenidos cree automáticamente réplicas de diferentes tamaños a partir de una imagen subida por el usuario para su correcta visualización en diferentes páginas. Por lo tanto, sin duda lo más usado para la web es su capacidad de reescalar imágenes, para lo que usa el algoritmo de «liquid rescaling«. Ademas la modificación de tamaño es muy flexible, permitiéndonos lograr la modificación que estemos buscando.

Tal vez algún lector se esté preguntando que habiendo programas con entorno gráfico como los citados más arriba, para qué trabajar en el modo texto de la shell de Linux/Unix. Veamos entonces un caso en que sería conveniente. Resulta fácil que una web acabe teniendo miles de imágenes distribuidas en cientos o miles de directorios, pues, por cada imagen que el administrador del contenido sube se van a crear varias copias con diferentes tamaños. Fácilmente el total de imágenes de un catálogo de productos, por ejemplo, se vuelve inmenso. Imaginemos que un cambio de diseño o la necesidad de hacer la web responsive hace necesario modificar el tamaño de una de las copias que se estaba guardando de cada imagen. En vez de modificarlas una a una con nuestro programa de edición de imágenes favorito, se puede crear un shell script como este:

ls *jpg | while read i
do
f=`basename $i .jpg`
convert $i -resize 200x200 smaller-$f.jpg
done

Lo que hace es buscar todas las imágenes jpg del directorio y gracias al comando convert de ImageMagick crea una copia más pequeña reescalada a 200×200 píxeles cuyo nombre será la cadena «smaller-» concatenada al nombre del fichero original. Fácilmente se podría modificar el script para que recorriera recursivamente todos los subdirectorios.

Todo lo que nos ofrece ImageMagick se puede utilizar desde diferentes lenguajes de programación y no solo porque desde éstos se pueda invocar comandos en la shell* y por lo tanto a ImageMagick, si no que el paquete ha sido portado. Está disponible en Java, .NET, Ruby, Pearl, Python, Php, etc. Aquí hay una lista detallada de todos.

En el caso concreto de PHP existe la extensión nativa IMagick. Sin duda es GD la extensión más extendida, valga la redundancia, en PHP. A pesar de su mayor propagación, y como es tan frecuente en el mundo de la informática, IMagick presenta algunas ventajas sobre GD que la convierten en una mejor extensión para trabajar con imágenes. Aquí un artículo con una comparación entre ambas.


* Como hace Drupal, el extendido CMS en PHP.


Aunque la palabra comando es un calco de inglés y en español es más correcto usar orden o instrucción, uso el término que usamos habitualmente en nuestro trabajo.