SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
VOYAGE AU CENTRE DU CERVEAU HUMAINVOYAGE AU CENTRE DU CERVEAU HUMAIN
ou comment manipuler des données binaires en javascriptou comment manipuler des données binaires en javascript
THOMAS, WEB DEVELOPER.THOMAS, WEB DEVELOPER.
SPINESPINE
Université de Bordeaux
×
Harvard Medical School
Analyser des IRM du cerveau
par le grand public sur tablette
IRMIRM
Imagerie par Résonance Magnétique
IMAGE VOXELIMAGE VOXEL
my_brain.nii
Nifti-1
In web we trust
1011010001101011100000110010101010000001010100010
LE BINAIRELE BINAIRE
11 ,, 1 01 0 ,, 1 11 1 ,, 1 0 01 0 0 ,, 1 0 11 0 1
1 BIT1 BIT == 00 || 11
8 BITS8 BITS == 1 OCTET1 OCTET == 1001011010010110
1024 OCTETS1024 OCTETS ==1 KO1 KO == 8192 BITS8192 BITS
536,870,912 OCTETS536,870,912 OCTETS
REPRESENTER L'INFORMATIONREPRESENTER L'INFORMATION
NUMÉRISER VOTRE INFORMATIONNUMÉRISER VOTRE INFORMATION
NUMÉRO DE SÉCURITÉ SOCIALENUMÉRO DE SÉCURITÉ SOCIALE
189103818504886
STOCKER LES NOMBRES EN BINAIRESTOCKER LES NOMBRES EN BINAIRE
base 10 => base 2
REPRÉSENTER UNE IMAGE EN BINAIREREPRÉSENTER UNE IMAGE EN BINAIRE
Une grille de pixel
1 pixel = 1 couleur
1 couleur = 3 valeurs RVB
1 valeur = 1 entier de 0 à 255
ENTIER SUR 8 BITENTIER SUR 8 BIT
00000000 = 0
11111111 = 255
256 valeurs possibles
3 x 8 bits = 24 bits
16,777,216 valeurs possibles
001100100100010100000101010011100101011010101011
506957886171
ENTIER SUR 16 BITENTIER SUR 16 BIT
0000000000000000 = 0
1111111111111111 = 65535
65 536 valeurs possibles
001100100100010100000101010011100101011010101011
12869135822187
Une chaine binaire n'a pas de signi cation en soi.
MANIPULER DU BINAIREMANIPULER DU BINAIRE
EN JAVASCRIPTEN JAVASCRIPT
ARRAYBUFFERARRAYBUFFER
001100100100010100000101010011100101011010101011
const buffer = new ArrayBuffer(byteLength)
TYPEDARRAYSTYPEDARRAYS
00110010 01000101 00000101 01001110 01010110 10101011
const view = new Uint8Array(buffer)
[50, 69, 5, 78, 86, 171]
0011001001000101 0000010101001110 0101011010101011
const view = new Uint16Array(buffer)
[12869, 1358, 22187]
ECRITUREECRITURE
11111111 01000101 00000101 01001110 01010110 10101011
view[0] = 255;
ATTENTION AUX DÉPASSEMENTS !ATTENTION AUX DÉPASSEMENTS !
546 = 1000100010
view[0] = 546;
view[0] === 34;
PLEIN D'UTILITAIRES!PLEIN D'UTILITAIRES!
Int8Array, Float32Array, Uint8ClampedArray, Uint32Array, ...
new Uint8Array(buffer, 2, 4);
ArrayBuffer.slice(0, 352);
RECEVOIR DES DONNÉES EXISTANTESRECEVOIR DES DONNÉES EXISTANTES
XMLHttpRequest
const request = new XMLHttpRequest();
request.responseType = 'arraybuffer';
request.open('GET', 'http://my.brain.com/my_brain.nii');
request.addEventListener('load', () => {
const buffer = request.response;
});
request.send();
FileReader
const file = document.getElementById('my-file').files[0];
const buffer = new FileReader().readAsArrayBuffer(file);
WebSocket
const socket = new WebSocket('ws://localhost');
socket.binaryType = 'arraybuffer';
socket.send(buffer);
// ---
socket.on('message', (event) => { const buffer = event.data; })
LA SPEC NIFTI-1LA SPEC NIFTI-1
HEADER SUR 352 OCTETSHEADER SUR 352 OCTETS
40 Nombre de dimensions: 3 (ou 4 )
42 44 46 Largeur, hauteur et profondeur
70 72 DataType et Nombre de bit par voxel
... Information d'échelles, description, etc.
MANIPULER LE HEADERMANIPULER LE HEADER
const header = new DataView(buffer, 0, 352);
const width = header.getUint16(42); // 256
const height = header.getUint16(44); // 256
const depth = header.getUint16(46); // 176
const dataType = header.getUint16(70); // 16 (Float32Array)
const bitPerVoxel = header.getUint16(72); // 32
BODY À PARTIR DE L'OCTET 352BODY À PARTIR DE L'OCTET 352
Suite de voxel où 1 voxel = 1 entier.
46 137 696 octets
46,1 Mo
const size = 352 + (length * width * depth) * (bitPerVoxel / 8);
MANIPULER LE BODYMANIPULER LE BODY
const body = new Float32Array(buffer, 352);
x
d e m o . t o m 3 2 i . f r
POURQUOI C'EST COOL ?POURQUOI C'EST COOL ?
LE POIDSLE POIDS
JSON:JSON: 54 OCTETS (54 CARACTÈRE)54 OCTETS (54 CARACTÈRE)
BINAIRE:BINAIRE: 6 OCTETS (1 + 1 + 2 + 2)6 OCTETS (1 + 1 + 2 + 2)
{ "event": "position", "id": 19, "x": 125, "y": 158 }
[event sur 1 octet][id sur 1 octet][x sur 2 octets][y sur 2 octets]
⚡⚡
RAPIDITÉ DE L'ENCODAGE / DÉCODAGERAPIDITÉ DE L'ENCODAGE / DÉCODAGE
SUPPORTE TOUT, SUPPORTÉ PARTOUT.SUPPORTE TOUT, SUPPORTÉ PARTOUT.
☠☠
POURQUOI C'EST CHAUD ?POURQUOI C'EST CHAUD ?
Pas lisible
Rigide
Peu de bug
QUELQUES IDÉES D'UTILISATIONQUELQUES IDÉES D'UTILISATION
Lire et écrire un format tiers.
Jeu en temps réel.
Filtres Instagram.
Javascript gère bien le binaire
MERCI !MERCI !
SOURCESSOURCES
QUESTIONS ?QUESTIONS ?
Spec cation nit -1
Tom32i/binary-brain
@Tom32i

