giovedì 24 dicembre 2009

Aprire con Emacs un file protetto

Se avete l'editor di testo Emacs già aperto e avete necessità di modificare un file di testo protetto (per esempio uno dei file di configurazione presenti nel file system e di proprietà dell'utente root), non c'è bisogno di avviare una nuova sessione Emacs, magari da terminale con il comando
gksudo emacs /percorso/del/file/protetto
Esiste, infatti, una estensione chiamata Tramp (inclusa di default nell'installazione delle ultime versioni di Emacs) che permette di editare file remoti ma anche file appartenenti a un altro utente. Per modificare un file protetto è sufficiente usare la combinazione di tasti C-x C-f (oppure per chi usa l'interfaccia grafica andare in File → Open file, che è la stessa cosa) e scrivere
/sudo::/percorso/del/file/protetto
Quindi, se per esempio vogliamo aggiungere un nuovo repository nel file /etc/apt/sources.list dovremo scrivere
/sudo::/etc/apt/sources.list
Verrà ovviamente richiesta di inserire la password nella echo-area. Se {volete,avete bisogno di,preferite} usare su al posto di sudo, dovete usare la sintassi
/su::/percorso/del/file/protetto


Come accennato prima, Tramp permette anche di modificare file in remoto per esempio attraverso telnet o ssh. La procedura è sempre la stessa: dopo aver aperto un nuovo file con C-x C-f (oppure File → Open file) scrivete
/telnet:/percorso/del/file/remoto
oppure
/ssh:/percorso/del/file/remoto
Per maggiori dettagli su questa estensione potete consultare il manuale (in inglese).

sabato 5 dicembre 2009

Autocompletamento in Emacs

Nota: Nel post Autocompletamento in Emacs (2) spiego come installare la nuova versione di questa estensione, che offre maggiori funzionalità rispetto a questa.

