KBFS, il cloud sicuro

Nell'articolo precedente abbiamo visto Keybase e le funzionalità social che offre. Abbiamo anche accennato a KBFS, che sta per Keybase Filesystem ed in questo articolo andremo a vedere di cosa si tratta e del perchè risulta essere un'alternativa davvero innovativa ai più comuni servizi di cloud. Il servizio di KBFS è integrato nell'applicazione per PC di Keybase e, come le altre funzionalità della suite, è utilizzabile sia da riga di comando che in modalità grafica. Per semplicità possiamo pensarlo come una sorta di Dropbox, che appare sulla nostra macchina come una cartella dentro la quale possiamo caricare file e documenti. A differenza di questi servizi però non esiste un modello di sincronizzazione, vale a dire che non dovremo scaricare tutti i file in locale per poterli gestire, ma verranno scaricati solo al momento dell'apertura. Un'altra differenza è la gerarchia delle sottocartelle in cui ci imbattiamo. Questo perchè lo spazio a nostra disposizione è logicamente suddiviso in un'area pubblica e una privata. Al fine di descrivere le funzionalità di KBFS utilizzerò il mio username sul sistema, aroblu94. Detto questo i nostri due spazi personali saranno raggiungibili rispettivamente a /keybase/public/aroblu94/ e /keybase/private/aroblu94/. Cominciamo vedendo nello specifico le funzionalità della cartella pubblica. Tutto quello che andremo a inserire qui verrà infatti firmato con la nostra chiave in modo automatico e reso disponibile a tutti gli utenti Keybase comodamente in chiaro. Lo scopo di questa funzionalità è quella di poter condividere determinati file in modo sicuro, dando al tempo stesso la certezza a chi li preleva o visualizza che si tratta di file non manomessi al momento del download. La firma infatti serve proprio a questo, è un po' come dire "Questo file è autentico e funzionante, potete scaricarlo da qui senza temere che possa essere stato modificato". In aggiunta a questo la vostra cartella pubblica funge da webroot, permettendovi di caricarci al suo interno un "minisito". Basterà infatti la presenza di un file index, che sia .html, .md o quant'altro, per poterlo raggiungere ad un indirizzo del tipo https://aroblu94.keybase.pub. Allo stesso modo è possibile raggiungere le cartelle pubbliche di qualsiasi utente Keybase, utilizzando sia il loro username sulla piattaforma, che gli username di qualsiasi altro social network collegato. Vale a dire che il contenuto della cartella /keybase/public/aroblu94/ può essere raggiunto ad esempio anche come /keybase/public/aro94@twitter/ /keybase/public/aroblu94@reddit/ /keybase/public/aroblu94@github/ Vediamo ora le funzionalità dell'area privata di keybase. Allo stesso modo ci sarà una cartella /keybase/private/aroblu94/. Tutti i file che vengono caricati qui sono cifrati e accessibili solo a noi stessi, solamente da macchine che sono state verificate. Per poter usare KBFS infatti sarà necessario aggiungere il PC alla lista dei device verificati del nostro account. Ovviamente non possiamo raggiungere le cartelle private degli altri utenti come facevamo con quelle pubbliche, è possibile però creare delle cartelle condivise tra utenti. Se volessi infatti scambiare dei documenti in modo sicuro con Daniele e Niccolò - gli altri due membri de L'angolo nerd -, sarà sufficiente creare una cartella aroblu94,theloker,nicokant sotto /keybase/private/. Sempre grazie alla connessione bi-direzionale tra i profili collegati ad ogni account Keybase è possibile utilizzare lo username Twitter, GitHub o quello che preferiamo per collegarci con una persona. Per quanto riguarda la sicurezza dell'intero sistema bisogna ricordare che i server Keybase non memorizzano alcuna chiave privata e di conseguenza non possono leggere i file caricati in /keybase/public/, mentre conoscono - ovviamente - il contenuto di quelli pubblici. Keybase inoltre conosce ulteriori metadata quali la cartella modificata, la data di modifica/accesso e - approssimativamente - la quantità di dati scambiati, fermandosi però all'altezza di /keybase/private/{cartella}/, senza conoscere invece file e sottocartelle all'interno, come possiamo leggere nella citazione seguente presa dalla documentazione di Keybase: The Keybase servers can obviously read everything in /keybase/public. As for /keybase/private, Keybase can tell (1) what top level folders you're working in (such as /keybase/private/aroblu94,pal), (2) when you're writing and reading data, and (3) approximately how much data. The Keybase server does not know individual file names or subdirectory names. It could try to guess whether you're writing 100 small files or 1 large file, but it would be a timing-based guess. If you write a 1MB file in a private folder called /keybase/private/aroblu94/pics_of_me/thong.jpg, the Keybase server has no idea this is a folder called pics_of_me, or that there's a file called thong.jpg, or whether you look good. It doesn't know you're writing pictures, Excel docs, your DNA sequence, or mp3's. Per ulteriori informazioni sui meccanismi di sicurezza adottati in Keybase Filesystem vi rimando alla documentazione ufficiale.

