Experimentalia

Appunti raminghi

Archive for Marzo 2008

bash: head tail VS tail head

nessun commento

In questi giorni ho dovuto selezionare delle stringhe all’interno di alcuni file in bash.

Sono sempre stato solito usare i comandi head e tail concatenati nel modo seguente:

head <nomefile> --lines <linea da selezionare> | tail 1

ma scartabellando in internet nel tentativo di trovare un comando simile mi sono trovato di fronte ad una versione diversa della mia solita pipe:

tail <nomefile> --lines +<linea da selezionare> | head 1

La domanda che mi sono posto è stata: quale delle due versioni è più efficiente?

Su Diecimila iterazioni su diecimila file diversi la media misurata con time su 50 prove è stata di 39,74 secondi a prova per la prima versioe e di 40,97 per la seconda versione.

Diecimila iterazioni del comando sullo stesso file, in modo da testare il comportamento anche con il supporto della cache ha mostrato uno scarto ancora più ridotto, 26,984 contro 27,183 secondi e quindi considererei le due versioni sostanzialmente equivalenti.

Un’altra valutazione da fare riguarda i tempi, paragonabili nel caso in cui la riga da selezionare si trovi in testa o in coda al file.
Mi sarei aspettato uno sbilanciamento a favore di una delle due soluzioni in un caso controbilanciato da una situazione contraria nel caso opposto ma così non è stato. Qualcuno ha idea del perché?

E questo, per ora, è tutto

Written by eineki

Marzo 31, 2008 alle 1:47 am

Pubblicato in bash, esperimenti

Taggato con , , , , , ,

Hardy Heron

nessun commento

Dovete sapere che abito in riva al Savena, a pochi passi, qualche decina, da Bologna. Lo scorso fine settimana, la mia compagna ed io, ci siamo svegliati in compagnia di un Airone Cinerino che zampettava tra la vegetazione del fiume in mezzo alle folaghe.

Non ho fatto in tempo a prendere la macchina fotografica ma era chiaro che era tempo di passare alla nuova versione della distribuzione sudafricana.

Detto, fatto. Aggiorno il sistema , modifico i riferimenti in /etc/apt/source.lst ( sed-e “s/gutsy/heron/g” source.lst) , poi digito i soliti apt-get update e apt-get dist-upgrade e mi preparo al peggio.

Il peggio si traduce in 11 pacchetti broken, da policykit ad hal, a causa di una directory mancante, /var/lib/PolicyKit, che ho dovuto creare manualmente.

Dopo un’ora circa (si, l’adsl non è delle migliori) il sistema è tornato su, l’unica altra modifica da fare è stato riaggiornare i dirver nvidia, ebbene si, lo confesso, uso quelli proprietari.

Nient’altro da segnalare per ora, a parte powertweakd che ogni tanto va in crash, e per una beta, anche se ormai in dirittura d’arrivo è già qualcosa.

Written by eineki

Marzo 27, 2008 alle 14:37 pm

Pubblicato in Varie ed eventuali, linux

Taggato con , , , ,

Context Free ~ Arte Libera da Contesto

nessun commento

ContestFree Sample

Chi l’ha detto che le grammatiche libere sono noiose? Da qualche giorno mi sono imbattuto in un programma che permette di creare grafica a partire da grammatiche libere che ognuno può creare. Ci vuole qualche tentativo prima di cominciare a prendere confidenza con il linguaggio, complice la mancanza di una chiara documentazione o la mia inettitudine nel trovarla ;)

In ogni caso i risultati sono affascinanti a fronte di un piccolo impegno iniziale.

Il programma si chiama ContextFree ed è disponibile per tutti i maggiori sistemi operativi (e quindi oltre che per Linux e Mac Os anche per MS Windows qualcosa). Il suo creatore lo descrive nella home page con uno stile che giudicare terso e conciso è un eufemismo e non voglio rovinarvi la sorpresa di percorrere il link. Sempre dal sito, per chi non è shell addicted, si arriva ad un front-end grafico che permette di semplificare la scrittura delle grammatiche (poco) e la visualizzazione dei risultati. Se volete risparmiarvi la ricerca dell’indirizzo è: http://www.dospeixos.net/projects/contexteditor.

La versione Linux ha bisogno di essere compilata (ma questo sicuramente non spaventerà il pubblico del programma) e richiede le libpng, che dovrebbero essere comunque presenti nella vostra distribuzione nella versione runtime: installatene anche la versione sorgente.

Avessi trovato il programma ai tempi di Paradigmi di programmazione, forse, mi sarei annoiato un po’ meno.

E questo è tutto.

[1]: “qualcosa” visto che non ho modo di provarlo e sul sito non si dice nulla di window vista

Written by eineki

Marzo 23, 2008 alle 19:55 pm

split in bash – cut [ seconda parte ]

con un commento

