samedi 5 avril 2014

Larry Ellison rachète Developpez.com Le fondateur d'Oracle séduit par le succès du site d'informations numéro 1 pour les développeurs francophones

Le succès croissant de Developpez.com, le club des développeurs et IT pro, n’a pas manqué d’attirer l’attention du fondateur d’Oracle Larry Ellison, qui a pu trouver un accord avec les responsables de Developpez.com.

Lancé en 1999, Developpez.com a au fil du temps conquis le cœur des millions de passionnés de l’informatique. Le site compte à ce jour :


  • 120 rubriques ;
  • plus de 220 000 visites par jour ;
  • 2,5 millions de lecteurs distincts par mois ;
  • Nombre de forums/sous forums : 1826 ;
  • Nombre d'inscrits : 754 685 ;
  • un forum recevant plus de 5 000 messages par jour ;
  • plus de 1000 auteurs.


Ce succès repose en grande partie sur sa communauté de bénévoles, qui n'a cessé de redoubler d’ardeur pour faire de Developpez.com ce qu’il est aujourd’hui.

Plusieurs lecteurs doivent être probablement inquiets en ce qui concerne l’avenir de leur site IT favori, d’autant plus que les produits open source comme MySQL ou encore OpenOffice.org, après leur acquisition par Oracle suite au rachat de Sun, ont connu une période tumultueuse avec la communauté open source.

Soyez rassuré, Developpez.com restera toujours ouvert, entre les mains de sa communauté et sans publicité intrusive. Nous tenons à signaler que le rachat est effectué par le PDG d’Oracle, et non la société, avec pour unique but de voir le club « des développeurs et IT pro » s’agrandir encore plus.

Microsoft demeure le numéro 1 dans le secteur du logiciel Oracle occupe la seconde position au détriment d'IBM, selon Gartner


Le cabinet d’analyse Gartner vient de publier son classement annuel des éditeurs de logiciels pour l’année 2013.

Microsoft conserve son trône de numéro un, avec un chiffre d’affaires d’environ 65,7 milliards de dollars. Oracle se fait remarquer en reléguant IBM en troisième position, avec un chiffre d’affaires de 29,6 milliards de dollars. IBM ferme le top trois avec 29,1 milliards de dollars.

« C’est la première fois dans le classement mondial de Gartner des éditeurs de logiciels qu’Oracle occupe la seconde place avec un chiffre d’affaires de 29,6 milliards de dollars, et une part de marché mondiale de 7,3% », explique Chad Eschinger, vice-président de la recherche chez Gartner.

La firme de Larry Ellison bénéficie de cette position grâce à la montée en puissance du « Big data » et du Cloud, qui a poussé les entreprises à investir dans les bases de données et les applications Cloud, des secteurs sur lesquels Oracle est bien positionné.



L’éditeur des solutions Cloud Salesforce.com enregistre le plus fort taux de croissance (33,3 %) au cours de l’année 2013. La société ferme le top 10 du classement mondial, avec un chiffre d’affaires de 3,8 milliards de dollars, contre 2,9 milliards de dollars il y a un an. La société est suivie par VMware (14,1%) et SAP (9,5 %), qui occupe la quatrième place du classement mondial.

Adobe sort du top 10, et occupe désormais la 11e position du classement de Gartner.

Globalement, le chiffre d’affaires réalisé par le secteur du logiciel en 2013 s’élève à 407,3 milliards de dollars, en croissance de 4,8 % par rapport à l’année 2012 (388,5 milliards de dollars de recettes), selon Gartner.

L’essor du SaaS et son modèle d’abonnement ont eu un impact important sur les habitudes d’achats des logiciels. « Pour la première fois, un fournisseur SaaS (N.D.L.R : Salesforce.com) a pu se retrouver en 10e position du classement », explique Gartner, qui estime que si IBM et Adobe réussissent à offrir leurs solutions via le Cloud, elles pourraient retrouver leur précédente place.

