Colazione da HAL 9000

Butta la pasta, HAL.
Butta la pasta, HAL.

A causa del mio lavoro, mi è stato più volte chiesto di esprimere un parere sul tema intelligenza artificiale che si ribella al creatore (con annessi stermini e schiavitù dell’umanità), questione tanto cara alla fantascienza.
Il tema è saltato fuori nuovamente proprio poco tempo fa, così ho avuto l’occasione per scrivere quello che penso a riguardo in modo un po’ più organico.

L’intelligenza artificiale (da ora in poi, AI)  è, da mia personalissima definizione, un insieme di tecniche e tecnologie che permettono la standardizzazione e l’industrializzazione del pensiero in modo da renderlo un bene fungibile, da produrre tramite una serie di macchine.

Я твой слуга, я твой работник
Я твой слуга, я твой работник

Per scrivere del software che fa AI servono specifiche precise, criteri di produttività ben definiti. Più che di creazione di pseudo-individualità sintetiche, stiamo parlando di rivoluzione industriale del pensiero, ovvero possibilità di utilizzare delle macchine del pensiero (leve, torchi idraulici… catene di montaggio) che con una supervisione ed una manutenzione umana possano fornire output predicibili a problemi che prima richiedevano del pensiero artigianale, manuale, non riproducibile in serie.

Faccio un esempio per chiarire l’analogia con l’industria che tutti conosciamo:  se la macchina leva è la soluzione meccanica al problema

Come posso sollevare un carico che pensa troppo per le mie braccia?

la macchina TensorFlow con TOT TPU per TOT tempo è la soluzione AI al problema

Come posso disporre i mobili in ufficio per massimizzare funzionalità e impatto estetico?

Una delle caratteristiche del cervello umano che lo differenziano fondamentalmente da quello di tutti gli altri animali, è la capacità molto vasta e strutturata di creare utensili, o macchine nel senso più generale del termine, per aumentare artificialmente la propria capacità di compiere lavoro e adattarsi al mondo.

Queste macchine, se vengono utilizzate spesso e in modo pervasivo, modificano le modalità di funzionamento del cervello umano, creando un uomo fondamentalmente diverso da quello che non le utilizza: sopratutto, dal punto di vista dello sviluppo cognitivo e della percezione del mondo. Ricordate quanto grande vi sembrava il vostro quartiere, prima di avere l’automobile?

L’AI della quale si parla oggi, non è che uno dei primi esempi di produzione di un utensile che moltiplica la capacità di effettuare operazioni intellettuali dell’uomo.

Non stiamo invece dicendo nulla che riguardi una ipotetica individualità artificiale, sempre ammesso che qualcuno sia in grado di definire cosa sia l’individuo, formalizzarlo, tradurlo in codice.

Da diversi studi sulla deprivazione sensoriale e sui pazienti locked-in, sembra che buona parte del funzionamento del cervello umano consista nel fare da filtro per stimoli esogeni ed endogeni, mediati o meno dagli organi di senso, dando come output… il nostro comportamento. Esiste la possibilità che la gran parte di quella che potremmo definire individualità sia conseguenza non della nostra genetica (che potremmo un po’ paragonare al software della nostra AI), ma piuttosto di questo continuo filtrare ed elaborare gli stimoli ricevuti, mediati da diversi tipi di hardware.

Il tassello che manca alle macchine odierne, è in sostanza la capacità di interagire e ricevere feedback complessi dall’ambiente.

Sto facendo bene? Sto facendo male? Questo aiuta a conservarmi meglio, o porta alla mia distruzione?

Siamo arrivati a degli ottimi risultati nello strutturare la parte di mero calcolo di una mente simile alla nostra (pensate al riconoscimento di pattern, ad esempio); quello che manca per arrivare a costruire degli individui, è possibile che lo si debba cercare altrove: nelle mani, nella pelle, negli occhi.

