Visualizzazione post con etichetta cli. Mostra tutti i post
Visualizzazione post con etichetta cli. Mostra tutti i post

mercoledì 19 marzo 2008

Pimp my .vimrc

Inauguro la serie "Pimp my $something" (che sara' composta da svariate puntate) con il file di configurazione di vim. Il mio .vimrc lo potete scaricare da qui (l'ho hostato su openomy :D). Di seguito sono elencate le personalizzazioni piu' importanti:

Non uso i backup automatici perche' a volte chiudo, per sbaglio, il terminale virtuale e al seguente riavvio odio che vim mi chieda di ripristinare il file

set nobackup

Ho provato molti colorscheme ma il migliore resta sempre desert.
colorscheme desert

Non posso vivere senza la ricerca incrementale :P
set incsearch

Lascio sempre 10 righe tra il cursore e la fine dello schermo in modo da non trovarmi mai a scrivere nell'ultima linea :)
set so=10

Alcuni map importanti (ce ne sono diversi altri nel .vimrc):
map :call MySpellLang()
map :%s/e'/è/ge:%s/o'/ò/ge:%s/u'/ù/ge%s/a'/à/ge
map :TlistOpen

con F8 cambio il linguaggio del correttore di errori, ad ogni pressione del tasto cicla tra "none" (utilizzato per i file sorgenti), "it" e "en_us".
Poiche' uso la tastiera dvorak il tasto F9 mi mette a posto in automatico tutti gli accenti; infine F7 apre la Tlist per i file in C e Cpp (vedi screenshot).



Notate anche la barra di vim, essa contiene:
  1. il nome del file

  2. il formato [UNIX,dox o mac]

  3. il codice ASCII ed esadecimale del carattere sotto il cursore

  4. la posizione espressa in righe e colonne sempre del cursore

  5. la parte di file che si sta visualizzando (espressa in percentuale)

  6. lunghezza totale del file espressa in linee.


P.S:L'indentazioni e' fatta con tab da 4 caratteri convertiti in spazi, solo nei makefile le tabulazioni sono reali e sono lunghe 8 caratteri. Per tutti i file e' applicata la smartindent tranne che per i file in C dove viene utilizzata la cindent.
P.P.S:In fondo al file c'e' qualche abbreviazione per il latex.

mercoledì 20 febbraio 2008

Dividere un file flac con il relativo cue.

Mi hanno passato un cd musicale formato soltanto da un unico file .flac contenente tutte le canzoni e il relativo file .cue con i tag delle canzoni stesse. Anche se questo metodo e' efficente per creare cd musicali non e' proprio il massimo da usare su computer, ecco allora come dividere l'unico grande file .flac in tanti file quante sono le canzoni che contiene e taggarle in automatico con il file cue:
Prima di tutto installiamo cuetools, shntool e flac:

sudo apt-get install cuetools shntool flac

Fatto questo siamo pronti a dividere il file con il segunte comando:
cuebreakpoints foo.cue | shnsplit -o flac bar.flac

Dove foo.cue e' il file .cue relativo a bar.flac.
Infine per taggare i file appena divisi con i tag contenuti in foo.cue basta eseguire il seguente comando:
cuetag foo.cue split-track*.flac

ATTENZIONE:
Su ubuntu il precedente comando non funziona correttamente. Per correggere il problema bisogna fare nel seguente modo:
Prima di tutto apriamo il file dello script cuetag con l'editor di testo che preferiamo:
sudo vim /usr/bin/cuetag

Ed sostituiamo la riga seguente
METAFLAC="metaflac --remove-vc-all --import-vc-from=-"

Con questa:
METAFLAC="metaflac --remove-all-tags --import-tags-from=-"

Questo problema e' derivato dall'utilizzo delle librerie flac 1.1.4 spero che almeno in hardy lo script cuetag sia stato corretto. Piu' tardi indaghero' :D.

domenica 17 febbraio 2008

C trigraph una strada per scrivere codice offuscato

I trigraph sono sequenze di 3 caratteri che generano un solo carattere una volta compilato il programma. Vengono utilizzati per scrivere codice in C con tastiere che non dispongono di segni di punteggiatura opportuni. Sono anche un modo per scrivere codice incasinatissimo, ecco un esempio:


??=include

