itaeng

Blog

Pubblicato in:segnalazioni

Microsoft: "Abbandonate Internet Explorer 6!"

19GEN2010

In seguito alla recente scoperta della vulnerabilità su Internet Explorer, Microsoft ha colto la palla al balzo per suggerire, tramite Technet, di aggiornare Explorer 6 ad una versione più recente. Pur restando dell'avviso che anche nelle versioni più recenti la situazione resta tragica, almeno per quanto riguarda il supporto agli standard web, devo riconoscere che Microsoft ha fatto un'ottima mossa, speriamo che gli utenti raccolgano il suggerimento e che explorer 6 sparisca finalmente dal mercato...

  Windows 2000 Windows XP Windows Vista Windows 7
Internet Explorer 6 Exploitable Exploitable (current exploit effective for code execution) N/A
(Vista ships with IE7)
N/A
(Windows 7 ships with IE 8)
Internet Explorer 7 N/A
(IE 7 will not install on Windows 2000)
Potentially exploitable (current exploit does not currently work due to memory layout differences in IE 7) IE Protected Mode prevents current exploit from working. N/A
(Windows 7 ships with IE 8)
Internet Explorer 8 N/A
(IE 8 will not install on Windows 2000)
DEP enabled by default on XP SP3 prevents exploit from working. IE Protected Mode + DEP enabled by default prevent exploit from working. IE Protected Mode + DEP enabled by default prevent exploit from working.

Nota bene: Internet explorer 7 e 8 sono sicuri sono quando sono abilitate DEP e Protected mode, altrimenti la vulnerabilità è presente anche li!!

Per maggiori informazioni rimando al link del blog di Technet

Link al post su Technet

Aggiornamento: Microsoft Italia ha pubblicato un video che cerca di rassicurare gli animi:

Siccome sono un malpensante aggiungo che NSS Lab, citata in questo video, quando ha fatto quella valutazione è stata probabilmente pagata da Microsoft, e che ha condotto il test in modo un po' strano, per esempio utilizzando versioni beta (opera) o obsolete (firefox) di alcuni software.

Comunque che per chi volesse controllare c'è il sito di Secunia, che permette di visionare la quantità ed il tipo di bachi conosciuti per ogni software, e la loro pericolosità:

Internet Explorer 8

Firefox 3.5

Google Chrome 3.0

Opera 10

Pubblicato in:segnalazioni

Allarme dall'autorità federale per la sicurezza informatica tedesca: "Internet explorer non è sicuro"

16GEN2010

Molte persone, un po' maliziosamente, l'hanno sempre sostenuto, ma stavolta l'allarme arriva nientemento che dal Bundesamt fuer Sicherheit in der Informationstechnik, BSI, ovvero l'Autorità Federale per la Sicurezza nella Tecnologia dell'Informazione, che ne sconsiglia l'uso in favore di browser alternativi, di cui fa anche i nomi: Firefox, Opera, Chrome o Safari.

La falla, presente nelle versioni 6, 7 e 8 del browser di casa Microsoft, e che interessa i sistemi operativi XP, Vista, 7, 2003 e 2008 server, permette di lanciare attacchi ed installare programmi pericolosi sul proprio computer e nella rete. La falla è stata confermata dalla stessa Microsoft, che ammette che l'unica versione al sicuro da questo baco è Explorer 5 su Windows 2000 (tecnologia vintage di 10 anni fa).

Sempre Microsoft ammette che l'attacco ai danni di Gmail partito dalla Cina qualche giorno fa potrebbe essere partito da questa vulnerabilità (fonte).

Non meno importante è l'accusa da parte mia di essere una gran rottura durante lo sviluppo di siti internet.

Il consiglio, da parte di tutti, è di cambiare browser, approfittando dello stato di necessità :).

Aggiornamento: Anche in Francia il Centre d'Expertise Gouvernemental de Réponse et de Traitement des Attaques informatiques consiglia l'uso di browser alternativi a fronte della vulnerabilità.

Aggiornamento 2: Ecco il bollettino Microsoft, con tanto di lista dei software affetti dal problema e quelli non affetti, più alcune precisazioni.

Pubblicato in:trucchi

Script per il backup di database e webroot

12GEN2010

Da tempo ero alla ricerca di uno script semplice e funzionale per effettuare i backup dei propri siti internet in modo automatizzato, che non desse lavoro una volta installato (tipo "installa e dimentica"). Alla fine mi sono imbattuto in questo vecchio post e nel bellissimo script che ancora adesso potete ammirare su quelle pagine. 

