mercoledì 12 marzo 2014

"A deal of $8.3M"

Amusing spam e-mail message I received today:

From: out.al@aol.de

To: undisclosed recipients

Assalam alaikum and may the peace of gracious Allah be with you and your family, please I have a problem which I need a help from you and decided to write you for help
Good day, Am Alhaji Ouatta Akim;Do not be surprised! I got your email contact via the World Email On-line Directory" I am excharge manager at One of the bigiest bank here in Burkina Faso West African and i have a deal of $8.3M to discuss with you urgently/ handle with you.

Kindly Get back to me (alhajiouttaakim@yahoo.com) for more details if you are interested in the deal

Thank you in advance.

Regards,
Jazzack Allah
Alhaji Ouattara Akim

I'm so getting back to you.

giovedì 10 febbraio 2011

Ubuntu rdesktop e problemi CAPS LOCK (risolto)

Aprire il file /usr/share/rdesktop/keymaps/common

Modificare la linea “Caps_Lock 0×0 inhibit” in “Caps_Lock 0×3a capslock

mercoledì 24 febbraio 2010

VirtualBox 3.1.4 e le immagini ISO

Dopo l'aggiornamento di VirtualBox dalla 3.0 alla 3.1.4 l'immagine ISO di un CD-ROM, prima perfettamente utilizzabile, non viene più riconosciuta dal Virtual Disk Manager. L'errore che compare è "VERR_VD_RAW_INVALID_HEADER". Cercando un po' in rete, pare che questo problema sia piuttosto comune. Scopro allora che un utente ha risolto il problema "rimasterizzando" il file immagine con Isomaster, un software per creare e modificare appunto immagini ISO.

Per risolvere il problema è stato sufficiente aprire l'immagine ISO con Isomaster e ri-esportarla in un altro file, senza ulteriori modifiche.

lunedì 8 febbraio 2010

ActionsScript 3.0: stage: width vs. stageWidth

Per accedere ai valori di larghezza ed altezza del documento Flash, è necessario utilizzare le proprietà

stage.stageWidth
stage.stageHeight

Le proprietà quasi omologhe

stage.width
stage.height

sono influenzate invece dal numero e dalle dimensioni degli oggetti disegnati sullo stage.

sabato 9 gennaio 2010

Debug del client subversion a riga di comando

Situazione: il client subversion a riga di comando, svn, non ne vuole sapere di connettersi ad un determinato repository. L'errore è tipicamente "non posso connettermi al server xxx."

Accedendo al repository con altri programmi, ad esempio con TortoiseSVN o con lo stesso Firefox, nessun problema.

Per verificare cosa accade durante l'esecuzione di svn è necessario abilitare l'opzione neon-debug-mask = 511 nella sezione [global] del file di configurazione ~/.subversion/server:


echo "neon-debug-mask = 511" >> ~/.subversion/server

martedì 29 dicembre 2009

Linus definisce Linux "grasso e grosso"

Tradotto da Linus calls Linux 'bloated and huge'

Linus definisce Linux "grasso e grosso"
Nessuna dieta in vista

LinuxCon 2009

Il createore di Linux Linus Torvalds afferma che il kernel open source è diventato "grasso e grosso", e nessuna "dieta bikini" è in vista.

Durante una tavola rotonda alla LinuxCon di Portland (Oregon) questo pomeriggio, il moderatore James Bottomley, insigne ingegnere presso Novell, ha chiesto a Torvalds se le funzionalità del kernel siano introdotte troppo velocemente, prima della sua stabilizzazione.

Citando uno studio interno di Intel che ha seguito le release del kernel, Bottomley ha affermato che le performance di Linux sono diminuite di circa due punti percentuali ad ogni release, accumulando così circa il 12% nelle ultime dieci release. "Ritieni questo un problema ?" ha chiesto.

"Stiamo diventando grassi e grossi. Sì, è un problema" ha detto Torvalds.

Alla domanda su cosa stia facendo la comunità per risolvere la questione, Torvalds ha replicato scoraggiato "Mi piacerebbe poter dire che abbiamo un piano", tra le risatine e gli applausi del pubblico. "Voglio dire che a volte è un po' triste constatare che non siamo per nulla il kernel piccolo, efficiente e razionale che ho immaginato 15 anni fa... Il kernel è grasso e grosso e e la nostra impronta icache è terrificante. Su questo non c'è dubbio. E può solo peggiorare man mano che aggiungiamo nuove funzionalità."