React JS, un'introduzione

React è una libreria Javascript per creare interfacce grafiche, anche chiamate View, tramite un sistema efficiente di componenti. Questa libreria ha avuto un enorme successo, tanto da aver creato attorno a sé un vero e proprio ecosistema di sviluppatori e aziende che lo utilizzano e rilasciano tramite NPM ulteriori moduli e componenti. La natura di React è fortemente descrittiva, tanto da essere stata la prima libreria a sfruttare veramente con successo le API funzionali di Javascript; i componenti React infatti sono la rappresentazione in una sorta di HTML. Per dare una definizione più precisa possiamo dire che in React V = f(S), ossia che il componente (View) varia in funzione di un certo input S che chiamiamo stato del componente. Quindi non solo lo stato determina come apparirà il componente, ma ci garantisce che in qualsiasi momento io gli passi lo stesso input otterrò lo stesso output. Nella pratica sappiamo bene che non funziona sempre così, spesso il codice javascript si appoggia a variabili globali, che possono essere modificate in altre parti di codice rendendo molto imprevedibile il risultato. Ad esempio vogliamo creare un componente che carichi una lista di articoli da un endpoint. Naturalmente quando il componente verrà mostrato sarà vuoto, quindi vogliamo che durante il caricamento mostri uno spinner e solo quando gli articoli saranno stati scaricati li mostri al lettore. In questa casistica possiamo definire due stati: caricato e non caricato, a ciascuno di essi corrisponde una visualizzazione. See the Pen Ultimi articoli L'angolo nerd by Niccolò (@nicokant) on CodePen. Il vantaggio vero e proprio di React si intuisce nel momento in cui si vogliono collegare tra loro più componenti per creare una webapp. Torniamo indietro di qualche anno, quando i framework MV* (tra cui Angular, Ember, Backbone) ebbero molto successo, tra i motivi principali c'era la tecnica del two-way data binding, che garantisce la possibilità di avere dei modelli di dati che si aggiornino automaticamente a seconda dei cambiamenti nelle view. Questo sistema è ottimo per applicazioni con poche view e pochi modelli, ma nel momento in cui se ne combinano molte tra loro il risultato è la totale perdita della prevedibilità nel flusso dei dati e il conseguente debug più complicato. React invece si presenta con un'architettura scalabile e a stati finiti, che mette al centro lo stato dei singoli blocchi. Tramite un'estensione per il browser è possibile ispezionare i componenti, il loro stato attuale e le loro proprietà. React DOM React si compone di più pacchetti, quello base è 'react' che implementa il sistema di componenti, in aggiunta, a seconda della piattaforma per cui si vuole realizzare l'app si ha a disposizione un ulteriore pacchetto, per le pagine Web si utilizza React DOM. Questo pacchetto implementa l'effettivo funzionamento della funzione di render, ossia fa da intermediario tra il componente e il DOM, dicendo come il secondo debba essere cambiato a seconda dei cambiamenti del primo. Tutto questo viene fatto nel modo più ottimizzato possibile, dal momento che le mutazioni del DOM sono operazioni costose in termini di performance, usando un algoritmo di diff-patch che apporta il minor numero di modifiche possibili al DOM. Questa funzionalità è anche nota come Virtual Dom e potete trovarla anche in altre librerie. React Native Come dicevo prima non esiste solo React DOM e il Web non è l'unica piattaforma suportata da React. Tramite React Native è possibile realizzare app Android e iOS native utilizzando comunque Javascript come linguaggio. Quanto detto per il DOM nel paragrafo precedente vale anche per iOS e Android, che avendo una base diversa dal DOM non potranno utilizzare componenti come <h1 /> oppure <a />, ma avranno a disposizione altri componenti nativi come <ScollView /> e <Text />. Cambiando piattaforma tra Web e Android/iOS è possibile riutilizzare totalmente la parte di codice relativa alla logica dell'applicazione, mentre invece i componenti vanno riscritti. we're not chasing “write once, run anywhere.” Different platforms have different looks, feels, and capabilities, and as such, we should still be developing discrete apps for each platform, but the same set of engineers should be able to build applications for whatever platform they choose, without needing to learn a fundamentally different set of technologies for each. We call this approach “learn once, write anywhere". Non stiamo inseguendo il motto "scrivi il codice una volta sola e eseguilo ovunque". Piattaforme diverse hanno un aspetto diverso, danno sensazioni diverse e hanno possibilità diverse, per questo noi vogliamo sviluppare comunque buone app per ogni piattaforma, ma uno stesso gruppo di ingegneri dovrebbe essere in grado di sviluppare applicazioni per qualsiasi piattaforma scelgano, senza aver bisogno di imparare un set fondamentalmente diverso di tecnologie per ciascuna. Chiamiamo questo approccio "impara una volta sola e scrivi codice per qualsiasi piattaforma". Chi lo usa? Bisogna sempre tenere conto di chi sviluppa il codice e di chi lo utilizza perché in alcuni casi garantisce la sopravvivenza del framework. React è sviluppato da Facebook, ma a differenza di Angular, è utilizzato in moltissime parti del social network e di altri prodotti Facebook, garantendo un ottima stabilità e l'assenza di bug catastrofici (prima di ogni release React viene testato su facebook.com). Tra i grandi nomi che utilizzano React in produzione troviamo Facebook, Whatsapp, Instagram, Airbnb, Netflix, Yahoo, Atlassian, Khan Academy, Dailymotion, eBay, IMDb, New York Times, Paypal, Periscope, Reddit, Twitter Mobile, Wordpress.com. Le app scritte con React Native sono Facebook, Instagram, Soundcloud, Tesla, Airbnb, Baidu, Vogue, Bloomberg. Se siete curiosi ne potete trovare molti altri qui.

