go2web20.net es una estupenda página creada por Orli Yakuel, una chica Israelí.
Extremadamente útil para ver las actuales tendencias en cuanto a webs 2.0.
Fantástica la página, pero no os perdáis también su blog, que viene cargadito de cosas interesantes!
Nota para usuarios de CakePHP 1.3: he puesto algunos comentarios y notas
como esta en el código y en el tutorial. Tened en cuenta también (por si no lo
sabéis..) que el helper de JavaScript ya no se utiliza para incrustar y cargar
código en la variable $scripts_for_layout. Así mismo no estaría de más que
reemplazarais el modo en que se utilizan los helpers en las vistas (es decir,
utilizar $this->Html en lugar de $html por ejemplo).
Voy a explicaros una forma sencilla reemplazar vuestras capas flashMessage por bonitos mensajes dinámicos creados con jQuery imitando el estilo de Growl.
Para los que no lo sepáis, Growl es un sistema de advertencias de Mac que nos unifica todas las advertencias (tanto de sistema como las del resto de aplicaciones) siguiendo el mismo estilo y mostrándose y ocultándose con efectos de entrada y salida.
Hay varios plugins de jQuery que imitan Growl. En este enlace podéis encontrar los que probablemente sean los más conocidos y utilizados. Para el ejemplo que voy a hacer me he valido de Gritter, que es el plugin que, a mi parecer, más se asemeja a Growl.
¿Qué necesitáis para este tutorial?
CakePHP (v. 1.2.4.8284 [1.2.5 stable], la 1.3 también sirve)
(las versiones que he puesto entre paréntesis son las que he utilizado yo para el tutorial)
Descargad todo lo necesario y guardad todo donde más os plazca. En mi ejemplo lo he organizado así:
jquery-1.3.2.min.js a la carpeta /app/webroot/js/
jquery.gritter.min.js a la carpeta /app/webroot/js/
gritter.png a la carpeta /app/webroot/img/
gritter-close-ie6.gif a la carpeta /app/webroot/img/
gritter-long.png a la carpeta /app/webroot/img/
jquery.gritter.css renombrado y movido a /app/webroot/css/gritter.css
Fijaros que he renombrado el fichero CSS. Además de renombrarlo habrá que modificar las rutas de las imágenes hacia la ruta que toque. Si estáis siguiendo el tutorial al pie de la letra debéis reemplazar ../images/ por ../img/ en vuestro CSS.
Dado que queremos utilizar este sistema de notificaciones tipo Growl como sistema de notificaciones principal de CakePHP tenemos que modificar nuestro layout de HTML principal para cargar los JavaScripts en la cabecera:
<?php// /app/views/layout/default.ctp
echo'<?xml version="1.1" encoding="'.Configure::read('App.encoding').'"?>';?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="es-es"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><?phpecho$html->charset();?><title><?phpecho$title_for_layout?> | Ejemplos CakePHP | Racó Tècnic</title><?phpecho$javascript->link(array('jquery-1.3.2.min','jquery.gritter.min'))?><?phpecho$javascript->codeBlock('var webroot="'.$this->webroot.'";')?><?phpecho$scripts_for_layout;?><?phpecho$html->css(array('main','gritter'))?></head><body><divid="container"><divid="header"><h1><?phpecho$html->link(__('Ejemplos CakePHP, Racó Tècnic',true),'http://www.racotecnic.com');?></h1></div><divid="content"><?php$session->flash();// Cake 1.2 ?>
<?phpecho$this->Session->flash();// Cake 1.3 ?>
<?phpecho$content_for_layout;?></div><divid="footer"><?phpecho$html->link($html->image('cake.power.gif',array('alt'=>__("CakePHP: the rapid development php framework",true),'border'=>"0")),'http://www.cakephp.org/',array('target'=>'_blank'),null,false);?></div></div><?phpecho$cakeDebug;?><script src="http://static.woopra.com/js/woopra.js"type="text/javascript"></script></body></html>
Las líneas marcadas en azul son las que os interesan. El resto podéis ignorarlas perfectamente.
En la línea 9 he añadido las librerías jQuery y Gritter. Recordad que para poder utilizar el Helperde JavasCript desde cualquier parte deberéis haber añadido dicho Helper en vuestro AppController:
En la línea 10 creamos la variable de JavaScript “webroot” que nos servirá más adelante para las plantillas de gritter. Si habéis leído alguno de mis tutoriales sobre cómo subir múltiples imágenes con uploadify en CakePHP quizás ya hayáis añadido esta variable a vuestro layout.
En la línea 12 añadimos el fichero CSS de Gritter.
Y en la línea 20, si no la teníais ya en vuestro layout, debéis añadir el método $session->flash() que será el que mostrará las notificaciones de Gritter.
Ya solo nos queda una cosa por hacer: crear la plantilla para cada tipo de notificación.
Como no quiero alargar mucho el tutorial haré sólo un par de layouts, uno para los errores y otro para las notificaciones normales.
Notificaciones informativas:
1
2
3
4
5
6
7
8
9
10
11
12
// /app/views/layouts/flash_info.ctp (Cake 1.2)
// /app/views/elements/flash_info.ctp (Cake 1.3)
<?phpecho$javascript->codeBlock('
// $this->Html->scriptBlock en Cake 1.3
$(function(){
$.gritter.add({
title: '' . __('Información',true) . '',
text: '' . $content_for_layout . '', // Cake 1.2. La variable es $message en la 1.3
image: webroot + 'img/info_48.png',
sticky: true
});
});')?>
Notificaciones de error:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php// /app/views/layouts/flash_error.ctp (Cake 1.2)
// /app/views/elements/flash_info.ctp (Cake 1.3)
echo$javascript->codeBlock('
// $this->Html->scriptBlock en Cake 1.3
$(function() {
$.gritter.add({
title: "'.__('Error',true).'",
text: "'.$content_for_layout.'", // Cake 1.2. La variable es $message en la 1.3
image: webroot + "img/error_48.png",
sticky: true
});
});')?>
Como podéis ver he utilizado la variable webroot para poder acceder fácilmente a nuestro directorio de imágenes. De todos modos, y dado que estamos insertando el JavaScript mediante PHP, podríamos haber hecho $this->webroot. También he activado la variable sticky de gritter para dejar la notificación mostrada en pantalla hasta que el usuario la cierre manualmente, ya que considero que los flashMessage deben comportarse así. Cuando trabajo con Ajax no utilizo la variable sticky.
En estos ejemplos he utilizado lo básico al configurar Growl. Id a su página si queréis informaros sobre los demás métodos y variables disponibles para configurarlo.
Pues con esto habríamos terminado. Ahora cada vez que queráis mostrar notificaciones simplemente tendréis que especificar la plantilla a utilizar como segundo parámetro del método $this->Session->setFlash():
1
2
3
4
5
// Notificación de error
$this->Session->setFlash('Esto es un mensaje de error','flash_error');// Notificación informativa
$this->Session->setFlash('Esto es un mensaje informativo','flash_info');
Pues ya está, ya lo tenemos ^^
Si queréis podéis descargar los ficheros más importantes en el zip que he preparado del tutorial. También podéis ver el ejemplo que he hecho a medida que hacía esta pequeña guía.
Si queréis disfrutar de Google Chrome en vuestro ubuntu sin necesidad de instalar Wine ni Crossover podéis hacerlo fácilmente mediante los repositorios o directamente instalando un paquete Deb.
Primero de todo debemos editar nuestro fichero de recursos de los repositorios:
1
sudo nano /etc/apt/sources.list
Y añadimos un par de líneas:
1
2
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu NOMBRE_DE_VERSION main
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu NOMBRE_DE_VERSION main
La variable “NOMBRE_DE_VERSION” debéis substituirla por vuestra versión. Google Chromium está disponible para las siguientes versiones de Ubuntu:
hardy [Hardy Heron 8.04]
intrepid [Intrepid Ibex 8.10]
jaunty [Jaunty Jackalope 9.04]
karmik [Karmik Koala 9.10]
Ahora que tenemos el repositorio añadido debemos añadir la clave GPG:
Sí, sí.. ya lo sé.. ha salido recientemente la versión 2.0… pero entonces.. ¿a qué viene este post?
Pues a que he estado probando la versión 2.0 y la verdad, no me ha acabado de convencer lo del plugin PDT que utiliza ahora. Principalmente porque no he logrado de ninguna de las maneras que me haga el debug en vivo como me hacía antes.
Así que si sois como yo y queréis volver a la versión antigua aquí os dejo los enlaces de Aptana 1.5 y su plugin de PHP (que por cierto, ha costado un buen rato de encontrar..)..
¿¿No estáis hartos de tener que ir subiendo y bajando el volumen de los altavoces porque cada canción tiene un volumen distinto??
Con mp3gain podéis normalizar el volumen de vuestros mp3 muy fácilmente (para los usuarios que manejen habitualmente la consola.. claro xD).
Podéis descargar mp3gain de la página oficial (está disponible para Windows y en código fuente). Los usuarios que utilicéis debian o ubuntu podréis encontrarlo en los repositorios.
Para utilizarlo recomiendo que utilicéis la opción de normalizado automático, la “-r”:
1
mp3gain -r *.mp3
Haciendo esto dentro de una carpeta con mp3 normalizaréis cada uno de ellos a un volumen estándar.
01 Freeson - Mozart is Back.mp3
Applying mp3 gain change of -1 to 01 Freeson - Mozart is Back.mp3...
02 TDF - Just a trip.mp3
Applying mp3 gain change of -4 to 02 TDF - Just a trip.mp3...
03 Madame - Bleeding Trees.mp3
Applying mp3 gain change of -2 to 03 Madame - Bleeding Trees.mp3...
04 Dj Fane a.k.a Skrachnbass - Shit Me Good.mp3
Applying mp3 gain change of -3 to 04 Dj Fane a.k.a Skrachnbass - Shit Me Good.mp3...
05 Naw - Skorch The Floor!.mp3
Applying mp3 gain change of -6 to 05 Naw - Skorch The Floor!.mp3...
06 Pisu - Dubstep Warrior.mp3
Applying mp3 gain change of -3 to 06 Pisu - Dubstep Warrior.mp3...
07 Dijeyow - Lookgyal.mp3
Applying mp3 gain change of -4 to 07 Dijeyow - Lookgyal.mp3...
08 Oddiohm - 2levels.mp3
Applying mp3 gain change of -5 to 08 Oddiohm - 2levels.mp3...
09 M_Box - Decadence Live.mp3
Applying mp3 gain change of -2 to 09 M_Box - Decadence Live.mp3...
10 Dj Danik - Chun Li Stage.mp3
Applying mp3 gain change of -5 to 10 Dj Danik - Chun Li Stage.mp3...
11 Murdarah - Ladera Da Morte.mp3
Applying mp3 gain change of -5 to 11 Murdarah - Ladera Da Morte.mp3...
12 Fernival - Tempfesta.mp3
Applying mp3 gain change of -3 to 12 Fernival - Tempfesta.mp3...
13 Jera - Gentleman.mp3
Applying mp3 gain change of -4 to 13 Jera - Gentleman.mp3...
13 Montek - Know Your Limits.mp3
Applying mp3 gain change of -7 to 13 Montek - Know Your Limits.mp3...
14 Pinyol - Elepumbab.mp3
Applying mp3 gain change of 1 to 14 Pinyol - Elepumbab.mp3...
15 Icebreaker - Melamina Sunrise.mp3
Applying mp3 gain change of -4 to 15 Icebreaker - Melamina Sunrise.mp3...
16 Korby - Journeys.mp3
Applying mp3 gain change of -1 to 16 Korby - Journeys.mp3...
17 Monolith Vs Bunkertronics - Lifesupport System (Bunkersphere Bodymix).mp3
Applying mp3 gain change of -4 to 17 Monolith Vs Bunkertronics - Lifesupport System (Bunkersphere Bodymix).mp3...
18 Sikotik - Roow.mp3
[19/19] 97% of 5572608 bytes analyzed
Si queréis normalizar todos los mp3 de una carpeta podéis hacerlo con con algún código bash como este:
1
2
3
4
5
6
7
find . -type d -print |
while read dirname
do
cd'$dirname'
mp3gain -r -k *.mp3
cd -
done
Aunque no os recomiendo utilizar este porque no es muy seguro y no funciona del todo. Como suele decirse, use at your own risk. Lo mejor es que lo hagáis carpeta por carpeta. Para ahorraros trabajo podríais haceros un script de nautilus ;)