Il miracoloso NodeJS

piattaforma Open Source event-driven

NodeJS – una piattaforma Open Source event-driven

Ok, ammetto che fino a non molto tempo fa mi ero quasi scordato di Javascript, nonostante fosse stato uno dei primi linguaggi da me studiati, nel lontano 1997, quando mi approcciai al mondo del web; negli anni successivi pero’, non essendo io uno sviluppatore, le tecnologie di gestione e deploy dei server web che dovevo gestire si erano spostate verso un grande quantitativo di linguaggi, in particolare per la parte back-end , passando cosi dal php, perl, python, java, ruby, lua etc……

Come stavo dicendo, per me javascript era rimasto in sordina come un linguaggio di scripting che intercorreva tra l’hmtl ed il css, nella composizione piu’ o meno dinamica di una pagina web ,prima che i pesi massimi sopra citati entrassero in campo per svolgere il duro lavoro.

Poi, un giorno, a ciel sereno……BOOOOOOOMMMM ! scopro l’esistenza di NodeJS, ed iniziai a chiedermi a cosa si dovesse tutto l’interesse di cui stavo leggendo; scopro quindi che NodeJS e’ una piattaforma Open Source event-driven per l’esecuzione di codice JavaScript Server-side, costruita sul motore V8 di Google Chrome. Mmmmhhhh, ok bene, ma quindi? cosa fa?

Ebbene questa piccola rivoluzione creata da Google consente agli sviluppatori di realizzare web application con JavaScript non più solo lato client, ma anche sfruttandolo come linguaggio di programmazione lato server.

E gli sviluppi sono davvero moltissimi, cosi tanti che mettere un’elenco sarebbe noioso e stancante ma, tanto per farne uno molto odierno, con NodeJS possiamo, ad esempio, realizzare dei ChatBot.

Ma qual’e’ dunque il funzionamento che lo rende cosi appetitoso? Innanzitutto partiamo dal dire che Node funziona con una logica a eventi: quando un evento viene generato, allora viene eseguita un’azione. Grazie a questa tecnica non bisogna attendere che le istruzioni precedenti siano terminate, rendendo cosi il tutto molto veloce.

Nella pratica, non c’e’ bisogno di sapere come funziona il V8 per poter utilizzare NodeJS, basti sapere che e’ l’interprete javascript piu’ veloce al mondo, poiche’ e’ stato altamente ottimizzato utilizzando un tipo di programmazione JIT (Just In Time), che trasforma rapidamente il codice javascript in linguaggio macchina.

Ma la cosa che, almeno a parere personale, mi ha maggiormente colpito, e’ stato quello che possiamo chiamare come “Modello non bloccante” , questo si basa sul concetto degli eventi, ma per meglio chiarire dovremmo spiegare un minimo la differenza tra modello bloccante e NON bloccante.

Immaginiamo di dover creare un programma che ci permetta di scaricare un file da internet e che alla fine dell’esecuzione del download ci mostri un messaggio.

Bene, con il modello classico (bloccante) basato sulla programmazione sincrona potremmo schematizzare il processo nel seguente modo:

  • Scarica il file
  • Mostra il messaggio
  • Fai qualcos’altro

Ci aspetteremmo quindi che le azione vengano eseguite in ordine, leggendo le operazioni da eseguire dall’alto verso il basso.

Nel sistema asincrono di NodeJS invece le operazioni verranno svolte nel seguente modo:

  • Scarica file
  • Fai qualcos’altro
  • Mostra il messaggio

Perche’ questa diversita’ nell’esecuzione rende il tutto piu’ veloce e performante? Beh perche’ mentre il sistema effettua il download del file, il programma non rimane in attesa che il processo venga portato a termine ma anzi nell’attesa il programma esegue altre operazioni.

Il codice in oggetto avra’un aspetto tipo questo:

request(‘http://www.site.com/file.zip’, function (error, response, body) {
console.log(“Download completato!”);
});

console.log(“Mentre aspetto eseguo il resto del codice…”);

Quello appena descritto qui sopra e’ un’esempio di procedura di callback 

Ok ma se non fosse ancora del tutto chiaro, proviamo ancora a spiegare perche’ le callback sono cosi importanti, procediamo con l’esempio di prima ed aggiungiamo una difficolta’; adesso i file da scaricare sono diventati due, dunque nel sistema sincrono il programma procederebbe nel seguente modo:

  • Scarico primo file
  • Attendo che finisca
  • Scarico secondo file
  • Attendo che finisca
  • Mando messaggio