In conclusione, la singolarità che prende coscienza in stile Terminator è (per il momento) un tema da relegare alla letteratura fantascientifica, di cui si riempie la bocca spesso chi di TensorFlow/Spark/Torch non ha mai scritto una riga… fino a quando non avremo robot con un hardware/software adatto a percepire il mondo quasi come noi.

And justice for all.
And justice for all.

C’è anche da chiedersi quale ente vorrebbe comprare una roba che fra le opzioni include “potrebbe distruggere il mondo”, e quale CEO approverebbe il suo acquisto.

In leasing, ovviamente.

 

 

LXD with Linux bridges in a VMware environment – the right way

When using LXD containers in a VMware VM, you might want to toss away the default NAT configuration and switch to a more useful setup with bridges attached to the containers.

Unfortunately, this config does not works by default because the vSwitch is blocking all the network traffic coming from other MAC addresses than the ones of the vNICs assigned to the VM.
There is a known workaround that involve configuring the vSwitch in promiscuous mode, but apart from being a security issue, it seems like it won’t works well in some scenarios.

Do we have to abandon the dream of having VMs directly exposed to the external network? No way! The solution is as abandon the bridged mode and use vNIC directly assigned to the container.

Yes, I know it sounds weird, but LXD containers are usually deployed for thick-containers, pet-style scenarios… and, if you are skilled enough, you can always automate vNIC attach/detach and container creation/destruction.
Attaching the network interface to the container is trivial:

lxc config device add $ContainerName eth0 nic nictype=physical parent=$vNIC name=eth0

Have fun!

How to make the Latitude 7490 trackpoint enjoyable in Linux

Everybody knows about the fantastic Thinkpad trackpoint feeling, but what about the Dell one? Well, the hardware is now quite good apart from the nub cap. But the software, as with any trackpoint in Linux, is still lackluster. For example, in Linux you don’t get the middle-button scrolling by default, arguably one of the most useful feature of a trackpoint.

The nub

Disclaimer

Those suggestions only works with X11, I don’t know how to tweak this settings with Wayland. Let me know if you find a way to make it works with the new framework.

So, let’s fix it!

In Linux, you can control input devices mainly with two different tools: evdev and libinput.

  • evdev: generic input interface in the kernel, that old guy;
  • libinput: the new shiny stuff that technically sit on top of the evdev interface. It’s the only way to go with Wayland.

While libinput is the default and what should be used today, as every new project it does not support every feature of evdev, E.G. our beloved middle button scrolling; it should come soon some in one of the next releases, but it’s still not there. So, we will revert back to evdev about the trackpoint handling, for now.

In order to do that, we need to create /etc/X11/xorg.conf.d/10-trackpoint.conf . The file name is not important apart for the initial NN- part.

Reboot your machine, and everything should work. I’ve tested this configuration with kernel > 4.12, but I think it should work with older version without issues.

Addition tweaks

Some evdev input options, as far as I know, aren’t directly accessible via the Xorg configuration files, but you can use it via the mighty xinput. For a list of supported devices:

Be careful with devices IDs, they vary wildly between reboots. If you want to script something, always filter the devices by name. For example, we can list the tunable properties of our trackpoint.

One of the few stuff missing is the “Device Accel Constant Deceleration”, AKA the pointer sensitivity. Oh, and the horizontal scrolling. You can adjust them with a pair of commands.

I think that’s all for now, I hope that the Wayland-libinput support will be ready soon… feel free to tell me when this mini-tutorial will became obsolete, and enjoy your Latitude!

 

Salotti buoni e schede perforate: lo Zip War Airganon SVG4, parte seconda. O, anche, perché la piattaforma di voto online del M5S è tecnicamente una buffonata.

Avvertimento: questo è un post TECNICO ed ha ZERO contenuto “partitico”. Avrei potuto scrivere allo stesso modo del caso AnonPlus che ha riguardato il PD o del gruppo LulzSecITA che ha preso di mira la Lega.