Más contenido relacionado

Más de La Cuisine du Web

Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNELa Cuisine du Web
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSLa Cuisine du Web
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDLa Cuisine du Web
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETLa Cuisine du Web
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELLa Cuisine du Web
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNLa Cuisine du Web
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMELa Cuisine du Web
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...La Cuisine du Web
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...La Cuisine du Web
 
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYAudio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYLa Cuisine du Web
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIALa Cuisine du Web
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETLa Cuisine du Web
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...La Cuisine du Web
 
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...La Cuisine du Web
 
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...La Cuisine du Web
 
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXPratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXLa Cuisine du Web
 
La Grande Galerie de l’Evolution Digitale par Geneviève PETIT
La Grande Galerie de l’Evolution Digitale par Geneviève PETITLa Grande Galerie de l’Evolution Digitale par Geneviève PETIT
La Grande Galerie de l’Evolution Digitale par Geneviève PETITLa Cuisine du Web
 
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSE
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSELes millennials ces collaborateurs 2.0 par Rodolphe PELOSSE
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSELa Cuisine du Web
 
Chatbots : vers une révolution de la relation client ? par Thomas SABATIER
Chatbots : vers une révolution de la relation client ? par Thomas SABATIERChatbots : vers une révolution de la relation client ? par Thomas SABATIER
Chatbots : vers une révolution de la relation client ? par Thomas SABATIERLa Cuisine du Web
 
Le branding est un voyage (pas une destination) par Sébastien NAVIZET
Le branding est un voyage (pas une destination) par Sébastien NAVIZETLe branding est un voyage (pas une destination) par Sébastien NAVIZET
Le branding est un voyage (pas une destination) par Sébastien NAVIZETLa Cuisine du Web
 

Más de La Cuisine du Web (20)

Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNE
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUS
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARD
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANET
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDEL
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMME
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
 
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREYAudio procédural : la révolution WebAssembly ! par Yann ORLAREY
Audio procédural : la révolution WebAssembly ! par Yann ORLAREY
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIA
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSET
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
 
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
 
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
 
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXPratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
 
La Grande Galerie de l’Evolution Digitale par Geneviève PETIT
La Grande Galerie de l’Evolution Digitale par Geneviève PETITLa Grande Galerie de l’Evolution Digitale par Geneviève PETIT
La Grande Galerie de l’Evolution Digitale par Geneviève PETIT
 
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSE
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSELes millennials ces collaborateurs 2.0 par Rodolphe PELOSSE
Les millennials ces collaborateurs 2.0 par Rodolphe PELOSSE
 
Chatbots : vers une révolution de la relation client ? par Thomas SABATIER
Chatbots : vers une révolution de la relation client ? par Thomas SABATIERChatbots : vers une révolution de la relation client ? par Thomas SABATIER
Chatbots : vers une révolution de la relation client ? par Thomas SABATIER
 
Le branding est un voyage (pas une destination) par Sébastien NAVIZET
Le branding est un voyage (pas une destination) par Sébastien NAVIZETLe branding est un voyage (pas une destination) par Sébastien NAVIZET
Le branding est un voyage (pas une destination) par Sébastien NAVIZET
 

Voyage au centre du cerveau humain ou comment manipuler des données binaires en Javascript par Thomas JARRAND