Keybase, la crittografia si fa social

In un mondo sempre più incentrato su internet la sicurezza online e la protezione dei dati personali sono argomenti all'ordine del giorno.  Ed è proprio la crittografia che permette, attraverso particolari funzioni matematiche, di "offuscare" i nostri dati rendendoli illeggibili da chiunque altro fuorchè noi e il server che ci eroga il servizio desiderato, che sia Google, Facebook o chiunque altro. Questo processo avviene in modo automatico e senza un nostro intervento nel momento in cui viene stabilita la connessione, ma è importante ricordare che in rete non tutti i dati vengono cifrati. Il caso più comune è quello delle email in cui, nella maggior parte dei casi, il contenuto viene inviato in chiaro. E se volessimo cifrare dei messaggi, in modo da essere sicuri che solo il destinatario possa leggerli? Uno dei metodi tutt'ora più utilizzati passa attraverso PGP, un sistema di crittografia basato su una coppia di chiavi per ogni utente, che permette ad entrambe le parti in comunicazione di essere sicuri che il messaggio arrivi dalla persona giusta senza essere stato nè manomesso nè letto dal cosiddetto man-in-the-middle [1]. Ogni coppia di chiavi è quindi associata ad un indirizzo email e sul web si trovano moltissimi database e siti con l'obiettivo di raccogliere le chiavi pubbliche degli utenti rendendo più comoda la ricerca di quella necessaria per comunicare in modo sicuro con una persona. Fin qui tutto bene, sembrerebbe la rivoluzione, ma la verità è che nessuno lo usa, se non per divertimeno e/o test. Questo perchè l'utilizzo di PGP risulta essere prolisso e scomodo (ricerco la chiave, cifro il messaggio con quella chiave e invio il messaggio cifrato; ricevo il messaggio cifrato, lo "apro" con la mia chiave, lo leggo e rispondo) e, a meno di non avere a che fare con un segreto di stato, siamo tutti disposti a permettere a chiunque di leggere le nostre email a fronte di una comodità e immediatezza senza eguali. Esistono però diverse applicazioni che implementano questo tipo di sicurezza in modo totalmente automatico e da qualche tempo a questa parte molti dei servizi più noti, quali Telegram e Whatsapp ad esempio, stanno adottando questo tipo di crittografia, ma la maggior parte di quelle in circolazione adotta soltanto il metodo "standard", non cifrato. Ed è qui che entra in gioco Keybase, un servizio che potrebbe ricordare uno dei tanti database di chiavi pubbliche, ma che in realtà offre molto di più. Più che un sito di raccolta chiavi, si potrebbe definire come un social network, il cui scopo è quello di creare una rete di identità verificate. Il proprio profilo è infatti collegabile a quello dei più comuni social network, tra cui Facebook, Twitter e Reddit, in aggiunta ai propri dispositivi [2] e siti internet. Il profilo principale dispone infatti solamente di un indirizzo email, quello a cui è associata la coppia di chiavi necessaria per la cifratura dei messaggi, a cui sarà poi possibile collegare tutti gli altri servizi, attraverso ad esempio la pubblicazione di un post sul social network che si vuole verificare. In questo modo dal proprio profilo su Keybase sarà possibile raggiungere i profili esterni verificati e allo stesso tempo avere la certezza che "quel profilo Facebook e quell'account Github appartengono stessa persona". La componente "social" di keybase è inoltre la possibilità di verificare le identità di altri utenti, firmando il loro profilo. Un po' come dire "Conosco questa persona nella realtà e vi assicuro che questi profili sul web siano veramente i suoi". Ovviamente queste funzionalità sono disponibili sia dal sito web che da command line (disponibile sia per Windows, che Linux e OSX) e da qualche mese a questa parte è stata introdotta un'applicazione per pc, sempre multipiattaforma, in modo da effettuare tutte le operazioni elencate sopra con comodità. Dal lancio dell'applicazione sono seguite numerose novità, tra cui l'introduzione di una chat real time completamente cifrata e KBFS. Acronimo di "Keybase File System" è di fatto un servizio di hosting gratuito che implementa e permette di utilizzare comodamente i meccanismi di cifratura di PGP. Presentandosi come una cartella keybase nella root del proprio pc, è suddivisa in due parti da due sottocartelle, una pubblica - cartella public - e una privata - private -. Per farla breve è una sorta di Dropbox, uno spazio online su cui caricare i nostri documenti, ma suddiviso in due aree. Tutto quello che carichiamo nella zona privata viene cifrato con la nostra chiave e di conseguenza risulta leggibile solo da noi stessi, mentre i file nella cartella pubblica vengono firmati con la nostra chiave e messi a disposizione di tutti gli utenti Keybase. Le potenzialità di KBFS non finiscono qui, ma essendo un argomento particolarmente denso e davvero innovativo è bene spenderci qualche parola in più nel prossimo articolo. In conclusione, perchè utilizzare Keybase? Innanzitutto perchè  tutti dovremmo tenere un po' di più alla sicurezza dei nostri dati in rete e questo servizio permette di farlo in modo divertente e social, e poi per KBFS, che da solo - a mio parere - vale il tempo "perso" per iscriversi al sito. [1] Tipicamente in un attacco viene nominato man-in-the-middle il malintenzionato che si posiziona nel mezzo di una conversazione intercettando tutti i messaggi. [2] Keybase permette di verificare i propri PC in modo tale che le operazioni legate al proprio profilo (attraverso l'applicazione o la command line) possano essere effettuate solo sui dispositivi registrati. Tra questi ci sono inoltre i cosiddetti paper key, delle chiavi sotto forma di stringa di testo da trascrivere su un foglio di carta utilizzate per il recupero dell'account o l'accesso nel caso non si possa verificare il dispositivo in altro modo.

