.

Chrtistophe Roux - Webmiel

Webmiel Société en Commandite Simple
Use contact form if you want to obtain a license for using Marscii-64 in the programming language you develop.
Version Fr Version Es

christophe.roux@webmiel.fr

Développeur et Testeur Java, formateur et support Chrome OS

Nouvelles de Mars 2025

Ayant identifié le défaut majeur de Java 8 et + je forke openjdk 7

Oracle est l'entreprise qui a repris le langage Java suite au naufrage de Sun Microsystems le créateur du langage.
Java était un langage magnifique du point de vue de son architecture.
Lorsque Oracle a publié Java 8, ses équipes ont introduit une évolution majeure des interfaces: les interfaces pouvaient implémenter une version par défaut des méthodes dont elles publiaient la signature.
Pour comprendre pourquoi il s'agit d'une erreur monumentale d'architecture logicielle, il faut comprendre ce qu'est une interface:
Une interface décrit un contrat logiciel que les classes qui implémentent cette interface doivent respecter. Une interface n'est pas sensée présenter un code exécutable mais uniquement les signatures (noms des méthodes et types des parametres ainsi que du type de retour) des méthodes.
A ce titre, une interface est l'élément du langage le plus représentatif de ce qu'est une API (Application Programming Interface).
Placer des implémentations par défaut dans une interface, pour prendre une analogie, c'est comme mettre une partie du moteur de la voiture sur le tableau de bord du véhicule, cela n'est pas du tout sa place.
Donc par cette simple évolution, Oracle a présenté au monde entier son incompétence pour reprendre la suite de Sun MicroSystems.
Si pour Oracle, le langage Java était si important stratégiquement, alors Oracle aurait mieux fait d'investir dans Sun Microsystems avant qu'il ne soit en mauvaise santé.
Oracle publie aujourd'hui, Java version 24. Openjdk 7 était en activité en 2007, nous sommes maintenant en 2025. Oracle a disposé de 18 ans pour acquérir la compétence afin de développer le langage Java. Force est de constater que cela n'a pas été suffisant.
La seule solution raisonable est de repartir de openjdk 7 et de reprendre le langage sans les erreurs de Oracle.
Même Google, qui a utilisé Java pour son système Android, a suivi Oracle et Java 8 avec ces évolutions des interfaces.
J'appelle donc toute entreprise qui n'a pas accepté de passer à Java 8 et désire continuer à utiliser des forks de openjdk 7 à me contacter.
Je désire aussi lancer un message à destination de Google.
Le "fair use" ou en français "l'usage légitime" peut s'appliquer aux interface de java 7 qui ne comportent pas d'implémentation. Mais à partir de Java 8, ce n'est plus le cas et donc utiliser les interfaces publiées par Oracle est dangereux car Oracle peut contester l'usage légitime du fait de ces portions de code implémentées dans ses interfaces. Je conseille donc à Google de ne plus suivre les évolutions faites par Oracle depuis Java 8 inclus car en cas de nouveau procès basé sur le fait que les interfaces ne sont plus de même nature, Oracle pourrait avoir gain de cause.
J'utilise quotidiennement ChromeOS de Google et je suis disposé à travailler avec Google ou Alphabet sur une évolution issue de Java 7 pour poursuivre le travail propre à l'architecture de Openjdk 7.

J'utilise Java depuis 1996 et j'apprécie la simplicité des concepts fondateurs de ce langage. Je n'ai pas nécessairement toutes les compétences requises pour y parvenir mais je compte sur l'aide d'autre développeurs pour y arriver.

Si vous lisez ces lignes jusqu'à ce paragraphe, c'est probablement parce que vous comprenez de quoi je parle et donc vous êtes compétents pour comprendre la suite de ce document.

Si vous êtes intéressés à participer à cette aventure en logiciels libres, n'hésitez pas à me contacter.

Vous avez un lien ci-dessous, qui vous conduira vers la page web qui détaille le plan de route que j'envisage pour ce projet.

