Archivo de la etiqueta: github

Instalar htop 2.0 desde código fuente

Hace unos pocos días me entere por la cuenta de @nixcraft en twitter que htop 2.0 había sido liberado en el FOSDEM 2016 por Hisham Muhammad su autor original desde 2004.

htop 2.0 vídeo charla multiplataforma

Aparte de que la principal mejora es que es multiplataforma para Linux, FreeBSD, OpenBSD and Mac OS X gracias a las contribuciones que ha tenido en Github. Se han incluido muchas otras mejoras (si tienes disponible ncurses 6) (en CentOs 6.X de base solo se ofrece ncurses 5 ya que fue liberado ncurses 6 en agosto de 2015).

Principales mejoras

htop 2.0 apariencia en ejecución
htop 2.0 apariencia en ejecución

Algunas de las principales mejoras en htop 2.0 son:

  • Soporte de load con gráfica de puntos
  • Mostrar los GB de memoria en lugar de MB
  • Mostrar las variables de entorno de cada proceso presionando ‘e’
  • Código independizado para cada plataforma (más facilidad para futuros desarrollos y plataformas)
  • Enfoque de programación orientada a objetos en el código fuente (OOP).

Instalación desde fuentes

He creado un pequeño script en Github para que puedas instalarlo fácilmente desde mi colección de scripts con el comando:

wget https://raw.githubusercontent.com/shakaran/scripts/master/setup-htop2.sh -O - | bash

O bien con curl:

curl -fsSL https://raw.githubusercontent.com/shakaran/scripts/master/setup-htop2.sh | bash

Instalarlo con el script es…

Solucionar error symbol lookup error: suhosin.so: undefined symbol: php_mb_encoding_translation en PHP 5.4 con cPanel

Suhosin logo
Suhosin logo de Hardened PHP Project

Si has actualizado a PHP 5.4 en cPanel es posible que durante la subida de archivos u otras partes de tu código PHP te encuentres el siguiente error en el error_log de Apache.

/usr/bin/php: symbol lookup error: /usr/local/lib/php/extensions/no-debug-non-zts-20100525/suhosin.so:
 undefined symbol: php_mb_encoding_translation

Este error sólo se produce si además tienes activo Suhosin. Oficialmente PHP 5.4 no tiene soporte para Suhosin, pero esta extensión es muy necesaria para el uso de servidores compartidos, debido a que ofrece bastantes características de seguridad adicionales a la instalación base de PHP.

El problema se debe a que varias funciones relacionadas con mb string no estan presentes en el código fuente de PHP (probablemente porque cPanel usa una versión propia y ligeramente modificada del código original de PHP), donde puede haber sido eliminada la función php_mb_encoding_translation

Podemos observar, que en el código fuente de la versión PHP 5.4.19 se encuentra definida la función php_mb_encoding_translation() en concreto en /ext/mbstring/mbstring.c:102. Teóricamente esta función existe en el código nativo de PHP y suhosin debería poder utilizarla, pero al ser la versión PHP personalizada de cPanel no esta presente y suhosin falla al ejecutar el código php y eso producirá un error 500 en Apache abortando la ejecución del script.

Afortunadamente, existe un parche en Github en forma de Pull Request cuyo autor es Jan Ingvoldstad, que no ha sido aún aceptada después de más de 8 meses (al momento de escribir este artículo).

Puedes aplicar directamente el parche en el código fuente de github y compilarlo. En mi caso, he creado un repositorio aparte haciendo cherry picking del parche y de otros parches adicionales que corrigen otros errores en PHP 5.4 con suhosin y aún no han sido fusionados en el proyecto original.

La forma rápida de solucionarlo sería:

1 – Clonar mi repositorio de Suhosin con los parches aplicados (cherry picking)

git clone -b master --single-branch http://github.com/shakaran/suhosin.git suhosin-shakaran

2 – Compilar e instalar suhosin desde mi rama. En una sola línea sería:

cd suhosin-shakaran; phpize; ./configure; make; make install

Pero si quieres hacer tu propio cherry picking te explico como podrías hacer lo mismo que yo:

1 – Dirígete a github, en el repositorio oficial de suhosin y haz un fork del proyecto original

