Friday, August 10, 2012

Un'infarinatura di sed

Cos'è sed? Sed è l'acronimo di stream editor. Sostanzialmente legge del testo riga per riga e lo trasforma in altro testo. Formattato però in un modo che ci fa più comodo.

Un esempio chiarirà tutto.

Prendiamo ad esempio un file, un mio file.

I seguenti pacchetti sono stati installati:
firebird2.5-common (2.5.0.26054~ReleaseCandidate3.ds2-1+b1)
firebird2.5-common-doc (2.5.0.26054~ReleaseCandidate3.ds2-1)
libfbclient2 (2.5.0.26054~ReleaseCandidate3.ds2-1+b1)
libgdiplus (2.6.7-3)
libglib2.0-dev (2.24.2-1)
libgluezilla (2.6-2)
libmono-accessibility1.0-cil (2.6.7-5)
libmono-accessibility2.0-cil (2.6.7-5)
libmono-bytefx0.7.6.1-cil (2.6.7-5)
libmono-bytefx0.7.6.2-cil (2.6.7-5)
libmono-c5-1.1-cil (2.6.7-5)
libmono-cairo1.0-cil (2.6.7-5)
libmono-cecil-private-cil (2.6.7-5)
libmono-cil-dev (2.6.7-5)
libmono-corlib1.0-cil (2.6.7-5)
libmono-cscompmgd7.0-cil (2.6.7-5)
libmono-cscompmgd8.0-cil (2.6.7-5)
libmono-data-tds1.0-cil (2.6.7-5)
libmono-data-tds2.0-cil (2.6.7-5)
libmono-data1.0-cil (2.6.7-5)
libmono-data2.0-cil (2.6.7-5)
libmono-db2-1.0-cil (2.6.7-5)
libmono-debugger-soft0.0-cil (2.6.7-5)
libmono-dev (2.6.7-5)
libmono-firebirdsql1.7-cil (2.6.7-5)
libmono-getoptions1.0-cil (2.6.7-5)
libmono-getoptions2.0-cil (2.6.7-5)
libmono-i18n-west1.0-cil (2.6.7-5)
libmono-i18n1.0-cil (2.6.7-5)
libmono-i18n2.0-cil (2.6.7-5)
libmono-ldap1.0-cil (2.6.7-5)
libmono-ldap2.0-cil (2.6.7-5)
libmono-management2.0-cil (2.6.7-5)
libmono-messaging-rabbitmq2.0-cil (2.6.7-5)
libmono-messaging2.0-cil (2.6.7-5)
libmono-microsoft-build2.0-cil (2.6.7-5)
libmono-microsoft7.0-cil (2.6.7-5)
libmono-microsoft8.0-cil (2.6.7-5)
libmono-npgsql1.0-cil (2.6.7-5)
libmono-npgsql2.0-cil (2.6.7-5)
libmono-oracle1.0-cil (2.6.7-5)
libmono-oracle2.0-cil (2.6.7-5)
libmono-peapi1.0-cil (2.6.7-5)
libmono-peapi2.0-cil (2.6.7-5)
libmono-posix1.0-cil (2.6.7-5)
libmono-profiler (2.6.7-5)
libmono-rabbitmq2.0-cil (2.6.7-5)
libmono-relaxng1.0-cil (2.6.7-5)
libmono-relaxng2.0-cil (2.6.7-5)
libmono-security1.0-cil (2.6.7-5)
libmono-sharpzip0.6-cil (2.6.7-5)
libmono-sharpzip0.84-cil (2.6.7-5)
libmono-sharpzip2.6-cil (2.6.7-5)
libmono-simd2.0-cil (2.6.7-5)
libmono-sqlite1.0-cil (2.6.7-5)
libmono-sqlite2.0-cil (2.6.7-5)
libmono-system-data-linq2.0-cil (2.6.7-5)
libmono-system-data1.0-cil (2.6.7-5)
libmono-system-data2.0-cil (2.6.7-5)
libmono-system-ldap1.0-cil (2.6.7-5)
libmono-system-ldap2.0-cil (2.6.7-5)
libmono-system-messaging1.0-cil (2.6.7-5)
libmono-system-messaging2.0-cil (2.6.7-5)
libmono-system-runtime1.0-cil (2.6.7-5)
libmono-system-runtime2.0-cil (2.6.7-5)
libmono-system-web-mvc1.0-cil (2.6.7-5)
libmono-system-web-mvc2.0-cil (2.6.7-5)
libmono-system-web1.0-cil (2.6.7-5)
libmono-system-web2.0-cil (2.6.7-5)
libmono-system1.0-cil (2.6.7-5)
libmono-tasklets2.0-cil (2.6.7-5)
libmono-wcf3.0-cil (2.6.7-5)
libmono-webbrowser0.5-cil (2.6.7-5)
libmono-windowsbase3.0-cil (2.6.7-5)
libmono-winforms1.0-cil (2.6.7-5)
libmono-winforms2.0-cil (2.6.7-5)
libmono0 (2.6.7-5)
libmono1.0-cil (2.6.7-5)
libmono2.0-cil (2.6.7-5)
libnunit-cil-dev (2.4.7+dfsg-6)
libnunit2.4-cil (2.4.7+dfsg-6)
libsqlite0 (2.8.17-6)
libwebkit1.1-cil (0.3-3)
mono-1.0-devel (2.6.7-5)
mono-1.0-gac (2.6.7-5)
mono-1.0-service (2.6.7-5)
mono-2.0-devel (2.6.7-5)
mono-2.0-service (2.6.7-5)
mono-complete (2.6.7-5)
mono-csharp-shell (2.6.7-5)
mono-devel (2.6.7-5)
mono-gmcs (2.6.7-5)
mono-jay (2.6.7-5)
mono-mcs (2.6.7-5)
mono-utils (2.6.7-5)
mono-xbuild (2.6.7-5)
monodoc-base (2.6.7-5)
monodoc-browser (2.6.2-3)
monodoc-manual (2.6.7-5)
prj2make-sharp (2.6.7-5)
zlib1g-dev (1:1.2.3.4.dfsg-3)