Source : Communiqué de presse Gartner

dimanche 23 mars 2014

L'esprit agile est-il en voie de disparaître ? 13 ans après la publication du manifeste agile, un développeur note l'échec des méthodes agiles

Tout professionnel de l’IT s’accorde que le développement logiciel n’est pas une mince affaire. Par le passé, cela reposait essentiellement sur des méthodes et des processus de développement lourds, rigides et coûteux, qui conduisaient à des cycles de développement assez lents. En 2001 le manifeste agile a été publié. Ce dernier décrit une nouvelle approche, une nouvelle famille de méthodes de développement logiciel dites « méthodes agiles ».

Toutefois, ce manifeste décrit les grandes lignes pour des méthodes de développement axées sur le développeur, la collaboration étroite entre l’équipe de développement et le client ainsi que l’importance du feedback des utilisateurs.

13 ans plus tard, force est de constater que les méthodes agiles ont échoué. C’est en tout cas ce que pense Mike Hadlow, un développeur senior, dans un billet de blog. Mais alors pourquoi cet échec ? Une dérive, une incompréhension ou encore un abus serait à l’origine de l’échec, selon celui-ci.

Agile est en premier lieu un état d’esprit mettant au centre de la scène le développeur, chacun doit trouver son propre rythme en suivant un chemin balisé par des méthodes connues. Il ne s’agit donc pas de méthodes de management de l’équipe de développement ni de recourir d’une manière bête et disciplinée à certaines pratiques telles que les stand-up meeting journalier, de courtes itérations de 2 semaines et de micro deadlines trop rigides.

Une des conséquences de la mauvaise interprétation/application des concepts agiles est la désignation de chefs de projet non sensibles à l’aspect technique du développement logiciel, ces derniers sont alors initiés aux méthodes agiles en les considérants à tort comme des méthodes de management. 

En effet quoi de mieux qu’un développeur pour comprendre un autre, hors si les méthodes agiles se targuent d’être centré sur le développeur et que le chef de projet n’est pas dans cette dynamique, cela conduira inévitablement à l’échec, dans le cas contraire, cela relève de la chance ou d'autres facteurs, mais certainement pas de l’application d’une méthode agile.

Au final, il demeure clair que la réussite de la mise en œuvre d’une méthode agile passe en premier lieu par une bonne compréhension des aspects techniques du développement, de la capacité du chef de projet à sympathiser avec le développeur et à le motiver, faute de cela, les méthodes agiles subsisteront, mais l’esprit agile sera en perdition et finira par mourir.

Source : Blog de Mike Hadlow

MakeHuman 1.0.0 : un outil pour créer des personnages 3D pour vos applications et jeux vidéo.

MakeHuman 1.0.0 : un outil pour créer des personnages 3D

MakeHuman est une application développée en Python (2.7) qui vous permettra de créer des personnages 3D et de les exporter pour les utiliser notamment dans Blender.


Le développement de MakeHuman a débuté en 1999 sous la forme d'un module pour Blender sous le nom de « MakeHead ». Il n'était alors capable que de créer des modèles de tête. La première version de l'outil a vu le jour en 2000.
En 2005, les développeurs ont opté pour une application complètement dédiée (OpenGL 2.1) et aujourd'hui, celle-ci arrive à la version 1.0.0 et permet de générer des modèles complets d'humains.

Les modèles générés sont propres, complètement rigged et composés uniquement de rectangles. Les modèles sont aussi préparés pour être utilisés dans Mudbox/zBrush et proposent pour cela 1170 cible de morphing contrôlables. Ainsi, MakeHuman permet générer des modèles pour être utiliser dans la majorité des applications 3D. On pourra le comparer à Poser.


Le logiciel et son code source sont sous licence AGPL3+. Le contenu et les modèles fournis sont sous licence CC0.

Vous pouvez télécharger MakeHuman ici ou consulter son code source.