2 – Añade como repositorio remoto la rama de Jan Ingvoldstad

git remote add jani-upstream git://github.com/jani/suhosin.git

3 – Baja los commits de dicha rama (solo las referencias)

git fetch jani-upstream

4 – Haz un cherry pick del commit (parche) que arregla el fallo:

git cherry-pick e8beb4f50fa997c0ea4b923677deb275cc7660e

5 – Compila con:

cd suhosin-shakaran; phpize; ./configure; make; make install

Y listo, tendrás tu propio branch con tu parche aplicado.

pygifme un simple comando para generar gif animados

pygifme Generar GIFs fácilmente en Python
pygifme = pygifme generar GIFs fácilmente via Python

pygifme es un script en python que he portado como desarrollo en base al script original gifme escrito en ruby de Zach Holman (GitHub).

El script de ruby es bastante antiguo, pero al utilizarlo y ver su código para ver como funcionaba se me ocurrió portarlo a python como simple práctica y prueba al tratarse de algo sencillo y sin demasiadas dependencias.

La funcionalidad es exactamente la misma, añadiendo un par de pequeños cambios y realizando comprobaciones más exhaustivas internamente. Por respetar el nombre antiguo del script y que no fuera muy largo de escribir lo he llamado “pygifme”. Es bastante útil para generar un .gif desde varias imágenes y evitarse complicaciones con editores gráficos de imágenes.

pygifme instalación

Esta disponible desde pypi (Python Package Index) y desde mi repositorio de código github.

Agradecería las pruebas que se realicen con el script, propuestas de mejoras y reporte de sugerencias si lo deseas.

Instalación

Puede instalarse fácilmente desde pypi con:

$ pip3 install pygifme

También puede instalarse vía el archivo setup.py:

$ python3 setup.py install

También es necesario instalar ImageMagick.

En sistemas GNU/LINUX Debian:

$ sudo apt-get install imagemagick

En OS X, es fácil usando Homebrew:

$ brew install imagemagick

Este script es para Python >= 3.0. También necesita del módulo de python argcomplete si deseas que el autompletado en línea de comandos de pygifme

Puedes instalarlo con:

$ sudo pip3 install argcomplete

O via el archivo requirements.txt:

$ sudo pip3 install -r requirements.txt --use-mirrors

Uso

$ pygifme ~/Desktop/1.png ~/Desktop/2.png
 You now have a handsome animation at ~/Desktop/animated.gif

Por supuesto también puedes agrupar archivos con glob:

$ pygifme ~/Desktop/*.jpg
 You now have a handsome animation at ~/Desktop/animated.gif

CloudApp

Una vez que tu animación haya finalizado, se intentará subir a CloudApp. Si tienes el script de cloudapp instalado, se usara, de lo contrario se omitirá este paso.

Usos super avanzados

En algunos gifs, es bonito tener un bucle suave, para que cuando termine no haya un salto hasta el último fotograma al primero otro vez. Usa la opción ‘–reverse’ o ‘-r’ para crear una animación normal y posteriormente revertir los fotogramas y que estos sean añadidos a la animación, de esta forma parecerá una transición suave.

$ pygifme --reverse ARCHIVOS

Si pasas una URL de un gif (archivo remoto) en lugar de ARCHIVOS, el programa descargará el gif, lo dividirá en fotogramas y te permitirá recrearlo. Por ejemplo, puede tomar un gif online y darle la vuelta con ‘–reverse’:

$ pygifme --reverse http://tumblr.com/some-crazy.gif

También puedes redimensionarlos. Por defecto el tamaño es de 500 píxeles, pero puede cambiarse a lo que necesites.

$ pygifme --width 1000 http://tumblr.com/some-crazy.gif

Para otras muchas más opciones, comprueba la ayuda con:

$ pygifme -h

Ejecutando los test unitarios

Es un simple script, pero puede tener comportamientos inesperados cuando se hacen cosas extrañas con el backend de ImageMagick. Si deseas asegurarte de un comportamiento común, entonces puedes ejecutar la batería de pruebas unitarias con:

$ python3 -m unittest test

O también desde el archivo setup.py (recomendado):

$ sudo python3 setup.py test