Visualizzazione post con etichetta Software. Mostra tutti i post
Visualizzazione post con etichetta Software. Mostra tutti i post

venerdì 23 ottobre 2020

Git - Domande e risposte per valutare le tue competenze

Come ottenere il badge di Linkedin©

Vuoi che le tue competenze Git vengano verificate e certificate?

Ti stai preparando per un colloquio di lavoro?


Vediamo se posso aiutarti. Di seguito riporto alcune domande estrapolate dal mio esame per la certifica del software di controllo versione Git¹. Linkedin© assessment sono quiz a risposta multipla per valutare le tue competenze. Studiare è importante perché i quiz a cui sei sottoposto non sono banali, sono a tempo e se non si raggiunge il settanta per cento se ne riparla dopo tre mesi. Sono sicuro che troverai interessanti ed utili le seguenti domande ma considerale solo un punto di partenza e approfondisci l'argomento prima di accettare la sfida o se devi avere un colloquio di lavoro!


Ecco cosa ti aspetta all'esame di Git: domande e risposte


🙈💪💥



1- Come si visualizza l'elenco dei file che sono stati modificati o aggiunti ad uno specifico commit?
  • Si usa il comando "diff-tree" con l'hash di commit


2- Nel caso in cui hai fatto vari commit per una singola modifica o per una nuova funzionalità introdotta, qual è il metodo migliore per ristrutturare o rimodellare la storia dei commit?
  • Si effettua lo "squash" di tutti i commit correlati in uno solo, singolo e coerente


3- Un "push" verso un repository remoto invia anche i tags?
  • No, un push verso un repository non i invia anche i tags.


4- Dove sono memorizzati i files prima di fare il commit nel repository locale?
  • I files sono memorizzati nell'area di staging


5- La prima volta che hai fatto un push verso il repository remoto hai usato il comando git push -u origin master successivamente quale comando abbreviato puoi usare?
  • Puoi usare il comando abbreviato git push


6- A cosa serve il comando git rebase -i HEAD~5
  • Serve a visualizzare gli ultimi 5 commit e modificarli con il comando squash o fixup


7- A cosa serveno i comandi git reset –hard HEAD~5, git merge –squash HEAD@{1}
  • Il primo serve a resettare il ramo di commit indietro prima degli ultimi 5 commit
  • Il secondo effettua lo sqaush in un singolo commit


8- Come si crea un comando personalizzato nel tuo ambiente git?
Si crea un alias nel git file config


9- Quale comando si usa per modificare il precedente commit?
git commit –amend


10- Come si definisce o caratterizza la struttura dei commit?
Ogni commit è un data snapshot


11- Se usi questo comando git clone https://github.com/egigi/GitSample.git cosa succede?
Viene clonato o copiato il progetto remoto nella directory locale 'GitSample'


12- Hai fatto il merge e successivamente il commit di due rami o branch. Cosa ti conviene fare ulteriormente per tenere la struttura organizzata?
Elimino il ramo di cui ho fatto il merge con il comando git branch -d <branch name> 


13- A cosa serve il comando git rm –cached file.py  che impatto ha sull'area di staging?
Il file.py viene rimosso dall'area di stage e le sue modifiche non vengono più tracciate

14- Stai modificando un file ma all'improvviso in produzione si accorgono di un bug in un altro ramo. Cosa fai per salvare il lavoro corrente senza fare il commit?
Puoi usare il comando git stash per salvare il file corrente, vai al ramo che contiene il bug e risolvi il problema, fai il commit ed infine ritorni a lavorare nel primo ramo stashed.  


15- Come puoi unire commit multipli senza usare git merge --commit?

Puoi usare il comando ... wip


¹ Git è un software di controllo versione distribuito utilizzabile da interfaccia a riga di comando, creato da Linus Torvalds nel 2005. Git nacque per essere un semplice strumento per facilitare lo sviluppo del kernel Linux ed è diventato uno degli strumenti di controllo versione più diffusi. Wikipedia


martedì 31 marzo 2020

NI TestStand™ - A cosa serve? Breve panoramica!

Logo NI National Instruments™
 "TestStand è un ambiente di gestione di test avanzato e pronto all'uso che ti permette di sviluppare rapidamente sistemi di test automatizzati e di validazione."
Logo NI TestStand™

  • Introduzione
  • Introduzione a NI TestStand™
  • Panoramica dell'editor NI TestStand™
  • Integrare  NI TestStand™ nei sistemi aziendali
  • La GUI per gli opertori di produzione
  • Conclusioni

Introduzione

La realizzazione di un prodotto ad alto contenuto tecnologico, come ad esempio un apparato per telecomunicazione, spesso impiega vari team per la progettazione. Ogni team potrebbe anche lavorare in un continente diverso e potrebbe utilizzare diversi tools per la validazione del progetto e il raggiungimento dell'obbiettivo: verificare che il prodotto funziona secondo le specifiche. Chi ha validato il prodotto ha probabilmente usato routine scritte in Python, chi invece ha usato librerie scritte in C#,  chi LabVIEW, ognuno il suo strumento preferito insomma! Dopo i primi prototipi si avvicina il momento di andare in produzione e vendere al mercato prodotti che rispettano i requisiti di progettazione e di fabbrica. A questo punto, ma anche prima volendo, entra in gioco TestStand di National Instruments™ , che può riutilizzare i lavori di validazione dei vari teams di progettazione e inserirli in un unico motore semplice ed automatico ideale per la fabbrica. Vediamo perché..!