Mentre scrivo (2018-05-18, 18:30), il portale del sistema di voto elettronico del M5S Rousseau è sotto attacco da ore. Questo attacco ha causato un Denial-of-Service, cioè l’impossibilità di utilizzo del servizio da parte di diversi utenti; ho fatto alcuni tentativi di accesso da diverse località geografiche, tutti falliti.

Immaginate di avere dei criminali che blocchino l’accesso ai seggi elettorali della vostra zona, e nessuna polizia disponibile…

Ma, andiamo con ordine: cosa è lo Zip War Airganon SVG4?

Non ridete. Non subito. Secondo Beppe Grillo, era un software (o algoritmo, non è chiaro) che avrebbe consentito il controllo e successivo sequestro dei beni di politici& co. incrociando estratti conto ed altri dati economici di vario genere; trovate dettagli e buzzword qui. In sostanza, qualcosa di simile ad un batch antifrode bancario, con un accesso magicamente illimitato ad una serie di dati riservati.

Di Agiorgio - Opera propria, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=36246968
Loro hanno i vostri soldi. Meno male che l’EBCDIC c’è.

Tralasciando i tecnicismi e l’assurdità della maggior parte dei dettagli, il problema più grande è che quella volta (assumendo la sua completa buona fede nelle affermazioni del video) il comico genovese era stato evidentemente beffato da chissà quale venditore di fumo, non avendo le competenze tecniche e l’esperienza per distinguere una supercazzola da un prodotto che fa quello per cui viene venduto.

Cosa è successo allora?

Grillo, che di mestiere fa il comico, è stato malconsigliato, rimediando una magra figura.

Cosa è cambiato negli ultimi due anni?

Il M5S e la Casaleggio Associati, i cui componenti fanno rispettivamente i politici ed i pubblicitari, sono stati malconsigliati, rimediando una magra figura.

Nel 2016 è stato messo online Rousseau, piattaforma (a cui il sito del M5S si riferisce erroneamente come “sistema operativo“) di voto online basata su un CMS parzialmente proprietario.

Fin dal suo debutto, il sistema è stato oggetto di attacchi hacker andati a buon fine, dei quali potete trovare facilmente notizia online, culminati nell’agosto del 2017 nel furto di dati personali degli utenti da parte di un hacker (più o meno) white hat noto come rogue0.

In particolare, come si può leggere in una nota del garante della privacy, sono state evidenziate una serie di problematiche, che vi riassumo:

  • Per il CMS utilizzato si parla di una “indiscutibile obsolescenza tecnica“, dato che questo era andato in EoL già a fine 2013, con tutte le falle di sicurezza a contorno tipiche di un prodotto non più aggiornato;
  •  Lo sviluppo del software non utilizzava metodologie moderne (e previste dalla legge per software di questo genere) che garantissero “Data protection by design“, come da regolamento UE che trovate nella nota;
  • Possibilità di ricondurre il voto al votante in qualsiasi momento, così come ai suoi dati personali;
  • Assenza di logs dell’operato del software, nessuna possibilità di auditing, amministratori del software onnipotenti. Ovvero, la domanda “chi ha fatto cosa sul sistema?” non può avere risposta.
Dove sono i dati?

Nella nota del garante possiamo leggere che questo è stato demandato a Wind/Tre SPA: mi chiedo se sia possibile fare dell’auditing da più parti su questa piattaforma.

Spero inoltre che i dati siano criptati at-rest, oppure basterebbe chiedere un dump dell’istanza ad un tecnico per avere libero accesso a qualsiasi cosa. Da che tipo di accordo di riservatezza sono legati la società di hosting ed il fruitore del servizio? Garanzie in caso di fuga di dati dovuti a problemi dell’infrastruttura? Chi si occupa del backup? Il backup è criptato? Dove si trova?

E ancora, quali certificazioni di sicurezza ha ottenuto il datacenter e in generale l’infrastruttura di hosting (a parte il fatto che personalmente non darei mai in outsourcing una cosa così critica)? Qual è la catena di custodia delle credenziali?