Atom a hackable text editor

Atom è un editor di testo Open Source sviluppato dal team di GitHub, è disponibile per qualsiasi piattaforma, Mac OS, Windows e Linux. Per un programmatore la scelta dell'editor di testo è fondamentale e non è una cosa banale ne semplice. Dopo qualche anno di “pellegrinaggio” tra i vari editor disponibili partendo da Gedit passando per Sublime Text sono finalmente approdato ad Atom. Il prodotto made in GitHub è uno tra gli editor di testo più flessibili che ho potuto provare, grazie alla possibilità di installare pacchetti di terze parti. Grazie a questa feature sarà possibile ampliare le funzionalità dell'editor che nella sua versione base è piuttosto minimale, quasi scarno. Ne è un esempio la mancanza della voce “open recent” nel menu che è possibile aggiungere tramite l'installazione di un pacchetto apposito. Oltre ai pacchetti dedicati all'espansione delle funzionalità e al miglioramento della produttività, ne esistono altri finalizzati a rendere la scrittura del codice più piacevole e divertente come questo. La lista di pacchetti disponibili è lunghissima potrete trovarne per gli usi più disparati e aggiungerli alla vostra “collezione” per rendere il vostro Atom unico e personale. Le possibilità di personalizzazione non finiscono qui, come per altri editor come Sublime è possibile modificare l'aspetto del nostro editor tramite dei temi (qui potete trovare la lista completa), suddivisi tra UI theme, il tema dell'interfaccia e dei menu e syntax theme, ovvero il colore dello sfondo dell'area di testo e i colori per le parole chiave della sintassi del linguaggio usato. Solitamente il creatore di un tema fornisce entrambi, nulla vieta di combinare diversi temi per ottenere un aspetto unico e totalmente personale. Passando ad aspetti più tecnici Atom è basato su Electron, un framework implementato tramite chromium e node.js, Open Source e sviluppato da Git Hub. Permette di scrivere applicazioni desktop multipiattaforma utilizzando html, css, javascript. Le applicazioni basate su Electron sono ben 304, in tema di editor di testo anche Visual Studio Code di Microsoft è basato su questo framework. Atom è Open Source informazione che magari non a tutti interessa, ma se siete tra quelli che sposano più o meno fedelmente questa filosofia sarete ben felici di poter prendere in considerazione questo editor di testo, e potrete anche collaborare allo sviluppo.

