La historia es la siguiente: Rodrigo Ferrari (@_safari) creó una cuenta de Twitter con el nombre losluksic en marzo del 2010, con el evidente objetivo de parodiar a una de las familias más poderosas de Chile.

LOS LUKSIC dibujado por Asterisko para El Malhumor

El lunes la fiscalía logró su formalización en el delito de suplantación de identidad, en un proceso que implicó la dedicación de la policía de investigaciones en “vigilancia discreta” de Ferrari y la obtención de datos desde el ISP (VTR) sin orden judicial.

Este caso representa el triste estado de la legislación sobre libertad de expresión en internet en Chile como la abismante desigualdad en el acceso a la justicia, en tanto el alcance de la indagación es manifiestamente desmedida en proporción al hecho, ya que en el transcurso de dos años de investigación con recursos fiscales ha recurrido a métodos utilizados en delitos graves como narcotráfico (con la consecuente transgresión a la vida privada de Ferrari) en circunstancias que ni siquiera existe perjuicio económico sino solamente un rasguño en el ego de Luksic.

Más información en:

A estas alturas, para nadie debería ser una sorpresa la existencia de servicios como Dropbox, Google Drive o Ubuntu One, que te permiten almacenar una carpeta en “la nube” y compartir archivos con tus contactos.

Si bien todos estos servicios cumplen de forma satisfactoria con su propósito, ownCloud te permite armar un servicio con características similares completamente bajo tu control, que es una buena alternativa para implementar un sistema colaborativo de bajo costo o reutilizar una máquina en desuso.

Lo puedes utilizar para montar un repositorio de archivos compartidos de forma muy fácil: te permite gestionar cuotas de almacenamiento por usuario, compartir con grupos o usuarios en específico (o incluso a través de un enlace público que puede estar protegido con contraseña) y guardar el historial de versiones de un archivo. Se aprovecha muy bien como una herramienta de trabajo en equipo.

ownCloud

Además es posible acceder a través de WebDAV, por lo que se puede integrar con distintos programas que soportan este protocolo: en Linux se integra perfecto con los gestores de archivos de Gnome y KDE, en OSX funciona a medias con Finder ya que su implementación del protocolo tiene más de algún problema (puedes usar Transmit), y también hay clientes para Windows, Android, iOS, etc. De todos modos, la interfaz web es muy cómoda y potente. Existen también clientes de sincronización tipo Dropbox, es decir, que monitorean una carpeta local y la mantienen actualizada.

También tiene otras funcionalidades que quizás no son tan críticas pero sí definitivamente agradables, como la posibilidad de navegar por las imágenes de tus archivos como galerías de imágenes, poder escuchar directamente archivos MP3, previsualizador de archivos PDF y ODT (LibreOffice), etc; y puedes agregar más aplicaciones a modo de plugins, a través de la misma interfaz de administración.

Dashboard Posts Stats

Hace algunos días, necesitaba crear una forma de visualizar la cantidad de entradas publicadas en un sitio. Después de algunas líneas de PHP y Javascript, tenía un pequeño widget para el escritorio de WordPress funcionando, y tras un par de vueltas más decidí compartirlo como plugin.

El resultado es Dashboard Posts Stats que te permite ver la actividad de publicación durante los últimos 30 días.

Por el momento es muy sencillo, pero ciertamente hay varias ideas y pendientes que pretendo aplicar para hacerlo cada vez más útil.

Se puede descargar desde el repositorio de plugins de WordPress, y si tienes alguna idea, solicitud o contribución, puedes enviarla a su repositorio en GitHub.

La clase WP_Post recientemente introducida en WordPress 3.5 permite facilitar muchas tareas comunes en el desarrollo sobre este CMS, en particular el trabajo con campos personalizados almacenados en la tabla {$wpdb->prefix}postmeta.

Sin embargo, la forma en que está implementada esta clase aparentemente pone una limitante importante, ya que al estar definida como final no puede ser extendida mediante herencia:

class MiPost extends WP_Post{}
// Error Fatal: Class MiPost may not inherit from final class

Sin embargo, y aunque quizás no parezca obvio, es totalmente posible extender la funcionalidad de esta clase no utilizando herencia sino composición, por ejemplo, utilizando el patrón Decorator.

abstract class PostDecorator{
	
	/**
	 * Almacena el objeto post
	 * @access private
	 */
	private $post;
	