Expérience

De 2024 à aujourd'hui Webmiel

Scripting avec le langage Java

De 2016 à aujourd'hui Hagi-yaki

Association médico-sociale

Audits informatiques : identification de failles de sites officiels (UE, France Travail)

2015

Préparation au Marathon

2013-2014 école Centrale Paris

Paramétrage d'un logiciel pour réaliser un annuaire

2012-2013 AJI et JCM

Apprentissage de techniques administratives

2011 Afpa

Formation à la gestion pour la création d'entreprises

2009-2010 Eschel Formation

Formateur UML; modélisation SGBDR

2006-2008 Acœur

Développement Client/Serveur Java; Formateur Debian; auteur d'un livre sur l'architecture logicielle

2000 - 2006 Euriware

Développement Web en Java/Struts/JDBC; maintenance logicielle; Développement workflow pour MantisBugTracker; apprentissage de techniques d'Assurance Qualité

2000 Télémédecine Technologie

Conception orientée objet; principe d'inversion de contrôle

1997-1999 Avalon, Hexadev

Développement Client/Serveur en Perl et d'IHM en Java

1997 Nexos

Développement d'IHM en Java

1995-1996 Bintta

Développement d'une démonstration d'un logiciel de cartographie; analyse de code C++ par génie logiciel

1994 Jouve

Traduction en anglais de documentations techniques

1993-1994 Selisa

Développement d'IHM en C

1991-1992 Softeam

Développement d'IHM en C++

1990-1991 Bull

Développement d'un logiciel de cartographie

Formation

1988-1991

Ingénieur diplômé de l'INSA de Lyon, IHM

1986-1988

Classes préparatoires INSA Lyon

1986

Baccalauréat série C, mention assez-bien

Langues

Anglais et Espagnol courants, LSF (400 signes)

1990

TOEIC (Anglais) 740/990

Languages

C, C++, Java, Sml, Racket, Html, CSS

Hobbies

Sport

Bénévolat

 

course à pieds, Marathon

Président bénévole de l'Association Hagi-yaki

Visite aux malades en situation de handicap qui testent des logiciels

Une vidéo de démonstration de Scripting avec Java

https://youtu.be/g6AxbT-jqqo cliquez sur ce lien ou sur le logo à gauche pour visionner la vidéo de démonstration



Un exemple de code que j'ai développé

package com.ajeeig.autologic;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;


public class AutoLogic {
 public String qualityName = "smallness";
 public String antiQualityName = "greatness";
 public String s1 = "megabyte";
 public String s1opt = "mega";
 public String s2 = "epsilon";
 public String word = null;
 public boolean nOrMore = false;
 public boolean quality = false;
 public boolean property = false;
 public boolean shortness = false;
 public boolean smallness = false;
 public int enne = 5;
 public int stepFinish = 7;

 public static void main(String[] args) {
   AutoLogic al = new AutoLogic();
   al.quiz();
   System.out.println("Thank you for playing.");
 }

 boolean result(boolean exact) {
   if (exact) {
     System.out.println("Good!");
   } else {
     System.out.println("Bad!");
   }
   return exact;
 }

 boolean readAnswer() {
   String s;
   try {
     BufferedReader in =
       new BufferedReader(
         new InputStreamReader(
           System.in));
     System.out.println("Please, provide an answer (y/n).");
     s = in.readLine();
     if (s.equals("y") ||
         s.equals("Y") ||
         s.equals("o") ||
         s.equals("O")) {
       System.out.println("You answered Yes.");
       return true;
     }
   } catch (IOException e) {
   }    
   return false;
 }

 boolean checkProperty(boolean value) {
   if (nOrMore && value) {
     return false;
   }
   return true;
 }

 void usage() {
   System.out.println(
     "Use keyboard keys \"y\" or \"n\" for choosing " +
     "then <Enter>.");
 }

