Archivi per la categoria ‘Informatica’

Debuggare uno script bash

martedì, 10 Gennaio 2012

Quando uno script in bash cresce in dimensioni, diventa sempre più difficile trovare eventuali errori nel codice.

La shell GNU bash fornisce a questo scopo alcune funzionalità di debug.

La più immediata ed interessante è la “modalità debug“, che si attiva eseguendo la sotto-shell con l’opzione -x; in questa modalità ogni comando più ogni suo argomento è stampato sullo standard output dopo che le variabili sono state sostituite, ma prima di essere eseguito, ad esempio:

~$ cat script.sh
#!/bin/bash
VARTEST="variabile di test"
echo "$VARTEST"
echo ""
~$ bash -x script.sh
+ VARTEST='variabile di test'
+ echo 'variabile di test'
variabile di test
+ echo ''

~$

Si può attivare la modalità di debug anche solo in un pezzo del codice, in questo modo:

~$ cat script.sh
#!/bin/bash
VARTEST="variabile di test"
set -x
echo "$VARTEST"
set +x
echo ""
~$ bash script.sh
+ echo 'variabile di test'
variabile di test
+ set +x
~$

E’ possibile passare dalla modalità debug alla modalità normale quante volte si vuole all’interno di uno script.

Altro strumento utile è la “modalità di non-esecuzione“; in questa modalità la sintassi viene analizzata in cerca di errori, senza però eseguire i comandi dello script. La modalità è attivabile attraverso l’opzione -n, sia per tutto lo script che per una sua parte soltanto, in maniera analoga all’opzione precedente:

~$ cat script.sh
#!/bin/bash
echo "inizio test"
NUM=2
echo "numero = $NUM"
if [[ 1 -lt $NUM ]]
then
 echo $NUM maggiore di 1
~$ bash -n script.sh
script.sh: riga 8: errore di sintassi: fine di file non attesa
~$

Applicato su una porzione di codice:

~$ cat script.sh
#!/bin/bash
echo "inizio test"
set -n
NUM=2
echo "numero = $NUM"
if [[ 1 -lt $NUM ]]
then
 echo $NUM maggiore di 1
set +n
~$ bash script.sh
inizio test
script.sh: riga 10: errore di sintassi: fine di file non attesa
~$

Far riferimento ad una cella fissa nelle funzioni Excel / OOo Calc

martedì, 10 Gennaio 2012

Questo trucchetto sarà abbastanza ovvio per tutti coloro che utilizzano i fogli di calcolo quotidianamente, ma è stato molto utile per me che scrivo principalmente codice e uso di rado i fogli di calcolo.

Capita a volte di voler fissare un valore, una costante in una cella ed utilizzare questo valore nelle formule presenti nel foglio.?

Facciamo un esempio, mettiamo di voler cambiare in dollari una lista di valori in euro in base al tasso di cambio corrente.
Nella prima riga, scriveremo la formula per il cambio di valuta:

= B5 * C2

Copiando questa cella nelle successive righe, il programma adatta dinamicamente i suoi riferimenti:

= B6 * C3
= B7 * C4
= B8 * C5

e così via, senza mantenere fisso il riferimento al nostro tasso di cambio.

Per creare un riferimento fisso, che non viene adattato dalle operazioni di copia o trascinamento è necessario usare l’operatore $.

Se vogliamo che il riferimento alla colonna (o alla riga) non cambi, anteponiamo “$” al nome della colonna (o della riga). Se vogliamo fissare il riferimento di una cella anteponiamo $ al nome di riga e colonna:

= B5 * $C$2

Se trasciniamo questa formula sulle altre righe, il riferimento alla cella C2 rimarrà invariato, ottenendo il risultato desiderato.

Inviare email da shell con file allegati

martedì, 10 Gennaio 2012

Molti programmatori già sanno com’è facile inviare email da shell. Una semplice invocazione al comando “mail” con il destinatario passato come parametro, gli invierà tutti i dati letti dallo standard input.

$ mail giovanni@emailprova.it < /tmp/testo.txt
$ echo "Ci vediamo questa sera?" | mail milena@emailprova.it

