L'uso di questo sito
autorizza anche l'uso dei cookie
necessari al suo funzionamento.
(Altre informazioni)

Tuesday, December 17, 2013

Is this what humor impairment looks like?

Dave Barry has writtten extensively on the subject of Humour Impairment, but it does not appear the illness has been cured.

This was posted on reddit.com/r/Linux:



OP:"Please do not post support questions here!
This is not the subreddit for them.
/r/LinuxQuestions and /r/Linux4noobs are both great and correct places to ask for support using Linux, either as a newbie or an advanced user.
"


Me:"Please do not post module announcements here. They should go to comp.lang.perl.modules. If they are moderated they should go to comp.lang.perl.modules.moderated. If your question is on core it should go to comp.lang.perl.core, however, if it is on operators, post it to comp.lang.perl.operators. Language questions go to comp.lang.perl.language, all others should go to comp.lang.perl.programming. Also, will those of you who are playing in the match this afternoon move your clothes down onto the lower peg immediately after lunch, before you write your letter home, if you're not getting your hair cut, unless you've got a younger brother who is going out this weekend as the guest of another boy, in which case, collect his note before lunch, put it in your letter after you've had your hair cut, and make sure he moves your clothes down onto the lower peg for you."


Redditor:"I've read it multiple times and I still don't understand what this means. I think you meant to post this to /r/perl ?"


Me: "It's perfectly simple. If you're not getting your hair cut, you don't have to move your brother's clothes down to the lower peg. You simply collect his note before lunch, after you've done your scripture prep, when you've written your letter home, before rest, move your own clothes onto the lower peg, greet the visitors, and report to Mr. Viney that you've had your chit signed. Now, sex. Sex, sex, sex. Where were we? Well, had I got as far as the penis entering the vagina?"

Friday, December 13, 2013

Lo hobbit: la sfortuna di essere orco, l'imbarazzo di essere un drago

Insomma sono andato tra i primi a vedere la seconda parte di lo Hobbit, diretto da Peter Jackson, e mi dispiace dire che mi è piaciuto piuttosto meno del primo.

Diamo subito a Cesare quel che è di Cesare: grandi ambientazioni e grande spettacolo visivo, passo sostenuto (anche troppo), effetti speciali,  CGI e trucco di prim'ordine: la noia non fa parte dei problemi di questo film.

Nemmeno i cambiamenti di trama rispetto al libro  nè l'introduzione di personaggi nuovi, mi hanno disturbato più di tanto - li avevo già digeriti nel primo film  (ma altri la pensano diversamente, e molto in negativo).

La recitazione è più o meno quella del primo film. Continuo a preferire i personaggi secondari (Balin fra tutti): Thorin diventa più sinistro ad ogni minuto (dovrebbe essere soprattutto triste e assorto) e Bilbo sembra costantemente fuori posto (un po' era così anche nel libro, in fondo).

Passiamo alle cose che mi sono veramente piaciute poco o per nulla, in ordine inverso di sgradimento (Attenzione: qualche spoiler).

Intanto il ritmo narrativo. I viaggi nel "Signore degli Anelli" e ne "Lo Hobbit" sono lunghi - durano settimane, mesi. INfatti a volte sono tanto lunghi da essere fastidiosi (l'attraversamento di Mordor di Frodo e Sam l'ho sempre trovato esageratamente lungo). Mentre nel primo film PJ faceva qualche sforzo per comunicare questa dimensione temporale (scene serali nell'accampamento), in questo - forse punto sul vivo dalle critiche di lentezza rivolto al primo - non ci ha nemmeno provato.

Nonostante la considerevole durata del film (2 ore e 40 minuti) molte situazioni hanno il ritmo frenetico di comiche di Ridolini: la scena che ha decisamente la peggio è l'attraversamento di Bosco Atro, che pare durare cinque minuti in tutto: per compensare e spiegare lo spaesamento dei personaggi, ci fanno sospettare che il luogo sia psichedelico ("L'aria è strana") forse per un eccesso di canapa nel sottobosco. Anche l'episodio dei ragni viene trattato con la stessa fretta.

Beorn ha la palma del personaggio più maltrattato. Assoggettato al trattamento Ridolini di cui sopra, viene ridotto ad una specie di bruto caratteriale (nel libro è un personaggio nobile e strano).  Tutta la scena della presentazione  a coppie della compagnia sparisce, così come il senso globale dell'episodio.

 Gli orchi. Sono centinaia e sono ovunque, anche dove non te li aspetti (nel regno degli elfi silvani ad esempio). Sono più grandi, (apparentemente) forti e mostruosi che mai. E totalmente, irrimediabilmente sfigati.  Dopo un po' uno comincia a provare la stessa simpatia che si prova per Wile E. Coyote. I terribili orchi si battono continuamente il petto, minacciano sfracelli, corrono come pazzi - sui Warg e  a piedi - e non fanno che prendere micidiali tranvate, da chiunque, senza riuscire a infliggere danni che non siano risibili. Bisogna aspettare fino a tre quarti del film prima che Legolas prenda due (lievi) pappine da un orco e l'unico risultato che hanno è farlo imbufalire ancora di più. Poco lontano, dieci orchi non riescono ad avere ragione di due bambine, che li bersagliano con piatti di legno. Così imbelli sono i poveri Uruk Hai che dopo un po', forse per rendere le cose più interessanti, i protagonisti cominciano ad ucciderli in maniera comica, o addirittura spregevole ("Se parli ti lascerò libero" ... "Ecco gli ho liberato le spalle dalla sua mostruosa testa"). Dice Legolas: "Tauriel, non puoi dare la caccia da sola ad una banda di 30 orchi", ma è chiaro che per questi qui bastava anche l'orso Yoghi.

Il drago Smaug. A parte che doveva essere rosso (è verde) doveva anche essere tremendo. E' vero che, nel libro, l'interazione del drago con gli gnomi lascia un po' a desiderare (e tutto sommato anche il modo in cui viene fatto sparire è abbastanza sbrigativo). Bisogna ricordare che nel libro Bilbo parla a Smaug mentre è invisibile e nascosto nell'imboccatura di un tunnel angusto e ciononostante, quando Smaug si stanca - dopo 10 minuti  - delle chiacchiere di Bilbo, manca poco che arrostisca tutti quanti, si sfoga demolendo mezza montagna solitaria. e poi se ne va a distruggere Ponte Lagolungo. Per cui si può capire che Jackson volesse incrementare la presenza in scena di Smaug. Ma il prezzo che ha pagato per farlo è altissimo. Per 20 minuti Smaug si esibisce in evoluzioni (impressionanti) in uno spazio grande, illuminato e sgombro come lo stadio di San Siro senza riuscire ad arrivare nenache vicino ad uno dei 13 nani più un hobbit che per tutto il tempo corrono in piena vista e lo prendono per i fondelli. Il cartone animato di riferimento diventa (ahimè) Tom e Jerry. Il comportamento di Bilbo è demenziale, continua a mettersi e a togliersi l' anello dell'invisibilità per motivi inspiegabili: quando se lo toglie, cerca subito di nascondersi (!!!)   Attorno a lui  abbondano le situazioni risibili:Thorin naviga un fiume di oro fuso su uno scudo senza farsi nemmeno una vescica ad un mignolo. E, nella migliore tradizone dei cattivi di Bond, tutta la scena è accompagnata da incessanti, logorroici proclami ("Come sono terribile! Ora vi prenderò!") di Smaug , che evidentemente non si accorge dell'imbarazzante pochezza dei risultati. Forse il padre e il nonno di Thorin li ammazzò annoiandoli a morte.

Insomma si assiste ad un sacrificio massiccio della logica a vantaggio dello spettacolo, e mi sembra che, anche per un film di cappa e spada, si esageri. Come disse un mio amico - parlando de "La Mummia "- "E' vero che al cinema bisogna sospendere l'incredulità, ma dirci che al Cairo, nel 1917, si verificarono le 10 piaghe d'Egitto e nessuno lo ha mai saputo mi pare troppo". Appunto.

P.S: Non è colpa di P.J. ma tra le cose spiacevoli devo aggiungere la traduzione del parlato, sciatta e piena di anglicismi o di allocuzioni contorte evidentemente derivate dalla forma dell'originale Inglese. Ma non è certo questo l'unico caso, o il peggiore.

Friday, December 6, 2013

Local editing of remote file, from the CLI, with emacs.

What I do all day long involves hopping, mostly with ssh, on various machines and editing files over there.

Over the years I have settled on emacs as my sole editor. I have even tried to plug it in various IDEs (such as Eclipse: without much luck, so I backed off). So the initial approach requires having it installed everywhere I log in. Cool, but it deprives me of the graphical environment because...

  1. X over the network is pitiably slow
  2. FreeNX is better, but not enough, and sometimes screws up on fonts, keyboard type, etc. Also you end up with a mess of emacsen frames, and copypasting is still not ideal.
As an old time emacs hand I would not be (much) bothered by having to use the tty version, if it were not for the clunkyness of cutting and pasting between windows on different servers (which I often do). For a while I relied on mounting the remote machine's file systems locally with sshfs, under a hierarchy such as
as
/remote/server1/... 
/remote/server2/... 
I could then use my local emacs to edit remote files as if they were local. Not bad - and I still use this technique now and then, for different purposes - except:

  • It's overkill
  • You now have to remember to unmount
  • You now have this wonderful opportunity of wiping out an entire server (or part thereof) by mistyping a command on your local machine (I know. It happened - shudder)
After that, I began using an emacs extension called TRAMP. It gives emacs the ability to edit remote files whose path is of the form:

//server:/my/nifty/file.txt

TRAMP does its thing by using a variety of transports, mostly ssh based. It also gives you access to countless emacs goodies, like diff'ing (via ediff) two buffers sitting on different machines, editing remote directories, remote VC (careful of C-c C-Q, though) and more. But I digress. So this TRAMPish solution is much better except for the (not huge, really, but still) snag of having to remember to:
  1. Look up the path of the file (in the terminal)
  2. Restrain the habit of editing in the terminal window itself
  3.  Move to my emacs window (maybe on a different desktop, hidden under a pile of junk; also, makes me pick up the mouse even if not strictly needed)
  4. Type again (or maybe paste) the file path, in tramp digestible format.
Because of this, and to my chagrin, I sometime ended up in - unwillingly - editing within the terminal. Would it not be supercool if I could type on the server:

server1:/# hed /my/nifty/file.txt

and have the file pop up in my local emacs window? Which brings us to my latest, greatest solution to this monumental problem of computer science.

Update: Andrew McGlashan alerted me to vim's capability of opening remote files from the CLI much like emacs does. Which means that suitably combining that and gvim's client-server capabilities, you can pull the same trick if you are a vi head. Which is good, because, as soon as I posted this, a number of dudes felt obliged to point out that vi is the editor. Which may well be the case, for them and for all I (want to) know. I will leave the development of the idea to vi users more gifted than I (not a hard feat to achieve). 

(Caveat: I tried what follows with emacs 24.2.1, tramp 2.2.24-1 (which ships with emacs) on a Fedora Core 18 Linux. I suppose it may work with other combinations of versions, operating systems... even with windows, putty and some sort of ssh server on top of that. But I did not even venture to try.)


  1. Be sure to have the following in your local .emacs:

      (server-start)

    This make emacs listen to a local socket so you later on, can type 


    localhost:/# emacsclient file.txt

    and have the (local) file pop up inside emacs. Man emacsclient explains this.
  2. Have shared ssh keys between your desktop and your servers, and an operating ssh-agent so you don't have to type your password every time (if you don't know what I am talking about, man ssh, man ssh-agent, man ssh-add are your friends)
  3. Have a .ssh/config file containing stanzas like the following:
    
    Host server1
     HostName server1.foo.bar
     RemoteForward 8222  127.0.0.1:22 
     User luser
    
    
    So you can type
    
    
    localhost:/ #ssh server1 
    
    
    and be connected to server1 as luser, passwordless, and tunneling the port 8222 (arbitrary number) on the local interface of server1 back to your sshd port on your local machine (this is quite a mouthful).
  4. Now install the following thingy on all your servers, say in /usr/local/bin, and call it hed (don't forget to chmod 755 /usr/local/bin/hed):
    
    #!/bin/bash
    
    PORT=8222
    HOST=localhost
    LHOST=${HOSTNAME:-$(hostname -f) }
    RU=${HUSERNAME:-$USER}
    
    ver=0.1
    author="Alessandro Forghieri "
    usage () {
     name=`basename $0`
     echo "$name $ver $author"
     echo
     echo "Usage: $name [-p port] [-h host ] [-l lname] [-u user]  [-v] file1 file2 ..."
     echo
     echo "        -p   port number (defaults to $PORT)"
     echo "        -h   host remote host (defaults to $HOST)"
     echo "        -l   lname name of this host "
     echo "             (defaults to content of HOSTNAME or output or hostname -f command, currrently: $LHOST)"
     echo "        -u   user remote user "
     echo "             (defaults to the contents of the HUSERNAME or USER environment variable, "
     echo "             currently: $RU)"
     echo "        file1 file2 localfiles to edit with remote editor"
     echo
     echo "See also: man boilerplate"
     echo
    }
    
    #http://stackoverflow.com/questions/3915040/bash-fish-command-to-print-absolute-path-to-a-file
    abspath() {
        curdir=$(pwd)
        if [[ -d "$1" ]]; then
     retval=$( cd "$1" ; pwd )
        else 
     retval=$( cd $( dirname "$1" ); pwd )/$(basename "$1")
        fi
        cd $curdir
        echo $retval
    }
    
    while getopts p:h:u:l:v opt ; do
        case "$opt" in
     p) PORT=$OPTARG    ;;
     h) HOST="$OPTARG"  ;;
     i) usage ;  exit   ;;
     v) set -x          ;;
     ?) usage ;  exit   ;;
        esac
    done
    
    shift `expr $OPTIND - 1`
    
    while [[ x$1 != x ]]; do
        target=$(abspath $1)
        ssh -f -p $PORT ${RU}@${HOST} "emacsclient -n \"/${LHOST}:/${target}\""
        shift
        # or some funky race condition screws everything up 
        sleep 2
    done
  5. Explanation: the script above formats a file path in a form digestible to tramp - that is/hostname:/blah/blah (I need two leading slashes within emacs, only one from a shell, I wonder why). It then sends the command emacsclient -n , via ssh, to my local desktop, using the tunnel I just created - my machine, like 99.9% of modern enduser machines is behind a firewall with NAT o top - that explains the need of the firewall. Now emacs opens the file(s) via the regular forward ssh channel
