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://elubuntu.altervista.org/LaTeX/Guide/make.pdf, mentre i sorgenti si trovano all'indirizzo http://elubuntu.altervista.org/LaTeX/Guide/make.tar.gz.

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.

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:
#!/bin/bash
# Ultimo aggiornamento: 22/09/2009
#+ Per suggerimenti e consigli visita http://forum.ubuntu-it.org/index.php/topic,316995.0.html

USER_AGENT="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090910 Firefox/3.5.3"

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 News 24" "Rai Sport Più" "Rai Edu1" "Rai Storia" "RaiSat Extra" \
"RaiSat Premium" "RaiSat Cinema" "RaiSat YoYo" "Rai gulp" "Sportitalia" "All Music" "NRK1" "NRK2" "NRK Rogaland" "Arcoiris TV" \
"Antena 1" "France24 English" "etvsatellite" "CBL Channel" "[3]CHANNEL ONE" "=== RADIO ===" "Radio Uno" "Radio Due" "Radio Tre" \
"Isoradio" "RTL 102.5" "RDS" "Radio 105" "Radio Capital" "Radio24" "Controradio" "Radio Popolare" "Radio Onda Rossa" \
"Radio onda d'Urto" "Radio Città Aperta" "Radio Blackout"`
}

play()
{
vlc --http-user-agent "$USER_AGENT" "$1" &
}

while [ $? -eq 0 ]; do
seleziona
case $canale in
"=== TELEVISIONE ===" | "=== RADIO ===" ) seleziona ;;
"Rai Uno") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983 ;;
"Rai Due") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984 ;;
"Rai Tre") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986 ;;
"Rai 4") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=75708 ;;
"Rai News 24") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1 ;;
"Rai Sport Più") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145 ;;
"Rai Edu1") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268 ;;
"Rai Storia") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269 ;;
"RaiSat Extra") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72382 ;;
"RaiSat Premium") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72916 ;;
"RaiSat Cinema") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72381 ;;
"RaiSat YoYo") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72918 ;;
"Rai gulp") play http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4119 ;;
"Sportitalia") play mms://mms.cdn-tiscali.com/sportitalia ;;
"All Music") play mms://live.mediaserver.kataweb.it/retea?MSWMExt=.asf ;;
"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 ;;
"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 ;;
"RTL 102.5") play mms://151.1.245.36/rtl102.5vs ;;
"RDS") play mms://fastreal.fastweb.it/RDS ;;
"Radio 105") play mms://151.1.245.6/1 ;;
"Radio Capital") play mms://live.mediaserver.kataweb.it/capital?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 ;;
*) exit 1 ;;
esac
done

(Per vederlo anche formattato vedete 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 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.

Quando si seleziona un canale vengono aperte una finestra di VLC che mostra la diretta scelta e una nuova finestra di selezione. Se si vuole modificare questo comportamento (non facendo apparire nuovamente la finestra di selezione ma solo VLC) basta togliere il simbolo & alla fine della definizione della funzione play, cioè bisogna avere solamente:
vlc --http-user-agent "$USER_AGENT" "$1"

All'indirizzo http://elubuntu.altervista.org/tv-player.zip trovate un semplice script realizzato da turlando per automatizzare l'installazione dello script. È sufficiente eseguire, dopo aver scompattato tutto l'archivio, il file install.sh. Se, dopo averlo installato, si desidera rimuovere lo script, bisogna eseguire il file uninstall.sh.

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 a questo indirizzo (per scaricare direttamente lo script potete fare clic qui, è necessaria però la registrazione al forum). Salvate il codice all'interno di un nuovo file di testo (apritelo con il vostro editor di testo preferito, per esempio Gedit).

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 posizionato 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 sudo killall nautilus (quest'ultima opzione 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