Devoxx 2013 : 3 jours exceptionnels !

DevoxxFR-2012-skyscraper02-160-600.pngLa semaine dernière se tenait l'édition 2013 de la conférence DevoxxFR, hébergée comme l'année passée dans les salons de l'hôtel Mariott, dont les motifs psychédéliques de la moquette ont marqué les esprits.

Pour faire court, DevoxxFR c'est 3 jours de conférences en tous genres, plus de 1400 personnes, une trentaine d'exposants et de sponsors (dont Oracle et Google), et une équipe d'une vingtaine de personnes en polo rouge dopées à la caféine pour organiser tout ça (sacré boulot !). L'occasion d'en prendre plein les yeux, de remettre le cerveau en route, et de renforcer son réseau professionnel.

Et comme j'ai toujours des bêtises à raconter, et que la programmation fonctionnelle revient à la mode, j'ai proposé une conférence sur la notion de Fold : "WTF - What's The Fold ?", qui a eu l'immense honneur d'être sélectionnée (seules ~12% des soumissions sont acceptées, pour des raisons évidentes de temps et de place !). Je vous en reparlerai dans un prochain billet.

En tant que spectateur, on a intérêt à être bien organisé : il se passe plein de choses en même temps, et il suffit que le sujet ou le speaker soient un peu à la mode pour que les places s'évaporent en quelques minutes. J'avais donc prévu, pour chaque tranche horaire, un plan A et un plan B, voire même un plan C au cas où, et mon agenda était rempli à ras bord.
Précaution inutile, car lors de la keynote, Stephen Jansen a annoncé que toutes les conférences seraient disponibles gratuitement sur la plateforme Parleys, dotée pour l'occasion d'une toute nouvelle interface en HTML5. Il sera donc possible de revoir tout ça tranquillement vautrés installés dans le canapé du salon. Merci Parleys !

Lire la suite...

Astuce : itération inverse

Une petite astuce en passant : comment parcourir une liste en sens inverse, à l'aide d'un itérateur ?
En utilisant un ListIterator, qui dispose de méthodes hasPrevious() et previous() :

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
ListIterator<Integer> it = nums.listIterator(nums.size());
while(it.hasPrevious()) {
    Integer num = it.previous();
    System.out.println(num);
}
5
4
3
2
1

Ca peut toujours servir !

The Coder's Breakfast à DevoxxFR !

Chers lecteurs,

Comme l'année dernière, je suis speaker à DevoxxFR !

J'aurai l'honneur de présenter une conférence sur le thème des Folds, un concept important hérité de la programmation fonctionnelle. Si le nom peut faire peur, le principe est en réalité très simple - mais très puissant également. Haskell (naturellement), mais aussi Groovy et Scala en proposent une implémentation -- et même Java 8 s'y met !

Venez donc me voir le vendredi 29 à 11h45, et vous saurez tout sur les Folds, avec des exemples de code en Java 8 et une pincée d'autres langages !


DevoxxFR-2012-banniere-texte-600-232.png

Critique de livre : AndEngine for Android Game Development cookbook