And there you have it: local editing of remote files, from the CLI, with emacs.

Wednesday, December 4, 2013

Assistenza Clienti (della serie il fumo è buono)

Un cliente si lamenta con forza che la sua copia di  Autocad a 64 bit è incompatibile con un PC a 32 bit (che ha da alcuni anni) e chiede di sapere perché gli abbiamo venduto un prodotto incompatibile e inferiore.

Ad un controllo in contabilità risulta che:
  1. il PC non gliel'avevamo venduto noi
  2. neanche il sistema operativo
  3. neanche autocad.
  4. WTF?????
Una cliente  vuole sapere perchè le mail che scrive e invia attraverso il nostro server  vanno a finire nello spam dei destinatari (messaggi senza oggetto, senza body, 4 allegati binari: chissà come mai).

Dopo un po' che le spiegavo, con voce suadente, l'ABC dei filtri antispam, mi fa:

 "E allora come mai se spedisco con l'iPhone non ci vanno, nello spam? Eh?" 
Io: "Ma spedisce lo stesso messaggio?"
"No, uno diverso."
Io: *facepalm*

Evidentemente vanno tutti dallo stesso pusher.

Friday, October 18, 2013

Ooops! I did it again. I threw SELinux in the trashcan.

So, once again, I crashed head on into  SELinux's "user experience". And, once again, it sucked.

I keep SELinux enabled on my workstation in order to be, now and then, reminded of its existence and to see if it becomes by any chance usable, as I disable it on all production machines.

Yesterday,  I needed to test a milter that I am modifying for sendmail, and I needed to do it on my machine. It was a thoroughly joyless experience.(Note: I have been doing this kind of stuff for the last twenty years or so. Some would say I should know better by now).

As soon as I fired up the daemon and hooked it to sendmail, sendmail began spewing "Permission denied" messages all over the log file, complaining about being denied access to the socket that it should have used to communicate with the milter.

I entered Google frenzy, and after a while I began homing in on a SELinux problem.