La grande differenza in questo esempio sarebbe che con NodeJS verrebbero lanciati entrambi i download, nello stesso momento, permettendo gia cosi un piu’ veloce download e, nel frattempo il programma e’ in grado di svolgere eventuali altri compiti. Ma questo come dicevo e’ soltanto un esempio, invece di un download multiplo, potrebbero essere delle query ad un DB, o la richiesta di dati a servizi esterni tramite API (Facebook, Twitter).

Pensiamo quindi ad un sistema come Facebook, che riceve X richieste di Like ogni tot secondi e vengono cosi aperti N operatori che devono attendere il loro turno per fare la modifica (del like) consumando comunque energie anche mentre sono fermi in attesa; invece NodeJS nella stessa situazione di richiesta di “reaction” sul sisto di FB (like o altro) si comporterebbe nel seguente modo:

metterebbe tutte le richieste in ordine di arrivo, prenderebbe la prima e, vedendo che si tratta di una sfilza di input le inserirebbe all’interno del sistema e, una volta capito che si tratta di stesse azioni (ad esempio che aggiungono un Like) che devono contattare un DB, NodeJS contatta il DB e invece di attendere per effettuare ogni singola modifica, aggancia alla richiesta una callback, per ogni richiesta di modifica, tutti uno dietro l’altro. Quando il DB finisce la prima modifica scatta la callback e NodeJS restituisce all’utente l’avvenuta modifica della pagina e cosi via, gestendo quindi con un solo operatore le N richieste di modifica del Like invece di crearne uno per ogni richiesta e parcheggiandoli tutti in attesa della loro singola modifica. Quindi con un server (magari anche un container con Docker) e con poche risorse possiamo gestire un’enorme quantita’ di richieste al secondo.

Inoltre NodeJS usa come sistema di pacchetti e librerie l’NPM, ma di questo fantastico sistema di librerie parleremo in un’altro articolo.

Nel prossimo articolo su NodeJS parleremo anche di 5 nuovi framework ottimi per chi si occupa di sviluppare.

#NodeJS

 

Google Titan Security Key

Google Titan Security Key

SICUREZZA SICUREZZA SICUREZZA…….

La parola piu’ utilizzata e letta su ogni articolo, anche non a carattere tecnico, che si intenda la sicurezza nelle citta’, oppure quella sui social media, ma ancor di piu’ il peso di questa parola lo si nota attorno a tutto cio che gravita’ sui nostri device, sia quelli personali, sia quelli che utilizziamo quotidianamente in ufficio.

Questo perche’ oggi la SICUREZZA colpisce/interessa tutti in ogni istante della nostra vita. Ogni giorno usiamo , centinaia di volte al giorno, device tecnologici di ogni tipo (SmartTV, SmartPhone, IoT, Router, AccessPoint….) e per ognuno di questi, teoricamente, dovremmo poter essere in grado di sapere cosa e come fare per proteggere i nostri dati e la nostra identita’ tecnologica, che sempre di piu’ rappresentera’ noi stessi, chi siamo, cosa facciamo, come lo facciamo…….

Ma nella realta’ chi di noi ha veramente le conoscenze ed il desiderio di doversi occupare quotidianamente della propria sicurezza; la maggior parte di noi stenta a ricordarsi di cambiare la password dell’account di posta oppure dell’utenza per l’home banking etc……, tutto questo perche’ preferiamo pensare che non saremo certo noi a diventare vittime di un qualsiasi hacker che sicuramente ha altri interessi piu’ importanti. Purtroppo non e’ cosi, oggi giorno siamo tutti collegati e la singola persona, il dipendente “qualunque”, potrebbe essere l’anello debole della catena che permette all’hacker di entrare nell’infrastruttura che vuole colpire e da li, piano piano scalare fino ad avere cio che gli serve…..

Il discorso e’ troppo lungo, ed e’ gia stato trattato in altri articoli, nella sezione (manco a dirlo) 😉 “sicurezza” di questo blog ed altri arriveranno. Fatto sta che per poter aumentare (garantire e’ una parola che non esiste, nulla e’ sicuro al 100%) il nostro livello di sicurezza possiamo per lo meno attivare, li dove ci e’ possibile, quelle funzioni denominate accesso a due fattori, sui nostri account di posta, sul nostro profilo FB …etc….