Torvalds sostiene, tuttavia, che la stabilità non è un problema. "Penso che siamo stati abbastanza stabili. Troviamo i bug alla stessa velocità con cui li introduciamo, nonostante aggiungiamo nuovo codice."

L'interpretazione di Bottomley è stata che a queste condizioni Trovalds ritiene accettabile l'attuale livello di integrazione. Ma Mr. Linux lo ha corretto. "No, non sto dicendo questo. Accettabile ed inevitabile sono due cose differenti. E' inaccettabile, ma è anche probabilmente inevitabile."

Tra i tecnofili, di solito è Windows ad essere tacciato di "obesità", ma Linux, nell'espandere la sua portata, inglobando un numero così grande di funzionalità e dispositivi, non può che essere vittima dello stessso destino.

"Okay, quindi in sintesi ritieni che quel 12 percento potrà rientrare il prossimo anno, e ti aspetti che salterà fuori qualcun altro con un piano per realizzare questa previsione", ha scherzato Bottomley. "Questo è l'open source."

venerdì 13 novembre 2009

Unire file pdf senza Adobe Acrobat

Si può utilizzare Ghostscript, in questo modo:


gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf


finished.pdf è il nome del file che verrà prodotto.

file1.pdf, file2.pdf sono i file che si vogliono concatenare. Ovviamente è possibile specificarne un numero arbitrario.

Credits: Linux.com

mercoledì 11 novembre 2009

Squid: rimuovere commenti e linee vuote da squid.conf

Nel file di configurazione di Squid ogni direttiva è preceduta da ampi commenti, molto utili come riferimento o come base di partenza per lo studio di nuove funzioni.

In alcuni casi però il file può risultare maggiormente leggibile quando vengono eliminati tutti i commenti (che includono anche le direttive non esplicitamente configurate) e le linee vuote.

Per produrre un file di configurazione "pulito" partendo dalla versione commentata si può utilizzare il potente comando grep:

Innanzitutto copiamo la versione attuale del file:

cp /etc/squid/squid.conf /etc/squid/squid.conf.bak


Partendo dalla copia di backup appena effettuata, eliminiamo tutte le righe che iniziano con il carattere # (commenti), oppure che sono vuote, e redirigiamo il risultato sul nuovo file di configurazione:


cat /etc/squid/squid.conf.bak | grep -v -E '(^#|^$)' > /etc/squid/squid.conf


Ora possiamo modificare agevolmente il file di configurazione, magari tenendo sott'occhio la copia di backup come riferimento.

lunedì 26 ottobre 2009

Monitor Samsung SyncMaster 720N e Ubuntu 9.04

Dopo aver installato Ubuntu 9.04 su un PC con monitor SyncMaster 720N, mi sono accorto che la risoluzione massima dello schermo era impostata su 1152x864, mentre quella nativa del monitor è 1280x1024.
Il motivo sembra risiedere nella non corretta rilevazione della frequenza orizzontale.
E' necessario quindi "dare una mano" al sistema inserendo alcune direttive nel file di configurazione di X.

1) Aprire una finestra di terminale (Applicazioni --> Accessori --> Terminale)

2) Digitare: sudo gedit
In questo modo si apre l'editor di testo in modalità "superutente", che dà la possibilità di modificare i file di sistema.

3) Aprire /etc/X11/xorg.conf











4) Aggiungere nella sezione "Monitor" le due righe seguenti:


HorizSync 30-81
VertRefresh 56-75






5) Aggiungere nella sezione "Screen" le righe seguenti:


DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x1024"
EndSubSection






6) Salvare il file, chiudere le applicazioni aperte e terminare la sessione di lavoro. Al rientro il desktop avrà la risoluzione di 1280x1024.
Può essere necessario premere il tasto "AUTO" sul monitor per ottimizzare la qualità dell'immagine.

mercoledì 1 aprile 2009

Come aprire i file PWI con Microsoft Word

Innanzitutto occorre copiare il file .pwi dal palmare al PC. Fatto questo lanciare MS Word ed aprire il file .pwi tramite la voce di menu File --> Apri.

Nota bene: se si utilizza la funzione "Apri con..." direttamente sul file .pwi, MS Word mostrerà una schermata bianca invece del contenuto del file.

Questo comportamento, che a mio modo di vedere è sintomo di un baco nel codice di Word, è segnalato in vari forum anche con Word 2003.

