Pimp My MPlayer

MPlayer è il player per video che uso di più in assoluto. Non è amichevole come Kaffeine o VLC, ma fa benissimo il suo lavoro. Martin Ankerl ha pubblicato sul suo blog un po’ di trucchi per personalizzare MPlayer. Riporto qui quelli che ho trovato più interessanti:

Evitare i salti

Se la CPU è sotto sforzo, il video di MPlayer potrebbe non essere fluido. La situazione è segnalata da questo messaggio:

Linux RTC init error in ioctl (rtc_irqp_set 1024): Permission denied
Try adding "echo 1024 > /proc/sys/dev/rtc/max-user-freq" to your system startup scripts.

Per risolvere il problema si può eseguire:

sudo echo 1024 > /proc/sys/dev/rtc/max-user-freq

(se non usate una derivata di Ubuntu usate una console di root) o, per mantenere permanentemente l’impostazione, modificate il file /etc/sysctl.conf e aggiungete questa riga:

dev.rtc.max-user-freq=1024

dopodiché eseguite:

sudo sysctl -p

o riavviate per usare le nuove impostazioni.

Streaming fluido

Guardando video in streaming o da DVD può capitare che il playback salti. Per rimediare si può istruire MPlayer affinché mantenga una cache più grande per il buffering. Modificate il file ~/.mplayer/config e aggiungete le seguenti righe:

cache=8192
cache-min=4

La prima riga specifica un buffer di 8MiB, la seconda indica a MPlayer che il buffer deve essere pieno almeno al 4% (circa 327KiB) prima di eseguire la riproduzione dello stream audio/video.

Output video

Usate xv come output video, è quello che permette una visualizzazione a schermo più veloce. Per farlo aggiungete al file ~/.mplayer/config:

vo=xv

Se non dovesse funzionare provate vo=gl2 oppure, se avete una scheda ATI con driver proprietari fglrx, fate riferimento a questo mio post: Problemi con MPlayer e ATI.

Aspect ratio

Se avete un monitor 16:10 aggiungete al solito file di configurazione la riga

monitoraspect=16:10

anche se in genere non dovrebbe essercene bisogno e MPlayer dovrebbe individuare correttamente l’aspect ratio del monitor.

Volume troppo alto o troppo basso

Si può fare in modo che MPlayer normalizzi il volume dello stream audio, utile quando la traccia è troppo bassa o troppo alta. Per farlo aggiungere a ~/.mplayer/config la riga:

af=volnorm

Font dei sottotitoli

Per cambiare il font dei sottotitoli, copiate il file .ttf del font che desiderate in ~/.mplayer/subfont.ttf. Ad esempio per usare DejaVu Sans eseguite:

cp /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf ~/.mplayer/config

Dimensione dei sottotitoli

Per cambiare la dimensione dei sottotitoli modificate ~/.mplayer/subfont.ttf aggiungendo:

subfont-text-scale=3

Provate valori diversi per trovare l’impostazione più di vostro gusto.

Tasti rapidi

Per l’uso comune:

  • f: attiva/disattiva la modalità fullscreen
  • ESC,q: termina MPlayer
  • barra spaziatrice,p: mette in pausa/riattiva il playback
  • j: cicla tra i sottotitoli
  • o: mostra/nasconde l’OSD (On Screen Display) con la posizione corrente
  • +,-: anticipa/ritarda lo stream audio rispetto al video, utile nei filmati con audio non in sync
  • [,]: diminuisce/aumenta la velocità di playback

Per spostarsi nello stream:

  • sinistra: indietro di 10 secondi
  • destra: avanti di 10 secondi
  • su: avanti di un minuto
  • giù: indietro di un minuto
  • PgUp (o Pag Su): avanti di 10 minuti
  • PgDn (o Pag Giù): indietro di 10 minuti
  • .: avanti di un frame (p per tornare al playback normale)

Da KDE 4.1 beta 2 a KDE 4.1 RC1

Sui repository PPA di Kubuntu (deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu hardy main) sono disponibili i pacchetti aggiornati per KDE 4.1. Quando furono rilasciati i pacchetti per KDE 4.1 beta 2 li installai usando questo reposiotry, e poi eseguii l’installazione a parte del (meta)pacchetto kdepim-kde4, che contiene kontact, kmail, akgregator e così via. Oggi sono stati messi sui repository i pacchetti per KDE 4.1 RC1. Eseguendo il solito sudo aptitude dist-upgrade l’installazione falliva così:

Preparing to replace kde-icons-oxygen 4:4.0.83-0ubuntu1~hardy1~ppa5 (using .../kde-icons-oxygen_4%3a4.0.98-0ubuntu1~hardy1~ppa1_all.deb) ...
Unpacking replacement kde-icons-oxygen ...
dpkg: error processing /var/cache/apt/archives/kde-icons-oxygen_4%3a4.0.98-0ubuntu1~hardy1~ppa1_all.deb (--unpack):
trying to overwrite `/usr/lib/kde4/share/icons/oxygen/32x32/actions/appointment-new.png', which is also in package libkdepim4-kde4
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/kde-icons-oxygen_4%3a4.0.98-0ubuntu1~hardy1~ppa1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Questo errore impedisce l’installazione di kdebase-runtime, che a sua volta impedisce il funzionamento di praticamente tutti i programmi di KDE. La soluzione, trovata immediatamente chiedendo aiuto al canale #kubuntu-kde4 su freenode è eseguire:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/kde-icons-oxygen_4%3a4.0.98-0ubuntu1~hardy1~ppa1_all.deb

Fatto questo, forzando la sovrascrittura di alcuni file, è possibile riavviare il processo di upgrade, che si spera vada a buon fine :)

Il problema è dovuto al fatto che non è ancora disponibile sui repository il pacchetto kdepim RC1, il che porta a questo conflitto di versioni.

Twitter da bash

Usate Twitter e da bravi nerd/geek volete utilizzarlo direttamente da bash? Ecco uno script che usa cURL:

#!/bin/bash
#
# Twitter Update
#
# Requires: cURL http://curl.haxx.se/
# By Guillermo Antonio Amaral Bastidas < gamaral@guillermoamaral.com >
#

### CONFIGURE ###

declare -rx USERNAME="YOUR_USERNAME"
declare -rx PASSWORD="YOUR_PASSWORD"

### DONT MODIFY ###

declare -x STATUS="$@"

curl 'http://twitter.com/statuses/update.xml' \
    -u ${USERNAME}:${PASSWORD} \
    -d "status=${STATUS}" > /dev/null 2> /dev/null

# EOF

Inserite il vostro nome utente e password nelle apposite variabili, rendetelo eseguibile con chmod u+x twitter.sh e usatelo:

./twitter.sh Frase da inviare a twitter

Uso perverso:

PROMPT_COMMAND='/path/di/twitter.sh $(history | tail -n 1)'

così potrete davvero far sapere cosa state facendo in questo momento! (Attenzione: era un geek joke, se lo capite vuol dire che ora di fare una passeggiata fuori).

Chiavi OpenSSL deboli per Debian e derivate

Qualche giorno fa il bollettino di sicurezza di Debian dsa-1571 ha pubblicato un bug scoperto da Luciano Bello. Per evitare che i programmi che utilizzano OpenSSL venissero riportati come buggati da Valgrind, i packager di Debian hanno rimosso una istruzione dal codice di md_rand.c, con il risultato di inficiare pesantemente sul seeding del PRNG che genera le chiavi asimmetriche.

LA conseguenza è che data una certa dimensione di chiave OpenSSL non riesce a generare tutte le chiavi possibili, ma solo una tra 32768. Questo vuol dire che i server amministrabili via SSH sono suscettibili agli attacchi brute force anche se autorizzano l’accesso solo con chiavi asimmetriche (metodo storicamente considerato più robusto di semplici passphrase).

Le chiavi generate tra Settembre 2006 e il 13 Maggio 2008 sono da considerarsi vulnerabili e devono essere rigenerate. Sono deboli le chiavi SSH, OpenVPN, DNSSEC, le chiavi nei certificati X.50 e le chiavi di sessione in connessioni SSL/TLS.

H. D. Moore (il creatore di Metasploit) ha scritto un ottima panoramica tecnica sull’argomento: http://metasploit.com/users/hdm/tools/debian-openssl/.

Look nativo su Skype

La versione per Linux di Skype è costruita sul toolkit Qt, per cui si integra particolarmente bene nel look & feel di KDE. Skype però forza il tema “cleanlooks”, mentre le versioni più recenti di Kubuntu usano il tema Plastic (su KDE 3.5.9) o Oxygen (su KDE 4), per cui l’aspetto finale “stona” un po’ con il tema di default. Per fortuna si può costringere Skype a utilizzare il look & feel predefinito del sistema. Per farlo è sufficiente lanciarlo aggiungendo lo switch --disable-cleanlooks:

skype --disable-cleanlooks

L’aspetto di Skype su KDE4 è quello che potete vedere nello screenshot qui sotto.

Trucco magico di velocità

Trucco per Kubuntu per accelerare l’avvio delle applicazioni:

  1. Create una cartella vuota ~/.compose-cache
  2. Aprite un qualunque programma di KDE che contenga un componente per scrivere testo
  3. La cartella ~/.compose-cache conterrà un file il cui nome è una stringa del tipo l4_024_313cb605_00280cc0

Le applicazioni KDE/Qt/GTK dovrebbero ora avviarsi in 50/150 ms in meno.

Ho testato questo trucco solo su Kubuntu, ma dovrebbe funzionare su qualunque altra distribuzione. Se la vostra cartella /var/cache/libx11/ però non è vuota, ad esempio per chi usa SuSE, allora questa piccola ottimizzazione è già attiva.

Per i curiosi: creare la cartella ~/.compose-cache attiva una ottimizzazione creata da Lubos Lunak un po’ di tempo fa che è stata riscritta e integrata in libx11. Di solito all’avvio le applicazioni leggono le informazioni sul metodo di input dal file /usr/share/X11/locale/<locale>/Compose. Il file Compose è piuttosto lungo e richiede un po’ di tempo per essere elaborato. libX11 può creare una cache delle informazioni estrapolate molto più veloce da leggere in seguito, ma ri-utilizzerà una cache solo se può accedervi in /var/cache/libx11/compose o in ~/.compose-cache, se tale cartella esiste già.

Ulteriori informazioni
Via Robert Knight’s blog

Compilare binutils 2.18

Compilando le binutils 2.18 su Kubuntu Hardy Heron 8.04 beta l’installazione falliva con il seguente errore:

Making info in doc
make[3]: Entering directory `/usr/src/binutils-2.18/buildit/bfd/doc'
restore=: && backupdir=".am$$" && \
        rm -rf $backupdir && mkdir $backupdir && \
        if (/usr/src/binutils-2.18/missing makeinfo --split-size=5000000
--split-size=5000000 --version) >/dev/null 2>&1; then \
          for f in bfd.info bfd.info-[0-9] bfd.info-[0-9][0-9] bfd.i[0-9]