Viene dritto dritto dalla cronologia di synaptic. Sono dei pacchetti che ho sbagliato ad installare e che quindi dovrei rimuovere. Odio lasciare installati pacchi inutili sul pc, mi da l'idea di disordine e per di più occupa spazio.

Come potete notare, questo file è composto da tante righe e, a parte la prima, tutte hanno lo stesso formato:
nome del pacchetto (versione)
Il mio intento è quello di ottenere i soli nomi dei pacchetti, ordinati e docili come tante pecorelle in fila indiana. E poi dare in pasto questa lista di nomi al comando
sudo apt-get purge
per rimuoverli senza traccia. Tipo Mastro Lindo.

Il comando che ho usato è
sed -e '1d;s/(.*)//' da_rimuovere
Ora vi spiego tutto.

da_rimuovere è il file che è mostrato più sopra.

La parte contenuta tra gli apici è il comando di modifica che sed esegue sul file. C'è una cosa da tenere ben presente però: sed non modifica il file stesso! Bensì lo legge una riga dopo l'altra e scrive nel terminale il risultato dopo aver applicato la modifica.

In particolare, in questo caso, tra gli apici ci sono due comandi separati da un punto e virgola (;).

Il primo è 1d, ossia cancella (delete) la prima riga.
Il secondo è un comando di sostituzione, nella forma
s/stringa_da_sostituire/con_quest'altra_stringa/
Nel caso qui sopra, la stringa_da_sostituire consiste in due parentesi che racchiudono il numero di versione - che è sempre diverso - mentre la stringa sostituta è una stringa vuota. In pratica il risultato che si ottiene è quello di cancellare la stringa_da_sostituire.

Come faccio a identificare tutte le "parentesiaperta numerodiversione parentesichiusa"?
Posso farlo utilizzando un'espressione regolare. Un'espressione regolare è una sequenza di simboli che servono a identificare più stringhe con caratteristiche comuni fra loro.

Un'espressione regolare deve sempre essere racchiusa fra due barre (/  /). In questo caso, dato il suo uso all'interno del comando s///, non serve aggiungere altri slash.

