Archivio Autore
CakePOWER: url lang request
Ho introdotto in CakePOWER un sistema per gestire la richiesta di un particolare flag di lingua mediante un finto parametro da infilare nell’uri della richiesta.
Spiegazioni dettagliate e documentazione: http://www.cakepower.org/wiki/doku.php?id=lang:index
CakePOWER: il progetto è ufficiale!

Il primo logo ufficiale!
Ho registrato il dominio www.cakepower.org e sto iniziando a pubblicare una wiki di documentazione ufficiale del progetto CakePOWER.
Il sito sarà per ovvie ragioni completamente in inglese… un inglese che, non ho dubbi, i più troveranno rozzo e scorretto! Col tempo migliorerò!
Ricordo che il progetto è aperto a chiunque desideri collaborare. Sul sito ufficiale sono esposti i link al canale Twitter per gli aggiornamenti veloci e al repository su Google Docs per scaricare tutti gli aggiornamenti che andrò a pubblicare.
Presto verrà aperto il bug traking sul Google Code per raccogliere le segnalazioni di chi vorrà collaborare a testare e debuggare il progetto.
CakePOWER: Progettazione di un Framework
Quest0 articolo segna l’inizio di una serie di considerazioni e analisi il cui obiettivo è la progettazione e costruzione di un framework applicativo web based.
La mia esperienza nello sviluppo di applicazioni web (siti web, gestionali, piccole utility) mi ha portato ad elaborare alcune definizioni che utilizzerò nei successivi articoli di analisi:
- framework: è l’insieme di strumenti che consentono di enunciare le istruzioni logiche che compongono l’applicazione.
- applicazione: è l’insieme delle istruzioni necessarie a definire la logica astratta di un software.
- interfaccia: è lo strumento di comunicazione tra l’applicazione e il suo utente.
- prodotto: è l’insieme di applicazione e interfaccia cui vengono applicate delle personalizzazioni specifiche per la singola realizzazione.
Nell’immagine precedente la linea rossa rappresenta la separazione logica tra sviluppo dell’applicazione e lo sviluppo del prodotto.
L’applicazione è costituita di istruzioni logiche generiche che possono descrivere una soluzione software ad un problema collettivo. Lo sviluppo del prodotto si concentra sulla selezione delle applicazioni necessarie e sulla definizione di un insieme di regole di personalizzazione.
Nel momento in cui ci viene richiesto lo sviluppo di un prodotto (es un sito web) dobbiamo soffermarci e ragionare sulle applicazioni che lo compongono: gestione utenti, gestione pagine, gestione news, photo gallery e sulle regole di personalizzazione che lo completano: template grafico, numero di news per pagina, gestione dei menus.
Diventa facile capire che l’obiettivo è spostare la line rossa in modo che l’area di configurazione occupi sempre meno spazio nella costruzione di un prodotto. Il tempo che dedichiamo alla costruzione di un prodotto dev’essere concentrato sulla soddisfazione delle personalizzazioni richieste e non sullo sviluppo delle funzionalità
Il compito del framework:
La realizzazione pratica di quanto illustrato espone alcuni prerequisiti fondamentali che il framework deve soddisfare:
- Tutte le operazioni di configurazione devono poter essere descritte su files fisicamente distinti dai sorgenti dell’applicazione.
- I moduli applicativi (plugins) che compongono l’applicazione devono poter interoperare al fine di estendere e/o modificare il comportamento di altri moduli.
- I moduli applicativi devono essere sensibili ad un sistema di configurazione strutturato e scalabile.
- I moduli applicativi devono erogare funzionalità logiche “dropIn”. Non deve essere richiesta modifica dei files sorgenti!
CakePOWER: un po’ di pepe a CakePHP!
CakePOWER è il progetto che mira a concretizzare l’area core dell’immagine qui sopra fornendo tutti gli strumenti necessari allo sviluppo di plugins (moduli applicativi) al fine di vendere prodotti (siti web e gestionali applicativi) la cui caratteristica principale è alta qualità a basso costo.
Ho iniziato cercando un framework (PHP) che implementi il paradigma MVC e la scelta è ricaduta su CakePHP in quanto progetto abbastanza maturo e direzionato sulla creazione di automatismi che permettono di sviluppare il più velocemente possibile.
CakePOWER sarà sviluppato come un’estensione di CakePHP la quale integra funzionalità complesse nel framework. Di fatto tutto il sorgente sarà contenuto nella folder cake_power e l’integrazione avverrà mediante poche semplici istruzioni da inserire nei files di configurazione principali dell’applicazione.
CakePOWER è un’estensione, non un fork!
Lo stato attuale del progetto è pressochè nullo: sto scrivendo la documentazione delle prime strutture logiche che comporranno CakePOWER. La scelta di sviluppare prima la documentazione è fondamentale per garantire la qualità del codice prodotto.
A breve i sorgenti saranno disponibili su Google Project (http://code.google.com/p/cakepower/).
Utilizzare il layout di un plugin da un punto qualunque dell’applicazione
CakePHP 1.2 introduce una serie di funzionalità dedicate esplicitamente allo sviluppo RAD di applicazioni.
In questo articolo spiego come è possibile utilizzare dei layout contenuti in uno specifico plugin utilizzando quindi il concetto stesso di plugin per re-distribuire contenuti grafici oltre alle funzionalità contenute in helpers e components.
All’interno di un metodo di controller, appena prima del render (o della conclusione del metodo) è sufficiente specificare plugin e layout che si desidera utilizzare per il rendering della richiesta:
... $this->plugin = 'Myplugin'; $this->layout = 'my_layout'; ...
Questo tipo di codice produce la richiesta del file: “/app/plugins/myplugin/views/layouts/my_layout.ctp” da utilizzarsi come layout per la richiesta in corso.
Accedere ad un bottone di jQuery UI Dialog
Oggi mi sono imbattuto in un piccolo problema utilizzando jQueryUI Dialog: ho necessità di rendere configurabili i nomi dei bottoni azione definiti all’interno della dialog stessa.
jQueryUI non mette a disposizione nulla del genere!!!
Per fortuna, come spesso succede, la soluzione non è molto complicata!
Ecco qui un piccolo esempio di configurazione con personalizzazione del nome di un bottone:
$('.dialog').dialog({
title: "test",
buttons: { 'open': function(){}, 'close': function(){} },
open: function(){
$(".ui-dialog-buttonpane :button:contains('open')").html("Testo personalizzato");
}
});
La “magia” sta nella callback di apertura che va a cercare i bottoni in base al loro contenuto.
Screencast on-line!
Procedendo nello sviluppo della documentazione di CakePOWER e JuniorCMS ho sentito la necessità di realizzare alcuni screencast.
Gira e rigira ho trovato due software veramente interessanti:
Jing: applicazione locale disponibile sia per Mac che per Win, dalla grafica veramente accattivante, permette di catturare filmati di max 5 minuti esportandoli in formato swf. La versione “pro” (15€/anno) permette di aumentare le opzioni di esportazione.
Screencast-o-matic: meravigliosa applicazione web scritta in Java. Permette di realizzare screencast di max 15 minuti e di esportarli in flv, avi, mp4. Permette inoltre di eseguire una semplice “post-elaborazione” inserendo testi di commendo a posizioni precise espresse in secondi di filmato.
Tab plugin per coda editor
Usi Coda editor e diventi matto per indentare il codice???
Ecco un utile plugin che consente a Coda di gestire l’indentazione del codice come un qualunque altro editor human oriented.
http://menumachine.com/blog/2009/01/tab-key-indenting-for-coda/
(Segnalato da Fabio!)
Goole Lab Snooze Mail: la posta posticipata?
Da pochi giorni è stata presentata l’ultima novità da Google Labs: undo mail. Questa funzionalità consente di visualizzare il link “undo” nella barra di stato di gMail nei 5 secondi successivi all’invio della mail permettendo dunque al distrattone di annullare l’invio della mail.
Io voglio lo snooze!
A mio modo di utilizzare la posta elettronica una funzionalità veramente utile e anticipata già tanto tempo fa è lo snooze mail che, dando credito ai rumors, dovrebbe consentire di posticipare la ricezione della mail di un certo lasso di tempo.
Questa funzionalità dovrebbe trasformare il client di posta in una specie di agenda dove le mail ricevute si comportano in maniera automatica come dei task.
L’esempio calzante potrebbe essere la ricezione di una mail da un grosso cliente in cui viene richiesto di svolgere un determinato compito. Questa mail arriva nel bel mezzo di un’altro lavoro. Attualmente mi trovo ad interrompere il lavoro, attivare il mio task manager, creare la nuova voce e schedularla.
La funzionalità snooze mail mi potrebbe consentire, mediante 3 piccoli bottoni inseriti nella riga di visualizzazione della mail di ritardare la ricezione della mail di 15, 30, 60 minuti (oppure di stabilire un testo personalizzato).
Il risultato potrebbe far scomparire la mia mail per riaccodarla come “da leggere” dopo il tempo impostato… Un po’ come faccio con la sveglia ogni mattina!
Perchè sono contro i layout fluidi:
I layout fluidi rappresentano una tecnica di progettazione di layout di pagina (dunque si parla di xHTML e CSS) il cui fine è adattare il contenuto alle dimensioni della finestra (e non viceversa!).
Le dimensioni della finestra sono dunque definite dall’utente finale che può fare un po’ quello che vuole: tutto schermo, finestrelle minuscole, ecc…
Solitamente la diatriba riguardante la scelta di implementare o meno un layout fluido si concentra sulla maggiore complessità di realizzazione, sulla libertà di design ed in generale sull’impatto a livello di costi.
Vorrei a questo punto spostare l’attenzione dal puro aspetto grafico e stilistico ai contenuti, protagonisti della nostra pagina web!
Righe di testo troppo lunghe!
Una grafica liquida abbinata ad uno degli ormai comuni schermi da 20″ ad altissima risoluzione può facilmente produrre delle righe di testo estremamente lunghe e di difficile lettura: Sullo schermo non possiamo farci aiutare dal dito indice!!!
Nella mia esperienza di web designer ho imparato che la lunghezza della riga influisce molto sull’usabilità dei contenuti della pagina.
Un’importante eccezione:
Spezzo comunque una lancia a favore dei layout fluidi: essi permettono l’ingrandimento del testo più o meno a piacere aiutando dunque chi, come me, sta lasciando 4 diottrie su ogni progetto!
In un layout a dimensione fissa l’ingrandimento del testo può facilmente provocare sovrapposizione di paragrafi e blocchi grafici con il pessimo risultato di rendere illeggibile la pagina stessa.
iMac Shuffle :: Almost Accessible!
Ecco una simpatica forma di critica in risposta all’uscita del nuovo iPod Shuffle.
Come ormai sappiamo tutti l’iPod Shuffle non dispone di controlli utente nel case del lettore utilizzando un microscopico dispositivo esterno che, con soli 3 bottoni, permette l’intera gestione del famoso player.
imacshuffle.com è un sito il cui scopo è la presentazione di un simpatico incrocio tra l’iMac ed il nuovo iPod Shuffle. Sicuramente una simpatica lettura per iniziare al meglio la mattinata!