bfd.i[0-9][0-9]; do \
            if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; \
          done; \
        else :; fi && \
        if /usr/src/binutils-2.18/missing makeinfo --split-size=5000000
--split-size=5000000   -I ../../../bfd/doc \
         -o bfd.info `test -f 'bfd.texinfo' || echo
'../../../bfd/doc/'`bfd.texinfo; \
        then \
          rc=0; \
        else \
          rc=$?; \
          $restore $backupdir/* `echo "./bfd.info" | sed 's|[^/]*$||'`; \
        fi; \
        rm -rf $backupdir; exit $rc
WARNING: `makeinfo' is missing on your system.  You should only need it if
         you modified a `.texi' or `.texinfo' file, or any other file
         indirectly affecting the aspect of the manual.  The spurious
         call might also be the consequence of using a buggy `make' (AIX,
         DU, IRIX).  You might want to install the `Texinfo' package or
         the `GNU make' package.  Grab either from any GNU archive site.
make[3]: *** [bfd.info] Error 1
make[3]: Leaving directory `/usr/src/binutils-2.18/buildit/bfd/doc'
Making info in po
make[3]: Entering directory `/usr/src/binutils-2.18/buildit/bfd/po'
make[3]: Nothing to be done for `info'.
make[3]: Leaving directory `/usr/src/binutils-2.18/buildit/bfd/po'
make[3]: Entering directory `/usr/src/binutils-2.18/buildit/bfd'
make[3]: Nothing to be done for `info-am'.
make[3]: Leaving directory `/usr/src/binutils-2.18/buildit/bfd'
make[2]: *** [info-recursive] Error 1
make[2]: Leaving directory `/usr/src/binutils-2.18/buildit/bfd'
make[1]: *** [all-bfd] Error 2
make[1]: Leaving directory `/usr/src/binutils-2.18/buildit'
make: *** [all] Error 2

L’errore è dovuto a un bug nel codice del configure (http://bugs.sourcemage.org/show_bug.cgi?id=14015). Si può risolvere in due modi:

  1. Installando una versione di makeinfo <=4.9 (che su *Ubuntu Hardy si riduce a installare questo pacchetto per Gutsy ma funzionante anche su Hardy texinfo_4.8.dfsg.1-6_i386.deb)
  2. Metodo più corretto: applicando questa patch: http://bugs.sourcemage.org/attachment.cgi?id=6971

Scusate il post atipico ma ho perso mezz’ora della giornata prima di capire dove mettere le mani, e magari posso risparmiare il tempo perso a qualcun’altro.

Quick tip: sbloccare il database di apt dopo un crash

package icon by everaldo.comÈ possibile che un’interfaccia grafica per apt come Synaptic o Adept crashi durante l’installazione di pacchetti. Questo lascia il database di apt in uno stato inconsistente. Il messaggio di errore rivelatore del problema è questo:

E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

Che nella versione in italiano è tradotto come:

E: Impossibile ottenere il lock /var/lib/apt/lists/lock - open (11 Risorsa temporaneamente non disponibile) E: Impossibile creare un lock sulla directory di list

Per risolvere questo problema in genere è sufficiente eseguire in un terminale:

sudo fuser -vki /var/lib/dpkg/lock;sudo dpkg --configure -a

Oltre java.util.Random

Daniel Dyer sta pubblicando sul suo blog una serie di articoli dedicati alla generazione di numeri casuali con Java. Tutti i programmatori Java prima o poi utilizzano la classe java.util.Random, che però va bene solo per semplici casi: necessità di una distribuzione uniforme e nessun requisito di sicurezza.

Per la crittografia usare java.util.Random è un peccato mortale: la classe da utilizzare in questo caso è java.security.SecureRandom. Per verificare quanto siano poco casuali i bit generati da java.util.Random fate riferimento a questa pagina: http://www.alife.co.uk/nonrandom/index.html.

Dyer coglie l’occasione per fare “pubblicità” al suo progetto opensource uncommons-maths, rilasciato sotto licenza Apache, che utilizza diversi motori casuali (Marsenne Twister, un generatore basato sugli automi cellulari che piacerebbe a Stephen Wolfram e un generatore basato su AES) e può generare numeri secondo diverse distribuzioni: uniforme, gaussiana, di Poisson, binomiale e esponenziale. È disponibile un demo che mostra in modo sensibile le diverse distribuzioni, basta eseguire sul proprio terminale preferito:

javaws https://uncommons-maths.dev.java.net/demo/demo.jnlp

Gli articoli pubblicati da mentre scrivo sono i seguenti:

Nei prossimi post della serie Dyer parlerà dei gradi di libertà nel mischiare un mazzo di carte e dei problemi da gestire quando si usano numeri casuali nella crittografia.

Nel suo profilo su LinkedIn Dyer scrive di avere esperienza nella programmazione di giochi online relativi a giochi d’azzardo: nessuna meraviglia che sia interessato alla generazione efficiente di numeri casuali (gli algoritmi random utilizzati da un programma che simuli la roulette può essere perfettamente corretto e “fair”: sono le regole del gioco a far sì che alla fine della giornata il vincitore sia sempre il banco).

Creare un jar con dipendenze con Maven

Maven è un strumento molto utilizzato per gestire il ciclo di vita delle applicazioni sviluppate in Java. Per compilare tutti i sorgenti è sufficiente lanciare il comando:

mvn compile

Una cosa che all’inizio dell’uso di Maven mi era sembrata sorprendentemente ardua era creare un unico .jar contenente tutte le dipendenze necessarie per l’esecuzione del programma. La soluzione è molto semplice. Aprite il pom.xml del vostro progetto e aggiungete il maven-assembly-plugin:

    <build>
        <plugins>

            ...

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>
                            jar-with-dependencies
                        </descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>
                                com.application.MainClass
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            ...

        </plugins>
    </build>

Sostituite com.application.MainClass con il nome della classe contenente il main (compreso il package) e salvate il pom. Per generare il file jar eseguite:

mvn assembly:assembly