RainBird vs OpenSprinkler

Quest’estate ho aggiornato la centralina di irrigazione del prato. L’impianto esistente aveva una vecchia centralina RainBird: impostando un programma settimanale (con unico intervento giornaliero) eseguiva le azioni sulle varie zone del giardino.

Inizialmente l’ho sostituita con una RainBird RZXe4i sulla cui qualità non si discute. La centralina in oggetto, associata al modulo esterno RainBird LNK Wifi permette il controllo dell’intero software tramite applicazione sul cellulare. Il prezzo di tale soluzione è circa 150€ e l’installazione è banale se si sa armeggiare un minimo con dei fili elettrici.

L’applicazione per iOS è ben fatta graficamente e tramite i server RainBird è possibile monitorare e regolare l’irrigazione da remoto. Per me, questa funzione era un must-have nella scelta della nuova centralina.

Tra le sue funzioni “moderne” vi è inoltre la possibilità di regolare la quantità di acqua da versare giornalmente in base alle condizioni meteo della zona (per intenderci: è una giornata fresca e nuvolosa? E’ previsto caldo torrido? In base al meteo dunque la percentuale di acqua viene automaticamente regolata).

Tutto molto bello, finché non ho fatto il reso e comprato una centralina OpenSprinkler dall’America.

Perché? Le ragioni sono varie:

  • OpenSprinkler è un progetto open-source e lo sviluppo è molto attivo
  • E’ possibile far girare il software su un RaspBerry
  • La community ha sviluppato un’app per Android o iOS ma è comunque accessibile tramite webserver

Cosa significa tutto questo? Significa innanzitutto che non regalo i miei dati d’uso e configurazione a RainBird (sapete come la penso circa la dispersione dei nostri dati) inoltre la app di RainBird dipenderà sempre dalle politiche di sviluppo della società: se tra 10 anni decideranno di focalizzarsi/promuovere altre tipologie di centraline, la RZXe potrebbe diventare obsoleta e non più configurabile da remoto. OpenSprinkler dal canto suo, avendo un webserver, funzionerà sempre anche nel caso in cui il progetto o lo sviluppo dell’app dovessero morire.

L’app Rainbird ha le notifiche push, quella di OpenSprinkler no ma ha un log degli eventi molto più utilizzabile (ed esportabile).

La centralina OpenSprinkler costa pochi euro in meno, l’installazione è altrettanto rapida e di default è una otto zone (eventualmente espandibile ulteriormente) contro le quattro della RainBird.

La pianificazione delle attività può esser fatta anche in base al ritmo cicardiano, si può dunque indicare come orario “mezz’ora prima dell’alba e due ore dopo il tramonto” e l’orario slitterà in base all’orario del ciclo giorno-notte), contempla anch’essa la regolazione dell’irrigazione in base alle condizioni meteo degli ultimi giorni e si può specificare persino il valore di evotraspirazione del terreno per una regolazione dei tempi d’irrigazione da… ingegneri.

Emanuele

Client di posta e privacy

[…] But ultimately, email clients should defend against this. The fact that this nonconsensual tracking is even possible should be treated as a serious bug in all email clients. Apple Mail — both on Mac and iOS — allows you disable loading of remote images as a preference, but that breaks most graphically rich emails. Mail clients should allow remote images but load them anonymously, through a proxy server perhaps. I’m sure it’s a tricky problem to solve, but I’m convinced it can be solved.

Email should be every bit as private as most people assume that it is.

John Gruber

Non tutti i browser sono uguali, non tutti i client di posta sono uguali.

Quando ricevi una email, che non sia puro testo (come piace a me), esiste la possibilità che il mittente possa conoscere quando e quante volte sia stata aperta.

Alcune agenzie di invio email permettono persino di localizzare geograficamente dove la mail sia stata aperta.

I client di posta sono dei mini browser, tienilo a mente.

Imparare a bloccare i contenuti remoti sul proprio client di posta è una buona prassi per tornare ad avere un minimo di privacy: se la mail non dovesse vedersi correttamente lamentatevi con il mittente.

Emanuele

FreeNAS Nextcloud plugin – nginx e HTTPS

Come descritto nell’articolo sulla mia configurazione cloud, il webserver della mia istanza Nextcloud non esce fuori dalla rete locale se non attraverso una VPN con OpenVPN.