I used yum to install a couple of other milter packages (which worked fine), and ran 'ls -Z' on the corresponding files to check their context (under SELinux, you can forget to get the whole permission story with ls -l. Ain't that nice.) I then used chcon on the files of my milter and  made the context identical to the ones of the working milters, as advised as a workaround by a smattering of bug reports peppering the net. Guess what? Didn't work. I eventually ran into a situation where SELinux was not allowing me to chcon the involved files anymore. This means that you (as root) are not allowed to change the permissions/context of a file (which you may well have created and own)  because of the context it has (context which you may well have set on it). What one has to do in that situation, beats me - I also no longer care, as it will be clearer later.

But wait! Why did I have to google my problem in the first place? Surely SELinux provides plenty of logging help to its hapless victims. NOT. (And if you believed that, would you be interested in some Florida real estate?)

SELinux writes bubke to log files, any log file. And the permission errors it causes are indistinguishable from the regular garden variety. What would signal that something is wrong with SELinux is a separate daemon, called auditd, which is endowed with the following properties:

  1. It requires you to be aware of its existence. SELinux is very happy to run stealthily without it. 
  2. Of course, auditd won't write in a mundane place like /var/log/messages. It writes in its own private log, which - in my distro, Fedora 18 - is also whisked away under /var/log/audit/. God forbid that you 'grep' it by mistake and be overwhelmed by information.  
  3. It has to be running. Which it would be, by default, except the latest upgrade somehow disabled it (sheesh).
  4. It runs an advice wizard that sort of tells you how to get a fix. Which is nice, but it requires you to be logged into a graphical shell (AND to be running the appropriate applet). So it is less than ideal if you plan to deploy SELinux on a server, but hey, that is a loony idea in itself, right?

I turned the auditd machinery on,ran the applet, noted its advice, applied it. So after four hours of  "development" I found myself  as good as when I started. All I had achieved to this point was changing this message: 

Milter (smf-sav): open /var/run/smfs/smf-sav.sock failed: Permission denied

into this pair of messages:


NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 1693: Xsmf-sav: local socket name /var/run/smfs/smf-sav.sock unsafe: Permission denied
/etc/mail/sendmail.cf: line 1693: Xsmf-sav: local socket name /var/run/smfs/smf-sav.sock unsafe: Permission denied


What fun.

So, in order to preserve my sanity, I set SELINUX=disabled in /etc/sysconfig/selinux and reebooted.  When the machine rebooted, I was staring at the same messages as above. However, while I was looking for a suitable sledgehammer to take to the monitor, I  suddenly remembered that "local socket name is unsafe" is a profoundly brain damaged  diagnostic that sendmail issues in several circumstances. For instance, the message is issued when the file does not exist. I started the milter, it created the file and I was sort of back in business (I actually went home).

So, what had (probably) happened, was that the fix suggested by auditd had worked, but by that time the milter had for wahtever reason gone awy and the relevant files had been removed (I may be to blame on both counts, God knows I wasn't completely lucid at that point).

So once again SELinux is off my workstation, and I don't seeit coming back any time soon.

I am sure that SELinux apologists will point out several flaws in my behaviour and conclude it's all my fault.
Off the top of my head:
  1. I was dabbling with things of which I have limited and insufficient understanding
  2. I was'nt running auditd
  3. I am running sendmail 
  4. Had I  been more systematic, the fix would have worked.
To which I will reply that: 
  1. True enough. But (remember?) my main task was mail related. I can use the standard Unix permission system without qualified knowledge of most of the innards of the kernel. The closest I would get to gain a similar insight in SELinux is by digesting a couple of ponderous tomes, then get extremely well acquainted with how SELinux   is used in my distribution, because the way it actually works is embedded in the security policy (as opposed to simply depending on ownership and permissions of the source and target files). To which my reaction is "Come again?"
  2. I surely did not turn off auditd; a quirk of the distro upgrade did. But even if I had been inclined to turn auditd off, if it is such a critical piece of armory when running SELinux, then it should be a requirement - which it is not.
  3. This is not the place for me to defend sendmail. Suffice it to say that milters are used also by qmail  and postfix in much the same way, so 99.9% I would have run into the same walls with other MTAs. Also, braindead diagnostics are by  no means a sendmail exclusive.
  4. That's true. Maybe it would have worked. Maybe not. To find out I'd have to reactivate SELinux, relabel the file system and then check. Guess what? I'm not doing it.
But even if it did work, consider this. At the beginning of the story, I did not set out to become a SELinux expert. I just needed to make a system daemon able to read a file. All of a sudden, I had to try to make sense of security contexts, system_u:var_run_t, ls -Z and god knows what else.

Besides, the suggested 'fix':

# grep sendmail /var/log/audit.log | audit2allow -M mypol
# semodule -i mypol.pp


which might have worked, is far from perfect. It needs a wizard to figure out, it's highly cryptic, it performs its magic through binary files which disappear in SELinux's guts, and gives me no obvious way to find out that it has been applied. So now I have borked my machine's security policy in a way I will not be ever able to replicate by other means; as a boon I have no way to ascertain that the fix is there, should I forget about it, unless I turn myself into a SELinux specialist. Also, the only useful  insight I have gained in the process is "Turn off SELinux if you value your time". Tell me about "Learn by doing"

All this is a madness on par with the Windows permission system, but without the GUIs  - 'nuff said.

TL;DR: After  more than 10 years, SELInux is still a giant stinking, fuming pile of crap. Avoid like the plague.

Monday, October 7, 2013

Back to the ole tty

Perhaps to certify my incipient old fart status, I have set myself to the task of not needing a gui mail client anymore. So I strung together mutt, my old mainstay emacs, threw in the very good Google book script, spruced it up with the (dark) solarized color theme, added some mailcap bits to keep in check those pesky html messages, and churned it with the help of a ton google searches.

Now, I can read a message write the answer and send it email by using a total of two mouse clicks. I could do it with zero mouse clicks, if I had really gone teletype and occupied my entire workspace with a big, honkin' terminal window (I don't), or if I mastered the ever-shifting keystrokes that my current window manager uses to switch windows (I won't). Also I could (acrobatically) be running mutt within emacs (with term.el). I am afraid to go down that path, though, lest I meet madness there.

As things are, I am reading mail in a mutt terminal window in my left monitor, and write it in an emacs frame in my left monitor - so i need to move the mouse from one to the other (and click the frames - uhm, perhaps I'll go back to implicit focus, how's that for the good old times?).

Thunderbird keeps lurking in the bottom-most workspace for when I am not coding  or somehow busy with a terminal window, or for when I really need access to a non-text attachment, which is seldom. I'll keep the VGA viewers, text-only mode and no window manager for the time when old age will make me really grumpy.

In this spirit, I am not going to insert the mandatory desktop snapshot (also: how do you snap on two monitors?) , but you can see my config (minus the color theme, that is). For the inquiring minds, I am on a Linux Fedora core 18 desktop, the mail server runs a Linux CentOS6 OS, with dovecot as mail server.

File ~/.muttrc
#----------------000-personal
set realname="Alessandro Forghieri"
my_hdr From: Alessandro Forghieri
set use_from = yes
set envelope_from = "yes"
#----------------010-imap
set spoolfile="imaps://alf@my.nyfty-imap-host.it/"
set folder="imaps://my.nyfty-imap-host.it/"
#I like my answers copied to inbox
set record="="
set postponed="=Drafts"
bind index "^" imap-fetch-mail
#----------------020-program
set edit_hdrs
set mailcap_path=~/.mutt/mailcap
auto_view text/html
alternative_order text/plain text/html
set editor=emacsclient
set sort=threads
set narrow_tree
#----------------090address-book and aliases
set query_command="goobook query '%s'"
macro index,pager A "goobook add" "add sender to google contacts"
bind editor complete-query
alias alf Alessandro Forghieri ;

File ~/.mutt/mailcap
audio/*; /usr/bin/xdg-open %s
image/*; /usr/bin/xdg-open %s
application/msword; /usr/bin/xdg-open %s
application/pdf; /usr/bin/xdg-open %s
application/postscript ; /usr/bin/xdg-open %s
text/html; elinks -dump %s ; copiousoutput;

File ~/.emacs (excerpt)

  (server-start)
  (add-to-list 'auto-mode-alist '("/mutt" . mail-mode))
  (defun my-mail-mode-hook ()
    (auto-fill-mode 1)
    (abbrev-mode 1)
    (local-set-key "\C-Xk" 'server-edit))
  (add-hook 'mail-mode-hook 'my-mail-mode-hook)


Monday, September 30, 2013

How I Learned to Stop Worrying and Love Java coding

In the dreary, humdrum world of coding, your soul eventually shrivels in boredom, and you do not believe in miracles anymore. Things lose their magic and you - for instance - come to expect that  doing things like calling

 HttpURLConnection.setFollowRedirects(true);

will just cause your http URL connections to follow redirects. How trivial. That's life outside of Java programming: grey, unexciting, boring.

But throw Java in the picture and things start - to - happen, man! I could put it no better than in this helpful words  by mykong:
"The HttpURLConnection‘s follow redirect is just an indicator, in fact it won’t help you to do the 'real' http redirection, you still need to handle it manually."

Read this sentence over and over. Savor its absurdist, surreal quality. Feel your mind slowly slipping away. Turn on. Tune in. Drop out.

That's Java coding, for you, my dear.

Monday, September 16, 2013

Perché le opinioni e i farmaci si somigliano?

Risposta: perché le opinioni generiche, come i farmaci generici, sono più economiche.

Questa l'ho sentita dire, su Radio 3, a Stefano Zamagni,illustre economista,  nonché invitato a paralare su "Economia e amore"  al Festival della Filosofia di Modena.

Cito a memoria:

SZ: "Il sistema della finanza capitalistica come lo si è inteso dal 1700 è ormai agli sgoccioli, gli resta tutt'al più qualche lustro"
Intervistatore: "E perchè, secondo lei?"
SZ: "Perché la gente è stufa, ecco perché"

Quando si dice una ricerca empirica di peso.

Tuesday, September 10, 2013

Modena, ai bei tempi andati

Stando ad un Anonimo del 1570, (che pare si rivolgesse al Tassoni) questa era la Modena contemporanea:

"Portici affumicati e strade strette, 
 Storte, piene di buche e di letame, 
 Un’aria sempre torbida ed infame, 
 Un continuo vuotar di canalette. 

 Femmine lorde, e di contagio infette,
Poca moneta e per lo più di rame,
Gente superba, e che si muor di fame,
Teste leggiere, e lingue maledette.

Chiese pollute di misfatti atroci,
Clero rozzo, ignorante e un popol ghitto,
Che sol si pasce di salsicce e noci.

Così trov'io in un mio l ibro scritto.
Non volgete ver me gli occhi feroci:
Questa è Modena vostra, e state zitto."

di Tassoni si ricorda una difesa d'ufficio (che non trovo in rete) e un parere poco più gentile:

"Modena è una città di Lombardia,
Che nel pantan mezza sepolta siede
Ove si suol smerdar da capo a piede
Chi s'imbatte a passar per quella via
[....]
Ha fra l'altre una cosa singolare,
Che zappando il terren nascono fonti,
Sì che per sete non si può pigliare.
Ha una torre, che pare 
Un palo capovolto, e le contrade
Corron di fango e merda a mezza estate;
 Buje  ed affumicate 
Con portici di legno in sui balestri
E catapecchie e canalette e destri;
E sui canti maestri
E ai fianchi de le porte in ogni parte
Masse di stabbio vecchio inculte e sparte;
E in un buco in disparte
Il potta suo, ch'ogni altra cosa eccede,
E tanto piccolin che non si vede"

Qualcosa di vero c'era, anche se nemmeno Madrid era poi sicura, almeno secondo Bellerofonte Castoldi:

"Il potta resterassi in un’androna
sempre fetente e piena di lordura,
da far mover a nausea ogni persona.
Dal mezzo in giù bisogna aversi cura
in Modena, e, a Madrid, dal mezzo in sù,
chè il salvarsi da’ càntari è ventura.
Ma, per modestia, non vo’ dirne più.
Tal sia di chi si sia, nè ci provvede,
chè mai questa città sì sporca fù!"

Meno male che, per l'arrivo di Stendhal, ci eravamo rimessi in bolla...

"Ho pranzato a Modena, la più pulita e gaia città italiana che io abbia visitato."

Thursday, September 5, 2013

Frontiere della sicurezza informatica, ovvero, battersi coi mulini a vento.

Questo è una lettera che ho inviato alla mia carta di credito (anonimizzata per proteggere gli innocenti). Sigh.

---
Nel mio ruolo di professionista delle tecnologie online, devo dire che mi ha molto preoccupato ricevere da Voi la comunicazione di cui sopra.

Una delle regole fondamentali dell'online banking è che la banca solo in rarissime occasioni, ma, idealmente, mai, invia messaggi di posta elettronica.
Se lo fa si tratta di messaggi che non contengono link, che idealmente sono in formato testuale, e che non discutono temi come cambio di password e cose del genere, e, in ogni caso, devono provenire da un indirizzo email verificabile e monitorato.

Questo per rendere ovvi i tentativi di phishing ed educare gli utenti ad individuare le truffe, che sono diffusissime. Di queste regole siete Voi stessi consapevoli (e cito dalla sezione consigli antifrode del Vs. sito web):

"Diffida di email che richiedono informazioni sensibili e riservate[....]
Diffida d
i link presenti nelle email; potrebbero essere “falsi” e dirottarti su siti clonati, solo apparentemente coincidenti con quello originale. Ricorda che la tua carta di credito XxxCard e la tua banca non chiederanno di collegarti al proprio sito Internet utilizzando un link contenuto in un messaggio di posta elettronica e soprattutto di rilasciare informazioni personali attraverso questo tipo di email."

La comunicazione da voi  recentemente inviatami:
  1. Contiene 2 link (uno al sito xxxcard.it e un mailto)
  2. è in html con profusione di immagini, corporate identity, etc.
  3. parla di un imminente cambio di password policy, di dove ottenere aiuto per cambiarla eccetera
  4. proviene da un indirizzo noreply.
violando tutte le regole di cui sopra.

Ho dovuto controllarla attentamente per convincermi che non fosse un fake, ma pare in effetti si tratti di una comunicazione genuina. Vi faccio notare che, la prossima volta che i Vostri clienti riceveranno una comunicazione simile, però contenente un link per cambiare password che li porta al sito i40ladroni.ru, molti la seguiranno grazie all'esempio negativo dato dal Vs. messaqggio.

Posso solo sperare di essermi sbagliato e che il messaggio fosse in effetti contraffatto. Per Vostro riferimento, riporto in calce il testo del messaggio da me ricevuto.

Per quello che riguarda il merito della comunicazione vorrei anche osservare che complicare le regole di composizione username/password è attualmente considerato assai meno efficace, oltre che oneroso in fase di supporto, che non l'uso di sistemi basati su 2-factor authentication.

Cordialmente,
Ing. Alessandro Forghieri

----
Gentile Titolare,

dal 9 settembre i sistemi di sicurezza per l’accesso all’Area Riservata del sito xxxcard.it saranno aggiornati e prevederanno l’inserimento di una UserID numerica e di una password lunga almeno 8 caratteri, contenente:

• almeno un carattere speciale (per es. &,%,$);
• almeno una lettera maiuscola;
• sia numeri che lettere.

Se la tua attuale UserID è alfanumerica e se la tua password non rispetta i criteri di sicurezza menzionati, sarai guidato dalla procedura per ottenere la tua nuova UserID numerica e per modificare la tua password.

Per qualsiasi dubbio o informazione contattaci al Numero Verde 800xxxxxxxx o scrivici all’indirizzo info@xxxcard.it.

Cordiali saluti
Servizio Clienti XxxCard

Tuesday, July 9, 2013

If I wanna search, I'll ask for it (or, disabling search engines in Fedora)

I recently upgraded my my work machine from (linux) Fedora Core 15 to Fedora Core 18 (going through FC17,, not that you asked). It was smooth enough- rather amazingly, considering the jumble my machine is.
Even sound was working without intervention at the end, and that's a major feat.

My only bone: I had to locate and disable six (yes: 6, six, sei, sechs, ses, exa) separate desktop indexing/search services which I did not ask for in the first place. Not only that, each one has its personale quirky way of being stopped. I admit I always install both gnome, kde and xfce, though I use almost exclusively kde sessions - my bad. That is not reason, in my view, to have my machine floored by six indexing daemons that manage to be more annoying than the infamous Windows Indexing Service they are trying to copy.

Every one of them gathers thousands of Google hits when coupled with "disable" as in "disable tracker". I wonder if the authors know, or care?

And here they are in their collective hideousness:


  1. tracker: disable by gnome-session-properties (I did not even know this command existed)
  2. nepomuk: kde's semantic desktop, disable through  the system settings visual app
  3. strigi: see above
  4. akonadi: see above
  5. zeitgeist: this aptly named "activity tracker" can be disabled through a custom hack or (perhaps) through gnome session
  6. jetty: not technically an indexing engine, this servlet engine(!!!) was installed as a dependency and enabled by default.
Need I say more? Sheesh.

Saturday, June 29, 2013

Radio 3, dischi d'esordio e pensieri ineleganti

Radio3, di cui sono assiduo ascoltatore, ha alcune finestre temporali grigie in cui pare che la redazione si dica "Ma, tanto, chi vuoi che ci ascolti adesso? Possiamo mandare quello che ci pare." E lo fanno - col risultato che i Sabati e le Domeniche pomeriggio s'imbottiscono di tutto quello che non si osa mandare in orari più frequentati.

Oggi ho malauguratamente acceso la radio nel corso della sussiegosa "Piazza Verdi" (che si sostituisce al Sabato pomeriggio alla - di gran lunga superiore - "Fahrenheit"). Trasmettevano quella che era con tutta evidenza una parodia musicale, probabilmente concepita dal geniaccio del duo Riondino/Bollani e mi sono detto "Ma guarda, rifanno il Dr. Djembè.". E invece no.

Si trattava di una cosa da prendere sul serio. Un tale Sig. D., forte della pubblicazione di un album d'esordio(!), si esibiva unplugged, ed ha continuato a farlo per una mezz'oretta, nel corso della quale, non contento di cantare le sue canzoni,  ha anche macellato senza pietà "Amore che vieni, amore che vai" di De Andrè, con una cover che "should never have been uncovered". A quanto pare lo stesso disco aveva goduto di un'altro siparietto la settimana prima.

Poiché "i commenti dei lettori, per SMS o sulla nostra pagina di facebook sono sempre graditi"  ho pensato di esprimermi, più o meno negli stessi termini in cui mi sono espresso qui, sulla summenzionata pagina di FB. Durata del commento prima della rimozione: 12 minuti. A quanto pare, avevo espresso una critica inutilmente offensiva, infondata ed inelegante (L'edificante scambio con la redazione è in fondo a questo post)

Continuo a chiedermi (e, privatamente, mi rispondo anche) con quali criteri vengono allocati certi spazi radiofonici. Penso che anche chi non condivide il mio giudizio sul sig. D. (che è di totale abominio) possa convenire che no stiamo parlando di una rivelazione musicale inaudita. E però, quanti musicisti effettivamente meritevoli, o anche solo intonati, sulla radio nazionale non hanno neanche 30 secondi per presentare un loro disco, primo o quinto che sia. Il Sig. D ha suonato quasi tutto il suo album, in due pomeriggi consecutivi. Che pensiero infondato, inutilmente inoffensivo ed inelegante.


Ed ecco, dalla pagina FB di Radio Verdi, uno spaccato di "processo editoriale":

Il commento cassato:
"Pensavo di aver acceso la radio durante una delle parodie  musicali del Dr. Djembè. Invece si trattava dell'album d'esordio di un tale Sig. D. e bisognava anche prenderlo sul serio. Vedi il giudicio uman, come spesso erra." 

Dopo un po (a commento cancellato)':

IO: I commenti degli ascoltatori sono benvenuti. Se positivi. Se negativi, o anche solo critici, c'è sempre la crocetta per rimuoverli. Complimenti alla redazione 2.0.


Piazza Verdi: vengono eliminati solo quelli inutilmente offensivi. I gusti musicali e teatrali del pubblico sono vari, alcune proposte possono piacere o meno ma è sempre buona cosa mantenere un certa eleganza nelle critiche e verificare prima di scrivere se le stesse siano fondate o dettate da istinto passeggero.


IO: Fondatezza verificata ad abundantiam - i gusti sono opinabili, l'intonazione è verificabile - con l'aiuto di un diapason, ove l'orecchio non basti. Ma grazie per per le gentili parole, e per aver confermato i criteri "editoriali". In sostanza, i commenti che non vi piacciono li cancellate. Lo terrò per detto.

Thursday, June 13, 2013

Building (GNU) Emacs 24.2 on Fedora Core 15, using rpm

So yes, it is possible to repackage the FC18 source rpm of emacs 24.2 for Fedora 15 - Here is how.

# yum -y install yum-utils
# yum-builddep emacs
# yum install gnutls-devel ImageMagick-devel liblockfile-devel gtk3-devel
#  wget http://mirror.datacenter.by/pub/fedoraproject.org/linux/updates/18/SRPMS/emacs-24.2-18.fc18.src.rpm
# rpm -qi  emacs-24.2-18.fc18.src.rpm
# cd ~/rpmbuild/SPECS

Now, from emacs.spec comment references to

#Patch11: emacs-bell-dont-work.patch
...
#%patch11 -p1 -b .bell-dont-work.patch

If you don't do this, the %build step will blow up thusly:

[ -r "/home/alf/rpmbuild/BUILD/emacs-24.2/src/config.in" ] || ( cd /home/alf/rpmbuild/BUILD/emacs-24.2 && autoheader )
config.status: executing gdbinit commands
./config.status: line 2113: syntax error near unexpected token `done'
./config.status: line 2113: `done # for ac_tag'
error: Bad exit status from /var/tmp/rpm-tmp.FlYxb2 (%build)



Commenting the patch is a bit crude, but all your loss (from my understanding) is some form of audible bell when emacs runs in an xterm - big deal.

Then:

# rpmbuild -ba emacs.spec


As usual, and your shiny new .rpms will be in the ../RPMS subdirs.

Friday, May 31, 2013

Una storia di dati e di economisti

C'erano una volta (2010) due economisti, Carmen Reinhart  e Kenneth Rogoff, che scrissero un articolo accademico in cui mostravano, utilizzando una serie di dati storici, che la "relazione" tra la crescita annuale del PIL (Prodotto Interno Lordo) e il rapporto (indebitamento pubblico)/PIL delle nazioni esibisce una forte nonlinearità quando il rapporto debito/PIL è superiore al 90% (nel seguito chiamerò questa nonlinearità "soglia magica").

Qualche anno dopo (2013), gli economisti  Thomas Herndon, Michael Ash e  Robert Pollin ripresero i loro dati e dopo aver trovato alcuni errori di metodo e di calcolo nella procedura alla base dell'articolo originale, conclusero che la "soglia magica", in effetti, non c'era.


Notizie simili di solito, non arrivano sullla prima pagina dei giornali italiani o del New York Times (al contrario di "'Partecipavo ai festini di Arcore' dichiara l'olgettina" che ci arriva ad nauseam) . Questa baruffa invece sì - e va ormai avanti da più di un mese. Come mai?


Se si deve credere a quanto raccontano i giornali (e non si deve quasi mai credere a quello che raccontano i giornali) Reinhart e Rogoff (che d'ora in poi chiamerò R&R) sono una lettura molto popolare tra i politici di tutti i paesi. Siccome R&R criticano i governi con indebitamento molto elvato, essi sono simultaneamente una spina nel fianco per tutti coloro (detti a volte neo Keynesiani) tenderebbero invece a favorire programmi di spesa statale per uscire da alcuni tipi di crisi economiche (inclusa quella attuale). Il famoso columnist e premio Nobel dell'economia Paul Krugman è fra questi ultimi.


Sempre se si deve credere ai giornali, il succo che i politici di tutti i paesi hanno tratto dall'articolo di R&R è "Quando il rapporto debito/PIL è superiore al 90%, la crescita diventa quasi automaticamente negativa e si assesta attorno a -0.1%" (questa interpretazione è anche finito nella proposta di budget di Paul Ryan, candidato presidenziale e astro dei neocon americani, e il numero magico 90% è stato citato da Frau Merkel). Tradotto in politica economica questo sarebbe diventato "Per tornare a crescere e uscire dalla crisi, dobbiamo tagliare le spese e abbassare il famoso rapporto sotto il 90%. E questa sarebbe una delle radici se non la radice delle politiche di austerity applicate negli ultimi anni un po' da tutte le economie avanzate del mondo.


Naturalmente la scoperta degli errori nell'articolo di R&R è stato causa di grande Schadenfreude da parte dei summenzionati new-Keynesiani che, capitanati dall'altrettanto summenzionato Krugman, sono calati come avvoltoi sulle metaforiche carcasse di R&R, invocando a gran voce il rovesciamento delle politiche di austerity ipoteticamente provocate dall'articolo. (Per completezza, dirò che l'articolo che ha scoperto gli errori di R&R giunge alla conclusione che, anche al disopra del 90%, la crescita media anno su anno si assesta su valori medi del 2.2% calanti al crescere del debito).
Il fronte opposto si è ovviamente opposto, con il conseguente pubblico sbertucciamento di accademici sulle prime pagine dei quotidiani di cui ho parlato più sopra.

Nel frattempo, chi ogni tanto pasticcia con dati e misurazioni e si prende la pena di leggere i due articoli scopre immediatamente alcuni fatti piuttosto preoccupanti.



  1. Le conclusioni dell'articolo di R&R (su sistemi complessi ed oscuri) si basano su un paio di migliaia di misurazioni di debito e PIL in una cinquantina di paesi nel corso degli ultimi 70 anni. Siccome qui non si tratta di misurare  - che so - l'indice di rifrazione del quarzo, che è piuttosto insensibile ai mutamenti storici. Tenendo anche  conto che c'è  poca certezza su attendibilità, margini di errore e così  via (si tratta di numeri politicamente piuttosto sensibili, dopo tutto) si può dire che i dati a disposizione sono pochini.

  2. I calcoli fatti da R&R per arrivare alle loro conclusioni sono molto meno complicati di quelli necessari per trovare il bosone di Higgs, diciamo che sono a livello di liceo avanzato. La base di dati e gli strumenti di calcolo (un foglio di excel) necessari a verificarli erano messi a disposizione da R&R stessi, sul lor sito web. Con tutto ciò ci sonoo voluti tre anni perchè qualcuno pensasse di controllare.

  3. Anche se i risultati non fossero stati smentiti qualcuno avrebbe dovuto osservare che, come è ben noto, correlazione e rapporto causa-effetto sono cose diverse. Ad esempio, una serie di dati può evidenziare una correlazione positiva tra consumo di gelati e quello di corrente elettrica: se i dati sono quelli misurati a Milano nel periodo Maggio-Settembre, è ragionevole pensare che il consumo di gelati sia dovuto al caldo e quello di corrente all'uso dei condizionatori - anch'esso dovuto al caldo.  Quindi non posso concludere che il consumo di gelati causa aumenti nel consumo di elettricità, o abbassare il consumo di elettrictà vietando i gelati.

  4. In vista del punto precedente prima di basare decisioni di vasta portata su correlazioni non altrimenti giustificate, sarebbe bene porsi domande aggiuntive sui possibili costi e benefici che le decisioni di cui sopra possono arrecare al di là di quelle promesse dalla famosa correlazione. Dopootutto non si fanno guerre solo perchè c'è una correlazione positiva tra certe guerre e la crescita.... oops, esempio sbagliato, mi sa che questo l'hanno già fatto.


  5. Sottolineo che i quattro punti di cui sopra esisterebbero e sarebbero molto preoccupanti anche se l'articolo di R&R avesse raggiunto conclusioni opposte, diventando così un fiore all'cchiello dei neo-Keynesiani e un pugno nell'occhio per i neocon.

    Io vorrei non credere ai giornali neanche questa volta - e infatti non ci credo.

    Purtroppo, invece di pensare che le politiche economiche vengano decise sulla base di considerazioni con basi empiriche migliori di quelle che figurano in questa storia, mi viene da pensare che le politiche economiche vengano decise sulla base di considerazioni (e interessi) largamente inconfessate e inconfessabili e poi giustificate dal punto di vista ideologico non appena i politici riescono a mettere le mani su una teoria che luspporti e che abbastanza semplice da fare sì che quasi tutti (in primis, loro stessi) riescano a capirla. E che la morale di questa storia sia  che bisogna stare bene attenti a non fornirgli le giustificazioni di cui sopra.

    Una morale secondaria è che nessuno riesce a vedere bene al di là dei propri pregiudizi. Nassim Nicholas Taleb è un osservatore economico che si è sempre distinto per le sue brucianti (e,penso, largamente giustificate) critiche all'uso improprio di metodi statistici e matematici in economia e finanza. Mi sarei quindi aspettato di sentirlo lanciare i suoi consueti strali - questa volta all'indirizzo di R&R e dei loro spreadsheet. Invece, siccome Taleb è un critico dell'indebitamento elevato (che ritiene 'fragile'), ha varie volte lavori di R&R nei propri scritti e - last but not least - ha chiarito in varie occasioni che Paul Krugman gli sta potentemente sullo stomaco, si è limitato ad osservare che sì, insomma, tanto la notizia non è la "soglia magica", ma il fatto che un elevato indebitamento non è una bella cosa ("Rejecting a macroeconomic idea (Rogoff and Reinhard) over an excel error is exactly like falsifying astrology over a computer glitch." NNT su Facebook). Chapeau.

    Wednesday, May 29, 2013

    With this type of books, (organized) atheists are now as obnoxious as their theist counterpart

    Getting acquainted with organized (U.S resident, I might add) so called new atheism has made much to persuade me that, whatever I am (an agnostic, in all likelihood), a new atheist I am not.

    The obnoxious righteousness of the "movement" has much to do with this, and I plan to blog about it in the future. The attending fanboyism I also find poisonous.

    To this, they are now adding this brand of proselytizing literature. (Maybe it was already there and I just wasn't looking).

    I'm not going to say that I consider it on par with Chick's tracts (go ahead, savor of the madness), but to tell the truth, the idea of being woken up on Sunday morning by a Dawkins' witness offering informative atheist literature does not amuse me. Unlikely, maybe, but still...

    Friday, April 12, 2013

    So why would sendmail use IP over MX?

    And so it goes that I spent most of the morning investigating  a pesky mail delivery problem which sort of goes as follows:

    Running sendmail-8.13.8-8.1.el5_7 on CentOS5, with virtusertable and virtuser-domains. We (ourown.it) are handling mail for the domain customer.it:


      # dig ANY customer.it
       ...
      ;; ANSWER SECTION:
      customer.it.            9136    IN      NS      ns02.provider.com.
      customer.it.            9136    IN      NS      ns01.provider.com.
      customer.it.            31610   IN      MX      20 rigel.ourown.it.
      customer.it.            31610   IN      MX      10 alpha.ourown.it.
      customer.it.            3535    IN      A       10.213.221.92
      
      ;; AUTHORITY SECTION:
      customer.it.            9136    IN      NS      ns01.provider.com.
      customer.it.            9136    IN      NS      ns02.provider.com.
      
      ;; ADDITIONAL SECTION:
      ns01.provider.com.      3535    IN      A       10.227.46.9
      ns02.provider.com.      3535    IN      A       10.175.38.200
      alpha.ourown.it.                86400   IN      A       10.111.444.5
      rigel.ourown.it.                86400   IN      A       10.111.444.10

    Customer.it is in virtuser-domains (so it *SHOULD* be recognized as local) but NOT in local-host-names (for long winded reasons I would rather avoid using local-host-names for this ). My expectation is that email should get to the highest MX (alpha) and be delivered there. What actually happens is that email sent to customer.it is queued up on alpha (even when it is sent form alpha itself) and delivery is attempted at the HOST customer.it (where no mail server is listed). This is what I see:
    
    
    
    
      #sendmail  -d17.99 -q -v -qRevit                                                 Running /var/spool/mqueue/r3C89pgp020280 (sequence 1 of 2)                     
      hostsignature(customer.it.)                                                    
      mxrand(rigel.ourown.it) = 148
      hostsignature(): getmxrr() returned 1, mxhosts[0]=customer.it.                   hostsignature(customer.it.) = evi... Deferred: Connection timed out with customer.it.
    customer.it.                                                                    ... Connecting to customer.it. via esmtp...                                                                                   
    MXs are correctly found:
    
    
    
    
      # echo "/mx customer.it" | sendmail -bt -d8.20
      
      ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
      Enter  
    > getmxrr(customer.it, droplocalhost=0) found localhost (alpha.ourown.it) in MX list, pref=10 getmxrr(customer.it) returns 2 value(s): alpha.ourown.it. rigel.ourown.it.

    I have many other domains thusly configured and working the crucial difference being that the IP for the domain is either not set or points to alpha.ourown.it. Address test outlines a difference:
    
    
      # sendmail -bt -d8.20
      ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
      Enter  
    > 0 aguy@customer.it parse input: aguy @ customer . it Parse0 input: aguy @ customer . it Parse0 returns: aguy @ customer . it ParseLocal input: aguy @ customer . it ParseLocal returns: aguy @ customer . it Parse1 input: aguy @ customer . it Parse1 returns: $# local $: aguy @ customer . it parse returns: $# local $: aguy @ customer . it > 0 alf@ourown.it parse input: alf @ ourown . it Parse0 input: alf @ ourown . it Parse0 returns: alf @ ourown . it ParseLocal input: alf @ ourown . it ParseLocal returns: alf @ ourown . it Parse1 input: alf @ ourown . it Parse1 returns: $# local $: alf @ ourown . it parse returns: $# local $: alf @ ourown . it

    But its meaning is lost on me.

    And then it struck me: the addresses that were being queued did not locally exist (it was someguy@customer.it rather than aguy@customer.it).

    What happens is that sendmail, upon realizing that local delivery is not possible for the address at hand, "helpfully" tries the IP address as last resort. If that bugs you, as it bugs me, insert the line:

    @customer.it               error:nouser 550 No such user here

    in virtusertable, after all other customer.it records.

    The strange world of SELinux and webmin

    I am willing to share a few more sysdamin pains today, for the BDSM oriented people who enjoy suffering.

    I am testing webmin on a CentOS 6.3 machine today. Purpose: creating a restricted web-paneled environmente where a basically skilled admin can add users, mailboxes, aliases and so on  without hosing the system or opening mile-wide holes into it. It does look doable so far except....

    I want mail delivery done in Maildir-style folders under the user homedir. Procmail is the perfect tool for this, given the following /etc/procmailrc:


    LOGFILE=/var/log/proc_log
    DEFAULT=$HOME/mail/
    
    
    
    
    
    (Hint: the trainling slash does the trick).

    Enters webmin, breakage begins.  A webmin-added user, balf, cannot have mail properly delivered, while a adduser-added user alf, can. Ostensible reason being that, in the first instance, procmail is incapable of creating the mail/ directory. The logfile trace is self-explanatory as usual:


    procmail: Unable to treat as directory "/home/balf/mail"
    procmail: Locking "/home/balf/mail.lock"
    procmail: Error while writing to "/home/balf/_D3D.N35ZRB.localhost.localdo"
    procmail: Lock failure on "/home/balf/mail.lock"
    procmail: Assigning "LASTFOLDER=/home/balf/mail/"
    procmail: Opening "/home/balf/mail/"
    procmail: Error while writing to "/home/balf/mail"
    procmail: Assigning "LASTFOLDER=/var/spool/mail/balf"
    procmail: Opening "/var/spool/mail/balf"
    procmail: Acquiring kernel-lock
    
    
    
    
    Uh?
    
    Google brings no joy other than the usual check permissions and stuff. Which I did. The gut instinct reaction (manually creating the mail directory) just pushes the problem deeper. Some work succeds in making the users exactly the same (same permissions, on home dirs, same group, same passwd and shadow entries, same files in the home dir. So it must be something with permissions, which means....SELinux. Which I usually turn off - but forgot on this time. 'ls -Z' verifies that the homedirs of the users have indeed different context:

     # ls -Z drwx------. alf mailusers unconfined_u:object_r:user_home_dir_t:s0 alf drwx------. balf mailusers unconfined_u:object_r:home_root_t:s0 balf

    So, at this point you turn off SELinux, and all is well (put SELINUX=disabled in /etc/sysconfig/selinux).

    Thursday, March 28, 2013

    On #donglegate, Adria Richards and disingenuous commentators


    If you are even remotely involved in net.software, you have by now heard about Adria Richards, "donglegate" and the fallout of  what happened at PyCon. If not, you may read ArsTechnica's account , an almost legal opinion  here, and see a feisty, but funny, video here. I am also appending my TLDR summary of the story at the bottom of this post.

    You should also know that:
    1) I do not in the least condone the assorted rape and death threats that Ms. Richards has been the target of;
    2) I also find unacceptable the privacy invasion she saw fit  to commit;
    3) I think she is (partly) responsible for the developer's dismissal;
    4) I think she was rightly dismissed for doxxing people;
    5) I think that she is an embodiment of American puritanism at its worst, straight out of Hawthorne's novels.

    The reason I am writing this (apart from getting it out of my system and turn to more productive thoughts) is an emerging trend about commentators.

    Which is, writing a "fair and balanced" piece which starts by sort-of-acknowledging that

    'yeah, in the beginning she may have been a little exuberant  but hey, look at the horrific - (and they truly are) - threats that she was in the end made a target of. That means that she was right, and if you dare be among their critics you are also a supporter of the rape-and-death-threat-extenders. And let's not get into all that pamby-namby stuf about privacy and public shaming, because it is bullshit  - "Red herring" or "ill defined" are the preferred terms -. Let us discuss instead the horrific blah sexist tech community blah blah please more page views blah thanks blah.'

    Anybody sees a problem here? Because I do. Single sidedness aside, I mean.

    The tech community has very heavily (with tweets, comments and likes) weighed in Ms. Richards'actions disfavor - with many women taking this position. No sane, reasonable post I read about this had anything favorable about the net.frenzy that ensued.

    But the above commentators (no, I am not linking them, but they are easily found one is on the Guardian site) are conflating Ms. Richards actions and their aftermath with the death threats, using the latter to cast a favorable light on the former. Intellectually speaking, that sucks.

    Which brings me to the third reason to write this which is urging anybody reading this (yes, all the three of you) and agrees with my views, to continue to actively defend them online and to avoid that this type of comments become the accepted wisdom on the episode and define what the response of the tech community should be.

    Because if they do, it brings us a step closer to an Orwellian world where privacy and freedom of expression will be restricted to places not within remote earshot of an activist with a smartphone and an axe to grind. And that, also, sucks.

    As for programming languages: you may want to stick to perl - its conferences are a saner environment :-)


    Quick summary of the pycon incident


    1) At the PyCon conference, Ms. Richards overhears (some would say "eavesdrops on" but I am willing to assume loudness on the part of the other involved parties) a *private* conversation during which juvenile jokes were being exchanged; (Jokes about big dongles, if you wanna know, as in - "Sure that guy has a bigger dongle than some other guy")

    2) She tweets about it, *to a sizeable audience* and *with pictures* of the perceived abusers, taken *without permission* calling for a reprimend. Many would say this is as close to doxxing as it gets, and I would have to agree - I doubt anybody would disagree on the privacy invasion that Ms. Richards committed.

    2a) The PyCon staff identifies the developers and tells them to stop  - which they do.

    3) Ms. Richards writes a blog entry grandstanding on the heroic ("I know, you don't have to be a hero all the time") feat she performed for the greater good of the community ("The future of women in tech was on the line, and I acted" - no less)

    3a) One of the pictured parties is fired (it'd be interesting - and not meaningless - to know the time ordering of 3) and 3a)

    4) Ms. Richards is doxxed by some moron and (unforgivable) net.insanity ensues.

    5) Ms. Richards is also fired, which -as an entrepreneur - I find is a reasonable course of action to take whenever blatant doxxing and privacy invasion are performed.

    If the privacy issue seems of little import, here is some more food for thought: the smirking, bearded guys in the forefront of the by-now-famous pictures *are not* the dick jokers. I read elsewhere that common wisdom is that the person Ms. Richards took issue with is another developer in the background. So, while defending the future of woman in tech, Ms. Richards smeared a couple of innocent bystanders. I'm sure somebody will say that that is irrelevant, or even, justified collateral damage.




    Wednesday, March 27, 2013

    Turning off opportunistic client TLS in sendmail

    It appears that sendmail, during mail delivery, tries TLS if the receiving server offers it. Fair enough, I can perhaps send over an encrypted channel, so I am going to try. Sounds harmless, right? Wrong.

    See the follwoing SMTP dialog:

    
    ... Connecting to mail.snafu.com. via esmtp...
    220 mhnicosi-unix.fubar.it ESMTP
    >>> EHLO mx1.example.it
    250-mhnicosi-unix.fubar.it
    250-AUTH=LOGIN CRAM-MD5 PLAIN
    250-AUTH LOGIN CRAM-MD5 PLAIN
    250-STARTTLS
    250-PIPELINING
    250 8BITMIME
    
    >>>; STARTTLS
    220 2.0.0 Ready to start TLS
    EHLO mx1.example.it
    ... Deferred: Connection reset by mail.snafu.com.
    Closing connection to mail.snafu.com.
     
    See the problem here? The receiving server shuts down the connection - possibly because it's not prepared to negotiate TLS with our server, sendmail queues the message and, on the next delivery, will go through the same motions in perpetuum.

    I got the solution from this post of Mike Berggren. Basically, either stick

    • Try_TLS: No 
    (global) or
    • Try_TLS:[host designation] NO
    (per host) in /etc/mail/access.
    Mike points out that adding the M=S flag to the CLIENT_OPTIONS macro in sendmail.mc has the same (global)) effect:

    • CLIENT_OPTIONS(`Family=inet, M=S, Addr=1.2.3.4’)dnl
    I did not try that though, as the first solution warks well enough, and my sendmail.mc does not use the client_options macro anyway.

    Sunday, March 17, 2013

    I misteriosi misteri di Modena

    Cara Gazzetta di Modena:

    Volevo ringraziarti per la nuova, geniale rubrica umoristico-satirica
    intitolata "i misteri di Modena". All'inizio avevo pensato si trattasse di una colonna seria, ed ero un po' perplesso (ad esempio perché mi pare che poche città - come dice anche mia moglie, che è di Roma - possano essere meno misteriose di Modena).

    Solo nel corso della lettura mi sono reso conto della vera natura dell'articolo. E anche questo presentarsi come rubrica seria, in fondo, fa parte della geniale vis comica dell'autore.

    E' solo osservando attentamente come il fondamentale disprezzo per le regole della composizione e della sintassi italiana (che a tratti coinvolge l'ortografia) diventi gradualmente assenza di logica che si possono apprezzare le vere e proprie perle umoristiche che l'autore ha disseminato in questi godibilissimi articoli.

    Mi riferisco a frasi come:

    (http://gazzettadimodena.gelocal.it/cronaca/2013/03/03/news/scarpa-professore-tiranno-o-scienziato-illuminato-1.6633821)
    "Nato nel 1752 a Lorenzaga, paese vicino a Venezia, ha conosciuto Napoleone e divenne amico di Alessandro Volta. Culmina la sua carriera all'Università di Modena nel 1772."

    dove il supremo, farsesco disprezzo della consecutio temporum si coniuga alla costruzione di "culminare" come verbo transitivo (io ti culmino, o carriera);

    Oppure: "Ma qual era lo scopo del teatro anatomico voluto da Scarpa proprio a Modena? Lo scopo era quello di effettuare, davanti ai propri studenti, dissezioni sui corpi di cadaveri, per studiare gli organi umani e le funzioni vitali, tanto che diverse parti del corpo umano prendono il nome dato da Scarpa." dove una brillante tautologia (il teatro anatomico che serve a studiare gli organi umani:ohibò, chi l'avrebbe immaginato?) si uniscono buffe costruzioni (corpi di cadaveri dove chiunque scriverebbe cadaveri) ;

    (http://gazzettadimodena.gelocal.it/cronaca/2013/03/10/news/villanova-nella-chiesa-dove-si-cacciano-i-demoni-1.6668450)
    O anche "A fianco della normale attività religiosa al servizio della comunità di Villanova, il primo parroco, Don Goffredo Polacchini, fino al 1971 esorcista incaricato della Curia modenese, svolgeva anche le pratiche per sconfiggere le possessioni.....Ma sul perché Villanova fosse diventata il punto in cui il bene sconfiggeva il male, anche questo è avvolto dal mistero. Il freddo e la leggera foschia scendono sul campanile della Chiesa, mentre le storie di diavoli si perdono per le campagne, tra casolari e campi della pianura.", dove si sceglie di ignorare che, visto che il parroco di Villanova era anche esorcista, il mistero non c'è, e che le storie di diavoli sono davvero perse, visto che l'articolo non ne contiene alcuna. Per tacere della irresistibile parodia della retorica misterica che ispira la chiusa dell'articolo. Quasi ci si perde l'ulteriore sfregio alla grammatica (“Ma sul perché...anche questo è avvolto dal mistero”)

    Il pezzo di Domenica 17/03, poi, sulla Chiesa di S. Domenico, è un vero gioiello:

    "Un altro (mistero. ndr) riguarda i misteriosi tunnel sotterranei, e qui la storia si infittisce nei secoli, per tornare al 1243" (Bella la storia che si infittisce quasi fosse semolino.);

    "Lo scopo era quello di mettersi al riparo da attacchi nemici al Ducato, ma anche per andare o uscire dalla città per diversi motivi come [...] commesse segrete nelle ore notturne" (Raffinato il passaggio da "scopo di" a "scopo per"; arguto il finto contrario "andare o uscire", enigmatiche le commesse segrete - forse sono le impiegate dei negozi del centro?)

    Ma davvero non è possibile elencare il delirio di strafalcioni, anacoluti, antinomie e assenza di generale buon senso che, presentandosi quasi ad ogni frase, rendono questi articoli degni degli indimenticati fratelli de Rege.
    Mi permetto solo un suggerimento: spostate la collocazione della rubrica in fondo al giornale in modo che anche i meno avveduti possano coglierne la funzione umoristica. Magari al posto di quella triste rubrica chiamata "Figadein", che - abbastanza inspiegabilmente - immalinconisce periodicamente la lettura del giornale. A proposito: qual è la sua funzione? E' un po' che me lo chiedo: questo sì, che è uno dei misteri di Modena.

    Tuesday, March 5, 2013

    On disappointment - Nassim Nicholas Taleb



    I have - in the past - been greatly enthralled by an author called Nassim Nicholas Taleb and by his writings (he wrote a book called "The Black Swan", among others) and ended up having a very high opinion of him. Then, rather uncharacteristically for myself, I joined his FB page.

    That was just the cure I needed to remind me about separating fact from fiction and expectations from reality when it comes to humans. While it was obvious - from his writings - that the man has vaste personality problems, I had somehow conceived the idea that shared intellectual values would overcompensate for that. Wrong.

    Taleb - the internet person at least - appears to enjoy the totally acritical adulation of a crowd of fanboys that practically swoon on his every utterance (if I were him, I could hardly resist to write now and then things like "Pass the salt"  or "Basketball shoes are really comfortable" and watch the waves. That possibly explains my shortage of fanboys).

    Apparently endowed of a very short fuse, he proves to be very intolerant of differing opinions and absolutely incapable of acknowledging any misstep in his thinking. And, he makes several. In one recent post he absurdly likened the Roman Empire to the Sicilian Mafia - showing extreme poor understanding of both. Confronted by the annoyed reaction of some followers, he proceeded to:

    1) refuse to admit he had written a piece of nonsense
    2) restate it several times without further explanation, in the apparent attempt to test the temper of his opponents, while also calling them "rude". ("This is not an argument, it's contradiction" "No it isn't" "Yes it is" ""No it isn't" - Monty Python)
    3) avail himself of a lifeline thrown to him by one of his supporters in a "My point exactly" sort of way. Too bad its point had been entirely different, not to mention hard to fathom. In any event it appeared to be a - rather childish, coming fron an ethnical Greek -  attempt to establish the moral superiority of ancient Greeks on ancient Romans.
    4) proceeded to unfriend the opponents and expunge their rude (i.e. disagreeing) comments from the thread. ("I had chip on my shoulder, kid, and you just knocked it down")


    The last straw - as far as I am concerned - is this amazingly hypocritical piece of prose, which I append for the comfort of any purely hypothetical reader (hi, Nassim!) and as a prevention against acts of the Ministry of Truth (cue Orwell):

    "Friends, I need some help correcting a distortion.
    When you "call a fraud a fraud" (that is the members of that 1% that-cause-harm-without-skin-in-the-game) the strategy has been to turn your message into its exact opposite, something misanthropic ("if he hates me, an economist-journalist-fragilista-modernity advocate, it means he hates everybody"). Or "if he hates modernity, he is a haughty elitist" (the exact opposite of the true message that holds the nobility & independence of "those who make a living stanfing up or lying down".)
    The corruption of the message has been largely controlled with "one of my books' title". But people are still doing it with "another of my books' title".
    So I would welcome some contribution to the comments to dispel the cognitive dissonance there. Thanks!"

    In which Nassim asks his followers to  provide favorable reviews on Amazon for his books, with tasteful code words ("distortion","cognitive dissonance"). His lovers followed quickly suit, stuffing the Amazon page as required - with nary a lone dissenting voice, this time. My reaction was to go to the page and write my actual opinion on the book in question - which is, that I didn't like it very much , and considered it vastly inferior to his other books (which I have favorably reviewed in several occasions). That did of course get me unfriended in a nanosecond - what a surprise. (No, it did not hurt at all, but thank you anyway)

    And this makes it for me. Although someone might considered this pettiness a minor sin, I see it  as a capital flaw coming from someone that regularly displays an amazing high handedness on subjects such as ethics, wisdom, intellectual integrity. In fact I find it destroys just about every single non technical bit in his books, which I will find quite hard to reccommend henceforth. It also validates a great deal of what his harshest critics tell of him, but that's a different story.

    Well, 'sic transit gloria mundi', I guess.

    Monday, February 25, 2013

    Antique Iron

    An IBM 029 keypunch

    This is a picture of a keypunch akin to the one I typed my first lines of codes on:













          PROGRAM SOMMA
    C
    C Calcola la somma di due
    C numeri e stampa il 
    C risultato 
    C

          INTEGER A,B,SOMMA
          A=1
          B=3
          SOMMA=A+B
                PRINT(6,100),A,B,SOMMA
                STOP
     100      FORMAT(I4,1H+,I4,1H=,I4)

    That' FORTRAN 66, Bay bee.

    Friday, February 22, 2013

    The twisted. The perverse. The developer.

    Say you are running an android emulator for development reason and you want to copy some text to the (emulated) screen. That would be a CTRL+V on most platforms/applications.

    But we developers have better ways, just:

    # telnet localhost 5554
    sms send 123123123 The text you want to copy
    quit

    You send an SMS to the phone, then in the emulator, open the message, copy the text, and paste wherever you want. Get it? Ain't that just beautiful?

    This is the brain of developers laid bare for your wonderment. I kid  you not.

    P.s: hats off to Stack Overflow for the tip
     

    Thursday, January 24, 2013

    Custom column names on Django ManyToMany fields.


    Adapting Django  to legacy databases requires you to control table and column names.

    manage.py inspectdb does a nice enough job of it (but beware of missing to_field on ForeignKey relationshiops when not linking to the primary key). 

    ManyToMany fields, however, are left in the cold. Table name can be set with db_table=, but there is no (documented) hook to influence column names. Finer control can be achieved through the relatively new 'through' argument: that, however, kinda ruins many of the ORM language and of the admin application capabilities.

    I googled myself blind and visited a few blind alleys. Postgres, for instance, does not have updatable views, or one could use a view to sort of rename columns - without actually doing it - thus appeasing django's engine; updatable views could be emulated with a CREATE RULE, but I decided against going there.

    I dived in django code - the related.py and construction.py files - not pretty .I will heretofore direct to those files anyone extolling to me the clarity of python coding.

    I eventually came across a Django Snippet that the author appears to have  retracted, but that the internet wayback machine still preserves. It did still require a modification, but I finally came up with:

    
    
    
    
    from django.db import models
    
    
    
    class CustomManyToManyField(models.ManyToManyField):
    
        def __init__(self, *args, **kwargs):
    
            source = kwargs.pop('source_db_column', None)
    
            reverse = kwargs.pop('reverse_db_column', None)
    
            if source is not None:
    
                self._m2m_column_cache = source
    
            if reverse is not None:
    
                self._m2m_reverse_column_cache = reverse
    
            super(CustomManyToManyField, self).__init__(*args, **kwargs)
    
    
    # later.... class TipoCommesse(models.Model):     id          = models.IntegerField(primary_key=True)     descrizione = models.TextField() # This field type is a guess.     tipo_fasi   = CustomManyToManyField('TipoFasi',db_table='t_fasi4t_commessa',source_db_column='id_tipo_com',reverse_db_column='id_tipo_fase')     def __unicode__(self): return self.descrizione     class Meta:         managed =  False         db_table = u'tipo_commesse'         verbose_name_plural='TipiCommesse'
    Note the managed = False line in the Meta inner class indicating that syncdb & Co. need not alter the database for this type. Besides being a sane precaution to set on everything when dealing with legacy DBs, it is doubly necessary here because finding out how to persuade Django to honor the column specifications when actually creating the tables proved to be beyond my ability - that's the above mentioned - and by now infamous - construction.py file. The effect is that (as can be seen with manage.py sql, with manage=True) Django would still generate columns of the form re11rel2_id even for the custom m2m field.




    Also note that this trick is fragile: it depends on django actually using the 'column' and 'reverse_column' names when currying the attribute accessor (don't ask). This has already been broken once in the past.


    Finally, a big 'Thank You' to Quentin Tarantino for making Django searches a more interesting experience with his "Django Unchained" release ;-)