	/**
	 * @param object $post Un objeto de tipo WP_Post
	 */
	public function __construct( WP_Post $post ){
		$this->post = $post;
	}
}


class PostProyecto extends PostDecorator{
	
	/**
	 * @param string Nombre de la propiedad que se desea obtener
	 * @return string Valor de la propiedad
	 */
	public function __get( $key ){
		// permite acceso como $objeto->autor
		if ( $key === 'autor' )
			return $this->getAuthor();

		// si no corresponde a la funcionalidad que estamos agregando
		// podemos aprovechar el método __get() del objeto post
		return $this->post->{ $key };
	}

	/**
	 * @return string Nombre del autor o enlace
	 */
	public function getAuthor(){
		// el nombre del autor se almacena como un post meta con clave "_author"
		$author     = $this->post->_author;
		// la url está en un post meta con clave "_author_url"
		$author_url = $this->post->_author_url;
		return ( $author_url ) ? '<a href="'. esc_url($author_url) .'">'. $author .'</a>' : $author;
	}

}



$project_post = get_post(123);
$project = new PostProyecto( $project_post );

echo $project->autor;
// <a href="http://felipe.lv">Felipe</a>

De este modo, podríamos crear una clase para cada tipo personalizado de contenido, de modo de poder separar ordenadamente la lógica de la presentación y obtener una sintaxis muy clara y simple.

Una de las novedades más interesantes para desarrolladores que trae WordPress 3.5 es que a partir de esta versión los objetos tipo “post” ya no son objetos estándares de PHP (stdClass) sino instancias de WP_Post.

Por supuesto, este cambio está asociado a algunas ventajas inmediatas, relacionadas con una mejor performance y una optimización en que estos objetos se pueden almacenar en la caché de objetos (sobre todo si estás usando una caché externa, como APC, XCache o memcached). Esto es en parte debido a la utilización de métodos mágicos, tales como __isset( $key ), y el que resulta mucho más interesante, __get( $key ), que por ejemplo, permite cargar los “ancestros” de una entrada sobre demanda (con “lazy loading”), pero además tiene la posiblidad de cargar cualquier campo personalizado con la misma técnica.

En la práctica, esto significa que la utilización de datos de postmeta es muchísimo más sencilla. Por ejemplo:

<?php

// WordPress pre-3.5
// Deseo mostrar el campo personalizado "_ubicacion"
$ubicacion = get_post_meta( $post->ID, '_ubicacion', true );
echo $ubicacion;

// WordPres 3.5+
echo $post->_ubicacion;

Es decir, puedes acceder cualquier postmeta simplemente indicando el correspondiente meta_key como propiedad del objeto $post… ¡más conveniente, imposible!

Y si como yo tienes una “sana preocupación” por la performance de esta funcionalidad, puedes estar tranquilo: desde hace varias versiones WordPress carga en caché toda la información de postmeta al acceder a cualquier campo personalizado, lo que significa que no estará realizando una consulta a la base de datos cada vez que debas acceder a una propiedad de postmeta.

El único “pero” de la implementación de la clase WP_Post es que está marcada en el core como una clase final, por lo que si deseas utilizarla en un contexto mayor, no podrás extender la clase mediante herencia (como en MiClase extends WP_Post), sino que deberás hacerlo mediante composición, un patrón de diseño que quizás es un poco menos obvio… pero eso es motivo para otro post.

The Open Web, Fuck Yeah! | hueniverse

Is your new thing so fucking amazing that people are going to install your app and give it a chance? Statistically speaking, unless you are best friend with a famous celebrity or Apple decides to feature your app in one of their top categories or search results, you are pretty much fucked Source: The Open …

The app boom is over – Recode

The mobile app boom kicked off in July 2008, when Apple introduced the App Store. Now it is over. Even the very biggest app publishers are seeing their growth slow down or stop altogether. Most people have all the apps they want and/or need. They’re not looking for new ones.

The challenges of formatting currency data

Localization and internationalization of an app or site it’s a challenge that’s not specially hard on the technical side, but that it can ceirtanly become difficult for social and behavioral aspects, such as our own etnocentrism, lack of standardized standards, or even standards that conflict with actual use or user expectations. The development team at …

Sigmund Freud’s couch

99% invisible tells the story of how Sigmund Freud’s couch came to be the symbol of psychoanalysis… even if it ceased to be as widely used as one might think based on movies and cartoons.