Fold

Mi ci è voluta più di qualche imprecazione per arrivare a questa implementazione :

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer -> 
orderedByAll.minus( orderedByAll.filter { !customer.orderedProducts.contains(it) }) })
}

Salvo poi scoprire nelle soluzioni che esisteva il magico intersect

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    // Return the set of products ordered by every customer
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer ->
        orderedByAll.intersect(customer.orderedProducts)
    })
}

L’esercizio era questo : https://github.com/Kotlin/kotlin-koans/blob/master/src/ii_collections/_22_Fold_.kt

Comunque Kotlin è bellissimo.

Deviazione standard con PL/SQL

Pl/Sql implementa la definizione probabilistica di deviazione standard, ovvero :

dv_std_probcon la comoda funzione STDDEV, mentre a me (e forse non solo a me) serviva la versione statistica, ovvero :

dv_std_statChe si traduce in  :

SQRT((1 / COUNT(*)) *  (SUM( $colonna  * $colonna ) – (COUNT(*) * AVG( $colonna ) * AVG( $colonna ))))

Immagini da wikipedia

Codemotion Milan 2014 – Secondo giorno

Appunti sugli speech del secondo giorno :

  • Why everyone is excited about Docker (and you should too…) tenuto da Carlo Bonamico : Si, Docker è veramente interessante. Permette di risolvere alcuni problemi che sono molto comuni: replicare ambienti di produzione anche complessi in locale, testare efficacemente, eseguire dei deploy sicuri. L’idea di base è avere qualcosa che assomigilia ad una virtual machine, ma è molto piu leggera ed è quindi possibile averne anche diverse decine in esecuzione su un computer desktop, ed è “stratificata” e componibile a moduli. Slides.
  • L’architettura di Stack Overflow tenuto da Marco Cecconi : come hanno risolto problemi inerenti l’elevato traffico in Stack Overflow. Da questo ho capito che .net ha grossi, grossi problemi col garbage collector. E tutto il lavoro sta nel cercare di instanziare il minor numero di oggetti possibili. Slides.
  • Evolutive experience design; o la sopravvivenza del più adatto tenuto da Luca Mascaro : l’incapacità dei programmatori di capire i babbani è una triste realtà. Più che altro per i babbani, che ogni giorno sono immersi in un mondo che non capiscono. Ma tant’è e quindi per essere un programmatore migliore ogni tanto è bene sentire uno o due speech tenuti da designer (ovvero utenti che sanno spiegare perchè non capiscono quello che per noi è ovvio). Cavolate a parte l’introduzione del concetto evoluzionistico al design è molto interessante. Non necessarimente la soluzione più raffinata è la migliore … o meglio è la migliore oggi, ma probabilmente avrà problemi ad affrontare i cambiamenti che inevitabilmente ci saranno. Due mini slide su tutte :

  • Designing for cross channel user experience tenuto da Chrissy Welsh : Sulla necessità di tenere conto che gli utenti del mobile, gli utenti desktop e gli utenti che si presentano di presona spesso (sempre?) sono le stesse persone e che bisogna offrigli la possibilità di fare ciò di cui hanno bisogno a prescindere dal canale che usano. E ovviamente non basta fare un sito responsive, come è stato fatto ripetere a tutti in coro stile alcolisti anonimi.
  • Time Series: Dalla Teoria alla Pratica con MongoDB tenuto da Massimo Brignoli, Ivan Fioravanti : l’utilizzo di mongoDB nelle sequenze temporali di dati, con alcuni trucchi per migliorare le performance in lettura e analisi. Sildes.

Repository ufficiale delle slides su slideshare .

Codemotion Milan 2014 – Primo giorno