Naturalmente dovevo modificarlo per le mie necessità, cioè renderlo agnostico riguardo alla directory in cui è installato (basta creare una directory qualunque, buttarci dentro i due file qua sotto e al resto pensa lui) ed effettuare il dump dei database...

Ma bando alle ciance:

#!/bin/bash
CURPATH=$( cd $( dirname $0 ) ; pwd )

DIR_BKP="$CURPATH"
# ========== CONFIGURATION ============
# file con i pattern da escludere dal backup
EXCLUDES="$CURPATH/excludes"
# nr di giorni da consevare
NDAY=14

# prefisso della directory del backup
PRE="backup_dati"
# directory da backuppare
TARGET="$CURPATH/../"

# configurazione dati di accesso al database
DBUSERNAME="username"
DBPASSWORD="password"
DBHOST="host.com"

# ====================================
echo "=> Fase 0 ($(date '+%d-%m-%Y %H:%M')): Backup database"
mysqldump --opt --user="$DBUSERNAME" --password="$DBPASSWORD" --host="$DBHOST" --all-database | gzip -v >  "$DIR_BKP/database.tar.gz"

# ====================================
echo "=> Fase 1 ($(date '+%d-%m-%Y %H:%M')): Cambio \
permessi e rimozione del backup piu' vecchio <="
# cambio permessi
chmod -R 700 "$DIR_BKP/$PRE."*

# Viene eseguita solo alla prima esecuzione
if [ -e "$DIR_BKP/$PRE.0" ]; then
    echo "*"
else
    echo "Prima esecuzione !!!"
    mkdir "$DIR_BKP/$PRE.0"
fi;

# rimozione del backup più vecchio
if [ -d "$DIR_BKP/$PRE.$NDAY" ] ; then
    echo "  rm -rf $DIR_BKP/$PRE.$NDAY"
    rm -rf "$DIR_BKP/$PRE.$NDAY"
fi

# ====================================
echo "=> Fase 2 ($(date '+%d-%m-%Y %H:%M')): Shifto \
di una unita' i backup esistenti <="
while [ $NDAY -gt 1 ]; do
    NDAY2=$(($NDAY-1))
    if [ -d "$DIR_BKP/$PRE.$NDAY2" ] ; then
        echo "  mv $PRE.$NDAY2 $PRE.$NDAY"
        mv "$DIR_BKP/$PRE.$NDAY2 $DIR_BKP/$PRE.$NDAY"
    fi;
    NDAY=$NDAY2;
done

# ====================================
echo "=> Fase 3 ($(date '+%d-%m-%Y %H:%M')): Creo \
hard link del backup piu' recente <="
if [ -d "$DIR_BKP/$PRE.0" ] ; then
    echo "cp -al $PRE.0 $PRE.1"
    cp -al "$DIR_BKP/$PRE.0 $DIR_BKP/$PRE.1"
fi;

# ====================================
echo "=> Fase 4 ($(date '+%d-%m-%Y %H:%M')): Eseguo \
il backup <="

# Verifica se c'è il file per le esclusioni
if [ -r $EXCLUDES ] ; then
    EXCL="--delete-excluded --exclude-from=$EXCLUDES"
else
    EXCL=""
fi;

#Comando di backup
rsync -av --delete $EXCL $TARGET "$DIR_BKP/$PRE.0"

#Sposto il backup del database
mv "$DIR_BKP/database.tar.gz" "$DIR_BKP/$PRE.0/database.tar.gz"

echo "=> Fase 5 ($(date '+%d-%m-%Y %H:%M')): Cambio i permesi in sola lettura <="
chmod -R 500 "$DIR_BKP/$PRE."*

# ====================================
echo "=> FINE ($(date '+%d-%m-%Y %H:%M')) <="

ed impostare nel file "excludes" i files e le directory che si vogliono escludere dal backup:

- backups/
- logs/
- Maildir/
- tmp/
- cms.tar.bz2
- .links/
- .ssh

Fatto! Ora basterà lanciare da shell (o da crontab) lo script in questo modo:

sh backups/bk_daily.sh e al resto penserà lui da solo... 

Pubblicato in:segnalazioni

Il Millennium Bug arriva 10 anni dopo. Avrà usato trenitalia?

05GEN2010

In ritardo di 10 anni, il famigerato Millennium Bug fa vedere i suoi effetti: alcuni telefonini, bancomat e antivirus danno segni di squilibrio apparentemente inspiegabili... ecco perchè:

Pensavate che il Millennium Bug, con la relativa angoscia planetaria per la gestione corretta del cambio di data fra il 1999 e il 2000 da parte dei computer, fosse solo un brutto ricordo o addirittura una bufala? E’ ancora fra noi. Dalla mezzanotte del 31 dicembre scorso, i telefonini con Windows Mobile 6.1 e 6.5 e con altri sistemi operativi ricevono talvolta SMS dal futuro, datati 2016. La causa è probabilmente un errore nel software che interpreta i codici usati per rappresentare l’anno negli SMS: secondo i commenti su Slashdot.org, la data negli SMS è in formato BCD mentre altri campi sono in formato esadecimale, per cui è possibile che alcuni software per cellulari (o nei gateway degli operatori) interpretino il codice dell’anno trattandolo come un esadecimale. In alternativa, si tratta di un astutissimo piano per evitare la fine del mondo nel 2012, prevista dal calendario Maya, passando direttamente al 2016. Su WMexperts c’è una prima possibile pezza non ufficiale (da usare a vostro rischio e pericolo). In Australia, intanto, alcuni sportelli bancari automatici stanno rifiutando le carte bancarie dei clienti da Capodanno, secondo quanto riferisce il Brisbane Times, perché i Bancomat pensano che l’anno corrente sia il 2016 e quindi a loro risulta che tutte le carte degli utenti sono scadute. Anche gli antivirus sono vulnerabili al Baco del Millennio e Dieci: la suite di sicurezza Symantec Endpoint Protection rifiuta tutti gli aggiornamenti successivi al 31 dicembre 2009 perché li considera scaduti. Il rattoppo temporaneo di Symantec consiste nel pubblicare gli aggiornamenti tenendo la data del 31 dicembre 2009 e incrementando il numero di versione. Fonte: http://attivissimo.blogspot.com

Pubblicato in:

Authsome plugin: Auth for people who hate the Auth component

28DIC2009

Un progetto molto simile era in cantiere da diverso tempo sul forum di cakephp-it.org, ma qualcuno ci ha battuti sul tempo (non che ci volesse molto visto il nostro stato dei lavori :))

questa la presentazione:

Assume nothing: Authsome requires that you have some kind of user model, but that's it. It doesn't care if you use a database, passwords or religious ceremonies for verifying your member logins.

Touch nothing: Authsome does not interact with your application at all. No login redirects, no permissions checks, nothing. You never have to worry about the underlaying magic, it will never get into your way.

Always available: Authsome is there for you when you need it. You can do stuff like Authsome::get('id') from anywhere in your project. If you have MVC OCD, you can also use Authsome as a regular component: $this->Authsome->get('id')

http://github.com/felixge/cakephp-authsome

Leggendo la presentazione sembra un gran bel pezzo di codice, al più presto proverò ad implementarlo in qualche progetto... ma il bello arriverà più avanti, nel 2010:

Next on the radar is Righteful: Acl for people who hate the Acl component. We hope to have it ready at some point early next year.

http://debuggable.com/posts/cakephp-aut … 76cbdd56cb

ACL è un complesso sistema di gestione delle autenticazioni, come molti sviluppatori (e non solo su cakephp) sapranno... l'unica difficoltà, che molti sviluppatori (soprattutto su cakephp) avranno già avuto modo di notare, è l'estrema macchinosità del tutto... difficile da implementare, da gestire, da utilizzare... speriamo che questo plugin ci venga in aiuto.

Adoro la comunità di cakephp...:D

Pubblicato in:

Bloodhound Gang - Uhn Tiss Uhn Tiss Uhn Tiss

27DIC2009

Si apre una nuova rubrica: cultura musicale :D.

Adoro questo gruppo...

Pubblicato in:

Tabella di compatibilit√ fra i browser per html5, css3, svg...

21DIC2009

Vagando per la rete alla ricerca di informazioni sul supporto ai tag audio e video in html5, mi sono imbattuto in questa interessante tabella:
http://a.deveria.com/caniuse/

Mostra la compatibilità delle nuove (future?) tecnologie web con i browser passati, attuali e futuri. Un ottimo aiuto per gli sviluppatori...

Pubblicato in:

Lockerz.com apre agli utenti italiani

14DIC2009

Lockerz è un sito americano, fondato a marzo 2009 il cui CEO è nientemeno che l'ex patron di Amazon, Kathy Savitt.

Il sito in questione ha la simpatica peculiarità di regalare (o promettere di) prodotti di vario genere ai propri visitatori: si parla di Nintendo Wii, Xbox 360, ma anche Macbook, tavole da snowboard, scooter... insomma premi anche piuttosto grossi!