Dopo lunghe ricerche, mi sembra inoltre che non esista un programma di visualizzazione dei file .pwi per PC, in modo che sia possibile leggerli anche senza dover acquistare una licenza di MS Word. Né ho trovato una versione di InkWriter / NoteTaker per PC (o un programma equivalente).

Nota polemica: naturalmente queste "note" sono qualcosa di talmente innovativo e complesso che era necessario introdurre un nuovo formato di file... un'altra occasione sprecata per fare qualcosa di buono...

lunedì 9 marzo 2009

Windows XP: ordinare le voci del menu Programmi

Per ordinare alfabeticamente la lista dei programmi nel menu Start di Windows XP, seguire questa procedura:

Start --> Tutti i programmi --> Spostare il mouse su una voce di menu --> Tasto destro --> Ordina per nome

Se premendo il tasto destro del mouse non succede nulla, assicurarsi di avere selezionato la seguente opzione:

Tasto destro su Start --> Proprietà --> Personalizza --> Avanzate --> Attiva trascinamento della selezione

mercoledì 21 gennaio 2009

Monitorare la velocità di trasferimento delle interfacce con iptables

Questo semplice script in Perl rileva ogni 2 secondi i byte trasferiti dalle interfacce di rete (ad esempio eth0 ed eth1) e il valore dei contatori delle regole di iptables, e ne calcola la velocità di trasferimento in byte al secondo.

Impostando opportunamente iptables si può monitorare in questo modo il traffico web, mail, ftp, ecc.

Ecco il codice:



use strict;
use warnings;

# quanti secondi attendo tra un campionamento e l'altro
my $sleep_interval = 2;

# quali interfacce di rete monitorare
my @net_interfaces = qw( eth0 eth1 );

my @bytes;
my @bytes_prev;

my %net_bytes;
my %net_bytes_prev;

while (1) {
my @lines;

# puliamo lo schermo
system('clear');

# otteniamo la data e l'ora dal sistema
my $cur_timestamp = `date`;
chomp $cur_timestamp;

# visualizziamo alcune informazioni di servizio
print "Sampling delay: $sleep_interval s Current time: $cur_timestamp\n";

# leggiamo i contatori delle regole di iptables
@lines = `iptables -v -n -x -L`;

# per ogni regola calcoliamo la differenza del valore del contatore in bytes tra l'invocazione attuale e quella precedente di iptables
# ogni regola viene stampata con il valore della differenza
my $i = 0;
foreach my $line(@lines) {
chomp $line;
if ($line =~ / \A Chain /xms) {
print "\n$line\n";
}
elsif ($line =~ / (\d+) \s+ (\d+) /xms) {
$bytes[$i] = $2;
if (!$bytes_prev[$i]) {
$bytes_prev[$i] = $bytes[$i];
}
my $delta = ($bytes[$i] - $bytes_prev[$i]) / $sleep_interval;
print "[$i] $line - [$delta bytes/s]\n";
$bytes_prev[$i] = $bytes[$i];
}
$i++;
}

print "\n";

foreach my $net_if(@net_interfaces) {
@lines = `ifconfig $net_if`;
foreach my $line(@lines) {
chomp $line;
if ($line =~ / RX \s+ bytes:(\d+) .* TX \s+ bytes:(\d+) /xms) {
my $rx = $1;
my $tx = $2;

$net_bytes{$net_if}{'rx'} = $rx;
$net_bytes{$net_if}{'tx'} = $tx;
if (!exists $net_bytes_prev{$net_if}) {
$net_bytes_prev{$net_if}{'rx'} = $rx;
$net_bytes_prev{$net_if}{'tx'} = $tx;
}

my $delta_rx = ($net_bytes{$net_if}{'rx'} - $net_bytes_prev{$net_if}{'rx'}) / $sleep_interval;
my $delta_tx = ($net_bytes{$net_if}{'tx'} - $net_bytes_prev{$net_if}{'tx'}) / $sleep_interval;

printf "$net_if: RX %10.1f bytes/s TX: %10.1f bytes/s\n", $delta_rx, $delta_tx;

$net_bytes_prev{$net_if}{'rx'} = $net_bytes{$net_if}{'rx'};
$net_bytes_prev{$net_if}{'tx'} = $net_bytes{$net_if}{'tx'};
}
}
}


sleep($sleep_interval);
}

martedì 20 gennaio 2009