In Emacs ("l'editor in tempo reale, estensibile, personalizzabile, auto-documentante e visuale") è disponibile una funzione di autocompletamento con la combinazione M-/ (ricordo che il tasto M, abbreviazione di Meta, corrisponde in genere al tasto Alt oppure Esc). Questa combinazione, però, è abbastanza scomoda da usare dal momento che in realtà bisogna premere 3 tasti ogni volta (ALT + SHIFT + 7, a quanto pare lo slash dell'eventuale tastierino numerico non vale), almeno sulle tastiere italiane, e quindi velocizza ben poco la scrittura di un testo o di un codice. Essendo Emacs un editor di testo estensibile, qualcuno ha ovviamente provveduto a creare un'estensione che permettesse di aumentare notevolmente l'utilità dell'autocompletamento. Esistono almeno 2 o 3 estensioni che fanno al nostro caso, io ne ho provata una in particolare, si chiama Auto Complete.

Come è possibile leggere dal file README visualizzato nella pagina principale del progetto, per installare questa estensione è sufficiente eseguire questi comandi in un terminale (la versione del programma probabilmente cambierà rispetto a quella presente in questo post, fate sempre riferimento al file README presente su quel sito):
git clone git://github.com/m2ym/auto-complete.git
cd auto-complete
git checkout v1.0
emacs -L . -batch -f batch-byte-compile *.el
cp *.el *.elc ~/.emacs.d/

Per seguire questa strada è quindi necessario aver installato nel proprio sistema Git, il sistema software di controllo versione distribuito realizzato da Linus Torvalds in persona. Il nome del pacchetto da installare in Ubuntu per ottenere questo programma (se non è già presente), però, non è git, come ci si potrebbe (e dovrebbe) aspettare ma git-core, perché git si riferisce a un altro programma. Quindi è sufficiente installare da Synaptic il pacchetto git-core, oppure digitare nel terminale il comando
sudo apt-get install git-core
Dopo di ciò sarà possibile eseguire i comandi sopra elencati per poter installare l'estensione Auto Complete. Poi, come spiegato nel file auto-complete.el, bisogna aggiungere al file di configurazione ~/.emacs (ricordo che la tilde ~ è un'abbreviazione per il percorso della cartella home dell'utente corrente e che file e cartelle che hanno il nome che inizia con il punto sono nascosti) queste righe:
(require 'auto-complete)
(require 'auto-complete-config)
(global-auto-complete-mode t)

Queste servono per caricare i file necessari e attivare automaticamente la modalità global-auto-complete.

Potrebbe presentarsi un problema nel caso in cui la cartella ~/.emacs.d non sia presente nella variabile load-path di Emacs. Infatti con l'ultimo comando (cp *.el *.elc ~/.emacs.d/) avete copiato tutti i file con estensione .el e .elc nella cartella ~/.emacs.d, ma in questo caso Emacs non sarebbe in grado di caricare questi file al suo avvio e comparirebbe un messaggio simile a questo:
Warning (initialization): An error occurred while loading `/home/USERN_NAME/.emacs':

File error: Cannot open load file, auto-complete

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Per rimediare a ciò è sufficiente aggiungere la cartella in questione alla variabile load-path inserendo questa riga nel file ~/.emacs (prima delle righe segnalate in precedenza, vedi qui):
(add-to-list 'load-path "~/.emacs.d")
A questo punto l'estensione sarà pronta per essere usata.

La procedura di aggiunta di una cartella alla variabile load-path potrebbe essere necessaria anche nel caso in cui si volessero aggiungere altre estensioni presenti in altre cartelle non "caricate" da Emacs. È comunque consigliabile mettere tutte le estensioni personalizzate in un'unica cartella, che può essere tranquillamente diversa da ~/.emacs.d (in questo caso non dimenticatevi di copiare i file dell'estensione Auto Complete nella cartella opportuna!).

giovedì 12 novembre 2009

PCManFM non riconosce correttamente il tipo del file in Ubuntu Karmic

Chi sta usando la versione di Ubuntu 9.10 Karmic Koala con ambiente desktop LXDE probabilmente avrà notato che il file manager predefinito, chiamato PCManFM (e la cui versione in questo sistema è la 0.5.1+svn20090607-1), non riconosce correttamente il tipo dei file rendendolo praticamente inutilizzabile. Infatti tutti i file risultano avere come tipo unknown (application/octet-stream) e non è possibile selezionare un'applicazione che apra ciascun file (perché verrebbe utilizzata per aprire tutti file e questo ovviamente non ci sta bene).

Tutto ciò, a quanto pare, è dovuto alla nuova versione (0.70) del pacchetto shared-mime-info. Qualcuno è riuscito a risolvere il problema installando una vecchia versione del pacchetto shared-mime-info (per esempio la 0.60 presente in Jaunty) ma fortunatamente la nuova versione di PCManFM (la 0.5.2) risolve questo problema. Non ci resta quindi che installarla. Ci sono almeno 2 modi per farlo: compilare il sorgente (ma qui non verrà spiegato come farlo) o installare un bel pacchetto deb precompilato. Ovviamente il pacchetto deb precompilato esiste già ed è presente negli archivi di Ubuntu Lucid Lynx (la versione 10.04 che uscirà il prossimo aprile). Per ottenerlo vi basta andare alla pagina http://packages.ubuntu.com/lucid/pcmanfm, selezionare (nella sezione Download pcmanfm) l'architettura usata ("amd64" per il 64-bit, "i386" per il 32-bit) e infine scaricare il deb da uno dei mirror proposti.

sabato 17 ottobre 2009

Guida introduttiva alla creazione di Makefile per compilare documenti LaTeX

Per scrivere i miei documenti LaTeX uso un semplice editor di testo e per compilare il documento finale uso il terminale. I comandi da eseguire per compilare un documento devono spesso essere ripetuti più volte e qualche volta trovo di difficile memorizzazione la giusta sequenza delle operazioni. Per semplificarmi la vita ho quindi deciso di rivolgermi a make:
make è una utility usata con i sistemi operativi della famiglia UNIX che automatizza il processo di conversione dei file da una forma ad un'altra, risolvendo le dipendenze e invocando programmi esterni per il lavoro necessario. [...] Esso usa file chiamati "makefiles" per determinare il grafo delle dipendenze per un particolare output, e gli script necessari per la compilazione da passare alla shell.
(http://it.wikipedia.org/wiki/Make)
I Makefile sono estremamente diffusi nell'ambito della programmazione, la maggioranza dei software open-source sfrutta i Makefile per automatizzare la compilazione del programma. La mia idea di utilizzarli anche per compilare documenti LaTeX è tutt'altro che originale, su Internet, infatti, è possibile recuperare numeri sorgenti LaTeX con allegato un Makefile. Esistono dei programmi (essenzialmente degli script) che permettono di compilare correttamente un documento LaTeX con un solo comando, ma preferisco di gran lunga scrivermi da solo un Makefile perché è estremamente flessibile (con cambiamenti minimi può essere adattato a documenti diversi) e perché oltre alla compilazione automatizza anche altri processi come la conversione di immagini nei formati corretti per l'inclusione nel documento finale o la cancellazione dei file temporanei generati nella creazione di quest'ultimo.

Su Internet si trovano numerose guide che spiegano come realizzare Makefile per compilare programmi, ma poco e niente si trova più specificamente per i documenti LaTeX (sebbene il funzionamento di make sia indipendente dall'utilizzo, suppongo che un utente LaTeX non abbia necessariamente le conoscenze necessarie per comprendere una guida rivolta a un programmatore). Per questo motivo già da un po' di tempo (come segnalai sul forum del Gruppo Utilizzatori Italiani di TeX) ho pubblicato una breve guida al riguardo. Il manuale, in formato PDF, lo potete trovare all'indirizzo http://www.guitex.org/home/images/doc/GuideGuIT/guidamake.pdf, mentre i sorgenti si trovano all'indirizzo https://github.com/GuITeX/guidamakefilelatex/tarball/master.

Mi sono concentrato più sui contenuti che sulla forma, infatti in una delle ultime riletture ho trovato svariati errori ortografici, se ne individuate altri segnalate pure. I Makefile che sono illustrati sono relativamente semplici (date le mie conoscenze basilari sull'argomento), ma se ne possono realizzare di molto molto più complessi. Anche in questo caso, se avete consigli, suggerimenti su come ampliare e migliorare la guida siete i benvenuti. La guida è rilasciata con licenza CC-BY, quindi chiunque può modificarlo, adattarlo alle proprie esigenze, ampliarlo (mi farebbe piacere conoscere le modifiche apportate, specie se di ampliamento), a patto di citarne l'autore (cioè io :D).

Avevo intenzione di aggiungere alla guida delle brevi appendici di cui trovate i titoli (provvisori) nel file make.tex dell'archivio, per questo momento però non ho la possibilità di scrivere nulla a riguardo, se mi sarà possibile lo farò fra un po' di tempo. Tempo trovato :-)

domenica 13 settembre 2009

Plugin per vedere i video di Youtube e Vimeo dentro Pidgin

Segnalo che poche ore fa è stato rilasciato un plugin molto carino per Pidgin che permette di visualizzare i video presenti su Youtube e Vimeo direttamente all'interno delle finestre di conversazione quando qualcuno linka un video caricato su una di queste due piattaforme, senza bisogno quindi di aprire appositamente un browser. La procedura di installazione è riportata (in inglese) molto chiaramente qui.

venerdì 11 settembre 2009

Script per vedere canali RAI senza Firefox

In rete si trovano diversi metodi per Linux che permettono di vedere i canali RAI senza bisogno di dover usare il browser (con conseguente enorme risparmio di memoria). Uno dei migliori (se non il migliore in circolazione) è lo script che si può trovare all'indirizzo http://www.slacky.eu/wikislack/index.php?title=Rai.tv_senza_silverlight. Ultimamente, però, ho problemi ad accedere al sito rai.tv e anche lo scaricamento dei canali effettuati dallo script è particolarmente lento (a volte non avviene proprio perché passano i 10 secondi di timeout impostati nello script. Una soluzione a questo problema è aumentare il timeout, per esempio portandolo a 20 o 30 secondi).

Per evitare di dover aspettare ogni volta diversi secondi per poter avere l'elenco dei canali, allora, ho rimesso mano a un vecchio script che scrissi diversi mesi fa, poco dopo che fu aperto il sito rai.tv, per poter scegliere i canali da vedere ed ecco il risultato (Attenzione: i canali Rai 1, Rai 2 e Rai 3 potrebbero non funzionare):
#!/bin/bash
#  Ultimo aggiornamento: 26/11/2010
#+ Per suggerimenti e consigli visita http://forum.ubuntu-it.org/index.php/topic,316995.0.html

function seleziona(){
    canale=`zenity --list --height=400 --width=300 --title="Televisione" --text="Quale canale vuoi vedere?" --column="Canale" \
    "=== TELEVISIONE ===" "Rai Uno" "Rai Due" "Rai Tre" "Rai 4" "Rai 5" "Rai News 24" "Rai Sport Più" "Rai Sport 2" \
    "Rai Edu1" "Rai Storia" "RaiSat Extra" "RaiSat Premium" "RaiSat Cinema" "RaiSat YoYo" "Rai gulp" "Rai Scuola" "Rai Med" \
    "EuroNews" "Sportitalia" "All Music" "RTL 102.5 (TV)" "NRK1" "NRK2" "NRK Rogaland" "Arcoiris TV" "Antena 1" \
    "France24 English" "etvsatellite" "CBL Channel" "[3]CHANNEL ONE" "SAT 2000" "Ultimo Tg1" "Ultimo Tg2" "Ultimo Tg3" "=== RADIO ===" \
    "Radio Uno" "Radio Due" "Radio Tre" "Isoradio" "RDS" "Radio 105" "RTL 102.5 (Radio)" "Radio Capital" "Radio Deejay" \
    "Radio24" "Controradio" "Radio Popolare" "Radio Onda Rossa" "Radio onda d'Urto" "Radio Città Aperta" "Radio Blackout" \
    "Radio Sherwood" "Virgin radio" "Virgin rock classico" "Virgin rock extreme" "Virgin rock alternative" "Virgin woodstock" \
    "Virgin revolver" "LifeGate Radio" "Radio Flash"`
}

function play_rai(){
    if [ ! -f ~/bin/rai.py ]; then
        if [ ! -d ~/bin ]; then
            mkdir ~/bin
        fi
        wget "http://elubuntu.altervista.org/rai.py" -O ~/bin/rai.py
        chmod +x ~/bin/rai.py
    fi
    ~/bin/rai.py "$1"
}

function play(){
    vlc "$1"
}
while true; do
    seleziona
    case $canale in
        "=== TELEVISIONE ===" | "=== RADIO ===" ) seleziona ;;
        "Rai Uno") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=180090 ;;
        "Rai Due") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=180116 ;;
        "Rai Tre") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=180117 ;;
        "Rai 4") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=75708 ;;
        "Rai 5") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72382 ;;
        "Rai News 24") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1 ;;
        "Rai Sport Più") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145 ;;
        "Rai Sport 2") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=179975 ;;
        "Rai Edu1") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268 ;;
        "Rai Storia") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269 ;;
        "RaiSat Extra") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72382 ;;
        "RaiSat Premium") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72916 ;;
        "RaiSat Cinema") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72381 ;;
        "RaiSat YoYo") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72918 ;;
        "Rai gulp") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4119 ;;
        "Rai Scuola") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268 ;;
        "Rai Med") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=87127 ;;
        "EuroNews") play_rai http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=113784 ;;
        "Sportitalia") play mms://mms.cdn-tiscali.com/sportitalia ;;
        "All Music") play mms://live.mediaserver.kataweb.it/retea?MSWMExt=.asf ;;
        "RTL 102.5 (TV)") play mms://151.1.245.36/rtl102.5vs ;;
        "NRK1") play mms://mms-icanal-live.online.no/nrk_tv_webvid03_l ;;
        "NRK2") play mms://mms-icanal-live.online.no/nrk_tv_webvid05_h ;;
        "NRK Rogaland") play mms://straumV.nrk.no/nrk_tv_rogaland_247_mbr ;;
        "Arcoiris TV") play mms://193.41.7.40/vive-adsl ;;
        "Antena 1") play mms://81.196.2.232/pp1 ;;
        "France24 English") play mms://stream1.france24.yacast.net/f24_liveen ;;
        "etvsatellite") play mms://streaming.e-tv.it/etvsatellite ;;
        "CBL Channel") play mms://151.1.245.71/cblfilm-live ;;
        "[3]CHANNEL ONE") play mms://84.233.254.2/3Channel ;;
        "SAT 2000") play mms://89.119.94.130/Sat2000 ;;
        "Ultimo Tg1") play http://link.rai.it/x/vod/ue/wmx/ultimo_tg1.asx ;;
        "Ultimo Tg2") play http://link.rai.it/x/vod/ue/wmx/ultimo_tg2.asx ;;
        "Ultimo Tg3") play http://link.rai.it/x/vod/ue/wmx/ultimo_tg3.asx ;;
        "Radio Uno") play rtsp://live.media.rai.it/broadcast/radiouno.rm ;;
        "Radio Due") play rtsp://live.media.rai.it/broadcast/radiodue.rm ;;
        "Radio Tre") play rtsp://live.media.rai.it/broadcast/radiotre.rm ;;
        "Isoradio") play rtsp://live.media.rai.it/broadcast/isoradio.rm ;;
        "RDS") play mms://fastreal.fastweb.it/RDS ;;
        "Radio 105") play mms://151.1.245.6/1 ;;
        "RTL 102.5 (Radio)") play mms://151.1.245.36/rtl102.5hq/ ;;
        "Radio Capital") play mms://live.mediaserver.kataweb.it/capital?MSWMExt=.asf ;;
        "Radio Deejay") play mms://live.mediaserver.kataweb.it/radiodeejay?MSWMext=.asf ;;
        "Radio24") play mms://62.196.2.90/Radio24 ;;
        "Controradio") play http://streaming.controradio.emmi.it:8190/ ;;
        "Radio Popolare") play http://www.radiopopolare.it/liveU.asx ;;
        "Radio Onda Rossa") play http://radio.dyne.org:8000/ondarossa.mp3 ;;
        "Radio onda d'Urto") play http://www.radiondadurto.org:8000/listen.pls ;;
        "Radio Città Aperta") play mms://stream.greynetweb.it/rca?MSWMExt=.asf ;;
        "Radio Blackout") play http://stream.teknusi.org:8000/blackout.mp3 ;;
        "Radio Sherwood") play http://62.101.68.185:8000/sherwood.ogg ;;
        "Virgin radio") play mmsh://151.1.245.1/20?MSWMExt=.asf ;;
        "Virgin rock classico") play mms://151.1.245.1/24 ;;
        "Virgin rock extreme") play mms://151.1.245.1/25 ;;
        "Virgin rock alternative") play mms://151.1.245.1/36 ;;
        "Virgin woodstock") play mms://151.1.245.1/13 ;;
        "Virgin revolver") play mms://151.1.245.1/34 ;;
        "LifeGate Radio") play mmsh://onair8.xdevel.com/Lifegate?MSWMExt=.asf ;;
        "Radio Flash") play http://stream5.top-ix.it:8000/radioflash.m3u ;;
        *) exit 0 ;;
    esac
done
(Lo trovate anche qui: http://forum.ubuntu-it.org/index.php/topic,316995.0.html) Gli unici pacchetti richiesti per l'utilizzo del programma sono zenity (utilizzato per creare la semplice interfaccia di scelta del programma) e vlc (potente player multimediale che permette di modificare l'user agent HTTP, necessario per accedere ai video presenti su rai.tv). Per visualizzare i canali della RAI inoltre è necessario installare python3.

Per utilizzarlo basta copiare lo script in un file con un editor di testo a piacere, salvare il file chiamandolo, per esempio, rai, renderlo eseguibile e posizionarlo nella cartella ~/bin (ricordo che la tilde ~ è un'abbreviazione della cartella home dell'utente corrente), creandola se eventualmente non esiste. All'avvio successivo del computer dovrebbe essere sufficiente dare nel terminale il comando
rai
(o il nome che avete dato allo script) per poter aprire la finestra di scelta del canale da visualizzare. Ovviamente è anche possibile creare un lanciatore a questo comando per avviarlo ancora più semplicemente.

Questo script permette solo di vedere le dirette elencate nella finestra che vi apparirà, lo script presente su slacky.eu, invece, offre la possibilità di riprodurre anche tanti altri video presenti sul sito della RAI.

Aggiornamento: su suggerimento di mario000 ho aggiunto anche il link allo streaming di Sportitalia. Se avete suggerimenti per altri canali da aggiungere (anche radio se volete), non esitate a segnalare (meglio se forniti di link allo streaming :-) ). D'ora in poi non credo che scriverò tutte le modifiche apportate allo script, se non modifiche importanti.

martedì 1 settembre 2009

Rendere eseguibile un file

Affinché un file possa essere eseguito è necessario che abbia impostato il permesso di esecuzione. Infatti, provando a eseguire da terminale un file (sia esso un eseguibile, uno script o altro) che non ha il permesso di esecuzione riceverete il messaggio di errore:
bash: ./nomefile: Permesso negato
(dove nomefile rappresenta il nome del file che si è provato a eseguire).

Per impostare il permesso di esecuzione da terminale bisogna utilizzare il comando chmod. La sintassi del comando è
chmod [OPZIONI] permessi nomefile
Per quello che vi interessa riguardo al rendere eseguibile un file il comando da utilizzare è
chmod +x nomefile
Il file da rendere eseguibile può essere specificato indicandone il percorso assoluto o quello relativo, come preferite. Per tutti gli altri usi e opzioni di chmod potete consultare il manuale utilizzando il solito comando man chmod.

Ovviamente è possibile rendere eseguibile un file utilizzando l'interfaccia grafica. Se usate Nautilus, il file manager predefinito di GNOME, bisogna fare clic con il tasto destro sull'icona di un file, scegliere Proprietà, nella scheda Permessi si deve quindi mettere la spunta a Consentire l'esecuzione del file come programma.

È possibile anche utilizzare il seguente breve script di Nautilus che ho scritto per rendere eseguibile anche più file contemporaneamente con un solo clic:
#!/bin/bash
for arg; do
    chmod u+x -- "$arg"
done

Per utilizzare lo script, aprite un file vuoto con un editor di testo (come gedit), copiate lo script nell'editor e salvatelo nella cartella ~/.gnome2/nautilus-scripts (ricordo che la tilde ~ è un'abbreviazione della cartella home dell'utente corrente) chiamandolo, per esempio, Rendi eseguibile. Rendete quindi eseguibile lo script in uno dei modi descritti in precedenza. In questo modo, selezionando e facendo clic con il tasto destro sui file a cui vorrete assegnare il permesso di esecuzione, vi basterà fare clic su ScriptRendi eseguibile (o il nome che avete dato allo script).

lunedì 31 agosto 2009

Rimuovere conferma per il termine sessione, riavvio e arresto del computer

Probabilmente dalla versione 9.04 di Ubuntu avrete notato che facendo clic sulle opzioni Termina sessione..., Sospendi, Iberna, Riavvia... e Arresta... dall'Applet Selettore rapido utente (l'applet che si trova in genere sull'estrema destra del pannello superiore in GNOME) viene chiesta una conferma.

Se si vuole modificare questo comportamento è sufficiente fare clic con il tasto destro sull'applet, scegliere Preferenze e togliere la spunta all'opzione Confermare il termine sessione, riavvio e arresto del computer.

domenica 30 agosto 2009

Aggiungere colonne con tag ID3 e informazioni Exif in Nautilus

Per sopperire alla mancanza in Nautilus (il file manager predefinito di GNOME) delle colonne con i tag ID3 (per i file musicali mp3) e le informazioni Exif (per le fotografie scattate dalle fotocamere digitali), è possibile utilizzare lo script scritto in python che potete trovare sul forum internazionale di Ubuntu all'indirizzo questo indirizzo. Per scaricare direttamente lo script potete fare clic qui.

Non so se esistano soluzioni migliori, comunque questo metodo è abbastanza efficiente. Come potete leggere dai primi commenti all'interno dello script, per utilizzarlo è necessario installare i pacchetti python-nautilus, python-mutagen e python-pyexiv2. Questi pacchetti possono essere facilmente installati da Synaptic, oppure da terminale con il comando
sudo apt-get install python-nautilus python-mutagen python-pyexiv2

Dopo di ciò bisogna spostare lo script all'interno della cartella ~/.nautilus/python-extensions (ricordo che la tilde ~ è un'abbreviazione del percorso della home dell'utente corrente e che le cartelle che hanno il nome che inizia con il punto sono cartelle nascoste, bisogna quindi premere [ CTRL ] + [ H ] per visualizzarle). Se la cartella non esiste bisogna ovviamente crearla (la cartella ~/.nautilus dovrebbe comunque esistere già, sarà al massimo necessario creare la sottocartella). Alternativamente, lo script potrebbe anche essere posto in /usr/lib/nautilus/extensions-2.0/python/, è necessario però agire da super utente per posizionare lo script in quella cartella.

Prima di poter utilizzare lo script bisogna renderlo eseguibile: fate clic con il tasto destro sull'icona dello script, fate clic su Proprietà e nella scheda Permessi della finestra che si aprirà mettete la spunta a Consentire l'esecuzione del file come programma.

Per concludere riavviate Nautilus (riavviando il computer oppure terminando la sessione corrente oppure digitando il comando killall nautilus (quest'ultima opzione personalmente la preferisco di meno)). Al successivo avvio di Nautilus, utilizzando la vista a elenco, potrete aggiungere le colonne contenti le informazioni che vi servono (VisualizzaColonne visibili). I nomi delle colonne sono in inglese, ma si capisce facilmente cosa c'è scritto (modificando un poco lo script si potrebbero tradurre i nomi delle colonne in italiano, ma non conoscendo il python non sono in grado di dire cosa va corretto).

giovedì 27 agosto 2009

Ottenere informazioni sull'hardware del sistema

Per ottenere informazioni abbastanza dettagliata sull'hardware presente sul proprio computer si può utilizzare il comando da terminale
sudo lshw
(è necessario lanciare il comando con i diritti da superutente altrimenti si otterrebbero delle informazioni parziali.) lshw dovrebbe essere già installato nel vostro sistema operativo Ubuntu, in caso contrario è sufficiente installare il pacchetto omonimo da Synaptic o da terminale con il comando
sudo apt-get install lshw
Questo programma attualmente supporta DMI (solo x86 e IA-64), OpenFirmware device tree (solo PowerPC), PCI/AGP, CPUID (x86), IDE/ATA/ATAPI, PCMCIA (testato solo su x86), SCSI e USB, non vengono però rilevati dispositivi Firewire(IEEE1394), non tutte le architetture supportate da GNU/Linux sono supportate da lshw e le interfacce "Virtual" SCSI usate per l'emulazione SCSI su IDE non sono ancora riportate correttamente (tutte queste informazioni riguardo a lshw che ho snocciolato capendoci più o meno qualcosa le potete ottenere semplicemente leggendo il manuale di lshw dando il comando man lshw nel terminale).

Oltre a questo comando è possibile utilizzare i comandi
lsusb
e
lspci
per ottenere informazioni sui dispositivi connessi rispettivamente a porte USB e PCI. L'ultimo comando in particolare può essere utilizzato, generalmente, per conoscere il modello della propria scheda video. Se l'output del comando risulta molto lungo si può restringere l'output alle sole stringhe contenenti la parola VGA in questo modo:
lspci | grep VGA
(è, per esempio, necessario conoscere il modello della propria scheda video per installare il driver).

Accanto ai programmi appena visti, che dispongono solo di un'interfaccia a linea di comando, esistono anche alcuni programmi con interfaccia grafica. Fra questi possiamo ricordare lshw-gtk e hardinfo, entrambi installabili nelle solite maniere dai repository ufficiali di Ubuntu.

Lshw-gtk non è altro un'interfaccia del precedentemente esposto lshw (anche in questo caso si dovrebbe avviare il comando da root per ottenere le informazioni complete, quindi lanciandolo da terminale con il comando sudo lshw-gtk).

Hardinfo è una semplice e utile applicazione per avere sotto controllo le informazioni “tecniche” del sistema e per effettuare qualche benchmark prestazionale. Per avviare il programma è sufficiente dare il comando hardinfo nel terminale. Le informazioni che si possono ottenere sul sistema attraverso hardinfo sono:
- Informazioni inerenti l’hardware del computer:
* Sistema operativo
* Moduli del kernel
* Avvii
* Localizzazione
* Filesystem
* Display
* Variabili d'ambiente
* Utenti
- Dispositivi:
* Processore
* Memoria
* Dispositivi PCI
* Dispositivi USB
* Stampanti
* Batteria
* Sensori (temperatura, voltaggi, velocità delle ventole ecc)
* Dispositivi di input
* Memorie di massa
* DMI
* Risorse
- Informazioni sulla rete:
* Interfacce
* Connessioni IP
* Tabella di routing
* Tabella ARP
* Server DNS
* Statistiche
* Cartelle condivise
- Benchmark:
* Blowfish
* CryptoHash
* Fibonacci
* N-Queens
* FPU Raytracing
* FFT
I risultati dei benchmark vengono confrontati con quelli ottenuti attraverso altre macchine.


Creative Commons License
Questo post è pubblicato sotto la Licenza Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo.

Alcune parti di questo post sono state riprese da http://netjack.wordpress.com/2006/12/12/hardinfo-informazioni-di-sistema-e-benchmark-a-potata-di-click/ e http://webupd8.blogspot.com/2009/05/2-open-source-alternatives-to-everest.html

lunedì 3 agosto 2009

Aggiungere pacchetti per LaTeX

Se vuoi subito scoprire come installare pacchetti per LaTeX vai direttamente al riepilogo, se invece vuoi leggere le mie (tutto sommato inutili) peripezie per aggiungere un pacchetto puoi leggere tutto il post.

Da un po' di tempo mi sto dilettando a scrivere testi con LaTeX. Qualche giorno fa avevo la necessità di installare un nuovo pacchetto LaTeX, per la precisione il pacchetto empheq. Ho dovuto navigare un po' su Internet prima di trovare la soluzione, mettendo insieme varie guide trovate in giro. Per altro, alla fine del mio peregrinare ho scoperto che avrei potuto molto più facilmente installare (per esempio da Synaptic) in Ubuntu il pacchetto texlive-latex-extra che fornisce poco meno di 500 pacchetti LaTeX (qui potete leggere l'elenco dei pacchetti forniti nella versione presente in Ubuntu Jaunty).

In attesa di vedere in un futuro non troppo lontano in Ubuntu la versione 2008 della distribuzione TeX Live, con cui pare sia molto semplice installare nuovi pacchetti LaTeX (anche quelli non presenti in texlive-latex-extra), spiegherò come ho fatto.

La guida che ho seguito inizialmente è stata http://www.guit.sssup.it/installazione/pacchetti.php. Per prima cosa, per installare un nuovo pacchetto, è necessario ovviamente scaricarlo. Nel mio caso, per ottenere il pacchetto empheq ho scaricato l'archivio http://theory.uwinnipeg.ca/scripts/CTAN/macros/latex/contrib/mh.zip. L'ho scompattato e ho compilato il file empheq.dtx in modo da ottenere il file empheq.sty. Il problema che sorgeva a questo punto era posizionare il pacchetto in una cartella in cui LaTeX sarebbe stato in grado di trovarlo. Infatti, compilando un sorgente LaTeX che includeva empheq ottenevo il seguente messaggio di errore:
! LaTeX Error: File `empheq.sty' not found.
In realtà, compilando il sorgente da terminale, quando compare questo messaggio di errore è possibile inserire il percorso del pacchetto, ma ovviamente questa non è una soluzione molto pratica. Una cartella in cui si potrebbero inserire i pacchetti affinché LaTeX sia in grado di utilizzarli è /usr/share/texmf/tex/latex/, ma personalmente preferisco per svariati motivi salvare queste cose all'interno della home (anche per evitare ogni volta di dover diventare root per aggiungere o modificare un pacchetto). Sul forum GUIT avevo letto che per sapere qual è la cartella in cui salvare il pacchetto bisogna dare nel terminale il seguente comando
kpsexpand '$TEXMFHOME'
che mi ha restituito come output
/home/luke/texmf
Ho quindi spostato il pacchetto nella cartella indicata (che ho creato perché non esisteva) e provato a ricompilare il sorgente però ricevendo sempre il precedente messaggio di errore. Con un po' di fortuna ho trovato un altro comando per trovare le cartelle in cui salvare i pacchetti:
kpsepath tex
che ha restituito questo output un po' illeggibile:
.:/home/luke/.texmf-config/tex/kpsewhich//:/home/luke/.texmf-var/tex/kpsewhich//:/home/luke/texmf/tex/kpsewhich//:/etc/texmf/tex/kpsewhich//:!!/var/lib/texmf/tex/kpsewhich//:!!/usr/local/share/texmf/tex/kpsewhich//:!!/usr/share/texmf/tex/kpsewhich//:!!/usr/share/texmf-texlive/tex/kpsewhich//:/home/luke/.texmf-config/tex/generic//:/home/luke/.texmf-var/tex/generic//:/home/luke/texmf/tex/generic//:/etc/texmf/tex/generic//:!!/var/lib/texmf/tex/generic//:!!/usr/local/share/texmf/tex/generic//:!!/usr/share/texmf/tex/generic//:!!/usr/share/texmf-texlive/tex/generic//:/home/luke/.texmf-config/tex///:/home/luke/.texmf-var/tex///:/home/luke/texmf/tex///:/etc/texmf/tex///:!!/var/lib/texmf/tex///:!!/usr/local/share/texmf/tex///:!!/usr/share/texmf/tex///:!!/usr/share/texmf-texlive/tex///
È un elenco che utilizza i due punti come separatore fra le cartelle (più qualche punto esclamativo messo con non so quale criterio). Per renderlo un po' più comprensibile ho utilizzato 3 pipe che restringessero inoltre il campo alle cartelle contenute nella home:
kpsepath tex | sed 's/:/\n/g' | tr -d '!' | grep home
con questo output:
/home/luke/.texmf-config/tex/kpsewhich//
/home/luke/.texmf-var/tex/kpsewhich//
/home/luke/texmf/tex/kpsewhich//
/home/luke/.texmf-config/tex/generic//
/home/luke/.texmf-var/tex/generic//
/home/luke/texmf/tex/generic//
/home/luke/.texmf-config/tex///
/home/luke/.texmf-var/tex///
/home/luke/texmf/tex///

In particolare ha attirato la mia attenzione l'ultima cartella, /home/luke/texmf/tex/ (lasciate stare gli slash in più alla fine dei percorsi). Ho quindi creato la cartella /home/luke/texmf/tex/ e spostato nuovamente il pacchetto empheq.sty in questa cartella. Provando a ricompilare il sorgente però continuavo a ricevere sempre lo stesso errore che segnala pacchetto non trovato. Nella guida http://wiki.ubuntu-it.org/Ufficio/Latex ho letto che per aggiornare l'elenco dei pacchetti era necessario dare il comando
sudo texhash
Leggendo però il manuale del comando (nel terminale: man texhash) ho scoperto che quel comando non aggiorna l'elenco dei pacchetti contenuti nella home. Per fare ciò bisogna dare quindi il comando
texhahs ~/texmf
(ricordo che la tilde ~ è un'abbreviazione del percorso della home dell'utente corrente) e finalmente sono riuscito a compilare il sorgente.


Riepilogo delle operazioni da fare: scaricare il pacchetto e posizionare il file .sty nella cartella ~/texmf/tex (ovviamente creandola se non esiste). Se nell'archivio che si è scaricato non è presente un file .sty ma un .ins o un .dtx bisogna compilare questi file per ottenere il .sty, come spiegato qui. Quindi bisogna aggiornare l'elenco dei pacchetti LaTeX presenti nella cartella con il comando
texhash ~/texmf
e si può finalmente compilare il sorgente che include il nuovo pacchetto.

In realtà sarebbe sufficiente anche inserire il pacchetto nella stessa cartella in cui si trova il sorgente senza dover usare ulteriori comandi, ma trovo questa soluzione poco pratica nel caso in cui si dovessero avere sorgenti LaTeX in numerose cartelle diverse.


Precisazione del 18/8/2009: rileggendo con più attenzione di quanto non avessi fatto inizialmente la guida http://www.guit.sssup.it/installazione/pacchetti.php mi sono accorto che c'era scritto:
copiare il relativo file .sty nella sotto-cartella /tex/latex/ di uno dei tre alberi (eventualmente creando tale sotto-cartella, se non ci fosse già);
Quindi senza perdere tutto il tempo che ho perso avrei potuto subito notare che era necessario mettere i pacchetti nella sottocartella tex/latex/ di ~/texmf (in realtà a me funziona anche solo con tex/, non ho avuto bisogno di creare anche la sottocartella latex/). Resta comunque valido il procedimento descritto nel riepilogo.

mercoledì 22 luglio 2009

Compilare QtOctave 0.8.2

Dopo aver compilato GNU Octave 3.2.2 ho compilato un programma che fornisce un'interfaccia grafica per Octave: QtOctave. La versione che ho scaricato è l'ultima disponibile a oggi, la 0.8.2, rilasciata poche settimane dopo la versione 3.2 di GNU Octave.

Anche in questo caso consiglio a chi non può o non vuole compilare questi programmi di scaricare i pacchetti precompilati per Ubuntu di Octave 3.2 + QtOctave 0.8.2 dal sito http://tobal.cymaho.com/?p=920.

L'URL per scaricare i sorgenti di QtOctave può essere trovato a questo indirizzo: http://qtoctave.wordpress.com/download/, in particolare la versione che ho scaricato si ottiene da http://forja.rediris.es/frs/download.php/1383/qtoctave-0.8.2.tar.gz. Scompattate l'archivio in una cartella, aprite un terminale (ApplicazioniAccessoriTerminale) e spostatevi (nel terminale con il comando cd) nella cartella in cui avete scompattato il sorgente. Se per esempio è la cartella ~/Scrivania/qtoctave-0.8.2 (ricordo che la tilde ~ è l'abbreviazione della home dell'utente corrente) dovete dare il comando
cd ~/Scrivania/qtoctave-0.8.2
Come per ogni compilazione, è necessario installare i compilatore, che si ottengono installando il pacchetto build-essential. Questo può essere installato da Synaptic, oppure da terminale con il comando
sudo apt-get install build-essential
Dopo di ciò bisogna installare i pacchetti necessari per la compilazione di QtOctave con il comando
sudo apt-get build-dep qtoctave
Nel file readme.txt che si trova nella cartella dei sorgenti spiega che bisogna inoltre installare le librerie Qt e i pacchetti di sviluppo Qt, dalla versione 4.5.0 in poi. È sufficiente installare il pacchetto libqt4-dev , tutti le dipendenze verranno installate automaticamente. Inoltre bisogna installare il pacchetto cmake. Senza aver installato le librerie Qt sarebbe comparso il seguente messaggio di errore in fase di compilazione:
CMake Error at /usr/share/cmake-2.6/Modules/FindQt4.cmake:1472 (MESSAGE):
Qt qmake not found!
Call Stack (most recent call first):
CMakeLists.txt:22 (FIND_PACKAGE)


-- Configuring incomplete, errors occurred!

A questo punto, nel file readme.txt viene consigliato di creare una cartella chiamata build ed eseguire una serie di comandi elencati. In questo modo, però, ho rilevato numeri errori in fase di compilazione di questo tipo:
[ 44%] Building CXX object easy_plot/src/CMakeFiles/easy_plot.dir/main.o
In file included from /home/luke/qtoctave-0.8.2/easy_plot/src/main.cpp:3:
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:7:35: error: ui_design_main_window.h: Nessun file o directory
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:9:27: error: ui_view_angle.h: Nessun file o directory
In file included from /home/luke/qtoctave-0.8.2/easy_plot/src/main.cpp:3:
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:11: error: ‘Ui’ is not a namespace-name
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:11: error: expected namespace-name before ‘;’ token
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:18: error: ‘Ui_DesignMainWindow’ does not name a type
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:21: error: ISO C++ forbids declaration of ‘Ui_ViewAngle’ with no type
/home/luke/qtoctave-0.8.2/easy_plot/src/main_window.h:21: error: expected ‘;’ before ‘*’ token
make[2]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/main.o] Errore 1
make[1]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/all] Errore 2
make: *** [all] Errore 2

Oltre a questo mi sono comparsi altri errori simili. Li ho risolti copiando gli header file che vengono segnalati come mancanti da una sottocartella della cartella build creata, nella cartella in cui si trovano i sorgenti che compaiono nei messaggi di errore. Sono comunque riuscito a evitare tutto ciò nel seguente modo: dopo aver installato i pacchetti sopra elencati ho dato nel terminale (posizionato nella cartella in cui ho scompattato l'archivio) il comando
cmake .
(notate il punto dopo cmake che shell bash rappresenta un'abbreviazione della cartella corrente, infatti il comando cmake richiede come argomento la cartella in cui si trova un sorgente. Per maggiori informazioni consultate il manuale) a differenza di quanto spiegato nel file readme.txt (AGGIORNAMENTO: mi sono accorto che questa è proprio la procedura descritta in leeme.txt, forse l'autore si è dimenticato di aggiornare anche il file in lingua inglese). Poi ho proseguito con il comando
make
Dopo il make, per installare il programma si dovrebbe dare il comando
sudo make install
ma anche in questo caso ho preferito creare un pacchetto deb con e checkinstall. Per creare il pacchetto, senza installarlo, ho dato il comando
sudo checkinstall --install=no
Successivamente ho installato il pacchetto deb che è stato creato.

Aggiornamento: in questa discussione sul forum di Ubuntu ho aiutato a compilare QtOctave 0.8.2 l'utente simo2777, che però ha riscontrato qualche problema in più rispetto a me. Riporto qui gli errori e le soluzioni per completezza.
Primo problema:
[ 40%] Building CXX object easy_plot/src/CMakeFiles/easy_plot.dir/gnuplot_connection.o
/home/simone/Programmi/qtoctave-0.8.2/easy_plot/src/gnuplot_connection.cpp: In member function ‘void GnuplotConnection::standardOutputReady()’:
/home/simone/Programmi/qtoctave-0.8.2/easy_plot/src/gnuplot_connection.cpp:143: error: ‘printf’ was not declared in this scope
make[2]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/gnuplot_connection.o] Errore 1
make[1]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/all] Errore 2
make: *** [all] Errore 2