L'angolo nerd sbarca su Instagram

Il team de L'angolo nerd è lieto di annunciare la creazione della nuova pagina Instagram. Oltre a poter seguire le news potrete trovare anche alcune chicche. Ovviamente per una "piccola realtà" come la nostra il mondo dei social non è solo utile, ma praticamente indispensabile. Sia per farsi conoscere presso nuovi utenti sia per mantenere costante il rapporto con chi già ci segue. Ecco perchè l'idea di inserire un nuovo social oltre ai già presenti, Facebook, Twitter e Google+. Non escludiamo la possibilà di approdare anche su altri social, ma per ora riteniamo che l'offerta sia abbastanza completa. Quindi cosa aspettate, seguiteci anche su Instagram!

Magisk v11: la soluzione All-In-One per il modding di Android

Avevamo già parlato di Magisk tempo fa, una mod molto particolare che permette di installare altre modifiche - dette moduli -, quali i permessi di root, Xposed e Viper4Android in modalità systemless, vale a dire senza toccare la partizione di sistema del dispositivo. Questo avviene grazie ad una modifica della partizione di /boot che permette di caricare virtualmente queste mod nella partizione di sistema ad ogni avvio di Android, rendendo quindi possibile un futuro aggiornamento del sistema senza effettuare nuovamente tutti i passaggi per installare le modifiche volute. Nell'ultimo periodo lo sviluppo di questo sistema ha subito una forte accelerazione introducendo sempre più funzionalità come Magisk Hide, che permette di nascondere i permessi di root alle applicazioni che "non li digeriscono" (Android Pay, Pokemon Go e molte applicazioni di mobile banking ad esempio) e atterrando sul Play Store (Magisk Manager). È di stanotte - 6 febbraio 2017 n.d.r. - l'ultimo aggiornamento, che porta Magisk alla versione 11 e il Manager (l'applicazione di gestione) alla versione 4, rendendo questa mod una soluzione All-In-One per la gestione di moduli e permessi di root. Infatti non sarà più necessario installare a parte un gestore dei permessi di superutente, come possono essere Phh Superuser e SuperSU (per il quale viene comunque mantenuta la compatibilità), poichè ora è integrato direttamente in Magisk. Chiamato MagiskSU, non è altro che una versione modificata del gestore di Phh, ma che permette di chiudere il cerchio, rendendo Magisk la piattaforma più completa nell'ambito del modding di Android. Per maggiori informazioni vi rimando alla discussione ufficiale sul forum di XDA.