Idealmente dunque, utilizzare HTTP invece di HTTPS potrebbe sembrare una scelta ragionevole: handshake iniziale più rapido, numero minore di componenti da configurare e intuitivamente performance migliori.

In realtà, HTTPS con HTTP2 (tecnologia costruita su SPDY) garantisce performance migliori in quanto aggiunge la compressione degli header, la parallelizzazione delle richieste e un eventuale push proattivo da parte del webserver che può decidere che certe risorse saranno necessarie al client ancora prima che questi ne faccia richiesta. Non mi credete? Provate voi stessi.

A tutta questa (bella) roba si aggiunge uno strato di sicurezza in più: anche all’interno della mia rete locale le richieste (e le autenticazioni) verso nextcloud saranno cifrate e illeggibili da un aggressore.

Tutto molto bello insomma, non potevo lasciarmelo scappare. Non c’è ragione di usare HTTP invece di HTTPS in tutti i tuoi progetti web.

Il plugin di NextCloud per FreeNAS si basa su nginx, un webserver più moderno e performante del robustissimo Apache.

Configurare nginx per usare SSL e HTTP2 è semplicissimo. Entriamo via SSH nella Jail dedicata a nextcloud con jexec.

1. Verifichiamo se OpenSSL è installato (eventualmente installiamolo usando pkg).

root@nextcloud:/ # openssl version
OpenSSL 1.0.2o-freebsd 27 Mar 2018

2. Verifichiamo se i moduli nginx relativi a SSL (--with-http_ssl_module) e HTTP2 (--with-http_v2_module) sono installati.

root@nextcloud:/ # nginx -V
nginx version: nginx/1.16.0
built with OpenSSL 1.0.2o-freebsd  27 Mar 2018
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf
--sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www --modules-path=/usr/local/libexec/nginx --with-file-aio
--http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-scgi-temp-path=/var/tmp/nginx/scgi_temp --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp --http-log-path=/var/log/nginx/access.log
--with-http_v2_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-pcre --with-http_secure_link_module --with-http_slice_module
--with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --without-mail_imap_module --without-mail_pop3_module --without-mail_smtp_module --with-mail_ssl_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-mail=dynamic --with-stream=dynamic
root@nextcloud:/ #

3. Generiamo i certificati necessari (Certificate Authority, chiave privata e così via…).
Il CA sarà di tipo self-authority (non legato ad un ente certificatore esterno come potrebbe essere Let’s Encrypt [1]). Nessun problema, semplicemente il browser ci darà un warning (ma noi sappiamo di aver emesso noi quel certificato: possiamo fidarci).

Personalmente ho creato una directory openssl dentro /usr/local/etc/ssl/ nella quale ho salvato i file del mio certificato.

openssl req -new > cert.csr
openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1095
cat key.pem>>cert.pem
openssl dhparam 2048 -out dhparam.pem

Durante la generazione dei vari certificati vi verranno chieste un paio di password e qualche informazione per descrivere il certificato. Conservate le password con cura.

Occhio che il parametro -days indica i giorni di validità del certificato: 1095 sono 3 anni.

A questo punto sarete già al 50% del lavoro.

4. Raggiungete la cartella di configurazione della vostra istanza web nextcloud.
Di default si trova in /usr/local/etc/nginx/conf.d/

Per non far danni fate una copia di nextcloud.conf e successivamente modificate la configurazione in questo modo:

