samedi 4 janvier 2014

22/11/63

J'ai fini ce livre il y a plusieurs mois mais je n'ai pas eu le temps de poster ce billet auparavant. Je profite de la fin de mes vacances pour le faire.

L'histoire

Imaginez, des marches invisibles dans votre cave qui vous amènent encore et toujours dans le passé, à la même date, toujours au même moment - chaque saut en arrière ayant pour effet d'annuler les changements éventuels que vous auriez pu apporter durant votre précèdent 'voyage'
Cela parait fou, et pourtant c'est ce qui va être présenté à un jeune professeur d'anglais par le tenancier d'un restaurant duquel il est habitué. Ça, ainsi que l'incroyable rêve du gérant d'essayer de profiter de cette opportunité pour empêcher l'assassinat du président Kennedy.

Mon avis

C'est du Stephen King, mais ce n'est pas du tout de l'horreur. Je classifierai plutôt ce livre dans le Fantastique. Quoiqu'il en soit, autant dire que je l'ai adoré ! L'histoire est très originale, le suspens est au rendez-vous ; le maitre a encore frappé ! N'hésitez pas, c'est un livre à s'offrir ou à offrir.

Le Faucon de Minuit

L'histoire

Bane, le fils que Connavar n'a jamais reconnu va suivre une carrière de gladiateur dans la ville ennemie de Roc pour y parfaire son art du combat ; dans un seul but, venger un amour tranché par l'épée d'un assassin. Le tueur est une légende vivante chez les gladiateurs, un dieu du combat que le très jeune Bane n'a aucune chance d'égaler si il ne progresse pas. Notre héros arrivera-t-il à accomplir sa vengeance ; sans se laisser détruire par elle ?

Mes impressions

Deux jours, c'est le temps qu'il ma fallut pour lire cette suite de l'épée de l'orage. J'ai commencé par hésiter avant de le débuter, m'étant "attaché" au personnage de Connavar je pensais ne pas être tenté par les aventures de son fils bâtard Bane. J'ai en fait découvert une suite passionnante, dans la continuité de l'histoire précédente avec toutefois sa propre originalité. C'est vraiment une suite, le lecteur pourra par exemple y retrouver la plupart des personnages de l'épée de l'orage. Je ne conseille d'ailleurs pas de lire ce volume sans avoir lu le précédent. Quant à Bane, on s'y attache très vite. Si je devais comparer "Le faucon de minuit" et "l'épée de l'orage" je dirai que les deux tomes m'ont autant plu l'un que l'autre.

mercredi 1 janvier 2014

L'épée de l'Orage

L'histoire


L'épée de l'orage est un livre de David Gemmell. Comme dans beaucoup de ses ouvrages, l'histoire se déroule dans un monde médiéval où la magie est présente et fait partie du quotidien.
Ce premier tome a pour personnage principal Connavar, que nous allons suivre de l'enfance jusqu'à l'âge où il deviendra le roi de son peuple. Redoutable guerrier, Connavar va tout faire pour protéger les siens des invasions à venir. L'ennemi est identifié, il s'agit des guerriers de Roc. Pour les combattre, il devra apprendre les techniques de la guerre, car le peuple de Conn est un peuple tribal : ils vivent très proches de la nature, ne disposent pas d'armée. Leurs seuls contacts avec la guerre ont été en fait des batailles suite à des razzia sur leur terre organisées par d'autres tribus. A l'inverse, le peuple de Roc est un peuple "cultivé" disposant d'une armée avancée dont les techniques de combat sont 'modernes' et inconnues de Connavar. Ce dernier ira combattre pour Roc pour les étudier de l'intérieur ; afin d'être prêt quand il s'agira de défendre ses propres terres.

Mon avis

Après avoir lu de nombreuses oeuvres de Gemmell, j'avais peur de vite avoir l'impression de relire une énième version de Druss la légende ou de la légende de marche mort. Finalement il n'en a rien été, le personnage de Connavar est bien différent de celui de Druss. J'ai trouvé le personnage plus complexe, et contrairement à Druss il ne se bat pas que pour lui mais aussi pour son peuple.

lundi 9 septembre 2013

Les URLs Java du JDK

Pour ceux qui réalisent des applications JAVA utilisant des services WEB les premières étapes de leur projet commencent classiquement par le choix de la librairie HTTP à utiliser. Ce choix n'est jamais anodin et dépend de beaucoup de choses :

  • contexte d'utilisation
  • passif technique de l'entreprise dans laquelle le projet sera réalisé
  • ce que l'on attend de la librairie : 
    • facilité d'utilisation
    • couverture et respect de la norme HTTP
    • pipelining
    • ...
