Sunday 26 November 2006

La forza peso su un piano inclinato

Signore della Luce

Con questo post inauguro una sezione di questo blog dedicata ai libri che ho letto e mi sono piaciuti, cercando di non rovinarvi la lettura del libro con inutili rilevazioni :)


Titolo: Signore della luce
Autore: Roger Zelazny
Edizione: 045 Urania Collezione - Mondadori

Trama: Romanzo di fantascienza mitologica (da notare: non fantasy), che narra le vicende di una colonia umana su un pianeta remoto e dei loro "dei" che vogliono mantenere il monopolio tecnologico e usano la religione (Indu) come strumento di controllo. Ma ci sono alcuni "dei" che si oppongono e lottano per sovvertire l'ordine costituito perché finalmente la colonia possa essere libera.

Lo stile narrativo a volte rallenta troppo ed eclissa troppo le scene d'azione, ma l'idea del libro è veramente originale ed accattivante, sviluppata in modo magistrale come pochi avrebbero saputo fare.

Alcuni consigli che vi aiuteranno a comprendere meglio il libro:

  • leggete le note introduttive ad ogni capitolo, non fate come me :)
  • i personaggi hanno un nome riconducibile alle divinità Indu, scelto dalle "dinività" stesse, che ne rispecchia il carattere o il ruolo... documentatevi sulle dinività man mano che le incontrate (al fondo dell'edizione che ho letto io c'era una comodissima reference... peccato non averlo notato se non alla fine :P)

Friday 17 November 2006

Command line parsing in Bash

Ecco un semplice sistema che risolve un problema che incontro spesso in BASH: sviluppare uno script che gestisca un command line input. Il tutto si può fare molto semplicemente con un loop infinito, un case e una semplice funzione di parsing delle opzioni in formato long. Premessa: l'esempio illustra un caso semplice con 2 comandi possibili, di cui solo uno può essere scelto (se ne indichi più d'uno, solo l'ultimo verrà utilizzato) e una sola opzione, disponibile sia in formato short che long... ma è veramente semplice aggiungere nuove opzioni senza cambiare la logica.
Ciclo principale_action='none'
while true; do
  case $1 in
      start)
          _action='start'
          ;;
      stop)
          _action='stop'
          ;;
      --package=*)
          opt_value '--remote-host=' $1
          PKG=${OPT_VALUE}
          ;;
      -k)
          PKG=${2}
          shift
          ;;
      *)
          break;
  esac
  shift
done
Opt_value
function opt_value {
   _p=$1
   _arg=$2

   size=`echo $_p | wc -c`
   OPT_VALUE=`echo $_arg | cut -c ${size}-`
}
Ecco fatto, abbiamo ottenuto il nostro bel parser. Subito dopo il parsing, ho trovato molto utile invocare una funzione per riconfigurare lo script (in genere i miei script hanno sempre le variabili altamente interconnesse tra di loro, quindi dopo il parsing della command line altre opzioni potrebbero dover cambiare). Come ultima cosa non vi resta che fare un controllo della variabile _action per sapere quale azione vuole l'utente e il gioco e fatto :)