Book cover [ Préambule Mes chers amis et lecteurs, une fois n'est pas coutume, j'ouvre mes colonnes à un collègue. Hadrien Pierart, qui travaille pas mal sur Android, va vous entretenir ci-dessous d'un livre sur AndEngine, qui a suscité son enthousiasme. Je n'ai plus qu'à vous souhaiter une bonne lecture !]

Il y a quelques semaines, Olivier m'a annoncé qu'il avait à nouveau eu vent d'une recherche de reviewers par Packt Publishing pour faire la revue de leur dernier livre AndEngine for Android Game Development cookbook par Jayme Schroeder et Brian Broyles.

Heureusement pour moi, j'avais récemment parlé à Olivier de mon projet de jeu Android, et il me recommanda de recontacter Packtpub.
Après quelques emails échangés et quelques heures d'attente, me voilà l'heureux propriétaire de cet ouvrage (en version ebook, comme ca, pas besoin d'attendre la poste) !

Lire la suite...

Java Quiz in Unicorn land

Some days ago, ZeroTurnaround, of JRebel fame, published a funny Java Quiz on their website.
It is not very hard, and there are at least 3 different solutions that I know of.

Below is my solution ; but try to find your own before taking a look !

Lire la suite...

Coding challenge : maman les petits avions

Aujourd'hui, je vous propose de jouer aux petits avions, et de vérifier quel prototype vole le mieux.

Pour les départager, nous allons nous appuyer sur la Suite de Syracuse :
En partant d'un nombre initial (entier positif), pour obtenir le suivant :

  • s’il est pair, on le divise par 2 ;
  • s’il est impair, on le multiplie par 3 et on ajoute 1.

On répète l'opération jusqu'à obtenir le nombre 1 (la suite est convergente).

On définit ensuite les termes suivants :

  • le temps de vol total : c'est la longueur de la séquence obtenue.
  • le temps de vol en altitude : c'est la période continue, à partir du décollage, pendant laquelle l'avion reste à une altitude supérieure ou égale à l'altitude initiale (voir exemple ci-dessous).
  • l'altitude maximale : c'est la valeur maximale de la séquence.

Prenons l'exemple du nombre initial 15.

  • Sa séquence est [15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
  • Son temps de vol total est de 18
  • Son temps de vol en altitude est de 11 ([15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20] = 11 éléments)
  • Son altitude maximale est de 160

Voyons maintenant comment tester nos différents prototypes d'avions.
Chaque prototype a évidemment un nom de code top secret, comme "Enterprise" ou "FauconMillenium". En additionnant les valeurs des lettres qui composent leurs noms, nous sommes capables de déterminer leur nombre initial.
Ainsi : "Enterprise" vaut 1057, et "FauconMillenium" vaut 1544.

Je vous laisse calculer quel modèle vole le mieux, et inventer vos propres prototypes !

Idéalement, il suffirait d'appeler une méthode en lui passant le nom du prototype, pour calculer (et éventuellement afficher) les trois indicateurs.
(Tous les langages bienvenus, utilisez Gist, Pastebin ou autre si votre code est volumineux)

Lire la suite...

Coding challenge !

Je suis tombé hier sur un vieux challenge proposé par Cédric Beust sur son blog :
http://beust.com/weblog/2008/06/27/

Comme je suis en train d'apprendre Haskell, et que ce genre de challenge algorithmique semble particulièrement bien adapté à ce langage, je vous livre ici ma solution.

Quelle serait la vôtre ? Tous les langages sont acceptés.
(Si le code est trop long pour tenir dans un commentaire, ou si ce n'est pas pratique pour des raisons de formatage, postez-le sous la forme d'un Gist par exemple)

Lire la suite...

Gagnez du temps avec Joda Time !

La représentation et la manipulation des dates et heures est un point notoirement faible de Java depuis sa version 1.0 - et je ne vous parle pas des Timezones...
Il existe heureusement une petite librairie fort pratique pour combler ce vide sidérant : Joda Time. Développée par Stephen Colebourne, elle est en passe d'être standardisée au sein du JDK sous la JSR-310 ("Date & Time API").

Si vous ne la connaissez pas encore, suivez le guide !

Lire la suite...

Changement d'hébergeur !

Je viens de migrer votre blog préféré vers un nouvel hébergeur (PlanetHoster), l'ancien ayant une fâcheuse tendance à blacklister arbitrairement les IP "suspectes" (?), vous interdisant régulièrement l'accès au blog.

J'espère que le nouveau vous donnera satisfaction. Comme il possède des serveurs en France, les temps d'accès devraient être également meilleurs.

Il est possible qu'il y ait des perturbations pendant quelques jours, le temps que les DNS se mettent à jour. Mais n'hésitez pas à me tenir au courant si vous rencontrez le moindre problème !

Olivier

Devs vs Threads : une comparaison pifométrique

Dans la religion méthodologie Scrum, les spécifications du produit à développer ne sont pas rédigées dans leur intégralité au début du projet, mais au contraire fournies par le client au fur et à mesure de l'avancement du développement, afin de lui offrir une plus grande réactivité.
Le périmètre courant du projet est matérialisé par le "product backlog", c'est-à-dire un flux priorisé de fonctionnalités à développer, alimenté en permanence par le client, et consommé en flux tendu par l'équipe de développement.

Mine de rien, on est là en plein pattern producteur-consommateur. On pourrait même y voir une certaine similarité avec le fonctionnement d'un ThreadPool, les thread (les développeurs) traitant des jobs (les fonctionnalités) dans leur ordre de soumission.

Question : les bonnes pratiques associées à la gestion des thread pools (en particulier leur dimensionnement) pourraient-elles être appliquées aux équipes de développement Scrum ?

Lire la suite...

- page 1 de 33