Votre opinion

 Comment créez vous vos personnages pour vos jeux ?
 Allez-vous utiliser MakeHuman, le tester ?

Source

Gamefromscratch
Site officiel

Fin du support de Windows XP : Microsoft intensifie la campagne

Le compte à rebours est lancé pour la fin du support de Windows XP.

Microsoft a publié un site qui affiche le nombre de jours, heures et minutes restant aux utilisateurs de son célèbre OS pour migrer.

Windows XP a été publié le 25 octobre 2001. Après plus de douze ans d’existence, l’OS reste demeure encore très célèbre auprès des utilisateurs de PC, revendiquant la seconde place dans les classements de NetApplications et StatCounter.

Microsoft mettra officiellement fin au support de celui-ci le 08 avril prochain. L’OS ne recevra plus aucun correctif de sécurité, exposant les personnes qui l’utilisent encore aux actions des pirates.

Pour accompagner les utilisateurs dans la migration vers un autre OS, Microsoft a lancé le site AmIRunningXP.com, dont l’utilité est assez surprenante. Le site permet à l’utilisateur de savoir s’il est sous Windows XP. Une information qui est déjà fournie lors du démarrage du PC. Quoique, si vous interrogez plusieurs utilisateurs, certains seront incapables de donner avec exactitude la version de l’OS qu’ils utilisent.


À ce nouveau site, s’ajoute un bon d’achat de 50 dollars pour aider les personnes qui veulent acquérir un ordinateur portable, une tablette ou Windows 8 dans une boutique Microsoft. Un support premium de 90 jours est également offert, sans aucuns frais supplémentaires, pour assister les utilisateurs dans la transition.

Cette nouvelle campagne vient s’ajouter à plusieurs efforts déjà consentis par Microsoft, pour pousser les adeptes de Windows XP à l’abandonner, dont la plus récente est l’affichage d’un pop d’alerte de la fin imminente du support de Windows XP depuis le 08 mars 2014.


Microsoft propose également un outil gratuit pour simplifier le transférer des fichiers et paramètres personnels de Windows XP vers un OS pris en charge (Windows 7, Windows 8 ou Windows 8.1).

Source : AmIRunningXP.com

Java 8 est disponible, la plate-forme se met aux expressions lambdas, Tour d'horizon des nouveautés

Si les versions 6 et 7 de Java étaient des évolutions douces : Java 8 est d'un tout autre ordre. Plus de 56 nouvelles fonctionnalités ont été ajoutées (http://openjdk.java.net/projects/jdk8/features). Les arrivées des lambdas, des méthodes par défaut, des interfaces fonctionnelles et de Stream vont modifier en profondeur le langage et donc l'écosystème Java tout entier. Nous pouvons aussi citer l'incorporation d'une nouvelle API pour gérer les dates, de nouvelles annotations et d’un nouveau moteur d'exécution JavaScript.