Il funzionamento è semplice: ti iscrivi e partecipi ad un semplice giochino per accumulare i primi punti, dopodichè guadagni 2 punti per ogni giorno in cui ti colleghi, ed altri 2 punti se rispondi alla domanda del giorno... il tutto raddoppiato se inviti 20 persone, entrando inoltre a far parte della z-list.

Ora... credo che un po' tutti sentano puzza di fregatura, a quanto pare invece funziona sul serio, il sito guadagna dalla pubblicità e dagli sponsor, troppo bello per essere vero?

Forse, io intanto mi sono registrato... è gratuito e non costa troppa fatica, l'unico limite è la necessità di avere un invito per potersi iscrivere.

Interessato? Lascia un commento o contattami in altro modo, ne ho un po' a disposizione :)

Pubblicato in:

Helper per la formattazione delle date con Cakephp

11DIC2009

Gestire le date con cakephp non è mai stata una cosa semplice, senza parlare poi della situazione in cui si utilizza un hosting oltreoceano... 

Un piccolo helper potrebbe venirci in aiuto:

 

<?php
// ./app/views/helpers/date.php 
    /** 
     * Formattazione date e ore con Cakephp
     * 
     * @author ToX - http://emanuele.itoscano.com - toss82 - at - gmail.com 
     * 
     * 
     * 
     * @installazione: 
     *        Nella funzione daymonthyear e monthdayyear ricordati di cambiare la lingua di setlocale con ciò che ti serve (default: it_IT)
     *          
     */ 

Class DateHelper extends AppHelper{

    function nicedate($date)
    {
        if(empty($date)) {
            return "No date provided";
        }
       
        $singular         = array("secondo", "minuto", "ora", "giorno", "settimana", "mese", "anno", "decade");
        $plural           = array("secondi", "minuti", "ore", "giorni", "settimane", "mesi", "anni", "decadi");
        $lengths          = array("60","60","24","7","4.35","12","10");
       
        $now             = time();
        $unix_date         = strtotime($date);
       
           // check validity of date
        if(empty($unix_date)) {   
            return "N/A";
        }

        // is it future date or past date
        if($now > $unix_date) {   
            $difference     = $now - $unix_date;
            $tense         = "fa";
           
        } else {
            $difference     = $unix_date - $now;
            $tense         = "fra";
        }
       
        for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
            $difference /= $lengths[$j];
        }
       
        $difference = round($difference);
       
        if($difference != 1) {
            $periods[$j] = $plural[$j];
        } else {
            $periods[$j] = $singular[$j];
        }
       
        if ($now > $unix_date) {
            return "$difference $periods[$j] {$tense}";
        } else {
            return "{$tense} $difference $periods[$j]";
        }
    }

    function daymonthyear($date)
    {
        if(empty($date)) {
            return "No date provided";
        }
       
        $unix_date         = strtotime($date);
        setlocale(LC_TIME, 'it_IT'); 
        $data = strftime("%d/%m/%Y - %H:%M", $unix_date); 
        return ($data);
    }

    function monthdayyear($date)
    {
        if(empty($date)) {
            return "No date provided";
        }

        $unix_date         = strtotime($date);
        setlocale(LC_TIME, 'it_IT'); 
        $data = strftime("%m/%d/%Y - %H:%M", $unix_date); 
        return ($data);
    }
}
?>

Diciamo al nostro controller (o app_controller) di utilizzare il nuovo helper, e poi siamo pronti ad utilizzarlo:

$date->nicedate($post['Post']['created']);

oppure

$date->daymonthyear($post['Post']['created']);
Pubblicato in:

Flash lentissimo su ubuntu

10DIC2009

Quasi tutti quelli che hanno avuto modo di provare Flash su Ubuntu se ne saranno accorti: è terribilmente lento, tanto da essere quasi inutilizzabile, in alcuni casi.

Non sono riuscito a capire di chi sia la responsabilità, fattostà che se si disabilitano gli effetti grafici (compiz) tutto torna a funzionare a meraviglia.

Per disabilitarlo è sufficiente seguire questi passaggi:

  • Menu Sistema -> Preferenze -> Aspetto
  • Andare alla voce Effetti visivi
  • Selezionare Nessuno

Per velocizzare il passaggio si può installare compiz-switch, in questo modo è possibile attivare e disattivare gli effetti visivi in pochi secondi, mi chiedo però se ne valga la pena...

AGGIORNAMENTO: 

Sembra che disattivando l'accelerazione hardware dalle impostazioni flash (tasto destro su un video - impostazioni - prima voce a sinistra) e attivando Riproduzione Video su CompizConfig la situazione migliori decisamente... riesco a vedere video in 720p senza scatti su youtube... 

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();