Cómo crear botones con Imagick

Un buen y sencillo código para crear botones estilo web 2.0 con Imagick.

botonimagick.png

<?php
// Se crea el objeto Imagick
$im = new Imagick();
// Se crea un canvas vacio
$im->newImage( 200, 200, "white", "png" );
// Se crea el objeto para dibujar
$draw = new ImagickDraw();
// Color del botón
$draw->setFillColor( "#4096EE" );
// Se crea el círculo exterior
$draw->circle( 50, 50, 70, 70 );
// Se crea el ciruclo transparente de la zona inferior
$draw->setFillColor( "white" );
// Color semi transparente
$draw->setFillAlpha( 0.2 );
// Se dibuja el círculo
$draw->circle( 50, 50, 68, 68 );
// Se indica la fuente
$draw->setFont( "./test1.ttf" );
// Se crea el reflejo superior
$draw->setFillAlpha( 0.17 );
// Se dibuja la curva
$draw->bezier( array(
array( "x" => 10 , "y" => 25 ),
array( "x" => 39, "y" => 49 ),
array( "x" => 60, "y" => 55 ),
array( "x" => 75, "y" => 70 ),
array( "x" => 100, "y" => 70 ),
array( "x" => 100, "y" => 10 ),
) );
// Se dibuja la imagen
$im->drawImage( $draw );
// Se pone a opaco para el texto
$draw->setFillAlpha( 1 );
// Tamaño de la letra
$draw->setFontSize( 30 );
// Color del texto
$draw->setFillColor( "white" );
// Se escribe el texto
$im->annotateImage( $draw, 38, 55, 0, "go" );
// Se recorta la imagen
$im->trimImage( 0 );
// Se envía la imagen
header( "Content-Type: image/png" );
echo $im;
?>

Siempre que se hace este tipo de scripts en nuestras aplicaciones web, hay que recordar que Imagick consume muchos recurosos.

Creating buttons with Imagick

Códigos Javascripts interesantes

Una colección interesante de código Javascript, sin tener que usar frameworks de Javascript, teniendo en cuenta, que a mi parecer es conveniente antes saber Javascript y luego aprender un framework.

De los scrips que nos muestran, me gustaría destacar:

Ejecutar funciones cuando se carga la página

function addLoadListener(fn){
if(typeof window.addEventListener !='undefined') {
window.addEventListener('load',fn,false);
} else if(typeof document.addEventListener !='undefined') {
document.addEventListener('load',fn,false);
} else if(typeof window.attachEvent !='undefined') {
window.attachEvent('onload',fn);
} else {
var oldfn=window.onload
if(typeof window.onload !='function') {
window.onload=fn;
} else {
window.onload=function(){oldfn();fn();}
}
}
}

Añadir y eliminar eventos

