SlideShare a Scribd company logo
1 of 178
Download to read offline
Il fascino della supercazzola
Breve viaggio nel mondo dei linguaggi esoterici
CODEMOTION MILAN - SPECIAL EDITION
10 – 11 NOVEMBER 2017
Andrea Maietta
Esoterico
In ambito filosofico e religioso, si dicono
esoterici le dottrine e gli insegnamenti
segreti, che non devono essere divulgati
perché destinati a pochi
Treccani, enciclopedie online
Dicesi…
Monicelli
Monicelli
Il linguaggio
Scritto da Stefano Sanfilippo, da un’idea
di Alessandro Barenghi, Michele Tartara e
Nicola Vitucci
Il linguaggio
Scritto da Stefano Sanfilippo, da un’idea
di Alessandro Barenghi, Michele Tartara e
Nicola Vitucci
Comprensibile, stile C
Il linguaggio
Scritto da Stefano Sanfilippo, da un’idea
di Alessandro Barenghi, Michele Tartara e
Nicola Vitucci
Comprensibile, stile C
Scopo goliardico
Il linguaggio
Main
Lei ha clacsonato
Il linguaggio
Main
Lei ha clacsonato
Returning
Vaffanzum <espressione>!
Il linguaggio
Main
Lei ha clacsonato
Returning
Vaffanzum <espressione>!
Vaffanzum!
Il linguaggio
Espressioni
Più, meno, per, maggiore di…
Il linguaggio
Espressioni
Più, meno, per, maggiore di…
Shift
antani con scappellamento a sinistra per 2
Il linguaggio
Espressioni
Più, meno, per, maggiore di…
Shift
antani con scappellamento a sinistra per 2
antani << 2
Variabili
Dichiarazione di una variabile
voglio antani, Necchi
Variabili
Dichiarazione di una variabile
voglio antani, Necchi
Necchi: int
Mascetti: char
Perozzi: float
Melandri: bool
Sassaroli: double
Variabili
Assegnazione
<variabile> come fosse <espressione>
Variabili
Assegnazione
<variabile> come fosse <espressione>
antani come fosse 2
antani come se fosse 2
Variabili
Assegnazione
<variabile> come fosse <espressione>
antani come fosse 2
antani come se fosse 2
Dichiarazione e assegnazione
voglio <variabile> come fosse <espressione>
Variabili
Assegnazione
<variabile> come fosse <espressione>
antani come fosse 2
antani come se fosse 2
Dichiarazione e assegnazione
voglio <variabile> come fosse <espressione>
voglio antani, Necchi come se fosse 4
Input/Output
Input/Output
Input
mi porga <variabile>
Input/Output
Input
mi porga <variabile>
Output
<espressione> a posterdati
Cicli
Uno, equivalente a do {} while ();
stuzzica
<istruzioni>
e brematura anche, se <condizione>
Cicli
Uno, equivalente a do {} while ();
stuzzica
<istruzioni>
e brematura anche, se <condizione>
voglio antani, Necchi come fosse 10
stuzzica
antani a posterdati
antani come fosse antani meno 1
e brematura anche, se antani
maggiore uguale a 0
Condizioni
Two costrutt is megl’ che uan
che cos’è <variabile>?
<condizione>
<istruzioni>
o magari <condizione>:
<istruzioni>
o magari <condizione>:
<istruzioni>
o tarapia tapioco:
<istruzioni>
e velocità di esecuzione
Condizioni
Two costrutt is megl’ che uan
che cos’è il genio?
maggiore di mobiletto:
genio come se fosse 2
o tarapia tapioco:
genio come se fosse 0
e velocità di esecuzione
Funzioni
Dichiarazione
blinda la supercazzola [<tipo>]
<nome> [con <parametro> <tipo>[,
<parametro> <tipo>…]] o scherziamo?
<istruzioni>
Funzioni
Dichiarazione
blinda la supercazzola Necchi
antanizzata con alfio Mascetti o
scherziamo?
vaffanzum alfio – 2!
Funzioni
Dichiarazione
blinda la supercazzola Necchi
antanizzata con alfio Mascetti o
scherziamo?
vaffanzum alfio – 2!
int antanizzata(char alfio) {
return alfio meno 2!
}
Funzioni
Dichiarazione
blinda la supercazzola Necchi
antanizzata con alfio Mascetti,
genio Perozzi o scherziamo?
cos’è il genio?
maggiore di alfio
vaffanzum genio!
o tarapia tapioco:
vaffanzum alfio!
e velocità di esecuzione
Funzioni
Invocazione
brematurata la supercazzola <nome>
[con <espressione>[, <espressione>…]
o scherziamo?
Funzioni
Invocazione
brematurata la supercazzola <nome>
[con <espressione>[, <espressione>…]
o scherziamo?
antani come se fosse brematurata la
supercazzola antanizzata con barilotto
diviso 3 o scherziamo? per 2
Funzioni
Invocazione
brematurata la supercazzola <nome>
[con <espressione>[, <espressione>…]
o scherziamo?
antani come se fosse brematurata la
supercazzola antanizzata con barilotto
diviso 3 o scherziamo? per 2
antani = antanizzata(barilotto / 3) * 2
Eccezioni e asserzioni
Eccezioni e asserzioni
Eccezioni
avvertite don ulrico
Eccezioni e asserzioni
Eccezioni
avvertite don ulrico
Asserzioni
ho visto <espressione>!
Commenti
Commenti
Normali
bituma
Commenti
Normali
bituma
antani come se fosse 2 bituma, scusi
conte, noi siamo in 4 con rinforzino
Commenti
Normali
bituma
antani come se fosse 2 bituma, scusi
conte, noi siamo in 4 con rinforzino
Meta
# incrementa il valore di antani
Hello World
Hello World
# Author: Alessandro Pellegrini <alessandro@pellegrini.tk>
# Released under GPLv3
Lei ha clacsonato
voglio una bucaiola, Necchi come se fosse 0 voglio prematurata, Mascetti come
se fosse 72
prematurata a posterdati voglio antifurto, Mascetti come se fosse 87.
voglio una cofandina, Mascetti come se fosse prematurata con scappellamento a
sinistra per 1
cofandina come fosse cofandina meno 33 brematurata la supercazzola antanizzata
con antifurto,
cofandina o scherziamo? vaffanzum! bituma scusi, noi siamo in quattro.
blinda la supercazzola antanizzata con Alfio Mascetti, tarapia Mascetti o
scherziamo?
voglio vicesindaco, Mascetti come se fosse 101 vicesindaco a posterdati voglio
pastene,
Mascetti come se fosse vicesindaco più 7 pastene a posterdati bituma in un
certo senso.
pastene a posterdati tarapia a posterdati Alfio a posterdati tarapia a
posterdati
voglio scappellamento, Mascetti come se fosse 114 scappellamento a posterdati
pastene a posterdati voglio Antani, Mascetti come se fosse pastene meno 8
Antani a posterdati
Fibonacci
Lei ha clacsonato
voglio antani, Necchi come se fosse 0
voglio pastene, Necchi come se fosse 1
voglio un barilotto, Necchi
mi porga il barilotto
stuzzica
pastene a posterdati
voglio un passaggio, Necchi come fosse antani
antani come fosse pastene
pastene come fosse il pastene più il
passaggio
barilotto come fosse il barilotto meno 1
e brematura anche, se il barilotto maggiore di 0
brainf**k
Il linguaggio
Creato nel 1993 da Urban Müller
Il linguaggio
Creato nel 1993 da Urban Müller
Stile estremamente minimalista
Il linguaggio
Creato nel 1993 da Urban Müller
Stile estremamente minimalista
Turing-completo
Compilatore molto piccolo (100 byte)
Il linguaggio
Creato nel 1993 da Urban Müller
Stile estremamente minimalista
Turing completo
Compilatore molto piccolo (100 byte)
Non pensato per utilizzi pratici
Who can program anything useful with it?
☺
L’architettura
Instruction pointer
L’architettura
Instruction pointer
Array di 30.000 celle da 8 byte a 0
Data pointer
L’architettura
Instruction pointer
Array di 30.000 celle da 8 byte a 0
Data pointer
Input stream di byte
Output stream di byte
I comandi
Ci sono solo 8 comandi, ciascuno dei quali
consiste in un solo carattere.
I comandi
Ci sono solo 8 comandi, ciascuno dei quali
consiste in un solo carattere.
Tutto il resto è commento.
I comandi
Istruzione Significato
> Sposta il puntatore dati nella cella successiva a destra
< Sposta il puntatore dati nella cella precedente a sinistra
+ Incrementa il byte indirizzato dal puntatore dati
- Decrementa il byte indirizzato dal puntatore dati
. Output del byte indirizzato dal puntatore dati
, Accetta un input di un byte e lo memorizza nel byte
indirizzato dal puntatore dati
[ Se il byte indirizzato dal puntatore dati è zero salta in avanti
all’istruzione dopo il corrispondente ]
] Se il byte indirizzato dal puntatore dati è diverso da zero
salta all’indietro all’istruzione dopo il corrispondente [
I comandi corrispondenti in C
Istruzione Significato
(inizio) char array[INFINITELY_LARGE_SIZE] = {0};
char *ptr=array;
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ While (*ptr) {
] }
Il programma più semplice
Cosa fa?
[-]
Il programma più semplice
Cosa fa?
[-]
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
Il programma più semplice
Cosa fa?
[-]
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
…non fa nulla!
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
>>>>++
^
[0][0][0][0][0]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
>>>>++
^
[0][0][0][0][0]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
>>>>++
^
[0][0][0][0][0]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
>>>>++
^
[0][0][0][0][0]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
>>>>++
^
[0][0][0][0][1]
^
Qualcosa di più interessante
Cosa fa?
>>>>++
Blocchi di memoria e puntatore dati:
[0][0][0][0][1]
^
>>>>++
^
[0][0][0][0][2]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[0][0][0][0][0]
^
++>+++++[<+>-]
^
[2][0][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[2][0][0][0][0]
^
++>+++++[<+>-]
^
[2][0][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[2][0][0][0][0]
^
++>+++++[<+>-]
^
[2][5][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[2][5][0][0][0]
^
++>+++++[<+>-]
^
[2][5][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[2][5][0][0][0]
^
++>+++++[<+>-]
^
[2][5][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[2][5][0][0][0]
^
++>+++++[<+>-]
^
[3][5][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][5][0][0][0]
^
++>+++++[<+>-]
^
[3][5][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][5][0][0][0]
^
++>+++++[<+>-]
^
[3][4][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][4][0][0][0]
^
++>+++++[<+>-]
^
[3][4][0][0][]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][4][0][0][0]
^
++>+++++[<+>-]
^
[3][4][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][4][0][0][0]
^
++>+++++[<+>-]
^
[4][4][0][0][0]
^
Qualcosa di più utile
Cosa fa?
++>+++++[<+>-]
Blocchi di memoria e puntatore dati:
[3][4][0][0][0]
^
++>+++++[<+>-]
^
[7][0][0][0][0]
^
Sommiamo due numeri
E ora aggiungiamo l’output
++>+++++[<+>-]<.
[7][0][0][0][0]
^
Sommiamo due numeri
E ora aggiungiamo l’output
++>+++++[<+>-]<.
Ti piacerebbe… ma non funziona!
Sommiamo due numeri
E ora aggiungiamo l’output
++>+++++[<+>-]<.
Ti piacerebbe… ma non funziona!
[7][0][0][0][0]
^
7  BEL
Suona un campanello?
Sommiamo due numeri
E ora aggiungiamo l’output
++>+++++[<+>-]<.
Ti piacerebbe… ma non funziona!
[7][0][0][0][0]
^
7  BEL
Suona un campanello?
ASCII Encoded!
Sommiamo due numeri
In ASCII lo 0 vale 48, quindi per stampare
il glifo che rappresenta il 7 devo
aggiungere 48 al valore che ho nella cella
indirizzata dal puntatore
Sommiamo due numeri
In ASCII lo 0 vale 48, quindi per stampare
il glifo che rappresenta il 7 devo
aggiungere 48 al valore che ho nella cella
indirizzata dal puntatore
Come si fa?
Sommiamo due numeri
In ASCII lo 0 vale 48, quindi per stampare
il glifo che rappresenta il 7 devo
aggiungere 48 al valore che ho nella cella
indirizzata dal puntatore
Come si fa?
[7][0][0][0][0]
^
Sommiamo due numeri
In ASCII lo 0 vale 48, quindi per stampare
il glifo che rappresenta il 7 devo
aggiungere 48 al valore che ho nella cella
indirizzata dal puntatore
Come si fa?
[7][0][0][0][0]
^
<++++++++++++++++++++++++++++++
++++++++++
Sommiamo due numeri
Aggiungiamo 6x8
cioè aggiungiamo 6 per 8 volte
Come si fa?
[7][0][0][0][0]
^
++++++++[<++++++>-]
Sommiamo due numeri
Aggiungiamo 6x8
cioè aggiungiamo 6 per 8 volte
Come si fa?
[7][0][0][0][0]
^
++++++++[<++++++>-]
(oppure 6x4x2, o 3x2x2x2x2x2…)
Sommiamo due numeri
Aggiungiamo 6x8
cioè aggiungiamo 6 per 8 volte
Come si fa?
[13][7][0][0][0]
^
++++++++[<++++++>-]
Sommiamo due numeri
Il codice completo
++>+++++[<+>-] somma 5 e 2
++++++++[<++++++>-] aggiunge 48
<. stampa
Sommiamo due numeri
Il codice completo
++>+++++[<+>-] somma 5 e 2
++++++++[<++++++>-] aggiunge 48
<. stampa
++>+++++[<+>] ++++++++[<++++++>-] <.
Sommiamo due numeri
Il codice completo
++>+++++[<+>-] somma 5 e 2
++++++++[<++++++>-] aggiunge 48
<. stampa
++>+++++[<+>] ++++++++[<++++++>-] <.
++>+++++[<+>]++++++++[<++++++>-]<.
Sommiamo due numeri
E se vogliamo usare l’input per inserire gli
addendi?
Sommiamo due numeri
E se vogliamo usare l’input per inserire gli
addendi?
Dobbiamo fare lo stesso giochino, ma al
contrario: se digitiamo 2 non stiamo
memorizzando il numero 2, ma la sua
rappresentazione ASCII che è il numero
decimale 50
Hello World
Hello World
Un esempio facile facile, per cominciare
Hello World
Un esempio facile facile, per cominciare
++++++++[>++++[>++>+++>+++>+<<<<-
]>+>+>->>+[<]<-]>>.>---
.+++++++..+++.>>.<-.<.+++.------.---
-----.>>+.>++.
The game of life
The game of life
Un esempio facile facile, per cominciare
++++++++[>++++[>++>+++>+++>+<<<<-
]>+>+>->>+[<]<-]>>.>---
.+++++++..+++.>>.<-.<.+++.------.---
-----.>>+.>++.
99 bottles of beer on the wall
99 bottles of beer on the wall
Meta
Esiste un interprete per brainf**k scritto
in brainf**k
Ook!
Il linguaggio
Creato da David Morgan-Mar
Il linguaggio
Creato da David Morgan-Mar
Primo di una (fin troppo lunga) serie
Principi di design
1. Un linguaggio di programmazione
dovrebbe essere facilmente leggibile e
scrivibile da un orango
Principi di design
1. Un linguaggio di programmazione
dovrebbe essere facilmente leggibile e
scrivibile da un orango
2. La sintassi dovrebbe essere semplice,
facile da ricordare, e non deve usare la
parola «scimmia»
Principi di design
1. Un linguaggio di programmazione
dovrebbe essere facilmente leggibile e
scrivibile da un orango
2. La sintassi dovrebbe essere semplice,
facile da ricordare, e non deve usare la
parola «scimmia»
3. Le banane sono buone
I comandi corrispondenti in
Brainf**k
Istruzione Significato
Ook. Ook? >
Ook? Ook. <
Ook. Ook. +
Ook! Ook! -
Ook! Ook. .
Ook. Ook! ,
Ook! Ook? [
Ook? Ook! ]
Hello World
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook?
Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook?
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook?
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.
COW
Il linguaggio
Creato da Sean Heber nel 2003, descritto
in un paper da Alex van Oostenrijk e
Martijn van Beek nel 2004
Il linguaggio
Creato da Sean Heber nel 2003, descritto
in un paper da Alex van Oostenrijk e
Martijn van Beek nel 2004
Turing-completo
Il linguaggio
Creato da Sean Heber nel 2003, descritto
in un paper da Alex van Oostenrijk e
Martijn van Beek nel 2004
Turing-completo
Più potente di brainf**k: ha ben 12
comandi!
Principi di design
1. Linguaggio pensato per i bovini
Principi di design
1. Linguaggio pensato per i bovini
2. Visto che i bovini hanno un linguaggio
piuttosto limitato, si usano solo le
parole che questi utilizzano
normalmente
Principi di design
1. Linguaggio pensato per i bovini
2. Visto che i bovini hanno un linguaggio
piuttosto limitato, si usano solo le
parole che questi utilizzano
normalmente
3. In realtà l’unica parola che sembrano
comprendere è «moo», con le sue
variazioni. Di conseguenza…
Hello World
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO Moo Moo MoO MoO
MoO Moo OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO Moo MOo MOo MOo MOo MOo MOo
MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo
MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo MOo Moo MOo MOo
MOo MOo MOo MOo MOo MOo Moo MoO MoO MoO Moo MOo MOo MOo MOo MOo MOo Moo MOo
MOo MOo MOo MOo MOo MOo MOo Moo OOO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
MoO MoO MoO MoO Moo
Bodyf**k
Ma che avete capito?
Il linguaggio
Creato da Nik Hanselman nell’inverno del
2009/2010
Il linguaggio
Creato da Nik Hanselman nell’inverno del
2009/2010
Usa una videocamera come imput
,
Whitespace
Spaces or tabs?
Il linguaggio
Creato nel 2003 da Edwin Brady e Chris
Morris per ridare dignità a spazi,
tabulazioni e ritorni a capo, troppo spesso
bistrattati o ignorati dagli altri linguaggi.
Il linguaggio
Creato nel 2003 da Edwin Brady e Chris
Morris per ridare dignità a spazi,
tabulazioni e ritorni a capo, troppo spesso
bistrattati o ignorati dagli altri linguaggi.
Pubblicato su Slashdot il primo di aprile.
Il linguaggio
Creato nel 2003 da Edwin Brady e Chris
Morris per ridare dignità a spazi,
tabulazioni e ritorni a capo, troppo spesso
bistrattati o ignorati dagli altri linguaggi.
Pubblicato su Slashdot il primo di aprile.
Tutti hanno pensato che fosse un pesce.
Il linguaggio
Creato nel 2003 da Edwin Brady e Chris
Morris per ridare dignità a spazi,
tabulazioni e ritorni a capo, troppo spesso
bistrattati o ignorati dagli altri linguaggi.
Pubblicato su Slashdot il primo di aprile.
Tutti hanno pensato che fosse un pesce.
Non lo era.
Principi di design
29 istruzioni, suddivise in 5 categorie
Principi di design
29 istruzioni, suddivise in 5 categorie
Prima delle istruzioni si deve inserire un
IMP (Instruction Modification Parameter)
che specifica a quale categoria appartiene
l’istruzione
Qualche esempio
IMP Significato
[Spazio] Manipolazione dello stack
[Tab][Spazio] Operazioni aritmetiche
[Tab][Tab] Accesso casuale alla memoria
[Ritorno a capo] Controllo di flusso
[Tab][Ritorno a capo] I/O di periferiche
Hello World
Hello World
Piet
Il linguaggio
Creato da David Morgan-Mar, ispirato ai
dipinti di Piet Mondrian, da cui prende il
nome
Il linguaggio
Creato da David Morgan-Mar, ispirato ai
dipinti di Piet Mondrian, da cui prende il
nome
Non esiste un compilatore «ufficiale»:
fate quello che credete abbia più senso
Il linguaggio
Creato da David Morgan-Mar, ispirato ai
dipinti di Piet Mondrian, da cui prende il
nome
Non esiste un compilatore «ufficiale»:
fate quello che credete abbia più senso
Il codice appare come arte astratta
Il linguaggio
Ci sono 20 colori, 18 dei quali in rapporto
ciclico per colore e luminosità
Esecuzione
DP: Direction Pointer
CC: Codel Chooser
DP CC Codel chosen
right
left uppermost
right lowermost
down
left rightmost
right leftmost
left
left lowermost
right uppermost
up
left leftmost
right rightmost
Comandi
I comandi sono basati sulle transizioni di
colore
Lightness change
Hue change None 1 Darker 2 Darker
None push pop
1 Step add subtract multiply
2 Steps divide mod not
3 Steps greater Pointer switch
4 Steps duplicate Roll in(number)
5 Steps in(char) out(number) out(char)
Hello World
Fancy Hello World
Artistic Hello World
World Hello World
Tetris
99 bottles of beer
99 bottles of beer
Piet
Interprete brainf**k
Valentine’s card
Valentine’s card explained
Malbolge
Il linguaggio
Creato da Ben Olmstead nel 1998, con lo
scopo di creare un linguaggio che fosse il
più difficile possibile da utilizzare.
Il linguaggio
Creato da Ben Olmstead nel 1998, con lo
scopo di creare un linguaggio che fosse il
più difficile possibile da utilizzare.
Andrew Cooke riuscì a scrivere il primo
"Hello, world!" solo con l'aiuto di un
programma in Lisp
Il linguaggio
Creato da Ben Olmstead nel 1998, con lo
scopo di creare un linguaggio che fosse il
più difficile possibile da utilizzare.
Andrew Cooke riuscì a scrivere il primo
"Hello, world!" solo con l'aiuto di un
programma in Lisp
…ma solo più di due anni dopo!
Il linguaggio
L’effetto di ciascuna istruzione dipende
da dove si trova in memoria
Il linguaggio
L’effetto di ciascuna istruzione dipende
da dove si trova in memoria
Dati e codice sono nella stessa memoria
Il linguaggio
L’effetto di ciascuna istruzione dipende
da dove si trova in memoria
Dati e codice sono nella stessa memoria
Dopo ogni istruzione vengono
incrementati sia il data pointer sia
l’instruction pointer
Il linguaggio
Tutte le istruzioni sono automodificanti
secondo una tabella di permutazione (ma
non i jump)
Il linguaggio
Tutte le istruzioni sono automodificanti
secondo una tabella di permutazione (ma
non i jump)
Non ci sono operatori LOAD o STORE
Il linguaggio
Tutte le istruzioni sono automodificanti
secondo una tabella di permutazione (ma
non i jump)
Non ci sono operatori LOAD o STORE
Funziona con cifre ternarie (in base 3)
Il linguaggio
Tutte le istruzioni sono automodificanti
secondo una tabella di permutazione (ma
non i jump)
Non ci sono operatori LOAD o STORE
Funziona con cifre ternarie (in base 3)
E molto, molto altro…
Riassumendo
Hello World
(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@
b=`{^Lx8%$Xmrkpohm-
kNi;gsedcba`_^][ZYXWVUTSRQPONMLKJIH
GFEDCBA@?>=<;:9876543s+O<oLm
Hello World
(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@
b=`{^Lx8%$Xmrkpohm-
kNi;gsedcba`_^][ZYXWVUTSRQPONMLKJIH
GFEDCBA@?>=<;:9876543s+O<oLm
Output non perfetto…
HEllO WORld
A better Hello World
('&%:9]!~}|z2Vxwv-
,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm
-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!
~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
A better Hello World
('&%:9]!~}|z2Vxwv-
,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm
-,jcL(I&%$#"
`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!
~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
Output perfetto ☺
Hello, World!
Esoterico?
Cos’è questo?
/^(?!(?:(?:x22?x5C[x00-
x7E]x22?)|(?:x22?[^x5Cx22]x22?)){255,})(?!(?:(?:x22?x5C[x00-
x7E]x22?)|(?:x22?[^x5Cx22]x22?)){65,}@)(?:(?:[x21x23-
x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-x7E]+)|(?:x22(?:[x01-
x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-x7F]|(?:x5C[x00-
x7F]))*x22))(?:.(?:(?:[x21x23-x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-
x7E]+)|(?:x22(?:[x01-x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-
x7F]|(?:x5C[x00-x7F]))*x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--
)?[a-z0-9]+(?:-[a-z0-9]+)*.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--
)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-
f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-
9]?[0-9]))(?:.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-
9]))){3}))]))$/iD
Cos’è questo?
/^(?!(?:(?:x22?x5C[x00-
x7E]x22?)|(?:x22?[^x5Cx22]x22?)){255,})(?!(?:(?:x22?x5C[x00-
x7E]x22?)|(?:x22?[^x5Cx22]x22?)){65,}@)(?:(?:[x21x23-
x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-x7E]+)|(?:x22(?:[x01-
x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-x7F]|(?:x5C[x00-
x7F]))*x22))(?:.(?:(?:[x21x23-x27x2Ax2Bx2Dx2F-x39x3Dx3Fx5E-
x7E]+)|(?:x22(?:[x01-x08x0Bx0Cx0E-x1Fx21x23-x5Bx5D-
x7F]|(?:x5C[x00-x7F]))*x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--
)?[a-z0-9]+(?:-[a-z0-9]+)*.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--
)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-
f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-
9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-
9]?[0-9]))(?:.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-
9]))){3}))]))$/iD
Think again! Regexp per email in php ☺
Domande?
Il fascino della supercazzola
Breve viaggio nel mondo dei linguaggi esoterici
CODEMOTION MILAN - SPECIAL EDITION
10 – 11 NOVEMBER 2017
Andrea Maietta

More Related Content

Viewers also liked

Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017Codemotion
 
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Codemotion
 
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...Codemotion
 
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...Codemotion
 
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Codemotion
 
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...Codemotion
 
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...Codemotion
 
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017
Diego Viganò  - Milano Chatbots Meetup - Codemotion Milan 2017Diego Viganò  - Milano Chatbots Meetup - Codemotion Milan 2017
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017Codemotion
 
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...Codemotion
 
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...Codemotion
 
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...Alessandro Confetti - Learn how to build decentralized and serverless html5 a...
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...Codemotion
 
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017Codemotion
 
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015Luciano Fiandesio - Docker 101 | Codemotion Milan 2015
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015Codemotion
 
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015Monicelli - Stefano Sanfilippo - Codemotion Roma 2015
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015Codemotion
 
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...Codemotion
 
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Codemotion
 
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...Codemotion
 
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017Codemotion
 
Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel...
Luciano Mammino  - Cracking JWT tokens: a tale of magic, Node.JS and parallel...Luciano Mammino  - Cracking JWT tokens: a tale of magic, Node.JS and parallel...
Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel...Codemotion
 
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...Codemotion
 

Viewers also liked (20)

Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
Francesco Arcieri - La monetizzazione delle API - Codemotion Milan 2017
 
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
Carlo Sciolla - Above and beyond type systems with clojure.spec - Codemotion ...
 
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...
Carlo Ferrarini/Marco Dragoni - How to avoid delivery of unsanitary food with...
 
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
Thomas Rossetto - Container and microservices: a love story - Codemotion Mila...
 
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
Brian Ketelsen - Microservices in Go using Micro - Codemotion Milan 2017
 
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
Marco Balduzzi - Cyber-crime and attacks in the dark side of the web - Codemo...
 
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
Mobile Library Development - stuck between a pod and a jar file - Zan Markan ...
 
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017
Diego Viganò  - Milano Chatbots Meetup - Codemotion Milan 2017Diego Viganò  - Milano Chatbots Meetup - Codemotion Milan 2017
Diego Viganò - Milano Chatbots Meetup - Codemotion Milan 2017
 
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
 
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
Lucio Grenzi - Building serverless applications on the Apache OpenWhisk platf...
 
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...Alessandro Confetti - Learn how to build decentralized and serverless html5 a...
Alessandro Confetti - Learn how to build decentralized and serverless html5 a...
 
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017
Yan Cui - Serverless in production, an experience report - Codemotion Milan 2017
 
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015Luciano Fiandesio - Docker 101 | Codemotion Milan 2015
Luciano Fiandesio - Docker 101 | Codemotion Milan 2015
 
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015Monicelli - Stefano Sanfilippo - Codemotion Roma 2015
Monicelli - Stefano Sanfilippo - Codemotion Roma 2015
 
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...
Evelian Gabasova - The mysterious correlation: a detective story - Codemotion...
 
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
 
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...
Building multi lingual and empatic bots - Sander van den Hoven - Codemotion A...
 
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017
The Most Important Thing - Mike Lee - Codemotion Amsterdam 2017
 
Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel...
Luciano Mammino  - Cracking JWT tokens: a tale of magic, Node.JS and parallel...Luciano Mammino  - Cracking JWT tokens: a tale of magic, Node.JS and parallel...
Luciano Mammino - Cracking JWT tokens: a tale of magic, Node.JS and parallel...
 
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
Webinar: Mario Cartia - Facciamo il Punto su Presente e Futuro dei framework ...
 

More from Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Andrea Maietta - Il fascino della supercazzola: un breve viaggio nel mondo dei linguaggi esoterici - Codemotion Milan 2017