Tutto sul proprio PC: dmidecode

Cercando in rete informazioni su come controllare la luminosità del display del mio computer portatile, un Toshiba Satellite A100 (per la precisione il modello PSAANE-02R02MIT), ho trovato un forum in cui veniva menzionato il programma dmidecode.

Questo strumento fornisce una quantità notevole di informazioni sulla macchina. Tra le altre, l'esatto modello del computer (incluso il numero di serie), la presenza di eventuali porte seriali altrimenti nascoste (assenza del connettore DB9), ecc.

giovedì 15 gennaio 2009

smartctl e chipset nVidia

Tentando di eseguire un controllo su un disco maxtor collegato ad una scheda madre con processore AMD e chipset nVidia ho incontrato un problema:


smartctl -a /dev/sda

Device does not support SMART


La scheda madre adotta un chipset nVidia MCP51.

Dopo una breve ricerca ecco la soluzione:


smartctl -d ata -a /dev/sdsa

venerdì 3 ottobre 2008

Database: anteporre un prefisso ai nomi delle tabelle

E' una sana abitudine che può evitare fastidiosi mal di testa da debug.
Usando un ORM per gestire il database (come DBIx::Class in perl), il codice SQL viene generato in modo automatico. Se una delle tabelle ha come nome una parola riservata (ad esempio "group" per indicare un gruppo di oggetti o un gruppo musicale), l'SQL prodotto da una chiamata all'ORM può generare degli errori di sintassi, a causa della presenza di una parola riservata ("GROUP", appunto) in una posizione in cui il parser si aspetta un identificativo di tabella.
Molto probabilmente si sarebbe indotti a cercare un bug nel proprio codice applicativo (ad esempio nella definizione delle relazioni tra le tabelle) oppure nel codice di generazione SQL dell'ORM, in sessioni di debug interminabili e, naturalmente, del tutto infruttuose.
Utilizzando un prefisso per il nome di ogni tabella ci si pone al riparo da questo tipo di problemi e si ha la possibilità di scegliere liberamente i nomi ritenuti più intuitivi.

Riferimenti:

http://lists.scsys.co.uk/pipermail/dbix-class/2008-October/006854.html

martedì 2 settembre 2008

Subversion vs Samba vs UTF-8 (opzione iocharset)

Situazione
Salvataggio dei dati di un pc su un server Gentoo Linux tramite subversion.

Sul server il charset di default è UTF-8:

# cat /etc/env.d/02locale
LC_ALL="it_IT.utf8"
LANG="it_IT.utf8"


# set|grep -i LC_ALL
LC_ALL=it_IT.utf8

Per accedere ai dati, monto lo share nascosto "C$" in modalità "cifs":

mount -t cifs //pc-utente/C$ /mnt

Dato che il repository subversion è ancora da inizializzare, eseguo un "import":

svn import /mnt/Documents\ and\ Settings/utente file:///dati/backup/SVNRepos

Problema
Ottengo però un messaggio di errore:

Aggiungo mnt/Documents and Settings/utente/Recent
svn: Dati UTF-8 validi
(hex: 43 68 65 63 6b 20 69 6e 20 57 69 6e 64 6f 77 73 20 55 70 64 61 74 65 20)
seguito da una sequence UTF-8 non valida
(hex: bb 20 4d 79)

Soluzione
In fase di mount si deve indicare in modo esplicito la codifica da utilizzare:

mount -t cifs -o iocharset=utf8 //pc-utente/C$ /mnt

venerdì 29 agosto 2008

Recupero dati con dd_rescue

Capita che un hard disk presenti dei settori danneggiati. Se non si tiene d'occhio la situazione e non si sostituisce il disco per tempo, il numero di errori cresce, fino a quando i meccanismi di auto-riparazione del disco esauriscono le proprie risorse, e gli errori di lettura divengono evidenti.

Uno strumento che può risultare utile in questi casi è dd_rescue. Dal punto di vista della funzionalità è del tutto simile a dd: permette di copiare blocchi di dati da un file o dispositivo ad un altro.
Realizzare una "copia-specchio" di un hard disk o di una partizione è molto semplice con dd:

dd if=/dev/hda of=/dev/hdc

(supponendo che hda sia il disco da copiare e hdc sia il disco di destinazione di capacità pari o superiore ad hda).

Il limite maggiore di dd è che interrompe l'operazione di copia al primo errore di lettura che incontra nel dispositivo sorgente.