function addEvent(obj,type,fn){
if(obj.addEventListener) {
obj.addEventListener(type,fn,false);
} else if(obj.attachEvent){
obj["e"+type+fn]=fn;
obj[type+fn]=function(){obj["e"+type+fn](window.event);}
obj.attachEvent("on"+type,obj[type+fn]);
}
}
function removeEvent(obj,type,fn) {
if(obj.removeEventListener) {
obj.removeEventListener(type,fn,false);
else if(obj.detachEvent){
obj.detachEvent("on"+type,obj[type+fn]);
obj[type+fn]=null;
obj["e"+type+fn]=null;
}
}

Obtener el elemento que llama a una función

function giT(evt){
var elem;
if (evt.target) {
elem = (evt.target.nodeType == 3) ?
evt.target.parentNode :
evt.target;
} else {
elem = evt.srcElement;
}
return elem;
}

Top Javascript Code Snippets for 2007

Kohana: framework PHP basado en CodeIgniter

kohana.pngKohana es un framework de PHP que deriva de CodeIgniter, el cual ya he comentado aquí que me gusta bastante. Basado inicialmente en CI, posee las mismas características que este: seguro, liviano, fácil de aprender, MVC, compatible con UTF-8 y fácilmente extensible.

¿Qué diferencias existen entre CI y Kohana?

  • PHP5: es estrictamente PHP, lo que aporta la programación orientada a objetos.
  • El diseño de patrones MVC continua el de CI: por lo que, aunque son diferentes, un usuario de CI no tendrá problemas para adaptarse al de Kohana.
  • Dirigido por una comunidad: no por una empresa, una comunidad de desarrolladores puede dar respuestas más rápidas al no estar limitadas por las decisiones de una empresa.
  • Los datos GET, POST, COOKIE y SESSION funcionan como se esperan: no se limita su uso, aunque si se ofrece el mismo tratamiento ante ataques XSS que ofrece CI.
  • Recursos, modulos y herencia en cascada: los controladores, librerías, helpers y vistas pueden ser cargados desde cualquier lugar de la aplicación, del sistema o de módulos. Las opciones de configuración se heredan y pueden ser modificadas dinámicamente por cada aplicación.
  • No hay conflictos de nomenclaturas: se usan sufijos en las clases (por ejemplo _Controller) para evitar conflictos.
  • Carga automática de clases: las librerías, controladores, modelos y helpers no se precargan, sino que se cargan dinámicamente cuando se solicitan.
  • Los helpers son clases estáticas y no funciones: en vez de usar form_open() usaríamos form::open().
  • Consistencia en las librerías y el API: por ejemplo el almacenamiento de sesiones múltiples existe (BD, cookies, …), usando interfaces y clases que extienden de ésta, podemos desarrollar en nuestra librerías nuevas clases que amplíen la interfaz y que mantenga la consistencia del API.
  • Manejador de eventos: los eventos pueden ser añadidos, modificados o eliminados de forma dinámica, permitiendo cambios en la ejecución de los procesos sin tener que modificar el core.

Kohana

Torii: aplicación para crear portales

torii.pngTorii es una aplicación que desarrolla portales de forma sencilla mediante el uso y desarrollo de módulos. Incluye una extensa documentación y una serie de módulos iniciales como integración de feeds, tiempo, sistema de información, listas to-do y mucho más.
torii2.png
Además incluye temas que nos permite modificar el aspecto de nuestro portal de forma rápida.
No hace mucho uso de Javascript para evitar que el gasto innecesario de los recursos del navegador. A parte, el porta se cargan con mucha rapidez ya que los datos se cargan asíncronamente más tarde.
Es necesario disponer de PHP 5.2 y las siguientes extensiones: SimpleXML, DOM, PCRE y SPL, JSON, PDO y PDO/SQLite, y Curl. PDO/SQLite es necesario porque algunos módulos necesitan almacenar información.
Torii

Datejs: librería de fechas para Javascript

La verdad es que trabajar con fechas en Javascript suele ser un poco pesado. Con Datejs podremos trabajar con fechas de una forma increíblemente fácil y potente.

No se trata únicamente de un parseador, sino que ofrece muchas más funcionalidades.

Algunos ejemplos que nos pueden hacer ver la potencia de esta librería son:

// ¿Qué fecha es el próximo jueves?
Date.today().next().thursday();
// Añadir 3 días a la fecha de hoy
Date.today().add(3).days();
// ¿Es hoy viernes?
Date.today().is().friday();
// Hace tres días
(3).days().ago();
// Dentro de 6 meses
var n = 6;
n.months().fromNow();
// Ponerlo a las 8:30 AM del día 15 de este mes
Date.today().set({ day: 15, hour: 8, mintue: 30 });
// Convertir un texto a una fecha
Date.parse(‘today’);
Date.parse(‘t + 5 d’); // hoy + 5 días
Date.parse(‘next thursday’);
Date.parse(‘February 20th 1973′);
Date.parse(‘Thu, 1 July 2004 22:30:00′);

Datejs

Vía / Ajaxline

Recuperar datos en InnoDB

Data Recovery Toolkit for InnoDB es un conjunto de herramientas que comprueba los tablespaces de InnoDB y recuperan datos de un tablespaces dañado o de tablas que han sufrido drop o truncate.

Entre las características que ofrece nos encontramos con:

  • Soporte para REDUNDANT (anterior a MySQL 5.0) y COMPACT (posterior a MySQL 5.0).
  • Funciona con un tablespace único o un tablespaces de un fichero por tabla.
  • Recupera datos incluso cuando una página InnoDB has sido reasignada a otra tabla o fue parcialmente destruida.
  • Permite todos los tipos de datos de MySQL excepto BLOBs, SETs y BITs, aunque está previsto para la próxima versión.
  • Tiene un conjunto de filtros de datos para definir rangos de datos (para números), longitud de campos (para campos de longitud variable), juegos de caracteres (para strings), periodos de datos, etc…
  • Viene acompañado de una herramienta que permite definir tablas InnoDB, así no es necesario implementarlas directamente mediante sentencias SQL.
  • Los datos se devuelven en formato CSV por lo que luego pueden ser importados facilmente.

Data Recovery Toolkit for InnoDB

Vía / Homo-Adminus Blog

Slider accesible y no obstrusivo

Un gran script que nos permite insertar sliders en nuestras webs, que sean accesibles y no obstrusivos. A parte, permiten ser manejados por las flechas del cursor, por las teclas de inicio y fin, o el ratón, incluido el scroll.

El script le asigna automáticamente a cada slider el rol slider requerido por ARIA y los estados valuemax, valuemin y valuenow.

Un ejemplo de uso para un slider horizontal con una llamada de función sería la siguiente:

class="fd_range_0_255 fd_classname_extraclass fd_callback_updateColor"

slider.png

Slider

Vía / WebAppers

links for 2007-11-26

TwitterPoster Groups

Hemos querido darle un cambio a TwitterPoster para dejar de ser únicamente un top de usuarios de Twitter. Se trata de la posibilidad de crear y pertenecer a grupos de usuarios de Twitter.

¿Para qué quiero pertenecer a un grupo de usuarios de Twitter? Pongamos un ejemplo, has acudido a Evento Blog España y quieres que tus opiniones se puedan leer dentro de un contexto, tan solo tienes que unirte al grupo de EBE07 y los usuarios podrán ver en una especie de agrupación de feeds tus mensajes junto al resto de los usuarios del grupo.

Para crear o unirse a un grupo tan solo hay que enviar un mensaje directo al usuario @poster con el siguiente formato:

join #[nombre del grupo]

Por ejemplo si deseas pertenecer al grupo EBE07 escribirás:

join #ebe07

Para poder acceder a los contenidos del grupo solo se deberá acceder a la ruta:

http://twitterposter.com/group/[nombre del grupo]

La única dificultad es que para mandar un mensaje privado a @poster tiene que seguirte, pero eso no es problema, porque en el momento que TwitterPoster detecte que eres follower suyo, en ese momento se hará follower tuyo.

El único problema lo impone el API de Twitter, el cual solo permite 70 peticiones en 1 hora, en esto no podemos hacer nada.

Existen dos grupos creados, uno de ellos pertenecientes a Com’n’Click Networks la empresa propietaria de TwitterPoster y Bitacoras.com (come_n_click) y otro grupo de prueba (test_groups).

Copy/paste / mi otro blog