sabato 15 dicembre 2018

Testing o Collaudo del Software

 

Cos'è il Testing o Collaudo del Software?

Vi è mai capitato di imbattervi in una offerta di lavoro e tra i requisiti è richiesto il Testing del Software? Scommetto che molti hanno pensato: "Ah, che bello! Vado a giocare a Candy Crush tutto il giorno ahahah ☺". Purtroppo non è così: il Collaudo del Software o Testing del Software è un insieme di attività necessarie affinchè si produca software di qualità riducendo al minimo il rischio di malfunzionamento del sistema o componente software.


Special thanks *


A seguire ci sono gli appunti di studio dell'International Software Testing Qualification Board  ISTBQ basati sul Syllabus Livello "Foundation". Tutto il testo a seguire è una semplificazione ma non troppo del suddetto Syllabus. Se avete intenzione di studiare sul mio blog non lo fate...! Vi consiglio di leggere le mie note e poi approfondire sul testo originale. Partiamo...

Quali sono gli obiettivi tipici del testing?

Per ogni sistema software, gli obiettivi del testing possono includere:
  • La valutazione dei requisiti(1), le user story(2), la progettazione e del codice
  • La verifica che tutti i requisiti specificati siano stati soddisfatti
  • La validazione dell'oggetto di test in modo da assicurarsi che funziona come si attendono gli utenti e gli stakeholder
  • L'aumento della fiducia in termini di miglioramento del livello di qualità dell'oggetto testato
  • La prevenzione e la ricerca di failure e difetti
  • L'informazione degli stakeholder circa la qualità dell'oggetto di test in modo che essi possano prendere decisioni ragionate
  • La riduzione del rischio che si produca e si rilasci software di qualità inadeguato in ambiente operativo
  • Il rispetto dei requisiti in modo che gli standard contrattuali legali vengano rispettati

Qual'è la differenza tra il testing ed il debugging?

Il testing è l'attività che puo' mostrare failure causate da difetti del software.

Il debugging è l'attività che trova, analizza e corregge i difetti trovati dal testing. Dopo il debugging c'è ancora un'attività di testing confermativo che verifica se l'attività di correzione effettuata durante il debug abbia effettivamente risolto il problema evidenziato durante la prima fase di testing.


Perché il Testing è Necessario

Nell'ottica di ridurre il rischio di failure durante il funzionamento di un sistema (che può essere anche vitale se si pensa al software di controllo della velocità di un'auto), occorre testare in modo rigoroso componenti e sistemi software ma anche la documentazione. Ogni volta che si riscontra un difetto e lo si corregge miglioriamo la qualità del software. In determinati settori o per esigenze contrattuali, è una fase indispensabile del processo di produzione stesso.

Esempi del perché il testing è necessario 

  • Per evitare rilasci in esercizio di software affetto da difetti
  • Per prevenire failure in esercizio
  • Per essere sicuri che le esigenze degli stakeholder siano soddisfatte
  • Per contribuire al successo dello sviluppo
  • Per migliorare la manutenzione del software

Relazioni fra testing e quality assurance

La quality assurance (o garanzia della qualità o QA) è correlata al testing ma non è la stessa cosa.
La gestione della qualità all'interno di un'azienda comprende varie attività tra cui la garanzia della qualità e il controllo della qualità.

La garanzia di qualità si raggiunge attraverso l'esecuzione corretta di appositi processi di produzione. Ciò determina un prodotto di qualità superiore e previene difetti di produzione.

Il controllo di qualità comprende anche le attività di testing necessarie al raggiungimento di adeguati livelli di qualità.

Come il testing contribuisce in termini di qualità

Si contribuisce attraverso le attività tipiche del testing. Per citarne alcune:
  • Valutazione dei requisiti, delle user story, della progettazione, del codice
  • Esecuzione del sistema o del singolo componente per scoprire eventuali failure
  • Identificazione del difetto che ha causato la failure attraverso il debugging

Distinzione tra errore, difetto e failure

  • L'errore introduce un difetto
  • Un difetto può causare una failure
  • Una failure è un malfunzionamento
Tutto parte dagli errori che si possono verificare per varie ragioni:
  • Vincoli di tempo, ad esempio una stima errata
  • L'uomo è infallibile ed è quindi inevitabile l'errore umano
  • Il team di sviluppo non è adeguatamente qualificato o è inesperto
  • Inadeguata comunicazione tra i partecipanti al progetto
  • Complessità del progetto
  • Malintesi tra le interfacce tra i vari sistemi che devono interagire
  • Tecnologie nuove non ancora adeguatamente conosciute
Ma le failure si possono presentare anche per cause non dovute al codice ma a fattori ambientali
  • Radiazioni
  • Campi elettromagnetici
  • Inquinamento
  • Temperatura
I fattori ambientali appena elencati possono modificare le condizioni dell'Hardware causando difetti del Firmware e di conseguenza una failure a livello di Software

Durante la fase di test si possono avere falsi positivi e falsi negativi.
  • falsi positivi sono segnalati come difetti ma in realtà non lo sono
  • I falsi negativi sono test che non rilevano i difetti che avrebbero dovuto rilevare
