itaeng

Blog

Pubblicato in:

Riscoprendo Google Chrome

09DIC2009

È passato poco più di un anno da quando google ha rilasciato ufficialmente la prima beta del suo browser, Chrome. Da buon geek non potevo non installarlo, ma dopo essermi abituato bene con gli addons di Mozilla Firefox non me la sentivo di farne a meno, così lo accantonai quasi subito. Recentemente Google ha sopperito a questa mancanza, creando una comoda galleria di estensioni per Chrome, e devo ammetterlo... ora è un browser davvero competitivo.

Ecco una piccolissima lista di estensioni utili per la navigazione e per gli sviluppatori web:

Gmail checker: aggiunge un comodisismo bottone che segnala la presenza (ed eventualmente la quantità) di email da leggere nel proprio account gmail. Molto bella la funzionalità preview, che permette di leggere le email da una popup senza dover aprire il sito. Utile & comodo

Rss Subscription Extension: oltre a rendere leggibili i file rss, che normalmente con chrome non lo sono, permette di salvare i feed nel vostro lettore preferito... Utile & comodo

Speed tracer (by Google): per sviluppatori, misura i tempi necessari allo scaricamento ed alla elaborazione delle pagine web, aiutando gli sviluppatori a velocizzarle. Utile, ma l'interfaccia anche se molto ben fatta mi risulta ancora un po' ostica...

Xmarks: questa utility, che richiede l'attivazione di un account in fase di installazione, serve a salvare i propri siti preferiti (bookmarks) su uno spazio protetto su internet, con la possibilità di sincronizzarli fra i vari browser (Chrome, firefox, internet explorer e safari) e pc in cui si vuole utilizzare questa funzionalità... Utile & comodissimo.

Jamendo Radio: aggiunge un semplice pulsante per ascoltare musica (rilasciata con licenza Creative Commons, non ci troverete i grandi artisti qui) in streaming dal sito Jamendo. Si può ascoltare musica a random o in base a filtri impostabili dall'utente.  Non è propriamente utile, ma è decisamente comodo...

Ci sono centinaia di altre estensioni nella galleria, che inoltre è nata da pochissimi giorni ed è in rapida crescita, nell'elenco ci sono quelle che ho installato io, se ne avete altre potete segnalarle nei commenti.

Pubblicato in:cakephp

Utilizzare file .po diversi a seconda del tema con cakephp

06DIC2009

Uno dei problemi che si possono presentare a chi lavora su cakephp è quello di avere uno stesso progetto utilizzato da clienti diversi, con esigenze diverse, sia di temi grafici che di formalità nel lessico.

Immagina di avere la stessa piattaforma per due siti, uno molto formale (cliente Pierluigi) e uno giocherellone (cliente Ciccio). È ovvio che se entrambi vogliono una stringa di benvenuto sul sito questa non possa essere la stessa, ma dovrebbe essere personalizzata... Cakephp ci ha fornito uno strumento utilissimo che sono i locales, dei files in cui inserire le stringhe da tradurre, con relativa traduzione

Se ad esempio nella mia view uso qualcosa tipo __('Saluti', true), cakephp si occupa di andare a cercare la relativa stringa nel file app/locale/ita/LC_MESSAGES/default.po

msgid "Saluti"
msgstr "Ciao"

oppure, se la lingua è impostata sull'inglese, nel file app/locale/eng/LC_MESSAGES/default.po

msgid "Saluti"
msgstr "Hello"

Ma come fare se, tornando al problema iniziale, vogliamo che per il cliente Pierluigi ci sia un saluto formale, e per Ciccio un saluto informale, sempre in italiano? Cakephp ci ha fornito una comodissima soluzione, che se utilizzata insieme alla funzionalità theme fa perfettamente al caso nostro...

__d($this->theme, 'Saluti', true)

Notato la sottile differenza? Con questa sintassi cakephp va a prendere il nome del tema in uso e cercherà il relativo file .po nelle directory che abbiamo nominato sopra.

Se per esempio il cliente Pierluigi usa il tema "pierluigi", basterà avere un file app/locale/ita/LC_MESSAGES/pierluigi.po con questa stringa

msgid "Saluti"
msgstr "Buongiorno"

mentre, per il cliente Ciccio con tema "ciccio", il file sarà app/locale/ita/LC_MESSAGES/ciccio.po, e conterrà

msgid "Saluti"
msgstr "Ciaooo"

Comodo no?

Pubblicato in:

Google public DNS

05DIC2009

Da wikipedia:

Domain Name System (spesso indicato con DNS) è un sistema utilizzato per la risoluzione di nomi di host in indirizzi IP e viceversa. Il servizio è realizzato tramite un database distribuito, costituito dai server DNS.

