home Ricerca per tag "ca"


HTTPS, cos'è e come funziona

L'ultimo articolo riguardante la sicurezza sul web risale a qualche mese fa ed abbiamo deciso di riprendere l'argomento per parlarvi di HTTPS, che da qualche giorno è stato abilitato anche qua su L'angolo nerd. Per molti di voi potrebbe suonare familiare, sicuramente vi sarà già capitato di leggerlo sulla barra degli indirizzi del browser quando navigate su siti come Facebook, Google, Twitter o YouTube, accompagnato da un piccolo lucchetto chiuso. Ma cos'è questo HTTPS? HTTPS sta per HyperText Transfer Protocol over Secure Socket Layer e si tratta di un protocollo per l'invio di informazioni attraverso la rete, proprio come HTTP, ma più sicuro. Giusto per rifilarvi una carrellata di informazioni nerd, il protocollo HTTPS utilizza la porta 443 al posto della usuale porta 80 di HTTP ed un sistema basato su SSL/TLS per cifrare le informazioni scambiate tra il client (voi) ed il server (L'angolo nerd, ad esempio). In particolare, SSL (Secure Sockets Layer) e TLS (Transmission Layer Security) sono altri due protocolli, che vengono utilizzati per garantire la cifratura dei pacchetti inviati tramite rete Internet. Ok, tutto molto bello, ma perchè usare HTTPS?L'utilizzo del protocollo HTTPS garantisce una maggiore sicurezza permettendo lo scambio di dati cifrati tra client e server, evitando quindi attacchi del tipo man-in-the-middle o eavesdropping, mediante il quale l'attaccante, che si trova "a metà" tra voi e il server, potrebbe intercettare le informazioni inviate.Più precisamente, HTTPS NON blocca questi tipi di attacchi, semplicemente li rende inutili. Attraverso il protocollo HTTP standard infatti i dati vengono passati in plain text, ossia non cifrati, permettendo quindi al malintenzionato di scovare facilmente ad esempio il vostro username e la vostra password. Questi dati possono essere intercettati comunque anche se inviati tramite HTTPS, ma risulteranno cifrati, di conseguenza illeggibili. Come funziona HTTPS?HTTPS è basato sul sistema delle chiavi pubbliche e private (trattato nell'articolo sulla crittografia). L'amministratore di un server Web che vuole adottare questa protezione per la connessione dall'esterno al suo server deve prima creare un certificato a chiave pubblica che dovrà poi essere firmato da un'Autorità di Certificazione (CA), un ente pubblico o privato abilitato a rilasciare certificati digitali conformi agli standard internazionali.Nel caso in cui il certificato creato per un server Web non fosse stato firmato il browser ci avviserà che il sito a cui vorremmo connetterci non è sicuro. Ma cerchiamo di capire meglio come funziona questo sistema delle chiavi pubbliche e private. Queste due chiavi sono legate da un calcolo matematico, tipicamente il prodotto di due numeri primi molto (molto molto) grandi, in modo che sia impossibile risalire a quella privata disponendo solo di quella pubblica. Per mandare un messaggio al server basterà cifrarlo utilizzando la sua chiave pubblica, così che solo il server stesso, attraverso la sua chiave privata potrà decifrarlo. Dopo aver messo a punto i dettagli tecnici da utilizzare per il trasferimento, come ad esempio la versione degli algoritmi di protocollo o di cifratura, il browser procederà quindi alla cifratura di una chiave generata in loco con la chiave pubblica del server, per poi connettersi con questo e inviare tale chiave. Terminato questo passaggio la connessione tra il client e il server sarà sicura e procederà con la stessa chiave, che verrà utilizzata per cifrare e decifrare il flusso dei dati. In conclusione è interessante dare uno sguardo alle debolezze e alle limitazioni di questo tipo di comunicazione.Innanzitutto, se un utente malintenzionato rubasse il certificato con la chiave privata di un server che usa HTTPS, sarebbe possibile per lui creare e firmare falsi certificati per qualsiasi dominio a cui far connettere gli utenti senza che loro se ne accorgano. Inoltre, con l'implementazione di HTTPS su un server Web, verranno inviati più dati rispetto che con una normale connessione HTTP. Ciò comporta quindi un volume di traffico più alto, con una conseguente velocità di navigazione ridotta. Ma allora perché non usare il protocollo HTTPS solo sulla pagina di login? Tutti avrete sentito parlare dei Cookie, che essenzialmente sono righe di testo utilizzate per l'autenticazione automatica, quel meccanismo che permette ad esempio di non dover inserire username e password ogni volta che si accede a Facebook o Google. Username e password sarebbero quindi al sicuro perchè cifrati, ma che dire di questi cookie? Questi invece rimarrebbero in chiaro, senza alcun tipo di cifratura, il che renderebbe inutile cifrare i dati al momento del login. Per questo è necessario che la connessione rimanga cifrata per tutta la sua durata, dall'inizio alla fine.

I Bitcoin spiegati a mio padre - la crittografia

Nello scorso articolo abbiamo parlato dell'aspetto economico e della definizione dei Bitcoin in quanto moneta virtuale. Oggi invece andremo ad analizzarne l'aspetto crittografico. L’uso della crittografia risulta essere di importanza cruciale nel sistema Bitcoin; essa è usata per celare l’identità degli utenti della rete grazie alle funzioni Hash, per garantire che il denaro di un portafoglio sia speso solo dal legittimo proprietario, grazie ad uno schema di firma digitale chiamato Algoritmo di Firma Digitale su Curve Ellittiche (ECDSA), o impedire l'alterazione della Block Chain, cioè il registro generale di tutti le transazioni economiche effettuate. Funzioni crittografiche Hash Una funzione crittografica Hash è una funzione H che, dato in input una stringa m di lunghezza arbitraria (potenzialmente infinita), restituisce in output un messaggio H(m) di lunghezza predefinita chiamato digest. La lunghezza del digest è definita dall’algoritmo Hash usato, per esempio, nel sistema Bitcoin vengono utilizzate due funzioni, SHA256 e RIPEMD160 che, rispettivamente, restituiscono un output di 256 bit e 160 bit. Di seguito un esempio dell’output delle due funzioni in formato esadecimale. Ricordiamo che un carattere esadecimale è grande 4 bit, quindi le stringhe in output saranno lunghe rispettivamente 64 e 40 caratteri SHA256(‘Bitcoin’) = B4056DF6691F8DC72E56302DDAD345D65FEAD3EAD9299609A826E2344EB63AA4RIPEMD160(‘Bitcoin’) = 4C9F77AB9E5EEF487C2C0AE07029E79B2CA11A68 Proprietà le funzioni crittografiche Hash: Dato un messaggio m, deve essere impossibile risalire al messaggio originario m dall’output di H(m). Inoltre, deve essere facile e veloce per un calcolatore calcolare l’Hash del messaggio. Dato un messaggio Y deve essere computazionalmente impossibile[ 1 ] trovare un messaggio X tale che H(X) = Y. Proviamo a spiegarlo meglio: ipotizziamo ci sia un messaggio M, il cui Hash sia Y e quindi H(M)=Y. Quello che sottolinea il punto 2 è che deve essere difficile trovare un secondo messaggio X il cui Hash sia uguale a Y. Deve essere computazionalmente impossibile trovare due messaggi m1 e m2 diversi fra loro con H(m1) = H(m2). Dato che il digest ha una lunghezza finita, ci si aspetta che messaggi diversi possano avere Hash uguali. Quello che evidenzia questa proprietà, è che deve essere difficile trovare questi due messaggi m1 e m2, ovviamente più è grande l’output di un Hash, più è difficile che ciò si verifichi.  La differenza dal punto 2 sta nel fatto che in questo caso i due messaggi sono stati scelti da noi. Questo implica che se riuscissi a "violare" questa proprietà, potrei per esempio spacciarmi per un altro utente e usare il suo denaro. Vediamo ora un altro esempio: SHA256(’Bitcoin’) = B4056DF6691F8DC72E56302DDAD345D65FEAD3EAD9299609A826E2344EB63AA4SHA256(’bitcoin’) = 6b88c087247aa2f07ee1c5956b8e1a9f4c7f892a70e324f1bb3d161e05ca107b Come si può notare, una minima variazione nel messaggio iniziale produce un cambiamento radicale nell’Hash ottenuto in output. Perchè questo esempio? Le funzioni Hash vengono usate anche per verificare la correttezza di un messaggio. Infatti inserendo in input la medesima stringa, si avrà sempre il medesimo output. Come riportato dalla guida di Ubuntu, Quando si effettua il download di Ubuntu da internet, c'è la possibilità che il file non venga scaricato nel modo corretto e presenti degli errori. Questi errori possono compromettere la stabilità e/o il funzionamento di Ubuntu. Il programma md5sum è progettato per verificare l'integrità e l'autenticità dei dati usando l'hash crittografica a 128 bit MD5. Infatti, una volta scaricata la iso e il file MD5SUMS contenente l'Hash ufficiale, basterà ricalcolare l'Hash e confrontarlo. Digitando nel terminale il comando  md5sum -c MD5SUMS | grep ubuntu-14.04-desktop-amd64.iso, se non ci sono errori verrà restituito il messaggio: ubuntu-14.04-desktop-amd64.iso: OK Quando un utente effettua un pagamento, viene creata una transazione nel sistema dei Bitcoin. Data l’assenza di un ente centrale, come una banca, a fare da garante, la transazione deve essere verificata sei volte, cioè bisogna verificare che il mittente abbia effettivamente quella somma di denaro. La verifica avviene aggiungendo un nuovo blocco nella Block Chain, il quale conterrà la firma digitale del Hash della transazione precedente. In questo modo chi riceve il pagamento può controllare i diversi passaggi di proprietà della moneta trasferita verificando le firme presenti in ogni transazione. La modifica di una transazione non è quindi possibile poichè gli Hash non corrisponderebbero più. Crittografia asimmetrica La crittografia asimmetrica, conosciuta anche come crittografia a chiave pubblica e privata, è un tipo di crittografia dove ad ogni attore coinvolto nella comunicazione è associata una coppia di chiavi: una chiave pubblica, che può essere diffusa pubblicamente, ed una privata, che deve essere tenuta assolutamente nascosta. La caratteristica principale è che solo ciò che viene cifrato con la chiave pubblica può essere decifrato con la chiave privata associata, e viceversa. Ipotizziamo che Alice voglia mandare un messaggio a Bob. Lei userà la chiave pubblica di Bob Kpub, e genererà il messaggio cifrato. Quando Bob riceverà il messaggio cifrato, userà la sua chiave privata Kpriv per scoprire il contenuto del messaggio. Se C è quindi il messaggio cifrato, ed M il messaggio originale, risulta: C = encrypt(M, Kpub)M = decrypt(C, Kpriv) Firma digitale Con Firma Digitale si intende un mezzo che, grazie alla crittografia asimmetrica, consente di dimostrare l’autenticità di un messaggio. Come una firma su carta, una firma digitale per essere tale deve soddisfare le seguenti caratteristiche: Autenticità: il destinatario di un messaggio firmato può verificare che il messaggio non sia stato inviato da un’altra persona. Integrità: il messaggio non è stato manomesso. Non ripudiabilità: una volta inviato il messaggio, non si può negare di averlo fatto. Per quanto riguarda il sistema Bitcoin, per evitare che durante una transazione si subisca una frode viene eseguito questo algoritmo: Per inviare un messaggio firmato M: Si esegue l’Hash del messaggio: H = SHA256(M) Si cifra H con la chiave privata, per ottenere la firma: S = encrypt(H, Kpriv) Si invia la firma S insieme al messaggio M. Per verificare che la firma S sia valida per il messaggio M: Si esegue l’Hash del messaggio M: H = SHA256(M) Si decifra S con la chiave pubblica: H’ = decrypt(S, Kpub) Si verifica che H = H’. Se risultano uguali la firma è valida. Attacco a collisione Un attacco a collisione è un tipo di attacco in cui si cercano due messaggi in input, i quali producono lo stesso Hash in output. Come già sottolineato, è possibile che questo evento si verifichi, data la lunghezza finita dell'output delle funzioni Hash. Quando ciò si verifica, si dice che si ha una collisione. Quindi se un attaccante riuscisse a generare volutamente un indirizzo uguale a quello di un altro utente, l'attaccante potrebbe spendere il denaro dell'utente col medesimo indirizzo. Tuttavia ciò risulta essere computazionalmente improbabile. Infatti, per creare una collisione, significherebbe calcolare in media, 2^(160/2) valori Hash (ipotizzando un Hash di 160bit). Ad oggi, per calcolare tutti i possibili valori, si impiegherebbe un tempo troppo lungo (migliaia di anni). Lo scopo di questo articolo è stato quello di darvi alcune nozioni base che vi permetteranno più avanti di capire le fondamenta su cui sono stati costruiti i Bitcoin. La Crittografia è un mondo assai ampio e complesso, il quale non può essere riassunto in così poche righe. [1] Una serie di operazioni vengono definite computazionalmente impossibili o intrattabili quando per eseguirle è necessario un tempo lunghissimo (centinaia di anni) utilizzando il super computer più veloce attualmente esistente. Fonte: Introduction to Cryptography with Coding Theory

[TaskerTime] Gestione automatica della geolocalizzazione

Android dispone di tre modalità di Geolocalizzazione, a Basso Consumo, che utilizza solo la rete internet, solo GPS e ad Alta Precisione che utilizza entrambe le tecnologie. Ovviamente "maggior precisione" implica un maggior consumo di batteria, di conseguenza tendiamo a disattivare totalmente la Geolocalizzazione quando non ne abbiamo bisogno (Android tra l'altro, dalla versione 6.0 ha introdotto un comodissimo tile nel pannello notifiche per far questo). Così facendo però perdiamo qualsiasi informazione legata alla nostra posizione, come può essere il meteo, le notifiche di Google riguardanti il traffico, a volte addirittura il conteggio dei passi e dei tragitti che facciamo. La soluzione potrebbe essere quindi quella di impostarne la modalità manualmente di volta in volta, ad esempio attivando la modalità ad alta precisione quando utilizziamo Google Maps e impostando quella a basso consumo altrimenti. Soluzione però che ci costa qualche tap in più e risulta decisamente scomoda. E se vi dicessi che tutto questo è facilmente automatizzabile con Tasker? Ebbene sì, il tutorial di oggi parlerà proprio di come automatizzare la precisione del sistema di Geolocalizzazione di Android in modo da impostarne un comportamento personalizzato per-app. Per quasi un anno ho utilizzato il plugin per Tasker Secure Settings che permette di modificare determinate impostazioni di sistema grazie ai permessi di root. Solo ultimamente ho approfondito un altro plugin, AutoTools che, tra le altre cose, permette di modificare queste impostazioni senza root, previo un piccolo comando via ADB per fornirne i permessi sufficienti. Innanzitutto avremo bisogno quindi sia di Tasker che del plugin AutoTools. Una volta installato quest'ultimo dovremo fornirgli i permessi via ADB. Per fare questo dovremo prima abilitare questa interfaccia, acronimo di Android Debug Bridge, che permette di collegarsial dispositivo Android da PC via riga di comando, seguendo questi passaggi: abilitare il Menù Sviluppatore toccando ripetutamente la voce Numero Build (Build Number) nella pagina Impostazioni -> Informazioni Dispositivo abilitare il Debug USB dal Menù Sviluppatore appena sbloccato raggiungibile dalle Impostazioni installare ADB sul proprio PC A questo punto sarà sufficiente collegare il dispositivo al PC e digitare il comando adb shell pm grant com.joaomgcd.autotools android.permission.WRITE_SECURE_SETTINGS dalla shell. [ Maggiori informazioni sono disponibili alla pagina ufficiale dedicata ai permessi di AutoTools ] Passiamo ora al task vero e proprio che di per se è molto semplice. L'obiettivo è quello di collegare un'azione che modifica la precisione del GPS ad un evento di tipo Applicazione come è possibile vedere nell'immagine seguente. Per quanto riguarda l'utilizzo di plugin in Tasker il procedimento è tale e quale l'inserimento di un'azione "standard", la cui configurazione sarà delegata al plugin. Nel nostro caso avremo bisogno di un'attività di tipo AutoTools Secure Settings in cui imposteremo la Geolocalizzazione ad alta precisione come task in ingresso per il nostro evento e a basso consumo in uscita. Nell'esempio riportato avrete notato anche la presenza di azioni aggiuntive non trattate fin'ora. Si tratta di un'opzione che trovo molto comoda e che permette di modificare il timeout del display impostandolo a mezz'ora all'apertura delle applicazioni impostate e ripristinandolo a un minuto all'uscita da queste, in modo da non dover continuamente preoccuparmi di toccare lo schermo per mantenerlo attivo.

Ubuntu, il miglior modo per passare a Linux

Chi ha già dimestichezza con il mondo Linux oppure ha già una buona conoscenza di questo mondo darà per scontato alcuni dei prossimi passi che sono però necessari a chi invece non conosce affatto Linux e il suo meraviglioso mondo. Iniziamo spiegando cos'è Linux. In molti lo definiscono erroneamente un sistema operativo o una famiglia di sistemi operativi, così non è. Linux è un componente del sistema operativo, il kernel ovvero il nucleo del sistema operativo, che ha il completo controllo del sistema. Questa è una definizione molto semplificata delle funzioni di un kernel, che per essere spiegate appieno bisognerebbe dedicarci almeno un articolo a se stante.  Questo kernel è l'elemento base costituente tutte le distribuzioni Linux. La domanda che potrebbe sorgere succesivamente potrebbe essere: "cos'è una distribuzione?". In ambito informatico per distribuzione software si intende un certo numero di programmi che vengono distribuiti in un singolo insieme che nel nostro caso è un sistema operativo.  Per ricapitolare, Linux è un kernel utilizzato da numerosi sistemi operativi, tra cui quello che esamineremo oggi, Ubuntu. Questa distribuzione sviluppata da Canonical è tra le più utilizzate al mondo, anche se mancano dati certi. I fattori che hanno portato al successo il prodotto di Canonical sono molteplici ma ne vorrei identificare due che a mio parere gli hanno permesso di guadagnarsi una larga fetta di pubblico. Il primo è la facilità di utilizzo, specie alcuni anni fa avere un tool grafico per l'installazione non era cosa comune, cosa che avvicinava gli utenti meno "skillati". Inoltre l'interfaccia grafica, basata inizialmente su GNOME e successivamente sul progetto proprietario Unity è chiara ed intuitiva, permettendo di gestire praticamente tutto con un click del mouse, quasi dimenticandosi del terminale. Non a caso il motto di Ubuntu è “Ubuntu: Linux per esseri umani”. Il secondo motivo è l'enorme supporto della community che è il fattore determinante che la distingue rispetto ad altre distribuzioni. Se avete un problema di qualsiasi natura potrete entrare nel forum di Ubuntu trovando praticamente sempre qualcuno disposto a darvi una mano.  Ulteriore motivo che ha permesso una grande espansione di Ubuntu è l’essere una derivata di Debian. Ma cos’è Debian? Debian è una delle distribuzioni più “anziane” in circolazione, nata nel 1993, è composta esclusivamente da software open source. Nel 2004, Mark Shuttleworth ed il suo team di programmatori diedero il via al progetto Ubuntu forkando Debian. Da quella prima versione sono passati parecchi anni e Canonical ha sviluppato il suo sistema operativo rispettando sempre questi canoni, la libertà del software e la facilità d’uso. L’ultima versione di Ubuntu è la 17.04 nome in codice Zesty Zapus. Una particolarità che caratterizza il sistema è la gestione delle nuove versioni e dei relativi nomi. Viene rilasciata una nuova versione ogni sei mesi, tipicamente ad Aprile ed Ottobre. Il numero riportato nel nome della versione indica l’anno e il mese di rilascio (04 per la versione rilasciata in aprile e 10 per quella rilasciata in ottobre) che viene accompagnato da un nome in codice composto da due parole che iniziano con la stessa lettera dell’alfabeto. Quindi una volta installata la vostra Zesty Zapus avrete un sistema già pronto per essere usato, quanto meno nelle sue funzioni base. Saranno presenti vari programmi preinstallati come il browser Firefox, la suite per l'ufficio Libre Office, il ripruoduttore multimediale VLC e altri numerosi software. Questo permetterà all'utente di essere operativo da subito potendo in seguito completare e personalizzare l'installazione installando tutto ciò di cui a bisogno tramite il software center o quando avrete più dimestichezza attraverso il terminale. Inutile dire che il primo approccio per chi proviene da Windows e magari non ha dimestichezza con il PC potrebbe essere complicato, vi posso però assicurare che è solo questione di tempo entro una settimana (o anche meno dipende da persona a persona) inizierete ad ambientarvi e se sarete curiosi scoprirete un mondo davvero affascinante. In chiusura è giusto citare le distribuzioni derivate da Ubuntu, ovvero quelle distribuzioni che sono nate tramite lo stesso procedimento utilizzato da Ubuntu. Questi sistemi sono sviluppati da team indipendenti che apportano alcune modifiche al codice dando vita a distribuzioni a se stanti con le loro particolarità. In futuro faremo un focus sulle derivate di Ubuntu. "Microsoft ha la fetta più grossa del mercato dei nuovi PC desktop. Questo è un bug, e Ubuntu è concepito per risolverlo." - Mark Shuttleworth

Android e le notifiche push con Firebase

Firebase Cloud Messaging (FCM), successore di Google Cloud Messaging GCM, è un servizio che offre una soluzione alla messaggistica istantanea multipiattaforma. Offerto da Google permette, oltre alla gestione di cloud database, piattaforme di testing, crash reporting e autenticazione, di inviare messaggi push in modo del tutto gratuito e illimitato. Vediamo quindi come utilizzare FCM per implementare le notifiche push in un sistema composto da un server PHP e un'applicazione Android. Per quanto riguarda il lato applicazione, Android Studio ci viene in aiuto integrando la piattaforma Firebase (raggiungibile da Tools > Firebase) e con pochi click potremo connettere l'app al servizio e inserire le dipendenze mancanti nel nostro progetto. Sarà infatti sufficiente specificare le dipendenze per la compilazione nei due file build.gradle, importare com.google.firebase.iid.FirebaseInstanceId nella classe in cui andremo ad utilizzarlo e inserire il file google-services.json - che possiamo reperire dalla console di Firebase - sotto app/ .   A questo punto la configurazione dell'applicazione è terminata e il token identificativo di registrazione al servizio sarà raggiungibile attraverso la chiamata al metodo FirebaseInstanceId.getInstance().getToken(). Possiamo verificare il corretto funzionamento direttamente dal pannello di Firebase, dove, nella pagina Notifications, potremo creare manualmente delle notifiche da inviare alla nostra applicazione.   Per quanto riguarda invece la configurazione lato server, utile per automatizzare l'invio delle push in determinate occorrenze, come potrebbe essere la pubblicazione di un nuovo articolo, avremo bisogno di uno script in PHP che, prese in input la chiave per le API lato server e i token delle applicazioni, invii la notifica. Innanzitutto dovremo ottenere la API key per il server, che possiamo trovare nel pannello di gestione delle API di Google. Dovrebbero esserci tre chiavi con la dicitura (auto created by Google Service) tra cui anche la Server Key.   Il codice seguente permette di generare una notifica e "spedirla" all'applicazione specificando $title e $body come titolo e contenuto della stessa: $msg = array(    'body' => $body,    'title' => $title,    'vibrate' => 1,    'sound' => 1,);$fields = array(    'registration_ids' => $registrationIds,    'notification' => $msg);$headers = array(    'Authorization: key=' . API_ACCESS_KEY,    'Content-Type: application/json');$ch = curl_init();curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );curl_setopt( $ch,CURLOPT_POST, true );curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );$result = curl_exec($ch );curl_close( $ch );return $result; Dove API_ACCESS_KEY è la Server Key e $registrationIds sarà un array di stringhe contenente i token delle applicazioni registrate. Per completare la procedura e renderla funzionante manca soltanto la gestione dei token. Per farlo sarà necessario salvare nel database del server tutti i codici delle applicazioni registrate, che avremo ottenuto attraverso il metodo getToken() citato all'inizio. Sarà quindi sufficiente, lato applicazione, chiamare questo metodo ed inviare il token al server attraverso una richiesta GET o PUSH, che provvederà poi a salvarlo nel database e recuperarlo all'occorrenza per popolare $registrationIds.

L'angolo nerd app si aggiorna alla versione 1.0

A sei giorni dal lancio della prima versione pubblica, l'applicazione Android de L'angolo nerd si aggiorna alla versione 1.0 con importanti novità. La più interessante è sicuramente l'introduzione del servizio di notifica alla pubblicazione di nuovi articoli attraverso le Push Notifications, funzione che, attraverso la schermata di impostazioni raggiungibile dal menù a tendina, sarà poi possibile attivare o disattivare (attiva di default). Di seguito trovate il changelog completo riportante tutte le novità e le modifiche.   Changelog v1.0 Notifiche push Nuova voce Settings nel menù Rimossa dal menù la voce Privacy Policy Rimossi i cookie di profilazione presenti nel sito completo Rimosso il banner di notifica dei cookie Rimosse le pubblicità eccetto il banner sotto il titolo del singolo articolo Gestione dei link esterni (social links, sharing links ecc) Rimosse numerose dipendenze utili per il sito completo   N.B. Il caricamento iniziale, soprattutto al primo avvio, potrebbe essere sensibilmente più lungo. Questo è dovuto alla procedura di inizializzazione del servizio per le notifiche push, ma stiamo costantemente lavorando al miglioramento delle performance dell'app... abbiate pazienza! N.B.2 Nel caso in cui l'installazione dell'aggiornamento non dovesse andare a buon fine, la soluzione è disinstallare la versione precedente e installare la 1.0. Questo è dovuto a un probabile cambio di firma del file .apk.   DOWNLOAD cloud_download