I falsi positivi o negativi possono verificarsi a causa di un errato modo di eseguire il test o a causa di difetti nei dati di test, all'ambiente di test o altri motivi. 

Distinzione tra root cause, difetti, ed effetti

  • Root Cause: il product owner non ha adeguati skills circa il calcolo degli interessi
  • Difetto principale: il product owner scrive una user story ambigua per il calcolo degli interessi
  • Difetto: è la riga di codice scritta in base alla user story che determina la failure
  • Failure: è in questo esempio il pagamento di interessi errati ai clienti della banca
  • Effetti: i clienti si lamentano perché ricevono un errato tasso di interessi.

I sette principi del testing

  1. Il testing mostra la presenza di difetti ma non può provarne l'assenza. Anche se nessun difetto viene trovato non significa che il software sie privo di difetti.
  2. Il testing esaustivo è impossibile tranne per casi banali. In questi casi è necessario usare l'analisi del rischio, le tecniche di testing e le priorità per decidere dove concentrare gli sforzi 
  3. Il testing anticipato permette di risparmiare tempo e denaro infatti ciò permette di individuare tempestivamente i difetti (ad ogni livello) aiutando quindi ad evitare modifiche successive in caso di errori che potrebbero essere anche costose e lunghe in base alla gravità.
  4. I difetti tendono a formare cluster(3) infatti solitamente un numero limitato di moduli è quello che contiene i difetti. Indicazione importante per l'analisi di rischio e per concentrare l'effort del test in modo specifico e mirato.
  5. Attenzione al paradosso pesticida. Se si usa sempre lo stesso test e sempre la stessa base dati si rischia di non rilevare più difetti. Per tanto è necessario a volte modificare sia la base dati che riprogettare il tipo di test. 
  6. Il testing è dipendente dal contesto. Un software safety-critical viene testato in modo diverso da una app per e-commerce o da un progetto Agile.
  7. L’assenza di errori è una falsa credenza anche se alcune organizzazioni sperano nel buon lavoro dei tester, ciò è impossibile! Un ottimo lavoro non garantisce comunque il successo di un sistema.

Il Processo di Test

Esistono un insieme di attività tipiche per raggiungere l'obiettivo del test ma non esiste un processo unico ed universale per il testing del software. Il processo di test è definito dalle attività da eseguire. In base a come, quali e quando queste attività sono scelte ed implementate, si determina un adeguato processo di test.

L’impatto del contesto sul processo di test

Il contesto influenza il processo di test. Tra i fattori di contesto che possono determinare il processo di test possiamo elencare i seguenti:
  • Il modello di ciclo vita e le metodologie dello sviluppo software
  • I livelli di test e i tipi di test adottati
  • I rischi sia del prodotto che del progetto
  • Il dominio del business
  • I vincoli operativi: budget e risorse, tempistiche, complessità, requisiti contrattuali e normativi
  • Le politiche e le pratiche organizzative
  • Gli standard interni ed esterni richiesti
Sarebbe buona pratica che la base dei test, abbia criteri di copertura definiti e misurabili in modo da poter dimostrare attraverso i KPI (key performace indicator) il raggiungimento degli obiettivi del testing del progetto/sistema software.

Supponiamo di avere una lista di requisiti e una lista di smartphone supportati dall'app che dobbiamo realizzare. Ogni requisito ed ogni smartphone fanno parte della base di test. 
I criteri di copertura richiedono, ad esempio, che occorre effettuare almeno un caso di test per ciascun elemento sia requisiti che smartphone in modo da indicare agli stakeholder che i requisiti sono stati soddisfatti e se sugli smartphone sono state riscontrate failure.

Descrivere le attività di testing e i rispettivi compiti nel processo di test

Un processo di test è costituito da vari gruppi di attività. A seguire i gruppi di attività principali:
  • Pianificazione dei test
  • Monitoraggio e controllo dei test
  • Analisi dei test
  • Progettazione dei test
  • Implementazione dei test
  • Esecuzione dei test
  • Completamento dei test
L'implementazione delle suddette attività, benché portano a pensare ad una implementazione sequenziale, spesso avviene in maniera iterativa.

Pianificazione dei test
La pianificazione del test comprende tutte le attività che definiscono gli obiettivi del test e l'approccio per soddisfarli nell'ambito del contesto esistente. Ad esempio specificando tecniche e test idonei e schedulando i test per rispettare le scadenze. I piani di test possono essere rivisti in base ai feedback ed alle attività di monitoraggio e controllo.

Monitoraggio e controllo dei test
Il monitoraggio dei test prevede il confronto degli avanzamenti rispetto al piano attraverso le metriche definite dal piano di test.
Il controllo dei test è necessario per poter adottare le azioni necessarie a soddisfare gli obiettivi del piano di test.
Entrambi, monitoraggio e controllo, sono supportati dalle valutazioni dei criteri di uscita. 

Un esempio di valutazione dei criteri di uscita in base a risultati e log dei test potrebbe essere:
  • Verifica dei risultati rispetto ai criteri di copertura
  • Valutazione del livello di qualità del componente o del sistema
  • Necessità di avere nuovi test perché i test progettati non hanno raggiunto l'obiettivo
(1) - Esempio di requisito: Il sistema permetterà di prenotare un taxi e di avere una stima del tempo di attesa

