.

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
Veille Mag: Article en Français sur Marscii
 

christophe.roux@webmiel.fr

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

Conférence du 24/04/2024 chez IESF sur Chrome OS

Un enjeu stratégique pour Google:
Un environnement complet pour l’usage courant,
Une plateforme de développement à moins de 500€.
Chrome OS est plus qu’un navigateur; Chrome OS est à l’ordinateur de bureau ce que Android est au smartphone.

From Java Legacy to Modern Android: Software Craftsmanship with 30 Years of Experience

Christophe Roux - Senior Engineer, Former Teacher, Author

Android & AI Integration: The Welcoming Robot

A native Android application using Kotlin and TensorFlow for facial recognition.

 

Software Architecture Expertise

Book author "Architecture logicielle avec GCJ: GNU Compiler for Java"

 

Skills

Core: Java / C++

DevOps: Docker / Git / CI/CD

Mobile: Android / Kotlin / Compose

TECHNICAL SKILLS 

Mobile

Android SDK, Kotlin, Material Design, REST API integration. 

Mobile & GUI

Android SDK, Kotlin, Jetpack Compose.

Expertise in GUI Architecture (Swing/AWT) 

allowing for rapid mastery of Android Layouts and Component lifecycles. 

Core

Java (Expert), C++, OOP, Design Patterns, TDD, Clean Architecture.

Web/Backend

Spring Boot, Spark Java, Angular, TypeScript, PHP/WordPress.

Tools

 Version Control Experience, Android Studio, Selenium. 

Data/AI

SQL, JSON, XML, TensorFlow (Basic).

Android & Full Stack Developer
IESF & Webmiel Freelance/Contract
2024 – Present
Developed native Android applications and modernized web tools. 

Android Development

Built a facial recognition application for a welcoming robot using Kotlin and TensorFlow. 

Architecture

Implemented Clean Architecture principles to ensure code reusability and testability. 

API Integration

Connected Android apps to RESTful backends (Spring Boot/Spark Java) handling JSON data.

Modernization

Automated the conversion of WordPress user data into agenda displays using PHP. 

Automation

Designed a Dockerized development environment to support legacy Java 7 applications, ensuring consistency across development and production stages. 

Keywords

Kotlin, Android Studio, REST API, Git, Code Quality.

Software Test & QA Specialist
Hagi-yaki
2016 – Present 
Volunteered IT expertise for a non-profit serving the disabled community. 

Testing

Identified failures in official websites (France Travail, AI) regarding security concerns. 

Quality Assurance

Performed rigorous testing to ensure robustness and usability.

EARLY CAREER (Summary) 

C/C++ & GUI Developer:

Worked with Bull, Softeam, Jouve (1990-2000). I specialize in GUI development and Technical Translation. 

EDUCATION 

Master of Engineering (Ingénieur)

INSA Lyon (1991) Specialization in GUI and Software Engineering.

Scientific High School Diploma

Pass with Distinction (1986)

LANGUAGES 

French

Native

English

Fluent (TOEIC 740 - Technical translator background)

Spanish

Fluent

LSF (French Sign Language)

Intermediate (400 signs)

VOLUNTEERING & INTERESTS 

President

Hagi-yaki Association (Disability advocacy & IT accessibility).

Marathon Runner

Demonstrated discipline and endurance (2015-Present).

Delegate

MACIF Insurance proximity delegate.

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é

// I choosed 2 characters indentation because it fits easily in a book
// but I know that standard java indentation is 4 characters wide

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 3 décembre 2025

éditeur: Webmiel 6 avenue de la Libération 92 350 Le Plessis-Robinson France tel : +33(0) 749 12 53 39 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 2024-2025 ©. 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.