Je ne vais pas ici faire de comparatifs des différentes librairies existantes : pour l'instant je n'ai surtout utilisé que celle d'apache. Par contre, il est des cas où l'on aimerait pouvoir se passer d'une dépendance à une librairie tierce. Or, depuis longtemps java intègre des possibilités de pouvoir faire des requêtes HTTP sans trop d'effort. Par contre, ce framework n'est pas trop bien documenté. Peut-être n'ai je pas frappé aux bonnes portes ; mais à l'époque ou j'ai du jouer avec les classes standards de Java j'ai eu du mal à trouver une bonne documentation. C'est pourquoi je me suis dis que j'allais présenter dans ce billet les quelques leçons que j'ai tiré de mon expérience.

Créer une connection au site distant (URLConnection)

Tout commence par la création d'une instance de la classe java.net.URL à partir de laquelle on pourra créer un object URLConnection représentant la connection applicative. Exemple de code :
URL url = new URL("http://www.google.fr");
URLConnection openConnection = url.openConnection();

Lorsque l'URL est une URL HTTP l'objet URLConnection retourné sera en fait une instance HttpURLConnection. Il est important de noter, c'est clairement indiqué dans la javadoc qu'une instance d'HttpURLConnection ne servira à réaliser qu'une seule requête HTTP : "Each HttpURLConnection instance is used to make a single request but the underlying network connection to the HTTP server may be transparently shared by other instances".

Une simple requête GET

Le code


URL url = new URL("http://www.google.fr");
            HttpURLConnection openConnection= (HttpURLConnection) url.openConnection();
             
            openConnection.setRequestMethod("GET");
            openConnection.setDoOutput(false);
            openConnection.connect();
            final int responseCode = openConnection.getResponseCode();
            
            if (responseCode >= 200 && responseCode<300)  {
                int contentLength = openConnection.getContentLength();
                String headerField = openConnection.getHeaderField("Transfer-Encoding");
                byte[] ba;
                
                try (InputStream is = openConnection.getInputStream()) {
                    if (headerField!=null && headerField.contains("chunked")) {
                        ba = readChunkedStream(is);
                    } else {
                        ba = readStream(contentLength, is);
                    }
                }
            }
            else if (responseCode >= 400)  {
                int contentLength = openConnection.getContentLength();
                String headerField = openConnection.getHeaderField("Transfer-Encoding");
                byte[] ba;
                
                try (InputStream is = openConnection.getErrorStream()) {
                    if (headerField!=null && headerField.contains("chunked")) {
                        ba = readChunkedStream(is);
                    } else {
                        ba = readStream(contentLength, is);
                    }
                }
                String st = new String(ba);
                System.out.println("error page :"+st);
            }

Les explications

Le code qui précède montre comment faire un simple GET. Lorsque l'on fait un GET sur une ressource HTTP on n'envoie pas de contenu au serveur ; c'est pourquoi avant la connection http est paramétrée ainsi :
            openConnection.setDoOutput(false);
De manière générale, le paramétrage est à faire avant l'appel à la méthode connect() qui va non seulement établir la connexion physique mais aussi faire l'appel GET. En effet, on peut dès cet appel récupérer le code retour obtenu du serveur suite à cet appel.
Le point clé dans cet exemple est que en fonction du code retour le contenu éventuellement retourné par le serveur n'est pas consommé de la même façon :

  • on utilise openConnection.getInputStream en cas de code retour de type 20x.
  • si un code retour de classe 4xx ou 5xx est retourné il faut utiliser la méthode getErrorStream pour lire l'éventuel contenu retourné par le serveur.
Une autre chose à retenir est que les ressources prises par la connection doivent être libérées ; pour cela il faut absolument fermer le flux duquel la réponse va être lue (celui retourné soit par la méthode  getInputStream ou celui retourné par la méthode getErrorStream). Si cela est fait, de manière transparente la connexion réelle sous-jacente (le socket) pourra être réutilisé pour une autre requête ; ce qui est très pratique pour obtenir de meilleures performances.

dimanche 25 août 2013

Les dossiers Dresden

Dans ce billet, je vais vous parler non pas d'un seul livre mais de cinq. J'ai en effet commencé à lire le premier tome des aventures de Harry Dresden ne sachant pas trop à quoi m'attendre et au final j'ai lu dans la foulée les 5 tomes de ses aventures.

Un magicien parmi nous

