lunedì 4 gennaio 2010

Installare una versione funzionante di Maxima in Ubuntu

Nota: il problema è ormai risolto dalla versione 10.04 di Ubuntu (Lucid Lynx) in poi. Comunque il repository di Launchpad segnalato permette di avere, in genere entro pochi giorni, l'ultima versione di Maxima e wxMaxima.


Nelle ultime versioni di Ubuntu è disponibile nei repository ufficiali una versione non funzionante del programma di calcolo simbolico e numerico Maxima. Infatti, provando a usare Maxima vi potrebbe capitare ben presto di leggere questi messaggi di errore:
(%i1) atan(x);
Universal error handler called recursively (:ERROR NIL
CONDITIONS::CLCS-UNIVERSAL-ERROR-HANDLER
""
"Couldn't protect")
Universal error handler called recursively (:ERROR NIL
CONDITIONS::CLCS-UNIVERSAL-ERROR-HANDLER
"" "Couldn't protect")
Maxima encountered a Lisp error:

Error in CONDITIONS::CLCS-UNIVERSAL-ERROR-HANDLER [or a callee]: Caught fatal error [memory may be damaged]

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
(%i2) atan(x);
Segmentation fault

Il problema, segnalato su Launchpad nel bug 303587, può essere risolto aggiungendo il repository di blahota. Per fare ciò è sufficiente dare nel terminale il comando
sudo add-apt-repository ppa:blahota/wxmaxima
e il repository sarà anche automaticamente autenticato senza bisogno di ulteriori interazioni.

Questo non è un bug di Maxima ma solo del pacchetto precompilato presente nei repository di Ubuntu, quindi non segnalatelo sul sito di Maxima. Potreste anche provare a compilare da voi Maxima. Se avete un account su Launchpad, non aprite altre segnalazioni ma piuttosto commentate (se ne avete bisogno) il bug segnalato prima e aggiungetevi nell'elenco delle persone affette dal problema.

Nelle ultime versioni di wxMaxima viene usato `wxt' come terminale predefinito per gnuplot, che però va in crash. Un workaround per risolvere il problema può essere trovato qui.

Aggiornamento del 15/02/2010: il bug 303587 sembra che sia stato risolto (riguarda il pacchetto gcl), vedremo se in Lucid sarà presente una versione di Maxima funzionante.

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.