This repository was archived by the owner on Sep 4, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
4143 lines (2817 loc) · 306 KB
/
atom.xml
File metadata and controls
4143 lines (2817 loc) · 306 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[Rossi Oddet]]></title>
<link href="http://roddet.github.com/atom.xml" rel="self"/>
<link href="http://roddet.github.com/"/>
<updated>2014-05-21T01:43:46-04:00</updated>
<id>http://roddet.github.com/</id>
<author>
<name><![CDATA[Rossi Oddet]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[Soirée Devoxx France 2014 au JUG Nantes]]></title>
<link href="http://roddet.github.com/2014/05/jugnantes-devoxx-france/"/>
<updated>2014-05-20T08:41:00-04:00</updated>
<id>http://roddet.github.com/2014/05/jugnantes-devoxx-france</id>
<content type="html"><![CDATA[<p>Ce mardi 20 mai, c’était soirée Devoxx France avec le <a href="http://nantesjug.org/#/">JUG Nantes</a>.</p>
<p>Le contenu :</p>
<ul>
<li>Un tour d’horizon de <em>Devoxx France 2014</em> avec <a href="http://nantesjug.org/#/speakers/thibaud_raison">Thibaud Raison</a> et <a href="http://nantesjug.org/#/speakers/pierre_cosson">Pierre Cosson</a>.</li>
<li>La session <em>Devoxx France 2014</em> <a href="http://cfp.devoxx.fr/devoxxfr2014/talk/UGD-950/Gradle%20ne%20fait%20pas%20que%20remplacer%20Maven"><em>Gradle ne fait pas que remplacer Maven</em></a> rejouée par <a href="https://twitter.com/CedricChampeau">Cédric Champeau</a>.</li>
</ul>
<h2>Tour d’horizon de Devoxx France 2014</h2>
<p><a href="http://nantesjug.org/#/speakers/thibaud_raison">Thibaud</a> et <a href="http://nantesjug.org/#/speakers/pierre_cosson">Pierre</a> ont fait un résumé de leurs parcours <em>Devoxx</em>, donné leurs avis sur différentes sessions.</p>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/mai14/retour-devoxx-france.jpg"></p>
<p>Ils ont identifié 4 thèmes principaux : Java 8, Javascript, Docker et Big Data. Les <em>Keynote</em> ne les ont pas vraiment marqué.</p>
<p><a href="http://nantesjug.org/#/speakers/thibaud_raison">Thibaud</a> et <a href="http://nantesjug.org/#/speakers/pierre_cosson">Pierre</a> ont noté quelques sessions.</p>
<p>Est notée 4/4 :</p>
<ul>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/DNY-501/Java%208%20Streams%20&%20Collectors%20:%20patterns,%20performances,%20parall%C3%A9lisation">Java 8 Streams & Collectors : patterns, performances, parallélisation</a></li>
</ul>
<p>Sont notées 3/4 :</p>
<ul>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/DLD-453/JavaScript,%20the%20next%20big%20...%20bytecode">JavaScript, the next big … bytecode</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/ZSJ-347/Promesses%20et%20Yield%20:%20les%20Future%3C%3F%3E%20de%20JavaScript">Promesses et Yield : les Future<?> de JavaScript</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/CDH-803/Construire%20une%20application%20r%C3%A9elle%20de%20jeux%20en%20ligne%20avec%20NoSQL">Construire une application réelle de jeux en ligne avec NoSQL</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/MBI-023/Mise%20en%20production%20continue%20-%201%20an%20apr%C3%A8s">http://cfp.devoxx.fr/devoxxfr2014/talk/MBI-023/Mise%20en%20production%20continue%20-%201%20an%20apr%C3%A8s</a></li>
</ul>
<p>Sont notées 2/4 :</p>
<ul>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/UGH-991/30%20minutes%20pour%20d%C3%A9velopper%20une%20appli%20Java%20EE%20%3F%20C%27est%20largement%20suffisant%20avec%20Forge%202.0!">30 minutes pour développer une appli Java EE ? C’est largement suffisant avec Forge 2.0!</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/DWS-586/50%20nouvelles%20choses%20que%20l%27on%20peut%20faire%20avec%20Java%208">50 nouvelles choses que l’on peut faire avec Java 8</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/WFL-752/Lambda%20Architecture%20-%20Choose%20your%20tools%20for%20Real-Time%20Big%20Data">Lambda Architecture - Choose your tools for Real-Time Big Data</a></li>
<li><a href="http://cfp.devoxx.fr/devoxxfr2014/talk/TYU-863/Web%20performances,%20regardons%20les%20r%C3%A9sultats%20de%20pr%C3%A8s">Web performances, regardons les résultats de près</a></li>
</ul>
<p>Le bilan Devoxx ?</p>
<blockquote><p>Après Devoxx France, on est motivé, on repart avec plein d’idées et des trucs à tester.</p><footer><strong>Thibaud Raison et Pierre Cosson au JUG Nantes</strong></footer></blockquote>
<p>Et l’année prochaine ?</p>
<p><em>Devoxx France 2015</em> ça sera du 8 au 10 avril au Palais des Congrès. 1800 personnes sont attendues.</p>
<p><a href="http://nantesjug.org/#/speakers/thibaud_raison">Thibaud</a> et <a href="http://nantesjug.org/#/speakers/pierre_cosson">Pierre</a> mettront à disposition leurs slides sur <a href="http://nantesjug.org/#/events/2014_05_20">le site du JUG Nantes</a> très prochainement.</p>
<h2>Un petit mot sur Maven avant d’aborder la session de Cédric</h2>
<p>Jusqu’à l’année dernière, je ne prenais pas très au sérieux les alternatives à Maven.
En effet, Maven est un des <em>super-héros</em> du développeur Java.</p>
<p>Il a encouragé :</p>
<ul>
<li>La modularisation. Les projets sont devenus de plus en plus modulaires.</li>
<li>Une normalisation (organisation des répertoires, cycle de vie d’un build, exécution des tests, etc.)</li>
<li>Un essor de l’intégration continue</li>
</ul>
<p>Au regard de tous ces services rendus, beaucoup de développeurs Java sont très attachés à Maven et sont donc beaucoup moins réceptifs aux alternatives.
J’étais un de ces développeurs.
Ca fait presque 8 ans que j’utilise Maven et presque autant de temps à en dire du bien.
J’ai même fait de <a href="http://www.slideshare.net/RossiOddet/maven-par-la-pratique-14995676">la promotion en Afrique lors de JCertif 2012</a>.</p>
<p>Il y a 3 ans, lorsque <a href="https://twitter.com/gboissinot">Grégory Boissinot</a> présentait Gradle à ce même JUG Nantes.
Je n’étais pas réceptif et en plus le projet manquait de stabilité (modification trop fréquente de l’API).</p>
<p>Je me disais :</p>
<blockquote><p>C’est quoi cette chose qui ne veut pas rentrer dans le standard !</p></blockquote>
<p>Je m’imaginais dans l’armée et je voyais les personnes qui faisaient autre chose comme des déserteurs.</p>
<p>J’étais allergique aux alternatives à Maven parce qu’elles :</p>
<ul>
<li>donnaient de la flexibilité au <em>standard</em> Maven. Je me disais : Flexibilité = Entorse à la Norme = Désordre = Instabilité = Déserteurs :)</li>
<li>pouvaient utiliser des langages dynamiques. J’estimais perdre en lisibilité et du temps à apprendre un nouveau langage.</li>
<li>avaient une communauté restreinte et donc peu de plugins, réponses StackOverflow, etc.</li>
</ul>
<p>Avec l’émergence des technologies frontend, des langages fonctionnels, des langages dynamiques, j’ai eu l’occasion de voir d’autres systèmes de <em>Build</em> (<a href="http://www.gradle.org/">Gradle</a>, <a href="http://gruntjs.com/">Grunt</a>, <a href="http://www.scala-sbt.org/">SBT</a>, <a href="http://gant.codehaus.org/">Gant</a>, etc.).
Et <a href="http://maven.apache.org/">Maven</a> me parait, désormais, vieilli face à ses concurrents.</p>
<p>Le projet <a href="http://www.gradle.org/">Gradle</a> a bonne presse en ce moment.
Il a été bien aidé par des projets comme <a href="https://community.jboss.org/wiki/Gradlewhy?_sscc=t">Hibernate qui l’a adopté</a>.
L’année dernière, <a href="http://www.infoworld.com/t/development-tools/google-positions-gradle-the-build-system-of-choice-android-218852">Google l’a choisi comme système de build pour Android Studio</a>.</p>
<p>C’est donc en mode <em>réceptif</em> que j’ai participé à la session de <a href="https://twitter.com/CedricChampeau">Cédric</a>.</p>
<h2><em>Gradle ne fait pas que remplacer Maven</em></h2>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/mai14/gradle-devoxx.jpg"></p>
<p>Je vous invite à parcourir les slides de <a href="https://twitter.com/CedricChampeau">Cédric</a> qui se lisent bien.</p>
<script async class="speakerdeck-embed" data-id="846b09f0a93a0131565b426f673016e8" data-ratio="1.77777777777778" src="http://roddet.github.com//speakerdeck.com/assets/embed.js"></script>
<p>Parmi tous les avantages de Gradle par rapport à Maven, deux choses m’ont interpellé :</p>
<ul>
<li><p>Le Wrapper. Pour un projet donné, vous pouvez générer un wrapper (<code>gradle init</code>) qui permettre à tous les utilisateurs de récupérer la version de Gradle à utiliser pour le projet.
C’est particulièrement pratique pour l’intégration continue et aussi pour changer de version de gradle d’un projet.
Cela permet aussi de faire cohabiter simplement différentes versions de l’outil de build chez un développeur.</p></li>
<li><p>Pour réutiliser de la configuration de Build, Maven utilise l’héritage et Gradle utilise la composition.
C’est sur des points comme celui là que <a href="http://maven.apache.org/">Maven</a> montre sa vieillesse.
Il a été conçu à une époque où l’héritage était le roi pour mutualiser du code. Les choses ont changé depuis… mais pas Maven…</p></li>
</ul>
<p>Une chose est sûre, pour passer de <a href="http://maven.apache.org/">Maven</a> à <a href="http://www.gradle.org/">Gradle</a>, il faut apprendre Gradle.
<a href="http://maven.apache.org/">Maven</a> a ses défauts qui sont connus et maitrisés.
Il n’y a aujourd’hui aucune surprise à démarrer un projet avec <a href="http://maven.apache.org/">Maven</a>.
Est-ce que les experts <a href="http://maven.apache.org/">Maven</a> sont prêts à prendre des risques ? Apprendre une nouvelle technologie alors que <a href="http://maven.apache.org/">Maven</a> fonctionne ?</p>
<p>Noter l’existence du projet <a href="https://github.com/takari/maven-polyglot">Maven Polyglot</a> qui va permettre de faire de la configuration Maven avec plusieurs langages : clojure, ruby, scala, yaml, et même Groovy :)
Est-ce une réponse suffisante ?</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Oracle, Java & Internet des Objets]]></title>
<link href="http://roddet.github.com/2014/05/oracle-java-internet-des-objets/"/>
<updated>2014-05-13T08:41:00-04:00</updated>
<id>http://roddet.github.com/2014/05/oracle-java-internet-des-objets</id>
<content type="html"><![CDATA[<p>2014 c’est l’année d’<em>Internet Of Things</em> ou l’Internet des Objets ou encore l’Internet des Choses.</p>
<p>Tous les médias le disent, regarder <a href="http://www.lefigaro.fr/secteur/high-tech/2014/01/06/01007-20140106ARTFIG00069-l-annee-2014-placee-sous-le-signe-de-l-internet-des-objets.php">ici</a>, <a href="http://www.atlantico.fr/rdv/minute-tech/2014-sera-t-elle-annee-internet-choses-bertrand-duperrin-951986.html">là</a> ou encore <a href="http://blog.econocom.com/blog/2014-lannee-de-linternet-des-objets-grand-public/">là</a>.</p>
<p>C’est tellement l’année de l’Internet des Objets que :</p>
<ul>
<li>les conférences IT ont maintenant des tracks dédiés, <a href="http://cfp.devoxx.fr/devoxxfr2014/talks/hack"><em>Future Devoxx</em></a>,
<a href="http://cfp.devoxx.fr/devoxxfr2014/talks/hack">Un après-midi (Démo NAO, Objets connectés, Démo ORA Smart Glasses) au BreizhCamp</a>, etc.</li>
<li>des conférences dédiées fleurissent un peu partout dans le monde : <a href="http://blog.econocom.com/blog/2014-lannee-de-linternet-des-objets-grand-public/">IoT Conference</a>, <a href="http://www.internetofthingsasia.com/">IoT Asia</a>, <a href="http://iotday.org/">IoT Day</a>, etc.</li>
<li>des objets connectés en tout genre apparaissent. Il en y a tellement que <a href="http://www.amazon.com/b?node=9013937011">Amazon a créé une rubrique dédiée “Wearable Technology”</a>.</li>
</ul>
<p><a href="http://www.oracle.com/index.html">Oracle</a> l’a bien intégré et déploit beaucoup d’énergie sur ce sujet ces derniers temps comme nous allons le voir.</p>
<p><img class="center" src="http://roddet.github.com/images/logos/FY14Duke14.png"></p>
<h2>Une gamme de produits Java Embedded</h2>
<p>Il y a plusieurs produits pour faire du Java en environnement embarqué :</p>
<ul>
<li><a href="http://www.oracle.com/technetwork/java/embedded/resources/se-embeddocs/index.html">Oracle Java SE Embedded</a> destiné à des appareils de 32MB ou plus.</li>
<li><a href="http://www.oracle.com/us/technologies/java/embedded/mobile-edition/overview/index.html">Oracle Java ME Embedded Client</a> pour des appareils de 8MB ou plus.</li>
<li><a href="http://www.oracle.com/technetwork/java/embedded/resources/me-embeddocs/index.html">Oracle Java ME Embedded</a> pour des appareils de 128 KB ou plus.</li>
<li><a href="http://www.oracle.com/technetwork/java/embedded/resources/java-embedded-suite/index.html">Oracle Java Embedded Suite</a>, c’est du Oracle Java SE Embedded + Java DB + Glassfish optimisé + JAX-RS (Jersey)</li>
<li><a href="http://docs.oracle.com/cd/E28280_01/doc.1111/e39318/toc.htm">Oracle Event Processing</a>, un serveur qui permet de supporter des applications event-driven qui font beaucoup de streaming de données.
Il n’y a pas le mot <em>réactif</em> mais ça ressemble dans l’idée ;)</li>
</ul>
<h2>Des événements Oracle IoT</h2>
<p>Des sessions en ligne sont régulièrement organisées :</p>
<ul>
<li><a href="https://blogs.oracle.com/java/entry/free_webinar_on_java_micro">Une session le 5 mai dernier</a></li>
<li><a href="https://blogs.oracle.com/java/entry/virtual_developer_day_java_2014">Un “Virtual Developer Day”</a> les 6 (Amérique), 14 (Europe/Afrique) et 21 mai (Asie).</li>
</ul>
<p>En Afrique, des sessions Java Embedded ont été organisées notamment :</p>
<ul>
<li>En Tunisie, les 18 et 19 avril, pendant <a href="http://jcertif.com/tunisie/2014/05/09/jcertif-tunisie/">JCertif Tunisie 2014</a></li>
<li>Au Congo-Brazzaville, en mars dernier, lors de la <a href="https://plus.google.com/events/c7fcpf5lb2dhclvbd4lesni8hng?cfem=1">Journée IoT Brazzaville</a></li>
<li>D’autres sessions sont prévues en juillet en Côte d’Ivoire et au Cameroun lors des prochains événement JCertif.</li>
</ul>
<p>Au Brésil, un <a href="https://blogs.oracle.com/java/entry/internet_of_things_iot_hackathon">Hackaton</a> a été organisé.</p>
<p>Le 17 et 18 mail prochain, <a href="http://www.oracle.com/index.html">Oracle</a> sera présent à l’événement <a href="http://makerfaire.com/">Make Faire</a> et va présenter un <a href="https://blogs.oracle.com/java/entry/java_shows_off_at_maker">IoT Java Panel</a>.</p>
<h2>Un Challenge IoT</h2>
<p>Un <a href="https://www.java.net/challenge">IoT Developer Challenge</a> organisé par <a href="http://www.oracle.com/index.html">Oracle</a> est en cours actuellement.
Les gagnants pourront aller à <a href="https://www.oracle.com/javaone/index.html">Java One 2014 !</a>.</p>
<p>Vous avez jusqu’au 30 mai pour participer.</p>
<h2>Un MOOC sur Java Embedded</h2>
<p>Un <a href="http://en.wikipedia.org/wiki/Massive_open_online_course">MOOC</a> sous le thème <em>Develop Java Embedded Applications Using a Raspberry Pi</em> est donné par <a href="http://www.oracle.com/index.html">Oracle</a> plusieurs fois dans l’année .</p>
<p>Il y en a eu un le 31 mars dernier, le prochain commence le 30 mai.</p>
<p>La formation dure 5 semaines et montre comment utiliser Java Embedded pour :</p>
<ul>
<li>Lire les différentes entrées de la Raspberry Pi</li>
<li>Manipuler des LED via les interfaces GPIO</li>
<li>Récupérer la température et la pression atmosphérique</li>
<li>Stocker et gérer des données</li>
<li>Envoyer des données à un client</li>
</ul>
<p>Vous pouvez vous inscrire <a href="https://apex.oracle.com/pls/apex/f?p=44785:145:0::::P145_EVENT_ID,P145_PREV_PAGE:861,143">ici</a>.</p>
<h2>Allez-vous être un acteur de l’Internet des Objets ?</h2>
<p>Si vous êtes développeur (quelque soit le langage/plateforme), l’Internet des Objets vous concerne directement que vous le vouliez ou non.</p>
<p>Le sujet étant jeune, il y a beaucoup d’opportunités, les technologies méritent d’être éprouvées.</p>
<p><a href="http://postscapes.com/javascript-and-the-internet-of-things">La communauté Javascript</a> est très active sur le sujet.</p>
<p>Pour les développeurs Java, une communité <a href="https://community.java.net/community/iot">IoT existe</a>. Le <a href="https://terrencebarr.wordpress.com/tag/java-embedded/">Blog de Terrence Barr</a>, est également une source d’informations intéressante.</p>
<p>Alors, ça vous tente du Java Embarqué ?</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Devoxx France 2014, ce que je retiens !]]></title>
<link href="http://roddet.github.com/2014/05/devoxx-france-2014/"/>
<updated>2014-05-07T21:41:00-04:00</updated>
<id>http://roddet.github.com/2014/05/devoxx-france-2014</id>
<content type="html"><![CDATA[<p>Les 17 et 18 avril dernier, j’étais aux 2 journées de conférence de <a href="http://www.devoxx.fr/">Devoxx France 2014</a>.</p>
<h2>Nous étions nombreux à avoir eu la même idée !</h2>
<p><img class="center" src="http://roddet.github.com/images/devoxxfr14/j1-keynote-ere-numerique.jpg"></p>
<h2>Mon parcours</h2>
<p>J’ai pu participer aux sessions suivantes :</p>
<ul>
<li>Keynote - L’Ere du numérique avec <a href="https://twitter.com/@babgi">Gilles Babinet</a> et <a href="https://twitter.com/Kwame42">Kwame Yamgnane</a>.</li>
<li>Keynote - Le métier de développeur avec <a href="https://twitter.com/guy_mm">Guy MAMOU-MANI</a>.</li>
<li>Keynote - Simplon avec <a href="http://cfp.devoxx.fr/devoxxfr2014/speaker/0b184f6351dd6b6aababf8817a477c2cb2e2bb3a/Henri%20Fournet">Henri Fournet</a>.</li>
<li>Realtime Web avec Akka, Kafka, Spark et Mesos (<a href="http://www.slideshare.net/hayssamsaleh1/realtime-web-avec-kafka-spark-et-mesos">slides</a>) avec <a href="https://twitter.com/@hayssams">Hayssam Saleh</a> et <a href="https://twitter.com/@jpbunaz">Jean-Philippe Bunaz</a>.</li>
<li>The reactive Backup talk avec <a href="https://twitter.com/@_JamesWard">James Ward</a>.</li>
<li>Au secours mon code AngularJS est pourri ! (<a href="http://t.co/TxUJwHaWoo">slides</a>) avec <a href="https://twitter.com/ThierryChatel">Thierry Chatel</a>).</li>
<li>Vive les WebSockets Libres avec <a href="https://twitter.com/jfarcand">Jean-François Arcand</a>.</li>
<li>Des applications réactives avec Spring, AngularDart et Websocket (<a href="https://speakerdeck.com/sdeleuze/reactive-applications-with-spring-angulardart-and-websocket">slides</a>) avec <a href="https://twitter.com/@sdeleuze">Sébastien Deleuze</a>.</li>
<li>BitCoin et monnaies cryptographiques (<a href="http://paulgreg.me/bitcoin-cryptocurrencies/">slides</a>) avec <a href="https://twitter.com/@paulgreg">Grégory Paul</a>.</li>
<li>Basses latences, hauts débits : les secrets de la finance pour avoir des systèmes réactifs (<a href="http://www.slideshare.net/ThomasPierrain/faible-latence-haut-debit-devoxxfr-2014-34262360">slides</a>) avec <a href="https://twitter.com/@cyrdup">Cyrille DUPUYDAUBY</a> et <a href="https://twitter.com/@tpierrain">Thomas Pierrain</a>.</li>
<li>Lambda Architecture - Choose your tools for Real-Time Big Data (<a href="http://www.slideshare.net/Dataiku/dataiku-devoxx-lambda-architecture-choose-your-tools">slides</a>) avec <a href="https://twitter.com/@fdouetteau">Florian Douetteau</a>.</li>
<li>Web performances, regardons les résultats de près (<a href="https://github.com/devoxx2014-webperf/the_slides/blob/master/Devoxx%20France%202014%20Web%20Performances.pdf?raw=true">slides</a>) avec <a href="https://twitter.com/@jeffmaury">Jeff MAURY</a>, <a href="https://twitter.com/@NicolasLeroux">Nicolas Leroux</a>, <a href="https://twitter.com/@k33g_org">Philippe Charrière</a>, <a href="http://forax.github.io/">Rémi Forax</a>.</li>
<li>Google Cast Development - Lessons Learned avec <a href="https://twitter.com/@hcl21">Hoi Lam</a>.</li>
<li>JavaScript, the next big … bytecode (<a href="http://fr.slideshare.net/MathieuBreton1/javascript-thenextbigbytecode">slides</a>) avec <a href="https://twitter.com/@MatBreton">Mathieu Breton</a>.</li>
<li>Groovy en 2014 et au-delà (<a href="https://speakerdeck.com/glaforge/groovy-in-2014-and-beyond-at-devoxx-france">slides</a>) avec <a href="https://twitter.com/glaforge">Guillaume Laforge</a>.</li>
</ul>
<p>Plutôt que de vous ennuyer avec les détails de chaque session, je vais plutôt partager ce que je retiens réellement de Devoxx France 2014.</p>
<p>Commençons par les news.</p>
<h2>Le mouvement CodeForFrance</h2>
<p><a href="https://twitter.com/tariqkrim">Tarik Rim</a> a présenté le mouvement <a href="http://www.codeforfrance.org">Code for France</a> avec son slogan : “La France a besoin d’un update”.
Ce mouvement est directement inspiré des US qui ont un <a href="http://codeforamerica.org">CODE for AMERICA</a>.
Le principe : les membres du mouvement unissent leurs forces pour mettre aux normes actuelles les différents sites web d’utilité publique.</p>
<p>Vous pouvez suivre l’actualité du mouvement soit via <a href="https://twitter.com/codeforfrance">Twitter</a> soit <a href="http://www.codeforfrance.org">en vous inscrivant avec votre compte Github</a>.</p>
<h2>Reactive Streams</h2>
<p><a href="https://twitter.com/@_JamesWard">James Ward</a> a annoncé, durant son talk, le lancement de <a href="http://www.reactive-streams.org">Reactive Streams</a>.
Il s’agit d’une initiative visant à standardiser les traitements asynchrones de flux sur la JVM.
Les grands noms de la JVM sont contributeurs du projet : <a href="">Oracle</a>, <a href="">RedHat</a>, <a href="">Twitter</a>, <a href="http://typesafe.com">TypeSafe</a>, <a href="">Pivotal</a>, <a href="">Netflix</a>, etc.
L’objectif est, à terme, d’intégrer ces travaux dans une future version du JDK.</p>
<p>Un premier brouillon de la spécification est disponible. Si vous souhaitez vous lancer, vous pouvez parcourir les sources du projet sur <a href="https://github.com/reactive-streams/reactive-streams">Github</a>.</p>
<p>Un article d’InfoQ est disponible sur le sujet : <a href="http://www.infoq.com/fr/news/2014/05/reactive-streams-akka-streams">Les Reactive Streams avec Akka Streams</a>.</p>
<p>Abordons à présent les tendances technologiques.</p>
<h2>La réactivité c’est maintenant !</h2>
<p>Devoxx France 2014 a comporté de nombreux talks avec le mot magique “réactif” :
<a href="http://cfp.devoxx.fr/devoxxfr2014/talk/SAC-948/Les%20Applications%20R%C3%A9actives%20:%20un%20nouveau%20paradigme%20pour%20relever%20les%20d%C3%A9fis%20de%20l'%C3%A9conomie%20num%C3%A9rique.">Les Applications Réactives : un nouveau paradigme pour relever les défis de l’économie numérique</a>,
<a href="http://cfp.devoxx.fr/devoxxfr2014/talk/KYH-943/The%20Reactive%20Backup%20talk">Building Reactive Apps</a>,
<a href="http://cfp.devoxx.fr/devoxxfr2014/talk/WDJ-026/Reactive%20Angular">Reactive Angular</a>,
<a href="http://cfp.devoxx.fr/devoxxfr2014/talk/FCN-711/Des%20applications%20r%C3%A9actives%20avec%20Spring%204,%20AngularDart%20et%20Websocket">Des applications réactives avec Spring, AngularDart et Websocket</a>,
<a href="http://www.slideshare.net/ThomasPierrain/faible-latence-haut-debit-devoxxfr-2014-34262360">Basses latences, hauts débits : les secrets de la finance pour avoir des systèmes réactifs</a>, etc.</p>
<p>Donc si vous souhaitez être “tendance” aujourd’hui, soyez “réactif” ! Ca y est c’est le moment !</p>
<h2>Le Big Data, le driver technologique</h2>
<p>Devoxx France 2014 m’a conforté dans l’idée que j’avais du Big Data comme moteur des nouvelles architectures et des nouvelles technologies.</p>
<p>Le Big Data est arrivé avec des techniques qui lui étaient indispensable (NoSQL, Scalabilité horizontale, parallélisme, cloud, etc.) et finalement ces techniques sont en train de gagner peu à peu les projets Small Data ou Big Code.</p>
<p>Prenons l’exemple du NoSQL.
Je me rappelle encore il y a quelques années, le NoSQL était présenté comme une solution en réponse aux limites des bases de données relationnelles.
Le discours a, depuis, bien évolué et d’autres atouts ont apparu. L’accroche de <a href="http://www.mongodb.org">MongoDB</a> c’est “Agile et Scalable” (noter bien le “Agile” en premier).
Aujourd’hui, le NoSQL séduit de plus en plus, je vous invite à visiter la page <a href="http://www.mongodb.org/about/production-deployments/">MongoDB Production Deployments</a> et à scroller jusqu’à ce que vous en ayez marre :)
Et ce ne sont pas tous des projets avec des données monstrueuses.</p>
<p>Le Big Data encourage l’application <a href="http://www.reactivemanifesto.org">des principes de programmation réactive</a> et nous voilà tous plonger dedans en ce moment.</p>
<p>Le Big Data possède encore de nombreuses ressources qui sont encore à bonnes distances des projets habituels d’entreprise.
Si vous souhaitez avoir une vision générale des briques et des outils du domaine, je vous recommande le talk <em>Lambda Architecture - Choose your tools for Real-Time Big Data</em> (<a href="http://www.slideshare.net/Dataiku/dataiku-devoxx-lambda-architecture-choose-your-tools">slides</a>) avec <a href="https://twitter.com/@fdouetteau">Florian Douetteau</a>.</p>
<p>Pour un retour d’expériences, regarder plutôt du côté de <em>Realtime Web avec Akka, Kafka, Spark et Mesos</em> (<a href="http://www.slideshare.net/hayssamsaleh1/realtime-web-avec-kafka-spark-et-mesos">slides</a>).</p>
<p>Il y a probablement dans ces outils des fondements de ce qui va devenir la norme de demain et tout le monde sait que demain c’est aujourd’hui :)</p>
<h2>Frontend/Javascript</h2>
<p>J’ai vécu Devoxx France 2013 comme un événement qui criait :</p>
<blockquote><p>Javascript c’est cool, c’est prêt pour l’entreprise ! Vas-y mon ami !</p><footer><strong>Ma perception Frontend Devoxx France 2013</strong></footer></blockquote>
<p>Il y avait plusieurs sessions dans ce sens :
<a href="http://www.devoxx.com/display/FR13/Frontend+Live+Coding+++Tour+d%27horizon+de+l%27outillage+et+des+technos+web+d%27aujourd%27hui">Frontend live Coding</a>,
<a href="http://www.devoxx.com/display/FR13/AngularJS%2C+ou+le+futur+du+developpement+Web">AngularJS, ou le futur du développement web</a>,
<a href="http://www.devoxx.com/display/FR13/Du+Javascript+propre+++Challenge+Accepted">Du Javascript Propre ? Challenge Accepted</a>, etc.</p>
<p>Sur l’axe Frontend, j’ai vu Devoxx France 2014 comme un événement qui criait cette fois-ci :</p>
<blockquote><p>Maintenant que vous avez adopté Javascript, vous savez, dans Javascript il y a aussi “The Bad Parts”. Jettez un oeil aux alternatives, on ne sait jamais ;)</p><footer><strong>Ma perception Frontend Devoxx France 2014</strong></footer></blockquote>
<p>La session <em>JavaScript, the next big … bytecode</em> (<a href="http://fr.slideshare.net/MathieuBreton1/javascript-thenextbigbytecode">slides</a>) est très intéressante sur ce sujet.
Vous apprendrez :</p>
<ul>
<li>qu’il y a plus de 170 langages/transpileurs qui génèrent du JavaScript.</li>
<li>Les leaders de la transpilation sont : <a href="http://www.typescriptlang.org">TypeScript</a>, <a href="http://coffeescript.org">CoffeeScript</a>, <a href="https://www.dartlang.org">Dart</a>,
<a href="http://asmjs.org">ASM.JS</a></li>
<li><a href="https://www.dartlang.org">Dart</a> est le plus complet, <a href="http://asmjs.org">ASM.JS</a> très prometteur, <a href="http://www.typescriptlang.org">TypeScript</a> utilisable à court terme et <a href="http://coffeescript.org">CoffeeScript</a> utilisable mais attention aux erreurs trop fréquentes de syntaxe.</li>
</ul>
<p>Je note l’opération séduction de <a href="https://www.dartlang.org">Dart</a> qui met sur la table les atouts suivants :</p>
<ul>
<li>Je suis un langage typé comme Java, tu connais Java ? Viens, je te promets que ça sera facile !</li>
<li>Je suis nativement <a href="https://www.dartlang.org/performance/">plus performant que Javascript</a>.
Je serai un jour dans Chrome, donc tu pourras m’utiliser directement pour bénéficier de mes performances.</li>
<li>Je vais devenir <a href="http://www.ecma-international.org/memento/TC52.htm">un standard un jour</a>. Je rêve secrètement que Firefox, Safari et Internet Explorer m’implémente ;)</li>
<li>N’aies pas peur de moi, je sais <a href="https://www.dartlang.org/tools/dart2js/">transpiler du javascript comme tout le monde</a>.</li>
<li>Hey ! Tu aimes AngularJS ? Moi aussi <a href="https://angulardart.org">je sais faire !</a>.</li>
</ul>
<p>Si vous vous êtes lancé sur des projets AngularJS, les slides de la session <em>Au secours mon code AngularJS est pourri !</em> (<a href="http://t.co/TxUJwHaWoo">slides</a>) va vous intéresser.
Vous y trouverez un recueil de bonnes pratiques applicables immédiatement.</p>
<h2>Les performances</h2>
<p>J’ai suivi deux talks qui faisaient un focus sur les performances :</p>
<p><em>Web performances, regardons les résultats de près</em> (<a href="https://github.com/devoxx2014-webperf/the_slides/blob/master/Devoxx%20France%202014%20Web%20Performances.pdf?raw=true">slides</a>).</p>
<p>Une application est réalisée avec différentes technologies (Java EE/JAX-RS, NodeJS/Express, Play2/Scala, Undertow, Vertx, Finatra) puis des tests de charge sont réalisés sur chaque implémentation.
Ce que je retiens de ce talk :</p>
<ul>
<li>Il faut faire très attention aux API utilisés.
Pour l’application NodeJS, utiliser <code>res.send(movies)</code> à la place de <code>res.sendfile(...)</code> rendait l’application environ 14 fois moins performante.</li>
<li>Lors d’un test de charge, n’ayez pas l’injecteur et l’application sur la même machine. Les résultats seront probablement très éloignés de la réalité.</li>
<li>Gatling c’est super ! Ca je le savais déjà ;)</li>
<li>Contrairement à ce que pensaient les participants, Java EE/JAX-RS est très performant et a remporté quelques combats.</li>
<li>Je regrette que les ressources n’aient pas été monitorées pour avoir une idée des différences de consommation.</li>
</ul>
<p><em>Basses latences, hauts débits : les secrets de la finance pour avoir des systèmes réactifs</em> (<a href="http://www.slideshare.net/ThomasPierrain/faible-latence-haut-debit-devoxxfr-2014-34262360">slides</a>).</p>
<p>Il s’agit là d’un talk de très bonne qualité qui présente :</p>
<ul>
<li>L’essentiel des métiers de la finance</li>
<li>Différentes approches qui ne fonctionnent pas toujours pour supporter du haut débit : mono thread, un thread par élément, un pool de thread, multi tasks / thread pool.</li>
<li>Le <a href="http://dupdob.wordpress.com/2014/04/18/sequencer/">pattern sequencer</a>, la notion de conflation</li>
<li>Une dose de <a href="http://www.reactivemanifesto.org">principes réactifs</a>.</li>
</ul>
<h2>La révolution Docker</h2>
<p>Je n’ai pas pu participer à la session <em>La révolution Docker</em> (<a href="http://www.slideshare.net/ndeloof/la-revolution-docker">slides</a>).
Cette session était très attendue, la salle était pleine avant le début de la session.</p>
<p><a href="https://www.docker.io/">Docker</a> est donc un outil qu’il faut regarder de près aujourd’hui.
Vous pouvez une introduction à Docker sur le blog <a href="http://www.touilleur-express.fr/2014/05/03/docker-un-outil-simple-et-genial/">Le Touilleur Express</a>.</p>
<p>Si vous venez au <a href="www.breizhcamp.org">BreizhCamp 2014</a> prochain, il y aura une session <a href="http://www.breizhcamp.org/programme/">Demarrer avec Docker</a>.</p>
<h2>Java & Co, l’heure est à la simplification !</h2>
<p>Comme le montre mon parcours, je n’ai pas participé à beaucoup de sessions sur Java ou Java EE ou Spring ou etc.
Je profite généralement des conférences pour élargir mes horizons.
Etant présent à la conférence et pour avoir parcouru plusieurs fois le programme, j’ai tout de même un ressenti.</p>
<p>Le moment est venu de faire simple avec Java.
Il est temps de s’attaquer à la complexité de démarrer un projet Java et surtout de réaliser des applications simples sans sortir l’artillerie lourde.
Il y a déjà des existants comme <a href="http://www.playframework.com/">Play! Framework</a> et cette tendance se poursuit.</p>
<p>Le projet <a href="http://projects.spring.io/spring-boot/">Spring Boot</a> a cet objectif et se veut être le produit phare du moment dans l’écosystème Spring.
Voici <a href="https://github.com/joshlong/ws.tagit/blob/master/service/src/main/java/ws/tagit/Application.java">une classe Java</a>,
avec une méthode <em>main()</em> qui démarre un container (tomcat ou jetty),
expose un service REST sécurisé par OAuth et avec le support de CORS,
gère les accès à la base de données.
Le tout en moins de 300 lignes de code (pour Java c’est une révolution !)
On peut donc dès aujourd’hui avoir des applications simples, utiles qui tiennent raisonnablement dans un seul fichier !</p>
<p><a href="https://twitter.com/xavierhanin">Xavier Hanin</a> a présenté le framework <a href="http://restx.io/">RESTX</a>.
Ce framework regroupe pleins de bonnes idées pour développement des services REST : le rechargement à chaud, des outils pour tester ses services REST, une configuration avancée par annotation, des jeux de données fournies par le framework, etc.</p>
<p><a href="https://twitter.com/JosePaumard">José Paumard</a> a présenté <em>50 nouvelles choses que l’on peut faire avec Java 8</em> (<a href="http://www.slideshare.net/jpaumard/50-nouvelles-choses-que-lon-peut-faire-avec-java-8">slides</a>).
Java 8 vient simplifier beaucoup de choses : les dates, les manipulations de collections, traitements parallèles, etc.</p>
<p>Si vous travailler avec Java au quotidien, votre nouveau défi est à présent de faire simple après avoir fait très très compliqué !</p>
<h2>D’autres ressources ?</h2>
<p>Consulter la page suivante : <a href="http://www.devoxx.fr/2014/05/ils-ont-parle-de-nous/">Ils ont parlé de nous</a>.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[JCertif Tunisie 2014, Done !]]></title>
<link href="http://roddet.github.com/2014/04/jcertif-tunisie-2014/"/>
<updated>2014-04-23T21:41:00-04:00</updated>
<id>http://roddet.github.com/2014/04/jcertif-tunisie-2014</id>
<content type="html"><![CDATA[<p>Le 19 et 20 avril dernier, c’était JCertif Tunisie 2014 !
Cet événement portait une symbolique forte car c’est la première fois que JCertif avait lieu en dehors de Brazzaville (République du Congo).
Les attentes étaient évidemment fortes, tant de la part des organisateurs que des participants et des acteurs locaux.</p>
<p>L’événement a eu lieu dans la ville de <a href="http://fr.wikipedia.org/wiki/Sousse">Sousse</a> à l’<a href="http://www.eniso.rnu.tn/fr/">Ecole Nationale d’Ingénieurs de Sousse</a>.
<a href="http://fr.wikipedia.org/wiki/Sousse">Sousse</a> se trouve à moins de 150 km de Tunis, la capitale de la Tunisie.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/carte_sousse.png"></p>
<p>Les deux journées de l’événement étaient structurées de la façon suivante :</p>
<ul>
<li>Matin : une série de talks sur des sujets variés.</li>
<li>Après-midi : une dizaine de workshops + un espace d’échange entre partenaires.</li>
</ul>
<h2>Jour 1</h2>
<p><a href="https://twitter.com/bonbhel">Max</a> lance l’événement avec une présentation de JCertif et de ses activités.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/max_jour_1.png"></p>
<p><a href="https://twitter.com/ChrisbelM">Chrisbel</a> prend ensuite la parole pour parler des initiatives JCertif
Education & JCertif Pro.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/chrisbel_jour_1.png"></p>
<p>La matinée se poursuit avec une présentation de <a href="http://www.thibaultvincent.com/">Thibault Vicent</a> sur “Les 4 modèles de revenu les plus rentables du web et du mobile”.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/thibault_jour_1.jpg"></p>
<p>L’après-midi laissera la place aux Workshops suivants :</p>
<ul>
<li>Initiation à Java avec <a href="http://www.linkedin.com/profile/view?id=48873830&locale=fr_FR&trk=tyah&trkInfo=tarId%3A1398674609090%2Ctas%3AOuijden%20Dhemaid%2Cidx%3A1-1-1">Ouijden Dhemaid</a></li>
<li>Ext JS avec <a href="https://twitter.com/ChrisbelM">Roland Chrisbel</a></li>
<li>JEE Open ORM Alternatives : UPA as a challenger avec <a href="https://www.linkedin.com/profile/view?trk=tyah&trkInfo=tarId%3A1398431808806%2Ctas%3Ataha%2Cidx%3A1-2-2&locale=en_US&id=24099487">Taher Ben Saleh</a></li>
<li>Ubuntu Touch avec <a href="https://www.facebook.com/neo31?fref=ts">Ahmed Segaire</a></li>
<li>Programmation embarquée avec la carte Raspberry Pi avec <a href="http://www.linkedin.com/profile/view?id=136896701&locale=fr_FR&trk=tyah&trkInfo=tarId%3A1398431874633%2Ctas%3Asafa%20achou%2Cidx%3A1-1-1">Safa Achour</a></li>
<li>Android initiation avec <a href="http://www.linkedin.com/profile/view?id=211998391&locale=en_US&trk=tyah2&trkInfo=tarId%3A1397596758936%2Ctas%3Azidi%20alae%2Cidx%3A1-1-1">Alaedinne Zidi</a></li>
<li>Android avancé avec <a href="http://www.linkedin.com/profile/view?id=162164000&locale=en_US&trk=tyah&trkInfo=tarId%3A1398431891305%2Ctas%3Ahich%2Cidx%3A1-1-1">Hichem Laroussi</a></li>
<li>Android avancé avec <a href="http://www.linkedin.com/profile/view?id=105245788&locale=fr_FR&trk=tyah&trkInfo=tarId%3A1398431913510%2Ctas%3Arami%20te%2Cidx%3A1-1-1">Rami Tekaya</a></li>
<li>Web Design avec <a href="http://www.linkedin.com/profile/view?id=153196137&locale=fr_FR&trk=tyah&trkInfo=tarId%3A1398431931331%2Ctas%3ARanda%20Touati%2Cidx%3A1-1-1">Randa Touati</a></li>
<li>HTML5/CSS3 avec <a href="http://www.linkedin.com/profile/view?id=302763914&locale=fr_FR&trk=tyah2&trkInfo=tarId%3A1398431947088%2Ctas%3AMejri%20Yassine%2Cidx%3A1-4-4">Mejri Yassine</a></li>
</ul>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/workshop_jour_1.jpg"></p>
<p>Une rencontre entre différents acteurs IT de Tunisie est organisée en marge des Workshops sous le thème de l’intégration des étudiants dans le milieu professionnel.
Les entités présentes étaient de différentes natures :</p>
<ul>
<li>Entreprises IT et Industriels : <a href="https://www.linkedin.com/company/proxym-it">ProxymIT</a>, <a href="http://www.vermeg.com/">Vermeg</a>, <a href="http://www.tmi.com.tn/">TMI</a>, <a href="http://www.objis.com/">Objis</a>, etc.</li>
<li>Ecoles et Universités (enseignants, dirigeants) : <a href="http://www.eniso.rnu.tn/fr/">ENISo</a>, <a href="http://www.esprit.ens.tn/">EsprIT</a>, <a href="http://www.msb-online.org/">MSB</a>, <a href="http://www.episousse.com/">EPI</a>, etc.</li>
<li>Etudiants (débutants, finissants et stagiaires)</li>
<li>Communautés : <a href="http://clibre.tn/">Association CLibre</a>, <a href="https://fr-fr.facebook.com/jcertif.tn">JCertif Tunisie</a>, JCertif International, etc.</li>
</ul>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/conference_debat.jpg"></p>
<p>Chaque acteur a pu exprimer ses problématiques :</p>
<ul>
<li><p>Les entreprises IT et industriels ont exprimé leurs difficultés à intégrer les jeunes diplômés, à trouver des profils qualifiés.
Ils ont également fait émerger un manque de lisibilité dans les cursus/diplômes des écoles tunisiennes.</p></li>
<li><p>Les écoles et universités ont mis en évidence leurs difficultés à suivre les évolutions technologiques et à proposer des projets innovants en adéquation avec le marché.</p></li>
<li><p>Les étudiants ont du mal à trouver des entreprises pour des stages. Leurs projets de fin d’étude ne sont pas innovants et manquent d’accompagnement.</p></li>
</ul>
<p>JCertif a proposé une approche permettant d’allier le milieu éducatif avec le milieu professionel à travers les projets JCertif Education & JCertif Pro.</p>
<p>Je n’ai pas pu être présent ce premier jour de l’événement :( Je suis arrivé à Sousse tard dans la soirée du jour 1.</p>
<h2>Jour 2</h2>
<p>Le second jour est le moment pour moi de rentrer en jeu dans l’événement. J’ouvre le bal des conférences avec une session sur le “Web Déconnecté”.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/rossi_jour_2.jpg"></p>
<p><a href="https://twitter.com/bonbhel">Max</a> prend ensuite la main pour présenter la Google Glass. Après un présentation et un démonstration, les participants ont eu le plaisir de l’essayer.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/glass_jour_2.jpg"></p>
<p><a href="https://www.facebook.com/media/set/?set=a.625151214242365.1073741837.523922604365227&type=1">Nizar Kerekni</a>, président de l’<a href="http://clibre.tn/">Association CLibre</a>, va présenter “La culture des logiciels libres”.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/libre_jour_2.jpg"></p>
<p>Et enfin, c’est au tour de <a href="http://www.thibaultvincent.com/">Thibault</a> de faire un focus sur les 5 grands succès du web.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/thibault_jour_2.jpg"></p>
<p>L’après-midi, les workshops commencés la veille se sont poursuivis et un espace Business 2 Business a permis d’accueillir les professionnels qui souhaitaient se rencontrer.
J’ai profité de cette occasion pour échanger avec différents acteurs sur les opportunités de collaboration technologique avec JCertif.
C’était surtout l’occasion de nouer des relations avec des personnes brillantes qui veulent faire progresser l’IT en Tunisie.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/b2b_jour_2.jpg"></p>
<h2>Jour 3</h2>
<p>Fidèle à sa tradition, un événement JCertif a toujours une journée qui ne figure pas dans l’agenda officiel.
Certains l’appellent JCertif Break, d’autres JCertif Excursion, d’autres encore “Le Lab” (un 3e ?).
Il s’agit pour les organisateurs et les speakers de passer une journée touristique ensemble.</p>
<p>Cela commence par un trajet en car où la dance a rêgné en maître au rythme du <a href="https://www.google.fr/search?q=darbuka&sa=X&espv=2&es_sm=91&tbm=isch&tbo=u&source=univ&ei=yyNcU_WABYiz0QWFnYCIDw&ved=0CCsQsAQ&biw=1280&bih=658">darbuka</a>, que les membres féminins de JCertif Tunisie manient à merveille.</p>
<p>Nous avons pu visiter plusieurs sites touristiques de Tunisie, déjeuner, nouer des amitiés et tout simplement passer des moments ensemble.</p>
<p><img class="center" src="http://roddet.github.com/images/jcTunisie2014/jcertif_excursion_jour_3.JPG"></p>
<p>Je ne donnerai pas trop de détails sur cette journée car il y a beaucoup trop de secrets d’Etat qui naissent ce jour-là ;)</p>
<h2>Bilan</h2>
<p>JCertif Tunisie 2014 est un événement réussi organisé par la communauté JCertif Tunisie.
J’ai pu découvrir le dynamisme tunisien dans l’IT et surtout une générosité exceptionnelle de toutes les personnes que j’ai rencontrées.</p>
<p>La grande originalité vis à vis de JCertif Congo était l’organisation d’échanges entre les différents acteurs de l’industrie du numérique : les associations, les écoles, les entreprises, etc.
C’est une inspiration “tunisienne” qu’il faudrait absolument faire profiter à d’autres pays ;)
J’ai hate de voir l’édition 2015 ! Nous avons déjà pleins de nouvelles idées !</p>
<p>Vous pouvez trouver plus de photos sur la <a href="https://fr-fr.facebook.com/jcertif.tn">page Facebook de l’événement</a>.</p>
<p>Les prochains événements JCertif :</p>
<ul>
<li>JCertif Côté d’Ivoire : du 10 au 12 juillet 2014</li>
<li>JCertif Cameroun : du 19 au 20 juillet 2014</li>
<li>JCertif Congo : du 8 au 14 septembre 2014</li>
<li>…+ d’autres à venir ;)</li>
</ul>
<p>Vous souhaitez faire parti de l’aventure et être partenaire d’un
événement JCertif ? Envoyez un mot gentil à : info@jcertif.com.</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Soirée JUG Nantes : Java 8 -> Lambdas, Streams et Collectors (Partie 2)]]></title>
<link href="http://roddet.github.com/2013/12/nantesjug-decembre-part2/"/>
<updated>2013-12-26T09:00:00-05:00</updated>
<id>http://roddet.github.com/2013/12/nantesjug-decembre-part2</id>
<content type="html"><![CDATA[<p>La première partie de cet article est accessible <a href="http://blog.roddet.com/2013/12/nantesjug-decembre-part1/">ici</a>.</p>
<p>La deuxième partie de cette soirée du <a href="http://nantesjug.org/">JUG Nantes</a> est consacrée à une présentation de Java 8 animée par <a href="https://twitter.com/JosePaumard">José Paumard</a>.</p>
<p>Avant de rentrer dans le coeur de la présentation de <a href="https://twitter.com/JosePaumard">José</a>, faisons un tour de ce que réserve Java 8.</p>
<h2>Java 8 -> quoi de neuf ?</h2>
<p>Java 8 est une évolution majeure du langage Java.</p>
<p>Les nouveautés peuvent être classées suivant plusieurs catégories pour les plus significatives :</p>
<ul>
<li><strong>Nouveaux Projets</strong> -> les nouvelles fonctionnalités assez structurantes pour être considérées comme des projets à part.</li>
<li><strong>Machine Virtuelle</strong> -> des modifications du fonctionnement de la JVM et des travaux d’amélioration des performances.</li>
<li><strong>Core</strong> -> nouveautés non structurantes du langage (ajout d’API, d’annotations, etc.).</li>
</ul>
<p>La liste complète des nouveautés : <a href="http://openjdk.java.net/projects/jdk8/features">ici</a>.</p>
<p>Voici quelques nouveautés qui ont attiré mon attention.</p>
<h2>Java 8 -> Nouveaux Projets</h2>
<p>Deux projets :</p>
<ul>
<li>Le <a href="http://openjdk.java.net/projects/lambda/">projet Lambda</a> qui ajoute les <em>closures</em> au langage Java. Il s’agit certainement de la fonctionnalité qui a le plus d’impact sur le langage. C’est le sujet principal de cette soirée.</li>
<li>Le <a href="http://openjdk.java.net/projects/nashorn/">projet Nashorn</a> qui offre un moteur d’exécution Javascript sur la JVM.</li>
</ul>
<h2>Java 8 -> Machine Virtuelle</h2>
<p>L’évolution la plus remarquable est <a href="http://openjdk.java.net/jeps/122">la suppression de la <em>Permanent Generation</em></a>. Cette zone était utilisée par la JVM pour stocker les définitions des classes, méthodes, etc. Elle était bien distincte de la <em>Heap</em> qui contient les instances des objets créées.</p>
<p>Par défaut, la <em>Permanent Generation</em> a la taille maximale de 64MB. Il est possible de modifier cette valeur avec le paramètre <em>-XX:MaxPermSize</em>.</p>
<p>Si vous avez le plaisir de travailler sur application <em>usine</em> (nombreuses classes, nombreuses librairies), habituelle du milieu professionnel, vous avez peut-être déjà rencontré une erreur qui ressemble à cela :</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>java.lang.OutOfMemoryError: PermGen space
</span><span class='line'> at java.lang.ClassLoader.defineClass1(Native Method)
</span><span class='line'> at java.lang.ClassLoader.defineClass(ClassLoader.java:620)</span></code></pre></td></tr></table></div></figure>
<p>Avec Java 8, dites adieu à cette erreur et au paramétrage lié à la <em>Permanent Generation</em>.</p>
<p>Cette évolution de la machine virtuelle est un des résultats de la convergence entre la machine virtuelle propriétaire d’Oracle <a href="http://www.oracle.com/technetwork/middleware/jrockit/overview/index-101826.html">JRockit</a> et celle de la communauté : HotSpot.
En effet, <a href="http://www.oracle.com/technetwork/middleware/jrockit/overview/index-101826.html">JRockit</a> est distribué avec le serveur d’application propriétaire d’Oracle <a href="http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html">WebLogic</a> et il a la particularité de ne pas avoir de <em>Permanent Generation</em>. Un bon signe pour la communauté ?</p>
<h2>Java 8 -> Core</h2>
<p>Quelques améliorations sont apportées au coeur du JDK.</p>
<h3>Une application JavaFX devient exécutable (<a href="http://openjdk.java.net/jeps/153">JEP 153</a>)</h3>
<p>Avant Java 8, pour rendre une application JavaFX exécutable depuis un JAR, il fallait faire deux choses :</p>
<ul>
<li>Créer une classe avec la méthode <em>public static void main(String[] args)</em> qui contient du code d’initialisation de l’application JavaFX.</li>
<li>Référencer cette classe dans l’attribut <em>Main-Class</em> du <em>Manifest</em> du JAR.</li>
</ul>
<p>Avec Java 8, il est possible de créer un JAR exécutable JavaFX sans passer par une classe avec une méthode <em>main</em>.</p>
<h3>Des annotations sur les types Java (<a href="http://openjdk.java.net/jeps/104">JEP 104</a>)</h3>
<p>Java 8 permet d’écrire ce genre de chose :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">MaClasse</span> <span class="n">m</span> <span class="o">=</span> <span class="k">new</span> <span class="nd">@Interned</span> <span class="n">MaClasse</span><span class="o">();</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// ou encore</span>
</span><span class='line'><span class="n">String</span> <span class="n">str</span> <span class="o">=</span> <span class="o">(</span><span class="nd">@NotNull</span> <span class="n">String</span><span class="o">)</span> <span class="n">element</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// ou encore </span>
</span><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MaClasse</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="kd">implements</span> <span class="nd">@ReadOnly</span> <span class="n">List</span><span class="o"><</span><span class="nd">@ReadOnly</span> <span class="n">T</span><span class="o">></span>
</span><span class='line'>
</span><span class='line'><span class="c1">// ou encore</span>
</span><span class='line'><span class="kd">public</span> <span class="kt">void</span> <span class="nf">monitorTemperature</span><span class="o">()</span> <span class="kd">throws</span> <span class="nd">@Critical</span> <span class="n">TemperatureException</span> <span class="o">{...}</span>
</span></code></pre></td></tr></table></div></figure>
<p>La documentation officielle en version béta : <a href="http://docs.oracle.com/javase/tutorial/java/annotations/index.html">ici</a>.</p>
<h3>Répéter des annotations (<a href="http://openjdk.java.net/jeps/120">JEP 120</a>)</h3>
<p>Avec Java 8, il est possible d’écrire :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="nd">@Alert</span><span class="o">(</span><span class="n">role</span><span class="o">=</span><span class="s">"Manager"</span><span class="o">)</span>
</span><span class='line'><span class="nd">@Alert</span><span class="o">(</span><span class="n">role</span><span class="o">=</span><span class="s">"Administrator"</span><span class="o">)</span>
</span><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UnauthorizedAccessException</span> <span class="kd">extends</span> <span class="n">SecurityException</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>
<p>Plus de détails, <a href="http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">ici</a>.</p>
<h3>Accéder au nom des paramètres au runtime (<a href="http://openjdk.java.net/jeps/118">JEP 118</a>)</h3>
<p>L’idée ici est de stocker dans le <em>bytecode</em> les noms des paramètres de méthodes ainsi que leurs types. Cette fonctionnalité pourrait apporter un vrai plus aux développeurs de librairies.</p>
<p>Par exemple, l’annotation <em>@PathParam</em> de JAX-RS pourrait être optionnelle avec un reconnaissance du nom du paramètre ;)</p>
<h3>Une nouvelle API pour les dates et les heures (<a href="http://openjdk.java.net/jeps/150">JEP 150</a>)</h3>
<p>Java 8 vient avec une nouvelle API pour les dates/heures qui se veut plus <em>clean</em>, <em>fluent</em>, <em>immutable</em> et <em>extensible</em>.</p>
<p>Un aperçu d’utilisation :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">LocalDate</span> <span class="n">aujourdhui</span> <span class="o">=</span> <span class="n">LocalDate</span><span class="o">.</span><span class="na">now</span><span class="o">();</span>
</span><span class='line'><span class="n">LocalDate</span> <span class="n">dans2ansMoins4jours</span> <span class="o">=</span> <span class="n">LocalDate</span><span class="o">.</span><span class="na">now</span><span class="o">().</span><span class="na">plusYears</span><span class="o">(</span><span class="mi">2</span><span class="o">).</span><span class="na">minusDays</span><span class="o">(</span><span class="mi">4</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>
<p>Documentation officielle en version béta : <a href="http://docs.oracle.com/javase/tutorial/datetime/index.html">ici</a>.</p>
<h3>Trie en parallèle des tableaux (<a href="http://openjdk.java.net/jeps/103">JEP 103</a>)</h3>
<p>Des méthodes sont ajoutées à la classe <em>java.util.Arrays</em> :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Arrays</span><span class="o">.</span><span class="na">parallelSort</span><span class="o">(...);</span>
</span></code></pre></td></tr></table></div></figure>
<h2>Revenons au JUG !</h2>
<p>Les nantais ont répondu présent pour découvrir Java 8 et pour <a href="https://twitter.com/JosePaumard">José</a>, c’est la session qui clôture son tour de Bretagne… Ou plutôt de l’ouest de la France pour les plus susceptibles ;)</p>
<p><a href="https://twitter.com/JosePaumard">José</a> va faire un zoom sur les expressions <em>Lambda</em> et ses impacts sur le JDK 8.</p>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/dec13/nantesjug-jose-paumard.jpg"></p>
<h2>Une introduction aux expressions Lambda</h2>
<p><a href="https://twitter.com/JosePaumard">José</a> va illustrer les expressions <em>Lambda</em> à l’aide du pattern <em>Map - Filter - Reduce</em>. Il va montrer une implémentation en Java 7 et une équivalence en Java 8 avec les expressions <em>Lambda</em>.</p>
<p>Illustration -> Approche impérative (avant Java 8) vs Approche fonctionnel (SQL)</p>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/dec13/nantesjug-prog-imp-vs-fonctionnel-by-jose-paumard.gif"></p>
<p>Illustration -> Passage d’un code Java 7 à un code Java 8 avec une expression <em>Lambda</em>.</p>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/dec13/nantesjug-lambdas-by-jose-paumard.gif"></p>
<h2>Syntaxes d’une expression <em>Lambda</em></h2>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">mapper</span> <span class="o">=</span> <span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">-></span> <span class="n">person</span><span class="o">.</span><span class="na">getAge</span><span class="o">();</span>
</span><span class='line'>
</span><span class='line'><span class="n">mapper</span> <span class="o">=</span> <span class="n">person</span> <span class="o">-></span> <span class="n">person</span><span class="o">.</span><span class="na">getAge</span><span class="o">();</span> <span class="c1">// sans préciser le type</span>
</span><span class='line'>
</span><span class='line'><span class="n">mapper</span> <span class="o">=</span> <span class="nl">Person:</span><span class="o">:</span><span class="n">getAge</span><span class="o">;</span> <span class="c1">// méthode non statique</span>
</span><span class='line'>
</span><span class='line'><span class="n">sum</span> <span class="o">=</span> <span class="nl">Integer:</span><span class="o">:</span><span class="n">max</span><span class="o">;</span> <span class="c1">// méthode statique</span>
</span><span class='line'>
</span><span class='line'><span class="n">mapper</span> <span class="o">=</span> <span class="o">(</span><span class="n">Person</span> <span class="n">person</span><span class="o">)</span> <span class="o">-></span> <span class="o">{</span>
</span><span class='line'> <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Mapping "</span> <span class="o">+</span> <span class="n">person</span><span class="o">);</span>
</span><span class='line'> <span class="k">return</span> <span class="n">person</span><span class="o">.</span><span class="na">getAge</span><span class="o">();</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="n">reducer</span> <span class="o">=</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i1</span><span class="o">,</span> <span class="kt">int</span> <span class="n">i2</span><span class="o">)</span> <span class="o">-></span> <span class="o">{</span>
</span><span class='line'> <span class="k">return</span> <span class="n">i1</span> <span class="o">+</span> <span class="n">i2</span><span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="n">reducer</span> <span class="o">=</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i1</span><span class="o">,</span> <span class="kt">int</span> <span class="n">i2</span><span class="o">)</span> <span class="o">-></span> <span class="n">i1</span> <span class="o">+</span> <span class="n">i2</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="n">reducer</span> <span class="o">=</span> <span class="o">(</span><span class="n">i1</span><span class="o">,</span> <span class="n">i2</span><span class="o">)</span> <span class="o">-></span> <span class="n">i1</span> <span class="o">+</span> <span class="n">i2</span><span class="o">;</span> <span class="c1">// sans préciser les types</span>
</span></code></pre></td></tr></table></div></figure>
<h2>La notion d’interface fonctionnelle</h2>
<p>Une expression <em>Lambda</em> peut être définie comme une <em>instance</em> d’une interface dite fonctionnelle. Une interface fonctionnelle est une interface avec une seule méthode abstraite.</p>
<p>L’annotation <em>@FunctionalInterface</em> peut être utilisée pour désigner une interface fonctionnelle. Elle est optionnelle et comme l’annotation <em>@Override</em>, elle ne sert qu’à apporter une sécurité supplémentaire à la compilation. Une interface annotée avec <em>@FunctionalInterface</em> ne compilera pas si elle possède plusieurs méthodes sans implémentation par défaut.</p>
<p>Un exemple d’utilisation dans le JDK 8.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kn">package</span> <span class="n">java</span><span class="o">.</span><span class="na">util</span><span class="o">.</span><span class="na">function</span><span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="nd">@FunctionalInterface</span>
</span><span class='line'><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">IntSupplier</span> <span class="o">{</span>
</span><span class='line'> <span class="kt">int</span> <span class="nf">getAsInt</span><span class="o">();</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>
<h2>Le nouveau package <em>java.util.function</em></h2>
<p>Il contient des interfaces fonctionnelles usuelles utilisées pour représenter des expressions <em>Lambda</em> en entrée et sortie de méthode.</p>
<p>Les interfaces <em>Supplier</em>, <em>Consumer</em>, <em>BiConsumer</em>, <em>Function</em>, <em>BiFunction</em>, <em>Predicate</em>, <em>BiPredicate</em> seront expliquées pendant la présentation.</p>
<h2>Des méthodes implémentées dans les interfaces</h2>
<p>Avec Java 8, il est possible d’exprimer une implémentation par défaut à une méthode d’une interface. C’est l’option qui a été choisie pour permettre d’ajouter des méthodes à des interfaces <em>historiques</em> du JDK sans modifier toutes les classes des implémentations.</p>
<p>Le mot clé <em>default</em> est utilisé pour définir une implémentation par défaut.</p>
<p>Exemple avec l’interface <em>Collection<E></em> :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">Collection</span><span class="o"><</span><span class="n">E</span><span class="o">></span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'> <span class="o">...</span>
</span><span class='line'>
</span><span class='line'> <span class="k">default</span> <span class="n">Stream</span><span class="o"><</span><span class="n">E</span><span class="o">></span> <span class="nf">stream</span><span class="o">()</span> <span class="o">{</span>
</span><span class='line'> <span class="k">return</span> <span class="o">...;</span>
</span><span class='line'> <span class="o">}</span>
</span><span class='line'> <span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>
<p>Java 8 autorise aussi les méthodes statiques dans les interfaces.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">MonInterface</span> <span class="o">{</span>
</span><span class='line'>
</span><span class='line'> <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
</span><span class='line'> <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Désormais, le Hello World en Java se fera avec une interface"</span><span class="o">);</span>
</span><span class='line'> <span class="o">}</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>
<h2>L’API <em>Stream</em></h2>
<p>Un <em>Stream</em> est défini comme une interface paramétrée construite à partir d’une source (une collection, un tableau, une source I/O) qui permet d’appliquer une expression <em>Lambda</em> sur ses éléments.</p>
<p>Comment construire un <em>Stream</em> ?</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="c1">// A partir d'une collection</span>
</span><span class='line'><span class="n">Collection</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">collection</span> <span class="o">=</span> <span class="o">...;</span>
</span><span class='line'><span class="n">Stream</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">stream1</span> <span class="o">=</span> <span class="n">collection</span><span class="o">.</span><span class="na">stream</span><span class="o">();</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// A partir d'un tableau</span>
</span><span class='line'><span class="n">Stream</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">stream2</span> <span class="o">=</span> <span class="n">Arrays</span><span class="o">.</span><span class="na">stream</span><span class="o">(</span><span class="k">new</span> <span class="n">String</span><span class="o">[]{</span><span class="s">"un"</span><span class="o">,</span> <span class="s">"deux"</span><span class="o">,</span> <span class="s">"trois"</span><span class="o">});</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// A partir d'une factory de Stream </span>
</span><span class='line'><span class="c1">// Stream.of, Stream.empty, Stream.generate, Stream.iterate, etc.</span>
</span><span class='line'><span class="n">Stream</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">stream3</span> <span class="o">=</span> <span class="n">Stream</span><span class="o">.</span><span class="na">of</span><span class="o">(</span><span class="s">"un"</span><span class="o">,</span> <span class="s">"deux"</span><span class="o">,</span> <span class="s">"trois"</span><span class="o">);</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// A partir de quelques méthodes de classes du JDK mises à jour</span>
</span><span class='line'><span class="n">IntStream</span> <span class="n">stream4</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="na">ints</span><span class="o">();</span>
</span></code></pre></td></tr></table></div></figure>
<p>Un exemple d’utilisation ?</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kt">int</span> <span class="n">sum</span> <span class="o">=</span> <span class="n">persons</span><span class="o">.</span><span class="na">stream</span><span class="o">()</span>
</span><span class='line'> <span class="o">.</span><span class="na">map</span><span class="o">(</span><span class="n">p</span> <span class="o">-></span> <span class="n">p</span><span class="o">.</span><span class="na">getAge</span><span class="o">())</span>
</span><span class='line'> <span class="o">.</span><span class="na">filter</span><span class="o">(</span><span class="n">a</span> <span class="o">-></span> <span class="n">a</span> <span class="o">></span> <span class="mi">20</span><span class="o">)</span>
</span><span class='line'> <span class="o">.</span><span class="na">reduce</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="o">(</span><span class="n">a1</span><span class="o">,</span> <span class="n">a2</span><span class="o">)</span> <span class="o">-></span> <span class="n">a1</span> <span class="o">+</span> <span class="n">a2</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>
<p>Deux types d’opérations sont applicables à un <em>Stream</em> : une opération dite <em>intermédiaire</em> et une dite <em>terminale</em>. Seule une opération dite <em>terminale</em> déclenche le traitement modélisé. Dans l’exemple précédent, <em>map</em> et <em>filter</em> sont des opérations intermédiaires et <em>reduce</em> une opération terminale.</p>
<p>Attention, un <em>Stream</em> ne peut être traité qu’une seule fois. Une fois une opération <em>terminale</em> exécutée, il est nécessaire de créer un nouveau <em>Stream</em>.</p>
<p>Illustration -> Un <em>Stream</em> est <em>lazy</em> (seule l’opération terminale déclenche le traitement) !</p>
<p><img class="center" src="http://roddet.github.com/images/nantesjug/dec13/nantesjug-stream-lazy-by-jose-paumard.gif"></p>
<h2><em>Stream</em> parallèle</h2>
<p>Il permet d’exécuter du code modélisé dans un <em>Stream</em> en parallèle.</p>
<p>Comment construire un <em>Stream</em> parallèle ?</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="c1">// Appeler parallelStream() au lieu de stream()</span>
</span><span class='line'><span class="n">Stream</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">s</span> <span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="na">parallelStream</span><span class="o">();</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// Appeler parallel() sur un stream existant</span>
</span><span class='line'><span class="n">Stream</span><span class="o"><</span><span class="n">String</span><span class="o">></span> <span class="n">s</span> <span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">parallel</span><span class="o">();</span>
</span></code></pre></td></tr></table></div></figure>
<p>Attention, un <em>Stream</em> parallèle ne signifie pas toujours plus performant. Le parallélisme entraine des opérations supplémentaires et ses performances sont dépendantes de la nature des opérations à exécuter. Il n’y a donc pas de recette magique de performance, la règle <em>mesurer pour optimiser</em> s’applique toujours.</p>
<h2>Les <em>Optionals</em></h2>
<p>Certaines méthodes des classes du JDK 8 vont renvoyer des instances de la famille <em>Optional</em> : <em>Optional<T></em>, <em>OptionalInt</em>, <em>OptionalLong</em>, <em>OptionalDouble</em>.</p>
<p>Cette structure est utilisée pour modéliser une possible absence de résultat d’un traitement.</p>
<p>Que peut-on faire avec un <em>Optional</em> dans les mains ?</p>
<p>Un exemple avec <em>OptionalInt</em> :</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>