L'espressione regolare si legge così:
(.*) tutte le stringhe che hanno una parentesi aperta, un qualsiasi numero di caratteri e una parentesi chiusa.
Il flag -e serve ad indicare a sed che quello che seguirà tra gli apici è il comando di modifica da eseguire.

Ecco fatto! Ora il comando è pronto per fare il suo dovere.

Potete creare uno script bash oppure digitare direttamente nel terminale questo comando:
sudo apt-get purge `sed -e '1d;s/(.*)//' da_rimuovere`
et voilà! PC pulito.

Per qualche lettura in più, da cui tra l'altro ho tratto questo breve tutorial, potete andare qui. Questa è solo la prima parte, qui la seconda e la terza. E' molto ben fatto e propone anche un piccolo ripasso sulle espressioni regolari.

A presto.

Wednesday, August 08, 2012

Elle me dit (Video + Traduzione)




Elle me dit “écris une chanson contente,
pas une chanson déprimante,
une chanson que tout le monde aime”.
Elle me dit “tu deviendras milliardaire.
T’auras de quoi être fier.
Ne finis pas comme ton père”.
Elle me dit “ne t’enferme pas dans ta chambre,
vas-y, secoue-toi et danse
dis moi c’est quoi ton problème?”

Elle me dit “qu’est ce que t’as t’as l’air coincé,
t’es défoncé ou t’es gai
Tu finiras comme ton frère”

CHORUS:

Elle me dit,
Elle me dit “c’est ta vie
fais ce que tu veux tant pis
un jour tu comprendras
un jour tu t’en voudras”
Elle me dit “t’es trop nul,
sors un peu de ta bulle.
Tu fais n’importe quoi
on dirait que t’aimes ca.”

Pourquoi tu gâches ta vie?
Pourquoi tu gâches ta vie?
Pourquoi tu gâches ta vie?
Danse danse danse danse elle me dit danse x2

Elle me dit “fais comme les autres garcons,
va taper dans un ballon,
tu deviendras populaire”.
Elle me dit, “qu’est-ce que tu fous sur internet,
ca va pas bien dans ta tête.
Regarde le temps que tu perds.”

Elle me dit “pourquoi tu te plains tout le temps?
On dirait que t’as huit ans.
C’est pas comme ca que tu vas plaire”
Elle me dit “un jour je ne serai plus là
et c’est quand elle me dit ça
qu’elle me dit un truc que j’aime.

CHORUS

Elle me dit, “t’as pas encore des cheveux blancs,
mais t’auras bientôt 30 ans,
faudrait que tu te réveilles.
Elle me dit “tu es toujours un enfant,
tu ne seras jamais grand.
Et moi je suis déjà vieille

Elle me dit “regarde un peu tes amis,
qu’est-ce qu’ils vont faire de leur vie,
y’ a de quoi se foutre en l’air.
Elle me dit, “oui un jour tu me tueras”
et c’est quand elle me dit ca
qu’elle me dit un truc que j’aime.

CHORUS
Lei mi dice "scrivi una canzone allegra,
non una canzone deprimente,
Una canzone che piaccia a tutti".
Lei mi dice "diventerai miliardario.
Avrai qualcosa di cui esser fiero.
Non finire come tuo padre".
Lei mi dice "Non chiuderti in camera,
dai, scuotiti un po',  balla,
dimmi, qual è il tuo problema?"

Lei mi dice "che cos'hai, hai l'aria sfatta,
ti sei "fatto" o sei gay
finirai come tuo fratello"

RIT.

Lei mi dice,
Lei mi dice "è la tua vita
fai quello che vuoi tanto peggio
un giorno capirai
un giorno te ne vorrai"
Lei mi dice "sei proprio un incapace,
esci un po' dalla tua bolla.
Non ha senso quello che fai
ma si direbbe che ti piace."

Perché sprechi la tua vita?
Perché sprechi la tua vita?
Perché sprechi la tua vita?
Balla balla balla balla mi dice balla x2

Lei mi dice "fai come gli altri ragazzi,
vai a prendere a calci un pallone,
diventerai famoso".
Lei mi dice, "cosa diavolo fai su internet,
non va mica bene nella tua testa.
Guarda quanto tempo perdi."