Una volta tanto scrivo un post non automatizzato: il 28 e 29 novembre ho partecipato al codemotion 2014 a Milano e di seguito due righe sugli speech che ho seguito il primo giorno.

  • Become a Frontend Developer Ninja using HTML5, JavaScript and CSS3 tenuto da Marco Casario : Molto focalizzato sull’ottimizzazione prestazionale dell’html. Sono stati presentati alcuni strumenti di valutazione delle performance, sia interni al browser (Chrome in primis) che su siti esterni. Alcuni link che ho colto al volo sono presenti sul post di questa settimana. Sildes.
  • Recipes to develop a reactive and cloud-ready application using Scala and Akka tenuto da Roberto Bentivoglio : L’utilizzo di Akka come base per sistemi distribuiti per svolgere combiti complessi ma divisibili. Il framework astrae la complessita e lavorare con un core o 1000 non fa differenza ( qualcuno ha detto hadoop ?). Da ignorante di Akka e quasi ignorante di Scala ho faticato a seguire l’esposizione, ma l’impressione era di essere in buona compagnia. Slides.
  • Programming Motherfucker or how I rediscovered my hacker spirit tenuto da Ole Michaelis: La nascita e l’evoluzione di un pet-project. Le difficoltà (soprattutto per ottenere un design decente, grosso limite di molti programmato). Il pet-project è slidr.io e dovrebbe servire per condividere slide, ma al momento non è raggiungibile. Troppo successo? Comunque interessante e bello vedere come alti e bassi di progetti specie non pagati siano problemi che anche altri affrontano. Comunque rilasciate sempre! Edit: io non lo raggiungevo probabilmente per problemi di DNS. Le slides sono effettivamente li.
  • Fun with functional JavaScript tenuto da Kuba Waliński: L’amato (poco) e odiato (tanto) javascript sorprende come linguaggio pronto per la programmazione funzionale. Slides
  • Pragmatic Functional Refactoring with Java 8 tenuto da Raoul-Gabriel Urma : Introduzione alla programmazione funzionale con Java 8, con attenzione al’utilizzo dei Predicate e alle Lambda sulle collections per ottenere una maggiore leggibilità del codice e migliore riutilizzabilità. Interessante e comprensibile. Coautore di Java 8 in Action. Slides
  • Laziness, trampolines, monoids and other functional amenities: this is not your father’s Java tenuto da Mario Fusco: Quasi una seconda parte sulla programmazione funzionale con java 8, approfondimenti sul concetto di monoide (una volta che capisci i monoidi li vedi ovunque… sarà… ci credo per fiducia), laziness e trampolini. Interessante ma gli speech in inglese tenuti da italiani a italiani sono una forzatura che azzoppa la fruibilità e l’attenzione.  Coautore di Java 8 in Action. Slides.
  • La professione dello sviluppatore (3 anni dopo) Gabriele Lana : Scelta come “defaticamento” dopo la tripletta funzionale si è rivelato il talk più divertente della giornata, e quello che forse ha fatto riflettere di più. Tanti spunti, su come la professione del programmatore possa e debba migliorare, e se oggi è cosi è colpa in buona parte dei programmatori stessi. In poche parole ci vuole più consapevolezza del proprio valore e più etica in quello che si fà. E gli agenti per strappare contratti migliori. Si voglio decisamente un agente. Video del prequel (3 anni prima) . Per ora c’è solo qualche scatto e le slides, spero che l’organizzazione pubblichi il video integrale.

 

Agosto, tempo di statistiche

Qual’è il giorno meno produttivo ? Lunedi.
Quello di più ? Giovedi.
L’ora migliore in assoluto ? Le 11 di giovedi.
La peggiore ? le 18 di venerdi.
E comunque il mercoledi mai, dico mai, prima delle nove.

Il risultato dopo 756 giorni di sviluppo, 1262 commit per 728.000 righe di codice committate complessivamente. Molte delle quali poi cancellate.

P.S. : Nessuno sviluppatore è stato maltrattato per realizzare questo progetto.

Cose che ti tocca di vedere

ministero salute

La sorgente di una JSP del ministero della salute, trovata tramite downloadblog, con tanto di bellissima query generata con un parametro GET  non sanitizzato.

E poi a me bucano wordpress.

Non è giusto perche WP è fatto molto meglio di questa cosa anni 90. Non è giusto perchè fa danni a chi non ha migliaia di ore da investire in sicurezza, neanche volendo. Ma … alla fine … il software custom e con sorgenti private (non closed source, ma rilasciate all’unico cliente finale) anche se di qualità non eccelsa è difficile da attaccare.  La sicurezza attraverso la non conoscenza non dà certezze assolute, ma sembra che statisticamente renda di più della sicurezza tramite validazione della wisdom of the crowd.

Pessimismo ? forse solo realismo. Gli attacchi a wordpress e phpBB sono reali e documentati. Ed entrambi sono software scritti bene. Non perfetti (altrimenti non avrebbero vulnerabilità) ma neanche di una bruttezza proporzionale al numero di attacchi che ricevono che invece vanno di pari passo con la diffusione del software in questione.

Per farsi 2 risata sulla SQL injection ricordo : E-di-cognome-cosa-fai