giovedì 26 novembre 2009

Trovare i file che contengono due parole.

Metodi scaturiti da un thread su Erlug.

BASH
grep -l stringa1 * | xargs grep -l stringa2

o meglio
grep -lZ stringa1 * | xargs -0 grep -l stringa2 )

oppure
comm -1 -2 <(grep -wl stringa1 * | sort) < (grep -wl stringa2 * | sort)

Note:
Il parametro -l del comando grep nasconde il normale output e visualizza solo il nome dei che contengono il pattern ricercato.

Il parametro -Z del comando grep inserisce un carattere NULL come carattere conclusivo di ogni nome file da visualizzare: viene usato in caso l'output di grep debba essere passato a qualche altro comando (nell'esempio xargs)

Il comando comm confronta due file ordinati linea per linea.

Il parametro -1 del comando comm esclude dall'output le linee uniche del primo file

Il parametro -2 del comando comm esclude dall'output le linee uniche del secondo file

PERL
perl -n0e 'if(/stringa1/&&/stringa2/){print "$ARGV\n"}' *

AWK

awk 'FNR==1{stringa1=0;stringa2=0}
/stringa1/{stringa1=1}
/stringa2/{stringa2=1}
stringa1 && stringa2 {print FILENAME; nextfile}' *

giovedì 19 novembre 2009

Streaming rai.tv senza Silverlight / Moonlight


Script che ci consente di visualizzare i canali RAI in streaming senza usare Firefox e le sue pesanti (e a volte malfunzionanti) estensioni:
http://www.slacky.eu/wikislack/index.php?title=Rai.tv_senza_silverlight

Per chi preferisse un applet gnome per gestire gli streaming RAI potete installare UbuntuwinTV:
http://ubuntuwin.altervista.org/

martedì 17 novembre 2009

Reimpostare la password di desktop remoto su Ubuntu/Debian

Per poterlo fare e' ovviamente necessario l'accesso fisico al server o tramite ssh.
Disabilitiamo l'accesso remoto:
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled false

Generiamo una password criptata (Base 64) utilizzando il sito:
http://www.javazoom.net/services/base64/base64.jsp

oppure mediante il comando:
echo -n PASSWORD | base64 -

Dove al posto di PASSWORD dovete inserire la password che volete impostare.
Impostiamo la password con il comando:
gconftool-2 -s -t string /desktop/gnome/remote_access/vnc_password PASSWORD_CRIPTATA

Dove al posto di PASSWORD_CRIPTATA dovete inserire la password generata.
Riabilitiamo l'accesso remoto:
gconftool-2 -s -t bool /desktop/gnome/remote_access/enabled true

sabato 14 novembre 2009

Inkscape: disegnare una linea retta (segmento se siete pignoli)

Usate lo strumento Penna (Shift+F6). Cliccate sul punto iniziale, poi doppio click sul punto finale.

Potete disegnare molte linee connesse tra loro inserendo un singolo click in corrispondenza di ogni nuovo spigolo, completando la serie con il doppio click sul punto finale.

Per un pinguino piu'....verde....


Ma non cosi'.....
Sito molto interessante per rendere il nostro pinguino meno esoso in termini energetici: http://www.lesswatts.org

Ubuntu: personalizzare il kernel

Verifichiamo la release correntemente installata con il comando
uname -r

sul mio sistema l'output del comando e'
2.6.31.4-custom

ma ovviamente puo' variare su ogni sistema, continueremo ad usare questo come esempio per questo post.
Installiamo ora i sorgenti del kernel (ricordatevi di cambiare numero di versione se necessario)
sudo apt-get install linux-source-2.6.31 kernel-package libncurses5-dev fakeroot

I sorgenti vengono installati (come file tar compresso) nella directory /usr/src
D'ora in poi lavoreremo con credenziali di amministratore, lanciamo quindi il comando
sudo -s

Ora ci spostiamo nella directory contenente il kernel e lo scompattiamo (e' necessaria l'utility bunzip2 contenuta nel pacchetto bzip2):
cd /usr/src
bunzip2 linux-source-2.6.31.tar.bz2
tar xvf linux-source-2.6.31.tar
ln -s linux-source-2.6.31 linux