L’accesso a due fattori (2FA) esiste gia da un po’ di tempo ed è considerato uno dei metodi più sicuri per proteggere i propri dati online da eventuali malintenzionati. Tuttavia, neanche questo sistema può considerarsi impenetrabile ed anch’esso si evolve, da una prima modalita’ tramite invio di codice SMS, sino alla sua versione migliore tramite l’uso di Security Key, tra le piu’ usate ad esempio la Yubico

Anche questa tecnologia deve comunque tenersi sempre aggiornata, ed e’ notizia di questi ultimi giorni che anche Big G ha creato una Security Key dal nome “Titan Security Key“, in pratica e’ stata annunciata come una chiavetta per autenticarsi con la massima sicurezza ed a prova di phishing (ad oggi una delle vulnerabilita’ peggiori sul web).

In soldoni, la Titan Security Key, che inizialmente era disponibile solo per i clienti Cloud americani, oggi e’ in vendita sul Google Store per chiunque la volesse acquistare.
E’ un dispositivo di sicurezza utilizzato per gli account che sfruttano il doppio fattore di autenticazione, che permette di autenticare gli accessi tramite Bluetooth o USB.

Il dispositivo funziona con i browser più diffusi (incluso chiaramente Chrome) e può essere sfruttato all’interno di un crescente ecosistema di servizi che supportano lo standard FIDO, uno standard di autenticazione compatibile con numerose app e browser (gli account Google supportano le chiavi di sicurezza e altri accessi FIDO gia dal 2014), di conseguenza, il dispositivo può essere utilizzato anche per accedere a servizi diversi da Google (Facebook, Twitter, Dropbox, Gmail….. e molti altri ), anche se questi potrebbero non essere in grado, in questo momento, di usufruire appieno del firmware speciale sviluppato da Google ed inserito nelle Titan Security Key.

Come accennato prima, esistono due versioni della Titan Security Key di Google: una è USB mentre l’altra e’ dotata di connettività Bluetooth.
In entrambi i casi la chiavetta andra’ accoppiata con i propri account seguendo le indicazioni fornite da Google all’interno della confezione.

La versione USB, dunque la chiavetta fisica in se, è di piccole dimensioni, mentre la seconda versione, altrettanto piccola, essendo basata su tecnologia Bluetooth, a differenza della precedente non richiede l’inserimento fisico nel dispositivo (PC/Mac), ma è sufficiente la pressione del pulsante, presente su una delle facce, ed un accoppiamento via/Bluetooth per poter inviare i token di accesso/login nel momento desiderato.
La funzionalità del Token di sicurezza è la medesima della versione USB e, nella confezione è fornito un cavetto USB utile per la configurazione iniziale.

Ad oggi, dalle stime di Google soltanto il 10% degli account Google hanno attivato il sistema di autenticazione a due fattori sui relativi device. Una percentuale davvero bassa e sicuramente molte persone non gradiranno dover pagare un’oggetto per aumentare la loro sicurezza, poiche’ ci si aspetta che essa debba essere garantita e gratuita.

Molti ancora non vorranno doversi portare (seppur davvero piccolo e leggero) dietro l’ennesimo device/oggetto; ma al momento e’ un piccolo prezzo da pagare nella fase di adeguamento che subira’ Internet come lo conosciamo oggi, poiche’ quando nacque alla fine degli anni 60 (parlando di ARPANET) i protocolli creati all’inizio e che ancora sostengono il core dell’infrastruttura che chiamiamo Internet non erano pensati per i livelli di sicurezza richiesti oggi.

Concludo aggiungendo che per coloro che usano molti dei servizi offerti da Google per il proprio lavoro professionale, i token di sicurezza Titan sono compatibili con il Programma di protezione avanzata, il più potente strumento per la sicurezza offerto da Google per preservare gli Account Google (come giornalisti, attivisti, dirigenti aziendali e team di campagne elettorali) dal rischio di attacchi mirati.

#HASHTAG come si usa!

Che cosa e' un hashtag

Che cosa e’ un hashtag

