desarrollo

VSCode – Asociar archivos .module con PHP

Cuando trabajamos con VSCode, el editor nos reconoce el tipo de lenguaje de programacion y establece los colorcitos necesarios para identificar facilmente errores o bloques de codigo.

Sin embargo, algunos archivos no son reconocidos como escritos en PHP. Un ejemplo de estos, son los archivos .module en Drupal.

Para poder indicarle a VSCode que los archivos .MODULE son archivos en PHP debemos ir a FILE -> PREFERENCES -> SETTINGS

Ahi usamos el buscador de propiedades y buscamos files associations

Ahi, seleccionamos la opcion Edit in settings.json y escribimos la siguiente configuracion:

Creamos un objeto “files.associations” y dentro de el una propiedad por cada extension “*.module” y le indicamos que lenguaje de programacion va a parsear el archivo.

 

🐳 Dockerfile – Instalar paquetes noninteractive

Al momento de crear una imagen personalizada usando dockerfile es necesario instalar paquetes de software y algunos de estos vienen con un set de preguntas para ti.

Hoy dia por ejemplo, tuve que instalar un apache sobre una imagen de ubuntu y queria saber en que Region / Ciudad vivia. Al ejecutar el comando docker-compose build … ahi quedaba mi intento por configurar mi sistema. No habia forma de saltar ese paso.

Para poder evitarlo, le indique al script de docker ( dockerfile ) que estableciera la variable de sistema DEBIAN_FRONTEND como noninteractive.

FROM ubuntu

ARG DEBIAN_FRONTEND=noninteractive
RUN \
apt-get update && \
apt-get install -qq -y php-pgsql postgresql-all libapache2-mod-php

Una vez realizado esto, ya disponia de mi entorno listo para trabajar.

#HappyCoding

🐍Como crear un xls en Django

Django es un framework muy popular ( el omnipresente ) en proyectos web con Python. El modulo que vamos a usar para generar archivos Excel ( XLS ) se llama openpyxl.

Puedes instalarlo en tu computadora usando el comando pip, y puedes usarlo no solo en proyectos Django, sino tambien en scripts de administracion de python, etc.

pip install openpyxl

OpenpyXL es una libreria muy completa para el manejo de archivos XLS. Te permite trabajar con pestañas, formulas, estilos, etc. En NODEJS suelo utilizar otra libreria ( json-to-xls ) que como su nombre lo indica es mucho, mucho mas simple. Sin embargo, OpenpyXL a pesar de poder abarcara muchas opciones mantiene su simplicidad, lo cual se agradece.

Ahora bien, vamos al codigo. Lo primero es importar la libreriria

import openpyxl

Y con eso crear nuestro woorkbook ( este sera nuestro archivo xls final )

book = openpyxl.Workbook()

Recuerden que en excel tenemos pestañas en la parte inferior, esas se llaman sheets y con openxl podemos manejarlas a nuestro antojo. De momento solo vamos a seleccionar la pestaña por defecto.

sheet = book.active

Una vez que tenemos la variable sheet podemos agregar los registros a nuestro XLS, en este caso vamos a agregar una fila de cabecera primero y luego los datos

sheet.append( ( “Nombre”,”Telefono”, “Email” ) )
for p in personas:
sheet.append( ( p.nombre, p.telefono, p.email  ) )

Con esto ya tenemos listo nuestro archivo XLS. Ahora solo hace falta guardarlo o descargarlo. Vamos a mostrar las dos opciones:

Guardarlo

book.save(“/tmp/nuevoxls.xls”)

Descargarlo

response = HttpResponse(content_type=’application/msexcel’)
response[‘Content-Disposition’] = ‘attachment; filename=nuevoxls.xls’
book.save(response)
return response

Y listo, ya tienen su nuevo XLS generado.

#HappyCoding

🖐️ Ubuntu: Como evitar actualizar el Kernel

En linux los drivers del hardware que usas son desarrollados por la comunidad de software libre. Y como tal, pueden tener algunos bugs en su funcionamiento o pueden simplemente no ser soportados.