(2) - Esempio di una User Story:
Cliente: “Salve Radio City, mi occorre un taxi in via Napoli 1861”

Sistema: “Vesuvio 79 arriverà in 5 minuti”

(3) - Un cluster è un raggruppamento logico

* https://openclipart.org/detail/308849/mental-health

Codice esempio Testing del Software

Codice esempio di un Collaudo del Software

Primi approcci pratici al test o collaudo del software!


Dopo aver iniziato lo studio del testing del software ho realizzato un esempio pratico di collaudo del software! E' molto semplice ed utile per capire di cosa si tratta quando si parla di testing

Testing del Software

L'immagine sopra rappresenta il risultato dei 5 test effettuati per il "software under test"

La demo che ho fatto è scaricabile da github ed è composta da tre file:

  • PSU è la classe che rappresenta un Power Supply a 9 Volt. Il costruttore, quello software, si occupa di popolare il PartNumber, la Descrizione ed il SerialNumber. Ci sono dei metodi get che si occupano di restituire i valori precedentemente assegnati, alcuni set per modificare lo stato On/Off del PSU, un SelfTest e utility varie meglio descritte nel codice sorgente.
  • PSU_Test è la classe che si occupa di verificare il corretto funzionamento dei metodi della classe PSU.java. Utilizza il framework JUnit per il testing. Il mio approccio è stato veramente basic: ho realizzato 5 "Test Method" che "confermano" il risultato del test con quello che ci si aspetta.
  • PSU_Tester simula un testo automatico in ambiente di produzione: è il test funzionale del dispositivo fisico, il Power Supply 9 Volt in questo caso. Non necessaria per il testing software.
L'esempio è davvero semplice e in un certo senso sminuisce ciò che è l'articolata attività di testing che dovrebbe essere adottata in ambienti professionali per mirare allo sviluppo di sistemi software solidi e di alta qualità.

mercoledì 8 agosto 2018

Controlla gratis se la tua carta di credito è stata rubata!

Cari amici se pensate che la vosta carta di credito è stata clonata non esitate un solo secondo e fate un controllo gratis usando la mia applicazione Secure Card. Si tratta di un'App Android che controlla nei Data Base Hacker Mondiali la presenza della vostra Carta di Credito. 

Carta di credito esempio *

Hai mai usato Amazon oppure Google Shopping?
I dati che occorrono per fare il controllo sono proprio quelli per fare gli acquisti on-line!
Li elenco per non farti sbagliare durante l'immissione!

Occorrono solamente le seguenti informazioni:
  • Numero della carta di credito (1234 5678 9876 5432)
  • Nome dell'intestatario (Manny Pitt)
  • La data di scadenza (12/15)
  • Il codice di sicurezza o CVV2 che si trova sul retro
Secure Card è Sicura, Semplice ed IntuitivaE' sicura perchè uso la crittografia SHA a 512bit per trasmettere i dati.  E' semplicissima perchè occorrono solo pochi dati della tua carta di credito. E' veloce perchè in pochi minuti avrai il report dettagliato con tutte le informazioni che ti occorrono!


Compila tutti i campi richiesti e premi Controlla la Carta di Credito!




A questo punto il gioco è fatto!
Ho a disposizione i dati della tua carta di credito e posso iniziare a comprare alle tue spalle... ahahaha

Se c'è qualcuno davvero intenzionato ad installare l'app "Secure Card" fatemelo sapere in privato perchè l'app non si trova nei canali ufficiali 😎!

Ritornando ad essere seri... C'è da dire a volte capita che le persone navigano su siti web o installano App che sembrano affidabili ma che hanno in realtà l'unico scopo di rubare informazioni sensbili. Questa pratica è chiamata phishing.

Come proteggersi dalle frodi e dal phishing?
  • Non installare mai "pseudo" App tipo questa Secure Card 😛
  • Controlla sempre la barra dell'indirizzo del sito dove stai facendo acquisti on-line per verificarae se il dominio è realmente quello che ti aspetti. Ad esempio amazon.it e non amazon.it.not.ru
  • Non comunicare mai la tua password di accesso via telefono o via e-mail a nessuno nemmeno alla tua banca
  • Usa la Carta di Credito e non il Bancomat (o Carto di Debito) per gli acquisti on-line. Questo perchè in caso di acquisto fraudolento con la carta di credito c'è piu' tempo per bloccare l'operazione mentre con il bancomat la transazione è immediata
  • Attiva il servizio di notifica via sms per ogni acquisto effettuato se disponibile
  • Tieni sempre a portata di mano i numeri telefonici per bloccare la carta e quello dell'assistenza telefonica


Bene... non credo di aver altro di aggiungere altro tranne che di fare sempre ATTENZIONE!


https://openclipart.org/detail/248765/credit-card

venerdì 2 marzo 2018

Debug del software

Rubber Duck Debugging


Rubber Ducking

A Marzo ho partecipato all'evento Dive into AI presso l'Università Parthenope di Napoli.

Gli argomenti trattati nella sessione formativa sono stati davvero interessanti: Intelligenza artificiale, Machine learning, Big data, IoT

Ma... cosa c'entra la paperella tra tutta questa scienza?
La papera in figura era il gadget offerto ai partecipanti del workshop.