server {
  listen 443 ssl http2;
  server_name nextcloud.local;
  ssl_certificate /usr/local/etc/ssl/openssl/cert.pem;
  ssl_certificate_key /usr/local/etc/ssl/openssl/key.pem;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
  ssl_dhparam /usr/local/etc/ssl/openssl/dhparam.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
...

Tutto il resto del file di configurazione potete lasciarlo immutato.

5. Riavviamo la lettura dei file di configurazione da parte di nginx:

root@nextcloud:/usr/local/etc/nginx/conf.d # service nginx reload
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
root@nextcloud:/usr/local/etc/nginx/conf.d #

Modifica completata! Se non avete fatto errori potrete loggarvi su https://<nextcloud-ip-address>:443/ 🎉

[1] Non ho potuto usare Let’s Encrypt perché come dicevo il mio webserver è isolato e non possiede un dominio. Se non siete nelle mie condizioni potrete usare CertBot e gestire l’intera catena di certificazione configurando il porting di Certbot per FreeBSD e nginx.

Il primo uomo.

La mia generazione si è persa l’emozione di vivere quei momenti meravigliosi.

«First man», il primo uomo. Il primo grande passo dell’umanità oltre l’atmosfera terrestre.

Probabilmente l’impresa più grande nella storia dell’uomo.

Emanuele

Il mio cloud? E’ a casa mia.

Credo poco nelle qualità irrinunciabili del cloud e da alcuni mesi ne ho abbandonato quasi del tutto l’utilizzo. Il cloud, d’altronde, è il computer di qualcun altro.

Il mio non è un tentativo di fuga dalla tecnologia quanto un uso più intelligente ed educato della stessa. Come dico da tempo, non voglio vivere più come un prodotto.

Il 90% del furto dei dati nel mondo del lavoro è legato al cloud secondo un report di Kaspersky.
Credete ancora che il cloud sia la soluzione a tutto?

Il mondo è cambiato da quando avevamo connessioni a 56kbps. Il digital divide in Italia esiste ancora, ma se siete tra quelli che hanno una linea dati sufficientemente capace (io ho una 30/3Mbps, nulla di fantascientifico) allora potreste considerare la mia soluzione.

Negli ultimi 5-6 anni siamo stati bombardati e incentivati all’uso del cloud con una narrativa abbastanza standard «E’ fondamentale per la resilienza dei dati, velocizza il lavoro, conserva i dati al sicuro» e così via.

I vantaggi del cloud.

Per eliminare il cloud bisogna dunque chiedersi quali siano i reali vantaggi al netto del marketing. Solitamente le funzioni apprezzate sono due:

  1. disponibilità dei file indipendente dalla propria posizione
  2. garanzia che i dati non vadano persi

Se osservate attentamente però entrambe le qualità hanno degli aspetti critici.

Esternalizzare l’hosting dei dati, ha un serio impatto sulla sicurezza e la riservatezza. Inoltre i dati possono potenzialmente venire dispersi: hacking a sistemi “cloud”, social engineering verso l’utente o semplice data-mining da parte del provider [1] sono alcuni dei limiti del fantasmagorico “cloud”.

A questo ovviamente va aggiunto il fatto che il cloud non è gratis. Per un uso intensivo infatti i classici piani gratuiti diventano molto rapidamente stretti e scomodi.

Con cosa ho sostituito il cloud?

La soluzione messa in piedi non è alla portata di tutti, ma copre le peculiarità del cloud senza grosse limitazioni. Non ho intenzione di fare una noiosissima guida alla sua configurazione (sono disponibile a dare una mano nei commenti) ma la soluzione che segue può essere implementata solo se non storcerete il naso leggendo certe parole.

Per tutti gli altri, il mio consiglio è quello di tenere d’occhio Cubbit, un progetto semi-italiano di tutto rispetto.

Il cuore del mio “cloud” è l’HP MicroServer comprato mesi fa sul quale ho installato FreeNAS.

E l’accessibilità dall’esterno?

So che aprendo qualche porta sul router potevo rendere la soluzione ancora più user-friendly ma preferisco mantenere tutti i servizi interni alla mia rete protetti da uno scudo ben robusto. Pertanto ho configurato una VPN (OpenVPN + DuckDNS) sul mio EdgeRouter. In questo modo la rete di casa mia è accessibile in maniera comoda e sicura dall’esterno e tutti i servizi con cui voglio dialogare “non escono da casa”.

Si ma… l’esperienza d’uso?

Il cloud cui siamo abituati, è costituito da un’interfaccia web con un file manager (Dropbox, Google Drive, One Drive e così via sono tutti simili a meno di personalizzazioni estetiche).

Io ho risolto installando sul NAS Nextcloud + Elasticsearch (per avere l’indicizzazione dei contenuti dei file). Nextcloud è una piattaforma di file-hosting opensourceDropbox style“. Per intenderci, avrete un client da installare sul desktop, una app per i vostri dispositivi mobili e così via.

Ok, e il disaster-recovery? La disponibilità dei dati?

La cartella nextcloud del mio MacBook viene tenuta in sync con il mio NAS. Se l’hard disk del MacBook dovesse morire, avrei i dati sul NAS. Se dovesse morire il NAS, avrei i dati sul MacBook.

La ridondanza dei dischi e l’uso di ZFS come file system sul NAS però non coprivano tutti gli scenari di disaster-recovery. Un furto in casa o un incendio tecnicamente potrebbero far svanire rapidamente i miei archivi (come direbbe Elon Musk, “rapid unplanned disassembly“) così con un amico ho messo in piedi una VPN site-to-site (sempre sul mio EdgeRouter che in questo caso mostra la flessibilità del device rispetto ad un classico router consumer) ed ho configurato sul NAS un backup giornaliero cifrato dei dati del mio NAS (cron + duplicity).

Duplicity prima di inviare i dati, fa una cifratura on-the-fly degli stessi usando GPG. In pratica, sebbene abbia fiducia nell’amico, preferivo non perdere la riservatezza dei miei dati. [2]

In math we trust.

Anonymous cyptographer

Per ulteriore ridondanza ho impostato un ulteriore backup cifrato via rsync su Dropbox. In questo modo Dropbox non potrà collezionare né dati d’uso (non ho le app di Dropbox, né effettuo login in mobilità), né informazioni sui miei file (tutto ciò che vede sono dei file di cui anche il nome è composto da una stringa randomica illegibile).

Perché Dropbox? Semplice pigrizia. 🙂 L’idea è quella di farne a meno tra un po’ ma in fase di avviamento volevo esser certo di avere “una copia cifrata in più“.

E le performance?

Le performance sono limitate dalla capacità della vostra linea. Con una linea FTTC o FTTH raggiungerete certamente prestazioni migliori ma posso assicurarvi che 3Mbit sono sufficienti a fare video streaming tranquillamente.

Un film in streaming attraverso Plex (installato sul NAS) mentre ero fuori casa

L’uso tipico che faccio del “cloud” prevede upload o download di documenti di pochi Mb che richiedono pochi istanti per esser trasferiti.

Potrei raccontarvi di tutte le feature aggiuntive di nextcloud, ma quello magari lo riserviamo ad un prossimo capitolo.

Riprendiamoci i nostri dati.

Emanuele

[1] Google ad esempio, riguardo al suo Google Drive, scrive che scansiona tutto quello che caricate al fine di «fornirti funzionalità del prodotto personalizzate, come risultati di ricerca personalizzati, pubblicità su misura, rilevamento spam e malware».

[2] Nota per i nerd: il backup iniziale (circa 350GB) ha impiegato poco meno di 20 giorni. Per testare la robustezza della soluzione abbiamo riavviato più volte router, NAS, VPN… Duplicity ha sempre ripreso le sue attività senza batter ciglio. I backup incrementali successivi dipendono esclusivamente dalle modifiche che faccio sul mio (next)cloud ma si limitano tipicamente a pochi MB al giorno così i backup (schedulati in notturna) sono sempre rapidi e invisibili.

La prossima vita faccio il giardiniere.

Curare il giardino mi rilassa, probabilmente anche perché è qualcosa di diametralmente opposto a ciò che faccio per lavoro e mi permette di allontanarmi da ogni forma di tecnologia. Tagliare le piante, sentire gli odori, raccogliere lo sfalcio. La natura ha dei cicli bellissimi e la vitalità con cui si esprime è diversa in base al periodo.

Lo scorso autunno, in quel raptus di iperattività, avevo anche girato il terreno con una moto-zappa e riseminato interamente il prato.

Quest’anno la cura di quei fili d’erba è un pensiero che mi affascina e diverte. Ho atteso per mesi l’arrivo della primavera e adesso sto studiando i cicli delle erbe che ho seminato, sto osservando se i dosaggi di azoto e potassio siano corretti per il mio terreno, sto approfondendo il top-dressing (quelle tecniche che portano un prato, ad esempio, a diventare un tappeto per un campo da golf), la differenza tra un taglio con macchina rotativa da uno elicoidale, la sarchiatura, tempi e modalità di innaffiatura.

Ho anche un po’ di piante da interrare, un ulivo cui non ho ancora trovato la giusta collocazione e un angolo delle spezie da ricostruire da zero.

Ho deciso inoltre di non usare diserbanti verso le infestanti: è un crimine verso l’umanità usare roba chimica per curare un giardino, così la mia sfida è complicata ulteriormente dal cercare delle soluzioni all’antica. Alla peggio: meglio le imperfezioni.

Il brutto tempo di Maggio, per il secondo anno consecutivo, ha rovinato le ciliegie facendo fuori l’intero raccolto. A Febbraio avevo dato una bella potata al susino e così confido nuovamente in loro. Le pioggie non le hanno intaccate (sono ancora molto molto dure).

Ieri dopo il lavoro ho giocato per due ore lì fuori. Verso ora di cena il mio iPhone indicava che in quell’intervallo di tempo avevo percorso quasi quattro chilometri.

La prossima vita faccio il giardiniere, ricevi soddisfazioni e ti tieni in forma.

Emanuele

Acquistare una stampante conviene?

Due anni e mezzo fa ho acquistato una Samsung SL-M2885FW: stampante laser bianco e nero multi-funzione (fax, stampante, fotocopiatrice, scanner).

Oltre i 209,69€ iniziali (prezzo d’acquisto della stampante) fino ad oggi ho speso 44,49€ per l’acquisto di un nuovo toner originale Samsung [1]. A conti fatti ho speso 254,18€.

A conclusione del secondo toner i contatori della stampante indicano che ho effettuato 763 scansioni e 2841 stampe. Non ho mai inviato un fax (fortunatamente!)

La domanda che prima o poi ci facciamo tutti è: possedere una stampante conviene rispetto all’affidarsi ad una qualsiasi copisteria?

Nei calcoli che farò non terrò volutamente conto di due fattori che più o meno si bilanciano: il consumo della corrente per l’uso della stampante e la benzina, eventuale, utilizzata per raggiungere la copisteria. Il tempo risparmiato e la comodità sono certamente impagabili. La stampante in oggetto stampa in wireless anche con Apple Print, così molto spesso stampo i documenti seduto comodamente sul divano con l’iPad in mano.

Quanto costa stampare e scansionare in copisteria? Potrei sbagliarmi ma i prezzi, nei luoghi più economici, mi sembra varino tra 0,06€ e 0,10€ per pagina. Certamente stampare o scansionare in centri non specializzati (tabaccherie?) avrà prezzi totalmente diversi ma voglio provare a calcolare i costi considerando la migliore delle ipotesi.

Avessi voluto scansionare 763 pagine a 0,10€ (in realtà credo che le scansioni costino di più) avrei speso 76,30€. Le 2841 pagine stampate, al costo di 0,06€ l’una avrebbero comportato una spesa di 170,46€. A questo va sottratto il costo della carta che ho dovuto acquistare: se una risma costa 3,50€ ogni foglio costa 7 millesimi di euro. In pratica ho speso 19,88€ per la carta.

Tirando le somme avrei speso:
Scansioni = 76,30€
Stampe 170,46€ – 19,88€ spesi per la carta = 150,58€
Per un totale di 226,88€

In pratica, avessi avuto accesso ad una copisteria economica, dopo due anni e mezzo non avrei ancora pareggiato la spesa. Il break even point comunque non è distante: la differenza di 27,30€ si copre con la stampa di altre 500 pagine. In pratica superata la prossima risma, sarà stato comunque più conveniente stampare a casa.

Se pensi di stampare meno di 3500 pagine nell’arco di vita della tua stampante probabilmente devi orientarti su una stampante dal prezzo d’acquisto inferiore sperando che non ti abbandoni prima.

3500 pagine in cinque anni equivalgono a una media di 58 pagine al mese o 2 pagine al giorno.

Emanuele

[1] Il toner originale presente all’acquisto ha stampato appena 831 pagine.

La privacy è un concetto semplice.

Siamo tutti apaticamente in attesa che il rispetto della nostra privacy arrivi dall’alto. In realtà siamo anche noi, con le nostre scelte a determinare quanti e quali dati disperdere.

Privacy significa avere la possibilità di scegliere ciò che vogliamo condividere, quando e con chi farlo.

Se il mercato è libero di comportarsi in maniera deplorevole, scegliere saggiamente è completamente nelle nostre mani. Sempre e comunque.

Emanuele