Alessandro Alfonsi Home Page | Internet Linux Php

Inseriamo il bottone mi piace in Flatnuke

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.

alex@goku:~$ cat urlencode.php
<?php
$id_fn="1326721886";
$url_fn="http://members.ferrara.linux.it/aalex/flatnuke/index.php?mod=read&id=$id_fn";
$url_fn_encode=urlencode($url_fn);
$url_fn_encode_encode=urlencode($url_fn_encode);
$url_fb="<iframe src=\"http://www.facebook.com/plugins/like.php?href=$url_fn_encode_encode&layout=standard&show_faces=true&width=450&action=like&font&colorscheme=light&height=80\" scrolling=\"no\" frameborder=\"0\" style=\"border:none; overflow:hidden; width:450px; height:80px;\" allowTransparency=\"true\"></iframe>";
echo $url_fb."\n";
?>

Read more ›

Guadagnare con il web – BeRuby

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.

Read more ›

Rilascio pacchetto debian e rpm per flatnuke 3.0.0

Ho creato un pacchetto debian e rpm per la versione 3.0.0 di Flatnuke in modo da facilitare l’installazione su sistemi linux Debian e Red Hat based.

Il download é disponibile qui:
Pacchetto Debian Flatnuke (39)
Pacchetto Rpm Flatnuke (35)

Installazione Deb:

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.

Read more ›

Un ramdisk per firefox

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:

alex@eeepc:/etc/rc2.d$ ls -lrt /etc/rc2.d/ | tail -4
lrwxrwxrwx 1 root root  21 2009-06-06 20:57 S20eee-control -> ../init.d/eee-control
lrwxrwxrwx 1 root root  17 2009-07-11 22:10 S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  14 2009-08-14 22:24 S20gpsd -> ../init.d/gpsd
lrwxrwxrwx 1 root root  23 2010-05-11 20:37 S99ramdisk -> /home/alex/mkramdisk.sh

Script di sincronizzazione della cartella di backup del profilo firefox:

alex@eeepc:~$ cat sync_firefox.sh
#!/bin/bash

rsync -av /home/alex/.mozilla/firefox/n7b0wdkv.default /home/alex/bck_firefox

Lo script sync_firefox.sh è “linkato” sotto la directory /etc/rc0.d:

root@eeepc:/etc/rc0.d# pwd
/etc/rc0.d
root@eeepc:/etc/rc0.d# ln -s /home/alex/sync_firefox.sh K99sync-firefox
root@eeepc:/etc/rc0.d# ls -lrt
totale 4
lrwxrwxrwx 1 root root  14 2009-08-14 22:24 K20gpsd -> ../init.d/gpsd
lrwxrwxrwx 1 root root  26 2011-01-30 19:42 K99sync-firefox -> /home/alex/sync_firefox.sh

Ecco invece come si presenta la situazione dei file nel profilo di firefox:

alex@eeepc:~$ cd .mozilla/firefox
alex@eeepc:~/.mozilla/firefox$ ls -lrt
totale 12
-rwxrwxrwx  1 root root  96 2011-01-30 18:43 profiles.ini.ramdisk
-rwxrwxrwx  1 root root  94 2011-01-30 18:43 profiles.ini.backup
-rwxrwxrwx  1 root root  94 2011-01-30 18:43 profiles.ini
lrwxrwxrwx  1 root root  26 2011-01-30 18:43 firefox -> /home/alex/ramdisk/firefox
drwxrwxrwx 10 root root 960 2011-01-30 19:49 n7b0wdkv.default
alex@eeepc:~/.mozilla/firefox$ cat profiles.ini
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=n7b0wdkv.default

Catalogo di libri di testo in licenza Creative Commons

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.

Download Catalogo 2011

Il less a colori

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):

grep --colour=always ERROR pippo.txt | less -R

Cancellare le ultime n-righe di un file

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:

alex@goku:~$ tac pippo.txt | tail +4 | tac
1
2
3
4

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.

alex@goku:~$ tac pippo.txt  | tail -$(($(wc -l pippo.txt | awk '{print $1}')-3)) | tac
1
2
3
4

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).

ALL=$(wc -l elenco.txt | awk '{print $1}')
TOP=$(($LAST - 3))
head -$(echo $TOP) elenco.txt > elenco.txt.new
mv elenco.txt.new elenco.txt

E’ possibile comunque simulare il comando tac tramite il sed.

alex@goku:~$ sed -n '1!G;h;$p' pippo.txt
7
6
5
4
3
2
1

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.

alex@goku:~$ sed '$d' pippo.txt

PHP short tags e Flatnuke

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.

Flatnuke nightly build

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:

$ crontab -l
59 23 * * * /home/soci/aalex/cvs_con_tar.sh > /home/soci/aalex/cvs_con_tar.log 2>&1

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).

$ export EDITOR=vi

Infine lo script completo:

#!/bin/bash

DATA=$(date '+%Y%m%d')
VERSION="3.0.0"
HOST="flatnuke.cvs.sourceforge.net"
USER="anonymous"
HOME_TAR="/home/soci/aalex/www/AutoIndex/appoggio/flatnuke_nightly"

VAR=$(expect -c "
spawn cvs -d:pserver:$USER@$HOST:/cvsroot/flatnuke login
expect \"CVS password:*\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
cvs -z3 -d:pserver:$USER@$HOST:/cvsroot/flatnuke co -P flatnuke

mkdir flatnuke-${VERSION}-${DATA}
cp -ivr flatnuke/* flatnuke-${VERSION}-${DATA}
tar zcvf flatnuke-${VERSION}-${DATA}.tar.gz --exclude=CVS flatnuke-${VERSION}-${DATA}
rm -rf flatnuke-${VERSION}-${DATA}
md5sum flatnuke-${VERSION}-${DATA}.tar.gz > flatnuke-${VERSION}-${DATA}.md5
mv flatnuke-${VERSION}-${DATA}.tar.gz $HOME_TAR/
mv flatnuke-${VERSION}-${DATA}.md5 $HOME_TAR/
find $HOME_TAR/ -name 'flatnuke-3*' -mtime +15 -exec rm -f {} \;

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.

Cvs auto login

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.

#!/usr/bin/expect

spawn cvs -d:pserver:anonymous@flatnuke.cvs.sourceforge.net:/cvsroot/flatnuke login
expect "CVS password:"
send "\r"
interact
spawn cvs -z3 -d:pserver:anonymous@flatnuke.cvs.sourceforge.net:/cvsroot/flatnuke co -P flatnuke
interact
exit

Esempio di sintassi here document (che non funziona nel caso di cvs)

ftp -i -n otherhost << EOF
user myname mypassword
mput foo bar
EOF

Esempio di sintassi con pipe:

echo "
user myname mypassword
mput foo bar
" | ftp -i -n otherhost

oppure con telnet:

#!/bin/sh
tpipe() {
sleep 3;echo myname
sleep 1;echo mypassword
}
tpipe | telnet otherhost

Create your own free site

 

Essentials

Meta

Pages

Categories

Blogroll