A cosa serve realmente?
Oltre ad essere un simpatico soprammobile la papera è usata per fare il debug del software. Sembra strano ma è uno dei metodi usato per scovare bug software che si nascondono tra i milioni di linee di codice scritto durante le notti insonni!

Come si usa?
Semplice, si trasferisce il codice et voilà il bug è trovato! Scherzo, la tecnica corretta è quella di spiegare riga per riga il codice a questa simpatica paperella inanimata. Descrivendo infatti il funzionamento che ci si attende dal programma ed osservando il codice che svolge tale funzione, si riesce ad identificare il problema o a trovare la soluzione al malfunzionamento.

Tecniche alternative?
Per evitare di sembrare un matto mentre si parla con un oggetto inanimato si può chiedere aiuto al proprio amico purché non sia un esperto programmatore. Osservando il problema da un altro punto di vista spesso si arriva all'identificazione ed alla soluzione del problema.

Bene, questo è tutto circa la simpatica paperella offerta dagli ambassador di Intel e... alla prossima!


domenica 14 gennaio 2018

JSON Web Service con ESP8266 e DHT11

Ho già usato l'ESP8266 in un'altra applicazione per trasmettere dati in real-time nel Cloud (Firebase) attraverso una connessione alla rete internet. L'ESP8266 è un dispositivo economico e allo stesso tempo ricco di potenzialità! Con il ricetrasmettitore WiFi integrato e i pin General Purpose Input/Output dove poter collegare gli svariati sensori esistenti è possibile dare libero sfogo ad ogni tipo di fantasia nerd 😎 ahaha!

L'ESP8266 può funzionare in tre modi diversi: come stazione WiFi, come Access Point oppure entrambe le modalità contemporaneamente. In questo caso l'ho usato come Access Point per creare un Web Server JSON che restituisce temperatura ed umidità quando interrogato.

Per il codice del Web Service JSON ho usato lo stesso IDE che si usa per programmare di Arduino. Qui di seguito riporto qualche riga del codice occorrente anche se in rete si trovano svariati e tutorial. 

// E' la libreria che si occupa del Web Server
#include<ESP8266WebServer.h>

// Un'istanza del Web Server su porta 80
ESP8266WebServer server(80);

void setup(void){

// Inizializzazione HW e connessione WiFi
...

// Codice eseguito dal server all'indirizzo/jsonservice
server.on("/jsonservice", [](){
char buffer[200];
StaticJsonBuffer<200> jsonBuffer;
JsonObject& weather = jsonBuffer.createObject();
gettemperature(); // Leggo dal sensore DHT11 weather["ipaddress"] = WiFi.localIP().toString();
weather["temperature"] = String(temp_c);
weather["humidity"] = String(humidity);
weather["last_update"] = getCurrentTime();
server.send(200, "text/plain", buffer);
});
server.begin(); // Avvia il server
Serial.println("HTTP server started"); }
void loop(void){
// Il server si mette in ascolto di richieste HTTP GET o POST dei client
server.handleClient(); }


Il codice precedentemente riportato è evidentemente solo una parte: occorre aggiungere il codice per l'inizializzazione HW, la connessione alla rete WiFi ed il codice per gestire il sensore che si trova facilmente in rete. Occorre a questo punto solo programmare il dispositivo, connettersi alla rete WiFi e fare la prima chiamata al Web Server. Il sensore DHT11 è molto lento e poco preciso e quindi bisogna attendere un pochino prima di avere dati significativi.

Per interrogare il Web Server si possono usare vari client: un browser ad esempio, un programma specializzato oppure un'App. Si usano a tal proposito le richieste HTTP GET o POST.

Le richieste HTTP POST sono usate per inviare dati e riceverli, ad esempio il tuo username e password quando fai il login ad un sito. Le informazioni inviate al server con il metodo POST sono elaborate e possono determinare anche delle operazioni di modifica lato server o azioni da eseguire in base ai dati di input.

Le richieste HTTP GET sono usate per ricevere dati dal server, ad esempio una pagina web o come nel mio caso dei dati formattati JSON. Sono solo richieste e non cambiano nulla lato server.

La stringa che occorre per usare il Web Service precedentemente creato è del tipo HTTP GET ed è tipo questa: http://192.168.1.31:80/jsonservice. Usata nella barra degli indirizzi di un browser, se tutto funziona correttamente, restituisce le seguenti informazioni:


JSON Web Service

Con Android Studio ho fatto anche un'App Android che usa lo stesso Web Service. L'App ed ha le seguenti caratteristiche che ritengo siano interessanti:
- Identificazione subnet della rete WiFi alla quale si è effettuato il login 
- Scansione della rete per cercare gli IP dei Web Server live 
- Report, per ogni "server" in rete, delle informazioni restituite dalla HTTP GET
- Metodi asincroni per la scansione della rete e delle query ai Web Server


Come si nota dai print screen ho due dispositivi collegati alla rete WiFi con lo stesso codice SW precedentemente illustrato e caricato a bordo. Hanno evidentemente IP univoco e riportano umidità e temperatura diversa dato che si trovano in due ambienti diversi (diciamo così ahahah 😀 in realtà è il sensore DHT11 che non è molto preciso). Ci sarebbe molto da dire anche per la parte Android, ma questo forse in un'altra puntata!

Per finire metto qualche foto dei dispositivi che ho usato: il NodeMCU e l'ESP01 



Per ulteriori informazioni o chiarimenti non esitate a contattarmi!


