« Older Entries Newer Entries » Subscribe to Ultimi articoli

10 Apr 2008

Update to wordpress 2.5

2 Commenti

Ho aggiornato il blog alla versione 2.5 seguendo queste istruzioni.

La grafica è molto migliorata e ci sono diverse novità che devo ancora esplorare! 🙂 Peccato per molti plugin che non sono ancora disponibili per la versione 2.5.


10 Apr 2008

links for 2008-04-10

Nessun commento


9 Apr 2008

links for 2008-04-09

Nessun commento


8 Apr 2008

links for 2008-04-08

Nessun commento

7 Apr 2008

Snap Links: a useful plugin for Firefox and deviantART

Nessun commento

Dopo molti anni alla ricerca di un’estensione del genere, ho finalmente trovato ciò che ritengo essere la cosa migliore per deviantart ma non solo: SNAP LINKS!

“Snap Links permette di aprire facilmente tanti link in nuove tab disegnando un box attorno a questi. I link possono anche essere aperti in nuove finestre, nuove tab di una nuova finestra, copiati negli appunti, nei segnalibri o scaricati.”

FUNZIONA ALLA GRANDE CON I MESSAGGI DEVIANTWATCH! Continua… »

4 Apr 2008

Variabili booleane in PHP

1 Commento

Oggi, lavorando in PHP, mi sono imbattuto in uno strano comportamento: dichiarando una variabile booleana inizializzata a TRUE, stampata mostrava correttamente il valore 1. Se invece la variabile era inizializzata a FALSE, stampata non mostrava alcun valore, invece di stampare il valore 0 come (giustamente?) ci si aspetterebbe.

Dopo diverse quanto inutili ricerche (inizialmente credevo fosse un “problema” di CakePHP!) ho pensato di controllare il manuale di PHP, ed ecco svelato il mistero: è giusto così! 😯

Incredibile ma vero insomma, in PHP le variabili boolean se stampate valgono 1 se TRUE, niente se FALSE!

Sempre sulla pagina del manuale ho trovato questa interessante spiegazione, che riporto qui tradotta per voi in italiano:

E’ corretto che TRUE o FALSE non siano usate come costanti per i numeri 0 ed 1. Ma potrebbero esserci delle volte in cui è utile vedere il valore di un boolean come 1 oppure 0. Ecco come fare:

$var1 = TRUE;
$var2 = FALSE;

echo $var1; //Mostrerà il numero 1

echo $var2; //Non mostrerà nulla

Per fare in modo che venga mostrato il numero 0 per il valore FALSE, bisogna effettuare una conversione di tipo (cast):

echo (int)$var2; // Questo mostrerà il numero 0 per FALSE

Tags: , , ,

3 Apr 2008

Elezioni 2008: siti utili

Nessun commento

In vista delle prossime elezioni, vorrei segnalare alcuni siti che ho trovato interessanti:

  1. su http://quattrogattilse.googlepages.com potete trovare un’istruttiva presentazione in powerpoint: non ho verificato personalmente le fonti ma sembrerebbe seria (thanks to Giulia)
  2. su http://elezioni.softwarelibero.it/visualizza/partiti troverete i candidati di ogni partito interessati (speriamo!) al software libero (thanks to Napo)
  3. su http://www.openpolis.it potrete “monitorare” i vari politici (thanks to Napo)
  4. su http://www.dimmichiseitidirochivotare.it (thanks to Francesca) rispondendo a 17 domande vi verranno mostrati i partiti più vicini alle vostre idee
  5. sul politometro rispondendo a 15 domande vi verranno mostrati i politici più vicini alle vostre idee
  6. su http://www.voisietequi.it rispondendo a 25 domande su vari argomenti, vi verrà mostrato un grafo dei partiti più vicini alle vostre idee, questo il mio:

Elezioni 2008. Io sono qui. E tu dove sei?

Tags:

3 Apr 2008

LDAP e non solo

Nessun commento

Nella scorsa settimana ho partecipato ad alcune riunioni con le altre persone che lavorano al progetto SoNet (Social Network). Abbiamo discusso in particolare gli strumenti da utilizzare e le principali applicazioni da sviluppare; per organizzare meglio il lavoro abbiamo installato su un nostro server trac.