Lei mi dice "perché ti lagni tutto il tempo?
Si direbbe che hai otto anni.
Non è così che piacerai"
Lei mi dice "un giorno non ci sarò più
ed è quando mi dice così
Che mi dice una cosa che mi piace.

RIT.

Lei mi dice, "non hai ancora i capelli bianchi,
ma avrai presto trent'anni,
bisognerà che tu ti svegli.
Lei mi dice "sei sempre un bambino,
non crescerai mai.
E io sono già vecchia.

Lei mi dice "guarda un po' i tuoi amici,
cosa faranno della loro vita,
è qualcosa di cui fregarsene.
Lei mi dice, "si, un giorno mi ucciderai"
ed è quando mi dice così
che mi dice qualcosa che mi piace.

RIT.


Siete completamente liberi di riutilizzare questa traduzione ovunque vogliate. Sarebbe auspicabile che voi me lo faceste sapere ad esempio lasciando un commento qui sotto, ma anche se non lo fate va bene comunque.
Ciò che importa di più in assoluto è che riportiate che la traduzione proviene da questo blog pogandosullaluna.blogspot.com

Saturday, July 21, 2012

Nel senZo delle freccIe

Sulla porta di una corriera della locale compagnia di trasporti pubblici ho trovato appiccicato questo adesivo. E' scritto allo stesso modo su tutte le corriere dello stesso modello della flotta. Se il costruttore fabbrica corriere nello stesso modo in cui scrive, allora mi dichiaro fortunato di essere ancora vivo :)


Sì, frecce si scrive proprio senza la "i". Per ripassare i plurali difficili, che sbagliamo un po' tutti, vi allego una pagina dell'Accademia della Crusca dove potrete trovare le regole che vi aiuteranno ad domare tutti i plurali, anche i più "imbizzarriti"!

Friday, June 22, 2012

Thursday, May 17, 2012

Estrarre l'audio da un video su Youtube

Requisiti minimi:
  • Il video di Youtube (o anche di siti differenti) già scaricato sul vostro computer
  • FFmpeg, la suite multipiattaforma per convertire, registrare e trasmettere in streaming audio e video... una moltitudine di formati
Dal sito di FFmpeg (ffmpeg.org):
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It contains libavcodec, libavutil, libavformat, libavdevice, libswscale and libswresample which can be used by applications. As well as ffmpeg, ffserver, ffplay and ffprobe which can be used by end users for transcoding, streaming and playing
Per procurarmi il video ho usato Video Downloadhelper, estensione per Mozilla Firefox capace di catturare molto di più che solo video. E lo fa dai più diversi siti internet. Provate per credere.

Fatto questo, avrete bisogno di scaricare FFmpeg. Se usate Linux, ci sono buone possibilità che sia installabile direttamente dai repository della vostra distribuzione. Se siete utenti Windows e siete pigri come me, potete scaricare una build dalla sezione dedicata sulla pagina Download. Può capitare, comunque, che non possieda tutte le caratteristiche di conversione che voi desiderate.

Verificate digitando nel terminale
$ ffmpeg -formats
Comparirà una lunga lista. Verificate le lettere che compaiono accanto ai formati dei files e ai codecs, sapendo che tali lettere hanno questo significato:
D Decoding available

E Encoding available

V/A/S Video/audio/subtitle codec

S Codec supports slices

D Codec supports direct rendering

T Codec can handle input truncated at random locations instead of only at frame boundaries
Nel caso il suo setup non vi soddisfi, non vi resta che scaricare il sorgente e compilarlo da voi.

Avanti con il comando dunque.

Nel terminale digitate:
ffmpeg -i nomefilevideo.flv -vn audioestratto.ogg -acodec vorbis -aq 60
In questo esempio, il comando comprende anche la codifica con qualità 60 nel formato aperto Ogg Vorbis della traccia audio appena estratta.

Nel caso in cui voleste ottenere un file wav per avere più portabilità, potete usare questo comando in luogo di quello qui sopra:
ffmpeg -i nomefilevideo.flv -vn audioestratto.wav
Domande? Sono bene accette nei commenti!