Facciamo una copia della configurazione del kernel in esecuzione per velocizzare il processo di configurazione del nuovo kernel (attenzione al carattere ` , non e' un apice singolo, bensi' un apice inverso che sulla tastiera italiana si ottiene con AltGr+' e corrisponde al codice ASCII 96):
cp /boot/config-`uname -r` /usr/src/linux/.config

Lanciamo l'utility che ci consente di personalizzare (o customizzare) il vostro kernel:
cd /usr/src/linux
make menuconfig

Prima di tutto scendete in fondo al menu e selezionate la voce
Load an Alternate Configuration File

seguite le istruzioni per caricare il file .config (basta premere INVIO)
Potete quindi cominciare a configurare il vostro kernel abilitando o disabilitando funzioni o moduli. Quando avete finito selezionate la voce
Exit

e salvate la configurazione quando richiesto.
Eseguiamo un make clean per verificare che tutto sia a posto:
make-kpkg clean

Lanciamo finalmente la compilazione:
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

ATTENZIONE!!! Se avete un dual core, un quad core o un sistema multiprocessore, potete ottimizzare la compilazione utilizzando la variabile di ambiente CONCURRENCY_LEVEL settata al doppio del numero dei processori o dei core.
Per sapere quanti processori/core ci sono sul nostro sistema possiamo lanciare il comando:
grep -c '^processor' /proc/cpuinfo

nel mio caso (dual core) ottengo un 2 quindi devo settare la variabile CONCURRENCY_LEVEL a 4.
Rivediamo il comando di compilazione del kernel alla luce di quanto appena detto:
CONCURRENCY_LEVEL=4 fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Questo processo genera due file .deb nella directory /usr/src (al posto degli asterischi troverete il numero di versione del kernel compilato):
linux-image*****.deb
linux-headers*****.deb

potete installare entrambi i pacchetti con il comando (torno al mio esempio):
dpkg -i linux-image-2.6.31.4-custom_2.6.31.4-custom-10.00.Custom_amd64.deb
dpkg -i linux-headers-2.6.31.4-custom_2.6.31.4-custom-10.00.Custom_amd64.deb

ATTENZIONE!!!

Quello appena installato viene configurato dal sistema come il kernel di default, se con questo la macchina non partisse dovete riavviare e premere ESC all'apparire di GRUB per poter selezionare il kernel precedente.

venerdì 13 novembre 2009

Horror stories


Non sono di norma superstizioso (ho anche un bellissimo gatto nero) ma oggi non ho parole (e purtroppo l'ho imparato sulla mia pelle):

Se vi dovesse capitare di rimuovere Microsoft Exchange 2007 da un server, ricordate che la procedura di rimozione non si limitera' a rimuovere dall'active directory tutte le informazioni relative ad Exchange: infatti vedrete sparire (e non subito, magari dopo che avete controllato) tutti gli utenti che prima erano associati a una mailbox di Exchange.

Ovvero, detto con le parole di exchange stesso: "hai degli utenti con delle caselle di posta, EVIDENTEMENTE questi utenti non hanno alcuna funzione oltre a quella di leggere e inviare posta, quindi visto che mi stai disinstallando preovvedero' a eliminarli per sempre e senza dirtelo."

Il tutto e' sfociato in una telefonata questa mattina alle 8:30: "Francesco, nessun utente riesce ad entrare nella rete" ... e sono tornato ora a casa senza aver fatto ne' colazione, ne' pranzo: fortuna che avevano solo 12 utenti....

martedì 10 novembre 2009

Gnome Sticky Notes: backup


Salvare il file ~/.gnome2/stickynotes_applet

lunedì 9 novembre 2009

Postfix: ipv4? ipv6? entrambi?

Le seguenti righe devono essere presenti nel file /etc/postfix/main.cf

ipv4

inet_interfaces = 127.0.0.1
smtp_bind_address = 0.0.0.0


ipv4 + ipv6

inet_interfaces = 127.0.0.1, [::1]
smtp_bind_address = 0.0.0.0
smtp_bind_address6 = ::
inet_protocols = all

Se modificate il file main.cf ricordatevi di attivare le modifiche lanciando il comando:
/etc/init.d/postfix restart

Disabiltare ipv6 a partire da Ubuntu 9.10

Editare il file /etc/default/grub, cercare la variabile GRUB_CMDLINE_LINUX e valorizzarla come segue:
GRUB_CMDLINE_LINUX="ipv6.disable=1"

Se usate GRUB 2 eseguite
sudo update-grub2

altrimenti eseguite:
sudo update-grub
Dopo il riavvio del sistema il protocollo ipv6 sara' disabilitato.
Possiamo anche cancellare dal file /etc/hosts le righe relative a tale protocollo, ad esempio:
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts




Mettiti i pulsanti dove....preferisci....

Ovviamente si parla dei pulsanti presenti nella barra del titolo delle finestre di Gnome (chiudi,massimizza,minimizza,menu).

Lanciare il comando
gconf-editor

modificare il valore
/apps/metacity/general/button_layout

come segue.
Se volete i tasti a sinistra:
close,minimize,maximize:menu

Se volete i tasti a destra:
menu:minimize,maximize,close

Sincronizzare server IMAP: imapsync

Oggi ho scovato imapsync, un interessante comando per sincronizzare due server IMAP.
Io lo sto usando per trasferire i messaggi contenuti su un server IMAP al server che dovra' sostituirlo. La stessa cosa puo' essere fatta anche configurando l'accesso ai due server su un client di posta....ma volete mettere con la gioia di poterlo fare a riga di comando? :)

Per utilizzarlo e' sufficiente lanciare il comando:
imapsync --host1 INDIRIZZO_SERVER1 --user1 UTENTE_1 --host2 INDIRIZZO_SERVER2 --user2 UTENTE_2 --authmech1 PLAIN --authmech2 PLAIN --noauthmd5 --ssl2

Ovviamente dovrete sostituire le parti in maiuscolo:
INDIRIZZO_SERVER1 e' l'indirizzo IP o l'hostname del server numero 1
INDIRIZZO_SERVER2 e' l'indirizzo IP o l'hostname del server numero 2
UTENTE_1 e' l'utente sul server numero 1
UTENTE_2 e' l'utente sul server numero 2
Lo script vi chiedera' le password dei due utenti, dopodiche comincera' la sincronizzazione.

Il parametro --ssl2 e' necessario in quanto l'autenticazione PLAIN e' solitamente permessa solo su canale criptato ssl.

imapsync ha il vantaggio di sincronizzare i server in maniera incrementale, i file gia' sincronizzati non vengono piu' spostati consentendo un minor tempo in caso di sincronizzazioni successive.

Come al solito trovate altri parametri e la sintassi completa del comando sul man:
man imapsync

Installare e configurare spamassassin per procmail

In questo post avevamo visto come installare spamassassin per l'utilizzo da Evolution, ora vediamo come installarlo e configurarlo al meglio per utilizzarlo tramite procmail.

sudo apt-get install spamassassin

N.B.: questa volta non e' necessario abilitare spamd nel file /etc/default/spamassassin in quanto il programma viene richiamato di volta in volta da procmail senza bisogno di mantenere il daemon attivo dal boot.

Per default spamassassin incapsula ogni mail riconosciuta come spam in una mail di notifica. Utilizzando procmail pero' preferiamo che la mail non venga modificata a parte i tag aggiuntivi che la classificano come spam. In questo modo potremo, sempre attraverso procmail, decidere cosa farne (ad esempio spostarla in una cartella SPAM del nostro server di posta). Per fare cio' occorre settare a 0 (zero) il parametro report_safe nel file /etc/spamassassin/local.cf:
report_safe 0

Installazione Dovecot IMAP server

sudo apt-get install dovecot-imapd

Modifiche a /etc/dovecot/dovecot.conf:

1) verificare la linea che inizia con protocols, di norma deve essere:
protocols = imap imaps


2) valorizzare la variabile mail_location a seconda della configurazione richiesta. Nel mio caso e' una installazione Maildir con layout filesystem (le mailbox sono cartelle del filesystem e possono contenere messaggi e sottocartelle, ovvero altre mailbox):
mail_location = maildir:~/Maildir:LAYOUT=fs
Riavviare dovecot con il comando:
sudo /etc/init.d/dovecot restart

domenica 8 novembre 2009

Errore: Another skype instance may exist

Questo errore, visualizzato al momento della connessione di skype, e' causato da un problema di permessi della directory ~/.Skype
Per risolverlo avete 2 modi:
1) Cancellare la directory con il comando
rm ~/.Skype

(la directory verra' ricreata automaticamente al prossimo avvio del programma)
2) Verificare i permessi della cartella ed eventualmente correggerli con il comando
chown -R UTENTE.GRUPPO ~/.Skype

venerdì 6 novembre 2009

Attivare SHMconfig senza modificare /etc/X11/xorg.conf

Per poter usare gsynaptics o synclient per gestire il touchpad del vostro notebook, e' necessario attivare la memoria condivisa inserendo nel file /etc/X11/xorg.conf la seguente riga:
Option "SHMConfig" "on"

nella sezione InputDevice relativa al touchpad.

Nelle ultime versioni di xorg, il file xorg.conf non viene piu' usato ed e' sempre piu' difficile trovarlo nelle distribuzioni linux piu' recenti.

Per attivare la memoria condivisa in questo caso possiamo editare il file
/etc/hal/fdi/policy/shmconfig.fdi

che deve contenere:


<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="input.x11_driver" string="synaptics">
<merge key="input.x11_options.SHMConfig" type="string">True</merge>
</match>
</device>
</deviceinfo>



Completare l'operazione con un reboot del pc.

Notebook con la webcam storta


Se anche a voi capita di vedervi cosi' quando siete ripresi dalla webcam del vostro notebook, allora questo post potrebbe esservi utile.

Il problema e' causato dal fatto che spesso le webcam dei portatili vengono montate alla rovescio per motivi di spazio nello chassis del computer. Ci pensano poi i driver a ruotare l'immagine.

Su linux questo di solito non accade(va), ma ora sono in atto alcuni workaround per aggirare questo problema.

In breve ho scovato 3 diverse vie per raggiungere lo stesso risultato:
  1. Applicare una patch manualmente e ricompilare il modulo uvcvideo
  2. Utilizzare uno script per fare (+ o -) la stessa cosa del punto 1 pero' automagicamente
  3. Utilizzare una versione aggiornata del pacchetto libv4l che riconosca il vostro notebook e ruoti l'immagine proveniente dalla webcam
Analizziamo in dettaglio questi tre metodi:

LA PATCH APPLICATA A MANONA

QUESTA SOLUZIONE E' OBSOLETA: USARE IL TERZO METODO
Trovate un howto dettagliato all'url http://forum.ubuntu-it.org/index.php/topic,199106.msg1326411.html#msg1326411

LA PATCH APPLICATA TRAMITE SCRIPT

QUESTA SOLUZIONE E' OBSOLETA: USARE IL TERZO METODO
http://radu.cotescu.com/2009/07/31/resolving-vertically-flipped-images-from-webcams-in-ubuntu/



LA LIBRERIA LIBV4L


Hans de Goede ha inserito un fix specifico per quei modelli di webcam che vengono montati a rovescio nella libreria libv4l, una libreria video per Linux che gestisce varie periferiche. Se l'ultima versione della libreria non riconosce il vostro modello di webcam, niente paura: dovete mandare a Hans due file contenenti i dati necessari per poter applicare le giuste correzioni alla libreria.

I file possono essere generati con i seguenti comandi:
lsusb > lsusb.log
dmidecode > dmi.log
e devono essere inviati all'indirizzo hdegoede at redhat.com

A partire dalla release 0.6.0, la libreria gestisce correttamente le webcam sottosopra. I pacchetti creati da Hans sono per Fedora (lui lavora per Red Hat). Per installarla su ubuntu, non vi resta che compilare i sorgenti o trovare qualcuno che abbia creato i pacchettti deb. (ad esempio QUI). In quest'ultimo caso aggiungete il repository al vostro sistema e installate/aggiornate il pacchetto libv4l-0.

giovedì 5 novembre 2009

Nuovo portatile: ASUS X5DIJ

N.B.: la configurazione del PC e' in corso, il post verra' aggiornato nei prossimi giorni per poterlo completare.

E' arrivato ieri il mio nuovo portatile, Asus X5DIJ e tra un lavoretto e un altro ho cominciato a prepararlo per l'installazione di Ubuntu.

E' un portatile della serie K50 di Asus, Core2Duo T5900, 4 GB RAM e 320 GB HD.
E' arrivato con Windows 7 Home Premium, ne approfittero' per valutare anche il nuovo prodotto di M$.

Passi previsti per la messa in opera:

1) salvataggio situazione iniziale con Clonezilla
2) configurazione di Windows 7
3) test di Ubuntu Live
4) masterizzazione DVD di recovery con l'applicazione fornita con il PC
5) installazione di Linux Ubuntu 9.10 Karmic Koala
6) personalizzazione del sistema e ripristino configurazioni da vecchio PC

1) Salvataggio situazione iniziale con Clonezilla

Dopo aver inserito il CD di Clonezilla ho acceso il computer ed eseguito il salvataggio da disco a immagine su server SSH. Il risultato e' una directory contenente 33 GB di file vari.

2) Configurazione di Windows 7

Normale procedura di configurazione di un sistema operativo Microsoft preinstallato. Nessun problema.

3) Test di Ubuntu Live

Dopo aver letto parecchie cose brutte sui PC Asus serie K50 (wifi non funzionante, audio gracchiante, video non gestito, webcam ruotata di 180 gradi, altre magagne varie) e solo un po' tranquillizzato da questa discussione, ho provato il cd live di Ubuntu 9.10 Karmic Koala nella versione a 64 bit. Che dire...sono rimasto sbalordito nel vedere il sistema partire senza scossoni, con audio funzionante, video funzionante (persino gli effetti), wifi funzionante. Vedremo dopo l'installazione se sara' ancora tutto a posto.

4) Masterizzazione DVD di recovery con l'applicazione fornita con il PC

Ad ogni boot su Windows 7, il PC consiglia di eseguire il backup su DVD di ripristino. Nonostante abbia gia' il disco di ripristino fornito da Asus e l'immagine iniziale salvata con Clonezilla, la mia congenita paranoia da sistemista mi ha spinto a seguire questo consiglio:

Backup con Clonezilla: poco piu' di 15 minuti in rete gigabit su server ssh.
Backup con Asus AI Recovery Burner su 4 DVD: 3 ore tra creazione immagini ISO, masterizzazione e verifica.

...ehm....

5) Installazione di Linux Ubuntu 9.10 Karmic Koala

Riavviato il computer con il CD di Ubuntu verifico le partizioni installate con il comando:
sudo fdisk -l
Ci sono 4 partizioni:
sda1 (15 GB) contiene le procedure e i dati per ripristinare il PC in caso di catastrofe :)
sda2 (150 GB) contiene il disco C: di Windows 7
sda3 (135 GB) partizione estesa contiene la partizione logica sda5
sda5 (135 GB) contiene il disco D:

Credo proprio che installero' il Koala su sda3 (trasformata in partizione primaria) usando sda5 per la swap.

Lascio ad altri gli avventurismi su ext4, per ora mi affido al fedele (e testato) ext3...in futuro si vedra'.

L'installazione e' cominciata...ed e' terminata liscia come l'olio (ne ho approfittato per andare a mangiare un cuneese al rum)

Vediamo che magagne ci sono all'avvio:
  • [RISOLTO] La mia immagine video su skype e' ribaltata.
  • [RISOLTO] L'audio su skype non viene rediretto alle cuffie.
  • [RISOLTO] La wifi funziona ma sembra segnalare (almeno con wicd) livelli molto piu' bassi di quanto accada sul vecchio Toshiba con Jaunty
  • [RISOLTO] La wifi non funziona dopo la sequenza suspend/resume
  • Bisogna disabilitare le funzioni di tapclick del touchpad perche' troppo sensibile.
  • Su Linux non si riesce a masterizzare su CD, solo su DVD.
WEBCAM

Per la webcam ho scoperto che e' un difetto molto comune per cui si possono scegliere 2 strade:
  • Applicare una patch al modulo uvcvideo che deve essere ricompilato
  • Aggiornare il pacchetto libv4l all'ultima versione disponibile.
La seconda strada e' la piu' pulita ma richiede che il vostro portatile sia gia' stato inserito nella speciale tabella dallo sviluppatore di questa libreria.

Il problema viene risolto dalla versione di test che mi e' stata inviata dallo sviluppatore e quindi la mia webcam sara' gestita nei prossimi rilasci di libv4l.

I dettagli di questa soluzione li potete trovare in QUESTO POST

AUDIO

Per l'audio in cuffia ho risolto lanciando il comando:
alsamixer

e nella sezione Playback ho alzato il cursore con etichetta:
Front
Modificando piu' o meno casualmente/consapevolmente sono riuscito a far funzionare l'audio sia in ingresso che in uscita, anche utilizzando una cuffia con microfono.

Per semplificare ecco i settaggi inseriti su alsamixer:



e sulle sound preferences di Ubuntu:




WIFI

Per la wifi, forse, ho risolto con un semplice:
sudo apt-get install linux-backports-modules-karmic

seguito da:
sudo reboot

Il collegamento wifi con questi driver (ath9k) si e' finora rivelato stabile e con una discreta portata.

Qualche problema si ha in caso di disconnessione (anche e sopratutto in fase di suspend).
Dopo il resume non c'e' verso di far collegare la wifi e lanciando il comando dmesg si vede che tutti i tentativi di riassociarsi all'access point hanno il risultato seguente:
wlan0: AP denied association (code=13)

Dopo svariati test posso confermare che si puo' ristabilire il corretto funzionamento della scheda con l'esecuzione dei comandi seguenti:
rmmod ath9k
rmmod ath
rmmod mac80211
rmmod cfg80211
modprobe ath9k
In alternativa a questa procedura si puo' provare la sequente procedura per scaricare e poi ricaricare i moduli della scheda wifi durante le fasi di suspend/resume:

Aggiungete "ath9k" alla linea seguente, nel file /etc/default/acpi-support
MODULES=""

in modo che diventi cosi':
MODULES="ath9k"

Se non dovesse funzionare, potete provare ad aggiungere anche le dipendenze di questo modulo:
mac80211 cfg80211

o queste se avete installato il pacchetto linux-backports-modules:
lbm_cw_mac80211 lbm_cw_cfg80211

Una piccola curiosita', potete accendere il led della scheda wifi con il comando:
echo 1 > /sys/devices/platform/asus_laptop/wlan

e spegnerlo con il comando:
echo 0 > /sys/devices/platform/asus_laptop/wlan


TOUCHPAD


Per il touchpad ho trovato il sito di chi ha sviluppato un driver per i touchpad Elantech (come quello installato su questo pc) che e' stato inserito in alcuni kernel specifici per Asus eeePC.

Sto aspettando informazioni per poterlo compilare eventualmente su Ubuntu 9.10 (non ho tempo di provare personalmente: se qualcuno si volesse cimentare puo' trovare il driver e la relativa documentazione su http://arjan.opmeer.net/elantech/

Nel frattempo, se non riuscite a sopportare l'inconveniente, potete utilizzare un mouse USB e disabilitare il touchpad mediante il comando:
sudo rmmod psmouse

Per riabilitare il touchpad:
sudo modprobe psmouse

......

MASTERIZZATORE


In Windows 7 funziona egregiamente.
In Ubuntu Karmic non riesce a scrivere su CD. Per fortuna riesce a masterizzare immagini ISO di CD su supporto DVD.

Ecco come viene riconosciuto dal kernel (output del comando dmesg):
[ 2.113315] scsi 1:0:0:0: CD-ROM HL-DT-ST DVDRAM GSA-T50N RR09 PQ: 0 ANSI: 5
[ 2.124541] sr0: scsi3-mmc drive: 24x/24x writer dvd-ram cd/rw xa/form2 cdda tray
[ 2.124546] Uniform CD-ROM driver Revision: 3.20
[ 2.124662] sr 1:0:0:0: Attached scsi CD-ROM sr0
[ 2.124721] sr 1:0:0:0: Attached scsi generic sg1 type 5

Non ho trovato versioni di firmware piu' recenti della RR09 e comunque visto che in windows funziona....

Il problema si e' verificato con CD TDK, provero' prossimamente a usare supporti di altra marca e modello.


6) Personalizzazione del sistema e ripristino configurazioni da vecchio PC

(in attesa di esecuzione)