Soluzione (solo per il primo errore, per il successivo leggi più avanti): installare le dipendenze di qtoctave con il comando sudo apt-get build-dep qtoctave e (se non già presente) il pacchetto gnuplot con il comando sudo apt-get install gnuplot.
Secondo problema:
[ 43%] Building CXX object easy_plot/src/CMakeFiles/easy_plot.dir/gnuplot_connection.o
/home/simone/Programmi/qtoctave-0.8.2/easy_plot/src/gnuplot_connection.cpp: In member function ‘void GnuplotConnection::standardOutputReady()’:
/home/simone/Programmi/qtoctave-0.8.2/easy_plot/src/gnuplot_connection.cpp:143: error: ‘printf’ was not declared in this scope
make[2]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/gnuplot_connection.o] Errore 1
make[1]: *** [easy_plot/src/CMakeFiles/easy_plot.dir/all] Errore 2
make: *** [all] Errore 2

Soluzione (trovata qui): includere nel file easy_plot/src/gnuplot_connection.cpp l'header cstdio, per esempio in questo modo:
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QHash>
#include <cstdio>

GnuplotConnection::GnuplotConnection(QObject *parent):QProcess(parent)


Terzo problema (simile a quello precedente):
[ 75%] Building CXX object qtoctave/src/CMakeFiles/qtoctave.dir/search_dialog.o
/home/simone/Programmi/qtoctave-0.8.2/qtoctave/src/search_dialog.cpp: In destructor ‘virtual SearchDialog::~SearchDialog()’:
/home/simone/Programmi/qtoctave-0.8.2/qtoctave/src/search_dialog.cpp:96: error: ‘printf’ was not declared in this scope
make[2]: *** [qtoctave/src/CMakeFiles/qtoctave.dir/search_dialog.o] Errore 1
make[1]: *** [qtoctave/src/CMakeFiles/qtoctave.dir/all] Errore 2
make: *** [all] Errore 2

