Instalar soporte yaml-dev en PHP para OSX

Receta rápida para instalar soporte YAML en PHP 5.6 para OSX Sierra.

Añadir tap de php a brew:

$ brew tap homebrew/homebrew-php

Instalar librería dinámica yaml.so

$ brew install php56-yaml

Comprobar ruta de instalación:

$ ls -l /usr/local/opt/php56-yaml
/usr/local/opt/php56-yaml -> ../Cellar/php56-yaml/1.3.0

Crear php.ini para poder editarlo e indicar que active la carga de yaml.so:

$ sudo cp /etc/php.ini.default /etc/php.ini

Activar extensión en php.ini:

$ sudo vi /etc/php.ini
extension=/usr/local/Cellar/php56-yaml/1.3.0/yaml.so

Comprobar que ha cargado (reiniciar Apache si el soporte YAML se quiere para el servidor web… en mi caso no hacía falta, dado que el soporte se requería para línea de comandos):

$ php -i "(command-line 'phpinfo()')" | grep -i yaml
LibYAML Support => enabled
LibYAML Version => 0.1.7

Depurar, editar y guardar ficheros JS en Google Chrome

Receta rápida para los desarrolladores JavaScript interesados, y para retomar el blog tras un parón de unos cuantos meses (he estado ocupado 🙂

La cuestión es: las DevTools de Google Chrome permiten editar y depurar código JavaScript desde el propio navegador. Pero cuando editas un fichero .js y lo intentas guardar, salta el siguiente error:

chrome no deja grabar ficheros js «Changes to this file were not saved to file system». Vaya… pues qué bien… mmmmhh….  ¿y qué dice StackOverflow al respecto? Que existe una solución 🙂 Vamos allá…

Lo primero: pulsa en el botón de configuración.

Botón configuración

 

 

 

Lo segundo, elige la opción Workspaces y añade las carpetas con las que trabajas (las que contienen tu código JS):

carpeta dropbox

 

Puedes añadir más de una carpeta. Fíjate también que puedes editar mapeos URL –> Carpeta local, pero ahí no me meto (por ahora!)

Ojo, cuando añadas carpetas tendrás que aceptar dar permiso, para cada una, para que DevTools pueda acceder a esos datos en modo lectura/escritura. Esta ventana de solicitud de permisos aparece por debajo, en la ventana de Chrome, así que atento, porque hasta que no la pulses, la carpeta no se añadirá correctamente.

Selection_786 Ya casi está. Si estás usando el protocolo file:// para trabajar con tus ficheros en lugar de http://, ojo, porque en ese caso, deberás abrir tus archivos JS desde la carpeta que acabas de añadir al workspace (no vale abrir el fichero haciendo doble click sobre él desde el escritorio o tecleando la ruta en la barra de direcciones del navegador).

 

Abriendo workspaces Sino que tendrás que ir a la pestaña «Sources» y hacer doble click sobre los ficheros de las carpetas importadas (ojo, no desde file://)

Y a partir de ahora, cualquier cambio realizado en el panel DevTools podrás guardarlo «automágicamente» en el sistema de archivos local con un simple Ctrl+S.

 

Building LibreOffice

1. Get the code

$ git clone git://anongit.freedesktop.org/libreoffice/core

Grab a cup of coffee!

Receiving objects: 100% (2851664/2851664), 917.96 MiB | 2.67 MiB/s, done.

2. in order to speed up the building process we highly recommend to install ccache and create some links to point g++ and gcc compilers to the ccache binary:

 sudo apt-get install ccache
 ln -s /usr/bin/ccache  ~/bin/g++  
 ln -s /usr/bin/ccache ~/bin/gcc  
 ccache --max-size 32G

If you are using a laptop’s hard disk to build LibreOffice, then it would be a good idea to enable also ccache compression:

$ export CCACHE_COMPRESS=1

3. Download all the dependencies needed to build LO:

sudo apt-get build-dep libreoffice

4. Check that dependencies are filled and that we have a well-equipped build environment

./autogen.sh

5. Rock and Roll!

make dev-install

Want to read more about the building process? Then, don’t miss this developer oriented webpage or this one.

Incubando huevos al estilo Apache

Me gusta aplicar herramientas y técnicas que aprendo en la ingeniería de grandes proyectos de software opensource en la gestión y trabajo diario de los Proyectos Fin de Carrera que dirijo (ahora, Trabajos Fin de Grado). Realmente creo que estas técnicas se pueden reutilizar tamb ién y de forma bastante directa en el ámbito empresarial, pero eso lo dejo como tema de discusión para otro día. Ahora quiero centrarme en exponer brevemente, de forma muy resumida, cómo funciona la incubadora de proyectos de Apache.

Apache ofrece cobertura técnica (infraestructura, servidores, listas de correo, espacio en disco…) y legal a los nuevos proyectos que acoge, aparte de permitir asociar su marca, Apache (muy reconocida en el mundo tecnológico) al nuevo proyecto. Éste, a cambio de pasar a formar parte de la incubadora de la fundación (a ser un podling), debe empezar a cumplir ciertos requisitos.

No es fácil llegar a formar parte de la incubadora, hay un largo camino que recorrer, pero una vez que lo consigues y tu proyecto obtiene una dirección en la incubadora Apache, entras, como hemos dicho, en la zona de Podling. Aquí tendrás resposabilidades y mucho trabajo por hacer. Entre otras cosas:

* generar un informe de seguimiento. Uno al mes durante los primeros 3 meses y uno cada 3 meses a partir de ahí.
Puedes ver esta planificación de informes general, o uno en particular (mes de Marzo de 2012)

* mantener actualizada una página con un resumen del estado del proyecto. Por ejemplo, ésta de OpenMeetings.

* atender las listas de correo

* generar novedades en el proyecto. Estas novedades serán recogidas y documentadas de forma automática. Si cada proyecto de la incubadora es visto como un huevo, el nido de huevos sería el clutch de Apache. Y las novedades en el clutch están monitorizadas.

¿Qué se monitoriza? Entre otros datos, los días de incubación, la última fecha de commit en SVN, la última fecha de actualización de la página de estado, el número de nuevos commiters,

Como todo huevo bien cuidado por sus progenitores, eclosionará en algún momento, pasando a ser un potencial proyecto Top Level de Apache (digo potencial porque deberá ser aprobado por votación)

Como ves, la política de incubación es interesante y puede ser aplicada fuera del entorno Apache (en empresas de desarrollo software, en proyectos fin de carrera, trabajos fin de grado…). Lo que está claro es que requiere mucha dedicación y esfuerzo a los responsables del proyecto, así que ahora entenderás mejor porqué algunos proyectos no se deciden a dar el paso de entrar en la incubadora (aparte de que algunos proyectos no quieran usar ni los servicios ni la licencia Apache).

Visualizando un grafo de dependencias en PHP

Receta rápida para visualizar un grafo de dependencias en PHP, como el que acompaña a este post (pincha sobre la imagen para hacer zoom sobre ella). Se trata del grafo de dependencias PHP de la aplicación Babelium Project, pero piensa que el objetivo es aprender a generar un grafo como éste de cualquier aplicación que te interese.

En concreto, queremos ver gráficamente qué ficheros incluyen a qué otros (con include, require o require_once). Para ello, haremos uso de la extensión «inclued» (sí, al parecer es un juego con las letras de include).

$ sudo pear install inclued-beta

Configuramos a continuación el fichero php.ini para activar la extensión, añadiendo esta línea

extension=inclued.so

y en la parte inferior del mismo fichero, una variable de configuración:

[inclued]
inclued.enabled = On

Ahora reiniciamos Apache para que coja los cambios:

$ sudo /etc/init.d/apache2 restart

Editamos la página inicial (index.php o similar) de la aplicación de la queremos obtener el grafo, y añadimos al final lo siguiente:

// File to store the inclued information
$fp = fopen('/tmp/wp.ser', 'w');
if ($fp) {
    $clue = inclued_get_data();
    if ($clue) {
        fwrite($fp, serialize($clue));
    }
    fclose($fp);
}

Esto generará un fichero /tmp/wp.ser con información serializada de los includes y requires que carga index.php y sus ficheros dependientes (es decir, el análisis se hace de forma recursiva)

Sólo falta un paso: usar graphviz para generar un fichero .dot que luego podremos convertir a .png con la utilidad dot.

# creamos el dot
$ php graphviz.php -i /tmp/wp.ser -o wp.dot
# lo convertimos a png
$ dot -Tpng -o inclued.png wp.dot