 public void quiz() {
   boolean a = false;
   boolean b = false;
   int step = 0;
   boolean swap = true;
   boolean askAgain = false;

   loop:
   while (step <= stepFinish + 1) {
     step++;

     switch (step) {
       case 1:
         askAgain = false;
         System.out.println("Choose a word from " +
                                           "the following:");
         if (swap) {
           System.out.println(s1 + " (y)");
         } else {
           System.out.println(s1opt + " (y)");
         }
         System.out.println(s2 + " (n)");
         break;

       case 2:
         if (word == null) {
           step = 0;
           System.out.println("You have to choose a word and " +
                                             "it cannot be null.");
           continue;
         }
         System.out.println("boolean a <== the word \"" + word +
           "\" expresses the " +
           qualityName + " (y) or the " +
           antiQualityName + " (n)?");
         break;

       case 3:
         System.out.println("boolean b <== the word \"" + 
           word + "\" is " + "short (y) or long (n)?");
         break;

       case 4:
         if (a && b) {
           System.out.println("Is the word \"" + word +
             "\" autologic?");
           break;
         } else {
           step++;
         }

       case 5:
         if ((!a) && (!b)) {
           System.out.println("Is the word \"" + word +
                                             "\" autologic?");
           break;
         } else {
           step++;
         }

       case 6:
         if ((!a) && b) {
           System.out.println("Is the word \"" + word +
                                             "\" heterologic?");
           break;
         } else {
           step++;
         }

       case 7:
         if (a && (!b)) {
           System.out.println("Is the word \"" + word +
                                             "\" heterologic?");
           break;
         } else {
           step++;
         }

       case 8:
       default:
         if (askAgain) {
           step++;
           break loop;
         }
         System.out.println("Do you want to try again?");
         if (!askAgain) {
           askAgain = true;
         }
     }

     usage();
     boolean answer = readAnswer();

     switch (step) {
       case 1:
         if (answer) {
           if (swap) {
             word = s1;
           } else {
             word = s1opt;
           }
         } else {
           word = s2;
         }
         quality = !answer;
         nOrMore = (word.length() >= enne);
         property = !nOrMore;
         break;

       case 2:
         a = answer;
         if (!result((a && quality) || ((!a) && (!quality)))) {
           step = stepFinish;
         }
         break;

       case 3:
         b = answer;
         if (!result((b && property) || ((!b) && (!property)))) {
           step = stepFinish;
         }
         break;

       case 4:
         if (!result(answer == (quality && property))) {
           step = stepFinish;
         }
         break;

       case 5:
         if (!result(answer == ((!quality) && (!property)))) {
           step = stepFinish;
         }
         break;

       case 6:
         if (!result(answer == ((!quality) && property))) {
           step = stepFinish;
         }
         break;

       case 7:
         if (!result(answer == (quality && (!property)))) {
           step = stepFinish;
         }
         break;

       case 8:
       default:
         if (answer) {
           swap = !swap;
           step = 0;
         }
      }
    }
  }
}


Région Parisienne

J'habite en région parisienne sur la commune de Fresnes dans le Val de Marne. Je dispose d'un véhicule et du permis B.

Si vous désirez me contacte, cliquez sur lien ci-dessous.

Nos mentions légales

version 31 juillet 2024

éditeur: Webmiel 6 avenue de la Libération 92 350 Le Plessis-Robinson France tel : +33(0) 649 53 25 29 Société en commandite simple SIREN : 931214126 RCS Nanterre Naf : 58.29C https://www.webmiel.fr christophe.roux@webmiel.fr

hébergeur: 1&1 Ionos Sarl 7 place de la Gare BP 70201 Sarreguemines Cedex

Webmiel

Christophe Roux

Développeur Logiciel

Copyright ©. Tous droits réservés.

Nous avons besoin de votre consentement pour charger les traductions

Nous utilisons un service tiers pour traduire le contenu du site web qui peut collecter des données sur votre activité. Veuillez consulter les détails dans la politique de confidentialité et accepter le service pour voir les traductions.