I commenti
Sono stati attivati.
Per evitare di scrivere pagine e pagine, è mia intenzione evitare di raccontare tutti i dettagli dell'implementazione del sito. In fondo, potrei il sito ugualmente anche se usassi un CMS e non fossi un masochista.
Invece lo sono, quindi sto scrivendo tutto a mano. Ed ho scritto tutto a mano più di una volta, quindi inizio a sapere quali siano i problemi dello scrivere un sito complesso a mano. Userò perciò i commenti come esempio, visto che li ho appena implementati, in una loro forma iniziale e ristretta.
Cosa volevo
Ritengo i commenti una parte essenziale del sito, visti come strumento (lento) di comunicazione con persone che conosco su argomenti ben specifici (quello che scrivo), o con perfetti sconosciuti che capitano di avere un'opinione su qualcosa che sul sito è pubblicato. Commenti ovunque perciò, nel blog, nelle gallerie di foto, vicino ai download, nei pressi dei file più inutili. Il primo requisito del codice che dovevo scrivere era quindi la semplicità, la possibilità di poter inserire un form ed il relativo thread di commenti con un numero minimo di righe di codice. Inscatolamento estremo. L'altro punto importante, a mio parere, è la facilità d'uso. Come diceva Zingus:
Lo so che mi odi perchè non tratto con rispetto la tua engine per i commenti. E' che non so, è troppo smooth. Rendila bloated, rallentala, SABOTALA!
Smooth è l'effetto che cerco. Niente registrazioni strane, niente email di conferma; una casella per il nome ed una per il testo. Mi aspetto civiltà nei contenuti, con la premessa che se non mi piace quello che c'è scritto lo cancello senza pietà.
Mi vengono in mente un altro paio di caratteristiche necessarie, anche se secondarie. La prima è un minimo di tecnologia per evitare lo spam, ma che sia trasparente all'utente, se possibile. La seconda è un accenno di autenticazione.
Autenticazione
Per me in fondo, l'autenticazione non è importante, perché chiunque può scrivere. Ma può essere importante per certi utenti, magari quelli che ripassano di tanto in tanto, e mi sembra giusto implementarla e perché no, darle un suo valore.
L'autenticazione non c'è ancora, perché dipende da un modulo non ancora implementato, la Cookie Factory™. In poche parole, si basa sullo scaricare sull'utente tutto il peso del mantenere il segreto tale, senza forzarlo a ricordarsene a memoria. In un normale sito alla fine, entrambi i lati devono ricordarsi qualcosa, ma l'utente “dovrebbe” memorizzare la password. E se evitiamo la password, e gli diciamo “Salva soltanto questo bookmark, ma tienilo per te,” cosa succede? E' probabile però che finisca per implementare tre livelli, fra cui l'utente potrà scegliere il giusto compromesso fra accidia e paranoia: nessun segreto, Animale Guida™, o normale password. No, non vi dico cos'è l'Animale Guida.
Il tutto è in fondo sperimentale, una mia idea a metà fra quella che è un'autenticazione seria e quello che alla fine facciamo tutti, stanchi di doverci ricordare a memoria password la dove la sicurezza non è, alla fine dei conti, così importante.
Livelli
E' tardi, ma per fortuna i livelli sono solo tre, e non dovrei metterci molto a descriverli
- Alla base di tutto c'è l'engine che si occupa di salvare i commenti. Come tutti i moduli che definisco engine è indipendente —nessun
require_once()— perché non si sa mai che voglia cambiare i dati che salvo, o il modo in cui li salvo; oppure che voglia cambiare altre parti del sito, e finisca per disturbare questo modulo. Può avere diversi back-end, ma al momento salva su file di testo. Si aspetta parametri corretti, e si preoccupa soltanto di riuscire a scrivere i dati, o di rileggerli. Mantiene una lista degli ultimi commenti inseriti, apre e chiude thread. Un thread di commenti è identificato da un nome, sufficiente sia per caricarne tutti i post, sia per salvare un nuovo commento. Un commento è solo una coppia nome utente e testo, anche se vengono salvati anche l'indirizzo IP e l'ora di inserimento —di nuovo in modo trasparente. - Sopra a questa libreria c'è il codice che addobba i commenti, e li collega al resto del sito. Renderizza i commenti caricando template e risorse per la localizzazione delle pagine, si interfaccia con la Cookie Factory™ per leggere informazioni sugli utenti autenticandi, verifica che abbiano i permessi necessari, ne mostra i dati aggiuntivi quando questi sono disponibili. Inoltre, mette al sicuro il livello inferiore verificando che i dati da inserire siano corretti e consistenti. Da essa escono soltanto due funzioni: addComment() e renderThread().
- L'ultimo livello e quello che interfaccia l'utente con il sito, ed in particolare l'inserimento dei commenti. E' il muro contro cui devono infrangersi eventuali richieste non proprio oneste, schifezze spammose, e rumente varie. Ripulisce l'input che arriva dall'utente, ed aggiunge il commento solo se tutto sembra essere corretto. Gestisce la redirezione delle pagine ed eventuali chiamate via javascript.
Ogni livello assolve ad un compito: dati, elaborazione, sicurezza. Soltanto il secondo richiede effettivamente di lavorare con altre componenti del sito, rendendo gli altri moduli indipendenti e riutilizzabili. Inscatolare il tutto in modo che da ogni modulo escano poche funzioni è forse una mania mia, ma rende scrivere il codice del livello superiore molto più semplice, in fondo seguendo la regola di alta scuola informatica “Tutto quello che riesci a mettere in valigia, mettilo.”
Si, l'ho appena inventata.
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158
Warning: Invalid argument supplied for foreach() in /membri2/dreadnaut/meta/include/templates.engine.php on line 158