Per inserire il link “mi piace” in una notizia pubblicata con il CMS Flatnuke è sufficiente usare il widget messo a disposizione da facebook nella sezione dedicata agli sviluppatori. Io ad esempio ho scelto il tipo iframe in modo da avere la maggiore compatibilità con tutti i browser ma potete usare anche html5 o xfbml. Siccone si tratta di inserire un codice html che praticamente è sempre lo stesso, a parte l’url che fa riferimento alla notizia, allora ho pensato di creare un piccolo script in php per encodare l’url relativo alla notizia da pubblicare (da notare che facebook applicata l’encode url per ben 2 volte). Lo script è molto semplice, in pratica la variabile id_fn corrisponde alla id della news, quindi la notizia deve essere prima inserita tramite flatnuke (così conosciamo il suo id) e poi modificata successivamente per aggiungere il botton like.
Beruby permette di guadagnare registrandosi, visitando e facendo acquisti su dei siti proposti dal portale. I pagamenti possono essere richiesti al raggiungimento di 10 euro di saldo confermato con paypal o 30 con bonifico bancario, ma anche se non si raggiungono queste soglie i soldi possono essere ritirati pagando però 1 euro.
E’ sufficiente eseguire dpkg -i flatnuke-3.0.0_all.deb come utente root oppure sudo dpkg -i flatnuke-3.0.0_all.deb nel caso di ubuntu. Il pacchetto di default viene installato in /var/www/
Installazione Rpm:
E’ sufficiente eseguire rpm -i flatnuke-3.0.0-2.noarch.rpm come utente root. Il pacchetto di default viene installato in /var/www/Il pacchetto è stato ottenuto tramite alien dal debian.
Per incrementare le prestazioni del mio Asus EEEPC 900A durante la navigazione web, ho pensato di creare un RAM disk e di usarlo come cache per Firefox. Ho pensato di realizzarlo in questo modo: mi sono creato uno script per la creazione del ramdisk al boot di ubuntu del netbook, poi una volta creato il disco copio al suo interno tutta la cache di Firefox che mi ero precedentemente salvato in modo da mantenere tutte le estensioni già installate. Allo shutdown di ubuntu del netbook vado ad aggiornare la copia di backup della cache di Firefox tramite rsync. Tutte queste copie chiaramente influiscono sui tempi di avvio e spegnimento del PC ma devo dire che la navigazione mi sembra molto più veloce. Inoltre questo ramdisk posso utilizzarlo come directory temporanea di lavoro.
Script per la creazione del ramdisk al boot:
alex@eeepc:~$ cat mkramdisk.sh
#!/bin/bash
if [ -e ~/ramdisk ]; then
if [ ! -d ~/ramdisk ]; then
echo "E' gia presente un file ramdisk"
exit 1
fi
else
#--- No file or directory, lo creo
mkdir ~/ramdisk
fi
#--- Lo monto se non è già montato
mount | grep -q ~/ramdisk
rez=$?
if [ $rez = 1 ]; then
mount -t tmpfs tmpfs /home/alex/ramdisk -o size=256m
fi
cd /home/alex/ramdisk
mkdir firefox
chmod 777 firefox
cp -r /home/alex/bck_firefox/* /home/alex/ramdisk/firefox/
cd /home/alex/.mozilla
ln -s /home/alex/ramdisk/firefox firefox
chmod -R 777 /home/alex/ramdisk/firefox/*
Lo script mkramdisk.sh è “linkato” sotto la directory /etc/rc2.d:
Maurizio Grillini ha pubblicato il catalogo aggiornato dei libri di testo con licenza creativa, liberamente scaricabili dalla rete per vari ordini di scuola.
Il catalogo è suddiviso per disciplina e presenta una breve descrizione per ciascun testo.
Sicuramente vi sarà capitato di vedere che é possibile usare i colori in shell tramite dei comandi di escape invece del solito terminale monocronatico. Non sono qui per spiegare come si impostano i colori in shell; per questo ci sono già tantissimi esempi in rete ma come mantenere la visualizzazione a colori se vengono passati in pipe al comando less ? Ad esempio se avete uno script che vi riporta in output lo stato di diversi server (occupazione dischi, memoria, processi, ecc) e visualizzate i valori con colori diversi a seconda della soglia raggiunta, se l’output lo passate in pipe al less vi ritrovate una serie di caratteri escape tanto da rendere l’output incomprensibile. Mi spiego meglio utilizzando un semplice ls colorato:
alex@goku:~$ ls -l *.png *.tar --color | less
-rw-r--r-- 1 alex alex 102400 2011-09-07 16:25 ESC[01;31mcreate_test.tarESC[00m
-rw-r--r-- 1 alex alex 1938 2011-04-27 08:08 ESC[01;35mdata_export.pngESC[00m
-rw-r--r-- 1 alex alex 2716 2011-04-27 08:06 ESC[01;35mload.pngESC[00m
-rw-r--r-- 1 alex alex 5464 2011-04-27 07:55 ESC[01;35mmain-title.pngESC[00m
Tramite il flag -R il less interpreta correttamente la codifica dei colori.
alex@goku:~$ ls -l *.png *.tar --color | less -R
-rw-r--r-- 1 alex alex 102400 2011-09-07 16:25 create_test.tar
-rw-r--r-- 1 alex alex 1938 2011-04-27 08:08 data_export.png
-rw-r--r-- 1 alex alex 2716 2011-04-27 08:06 load.png
-rw-r--r-- 1 alex alex 5464 2011-04-27 07:55 main-title.png
Stessa cosa se usiamo l'opzione color (o --colour[=WHEN]) del grep (specificando always al posto di auto che disabilita il colore appena incontra una pipe):
Vediamo un esempio del comando tac (il contrario di cat) che concatena il suo input e lo visualizza in output al contrario. Questa sua particolare funzione ci viene utile per eliminare le ultime n-righe di un file in quanto vengono visualizzate da subito in output ottenendo un notevole risparmio di tempo rispetto a una lettura completa di tutto il file.
alex@goku:~$ cat pippo.txt
1
2
3
4
5
6
7
Se voglio cancellare le ultime n-righe uso il comando tail +(n+1) su un file visualizzato al contrario e poi ri-visualizzato nuovamente al contrario in modo da riportarlo nel suo stato iniziale. Ad esempio se voglio eliminare le ultime 3 righe:
Purtroppo, in alcune versioni del comando tail, l’opzione tail +n non è implementata ma solo la classica tail -n. Si può simulare lo stesso comportamento calcolando il numero di righe totali e sottraendo il numero desiderato anche se il wc obbliga a leggere interamente il file.
Se addirittura siete su un sistema Unix in cui non è presente il comando tac, come ad esempio Sun Solaris, allora bisogna leggere tutto il file e togliere la parte iniziale tramite head (e se il file è di dimensioni elevate allora tale sistema impiegherà parecchio tempo).
Infine, sempre con il sed, è possibile cancellare direttamente l’ultima riga di un file; se tale comando lo eseguiamo in un ciclo otteniamo la cancellazione delle ultime n-righe.
Mi sono ritrovato nel caso di dover installare e testare un sito basato su flatnuke in una distribuzione Red Hat Enterprise Linux in cui il php.ini ha il flag short_open_tag disabilitato (Off) e il sito non funziona in quanto ho notato che in alcuni file di flatnuke è presente la direttiva abbreviata “<?” invece di “<?php”. In particolare ho notato ad esempio che la index.php contiene la forma estesa mentre la functions.php che viene richiamata subito dalla index.php stessa inizia con la forma abbreviata. Il risultato è che nel browser si apre una pagina bianca in cui viene visualizzato tutto il codice sorgente.
$ head -5 index.php
<?php
/************************************************************************/
/* FlatNuke - Flat Text Based Content Management System */
/* ============================================ */
/* */
$ head -5 functions.php
<?
/**
* File delle funzioni di sistema
*
Siccome sul server in questione girano altri siti web e non avendo la possibilità di modificare il php.ini (è necessario avere un utente privilegiato per la modifica del file di configurazione del php e il successivo riavvio di apache) ho optato per l’inserimento del flag short_open_tag nel file “.htaccess” posizionato nella directory radice dell’installazione del sito web basato su flatnuke.
$ cat /etc/php.ini | grep -i -B12 '^short_open_tag'
; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
short_open_tag = Off
Ecco il file “.htaccess” che mi ha risparmiato la modifica di tutti i singoli file php (questa soluzione è possibile solo nel caso in cui il php viene eseguito come modulo di apache e non come CGI).
$ cat flatnuke/.htaccess
php_flag short_open_tag On
Comunque, come riportato nel manuale php, è buona norma disabilitare la forma abbreviata ed utilizzare quella estesa, quindi è consigliabile impostare a Off questo valore.
Ecco lo script completo per la creazione di un sistema di “nightly build” per flatnuke. Rispetto all’articolo “Cvs auto login” ho modificato l’invocazione di expect in quanto lo script eseguito da crontab riporta un errore dovuto alla presenza del comando interact che si aspetta una interazione con la tastiera e cron ovviamente non può aprire un terminale in input.
interact: spawn id exp0 not open
while executing
"interact"
Ho modificato il login prendendo spunto da uno script per il login ssh ma in rete si trovano anche altri esempi. Invocazione dello script da crontab:
Prima di editare la crontab (crontab -e), verificate che l’editor di default sia il vi (in caso contario esportate la variabile d’ambiente EDITOR settando il vostro editor preferito).
L’output completo è visibile qui (è una directory di Autoindex, un file manager in php) ; in particolare sono presenti i tar compressi e i relativi md5 degli ultimi 15 giorni.
Ho intenzione di crearmi un sistema di “nightly build” per flatnuke in modo che in automatico, tramite crontab, ogni giorno vada a scaricare il cvs da sourceforge e mi costruisca il tar già pronto da utilizzare senza tutte le directory CVS.
Il primo problema da affrontare è il login anonymous del cvs; infatti richiede almeno la pressione del tasto ENTER per effettuare l’autenticazione senza inserire nessuna password. Prendendo spunto da altri servizi come ftp e telnet, ho provato svariati metodi tra cui “here document” (“<<EOF”) oppure a usare una pipe (|) per passare user e password ma nessuno di questi ha funzionato.
Allora mi sono ricordato del comando expect (da installare tramite il proprio gestore di pacchetti) che serve per interagire con i programmi che richiedono l’inserimento di dati (tipicamente user e password). Praticamente si dice a expect che cosa aspettarsi dal comando e di conseguenza mandare la risposta giusta. Nel nostro caso cvs si presenterà a terminale con la stringa esatta “CVS password:” e noi tramite il comando send spediremo un carriage return “(\r) o ^M” in modo da simulare la pressione del tasto INVIO.