new kiss, my *sspeople.apache.org/~elecharny/kiss-my-ass.pdf · 2015. 1. 28. ·...
TRANSCRIPT
KISS, my *SS !
Emmanuel Lécharny
$ whoami
● 50 ans
● Concept, Atos, iMediation, IKTEK, Symas
● Apache committer depuis 2005
● Apache member depuis 2007
● Directory (LDAP), Mina (NIO), Fortress
(RBAC), Mavibot (BTree MVCC), Studio
(GUI), ...
La dictature du simple
“Ce qui se conçoit bien s'énonce
clairement et les mots pour le dire
viennent aisément”
Boileau
La magie du simple
“J’ai une démonstration véritablement
merveilleuse de cette proposition,
que cette marge est trop étroite pour
contenir.”
Fermat
“Un million de chômeurs, c'est un million
d'immigrés en trop”
FN, 1978
De ‘Simple’ à ‘Simpliste’...
De ‘Simple’ à ‘Simpliste’...
“Il faut faire payer les
riches !”
voire simplet...
Des solutions de “café du
commerce”
Two systems
● Notre cerveau dispose de 2 systèmes
● Un basé sur l’intuition
● l’autre s’appuie sur la réflexion
● Nous privilégions le premier.
(Thinking, fast and slow, Daniel
Kahneman)
Exemple...
Ann
approached
the bank
● A, B, C
● Ann va à la Banque
● 12, 13, 14
Pas d’ambiguité
Ce qu’on lit
● A, B ou 13 ?, C
● Ann s’approche de la banque / bergE ?
● 12, 13 ou B?, 14
Mais...
Ann
approached
the bank
● Notre cerveau élimine les ambiguités
● c’est contextuel
● Le choix est immédiat
● non conscient
● Réaliser la possibilité d’une ambiguité
demande un effort mental.
Vers le ‘simple’
La réalité...
Notre monde est COMPLEXE
La réalité...
Nous aimons la simplicité
La matière...
● Eau, air, terre, feu (Empédocle, 430 BC)
● Atome (Milet, 420 BC)
● back to eau, air, terre et feu
● Atomes (Mendeleiev, 1869)
● Nucléons (Thompson 1897, Rutherford 1912)
● Quarks (Gell-mann, 1969)
● ???
Simple ?
● fermions (12) et anti-fermions (12)
○ leptons (6)
○ quarks (6)
● Bosons (12)
○ photon
○ Z et W+/W-
○ 8 Gluons
● Boson de Higgs, graviton (?)
Retour à nos ovins
Informatique
Le tri
● à Bulle, sélection, insertion : N^2
● Shell : N*log^2(N)
● fusion : N*log(N) externe
● Quick Sort : N*log(N) -> N^2
● introsort : N*log(N) en place
● Heap : N*LOG(N)
● Arbre : N*loG(N) -> N^2
● AVL : N*log(N)
Le tri, 2
● Quid de la mémoire ?
● Quid du support ?
○ bande magnétique
○ disk rotatif
○ SSD
Contraintes physiques
● CPU
● Mémoire (RAM, Disque)
● bande passante
Contraintes connexes
● Concurrence
● Complexité algorithme
● Défaillances physiques
● Diversité des OS/machines
Contraintes humaines
● Temps
● Environnement de développement
● connaissances
● Collaboration
● Communication
● Organisation
Darwin avait raison !
● Même en informatique, tout
change !
● Technologies
● Langages
● Avenants...
Pour aller plus loin
quelques exemples
La concurrence
“What’s the best tool you find useful when
debugging a concurrence issue ?”
“LUCK”
La sécurité
● Disponibilité
● Intégrité
● Confidentialité
● Traçabilité
● Authentification
● Non-répudiation, imputation
Cryptographie
“Anyone, from the most clueless amateur to the best
cryptographer, can create an algorithm that he
himself can't break. It's not even hard. What is hard is
creating an algorithm that no one else can break,
even after years of analysis. And the only way to prove
that is to subject the algorithm to years of analysis
by the best cryptographers around.”
Bruce Schneier
Quelque liens utiles
http://blog.cryptographyengineering.com/
https://www.schneier.com/
Les frameworks
● JS
● Web
● ORM
● Cache
● OS
Mais quel framework ?
● Web
○ Spring
○ Play!
○ Struts
○ JSF
○ Vaadin
○ ...
Le code...
● Langages
○ Java
○ JS
○ Python/Perl/Ruby
○ Shell
○ P/SQL
L’effet taille
● Evolution ApacheDS :
○ 17/6/2004 : 84 810 slocs
○ 26/11/2014 : 765 588 slocs
○ ApacheDS, Ldap API, Mavibot, MINA,
Studio
L’effet périmètre
● ApacheDS :
○ Base de données
○ Concurrence/Cache
○ ASN/1 codecs
○ OSGi
○ Kerberos
○ CLients
Un exemple, DN parser
● DN = Distinguished Name :
○ dc=example, dc=com
● élément de base dans un serveur LDAP
Un exemple, DN parser
distinguishedName = [ relativeDistinguishedName *( ',' relativeDistinguishedName ) ]relativeDistinguishedName = attributeTypeAndValue *( '+' attributeTypeAndValue )attributeTypeAndValue = attributeType '=' attributeValueattributeType = descr / numericoidattributeValue = string / '#' 1*hexpairstring = [ ( leadchar / pair ) [ *( stringchar / pair ) ( trailchar / pair ) ] ]leadchar = LUTF1 / UTFMBLUTF1 = %x01-1F / %x21 / %x24-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7Ftrailchar = TUTF1 / UTFMBTUTF1 = %x01-1F / %x21 / %x23-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7Fstringchar = SUTF1 / UTFMBSUTF1 = %x01-21 / %x23-2A / %x2D-3A / %x3D / %x3F-5B / %x5D-7Fpair = '\' ( '\' / special / hexpair )special = escaped / ' ' / '#' / '='escaped = '"' / '+' / ',' / ';' / '<' / '>'hexpair = HEX HEXdescr = keystringHEX = DIGIT / %x41-46 / %x61-66numericoid = number 1*( DOT number )number = DIGIT / ( LDIGIT 1*DIGIT )DIGIT = %x30 / LDIGITLDIGIT = %x31-39keystring = leadkeychar *keycharleadkeychar = ALPHAALPHA = %x41-5A / %x61-7Akeychar = ALPHA / DIGIT / '-'UTFMB = UTF2 / UTF3 / UTF4UTF0 = %x80-BFUTF2 = %xC2-DF UTF0UTF3 = %xE0 %xA0-BF UTF0 / %xE1-EC 2(UTF0) / %xED %x80-9F UTF0 / %xEE-EF 2(UTF0)UTF4 = %xF0 %x90-BF 2(UTF0) / %xF1-F3 3(UTF0) / %xF4 %x80-8F 2(UTF0)
Un exemple, DN parser
● V 1 : Antlr
● V 2 : à la main (perfs x 2)
● V 3 : à la main + Antlr (perfs x 2)
● Passage de 60% du temps consommé à 15%
Un exemple, DN parser
● Retour d’expérience :
○ Les outils sont pratiques
○ Ils ne sont pas performants
○ Ils évitent plein de bugs
○ 99 / 1 (et pas 80 / 20)
○ les tests, les tests, les tests !
● V 0 : Basé sur Snacc (license privée)
● V 1 : règles de réécritures
● V 2 : Decodeur complet, avec switch the
grammaires : perfs x 20
● V 3 : Suppression des switches de
grammaires : perfs + 50%
● 2 personnes peuvent l’utiliser...
ASN/1 codec
Méthodologies
Agile !!! (WTF ?)
I see it when I believe it
Question : How much do you agree in:
“Use of agile methods has caused a better performance when looking
at the combination of productivity and user satisfaction.”
Result :
The agreement in the claim depended on their previous belief in agile
methods
http://www.scm.keele.ac.uk/ease/magne_key.pdF
I see it when I believe it
All values were
RANDOMLY
generated !
TDD
● Comment faire avec 1M Slocs ?
● Qu’est-ce qu’on teste ?
● Comment teste-t-on ?
● Comment teste-t-on les tests ?
● Combien ça coûte ?
“Test-first fundamentalism is like abstinence-only sex ed: An unrealistic, ineffective morality campaign for self-loathing and shaming.” (http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html )
Kanban, Lean, XP, Scrum...
● Fabrique-t-on des voitures ?
● Stabilité vs Changement ?
● Où sont les experts ?
● Jusqu’où perdre du temps ?
Au final...
● On ne sait toujours pas construire des
logiciels de manière industrielle.
● S’il y avait une bonne méthode, elle s’
imposerait...
Baisser les bras ?
● L’expérience…
● La formation !
● La collaboration
● Les outils (NIH Syndrom !)
● Le recul
● Accepter la complexité comme un
paramètre de l’équation !
C’est pourtant simple!
Accepter la
complexité
comme un paramètre
de l’équation !
Q & R