mercoledì 12 maggio 2010

Kubuntu e la finestra "Nuovo dispositivo"

Quando colleghiamo al sistema un nuovo dispositivo in Kubuntu, questo ci mostra una finestra popup dove è possibile scegliere un'azione, come aprire in Dolphin, mostra immagini, e così via. Una delle opzioni a disposizione è "Non fare nulla". Se scegliamo questa opzione, e in più, clicchiamo sulla checkbox "Esegui sempre azione selezionata", tutti i dispositivi dello stesso tipo di quello appena collegato verranno da ora in avanti ignorati dall'automounter.

Cosa succede a livello di file system, e come evitare questo comportamento?
La risposta è in un file nella vostra home directory: ~user/.kde/share/config/medianotifierrc

il contenuto del file suddetto è il seguente:

[Auto Actions]
media/cdwriter_unmounted=#NothinAction

cdwriter_unmounted è, come dicevo prima, il tipo di dispositivo. Nel mio caso si trattava di una "specie" di chiavetta usb, quindi la dizione cdwriter_unmounted non è proprio corretta, ma per fortuna... avevo bisogno di escludere soltanto quel particolare dispositivo dall'automounting!

Comunque sia, se mai avrò bisogno di ripristinare l'automounting per questo tipo di dispositivo, sarà sufficiente rimuovere il file in questione dalla mia home dir o, in alternativa, rimuovere la riga incriminata et voilà, automounting ripristinato.

Blogger: Il dilemma della formattazione del codice

Il primo problema che un programmatore deve affrontare nel momento in cui decide di tenere un blog dove pubblicare le scoperte di ogni giorno è sicuramente quello relativo alla formattazione del codice: senza uno strumento appropriato, è impossibile inserire codice sorgente in una pagina web senza che si perda la formattazione originale.



Su questa pagina: http://www.craftyfella.com/2010/01/syntax-highlighting-with-blogger-engine.html ho trovato un interessante strumento adatto alle mie esigenze. Proviamolo con uno stralcio di codice preso dalla test suite delle API di Facebook per PHP:



Blocco 1

public function testIgnoreDeleteSetCookie()
{
$facebook = new Facebook(array(
'appId' => self::APP_ID,
'secret' => self::SECRET,
'cookie' => true,
));
$cookieName = 'fbs_' . self::APP_ID;
$this->assertFalse(isset($_COOKIE[$cookieName]),
'Expect Cookie to not exist.');
$facebook->setSession(null);
$this->assertFalse(isset($_COOKIE[$cookieName]),
'Expect Cookie to not exist.');


Ottimo, sembra funzionare! Ma come? stando al post linkato sopra, è sufficiente inserire nel template di default di Blogger alcune righe di codice, prima del tag </head>:



Blocco 2

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'></script>

<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>


Come potete vedere, oltre a mostrare il codice in modo molto più leggibile, in alto a destra vi vengono anche offerte alcune utili feature extra: un pulsante che permette di copiare il codice direttamente, senza doverlo selezionare a mano dalla pagina (l'effetto è ottenuto tramite uno script flash, quel clipboard.swf che viene richiamato nella penultima riga del blocco 2. Un altro pulsante vi permette di aprire una finestra con il codice senza formattazione, un terzo, vi permette di stampare solo lo spezzone di codice. Piuttosto utile, che ve ne pare? Per ulteriori informazioni, visitate il sito ufficiale di SyntaxHighlighter: http://alexgorbatchev.com/wiki/SyntaxHighlighter



Un'ultimo accorgimento: se nel codice che volete inserire sono presenti caratteri come il segno di minore o di maggiore, ci sono buone probabilità che non verranno mostrati nella pagina. Come fare in questo caso? Ci sono varie possibilità, una è utilizzare un servizio come http://www.opinionatedgeek.com/dotnet/tools/htmlencode/Encode.aspx, gli passate il vostro codice e ve ne restituisce una versione in cui tutti i caratteri che hanno corrispondenti entità in html sono stati sostituiti. Un'altra, la mia favorita: potete utilizzare php direttamente da riga di comando, dopo aver salvato il codice che volete mostrare in un file, ad esempio code.tmp:



Blocco 3

cat code.tmp | 
php -r 'while ($line = fgets(STDIN))$output .= htmlentities($line, ENT_NOQUOTES, "UTF-8"); echo $output;'