Al momento le cose da fare sono principalmente due:

  1. importare un database da MSSql a MySql (che non è così facile come sembra, in quanto le immagini salvate come binary data creano non poche difficoltà di esportazione/importazione)

  2. autenticarsi ad un server tramite LDAP


Io mi sto occupando in particolare del secondo punto. LDAP (Lightweight Directory Access Protocol) è un protocollo usato nei servizi di directory, usato molto spesso, come nel nostro caso, per servizi di autenticazione. Per gestire l’autenticazione appunto ho usato specifiche funzioni di PHP:

$ldapconn = ldap_connect($ldaphost, $ldapport);




esegue una connessione al server $ldaphost sulla porta $ldapport

$bd = ldap_bind($ldapconn, $login, $password);




restituisce TRUE se tramite $login e $password avviene l’autenticazione, FALSE altrimenti

Una volta creato uno script e verificato l’effettivo funzionamento, il passo successivo da compiere è integrare l’autenticazione LDAP all’interno del blog creato con CakePHP ed ExtJS. Questo è quello su cui sto attualmente lavorando; l’idea è di creare un form in ExtJS che richieda le credenziali di accesso e si autentifichi al server centrale tramite LDAP: se i dati inseriti sono corretti l’utente può proseguire e quindi editare ed inserire nuovi post, in caso contrario potrà solo limitarsi a leggere quelli già scritti.

Ho anche intenzione di fare prossimamente una breve presentazione sul progetto SoNet e sulle tematiche ad esso correlate, come il web2.0.

Tags: , , , ,

22 Mar 2008

CakePHP: aggiunta di editor WYSIWYG di Ext JS (parte 3)

Nessun commento

Dopo aver aggiunto i form in Ext JS alla nostra applicazione, rimaneva il fatto che editando un post, le modifiche effettuate venivano salvate in un nuovo post invece che aggiornare il contenuto del primo post.

Tale problema appariva di difficile soluzione in quanto, prima di aggiungere Ext JS, tutto funzionava correttamente e non capivo quali modifiche avessero portato a tutto ciò. Dopo numerosi tentativi (basti pensare che sono arrivato a scrivere più di 200 post per cercare di individuare l’origine del problema!) ho usato delle funzioni di CakePHP che potessero aiutarmi in fase di debug come la funzione log che scrive l’output sul file error.log nella cartella tmp/logs della nostra applicazione CakePHP. Ve ne propongo un esempio:

$titolo = $this->data['Post']['title'];
$this->log('ecco cosa contiene title_'.$titolo);



In questo modo sono arrivato a capire dove stava l’errore: nella prima applicazione il form per editare un post conteneva un campo di tipo hidden con l’id del post:

hidden('Post/id'); ?>



che veniva inviato al controller tramite il metodo POST.

Nella seconda versione con l’editor Ext JS invece avevo inserito l’id del post da modificare all’interno della funzione submit nel file myFormEDIT.js:

form_user.form.submit({
url: 'http://'+host+'/cake/app2/posts/edit2?id='+id,



pertanto l’id veniva passato al controller tramite il metodo GET.

Questo causava dei problemi perché – come ho scoperto poi – i campi passati con POST al controller sono accessibili direttamente, mentre quelli passati in GET no, essendo memorizzati in un array. Si veda questo esempio tratto da http://manual.cakephp.org/chapter/controllers:

$this->params['url']
 
Stores the current URL requested, along with key-value pairs of get variables. For example, if the URL /posts/view/?var1=3&var2=4 was called, $this->params['url'] would look like this:
 
[url] => Array
 
(
 
	[url] => posts/view
 
	[var1] => 3
 
	[var2] => 4
 
)



Modificando opportunamente la funzione edit2 nel file posts_controller.php nel seguente modo è stato finalmente risolto anche questo problema:

function edit2($id = null) {
Configure::write('debug', '0'); //turn debugging off; debugging breaks ajax
$this->layout = 'Ajax'; //set the layout to Ajax so the ajax doesn't break
 
if (empty($this->data)) {
$this->Post->id = $id;
$this->data = $this->Post->read();
$this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
}
else {
$tmp = $this->params['url'];
$temp = $tmp['id'];
$this->Post->id = $temp;
 
if ($this->Post->save($this->data['Post']))
$this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
}
}



Per concludere devo aggiungere che forse sarebbe opportuno inserire nella documentazione di CakePHP che la funzione save, la quale si occupa di salvare i dati presi in input sul database, viene eseguita anche quando i dati passati non sono corretti o completi (nel nostro caso appunto l’id non veniva inizializzato, eppure la funzione save scriveva ugualmente sul database, ma creava un nuovo post con un nuovo id!).

Tags: , , , ,

11 Mar 2008

CakePHP: aggiunta di editor WYSIWYG di Ext JS (parte 2)

2 Commenti

Eravamo rimasti ai problemi di interazione tra il form di Ext JS e CakePHP. Ecco la soluzione:

  1. similmente a quanto fatto per la funzione add creiamo nel file posts_controller.php le due funzioni edit ed edit2:

              function edit($id = null) {
              // carico i dati del post
              $this->data = $this->Post->read();
              // uso la funzione set per passare i dati alla view
              $this->set('data', $this->data);
              }function edit2($id = null) {
              Configure::write('debug', '0'); //turn debugging off; debugging breaks ajax
              $this->layout = 'Ajax'; //set the layout to Ajax so the ajax doesn't break
     
              if (empty($this->data)) {
              $this->Post->id = $id;
              $this->data = $this->Post->read();
              $this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
     
              }
              else
              {
              if ($this->Post->save($this->data['Post']))
              {
              $this->set('success', '{success:true}'); //this is a json statement. EXT forms need this to know if things worked
     
              }
              else {
              $this->set('success', '{success:false}'); //EXT forms need this to know if something went wrong
     
              }
              }
              }



    Da notare l’uso nella funzione edit di read per caricare i dati del post in memoria e di set per passare questi dati alla view.

  2. nella view edit.thtml andremo a scrivere il seguente codice:

     
              <script type="text/javascript"><!--mce:0--></script>
    <div id="user-form">
              link('myFormEDIT'); ?&gt;</div>



    Quanto scritto non fa altro che fare l’escape del messaggio contenuto nel post (per evitare situazioni spiacevoli che causino errori di sintassi), salvarlo nella variabile myTextArea ed assegnare quest’ultima alla variabile body definita più avanti in javascript; tale variabile, insieme a quelle titolo ed id, verrà usata nel form di Ext JS. Infine carichiamo il file javascript myFormEDIT.js che si occuperà della renderizzazione del form in Ext JS.

  3. il file myFormEdit.js differisce dal form usato per la funzione add solamente per due righe, collocate rispettivamente nell’item textfield e nell’item htmleditor (ovvero il campo di testo per il titolo e la textarea per il contenuto del post): con la riga value: titolo assegniamo al textfield il contenuto della variabile titolo definita al punto 2., similmente con la riga value: body assegniamo all’htmleditor il contenuto della variabile body.


Per chiarire quanto spiegato finora descriviamo brevemente il flusso dell’applicazione per la funzione edit:

  • cliccando su Edit viene caricata la view edit.thtml che renderizza il form tramite il file myFormEDIT.js

  • a questo punto facciamo le nostre modifiche al post e lo salviamo. Quando clicchiamo su Save viene chiamata la view edit2.thtml che restituisce (grazie al fatto di usare il layout ajax.thtml)
    {success:true}

  • il file myFormEDIT.js pertanto mostra un messaggio di alert comunicando l’avvenuto salvataggio (“It worked!”) e reindirizza l’utente alla lista dei posts, ricaricando la pagina.


Al momento sto lavorando affinché i post editati non vengano salvati in un nuovo post e sto cercando di capire perché l’applicazione si comporti, nonostante il codice sia lo stesso, in modo differente se caricata in locale o in remoto.

UPDATE: problema risolto, vedi qui.

Tags: , , , ,

  • Ricerca

    or
  • Language

  • Categorie

  • Delicious

  • Statistiche


    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081

    Warning: Illegal string offset 'timestamp' in /home/mhd-01/www.micheledallatorre.it/htdocs/blog/wp-content/plugins/firestats/firestats-wordpress.php on line 1081
    • Pages displayed : 33362
    • Unique visitors : 18465
    • Pages displayed in last 24 hours : 0
    • Unique visitors in last 24 hours : 0