En alguna ocasion ( en realidad mas de una ) un hardware puede funcionar bien en una version de los drivers y en la siguiente no 🙁 . Y como la mayoria de los drivers vienen integrado en el kernel de linux, una actualizacion de kernel puede desactivar algun dispositivo de tu maquina.

Para prevenir eso, evito actualizar el kernel una vez que estan todos mis dipositivos funcionando. Podemos bloquear la actualizacion del kernel usando los siguientes comandos:

sudo apt-mark hold linux-image-generic
sudo apt-mark hold linux-headers-generic

Y si deseas volver a actualizarlos, pues debes desmarcarlos:

sudo apt-mark unhold linux-image-generic
sudo apt-mark unhold linux-headers-generic

Deshabilitando el Cache de Drupal para desarrollo

Drupal usa un sistema de cache para mejorar el rendimiento de los sistemas en produccion. Sin embargo, cuando estamos en desarrollo, este puede ser particularmente frustrante.

En mi caso, tengo que ir a la consola casi con cada cambio para ejecutar drush cc all o esperar varios minutos a que se apliquen los cambios en algun tema. Cambios que algunas veces puede ser simplemente correccion de algun label.

Investigando sobre el tema encontre un API de Drupal que me permite limpiar mi cache de forma automatica en cada request de drupal.

Solo debes incluir la siguiente funcion en drupal

cache_clear_all(NULL, ‘cache_page’);

Y hacer cambios rapidos en tu template sin tener que estar limpiando cache manualmente.

#HappyCoding

⚙ Docker Compose: no module named ordered_dict

Hoy dia, fallo la ejecucion de docker-compose en uno de mis servidores.

El problema:

E ImportError: No module named ordered_dict

La solución ?

Asegurarnos de tener la version urllib3-1.22, actualmente la version en produccion es la 1.26

Para tal efecto ejecutamos los siguientes comandos

pip uninstall urllib3
pip install urllib3=1.22

#HappyCoding

Bash: Ejecutar un proceso en domingo

Tenemos un proceso configurado en CRON para ejecutar un script de bash. Sin embargo, ciertas partes de dicho proceso solo deben ejecutarse un dia a la semana.

Para eso vamos a programar nuestro script en bash para solo se ejecute en domingo.

day=`date +%u`
if [ $day eq 0 ]; then
# Proceso que se ejecuta solo en domingo
fi

El comando date +%u nos devuelve el numero de dia de la semana.
Siendo 0 domingo, 1 Lunes, 2 Martes, 3 Miercoles, 4 Jueves, 5 Viernes, 6 Sabado.

#HappyCoding

Como convertir imagenes webp a png usando la linea de comandos

El formato webp, es el “nuevo” formato de google para compresion de imagenes sin perdida ideal para internet. Una misma imagen en webp ( 94k ) y en png ( 1.1 M ).

Sin embargo,  no todas las aplicaciones de linux ( o windows o mac ) estan preparadas para trabajar con este formato. Asi que para poder usarlas fuera del navegador deberemos convertirlas.

En linux existe una herramiento webp que vamos a instalar

sudo apt install webp

Y ahora podemos hacer la conversion con el siguiente comando

dwebp <imagen.webp>  -o <imagen.png>

Por si acaso, tambien podemos hacer el camino inverso. Hacer la conversion al nuevo formato webp usando el comando

cwebp <imagen.png> -o <imagen.webp>

Yo ya tengo varios proyectos web y mobiles donde valdria la pena usarla.

NodeJS mySQL NOT SUPPORTED AUTH MODE

Recientemente al actualizar mi maquina de desarrollo me tope con el siguiente error desde NodeJS

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Era evidente un problema de configuracion ya que dias atras la app funcionaba correctamente y no habia sido modificada.

Para solucionar este problema debes entrar en la consola de mysql:

sudo mysql -u root

Y ejecutar el siguiente comando

update mysql.user set authentication_string=password(''), plugin='mysql_native_password' where user='root';

Y luego proceder a reiniciar el servicio

sudo service mysql restart