Entre píxeles y bytes

vagrant-icoLlevaba ya un tiempo con ganas de ponerme a usar de una vez Vagrant. Aun teniendo claro las ventajas que ofrece y todo lo que soluciona, el tema de probarlo, aprender un flujo de trabajo con el, establecer la configuración optima, etc … se hacia imposible dentro del asfixiante día a día en que he estado sometido estos últimos meses.

Pero hoy ha llegado el momento. Realmente instalar y tener en marcha un entorno con Vagrant es sumamente fácil y por lo tanto rápido, en pocos minutos he tenido una VM linux dando servicio Web con PHP 5, MySQL, Node, Composer y algunos “habituales” más, montado en mi portátil Windows.

Continua leyendo …

Recientemente he trabajado en un proyecto web en WordPress en que la web tenia que dar acceso a fuentes de información “externas”, en concreto:

  • Acceder a consultar contenidos en otro servidor. Contenidos que se recibian a traves de un API Rest modelados en JSON.
  • Registrar usuarios en un servicio de newsletter propio del cliente, usando un API SOAP

Implementar esto con WordPress no es muy complicado porque detrás no hay más que PHP, pero quiero dejar anotadas algunas cosas.

Continua leyendo …

En Junio Codeigniter se actualizo a la versión 2.2.0 para implementar algunos ajustes y revisiones básicamente en temas de seguridad (más detalles en su changelog), mientras el desarrollo de la versión 3.0 sigue en GitHub. Lento pero avanzando Codeigniter sigue “vivo y coleando”, y eso es una buena noticia. Llevo usando este framework desde su rama 1.0, no tiene de serie las “vitaminas” de otros pero si una estructura y enfoque practico para determinados desarrollos.

Continua leyendo …

Esto puede parecer absurdo porque en el admin de WordPress ya tenemos una página con el listado de los plugins instalados, activos, etc.

Es un listado muy bonito y con un montón de información de cada plugin pero poco practico en (las escasas) situaciones en las que necesitas tener una lista de los plugins para, por ejemplo, enviarla por e-mail.

Como hacer un copiar/pegar de esta página de plugins de WordPress, con el formato que tiene, no es fácil. La segunda vez que me he encontrado con esta necesidad lo he resuelto creando un plugin que, como podéis ver en la imagen siguiente, nos lista de una manera más básica, los plugins instalados y los activos.

Programando un poco: Un listado fácil de los plugins en WordPress - Daniel Ribes

Y si, ya existe algún otro plugin que hace también esto, pero ¿y lo divertido que es hacerse uno mismo estas cosas?

El codigo del plugin, al que en un golpe de creatividad he llamado “Plugins Inventory” esta disponible en bitbucket.org

Un simple truco (y a falta de una función oficial)  para obtener los datos de todos los sidebars que estan registrados en un theme de WordPress, usar la variable $wp_registered_sidebars.

Esta variable es un array de uso interno del WP, con la información de cada sidebar registrado por el theme en curso, con lo que tenemos una manera rápida de saber que está registrado y su ID, por ejempo. Para usarlo basta con algo asi:

global $wp_registered_sidebars;
print_r($wp_registered_sidebars);

Esta es una de esas cosas que usas poco y que cuando la necesitas no la recuerdas, por lo tanto dejo constancia de ella aquí. La función en si es muy simple, devuelve un array con todos los shortcode que encuentra en el content de un post o una pagina.

Entre los hooks que expone la API de WordPress uno de los más usados es el wp_head, que permite añadir contenido en la sección HEAD del HTML que genera WordPress.

Para usarlo basta usar una llamada del tipo:

add_action('wp_head', 'nombre_de_nuestra_funcion');

Y luego definir una función, con el nombre que hemos indicado en ‘nombre_de_nuestra_funcion’, que sera la encargada de generar el contenido que queremos añadir al HEAD.

Esto lo podemos añadir en el functions.php del theme, o mucho mejor, definirlo como un plugin y de esta manera queda independiente de los ficheros usados en el theme.

El contenido que añadamos al HEAD usando esta tecnica, ya queda bajo nuestra responsabilidad, WordPress aqui no realiza ningun tipo de filtraje.

Por otra parte todo esto funcionara si en el fichero correspondiente del theme (generalmente el head.php) se usa la función wp_head() antes de cerrar el HEAD, ya que precisamente esta función es la encargada de dar el control al WordPress para escribir en el HEAD de un documento.

Un ejemplo más concreto. Cuando compartimos una URL en Facebook, este busca imagenes dentro del documento referenciado para usar una como miniatura del enlace que compartimos. Usando el protocolo OpenGraph podemos indicar a Facebook que imagen concreta queremos que muestre.

Para hacer esto basta con que en el HEAD añadamos este META:

meta property="og:image" content="LA_URL_DE_NUESTRA_IMAGEN"

Teniendo esto en cuenta podemos hacer que Facebook use como miniatura la imagen destacada de nuestro post.

El siguiente código realiza precisamente esto y se implementa como un plugin que una vez activado, y solo para las paginas tipo post que tengan una imagen destacada, añade el meta og:image indicando a Facebook que esta es la imagen que preferimos usar.

Ya lo tenemos aquí, las novedades más destacadas, de cara al usuario, son básicamente en edición de contenidos:

  • Mejoras en el editor, destacando la posibilidad de pegar directamente de
    Word y que se haga “limpieza automática”
  • Mejoras en la subida y edición de imágenes que se añaden a una entrada,
    facilitando recortar y escalar imágenes
  • La galerias ahora se previsualizan dentro la edición de una entrada, hasta ahora
    solo se mostraba un rectángulo gris
  • Mejoras en el selector de temas y ne la vista previa de personalización de widgets
  • Mejoras en la inclusión de audio y vídeo, con listas de reproducción

Como es habitual, en los próximos días, Internet se llenara de análisis detallados y probablemente tendremos la típica actualización a 3.9.1

Configurando un antiguo MacOSX 10.6.8 para ejecutar PHP y MYSQL, lo típico, el PHP se activa editando el archivo de configuración del Apache que viene de serie con el MacOSX.

MySQL se descarga e instala, pero luego necesita arrancar el socket que usara PHP para trabajar con el y resulta que (al menos en el 10.6.8) el fichero esta en un sitio, y en la configuración del PHP.INI apunta a otra parte. Bueno, la solución fácil es buscar donde esta el socket con un:

sudo find / -name "mysql.sock"

Y una vez localizada su ruta, una de dos o creamos un link simbólico con ln -s entre la ruta esperada y la real, o editamos el PHP.INI y le ponemos su ruta real. He preferido crear el simbólico.

Me gusta leer regularmente a Eric Sink, no solo por lo que aprendes de su larga experiencia como desarrollador sino también por su estilo directo, didáctico y su fina irónia, por ejemplo de su ultimo post “EF6 on Xamarin: Progress (or lack thereof)” me quedo con esta frase:

But I would bet a dollar that at least one person has claimed that “EF is too big for mobile” and then proceeded to play “Star Wars: Knights of the Old Republic” on their iPhone.

Siempre directo y claro Eric Sink