Soluzione: come prima, includere l'header cstdio nel file
qtoctave/src/search_dialog.cpp aggiungendo la riga
#include <cstdio>
all'inizio.

Compilare GNU Octave 3.2.2

Nota: all'indirizzo http://elubuntu.blogspot.com/2011/02/compilare-gnu-octave-340.html trovate una guida su come compilare GNU Octave 3.4.0.

In Ubuntu 9.04 è presente ancora una versione non nuovissima di GNU Octave e avrei voluto scrivere come ho compilato GNU Octave 3.2, ma proprio oggi è uscita la più recente versione del programma di analisi numerica, ottimo sostituto open-source di Matlab, e quindi spiegherò come ho compilato GNU Octave 3.2.2 (l'ho testato su Ubuntu Jaunty Jackalope, su versioni precedenti del sistema potrebbero mancare troppi pacchetti necessari all'installazione del programma).

Avviso già da adesso, che ci non vuole provare l'"ebbrezza" di compilare da solo questo programma ma preferisce installare direttamente i pacchetti .deb, può scaricare da qui un archivio contenente tutto ciò che serve (sono presenti i pacchetti di Octave 3.2, dell'interfaccia grafica QtOctave e le varie dipendenze che sono necessarie). L'archivio l'ho trovato a questo indirizzo. http://tobal.cymaho.com/?p=920. Questa soluzione potrebbe essere preferita anche da chi non ha intenzione o la possibilità di scaricare diversi megabyte (credo poche centinaia) di pacchetti assortititi che occuperanno molto spazio sull'hard disk dopo l'installazione.