A partire dal 3 dicembre 2009 google ha rilasciato un nuovo servizio di DNS pubblici, che diversamente da quelli utilizzati da buona parte degli Internet Service Provider e da servizi analoghi come OpenDNS, non è basato su Bind ma su una propria implementazione.

Una caratteristica interessante deI DNS di google è l'uso di AnyCast: per farla breve, quando si inoltra una richiesta al DNS invece di puntare ad un server unico per tutto il mondo il sistema si occupa di trovare il server più vicino e veloce a disposizione, con un discreto guadagno nei tempi di latenza.

Per quanto riguarda il discorso privacy, sempre più sentito quando si parla di un gigante come Google, sembra che i dati memorizzati siano l'indirizzo IP (cancellato dopo 24 ore), il provider e la provenienza (che non saranno cancellati).

Maggiori informazioni si possono comunque trovare a questa pagina.

Che dire, sto provando il servizio da ieri ed effettivamente la navigazione mi sembra più reattiva, per ora non posso che consigliarli... 

Ecco gli indirizzi:

DNS primario: 8.8.8.8
DNS secondario: 8.8.4.4

Pubblicato in:

Disqus comment system helper

02DIC2009

L'integrazione del sistema di gestione commenti disqus è un lavoro piuttosto semplice e veloce. Per renderlo ancora più semplice, e più in stile cake, ho creato un piccolo helper che si occupa di fare tutto il lavoro sporco.

Innanzitutto è necessario un account disqus. Puoi prenderne uno qua:

http://disqus.com/comments/register/

Poi, copia-incolla il codice sottostante nel file ./app/views/helpers/disqus.php

Helper Class:

<?php
// ./app/views/helpers/disqus.php
/**
 * Disqus comment system integration Helper
 *
 * @author ToX - http://emanuele.itoscano.com - toss82 - at - gmail.com
 *
 *
 *
 * @help:
 *        In function makeRepliable, I set the projectName somewhere in my configuration files, 
 *        remember to change this variable to something that suits your needs. 
 *         
 */
class DisqusHelper extends Helper {
    var $helpers = array('Html', 'Javascript');
    function repliesLinkCounter() {
        $projectName = Configure::read('Disqus.projectName');
        $createJS    = "
(function() {
var links = document.getElementsByTagName('a');
var query = '?';
for(var i = 0; i < links.length; i++) {
if(links.href.indexOf('#disqus_thread') >= 0) {
query += 'url' + i + '=' + encodeURIComponent(links.href) + '&amp;';
}
}
document.write('<script charset=\"utf-8\" type=\"text/javascript\" src=\"http://disqus.com/forums/{$projectName}/get_num_replies.js' + query + '\"></' + 'script>');
})();
";
        $return      = $this->Javascript->codeBlock($createJS);
        return $return;
    }
    function makeRepliable() {
        $projectName = Configure::read('Disqus.projectName');
        $return      = '<div id="disqus_thread"></div>';
        $return .= $this->Javascript->link("http://disqus.com/forums/{$projectName}/embed.js");
        return $return;
    }
    function recentComments($num_itemsold = 5, $hide_avatars = 0, $avatar_size = 32, $excerpt_lenght = 200) {
        $projectName = Configure::read('Disqus.projectName');
        $return      = "<div id='recentcomments' class='dsq-widget'>";
        $return .= "<h2 class='dsq-widget-title'>" . __('Recent Comments', true) . "</h2>";
        $return .= $this->Javascript->link("http://disqus.com/forums/{$projectName}/recent_comments_widget.js?num_itemsold={$num_itemsold}&hide_avatars={$hide_avatars}&avatar_size={$avatar_size}&excerpt_length={$excerpt_lenght}");
        $return .= "</div>";
        return $return;
    }
}

Come è scritto nell'header, "In function makeRepliable, I set the projectName somewhere in my configuration files, remember to change this variable to something that suits your needs.". È l'unica configurazione da fare...

Aggiungi l'helper Disqus in app_controller o nel controller che preferisci. A questo punto abbiamo quasi finito: inserisci questa stringa dove vuoi visualizzare i commenti ed il form:

echo $disqus->makeRepliable(); 

et voilà...volendo, è possibile visualizzare gli ultimi commenti inseriti in una sidebar, o dovunque tu voglia con questo codice, puoi naturalmente modificare le variabili in base alle tue necessità

echo $disqus->recentComments($num_itemsold = 5, $hide_avatars = 0, $avatar_size = 32, $excerpt_lenght = 200); 

aggiungendo invece questo link dopo ogni permalink che punta ad un post commentabile è possibile avere un contatore di commenti dopo i permalink che portano ad un post con i commenti disqus, aggiungendo questo link:

echo $html->link("View comments", $yourPermaLink . "#disqus_thread"); 

E questo codice al fondo dell'elenco dei permalink

echo $disqus->repliesLinkCounter();