Nel precedente post abbiamo visto l’utilizzo canonico di cut: separare i diversi campi delimitati all’interno di una stringa. Potremmo avere a che fare con un altro tipo di file, anch’esso molto comune , che contiene dei record, memorizzati uno per riga, i cui campi non sono delimitati da caratteri speciali ma registrati uno dopo l’altro in base ad una loro lunghezza predefinita. In questi casi è possibile selezionare parti della stringa per offset.

Selezionare per offset significa suddividere la stringa in base ai caratteri che la compongono. Tali caratteri possono essere selezionati analogamente ai campi nel post precedente. C’è una sola differenza: invece di specificare l’indice del campo da selezionare se ne specifica l’offset a partire dal primo carattere della stringa utilizzando il parametro -c al posto di -f.

Esiste anche un parametro -b che permette di fare riferimento ai byte della stringa (-b). Mentre scrivo non c’è differenza tra i due parametri che avranno comportameni diversi con l’internazionalizzazione del sistema operativo e l’introduzione dei caratteri multibyte (ad esempio UTF-16).

Non c’è molto altro da aggiungere, non resta che sperimentare per prendere confidenza con il comando.

E questo è tutto

Written by eineki

Marzo 20, 2008 alle 17:31 pm

Pubblicato in bash, linux

Taggato con , , , , , , ,

Split in bash – cut

con un commento

Spesso e volentieri un amministratore di sistema si trova a dover manipolare record in forma di righe di testo in cui i campi sono fissi o separati da un carattere che fa da separatore.

Che si tratti di un file csv (comma separated values: valori separati da virgola) o del file delle password di un sistema linux cut è il comando che fa per noi.

Si tratta di un programma molto versatile che permette di spezzettare una stringa in più parti secondo diversi criteri che conviene illustrare con alcuni esempi.

Prendiamo ad esempio la stringa “primo:secondo:terzo:quarto:quinto:sesto” e cerchiamo di spezzarla in più parti.

$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 3 -d:
terzo
$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 3,2 -d:
secondo:terzo
$ echo primo:secondo:terzo:quarto:quinto:sesto | cut -f 2-4 -d:
secondo:terzo:quarto
$

Questi esempi illustrano l’utilizzo del parametro f, che sta per field, ed il parametro d, delimiter.

il parametro -d (o anche –delimiter) indica il carattere che dovrà essere considerato il separatore dei vari campi. In questo caso il delimitatore è rappresentato dai due punti. In caso di spazio o carattere che verrebbe espanso dalla shell bisogna farlo precedere dal backslash; ad esempio per indicare lo spazio come delimitatore si utilizzerebbe la sintassi “-d\ “. Nota: non sono possibili separatori multipli

Il parametro -f invece stabilisce quali campi devono essere riportati come risultato. Ci sono più modalità di selezione:

  • la selezione singola, ad esempio -f 3, è il caso più semplice e prevede che per ogni riga in ingresso venga messo in output una riga che contiene solo il campo specificato (i campi vengono contati a partire da 1);
  • la selezione multipla permette di specificare un intervallo di campi a partire dai suoi estremi, ad esempio -f 3-7 seleziona tutti i campi dal terzo al settimo compresi gli estremi. E’ importante che gli estremi siano ordinati, prima il minore, ma non è necessario che siano tutti presenti, se l’estremo superiore dell’intervallo non esiste verranno selezionati tutti i campi disponibili fino alla fine della stringa;
  • l’ultima modalità di selezione, la sequenza, permette di elencare, separandoli con delle virgole campi o intervalli di campi. L’esempio riportato -f 3,2 serve a far notare che l’ordine dei campi nella selezione è ininfluente e che -f 2,4 e -f 4,2 sono equivalenti e che verranno riportati in output i campi 2 e 4 (in quest’ordine). Altri esempi validi sono: -f 3-5,1 o -f 1,1-3,9-11. Nota: un errore comune nella selezione multipla consiste nel far seguire la virgola da uno spazio come si dovrebbe fare secondo le regole di dattilografia;

Non abbiamo finito di sviscerare le potenzialità di cut ma penso che potremmo fermarci qui in attesa di un prossimo post in cui tratteremo della selezione per offset

E questo e tutto (fino al prossimo post)

Written by eineki

Marzo 20, 2008 alle 4:07 am

Pubblicato in bash, linux

Taggato con , , , , , , ,

vim, putty e il tastierino numerico

nessun commento

impostazioni puttyMi capita spesso di collegarmi a macchine linux tramite putty, e mi sono spesso trovato nella spiacevole situazione di non poter utilizzare il tastierino numerico per inserire i numeri in vim.

Ogni volta che ci provavo ottenevo dei caratteri ed un ritorno a capo, per non parlare dell’impossibilità di cambiare riga in modalità inserimento.

La soluzione è rapida tanto quanto è breve il post: basta settare una delle impostazioni del client ssh:

Change settings > Terminal > Features > Disable application keypad mode

E questo è tutto

Written by eineki