int main(void)
??<
char n??(5??);
n??(4??) = '0' - (??-0 ??' 1 ??! 2);
printf("%c??/n", n??(4??));
return 0;
??>

Oltre ai trigraph (che ora sono deprecati) nel 1994 sono stati introdotti i digraph, sequenze di 2 caratteri. Per chi volesse approfondire ecco il link di wikipedia

Compilare gnome da svn

Gnome utilizza jhbuild per compilare gnome da svn, questo programma permette di gestire meglio tutta la compilazione e permette di utilizzare i programmi compilati senza che essi vadano a sovrascrivere quelli gia' presenti. Quindi la versione di gnome che andremo a compilare non influenzera' in alcun modo il DE che stiamo utilizzando (sia esso kde, gnome o altro).
Iniziamo con il creare un nuovo utente che utilizzeremo per compilare gnome. Questo passaggio lo potete fare come vi pare: con interfaccia grafica o con adduser.
Una volta loggati con il nuovo utente apprestiamoci a compilare e installare jhbuild (tutto da utente quindi senza i privilegi di root):

mkdir -p ~/checkout/gnome2
cd ~/checkout/gnome2
svn co http://svn.gnome.org/svn/jhbuild/trunk jhbuild
cd jhbuild
./autogen.sh
make install
Fatto questo bisogna creare il file .jhbuildrc nella vostra home directory. Questo e' il mio file, lo potete copiare e incollare, e' impostato per compilare gnome 2.22.
Una volta creato il file di configurazione dobbiamo creare la cartella dove andranno a finire i nostri programmi compilati:
sudo mkdir -p /opt/gnome2
sudo chown username:usergroup /opt/gnome2
In questo modo gnome compilato andra' in /opt/gnome2 e non influenzera' minimamente il nostro DE che e' installato in /usr. Controlliamo se la cartella ~/bin (quella dove abbiamo compilato jhbuild) e' nel nostro path con:
jhbuild --help
Se non e' presente aggiungiamola al path con:
export PATH=$PATH:~/bin
Infine installiamo tutte le dipendenze che richede gnome con:

$ sudo apt-get install gnome-common build-essential doxygen subversion automake1.4 automake1.7 automake1.8 cvs git-core docbook docbook-utils docbook-xsl flex bison texinfo python2.5-dev lynx mono-gmcs libtiff4-dev libxtst-dev libgdbm-dev libxml-simple-perl libelfg0-dev libcupsys2-dev libldap2-dev libexchange-storage1.2-dev libxmu-dev libpam0g-dev libgpgme11-dev libfreetype6-dev libpng12-dev libxrender-dev libxi-dev libexpat1-dev libbz2-dev firefox-dev libxcursor-dev guile-1.8-dev libxdamage-dev libxcomposite-dev libmono-cairo2.0-cil xnest libxft-dev libloudmouth1-0 libloudmouth1-dev libxss-dev libxkbfile-dev
Se non usate ubuntu gutsy qua ci sono guide anche per le altre distribuzioni (comprese le vecchie versioni di ubuntu). Se, invece, volete compilarvi tutte le dipendenze potete farlo con
jhbuild bootstrap
Infine siamo pronti per compilare gnome! Date un bel:
jhbuild build
Vi avverto che molto spesso diversi programmi non compileranno, qui c'e' una guida per risolvere gli errori di compilazione. Se invece di compilare tutto gnome vi serve compilare solo un programma (per esempio evince) basta fare
jhbuild build evince
Se invece volete compilare un programma senza compilare le dipendenze questo e' il comando:
jhbuild buildone evince
Per ricominciare la compilazione da un determianto modulo (per esempio gtk+) basta fare:
jhbuild build -t gtk+
Come utilizzare gnome appena compilato?
Se avete compilato interamente gnome potete creare una nuova sessione in gdm in questo modo:
sudo gedit /etc/jhbuild.conf
E inserite all'interno del file:
prefix = '/opt/gnome2'
Ora aprite il seguente file:
sudo gedit /usr/bin/jhbuild-session
E copiate questo:
exec jhbuild --file=/etc/jhbuild.conf run gnome-session
Abilitate i permessi al file appena salvato con:
sudo chmod a+x /usr/bin/jhbuild-session
Infine create il file .desktop con:
sudo gedit /usr/share/xsessions/jhbuild.desktop
E riempitelo con:
[Desktop Entry]
Encoding=UTF-8
Name=Jhbuild GNOME
Comment=This session logs you into Jhbuild GNOME
Exec=/usr/bin/jhbuild-session
Icon=
Type=Application
Vi consiglio di avviare la sessione sempre con un utente di prova e non con quello che normalmente utilizzate.
Se invece volete avviare solo un applicazione che avete compilato basta fare un:
jhbuild start nome_applicazione
E il programma si avvierà nel DE corrente!

PS: oltre ai link gia' segnalati nell'articolo probabilmente vi torneranno utili anche questi:
  1. jhbuil manual
  2. jhbuil su gnome live
  3. guida su jhbuil e ubuntu

venerdì 29 dicembre 2006

Un utilizzo intelligente di mkdir

Una cosa che mi capita di frequente e’ dover creare un albero di directory in una volta sola. inizialmente facevo in questo modo:

wax@wax-desktop:~$ mkdir workspace
wax@wax-desktop:~$ cd workspace/
wax@wax-desktop:~/workspace$ mkdir C
wax@wax-desktop:~/workspace$ cd C
wax@wax-desktop:~/workspace/C$ mkdir ncurses
wax@wax-desktop:~/workspace/C$ cd ncurses/
wax@wax-desktop:~/workspace/C/ncurses$

Questo e' l'approccio piu' semplice e banale possibile... ed estremamente lento, per fortuna ho scoperto l'esistenza dell'argomento "-p, --parents". L'argomento parents permette di creare piu' directory con un solo comando rendendo il tutto estremamente semplice:

wax@wax-desktop:~$ mkdir -p workspace/C/ncurses

Molto piu' semplice e veloce :D.
Naturalmente si possono creare alberi di directory molto piu' complessi, per esempio:

wax@wax-desktop:~$mkdir -p prova/{a/a_1,c,d/{d_1,d_2,d_3},e/e_1/e_1_1}

Il risultato ottenuto e' il seguente:

directory_tree