Pour vous situer le contexte, Harry Dresden est un magicien qui loue, à tous, ses services et pour toutes sortes d'activités pour lesquelles ses talents magiques pourraient s'avérer utiles. Cela va de libérer quelqu'un d'un méchant sort, en passant par retrouver un disparu,  ou combattre un loup garou ... Il est, à sa connaissance, le seul magicien à exercer ouvertement son activité au vu et au su de tous : les autres magiciens préfèrent exercer dans l'ombre et le jalousent un peu. Pour compléter ses fins de mois difficiles Harry est aussi le conseiller de la police de Chicago et plus particulièrement du Bureau des enquêtes spéciales. Ce bureau est dirigé par Karrin Murphy qui fait appel à son ami Dresden lorsque le surnaturel est impliqué.

Des enquêtes et de l'action

Si je devais décrire le genre littéraire des dossiers Dresden je dirais que ce sont des livres d'investigation dans un monde où la frontière avec le surnaturel est assez poreuse. Dans chacun des 5 livres la partie enquête n'est en effet pas négligée, Dresden est un véritable détective du surnaturel. Le lecteur trouvera aussi son compte pour ce qui est de l'action et du suspens, et cela pour chacun des 5 tomes.

Les 5 livres

Franchement, je les ai tous aimé ! Du coup, je ne vais pas attribuer de note individuelle mais je vais donner une note globale.
  • Avis de tempête
  • Lune fauve
  • Tombeau ouvert
  • Fée d'hiver
  • Suaire froid
Ma note : 16/20

samedi 15 juin 2013

Marie Pavlenko, La fille sortilège

J'en parlais ici, Marie Pavlenko a écrit un livre avant de nous livrer le 3 ème tome des aventures de Saskia.
L'histoire se passe dans une cité état - la cité des six - tenue par 6 clans : celui des planteurs, celui des sourciers, des dresseurs, façonniers, couteliers et guérisseurs. Bien que la cité soit en plein milieu du désert les clans vivent dans une grande prospérité car ils maitrisent chacun un type de magie adapté à leur spécialité.
Chaque année les jeunes de chaque clan peuvent, lors d'une cérémonie, demander à changer de clan mais en s'exposant au bannissement si le clan dans lequel ils veulent aller les refuse. C'est ce qui est arrivé à Érine qui du coup vit désormais en marge, chez les orklas, communauté survivant autour des clans dans un grand dénuement. Cette jeune héroïne au caractère bien trempé va se retrouver bien malgré elle au coeur d'un complot opposant certains clans ; des dissensions apparaissent en effet entre les ceux-ci car certains constatent que la magie semble se tarir ...
Ce roman, d'un peu moins de 300 pages, se laisse tellement bien lire qu'en trois jours - trois nuits en fait - il m'a laissé le dévorer. Je m'attendais à beaucoup de chose, sachant déjà que cette auteur était talentueuse, mais ce livre et le monde qu'il décrit m'ont véritablement séduit : et pourtant je ne suis pas un garçon facile. L'univers ainsi créé est suffisamment riche pour accrocher rapidement notre imaginaire et le livre quant à lui tellement bien écris qu'on s'y sent plongé sans le moindre effort. Que dire d'autre à part que j'espère que l'on disposera d'une suite ; je veux des nouvelles d'Érine !

dimanche 9 juin 2013

Le Livre de Saskia

Je rédige ce billet plusieurs mois après avoir lu les deux premiers tomes du  'livre de Saskia'. Mais ne pas leur consacrer une place sur mon blog me parait inconcevable tant j'ai trouvé l'histoire de Saskia intéressante. Je fais maintenant parti des personnes qui attendent avec impatience la sortie du troisième volume. Mais il faudra patienter car Marie Pavlenko a entre temps écrit un autre livre, 'La fille sortilège'. Livre que je suis justement en train de lire ces jours-ci ; j'en toucherai sans doute un mot ici. Mais revenons à Saskia en dévoilant de quoi l'histoire est faite.
Celle-ci se déroule dans un monde semblable au notre. Saskia est une ado qui nous ressemble ; du moins jusqu'au jour ou elle apprend qu'elle n'est pas vraiment de l'espèce humaine. Elle est en fait une 'enkidar' : créature à apparence humaine munie d'ailes qui apparaissent lors de "l'éveil"aux alentours de 18 ans. Deux catégories d'enkidar co-existent sur terre. La première est celle des faucheurs qui 'respirent' l'âme des personnes juste avant leur mort et récoltent ainsi leurs souvenirs. La deuxième est celle des gardiens dont le but est de sauver les gens en péril. Où Saskia va-t-elle se situer ? Evidemment elle préfèrerait être une gardienne, les faucheurs semblent trop morbides. Mais certains enkidar voient en elle le 'troisième Enkidar' : un enkidar à la fois gardien et faucheur. Une telle personne serait capable de rapprocher les deux factions, plus ou moins ennemies depuis toujours. C'est pourquoi Saskia est en danger, car la paix n'arrange jamais ceux qui profitent de la guerre.