Blockchain devs meetup numero 7: AI per criptovalute

Anche l'ultimo meetup dei Blockchain-Devs-Milano è stato super-interessante: grazie ad Andrea Bellacicca per la presentazione sul suo algorimo di intelligenza artificiale bio-ispirata per la predizione dei prezzi delle criptovalute! Qui trovate le slides.­ Mentre questo è il link al progetto, che sta per andare live!

Grazie anche ad Alessandro Aglietti che ci ha presentato il suo corso Udemy "Bitcoin dalla teoria alla pratica", per il quale esiste anche un repository github.

Come sempre un ringraziamento va a Mikamai e LinkMe per l'ospitalità!
Cari Blockchainer, alla prossima!

Blockchain-Devs-Milano incontro 7

What Is Bitcoin Lightning Network And How It Works

Nuovo incontro dei Blockchain Devs Milano lunedì 8 aprile 2019, dal titolo "What Is Bitcoin Lightning Network And How It Works".

Avremo come ospite d'eccezione Alessandro Confetti che ci spiegherà i segreti di questo protocollo volto ad ottimizzare le transazioni bitcoin. Ecco una descrizione del suo intervento: "Lightning Network is aimed at introducing instant payments, micropayments, and transaction volumes scalability using multi-party Smart Contract based on bitcoin's built-in scripting. In this talk, we will explore how to join this network and create a multi-signature "channel" bitcoin address."

Ci troviamo nella sede di Mikamai e di LinkMe in via Venini 42 a Milano.

Ecco il programma:

19:00 Si può entrare: chiacchiere in libertà. (Per cortesia non arrivate troppo presto: i nostri ospiti Mikamai/LinkMe stanno ancora lavorando..)

19:15 Parte la presentazione!

20:30 Abbiamo finito: per chi vuole pizzata in un locale della zona.

La partecipazione è gratuita, ma è gradita la registrazione su Meetup oppure su Eventbrite.

Lightining Network

Italian Agile Days 2017

Tavola rotonda comunità agili All'interno della bellissima manifestazione Italian Agile Days 2017 ho avuto il piacere di essere chiamato a rappresentare il TDD Meetup di Milano nel corso della tavola rotonda delle comunità agili italiane. Dopo alcune domande introduttive sulle modalità operative e sulla storia delle varie comunità, Fabio Ghislandi, che fungeva da moderatore, ha formulato un quesito molto interessante. Nel mondo dell'Agile da tempo si stanno affacciando tanti attori, più o meno validi: come fare a distinguere il fumo dall'arrosto? A mio avviso la risposta è in questi punti.

Puntare all'eccellenza tecnica

Come TDD Meetup Milano, grazie soprattutto al grande lavoro del nostro coordinatore Andrea Francia, cerchiamo di incrementare le nostre capacità tecniche. Il nostro gruppo punta all'eccellenza e il fatto di proporre, dopo una giornata di lavoro, incontri impegnativi, con esercizi sul codice seleziona persone con voglia di migliorare. Se per valutare i diversi consulenti si utilizzasse questo criterio, forse molti venditori di fumo sarebbero tagliati fuori.

No alle certificazioni agili