sabato 9 dicembre 2017

Google Cloud Platform

Ho avuto il piacere di partecipare ad una sessione di training organizzata da Google Cloud a livello mondiale in 50 città del globo: da Tokio a Seattle passando per Roma Buenos Aires eravamo tutti OnBoard nella stessa piattafroma... Google Cloud Platform!

Google Cloud Platform

Cos'è Google Cloud Platform?

Di sicuro è meglio usare il plurale e dire che sono soluzioni per lo sviluppo web, per il mobile e per il back-end. Google Cloud Platform consente agli sviluppatori di creare, testare e distribuire applicazioni sull'infrastruttura altamente scalabile, sicura e affidabile di Google 

Google Cloud Platform offre una vasta gamma di architetture di calcolo:
  • IaaS o Infrastucture as a Service che è un hardware virtualizzato ovvero un'infrastruttura per l'elaborazioni dei dati. Architettura usata da Compute Engine. Conviene quando si hanno esigenze di accesso più granulare all'infrastruttura.
  • PaaS o Platform as a Service serve per creare le proprie applicazioni software utilizzando gli strumenti forniti dalla piattaforma come ad esempio App Engine. Con questa architettura ci si puo' concentrare maggiormente sulla logica dell'applicazione piuttosto che pensare anche alla gestione dell'infrastruttura.
  • Hybrid usa una gestione dei cluster gestita ed un sistema di orchestrazione per l'esecuzione dei container basato su  Kubernetes. Supporta tutti i linguaggi di programmazione.
  • Serverless logic Cloud Functions 

Google Cloud Platform mette a disposizione tantissime risorse e soluzioni per ogni esigenza che vanno dal calcolo, all'archiviazione dei dati, alla gestione dei Big Data, il Machine Learning ed il Monitoring delle risorse.

  • Compute: Compute Engine, Container Engine, App Engine, Cloud Functions
  • Storage: Bigtable, Cloud Storage, Cloud SQL, Cloud Spanner, Cloud Datastore
  • Big Data: BigQuery, Pub/Sub, Dataflow, Dataproc, Datalab
  • Stackdriver: Monitoring, Logging, Debug, Error Reporting, Trace
  • Machine Learning: Natural Language API, Vision API,  Machine Learning, Speech API, Translate API

Come si interagisce con Google Cloud Platform?

  • Attraverso un browser collegandosi alla Cloud Console
  • Installando gli SDK che includono una CLI
  • Attraverso la Google Cloud Shell che si puo' attivare nella Cloud Console
  • Programmaticamente attraverso delle REST-based API
  • Attraverso l'App Cloud Console Mobile per Android e IOS


Come si usa Compute Engine? 

Come si fa il deploy di una Cloud Functions?

Sarebbe bello poter scendere nei dettagli di ogni servizio offerto da Google Cloud Platform ma non è questo lo scopo del mio blog. Ci sono tantissime risorse on-line dove poter attingere ad informazioni dettagliate... giyf 

Chi ha fantasia non ha limiti... 😀




Attestato di partecipazione


#GoogleCloudOnBoard
#OnBoardChallenge

domenica 29 ottobre 2017

Sistema Internet of Things in Real Time per Industria 4.0


Sistema Internet of Things in Real Time


Cosa significa IOT?
Cosa significa Industria 4.0?

Internet of Things, Smart Factory,  Factory of the Future, The Conscious Factory

IOT acronimo di 'Internet of Things' si traduce letteralmente in 'Internet delle cose' ed è praticamente quella tecnologia che connette qualsiasi 'cosa' in rete, al Cloud o ad un altro dispositivo.

Lo scopo delle 'cose connesse' è quello di permettere l'interazione tra le macchine e l'uomo attraverso la digitalizzazione delle informazioni che vengono rilevate attraverso sensori specializzati. 


Non a caso nell'illustrazione sono rappresentate macchine, cose, piante, pesci tutti interconnessi! Oggi giorno infatti abbiamo la tecnologia adatta per 'collegare' qualsiasi cosa. 

Ad esempio con un modulo Arduino wifi è possibile interagire con una pianta!


Lui è Massimo Banzi, imprenditore e designer italiano. Co-fondatore di Arduino, uno dei fautori della "nuova rivoluzione industriale". La pianta invece la si trova su Twitter, ha un igrometro impiantato nel terreno e quando ha bisogno di bere lo fa sapere attraverso un semplice tweet... simpatico vero? L'esempio della pianta connessa al mondo 'reale' è solo per dire che con la tecnologia attuale l'unico limite a volte è solo l'immaginazione. 

Superato il gap tra la macchina e l'uomo, il passo verso l'Industria 4.0 è presto fatto. Infatti le macchine di produzione iniziano ad essere intelligenti: sono dotate di sensori in grado di comunicare il proprio stato di salute ed avvisando in tempo reale il sopraggiungere di criticità. 

La Smart Factory ha una nuova consapevolezza e un nuovo modo di operare. Attraverso la raccolta e l'analisi dei dati si ottimizzano processi, si crea qualità ed efficienza.  Si interviene in tempo reale, si effettua manutenzione predittiva. Le macchine diventano a realtà aumentata in modo da facilitare gli interventi ed avere subito a disposizione manuali tecnici e dati storici degli interventi o manutenzione. 