Negli ultimi anni tutti noi siamo stati coinvolti, chi piu’ chi meno, dall’invasione dei social network, insieme ai social network ha spopolato un “carattere speciale”: il (cancelletto).
Questo simbolo, che d’ora in poi chiameremo tag, è comparso per la prima volta sulla chat “Internet Realy Chat” allo scopo di etichettare gruppi ed argomenti, ma la sua popolarità è legata sicuramente in modo molto piu’ forte alla nascita di Twitter, che li ha usati fin da subito come modo per contrassegnare le parole chiave, raggruppare i messaggi (tweet) e indicizzare i contenuti in modo semplice. Facebook invece solo dal 2013 ne ha deciso finalmente l’introduzione.

L’hashtag è una funzionalità semplice, tanto semplice quanto difficile da utilizare in modo corretto, insomma non è pane per tutti, però conoscerlo meglio aiuta ad utilizzarlo meglio, soprattutto se lo si usa per descrivere parole chiave o topic in un Tweet ed il suo intento principale è quello di categorizzarle/i ed aiutare a mostrarle/i nel motore di ricerca di Twitter.

Ad esempio, se su Facebook si scrive un aggiornamento di stato con dentro#NuovoHashtag, il post finirà all’interno di un feed dedicato, consultabile da chiunque all’indirizzo : https://www.facebook.com/hashtag/NuovoHashtag.

COSA COMPORTANO GLI HASHTAG
Prima di iniziare ad usare gli hashtag è bene essere a conoscenza di alcune implicazioni che il loro uso comporta:

  • – su Twitter se si usa un hashtag in un account pubblico, chiunque compia una ricerca per l’hashtag appena inserito potrà trovare il post nel quale è contenuto;
  • – una volta che un hashtag è stato inserito non può più essere rimosso o controllato e quindi può trasformarsi in un successo, ma anche in un colossale flop;
  • – su Facebook cliccando su un hashtag è possibile visualizzare solo il post dei propri amici o di chi ha impostato un livello di privacy pubblico. Quindi chi vuole essere rintracciato deve pubblicare un hashtag in un messaggio pubblico;
  • – su Facebook gli hashtag sono cliccabili anche se sono stati pubblicati tramite un altro servizio (Es. Instagram, Twitter).

 

PERCHE’ USARE GLI HASHTAG
Gli hashtag si usano principalmente per seguire o tracciare un evento oppure per incrementare la propria popolarità. Oppure è possibile usare gli hashtag su Facebook per visualizzare tutti i post che sono attinenti o legati ad un argomento, infatti Facebook trasforma automaticamente i tag in link.
Con un click è possibile visualizzare una lista di post di altre persone in cui il tag è contenuto (differenza di Facebook rispetto a Twitter).

COME USARE HASHTAG
Non esistono delle regole precise per usare gli hashtag, ma solo dei piccoli accorgimenti che ne permettono un uso efficace e che potrebbero renderli molto seguiti se non addirittura virali.
La prima cosa da fare è essere molto specifici e attinenti: se si vuole esprimere la propria opinione su un argomento pubblico l’hashtag deve essere il più correlato possibile all’argomento stesso.
Se, ad esempio, si vuole parlare di Beppe Grillo molto semplicemente si può utilizzare l’hashtag #beppegrillo oppure #grillo e così via.
Una cosa sicuramente da non fare è quella di non “farsi prendere la mano” e inserire troppi hashtag tutti insieme: il numero consigliato è compreso tra uno e tre. Più si è stringati più si risulta chiari e specifici.
Per essere ulteriormente sicuri del successo del proprio post è meglio usare hashtag già affermati piuttosto che cercare di inventarne uno nuovo (no ai neologismi).
L’hashtag non deve essere usato solo perché di moda, ma sarebbe l’ideale se fosse inserito in un contesto, buona norma sarebbe includerlo in una frase che ne chiarisca l’utilizzo, in modo da avere una comunicazione migliore: NO: #biscottoallacannella, SI: Sto mangiando un #biscottoallacannella in macchina.

 

Dynamic DNS con Duck

Dusck DNS

Dusck DNS

Il DNS Dinamico o DDNS, è una tecnologia che consente di associare un’indirizzo DNS ad un’indirizzo IP dinamico, solitamente un indirizzo IP privato di utenza internet domestica.
Questa funzionalità ci consente di mantenere uno stesso indirizzo pur avendo una connessione con IP variabile, consentendoci quindi di poter accedere da remoto al nostro sistema senza dover utilizzare un’indirizzo IP statico.