Questo limite è superato da dd_rescue grazie ad alcune potenti opzioni che permettono di gestire gli errori di lettura in modo molto più "intelligente".

Dalla man page:

-b softbs
block size for copy operation (def=16384)

-B hardbs
fallback block size in case of errs (def=512)

-A
Always write blocks, zeroed if err (def=no)


Il parametro -b (b _minuscola_) indica quanti byte alla volta vengono copiati dalla sorgente alla destinazione. Usando un valore "elevato", ad esempio 65536, la copia procede più spedita, perché si riduce il numero di system call effettuate dal programma, spostando in questo modo il collo di bottiglia dalla CPU al sottosistema di I/O (in altre parole si sfrutta tutta la banda passante messa a disposizione dall'insieme discon sorgente, disco destinazione, chipset).

Il parametro -B (b _maiuscola_) entra in gioco quando si verificano degli errori di lettura dal dispositivo sorgente. Quando un settore di dimensione "softbs" risulta illeggibile, dd_rescue tenta la rilettura con settori di dimensione "hardbs".
Se al posto del valore di default pari a 512 byte si utilizza il valore di 1 byte, si evita che per ogni byte illeggibile ne vengano scartati altri 511. Si tenta cioè di recuperare il maggior numero di byte possibile, verificando per ciascuno la possibilità o meno di effettuare con successo la sua lettura.

Infine, il parametro -A indica al programma di sostituire i blocchi illeggibili del dispositvo sorgente con blocchi costituiti da byte nulli. Se si adotta l'opzione -B 1 come suggerito prima, significa che tutti i byte leggibili verranno copiati, salvo quelli non leggibili che verranno scritti come zeri.

Con queste impostazioni si ottiene un duplice beneficio: grazie al valore elevato di -b la copia procederà spedita nelle zone del disco non danneggiate, mentre grazie al valore unitario di -B in caso di errore si procederà un byte alla volta, riducendo al minimo la corruzione dei dati nell'immagine di destinazione.

Esempio completo:

- supponiamo che /dev/hda sia il disco sorgente, danneggiato;
- supponiamo che /dev/hdc sia il disco destinazione, privo di difetti;

dd_rescue -b 65535 -B 1 -A -v -l copia_specchio.log /dev/hda /dev/hdc

con l'opzione -v si ottiene una indicazione chiara dello stato di avanzamento della copia; con l'opzione -l si salvano in un file di testo i problemi incontrati durante l'operazione, utile per un'analisi a posteriori del problema.

giovedì 28 agosto 2008

Postgresql: server status senza PgAdmin

Per conoscere lo stato del server postgresql tramite SQL (ad esempio con psql o da programma), basta usare questo comando:

SELECT * FROM pg_stat_activity;

giovedì 21 agosto 2008

testdisk mi ha salvato la vita (o quasi...)

Situazione: hard disk esterno USB LaCie da 500 GB collegato al computer. Avrei dovuto scollegarlo, ma me ne sono dimenticato. Lancio l'installazione di Windows XP, e nella schermata di scelta delle partizioni vedo un insolito "affollamento": partizioni di varie dimensioni miste a spazi non partizionati... Non mi interessano i dati presenti sull'hard disk del PC, e sono molto, troppo di fretta, quindi cancello tutte le partizioni che vedo... per poi accorgermi che due di quelle appena cancellate appartengono all'hard disk esterno!!

Dopo un attimo di painco, mi ricordo che proprio il giorno prima avevo letto su una rivista dedicata a GNU/Linux una breve recensione dell'utility TestDisk.

Decido di provarla.
Scarico l'eseguibile precompilato per GNU/Linux, lo lancio come root ed eseguo una scansione del disco usb. In un istante vedo materializzarsi sullo schermo le due parzioni appena cancellate. Leggo attentamente le opzioni che il programma mette a disposizione per non fare altri danni, poi finalmente premo su "write", per salvare la tabella delle partizioni. Un messaggio mi avvisa che è necessario un reboot... in realtà è sufficiente scollegare e ricollegare l'hard disk per permettere al sistema operativo di rileggere la tabella delle partizioni del dispositivo.

Collego il cavo USB e incrocio le dita... i due volumi compaiono! Li apro con il file manager e i file sono ancora tutti al loro posto!

La morale è: mai interessarsi a utility di recupero dati trovate per caso... è segno che presto vi serviranno!