Java 8 devrait ainsi avoir un impact au moins aussi important que Java 5 à son époque (rappelez-vous l'apparition des Generics). Il faut donc s'y préparer dès à présent. Voici quelques nouveautés plus en détail.


Les nouveautés du langage



Interfaces fonctionnelles
 : connues précédemment sous le nom de Single Abstract Method interfaces (SAM Interfaces), cette nouveauté introduit les interfaces qui possèdent uniquement une seule méthode d’instance abstraite. Les plus connues sont java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator. Avec Java 8, elles portent le nom d'interfaces fonctionnelles. Dès lors qu'une interface possède une seule méthode d’instance abstraite, elle est désignée comme interface fonctionnelle. Il est aussi possible d'annoter l'interface par @FunctionalInterface. Si une interface est annotée ainsi et possède plus d'une méthode d’instance abstraite, une erreur de compilation sera produite. C'est un peu le même principe qu'avec l'annotation @Override.

L'interface ci-dessous Runnable possède une méthode et est annotée @FunctionalInterface.
Code :


1 2 3 4
@FunctionalInterface 
public interface Runnable { 
    void run(); 
}
Le nouveau package java.util.function propose d’ailleurs un certain nombre d’interfaces fonctionnelles répondant à divers usages.

Lambdas : il s'agit de la plus grosse nouveauté de Java 8. Décrite depuis la JSR 335 (https://jcp.org/en/jsr/detail?id=335), cette fonctionnalité permet d'apporter la puissance de la programmation fonctionnelle dans Java. Une expression lambda peut être assimilée à une fonction anonyme, ayant potentiellement accès au contexte (variables locales et/ou d'instance) du code appelant. Ces "fonctions anonymes" peuvent être affectées dans une interface fonctionnelle. Le code de l’expression lambda servira ainsi d’implémentation pour la méthode abstraite de l’interface. On peut donc les utiliser avec n'importe quel code Java utilisant une telle interface, à condition que les signatures de la méthode correspondent à celle de l’expression lambda.

La syntaxe utilisée est la suivante : (paramètres) -> code ou (paramètres) -> {code} quand il y a plus d'une instruction. 

Prenons l'exemple du tri des éléments d'une collection. 
Code :


1 2 3 4 5 6
Arrays.sort(testStrings, new Comparator<String>() { 
    @Override 
    public int compare(String s1, String s2) { 
        return(s1.length() - s2.length()); 
    } 
});
En utilisant les lambdas, la nouvelle écriture sera :
Code :


1 2 3 4 5 6 7 8 9
// Forme longue : 
Arrays.sort(testStrings, (String s1, String s2) -> { return s1.length() – s2.length(); }); 
 
// Forme courte (possible uniquement s’il n’y a qu’une instruction) : 
Arrays.sort(testStrings, (String s1, String s2) -> s1.length() – s2.length()); 
 
// Forme courte avec type implicite des paramètres 
// (le type est déduit par le compilateur via l’inférence) 
Arrays.sort(testStrings, (s1, s2) -> s1.length() – s2.length());
Les interfaces fonctionnelles servent aux lambdas, facilitant ainsi l'écriture puisqu'elles permettent d'écrire l'implémentation de façon plus concise. Nous montrons ci-dessous un exemple d'implémentation de l'interface Runnable.
Code :


Runnable r1 = () -> { System.out.println("My Runnable"); };
Plus de détails sur les lambdas sont disponibles dans un tutoriel publié récemment :http://soat.developpez.com/tutoriels...t-lambda-java8

Références de méthode : une référence de méthode est utilisée pour définir une méthode en tant qu’implémentation de la méthode abstraite d’une interface fonctionnelle. La notation utilise le nom de la classe ou une instance de la classe, suivi de l'opérateur « :: » et du nom de la méthode à référencer. Le type des paramètres sera déduit du contexte selon l’interface fonctionnelle vers laquelle on affecte la référence.

On peut distinguer quatre types de méthodes références :
  • Les références vers une méthode static, qui s’utilisent toujours avec le nom de la classe en préfixe. La signature de la référence correspond alors à la signature de la méthode.
    Code :


    1 2
    Supplier<Double> random = Math::random; 
    double result = random.get(); // Math.random();
  • Les références vers une méthode d’instance, liées à une instance spécifique, qui s’utilisent toujours avec l’instance en préfixe. Ici également, la signature de la référence correspond à la signature de la méthode, et tous les appels s’appliqueront sur l’instance définie dans la référence de méthode :
    Code :


    1 2 3
    Random r = new Random(); 
    Supplier<Double> random2 = r::nextDouble; 
    double result2 = random2.get(); // r.nextDouble();
  • Les références vers une méthode d’instance, mais sans lien avec une instance précise. Comme pour les méthodes static, on utilisera comme préfixe le nom de la classe. La signature de la référence correspond alors à la signature de la méthode, précédée par un argument du type de la classe, qui correspondra à l’instance sur laquelle on appellera la méthode :
    Code :


    1 2 3 4 5 6 7
    Function<Random,Double> random3 = Random::nextDouble; 
    Random r1 = new Random(); 
    Random r2 = new Random(); 
    Random r3 = new Random(); 
    double result1 = random3.apply(r1); // r1.nextDouble(); 
    double result2 = random3.apply(r2); // r2.nextDouble(); 
    double result3 = random3.apply(r3); // r2.nextDouble();
  • Enfin, il est possible de référencer un constructeur en utilisant le mot-clef “new” comme nom de méthode. Très pratique pour créer une fabrique :
    Code :


    1 2
    Function<String, Thread> factory = Thread::new; 
    Thread t = factory.apply("name"); // new Thread("name");


Les références de méthodes sont une alternative aux expressions lambdas, lorsqu’il n’y a qu’une seule et unique méthode à exécuter, pour une syntaxe encore plus claire :
Code :


1 2 3 4 5 6 7 8 9 10 11
Random r = new Random(); 
 
Supplier<Double> random = Math::random; 
Supplier<Double> random2 = r::nextDouble; 
Function<Random,Double> random3 = Random::nextDouble; 
Function<String, Thread> factory = Thread::new; 
 
Supplier<Double> random = () -> Math.random(); 
Supplier<Double> random2 = () -> r->nextDouble(); 
Function<Random,Double> random3 = (Random random) -> random.nextDouble(); 
Function<String, Thread> factory = (String name) -> new Thread(name);
Cela peut également être une alternative intéressante à l’API de reflection, puisque cela permet un code sécurisé.

Méthodes par défaut (Defender Methods) : cette fonctionnalité permet de proposer une implémentation dite par "défaut" aux méthodes déclarées dans les interfaces. Par conséquent, depuis Java 8, une interface Java contient du code. L'avantage est de pouvoir faire évoluer les interfaces sans avoir à tout casser.

Dans l'exemple ci-dessous, une interface Person déclare deux méthodes. La méthode sayHello est dite par défaut via le mot clé default. Toute implémentation de Person imposera que la méthode sayGoodBye() soit implémentée. Pour sayHello, l'implémentation ne sera pas obligatoire, même si elle reste bien sûr possible.
Code :


1 2 3 4 5 6
interface Person { 
    void sayGoodBye(); 
    default void sayHello() { 
        System.out.println("Hello there!"); 
    } 
}
Les méthodes par défaut permettent ainsi de faire évoluer l’API des interfaces sans provoquer de grosses incompatibilités dues à l’absence d’implémentation dans les classes qui les implémentent. L’API de base en profite grandement en enrichissant certaines de ses interfaces (en particulier dans l’API de Collections dont les interfaces s’enrichissent de plusieurs méthodes).

Plus de détails sur cette nouveauté peuvent être trouvés sur le tutoriel publié dernièrement :http://oliviercroisier.developpez.co...es-interfaces/

Méthodes static dans les interfaces : Java 8 propose également la possibilité de créer des méthodes statiques depuis une interface Java.

Dans l'exemple ci-dessous, une interface Person déclare une méthode statique.
Code :


1 2 3 4 5
interface Person { 
    static void sayHello() { 
        System.out.println("Hello there!"); 
    } 
}
Cela peut s’avérer utile pour proposer des méthodes utilitaires liées à l’interface (comme une “fabrique” par exemple).

Les mises à jour de l'API
Stream et parallèles streams sur les collections : Java 8 apporte également la notion de Stream, qui représente un flux de données que l'on peut manipuler à la volée. L'utilisation d'un Stream se compose de trois parties :
  • La création du flux à partir d'une source de donnée qui peut être très variée (un tableau, une collection, un flux d'entrée/sortie, des données générés à la volée, etc.)*;
  • Des opérations intermédiaires, qui permettent de transformer le flux en un autre flux (en filtrant des données ou en les transformant par exemple)*;
  • Une opération terminale, qui permet d'obtenir un résultat ou d'effectuer une opération spécifique.


Par exemple, pour créer un flux à partir d'une collection, on utilisera tout simplement la nouvelle méthode stream() de Collection.
On peut alors appliquer autant d'opérations intermédiaires que nécessaire, comme filter(), qui permet de filtrer certaines données, map() qui permet de modifier la donnée à la volée, distinct() qui permet d'éviter les doublons, sorted() qui permet de les trier, ou encore limit() qui restreint la taille des données.
Une fois toutes nos opérations intermédiaires effectuées, il faut alors appliquer la méthode finale qui va déterminer notre action. On peut par exemple utiliser forEach() pour itérer sur toutes ces valeurs, min()/max() pour récupérer seulement la valeur min/max, finAny()/findFirst() pour récupérer un élément correspondant aux critères, etc.

Bien sûr, toutes ces opérations sont pensées pour être utilisées avec des expressions lambdas ou des références de méthodes.

API java.time (http://openjdk.java.net/jeps/150) : la nouvelle API date, heure et calendrier basée sur la JSR 310 est disponible dans les packages java.time.*. Les classes sont désormais immuables et thread-safe. L'utilisation des méthodes chaînables rendent le code plus lisible. La nouvelle API différencie également deux modèles de temps : le temps machine et le temps humain. Pour une machine, le temps n’est qu’un entier augmentant depuis l’epoch (01 janvier 1970 00h00min00s0ms0ns). Pour un humain en revanche, il s’agit d’une succession de champs ayant une unité (année, mois, jours, heure, etc.). À noter également que le mois "0" n'existe plus et le mois "1" correspond au mois de janvier. Plus de détails sur cette nouveauté peuvent être trouvés sur le tutoriel publié dernièrement :http://soat.developpez.com/tutoriels...me-date-java8/.

Annotations multiples (http://openjdk.java.net/jeps/120) : Java 8 offre maintenant la possibilité de répéter plusieurs fois une annotation de même type pour un élément donné d'un programme.

Dans l'exemple ci-dessous, l’annotation @Schedule est utilisée deux fois, ce qui n'était pas permis dans les versions antérieures.
Code :


1 2 3
@Schedule(dayOfMonth="last") 
@Schedule(dayOfWeek="Fri", hour="23") 
public void doPeriodicCleanup() { ... }
Nashorn, le nouveau moteur Javascript (http://openjdk.java.net/jeps/174) : un moteur JavaScript proposé par défaut depuis le JDK. Plus de détails sur cette nouveauté peuvent être trouvés sur le tutoriel publié récemment : http://soat.developpez.com/tutoriels...nashorn-java8/

Nous pourrions continuer la liste des modifications en précisant également la suppression du PermGen pour la machine virtuelle, les nombreux ajouts pour JavaFX (http://pixelduke.wordpress.com/2013/...part-i-javafx/) ou finalement l'ajout de classes dont l'intérêt va se découvrir au fil du temps. L'on peut citer, par exemple, les classes LongAdder et DoubleAdder (http://blog.palominolabs.com/2014/02...vs-atomiclong/).

Vous l'aurez compris, Java 8 nous apporte une vraie évolution dans le paysage Java. Pour plus de détails, n'hésitez pas à faire un tour sur :


Les avis de l'équipe Java de Developpez.com

Fabrice Bouyé (bouye)

Le JDK 8 est enfin là !

À la vue des expressions lambdas, certains diront qu'avec quelques années de retard, Java met enfin à niveau sa syntaxe événementielle pour rattraper celle de C#, Groovy ou encore Scala.
Cependant, on aurait tort de penser qu'il s'agit là d'un simple sucre syntaxique destiné à donner un aspect moderne au langage et à le rendre plus attrayant !

Ces nouvelles fonctionnalités arrivent, en effet, avec une refonte majeure de la JVM, que ce soit au niveau du support des expressions lambdas elles-mêmes, des références de fonctions (similaires aux pointeurs de fonctions pour ceux ayant fait du C/C++) ou encore de la refonte des collections par l'introduction des streams.
Outre l'aspect extérieur (les API que nous, programmeurs, sommes amenés à manipuler), désormais la JVM s'adapte aux traitements en parallèle et au support du multicœur, et le tout sans devoir manuellement manipuler des threads ou des workers !

De plus, l'excellente bibliothèque des gestions du temps JODA-Time a fini par évoluer pour devenir le JSR 310, la nouvelle API de temps et de date du JDK 8.
Simple, efficace et pratique d'emploi, elle promet de nous faire rapidement oublier les fastidieuses opérations sur java.util.Calendar et java.util.Date, toujours promptes à créer toutes sortes de fiascos temporels si on n'y prend pas garde.

J'attends beaucoup de ce premier pack de fonctionnalités. Cependant, je garde également l’œil ouvert sur ce qui est encore à venir, ces autres fonctionnalités qui n'ont pu être intégrées au JDK 8 (jigsaw, etc.).
Les plans pour le futur JDK 9 semblent toujours aussi appétissants...
Mickael Baron (Mickael Baron)

Je suis très enthousiaste de l'arrivée de Java 8 et des nombreuses fonctionnalités qui sont proposées. À mon avis, il faudra un certains temps afin de maîtriser toutes les subtilités des améliorations. Je compte sur les nombreux rédacteurs de Developpez.com pour nous faire découvrir tous les secrets de cette version.

Je suis également curieux de voir comment cette nouvelle version va s'imposer dans le monde de l'entreprise où on croise encore des JDK 1.4.

La fonctionnalité la plus intéressante de mon point de vue reste les implémentations par défaut, je regrette même qu'elle arrive aussi tard. Les évolutions des interfaces seront plus faciles à réaliser. Pour les lambdas, je ne suis pas encore assez expérimenté pour en comprendre toutes les subtilités mais je compte bien m'y mettre quand mon Eclipse préféré sera disponible.

Bienvenue Java 8 !!!
Frédéric Martini (AdiGuba)

Java continue son évolution.

D'aucuns diront qu'il s'agit d'une évolution bien lente. Je parlerais plutôt d'évolution prudente et intelligente.

Certes Java ne fait pas la course aux fonctionnalités, mais elles ont le mérite d'être réfléchies et pesées.

Je trouve par exemple la notion d'interface fonctionnelle particulièrement ingénieuse, car non seulement cela permet de ne pas s'embêter à manipuler un nouveau type de données (des "fonctions-types" ou des types delegate), mais cela permet également une retro-compatibilité avec de nombreuses APIs existantes, et cela sans la moindre effort !

Les expressions Lambdas (et les références de méthode) permettront également de concevoir de nouveaux types d'APIs, mais n'oublions pas non plus les méthodes par défaut, qui permettront une meilleure évolution des APIs existantes et futures (et d'ailleurs l'API de Collections en profite bien).

Je pense vraiment qu'il s'agit d'une version qui marquera sans doute un tournant aussi important que J2SE 5.0...
Thierry Leriche-Dessirier (thierryler)

Selon moi, les trois points les plus importants de cette nouvelle version sont 1) les Lambdas 2) les streams et 3) la disparition du permgen.

L'ajout des interfaces fonctionnelles et des méthodes par défaut a été imposé par les Lambdas. Ça reste très intéressant malgré tout. À mon sens, c'est tout de même au second plan.

Les Lambdas sont synonymes de programmation fonctionnelle. Si ce n'était qu'une question de syntaxe, ça aurait eu moins d'impact. Des frameworks tels que Guava le proposent déjà, comme je le montre dans l'article intitulé "Tutoriel d'introduction à la programmation fonctionnelle avec Guava".

Avec Java 8, on va bien plus loin. On a aussi accès au "reduce" du "filter-map-reduce" mais, et surtout, cela travaille pour de vrai dans un contexte multithread/multicoeur. On pouvait déjà travailler en multicoeur en Java, surtout depuis Java 7 qui a bien défriché le terrain pour Java 8, mais il fallait se coltiner les points techniques à chaque fois, avec les risques que cela comporte et avec une syntaxe non adaptée. Java 8 rend cela "simple".

Il ne faut pas oublier que les fabricants de processeurs ne cherchent plus à augmenter la fréquence. C'est désormais une course aux cœurs. L'avenir est donc aux traitements parallèles et aux lambdas. Encore faudra-t-il bien comprendre les patterns de la programmation fonctionnelle, pour ne pas les utiliser de travers et à tout-va.

Le permgen, quant à lui, disparaît et ce n'est pas trop tôt. On pointe les projecteurs sur le langage en oubliant qu'il se passe des choses en coulisse et plus spécifiquement du côté de la JVM. N'oublions pas que Java, c'est un langage et une Virtual Machine. C'est très important. La VM est conçue pour optimiser les programmes (plan d’exécution) à l'utilisation. Ce n'est pas juste un lanceur de classe Main. Avec la disparition du permgen, on voit le rapprochement des plusieurs éditeurs de JVM/GC qui porte ses fruits.
 Télécharger la nouvelle version de Java

dimanche 16 mars 2014

Rachat de SFR : Bouygues Telecom veut céder son réseau à Free


Rachat de SFR : Bouygues Telecom veut céder son réseau à Free
La procédure de rachat de SFR évolue. L'un des candidats, Bouygues Telecom, se prépare aux contreparties demandées en négociant avec Free la vente de son réseau. Si le rachat de SFR se concrétise, il n'y aura plus que trois opérateurs, ce qui plaît à Arnaud Montebourg. 

Le groupe Vivendi a clôturé l'envoi des offres de rachat de sa filiale SFR le 5 mars dernier. Les candidats sont deux, Numericable et Bouygues Telecom. 

Bouygues se prépare, déjà, aux contreparties demandées par l'autorité de concurrence. Si le rachat de SFR se concrétise, Bouygues aurait deux réseaux, ce qui ne serait pas équilibré par rapport aux concurrents. 
Pour y remédier, Bouygues Telecom s'est rapproché de Free afin de lui vendre son réseau composé de 15 000 antennes en 2G, 3G et 4G. Cela permettra à Bouygues de se concentrer sur les infrastructures -plus importantes- de SFR, et à Free de détenir de nombreuses antennes et une partie du réseau 4G solide de Bouygues. 
Free et Bouygues viennent de signer un accord d'un montant de 1.8 milliard d'euros. 
Toutefois, il ne sera effectif que si l'offre de rachat de Bouygues est acceptée par Vivendi et par les autorités. 
Du côté du gouvernement, Bouygues peut compter sur le ministre du redressement productif, Arnaud Montebourg. 
Celui-ci a accordé un entretien au journal Le Parisien ce dimanche. Il a rappelé que le gouvernement ne veut pas entendre parler de plan social et souhaite que l'acquéreur s'engage dans le « patriotisme français » et l'investissement dans le très haut débit. Par rapport à ces objectifs, Arnaud Montebourg a déclaré que « (nous) souhaitons déjà que les candidats améliorent ces offres au regard de nos exigences ». 
Toutefois, il s'est montré favorable à l'offre de Bouygues : « la concurrence par la destruction s'arrêtera si nous revenons à trois opérateurs mobiles tout en maintenant des prix bas. Elle ne s'arrêtera pas si Numericable conquiert SFR puisque la concurrence restera à quatre dans le mobile. Et au final, soit Free soit Bouygues, sera à ramasser à la petite cuillère avec des milliers d'emplois perdus ». 

Si le groupe Vivendi accepte l'offre de Bouygues, il restera à voir si les autorités françaises et la Commission européenne seront favorables à cette acquisition.