Il progetto Geek 😃 del week-end

Open hardware, ESP-12-E core

Affascinato da questa nuova rivoluzione, mi sono divertito in questi giorni con l'Internet of Things ed ho messo insieme le mie conoscenze HW e SW per creare un progettino dimostrativo che rileva temperatura ed umidità e li trasmette ad un database in real-time NoSQL di Google. Ho poi sviluppato un'App per Android che raccoglie i dati e li visualizza in formato testo e grafico.

Il dispositivo HW in figura include il firmware che gira sul modulo SoC WiFi ESP8266 e l'HW basato sul modulo ESP-12. Supporta lo standard IEEE802.11 b/g/n e il protocollo TCP/IP. Il FW è scritto con LUA ed è possibile programmarlo con l'ambiente di sviluppo di Arduino.

Nel mio esempio uso questo dispositivo per connettermi alla rete WiFi e per scrivere i dati su Firebase. Ho scritto la procedura per l'accesso alla rete WiFi, quella per memorizzare temperatura ed umidità nel database in real-time ed ho programmato il device, o meglio, ho fatto l'upload con l'ambiente di sviluppo di Arduino. I dati sono simulati con una funzione random perché il sensore non è ancora arrivato.

Firebase è  un potente strumento che mette a disposizione Google. L'ho già usato per un'altra App e l'ho ripreso per questa demo. In questo caso lo uso 'solo' per i dati in real time ma ha tante altre funzionalità che si integrano con Android.

L'App sviluppata con Android Studio e si occupa al momento 'solo' della visualizzazione dei dati che arrivano dal device/cloud in formato testo e in formato grafico.

Screen shot App IoT Demo

Si presume che nel 2020 i sensori connessi che genereranno dati saranno circa 80 Miliardi ecco che inevitabilmente si deve introdurre la parola Big Data. Sfruttando al meglio questa mole di informazioni si possono realizzare davvero grandi cose e ambire a modelli di business all'avanguardia e aziende vincenti e competitive. 

sabato 16 settembre 2017

Drink Cost - Calcolo del prezzo del Cocktail


L'App per Android che ti consente di calcolare il costo di un Drink

drunk penguin designed by Moini

Drink Cost è un 'regalo' che ho fatto ad un amico che gestisce un bar in voga a Caserta.

L'idea è molto semplice ma come al solito cerco di dare il massimo alle mie 'creature' e la miglior tecnologia... tempo permettendo. In questo caso ho realizzato una grafica semplice ed immediata che consentisse di tenere sotto controllo tutti i parametri per determinare il costo di un drink. L'App è dotata di un database SQLite che memorizza il costo e le quantità degli ingredienti. La modifica o l'immissione di nuovi prodotti puo' essere fatta 'al volo' cioè mentre si calcola il costo di un nuovo drink/cocktail oppure direttamente dal pannello di gestione dedicato agli ingredienti.

Schermata principaleGestione ingredientiAggiungi un nuovo ingrediente

La prima immagine a sinistra è la schermata principale: si nota il costo totale in alto a destra. 

  • Ci sono quattro fattori moltiplicativi per determinare orientativamente e velocemente il prezzo di vendita del cocktail. 
  • Per togliere un singolo ingrediente dal calcolo occorre un click lungo sulla riga mentre per cancellare tutto c'è il cestino in alto.
  • Se si clicca sul tasto + viene visualizzata una finestra come nel terzo print screen.


L'immagine al centro è la gestione degli ingredienti: è molto semplice ed intuitiva:

  • Si possono aggiungere, eliminare o modificare gli ingredienti dal database

L'ultimo print screen a destra è la finestra di immissione ingredienti per il calcolo

  • Questa parte di codice non solo 'pesca' e visualizza gli ingredienti dal database precedentemente popolato ma se un ingrediente non è stato ancora inserito si occupa anche dell'immissione o modifica in real time dell'ingrediente nello stesso database.
  • Se per esempio nel nome ingrediente si scrive "Gi" verranno proposti tutti gli ingredienti come Gin, Ginger e così via... 

Ci sono altre funzionalità secondarie come la valuta che di default è scelta in modo automatico ma volendo si può farlo manualmente. 


Drink Cost è un'App freemium per Android.  La puoi trovare su Google Play Store

 Open Dict
 “Google Play and the Google Play logo are trademarks of Google Inc.” 


Se hai bisogno di supporto o vuoi suggerire qualche improvement oppure ti occorre aiuto per sviluppare la tua applicazione Android contattami pure.. sarò felice di aiutarti...!

sabato 1 luglio 2017

Open Dict: la mia app Android per 11 Dizionari Gratis

Open Dict è un progetto che nasce per caso: stavo studiando come usare un Web Service SOAP da Android e mi sono imbattuto nel webservice di Adrian O'Neill che ospita alcune opere letterarie gratis che mi hanno entusiasmato e di cui voglio parlare prima ancora dell'App che ho sviluppato e del lavoro fatto da Adrian.