Airman 1st Class Nick Fazio, with the Network Operations, verifies the status and configuration of the 96th Communications Squadron’s data center equipment at Eglin Air Force Base, Fla., June 9. Approximately 40 Airmen and civilians are responsible for the connectivity of the base’s more than 19,500 user workcenters on base. Their contributions combined with the other branches and flights led to the 96th CS earning the 2013 Maj. Gen. Harold McClelland best large communications work center award for Air Force Materiel Command. (U.S. Air Force photo/Samuel King Jr.)

Non sono riuscito a trovare alcun dettaglio online.

Disponibilità dell’infrastruttura

Il servizio dovrebbe girare su più istanze che garantisco alta disponibilità, ed essere dotato di autoscaling per sopperire a i picchi di traffico, oltre ad essere ridondato su più datacenter. Tornando al punto delle prime righe dell’articolo, non posso considerare una votazione significativa se è possibile impedire a qualcuno di votare, o non si rispettano gli orari previsti.

Purtroppo è quello che sta succedendo proprio in queste ore, dato che il sito continua ad essere down (siamo quasi ad otto ore) e non è possibile votare in alcun modo: un attacco che rende impossibile l’accesso al sito, è proprio la manifestazione che vi impedisce di entrare nel seggio.

Precisione, integrità del dato, privacy del dato, “auditability”

Chiediamocelo: esiste una procedura ben formalizzata, ripetibile e controllata per lo svolgimento della votazione e l’estrazione del risultato? Chi si occupa di tradurre il dato raccolto in un annuncio effettivo del risultato?

By Original uploader was Joebeone at en.wikipedia - Transferred from en.wikipedia, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=4203422
E-voting, per davvero però.

Negli stati dove il voto elettronico è diffuso, sono stati sviluppati diversi metodi di e-voting dei quali potete leggere una descrizione sommaria qui e qui; come potete leggere nei links, si sono escogitati diversi sistemi per fornire la prova del voto, la sua riservatezza, ridurre la probabilità di errori e consentire un audit completo da terze parti prima, durante e dopo la votazione.

Dov’è l’errore?

Non credo che il M5S avesse l’obbiettivo di fare l’ennesima brutta figura informatica: come si spiega quindi questa ennesima débâcle del loro sistema?

La risposta è semplicissima. Una singola parola, peraltro utilizzata da Grillo nel video del 2012 che ho linkato sopra: OUTSOURCING. In particolare, outsourcing del comparto di Information Technology del M5S.

Immigrati in albergo con wi-fi, ma anche con il CLOUD!

Si fa presto a dire cloud, credo possa vincere facilmente la palma di termine più abusato degli ultimi anni: i nostri dati stanno nel cloud (IaaS), quel sito è ospitato nel cloud (PaaS), adesso Office è in cloud (SaaS).

Pochi sembrano avere chiaro che “il cloud” non è una tecnologia particolare o qualcosa di magico, ma è un modello di costo per la fruizione di servizi informatici esternalizzati.

Questo è successo nel M5S: è stato esternalizzato il settore IT considerandolo come un accessorio del marketing, quando invece questo rientrava a pieno titolo nell’alveo di core business del movimento.
Come recita la teoria d’impresa, puoi esternalizzare tutto… ma non il core business!

IT come commodity, ma anche no

È opinione diffusa  che l’IT oggi sia completamente commodity.

La verità è che questo, a differenza dell’energia elettrica alla quale viene spesso paragonato, costituisce in molti casi il sistema nervoso di tante realtà aziendali e politiche, non un mero prodotto standardizzato da comprare al più basso prezzo possibile.

A differenza di beni fungibili come appunto l’elettricità, la complessità e la criticità dell’IT hanno avuto una crescita incredibile negli ultimi anni; spesso, il management non può in alcun modo avere le competenze per compiere scelte assennate a riguardo, neanche quando si tratta di prodotti finiti.

