Integra las licencias Creative Commons en tu HTML con ccRel

ccREL es una forma de añadir la licencia Creative Commons a nuestros contenidos web. Su uso es muy sencillo, aunque a mi no me ha validado el HTML, si alguien sabe como conseguir que valide que lo diga:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://creativecommons.org/ns">
<head>
<title>Judith Myerson's Stuff</title>
</head>
<body>
<div about="">
This page, by
<a property="cc:attributionName" rel="cc:attributionURL" href="http://jmyerson.org/">
Judith Myerson
</a>,
is licensed under a
<a rel="license" href="http://creativecommons.org/licenses/by/3.0/">
CC Attribution License
</a>.
</div>
</body>
</html>

ccREL

Vía / IBM Developer Works

Consejos para optimizar tu base de datos

Interesantes consejos para optimizar nuestra base de datos en nuestras aplicaciones:

  • Aunque parezca mentira, no siempre es necesario una base de datos relacional. Existen alternativas como memcache, base de datos documentales o de clave-valor.
  • No uses la BD para almacenar contenidos: imágenes o documentos en BLOB.
  • Usa campos numéricos y autoincrementales para los índices primarios, para así tener un acceso rápido al registro, ya que inserts, updates y selects dependen mucho de este índice.
  • Analiza correctamente el uso de índices al igual que haces un análisis detallado de la estructura de la BD.
  • Realiza queries sencillas, en las que solo debes recuperar los campos que necesites y evitar el uso de LIKE y NOT IN

Una lectura interesante y más detallada.

Database Optimize patterns

Lightcloud: BD clave-valor

Lightcloud es una base de datos basada en clave-valor muy rápida, desarrollada por la gente de Plurk, que llega casi al rendimiento de Memcachedb. Está basado en Tokyo Tyrant.

  • Puede almacenar millones de keys en pocos servidores
  • Escala horizontalmente
  • Los nodos se replican vía master-master, failover automático y balanceo de carga
  • Por ahora solo está para Python, pero el puerto puede ser desarrollado fácilmente en cualquier lenguaje

Lightcloud

Vía / High Scalability

Agrupar puntos en Google Maps con PHP

A veces cuando desarrollamos mapas usando Google Maps, nos pueden quedar iconos muy pegados los unos a los otros, siendo bastante complicado apreciar algo en el mapa.

php_google_maps
es una librería que nos permite trabajar facilmente con los mapas de Google, y que además añade una clase que permite agrupar puntos en el mapa según su separación.
Introduction to Marker Clustering With Google Maps
Vía / fede.carg

Realizar gráficas con MySQL y Google Graph

Buen ejemplo para obtener la URL que nos dibuja gráficas usando Google Graph mediante procedimientos almacenados de MySQL. Está sacado de este ejemplo, que a su vez está sacado de este otro para Oracle.

DELIMITER $$
DROP FUNCTION IF EXISTS `dm_midas`.`FNC_GOOGRAPH_DB_SIZE`$$
CREATE FUNCTION `dm_midas`.`FNC_GOOGRAPH_DB_SIZE` (
p_chart_type CHAR,
p_height INT,
p_width INT) RETURNS varchar(3000) CHARSET latin1
READS SQL DATA
BEGIN
/* Author:    Walter Heck - OlinData */
/* Date:      20090216 */
/* Note:      After an idea by Alex Gorbachev - Pythian */
/*            http://www.pythian.com/blogs/1490/google-charts-for-dba-tablespaces-allocation */
/* variable declaration */
DECLARE v_done BOOLEAN default false;
DECLARE v_url varchar(3000);
DECLARE v_schema_name varchar(3000);
DECLARE v_data_length_sum int;
DECLARE v_data_length_total int;
DECLARE v_legend_labels varchar(3000);
DECLARE v_chart_labels varchar(3000);
DECLARE v_chart_data varchar(3000);
/* Cursor declaration */
DECLARE c_schema_sizes cursor for
select
t.table_schema,
round(sum(t.data_length + t.index_length) / 1024 / 1024) as data_length_schema
from
information_schema.tables t
group by
t.table_schema
order by
t.table_schema;
/* Handler declaration */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = true;
/* Initialize the variables */
SET v_legend_labels = '';
SET v_chart_labels = '';
SET v_chart_data = '';
/* Get the total data length + index_length for all tables */
select
round(sum(t.data_length + t.index_length) / 1024 / 1024) as data_length_total
into
v_data_length_total
from
information_schema.tables t;
/* Open the cursor */
OPEN c_schema_sizes;
/* Loop through the cursor */
get_data: LOOP
/* Fetch the next row of data into our variables */
FETCH c_schema_sizes INTO v_schema_name, v_data_length_sum;
/* if there is no more data, v_done will be true */
IF v_done THEN
/* Exit the loop */
LEAVE get_data;
END IF;
/* Add the schema name to the labels for the legend */
IF v_legend_labels = '' THEN
SET v_legend_labels = v_schema_name;
ELSE
SET v_legend_labels = concat(v_legend_labels, '|', v_schema_name);
END IF;
/* Add the total size of the schema to the labels */
IF v_chart_labels = '' THEN
SET v_chart_labels = v_data_length_sum;
ELSE
SET v_chart_labels = concat(v_chart_labels, '|', v_data_length_sum);
END IF;
/* Get the percentage of the total size as the graph's data */
IF v_chart_data = '' THEN
SET v_chart_data = ROUND(v_data_length_sum / v_data_length_total, 2) * 100;
ELSE
SET v_chart_data = concat(v_chart_data, ',', ROUND(v_data_length_sum / v_data_length_total, 2) * 100);
END IF;
END LOOP get_data;
/* Close the cursor */
CLOSE c_schema_sizes;
/* Build up the google graph url */
SET v_url = 'http://chart.apis.google.com/chart?';
SET v_url = CONCAT(v_url, 'cht=', p_chart_type);
SET v_url = CONCAT(v_url, '&chs=', p_width , 'x', p_height);
SET v_url = CONCAT(v_url, '&chtt=Database Sizes (MB)');
SET v_url = CONCAT(v_url, '&chl=', v_chart_labels);
SET v_url = CONCAT(v_url, '&chd=t:', v_chart_data);
SET v_url = CONCAT(v_url, '&chdl=', v_legend_labels);
/* return the url as the function's result */
RETURN v_url;
END$$
DELIMITER ; 

MySQL DB Pie Graph