Togliamo i soldi dal tavolo! Il commercio delle certificazioni agili è un fenomeno assai poco costruttivo: che valore può avere (se non per l'organizzazione) un certificato ottenuto con un paio di giorni di corso? Il corso può essere di grande utilità, la certificazione, a rinnovo periodico previo bonifico bancario, no!

Definition of failure

Uno dei concetti più importanti di Scrum è la "definition of done". Per giudicare l'attività di un consulente Agile sarebbe meglio per me introdurre la "definition of failure": quando possiamo sancire ufficialmente il fallimento di una attività di "agilizzazione"? Rendere "falsificabile" (secondo la definizione di Karl Popper) l'operato di un consulente agile contribuirebbe non poco a separare il grano dalla pula!
Insomma perché, come suggerito da Charlie Poole, non estendiamo i test a tutte le fasi del processo?

Il criterio del nonno

So che questo è un metro assolutamente personale, ma ho inconminciato ad elaborare un "criterio del nonno". Mio nonno, in Sicilia, coltivava viti ed ulivi ed era una persona estremamente concreta. Mi è capitato a volte, frequentando conferenze agili, di partecipare a sessioni francamente imbarazzanti da "abbracciatori di alberi". In quelle occasioni temo che mio nonno se ne sarebbe uscito con un clamoroso: "Ma quante minchiate!". Ecco, questa mia voce interiore è divenuta per me il miglior criterio di selezione della fuffa!

I Bitcoin sono una moneta?

Raccolgo qui una mia risposta ad un interessante post su Linkedin.
Partendo dal presupposto che l'economia non è una scienza (Popper ci direbbe infatti che non è falsificabile, mentre per Jacob Viner "Economics is what economists do"), la definizione di valuta è soggetta a diverse interpretazioni. Propongo comunque di basarci su Wikipedia
"A currency [...] refers to money in any form when in actual use or circulation as a medium of exchange, especially circulating banknotes and coins."
Quindi una valuta è un qualsiasi mezzo di scambio economico, che assume principalmente la forma di monete e banconote. I bitcoin sembrerebbero quindi una valuta (come del resto recita la medesima voce di wikipedia).
Analogo ragionamento possiamo fare se utilizziamo il termine denaro:
"Money is any item or verifiable record that is generally accepted as payment for goods and services". Quindi il denaro è un oggetto (item) o una registrazione verificabile (verifiable record), accettato come forma di pagamento. Anche in questo caso la definizione sembra calzare per le criptovalute.
E' invece corretto dire che le criptovalute non sono delle monete a corso legale cioè non vi è alcuna autorità che ne obblighi l'acccettazione per estinguere debiti all'interno di un determinato territorio.
E' altresì vero che i bitcoin non ricadono nella definizione di base monetaria ristretta M0, ma questa mi sembra in realtà una tautologia: se definiamo denaro solo banconote e monete, allora ciò che non è banconote e monete non è denaro.
Venendo alle altre proprietà citate, "possesso vale titolo" è sicuramente una proprietà dei bitcoin, nel senso che il possesso della chiave privata associata ai bitcoin ne costituisce l'unico valido titolo di proprietà.
Se richiediamo che siano necessarie solo due parti per effettuare una transazione, allora i bitcoin non risultano forme monetarie, ma allora anche le transazioni effettuate tramite i nostri conti correnti dovrebbero farci riflettere. Ad ogni modo una certa forma di transazione in bitcoin che coinvolga solo due parti è possibile: io potrei cedere "off-chain" (cioè senza che la cosa sia registrata nella blockchain) la chiave privata associata a dei bitcoin senza coinvolgere nessuno al di fuori del ricevente. Mi rendo conto che comunque non sarebbe il modo standard di operare.
La credibilità dello stato emittente (che per Venezuela, Zimbabwe e molti altri sembra discutibile...) è sostituita in questo caso dal protocollo di consenso distribuito che regge la rete di scambio.
Se consideriamo infine la possibilità custodia in proprio, il bitcoin sembra rispondere a questo requisito; custodire bitcoin significa "semplicemente" custodire la chiave privata necessaria al loro sblocco, e questa può anche essere registrata sulla carta del formaggio. E' vero che per spenderli mi occorre l'accesso alla rete della blockchain, che costituisce il contesto di accettabilità della valuta, ma provate ora a spendere il pacco di mille lire del 1990 custodito sotto il materasso...
Quindi i bitcoin sono una moneta? Booooh....

Machine Learning e l’uomo di Piltdown

Nell'interessante libro "Il pollice del Panda" si parla, tra l'altro, del caso dell'Uomo di Piltdown, una truffa perpetrata ai danni del mondo accademico nei primi anni del secolo scorso. Alcuni resti di un presunto ominide vennero ritrovati in Inghilterra: essi comprendevano una scatola cranica dalle fattezze umane ed una mandibola simile a quella di un orango. Tale era il desiderio del mondo accademico inglese di trovare finalmente sul suolo patrio un reperto paleontologico di rilievo, che subito la scoperta fu accettata da valenti studiosi.

Ai dubbi dello scienziato tedesco Franz Weidenreich sull'incongruenza reciproca dei reperti, Sir Keith rispose: "Questo non è altro che il tentativo di liberarsi di quei dati che non possono essere fatti rientrare nell'ambito di una teoria precostituita. Uno scienziato non dovrebbe eliminare tali fatti, ma dovrebbe costruire teorie in grado di spiegarli."

E qui arriva l'analogia con le tecniche di Machine Learning. Quando all'interno di un campione di dati sul quale stiamo addestrando un algoritmo di Data Mining troviamo degli elementi che si discostano palesemente da quanto visto in precedenza, abbiamo due possibilità.  La prima, nell'esempio dell'uomo di Piltdown,  è quella di adottare la posizione di Weidenreich: riteniamo che i dati siano degli errori nel campione, e quindi li scartiamo,  o filtrandoli oppure utilizzando un algoritmo che eviti l'overfitting su di essi.

La seconda possibilità è quella di seguire quanto disse (ma non fece) Sir Keith: elaboriamo una nuova teoria in grado di spiegarli, cioè modifichiamo i parametri dell'algoritmo di classificazione/regressione che stiamo utilizzando, oppure ne utilizziamo uno differente.

Sir Keith, invece, fece quanto non si dovrebbe mai fare: modificò i dati per adattarli alla teoria corrente. Egli infatti sottostimò il volume della scatola cranica trovata per renderla compatibile con quella di un ominide antenato dell'Homo Sapiens.

Meditate, gente, meditate!

Statement SQL per determinare il nome dell’AS400 corrente

Per determinare il nome della macchina AS400 alla quale ci stiamo connettendo, è possibile utlizzare il seguente semplice statement SQL:

SELECT DATABASE() FROM SYSIBM.SYSDUMMY1

Attenzione: lo statement funziona solo con sistemi operativi V5R3 e superiori.

Collegamento Windows 7 a IFS netserver AS400

Per collegarsi all'IFS di AS400 da Windows 7 occorre seguire i passi descritti nel seguente documento IBM.

In particolare, lanciare SECPOL.MSC e modificare i 2 valori come in figura, quindi riavviare il PC.




Per collegare il disco di rete, ad esempio come unità S:, ricordarsi di specificare come dominio AS400: usare quindi il comando

net use s: \\nome_as400\mf /user:nome_as400\nome_user /persistent:yes

poi

net use \\as400 /savecred

NOTA AGGIUNTA IL GIORNO 11/7/2013
In un successivo articolo IBM si legge:

After the changes are saved, the user profiles passwords will need to be reset to allow the LANMAN Hash to be generated. Also note that a stop and restart of Windows will be required for some of the policies to take effect.

Quindi potrebbe essere necesario:

  • Resettare la password dell'utente Windows
  • Riavviare il server Windows

Problemi console AS400 (IBM i)

Ho già scritto su questo argomento, ma vorrei ricapitolare con maggiore chiarezza quanto è necessario fare in caso di mancato funzionamento della console oppure di impostazione errata della stessa (ad esempio spesso l’AS400 viene impostato con l’Operation Console di default anche quando la console è twinax).
In queste situazioni può essere necessario ricorrere alla funzione 65 + 21 + 11.
La funzione 65 + 21 + 11 è utilizzabile solo dal pannello.

1. Da pannello portare l’AS/400 in manuale (01 B M)
2. Selezionare la funzione 25 e invio
3. Selezionare la funzione 26 e invio
(Se il sistema risponde con 65 FF ripetere i passi 2 e 3)

Il pannello passa alla modalità avanzata.

La funzione 65 deve essere seguita entro 45 secondi da una funzione 21 e da una 11. Se passano 45 secondi, la funzione 21 forzerà il menù DST sulla console. A seconda dello stato dell’IPL, si potrebbero vedere dei cambiamenti sulla console se la console è ancora presente dopo la funzione 65.
Se le funzioni 65, 21 e 11 vengono richieste in meno di 45 secondi apparirà sul pannello un SRC: A6nn500A.
Ripetendo la funzione 65, 21 e 11 il sistema entra in modalità modifica in cui è possibile effettuare dei cambiamenti o eseguire delle operazioni. Dopo la seconda terna di 65, 21 e 11, sul pannello apparirà un altro SRC: A6nn500B per indicare il modo edit. A questo punto occorre ripetere la terna 65, 21 e 11 per incrementare “nn” all’interno dell’SRC . “nn” rappresenta quale operazione si intende eseguire.
A questo punto un singolo 21 indicherà la selezione della funzione.
L’SRC diventerà A6nn500C per indicare che la funzione è stata selezionata correttamente.
Se ogni volta che si effettua una funzione 65 e 21 si eccedono i 45 secondi o tra due 21 successivi, appare un SRC A6nn500D che indica il raggiungimento del time out e l’uscita dal modo edit. In questo caso per effettuare una modifica, occorre ripartire da capo.
L’uscita immediata dall’edit può essere effettuata con una funzione 66.
Ecco i codici di riferimenti (“nn”):

00 Nessuna console definita
01 Console twinax
02 Operation console diretta
03 Operation console di rete
04 Hardware management console
C3 Reimposta configurazione LAN
A3 Disattivazione e riattivazione della scheda di rete Operations Console

Utilizzando i codici C3 e A3 è possibile azzerare le impostazioni di rete dell’Operations Console

Cancellare la password del device Operations Console

Per cancellare la password dell’Operations Console, usare la procedura seguente.

1. Portare la console in modalità avanzata (vedi sopra)
2. 65 + invio. Il sistema dovrebbe rispondere con 65 00. Potrebbe essere necessario utilizzare la funzione 11 per mostrare i risultati (D1008065).
3. 13 + invio. Il sistema presenta due righe di valori numerici. La prima termina con una cifra che rappresenta il numero esecuzioni della funzione 65. Dovremo incrementare fino a 7 questo valor. La seconda riga 00000001 fino a quando non sono state eseguite le 7 funzioni 65, 00000000 al raggiungimento della settima iterazione.
4. Ripetere i passi 2 e 3 per 7 volte. Si hanno 5 minuti per concludere l’operazione.

Agile Day 2011

Anche quest'anno eccomi a stilare il mio personalissimo resoconto dell'Agile Day.
In primo luogo vorrei ringraziare gli organizzatori, che hanno svolto un lavoro perfetto. Se non ci siamo "accorti" di voi è perché tutto ha funzionato al meglio: bravi!
Ed ora mia una interpretazione delle sessioni a cui ho partecipato.

Back to basics: OOP and design

Il senso dell'intervento di Paolo Polce sta tutto nel titolo: dopo anni spesi a concentrarsi sul processo, abbiamo forse perso di vista i problemi tecnici, quasi fossero semplici dettagli implementativi. Scrum masters, sprints, story points, sì, vabbè, ma il codice? Beh, al codice ci penseranno le "risorse"... :-)
E' tempo di tornare a focalizzarsi sulle "risorse", ovvero sui programmatori, e sulle loro competenze, che devono costantemente essere allenate, come i muscoli di un atleta.
Come ottenere lo scopo? Con buone letture, buoni strumenti, ed un continuo esercizio volto a creare design realmente ad oggetti. Una buona architettura Object Oriented modularizza i problemi tramite gli oggetti, ed evita quindi classi "Star gate" (spesso incarnate da dei Singleton), che leggono attraverso una pioggia di getter le informazioni più disparate, collassando al loro interno l'intera logica applicativa. Occorre quindi evitare i getter, scrivendo sempre più metodi che restituiscono void. Ma come testare queste architetture? La chiave consiste nel passare da test sullo stato degli oggetti, a test che ne verificano le interazioni.

Codice legacy: usciamo dal pantano!

Bel workshop di Stefano Leli e Simone Casciaroli. I partecipanti sono stati invitati a fare refactoring su un piccolo progetto, che nella gerarchia Bird-Duck-Chicken mostra un caratteristico caso di violazione del Principio di sostituzione di Liskov, il complesso edipico irrisolto della programmazione ad oggetti.
La sessione, terminata con la presentazione della soluzione dei relatori, è stata interessante, anche se avrebbe richiesto sicuramente almeno un'altra ora per riuscire al meglio.

Lean, A3 e kaizen

Claudio Perrone nel suo intervento ha illustrato i i Kaizen Memo ed il medoto A3.
I Kaizen Memo sono piccoli fogli di carta da appendere su una parete per dare evidenza ai miglioramenti raggiunti nel processo produttivo. Dovrebbero riportare il problema affrontato, la misura intrapresa per risolverlo e le conseguenze ottenute.
Il metodo A3 prevede di utilizzare un modulo di carta, solitamente di dimensione appunto A3, sul quale presentare in modo oggettivo:

  • la situazione corrente;
  • l'obiettivo da raggiungere (ciò definisce il problema come differenza tra situazione corrente ed obiettivo da realizzare);
  • l'analisi delle cause del problema;
  • l'elenco delle contromisure da adottare;
  • una matrice what-who-where-how per realizzare le contromisure;
  • un elenco di azioni supplementari (follow-up) da intreprendere in caso di problemi.

L'intervento è proseguito definendo la figura del manager ideale, che non dovrebbe essere né un poliziotto che punisce chi si comporta male, né una mamma che coccola i suoi figli, e neppure una figura assente. Il vero manager dovrebbe invece essere una persona che si occupa di eliminare i problemi che ostacolano il processo produttivo. La domanda che un manager dovrebbe rivolgere ai suoi sottoposti non è "cosa hai prodotto ieri", ma "quali problemi hai avuto".
Claudio Perrone ha concluso dando una bella definizione dei metodi lean/agili: strumenti per fare soldi attraverso la crescita delle persone.

Back to basics hands-on

Antonio Carpentieri e Paolo Polce hanno condotto un efficace workshop sul design ad oggetti. Utilizzando come esempio il gioco del monopoli, hanno mostrato nella pratica come realizzare software ad oggetti senza abusare di getters e favorendo composizione, basso accoppiamento ed alta coesione.
Molto importante la sottolineatura finale di Antonio Carpentieri che ha ripreso il keynote di Paolo Polce: un programmatore non può crescere lavorando solo su codice di produzione. Come un atleta non migliora solo con le partite, ma soprattutto con gli allenamenti, anche chi sviluppa software non può non allenarsi praticando i kata.

Unit Tests VS End to End Tests

Probabilmente il mio giudizio su questo intervento è falsato dalla fatica accumulata alla fine di una giornata così intensa, ma dalla presentazione di Domenico Musto non sono riuscito a trarre nessuna informazione interessante. Chiedo venia.

Conclusioni

Anche questa edizione dell'Agile Day è stata all'altezza delle aspettative. Mi è piaciuta molto l'enfasi sul codice, dopo troppo tempo speso sui problemi di processo. Grazie ancora agli organizzatori ed arrivederci al 2013!

Porte IBM Client Access per AS400

Uso questo post come promemoria per l'elenco delle porte usate da IBM Client Access, conosciuto anche come IBM i Access.
Ricapitolando, le porte indispensabili per l'emulazione video sono

  • Server Mapper - 449
  • License Management - 8470
  • Signon Verification - 8476
  • Telnet - 23

Per ODBC/JDBC

  • Server Mapper - 449
  • Signon Verification - 8476
  • Database - 8471

Ecco l'elenco completo delle porte

Funzione Nome server Non-SSL SSL
Mappa porte servizi as-svrmap 449 449
Gestore licenze as-central 8470 9470
Database as-database 8471 9471
Code dati as-dtaq 8472 9472
Accesso ai File as-file 8473 9473
Stampa di rete as-netprt 8474 9474
Comando remoto as-rmtcmd 8475 9475
Verifica collegamento as-signon 8476 9476
Telnet (emulazione 5250) telnet 23 992
Amministrazione HTTP as-admi 2001 2010
Management Central as-mgtc 5555 and 5544 5566
DRDA DRDA 446 ---
DDM DDM 447 448
NetServer netbios 137 ---
NetServer CIFS 445 ---
NetServer netbios 139 ---
Service Tools Server as-sts 3000 ---
RUNRMTCMD REXEC 512 ---