Il comando mail accetta anche altri parametri:

  • -b bcc-addr Invia l’email in copia carbone nascosta agli indirizzi specificati.
  • -c cc-addr Invia l’email in copia carbone agli indirizzi specificati.
  • -s subject Specifica l’oggetto dell’email.

Ad esempio:

$ echo "andiamo fuori per una pizza?" | mail \
 -c "marco@emailtest.it, franco@emailtest.it" \
 -s "Serata pizza" nicola@emailtest.it

A volte però, nasce la necessità di inviare uno o più allegati, che non sono semplice testo, ma immagini, o file binari in generale.
Volendo usare il comando “mail”, sarebbe necessario codificare questi file secondo lo standard MIME, preparare una email testuale ed inviarla.

A venirci in aiuto, però, c’è il programma “mutt“.

Mutt è un client email, interattivo, orientato al testo, che all’occorrenza diventa un utilissimo strumento da riga di comando, per inviare email con allegati.

Ad esempio:

echo "Ecco la canzone che mi chiedevi." | mutt \
-a "canzone.mp3" \
-s "Canzone" marco@emailtest.it

In questo esempio ci sono tutte le parti più importanti di una email:

  • L’oggetto, passato dall’opzione -s.
  • Il corpo principale, letto dallo standard input.
  • Il destinatario (marco@emailtest.it).
  • L’allegato, specificato dall’opzione -a.

Se, infine, non si vuole specificare nessun testo è possibile passare una riga vuota:

echo | mutt -a "/tmp/backup.tar.gz" \
-s "Backup" sysadmin@serveremail.com

O /dev/null:

mutt -a "/tmp/backup.tar.gz" -s "Backup" \
sysadmin@serveremail.com < /dev/null

É possibile scaricare mutt all’indirizzo http://www.mutt.org/, questo programma è disponibile per una enorme quantità di dialetti unix / linux e per Microsoft Windows.

Includere tutti i file di una directory in php

lunedì, 15 Febbraio 2010

Ecco un modo rapido per includere tutti i file di una directory in una pagina php, per esempio per caricare delle librerie:

foreach (glob("directory/*.php") as $filename) {
	include_once $filename;
}

OpenOffice 3.2 pronto per il download

giovedì, 11 Febbraio 2010

Finalmente è uscita la nuova versione della suite per ufficio gratuita OpenOffice.Logo OpenOffice

Con la nuova versione, migliora il tempo di caricamento delle applicazioni. Calc, Writer e Draw, a quanto riportano gli sviluppatori OpenOffice.org, si avvieranno nella metà del tempo rispetto alla versione 3.0; questo anche senza l’ausilio di QuickStart, la funzionalità di precaricamento in memoria, che abbatte i tempi di attesa.

Tra le novità dichiarate nelle note tecniche di rilascio, migliorato il supporto allo standard ODF e agli altri formati di documenti per ufficio; in particolare ai famigerati “File XML Microsoft Office”.

E’ possibile vedere la lista completa delle migliorie sul wiki ufficiale, mentre è possibile scaricare la nuova versione qui.

Aprire le schede di Firefox 3.6 sempre all’estrema destra

giovedì, 11 Febbraio 2010

Chi di recente ha aggiornato il browser Firefox alla nuova versione 3.6, si sarà accorto del cambiamento con cui viene gestita l’apertura delle nuove schede, all’interno del browser.

Le nuove schede venivano prima aperte sempre all’estrema destra, mentre il nuovo comportamento di default è di aprire la nuova scheda (con il pulsante centrale del mouse o dal menu contestuale) alla destra della scheda corrente.

Per chi non riesce ad abituarsi al nuovo modo, ecco come ripristinare il vecchio comportamento:

  • Scrivere about:config nella barra degli indirizzi e confermare cliccando su “Farò attenzione, lo prometto”
  • Nel campo del filtro, scrivete tabs.insertRelatedAfterCurrent
  • Cliccando due volte sulla chiave trovata, impostate il valore a “false”

Ecco fatto, non è necessario nemmeno riavviare il browser!