Avete voluto risparmiare su di un settore IT interno, fidelizzato ed esperto? Vi ritroverete alla mercé di varie realtà in giacca e cravatta che devono solamente vendere un prodotto obsoleto e dai grossi margini, infarcendolo spesso non solo di Zip War Airganon SVG4, ma anche di democrazia partecipata gratuita con open source turbocompresso, lingue per il web 7.0 crowdfounded equosolidali e bellissima interfaccia web (in Java!).

Oltre i 9/10 delle soluzioni software che ho avuto modo di provare sono completa spazzatura, o sono totalmente inadeguate agli use case per i quali vengono proposte.

Si salvano in pochi. Generalmente costano parecchio, richiedono molti anni di sviluppo e… se non fai questo lavoro, non sai neanche della loro esistenza.

Distopia portamivia

Considero una grande opportunità mancata che il M5S non sia riuscito a mettere su una piattaforma di e-vote decente. Non è una cosa semplice, servono grossi investimenti in capitale umano ed economico, ma era l’unica forza politica in grado di poter spingere il paese in questa direzione.

Spero che questo fallimento dell’esternalizzazione possa servire da monito per il futuro; come predisse un noto blogger qualche anno fa, speriamo di non ritrovarci lo Zip War Argainon SVG4 di stato.

Network management with LXD and OpenVSwitch in Ubuntu 18.04

Just some quick notes about my homelab setup of LXD 3.0 with OpenVSwitch (OVS) in Ubuntu 18.04.

Why use OVS in a small homelab environment? Because it’s the most used SDN stack in the world, and you should learn it instead of relying on the traditional Linux bridges, especially if you are into virtualization/containerization or networking stuff.
Ever heard of whitebox switches? They are going to be the dominant platform in the hyperscaler datacenters… and maybe, also in the enterprise market.

A big warning: this is not a “best practices” configuration, the one with overlay switch and tunnel switch as shown in this great article, but I’m still working on that and this simpler one should be ok for some non-enterprise playground.

As of today (today is the first day of Ubuntu 18.04!) Netplan does not directly support OVS, so don’t even try to use it; I hope they will fix it soon, but for now just don’t configure your OVS NIC with Netplan and please fallback to traditional configuration scripts. Or even to manual startup, they are servers and they are meant to be always on anyway… or not? (Thinking of MaaS)

I strongly suggest you to use a machine with multiple NICs, it will make anything a lot easier because you would not be kicked away from the network when adding your only NIC to the OVS bridge.

Just to begin, install OVS with apt install openvswitch-common openvswitch-switch and check the status of ovs-vswitchd.service and  ovsdb-server.service. Don’t forget to enable the ability of kernel to forward packets with the usual echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf, followed by sysctl -p /etc/sysctl.conf to reload the config.

After that, do not create any switch in the initial lxd init configuration. Just create an OVS switch in LXD with the command lxc network create ovs-1 bridge.driver=openvswitch. It will automatically be added both to the LXD network profiles and to the OVS configuration, that you can check with ovs-vsctl show. That’s cool! Now it’s time to bind the physical interface to our ovs-1 switch; remember that this will KILL any connection established on the NIC that you choose, so be careful.

After choosing your NIC to bind (list them with the ip link command), type ovs-vsctl add-port ovs-1 eno4; eno4 is my fourth NIC, of course. Now it’s time to apply the network profile we just created to the default profile (but you can choose another one, of course) with lxc network attach-profile ovs-1 default eth0. This way, the first NIC of your LXD container will be a veth port on the OVS switch ovs-1. Start a container in LXD with lxc launch ubuntu:18.04 and check if you got everything right with ovs-ofctl show ovs-1; some veth-stuff should appear. Now, log into your container and play with it’s network configuration: it should appear like it’s on the same L2 switch of the physical NIC eno4.

What you can do now? Easy VLAN tagging, for example: ovs-vsctl set port vethM3WY7X tag=200. Don’t forget to set the switch port physically connected with eno4 as a trunk for the VLAN tag that you choose.
You can also create NIC aliases and bind different OVS switches with different tags to the in the very same NIC, but I have not experimented that yet.