Marzo 18, 2008 alle 11:49 am

Pubblicato in linux, quick fix

Taggato con , , , ,

refactormycode.com

nessun commento

Se mettere le mani nel codice degli altri, pronti a criticare proporre migliorie, è il vostro sport preferito non potete farvi mancare almeno una visita al sito riportato nel titolo del post.

Si tratta di una giovane community di programmatori, prevalentemente di linguaggi di scripting per il web, che si scambiano pareri su pezzi di codice che si sono trovati a scrivere e di cui vogliono migliorare le prestazioni piuttosto che la leggibilità.

E questo è tutto.

url: http://refactormycode.com

Written by eineki

Marzo 18, 2008 alle 1:26 am

Pubblicato in recensioni, sitoweb

Split di una stringa in bash

nessun commento

Direi che ormai è arrivato il momento di un articolo che abbia una certa utilità (e quindi si merita la lettera iniziale maiuscola :) )

Normalmente preferisco usare cut o awk per separare i diversi token contenuti in una stringa.

Stamattina devo sostituire alcune regole di accesso su un firewall (iptables), ho bisogno di individuarle con delle regole ad hoc contenute in un array, la prima riga individua le regole e crea una lista con le loro posizioni.

NEWRULE[1]='iptables -R %s -i eth0 -t tcp --dport 443 --jump HTTPS_ENABLED'
NEWRULE[2]='iptables -R %s -i eth2 -t tcp --dport 443 --jump HTTPS_ENABLED'
 RULES_POSITION=`$IPT -vn --line-number -L INPUT | grep 443 | grep -n . | cut -f1 -d\ `
for INPOINT in $RULES_POSITION; do
   INDICE=${INPOINT%:*}
   POSITION=${INPOINT#*:}
   printf "${NEWRULE[INDICE]}" $POSITION
done


tra il codice riportato ci interessano in particolare le righe

   INDICE=${INPOINT%:*}
   POSITION=${INPOINT#*:}

ci aspettiamo in input delle stringhe del tipo formate da due numeri separate dai due punti, ad esempio 1:24.

Nel nostro caso il separatore è il simbolo di due punti

L’espansione si attiva con ${}, all’interno delle parentesi graffe va inserito il nome della variabile da separare in due. %:* prende la parte della variabile che va dall’inizio alla prima occorrenza del separatore (in questo caso :) . Una nota. Questo comportamento è detto lazy , se si vuole utilizzare una selezione greedy bisogna usare un doppio simbolo di percentuale.

Cercherò di spiegarmi meglio:

  • La selezione greedy (=avida) va a cercare il separatore più lontano dall’inizio della stringa
  • La selezione lazy (=svogliata) invece si ferma non appena trova il primo separatore utile

Il comportamento è analogo per l’operatore # (## in versione greedy) che invece seleziona a partire dall’ultimo carattere della string.

Written by eineki

Marzo 14, 2008 alle 12:08 pm

Pubblicato in bash, quick fix

Taggato con , , , , ,

wordpress blog chart

nessun commento

2,612,300 blogs with 105,854 new posts today 12 March 2008
2,623,276
blogs with 109,640 new posts today 13 March 2008.
2,637,829 blogs with 104,176 new posts today 14 March 2008.
2,660,750 blogs with 107,661 new posts today 17 March 2008.
2,667,100 blogs with 113,745 new posts today 18 March 2008.
2,684,003
blogs with 100,471 new posts today 19 March 2008.
2,685,022 blogs with 113,348 new posts today 20 March 2008.
2,697,454 blogs with 89,174 new posts today 22 March 2008.
2,705,111
blogs with 81,990 new posts today 23 March 2008.
2,713,939 blogs with 92,928 new posts today 24 March 2008.
2,732,138 blogs with 112,904 new posts today 25 March 2008.

Mi è venuta la curiosità di tracciare le statistiche di wordpress. Vorrei costruire, per esercizio, uno script per l’aggiornamento automat(t)ico del post. Vedremo se e quando ne avrò tempo.

Per ora aggiornamento manuale ;)

Written by eineki

Marzo 14, 2008 alle 9:32 am

Pubblicato in Varie ed eventuali

numero 2,611,144

nessun commento

Si, sono il 2,611,144-esimo blog aperto su questa piattaforma (fonte it.wordpress.com), non chiedetevi ragione della sua utilità, sicuramente è nulla.

Il titolo attuale è experimentalia perché ho intenzione di sperimentare l’utilizzo di un blog (e quindi non aspettatevi troppa coerenza tra i post). Si tratterà principalmente di un diario personale che ha poche ambizioni di acquistare notorietà o evidenza.

Se ci riuscite godetevelo (comunque sono accettati suggerimenti).

Ovviamente i commenti sono negati agli anonimi solamente per ritardare il proliferare di spam.

Written by eineki

Marzo 11, 2008 alle 0:43 am

Pubblicato in Varie ed eventuali