Google Virtual Keyboard
Interesante API de Google para simular un teclado mediante Javascript, sobre todo es útil para evitar keyloggers y la captura de contraseñas.

Introducing the Virtual Keyboard API
Interesante API de Google para simular un teclado mediante Javascript, sobre todo es útil para evitar keyloggers y la captura de contraseñas.

Introducing the Virtual Keyboard API
Interesante recopilación de ataques XSS. No es un documento válido para aquellos que no sepan nada sobre XSS, sino para quienes tengan ya algún conocimiento y quieran profundizar más sobre el tema.
Además de los ejemplos de posibles ataques, también ofrece herramientas online como codificador de caracteres en hexadecimal, decimal y Base64, y un ofuscador de IP.
XSS (Cross Site Scripting) Cheat Sheet
Vía / abcphp.com
Un manual básico del API de Google Maps en inglés que nos puede ser de gran utilidad, explicado bastante bien y con ejemplos. El tutorial se divide en dos partes:
Es necesario conocer Javascript para no perderse.
Google Maps API Basic Tutorial
Vía / Menéame
Google tiene planeado empezar a cobrar por el uso de las aplicaciones contenidas en Google Apps for your Domain, entre las que se incluyen Gmail, Google Talk, Google Calendar, Google Page Creator, una página de inicio y dentro de poco el procesador de texto y la hoja de cálculo.
Pensado inicialmente como un conjunto de sencillas aplicaciones para pequeñas empresas que no tienen los recursos para instalarse Microsoft Exchange o Lotus Notes.
Pero son las grandes empresas las que están deseando poder usar este conjunto de aplicaciones y que sea Google quienes les ofrezca este servicio. A lo cual Google tiene pensado cobrar “unos pocos dólares” por persona/mes.
Google to charge businesses for Google Apps
VÃa / Techmeme
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 ;
Google anuncia en su blog oficial que han conseguido minimizar el impacto de muchos “Googlebombs” mediante la implementación de un nuevo algoritmo.
Aunque en el post aseguran que el impacto de este algoritmo es “muy limitado en ámbito e impacto” parece que funciona; El famoso Googlebomb referido a la SGAE y que los calificaba de ladrones ha desaparecido al igual que el que calificaba como miserable a un popular polÃtico español.
Matt Cutts nos explica en su blog que este algoritmo es resultado del 20% de tiempo que todos sus ingenieros pueden usar libremente en su jornada laboral para proyectos propios.
VÃa / Google Blog
Aunque el mismo autor reconoce que el código no está muy optimizado, el hecho es que esta librerÃa de PHP para acceder a funciones de Digg, puede ser de suficiente utilidad por si queremos incluir las noticias de Digg actualizadas en nuestra web.
Muestra el número de diggs que tiene una historia, la categorÃa de la historia, cabecera, enlace a entrada original y el resumen.
TinyDigg
Ejemplo
VÃa / Good PHP Tutorials