Il cuore di Open Dict sono i seguenti dizionari:


  • WordNet (r) 2.0 è un grande database lessicale inglese. Nomi, verbi, aggettivi e avverbi sono raggruppati in set di sinonimi cognitivi creato e distribuito dalla Princeton University.
  • The Free On-line Dictionary of Computing (27 SEP 03) è un dizionario di informatica. FOLDOC include definizioni di acronimi, gergo, linguaggi di programmazione, strumenti, architettura, sistemi operativi, networking, teoria, standard, matematica, telecomunicazioni, elettronica, istituzioni e aziende, progetti, storia, include qualsiasi vocabolo che si potrebbe pensare di trovare in un dizionario di computer.
  • Jargon File (4.3.1, 29 Jun 2001) è un compendio completo di slang hacker che illumina molti aspetti della tradizione hackish, del folklore e dell'umorismo. Prova a cercare newbie, hacker, foo, Google, geek, troll...
  • Virtual Entity of Relevant Acronyms (Version 1.9, June 2002) è una speciale edizione GNU di V.E.R.A., un elenco che tratta acronimi computazionali. Prova a cercare BER, BIOS,  BIT, VERA...
  • Elements database 20001107 è invece un dizionario degli elementi chimici creato da Jay F. Kominek dell'Università del Colorado.
  • The Devil's Dictionary (©1911 Released April 15 1993) è un dizionario satirico scritto dal soldato americano della guerra civile Ambrose Bierce. La prima pubblicazione risale al 1906 con il titolo The Cynic's Word Book. Prova a cercare Saint, Overwork.
  • Easton's 1897 Bible Dictionary è un dizionario di dominio pubblico che contiene quasi 4.000 voci relative la Bibbia considerate in un'ottica cristiana del XIX secolo. Scritto da Matthew George Easton l'opera è stata pubblicata da Thomas Nelson nel 1897. 
  • Hitchcock's Bible Names Dictionary (late 1800's) contiene più di 2.500 nomi propri e biblici relativi alla Bibbia e ai loro significati. Scritto da Roswell D. Hitchcock nel 1869.
  • U.S. Gazetteer (1990) contiene il censimento del 1990 degli Stati Uniti delle contee, i luoghi e i codici di servizio postale. 
  • The Collaborative International Dictionary of English v.0.44 è il Dizionario Internazionale Collaborativo di Inglese anche denominato GCIDE. Questo dizionario è stato ricavato dal Webster's Revised Unabridged Dictionary pubblicato nel 1913 dalla C. & G. Merriam Co. Springfield, Mass. Sotto la direzione di Noah Porter, D.D., LL.D. e da WordNet, una rete semantica creata dal Dipartimento di Scienze Cognitive dell'Università di Princeton sotto la direzione del Prof. George Miller e viene aggiornata e integrata da una coalizione aperta di collaboratori volontari provenienti da tutto il mondo.
  • CIA World Factbook 2002 Questo lavoro fornisce un'istantanea, informazioni diffuse e difficili da individuare dal background, la geografia, le persone, il governo, l'economia, le comunicazioni, i trasporti, le forze militari e le questioni transnazionali per paesi che vanno dall'Afghanistan allo Zimbabwe. Contiene informazioni geografiche, il prodotto interno lordo, il numero di telefoni, le risorse naturali, i sistemi giuridici, i partiti politici, le droghe illecite, i tassi di mortalità e altro ancora. Cerca Italy per esempio


 Dict, Dictionaries, Dictionary, Open Dict

Open Dictionaries

Adrian O'Neill come dicevo, è il programmatore del web service che ospita tutte insieme queste preziose ed inedite opere. Immagino che il lavoro di Adrian sia stato lungo e certosino, passando dalla ricerca dei dizionari, alla conversione dei files per creare la base dati, allo sviluppo dei Web Services e grazie al suo lavoro Open Dict può esistere e gli utenti Android possono consultare questa marea di informazioni messe a disposizione gratis. Grazie! Questo il link al sito web di Adrian 

SOAP è l'acronimo di Simple Object Access Protocol ed è un protocollo nato per lo scambio di informazioni tra client e server (o web services) con lo scopo di introdurre estensibilità, neutralità ed indipendenza nello scambio di informazioni tra svariati sistemi operativi. Si basa su messaggi di testo nel formato XML opportunamente strutturati e trasportati con il protocollo HTTP o SMTP.

ksoap2-android fornisce una libreria SOAP leggera ed efficiente per la piattaforma Android. Essa è composta da un parser XML, un serializzatore, un deserializzatore, e un  transport layer per la comunicazione ed il trasporto dei dati attraverso la rete. A questo indirizzo si trovano tutte le informazioni necessarie.


Per il funzionamento dell'App non è tutto. Occorre ancora creare le classi e i metodi per consumare il web service. Inoltre bisogna rendere piacevole e semplice l'esperienza dell'utente. Se sei un programmatore e hai bisogno di ulteriori spiegazioni a riguardo sarò felice di aiutarti. Contattami!


Open Dict è un'App per Android.  La puoi trovare gratis su Google Play Store

 Open Dict
 “Google Play and the Google Play logo are trademarks of Google Inc.” 


Tante persone si sono dedicate in passato alla realizzazione delle opere precedentemente descritte, e tante continuano a farlo oggi giorno. Penso alle risorse che vengono messe gratis on-line o quanti contribuiscono ad arricchire Wikipedia ed a tutti i progetti open-source. Quando ho scoperto questi Dizionari liberi, ho avuto il desiderio di contribuire anche io e, nel mio piccolo, mi sono dedicato allo sviluppo di questa semplice App. Spero di aver fatto una cosa gradita e gradevole!