Duck DNS è un servizio web gratuito (basato su Amazon EC2) che ci consente di avere il nostro DNS Dinamico correlato al nostro indirizzo IP; una volta creato dovremo impostarlo nel nostro router (nella maggior parte dei router è disponibile questa opzione) , impostando le regole di PortMapping, in maniera tale da consentici l’accesso da remoto al nostro sistema.

Il team The Fan Club (noto per lo sviluppo di Grive Tools il miglior client per Google Drive per Linux) ha creato il Duck DNS Setup, un semplice script che ci consente di impostare correttamente Duck DNS in maniera tale da segnalare eventuali cambiamenti del nostro indirizzo IP.

Duck DNS Setup è disponibile in due versioni, una a riga di comando e l’altra con interfaccia grafica (richiede di avere installato il pacchetto zenity cron e curl sulla nostra distribuzione), inoltre il tool è disponibile anche per sistemi quali Apple Mac OS X e Windows.
Lo script si occupera’ anche di andare ad aggiornare automaticamente il nostro indirizzo IP in Duck DNS ogni 5 minuti.

– INSTALLARE DUCK DNS 
Prima di procedere con l’installazione di Duck DNS Setup dovremo procedere alla creazione di un’account sul sito Duck DNS , e per farlo ci basta collegarci sulla pagina indicata e cliccare in alto su Login in Twitter, Facebook, Reddit o Google. Una volta effettuato il login dovremo creare un nuovo indirizzo correlato al nostro IP, che avra’ una forma del tipo:

http://<nome scelto>.duckdns.org

Una volta creato un’account bastera’ scaricare la versione a riga di comando da QUI ( Duck DNS Setup – Linux/OSX Command Line) o con interfaccia grafica ( Duck DNS Setup – Linux GUI) da questa pagina.

Per la versione di Duck DNS Setup a riga di comando basta estrarre il file .tar.gz e spostare il file duck-setup.sh nella home e da terminale digitare:

chmod +x duck-setup.sh
./duck-setup.sh

Una volta lanciato lo script ci verrà chiesto di inserire l’indirizzo Duck DNS associato al nostro IP (precedentemente creato) e successivamente il lungo codice Token, assegnato sulla pagina di creazione del dominio, come verifica;
al termine ci verrà confermata l’attivazione di Duck DNS sul nostro sistema

Per rimuovere Duck DNS Setup basta digitare:

./duck-setup.sh remove

oppure

./duck-setup-gui.sh remove

e confermiamo la rimozione

Twemproxy il proxy per Memcached

twemproxy2

Twemproxy (repository GitHub) è un proxy server che consente di ridurre il numero di connessioni aperte verso un server Memcached o Redis. Per cosa può essere utile questo strumento?

 

 

Le caratteristiche principali sono :

– ridurre il numero di connessioni al cache server agendo come un proxy;

– sharding di dati automatico tra più cache server;

– supporto per l’hash con diverse strategie e funzioni di hashing;

– configurabile per disabilitare i nodi caduti;

– esecuzione di istanze multiple, consentendo al client di connettersi al primo proxy server disponibile;

– pipelining e batching di richieste con risparmio di round-trip;

– configurabile per disabilitare i nodi non più funzionanti, e richiamarli successivamente, dopo un po’ di tempo;

Twemproxy è stato reso open source da Twitter (che lo ha sviluppato per le proprie esigenze) all’inizio del 2012, con il supporto a memcached, e recentemente ha aggiunto anche il supporto a Redis. Twitter fa uso estensivo dei cache server ed il sistema sul quale gira Twemproxy, per Twitter, è di dimensioni impressionanti; immaginate che i sistemisti devono gestire centinaia di cache server, che a loro volta amministrano svariati TB di dati ciascuno per oltre trenta servizi diversi, in-memory, inclusa la memorizzazione dei tweet. Parliamo di almeno due milioni di miliardi di query al giorno, ossia più di ventitré milioni di query al secondo, per un’infrastruttura che, peraltro, continua a crescere in maniera esponenziale.

Leggi anche articolo (“Ottimizzazre grazie a Memcached“)