Per prima cosa, ovviamente, serve il sorgente: lo trovate nella pagina dei download di Octave, l'indirizzo del sorgente è ftp://ftp.octave.org/pub/octave/octave-3.2.2.tar.gz. Scaricate l'archivio e scompattatelo in una cartella (ricordatevi per bene il nome della cartella in cui l'avete salvato). Da questo momento in poi sarà necessario usare (quasi) sempre il terminale, quindi apritene uno (ApplicazioniAccessoriTerminale) e spostatevi (nel terminale con il comando cd) nella cartella in cui avete scompattato il sorgente. Se per esempio è la cartella ~/Scrivania/octave-3.2.2 (ricordo che la tilde ~ è l'abbreviazione della home dell'utente corrente) dovete dare il comando
cd ~/Scrivania/octave-3.2.2
Come per ogni compilazione, è necessario installare i compilatore, che si ottengono installando il pacchetto build-essential. Questo può essere installato da Synaptic, oppure da terminale con il comando
sudo apt-get install build-essential
Dopo di ciò bisogna installare i pacchetti necessari per la compilazione di Octave: il comando
sudo apt-get build-dep octave3.0
installerà la maggior parte dei pacchetti che serviranno, ma non tutti (il comando build-dep di apt-get recupera i pacchetti necessari per la compilazione del pacchetto specificato ma qualcuno potrebbe sfuggire, come in questo caso). L'usuale procedura per la compilazione del sorgente di un programma prevedere che a questo punto venga dato il comando
./configure
(esegue il programma configure, quindi assicuratevi di essere nella cartella corretta). La prima volta che ho eseguito il configure, alla fine ho ricevuto questo elenco di avvisi:
configure: WARNING: I didn't find bison, but it's only a problem if you need to reconstruct parse.cc
configure: WARNING: qrupdate not found. The QR & Cholesky updating functions will be slow.
configure: WARNING: arpack not found. This will result in a lack of the eigs function.
configure: WARNING: GraphicsMagick++ config script not found. Assuming GraphicsMagic++ library and header files are missing, so imread will not be fully functional
configure: WARNING: "FLTK config script not found. Native graphics will be disabled."
configure: WARNING:
configure: WARNING: I didn't find the necessary libraries to compile native
configure: WARNING: graphics. It isn't necessary to have native graphics
configure: WARNING: but you will have to use gnuplot or you won't be able
configure: WARNING: to use any of Octave's plotting commands
configure: WARNING:
configure:

NOTE: libraries may be skipped if a library is not found OR
if the library on your system is missing required features.

Per rimediare a questi avvisi ho dovuto installare un po' di pacchetti (come al solito, questi possono essere installati da Synaptic o da terminale, come preferite).
· Per bison è necessario il pacchetto bison.
· Per arpack ho installato i pacchetti libarpack2 libarpack2-dev libibverbs1 libopenmpi1 libopenmpi-dev openmpi-common.
· Per GraphicsMagick++ ho installati i pacchetti libbz2-dev libexif-dev libexpat1-dev libfreetype6-dev libgraphicsmagick++1 libgraphicsmagick++1-dev libgraphicsmagick1 libgraphicsmagick1-dev libice-dev libjasper-dev liblcms1-dev libpng12-dev libpthread-stubs0 libpthread-stubs0-dev libsm-dev libtiff4-dev libtiffxx0c2 libwmf-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxext-dev libxml2-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev x11proto-xext-dev xtrans-dev.
· Per FLTK ho installato i pacchetti libfltk1.1 libfltk1.1-dev libgl1-mesa-dev mesa-common-dev
· Per qrupdate ho dovuto scaricare dei pacchetti dagli archivi di Karmic, la versione di Ubuntu che deve ancora essere rilasciata. I pacchetti necessari sono stati libqrupdate1 libqrupdate-dev mpi-default-dev. Facendo clic su ciascuno dei nomi dei pacchetti qui indicati potete scegliere l'architettura del vostro sistema (amd64 o i386) e scaricare i pacchetti deb che potrete installare normalmente.

Dopo aver installato tutti i pacchetti ho nuovamente dato il comando
./configure
che però questa volta non mi ha dato alcun avviso, quindi ho proceduto con il
make
Durante il make, però, ho ricevuto un messaggio di errore:
./DLD-FUNCTIONS/fltk_backend.cc: In member function ‘virtual void OpenGL_fltk::draw_overlay()’:
./DLD-FUNCTIONS/fltk_backend.cc:145: error: ‘gluOrtho2D’ was not declared in this scope
make[2]: *** [pic/fltk_backend.o] Errore 1
make[2]: uscita dalla directory «/home/luke/octave-3.2.2/src»
make[1]: *** [src] Errore 2
make[1]: uscita dalla directory «/home/luke/octave-3.2.2»
make: *** [all] Errore 2

La soluzione a questo problema l'ho trovata su questo sito: installare il pacchetto libglu1-mesa-dev. Ho ricominciato daccapo dal ./configure, che però mi ha dato un nuovo avviso (prima gli sarà sfuggito?):
configure: WARNING: "FTGL headers not found. Native renderer will not have on-screen text"
configure: WARNING:
configure: WARNING: I didn't find the necessary libraries to compile native
configure: WARNING: graphics. It isn't necessary to have native graphics
configure: WARNING: but you will have to use gnuplot or you won't be able
configure: WARNING: to use any of Octave's plotting commands
configure: WARNING:
configure:

NOTE: libraries may be skipped if a library is not found OR
if the library on your system is missing required features.

Per risolvere quest'altro problema ho installato i pacchetti libftgl-dev libftgl2. Dopo di ciò ho dato nuovamente i comandi
./configure
(fortunatamente anche questa volta senza avvisi) e poi
make
Dopo un po' di tempo (credo che a me abbia impiegato circa 2 ore, ma la compilazione potrebbe richiedere anche più tempo (o di meno se siete fortunati)), il processo è terminato ed è comparso il messaggio
Octave successfully built. Now choose from the following:

./run-octave - to run in place to test before installing
make check - to run the tests
make install - to install (PREFIX=/usr/local)

make[1]: uscita dalla directory «/home/luke/octave-3.2.2»

a segnalare (come si può leggere), la fine della compilazione di GNU Octave. A questo punto si può scegliere una delle operazioni suggerite. Per installare il programma si dovrebbe dare, come consigliato, il comando
sudo make install
(il sudo è necessario poiché verranno eseguite delle operazioni in cartelle protetta in scrittura), io però ho preferito creare un pacchetto .deb, in modo da non dover in seguito ricompilare tutto il programma. Per fare ciò, il metodo più semplice (non il migliore, ma per chi non ha bisogno di distribuire i pacchetti questo dovrebbe essere più che sufficiente) è usare checkinstall. Per creare il pacchetto, senza installarlo, bisogna dare il comando
sudo checkinstall --install=no
L'installazione potrà poi essere fatta successivamente, come per tutti i pacchetti deb.


Per compilare l'interfaccia grafica QtOctave 0.8.2 potete leggere qui.


Aggiornamento del 18/08/2009: oggi ho visto che nei repository della prossima versione di Ubuntu (Karmic Koala che uscirà a ottobre) è presente il pacchetto octave-3.2 (però alla versione 3.2.0, non la 3.2.2 la versione adesso è proprio la 3.2.2), quindi chi non ha fretta di installare subito la 3.2 potrebbe aspettare per l'installazione il rilascio di Ubuntu 9.10 per poterlo installare comodamente dal gestore pacchetti.

venerdì 12 giugno 2009

Scoprire il tipo di un file

Per conoscere il tipo di un file si può utilizzare l'utilissimo comando da terminale file. La sintassi per il suo utilizzo basilare è estremamente semplice:
file /percorso/del/file
ovviamente sostituendo a /percorso/del/file il percorso assoluto o relativo (vedi qui per maggiori informazioni) del file di cui si vuole conoscere il tipo. Per esempio, per conoscere il tipo di un file chiamato pippo e posizionato nella Scrivania, nel terminale dobbiamo dare il comando
file ~/Scrivania/pippo
Ricordo che la tilde ~ è l'abbreviazione della cartella home dell'utente che usa il sistema.

Questo programma risulta particolarmente utile quando si vuole individuare la reale "natura" di un file, perché il tipo di un file non si può identificare con la sola estensione. file opera guardando il contenuto del file. Certo può capitare qualche caso in cui anche file sbaglia, ma ciò che determina la "natura" di un file è il suo contenuto, non certo l'estensione che può essere cambiata a piacimento. Per conoscere le opzioni che si possono utilizzare con file potete consultare il manuale con il comando
man file

Chi non ama particolarmente il terminale, o comunque preferisce utilizzare anche delle interfacce grafiche, può usare questo semplice script per Nautilus che ho realizzato:
#!/bin/bash

titolo="Tipo file" # titolo dei popup che verranno visualizzati

if [ $# -gt 0 ]; then # se viene selezionato più di un file
    file -- "$@" | zenity --text-info --title="$titolo" --filename=/dev/stdin # visualizza un popup che mostra il tipo di ciascun file o cartella selezionato
else # altrimenti
    zenity --error --title="$titolo" --text="Devi selezionare almeno un file" # visualizza un popup di errore
fi
Per utilizzare lo script è necessario installare il pacchetto zenity.

Aprite un file vuoto con un editor di testo (come gedit), copiate lo script nell'editor e salvatelo nella cartella ~/.gnome2/nautilus-scripts chiamandolo, per esempio, Tipo file. Rendete quindi eseguibile lo script facendo clic con il taso destro sul file (per accedere alla cartella ~/.gnome2 dovete visualizzare i file nascosti premendo [ CTRL ] + [ H ]), scegliete Proprietà e quindi, nella scheda Permessi, mettete la spunta a Consentire l'esecuzione del file come programma. In questo modo, facendo clic con il tasto destro su un file di cui volete conoscere il tipo, vi basterà fare clic su ScriptTipo file (o il nome che avete dato allo script).

mercoledì 10 giugno 2009

Spostamento celle verso il basso con Incolla speciale in Calc

In Calc (il foglio elettronico della suite OpenOffice.org) avevo necessità di
· tagliare delle celle
· incollarle in un'altra posizione spostando verso il basso le celle selezionate che contengono altri dati
Questa operazione si potrebbe fare con la funzione Incolla speciale. In pratica basta selezionare le celle da tagliare, fare clic con il tasto destro e scegliere Taglia, quindi selezionare la posizione in cui incollare le celle e, facendo clic con il tasto destro, scegliere Incolla speciale. In questo modo apparirà una finestra in basso a destra della quale si può scegliere di spostare in basso le celle selezionate. Il problema è che l'opzione Verso il basso non era selezionabile. Cercando su Google ho trovato un modo per aggirare il problema.

Bisogna incollare ugualmente, selezionando l'opzione Non spostare, anche se non è quello che vogliamo fare. Quindi nel popup che apparirà che chiederà conferma della sovrascrittura, fate clic su .
In questo modo le celle saranno state, ovviamente, sovrascritte. A questo punto, annullate l'operazione (premendo i tasti [ CTRL ] + [ Z ] oppure da ModificaAnnulla Inserisci) e, facendo clic con il tasto destro sulle celle da spostare, selezionate nuovamente Incolla speciale.
Magicamente, adesso sarà possibile scegliere l'opzione di spostamento verso il basso.
Il messaggio della mailing list dove ho trovato questo workaround risale al 2004, il problema nel frattempo non sembra essere stato risolto (se ho visto bene, comunque, è già stato segnalato agli sviluppatori). Inoltre, mi è sembrato che il difetto si verifichi solamente quando si tagliano delle celle, non quando vengono solamente copiate.