Tiens un visiteur
sur la page de gauche!



Pour atterrir sur cette page, il y a plusieurs possibilités:
- soit vous êtes mal latéralisé
- soit vous ne savez pas lire le code
- soit votre écran est à l'envers
- soit vous êtes curieux

Nous aimons penser que c'est la quatrième possibilité qui vous a poussé à cliquer, mais les trois autres nous vont aussi!



Comme on est sympa,
on vous donne accès directement
au reste du site en cliquant
CEREBRIS

Des cerveaux
qui ne se prennent pas
la tête.

histoire

10 années dans le monde du consulting ont conduit Laurent & Franck au même constat : les entreprises de services numériques vendent de la matière grise, mais n'en produisent pas.

Leur ambition, remettre le cerveau au cœur du consulting.

Pour y parvenir, ils décident de créer une société où les curieux pourront satisfaire leur soif de connaissances et développer leurs savoirs. Parce que le savoir va au delà des mots, ils décident que tout élément de leur discours doit être prouvable.

"Pas de baratin, les cerveaux ne sont pas dupes."
Laurent Francineau



Diplômé d'une école d'ingénieur, génie de la programmation; seul informaticien capable de programmer un hydravion traversant littéralement des montagnes, Laurent débute sa carrière en tant qu'ingénieur informatique.
Frappé de plein fouet par le bug de l'an 2000, il disjoncte et change de métier. Véritable Alice aux pays des merveilles 2.0, il traverse le miroir et se rend compte qu'en réalité, sa vraie valeur ajoutée, réside dans la découverte et l'accompagnement de talents.
À 45 ans à l'âge ou certains se mettent à la tisane, au macramé et aux charentaises il rejoint Franck pour structurer et développer Cerebris.
Franck Chatin de Chastaing



Franck aime la nature, les grands espaces et l'aventure. Il a d'autres passe-temps moins avouables, mais pour en savoir plus, il faudra le questionner (lors d'un apéro par exemple).
Manager de formation (si si ça existe), Franck a choisi le C++ en LV2 et le Java en LV3. Cela explique sans doute son niveau d'anglais.
Une légende raconte qu'il est resté prisonnier durant 7 ans d'une grosse société de service. Il parait même que pour ne pas oublier ce qu'il a fuit, il s'est fait tatouer le business model de la dite entreprise dans le dos.

preuves

  • success heroes

    Cerebris dispose de success heroes, un outil innovant qui permet aux équipes de collaborer en réalisant des objectifs seuls ou à plusieurs. Toutes les contributions sont prises en comptes et valorisées. Que vous participiez à un projet de R&D où à une ré- ponse à appel d'offre, vous obtiendrez une récompense (points, titres, bonus...). Fini le labeur invisible!

  • brain games

    Véritables olympiades ludiques, les brain games sont des soirées organisées autour de jeux réputés pour les compétences qu'ils sollicitent. Fin stratège, bibliothèque vivante ou expert en calcul mental, chaque talent devra défendre sa place. Un classement annuel est établi et récompense les meilleurs!

  • hackathon

    Tous les 6 mois un projet soumis par les collaborateurs de Cerebris est choisi par vote et réalisé au cours d'un hackathon géant. L'occasion rêvée de voir ce que valent vos dirigeants dans un contexte projet. Attention: ne laissez jamais Franck s'approcher trop près d'un bout de code. On vous aura prévenu!

  • miScellanewS letter

    Chaque mois, une newsletter anonyme est envoyée à l'attention des collaborateurs Cerebris. Elle contient des informations sur des domaines aussi variés que l'astronomie, l'actualité du jazz expérimental ou la cuisine péruvienne (rubriques non contractuelles!). La seule constante: éveiller la curiosité en moins de 7 minutes de lecture.

  • empan

    Nous invitons chaque mois nos collaborateurs à noter leur degré de satisfaction sur plusieurs critères. Rien de nouveau, si ce n'est que nous n'oublions pas de traiter les sujets potentiellement épineux! Pour les plus curieux, un excellent article paru dans la revue L'éléphant n°13 vous expliquera le pourquoi du comment du nom de cette rubrique.

  • réseau de partage

    Nous avons détourné la fonction principale d'un outil pour en faire un formidable système de transmission de l'information à l'échelle de l'entreprise. Et comme nous adorons apprendre, nous consacrons du temps et de l'énergie à l'animer.

  • curioférenceS

    Cerebris a créé un cycle de conférences destiné aux curieux. Au menu, professeur en neurosciences, créateur de jeux vidéos où chercheur au CNRS. Les cerveaux risquent d'adorer!

Références

Alcatel Submarine Networks Crédit Agricole Ile-de-France Philips Capsule Carestream Dental Dassault aviation DEF EMD Millipore Alcatel Submarine Networks Crédit Agricole Ile-de-France Philips Capsule Carestream Dental Dassault aviation DEF EMD Millipore
EOS imaging Mappy Microport Parrot quadient Sagemcom EOS imaging Mappy Microport Parrot quadient Sagemcom
Stago SystemX Thalès Tui Viaccess-orca Xfab Stago SystemX Thalès Tui Viaccess-orca Xfab

Réalisations

Nos référents techniques s’investissent pour faire vivre les technos et accompagner les autres cerebristes.
Vous voulez en faire partie ? Dites-le nous !
Découvrez ci-dessous ce qu'ils savent faire

Libevent
C++
#include <time.h>

include <pthread.h>
include <event2/event.h>
define TIMEOUT_IN_SECONDS 50
void timer_loop_thread(void arg)
{
struct context p_context = (struct context )arg;
struct timeval tv;
int fd[2];

memset(&tv, 0, sizeof(struct timeval));
tv.tv_sec = TIMEOUT_IN_SECONDS;

// pipe creation for read and write file descriptor
pipe2(fd,O_NONBLOCK);
p_context->fd_read = fd[0];
p_context->fd_write = fd[1];
p_context->p_evbase = event_base_new();

// read_msg is the callback triggered on new event income
p_context->p_event = event_new(p_context->p_evbase, p_context->fd_read,
EV_READ|EV_PERSIST,read_msg,p_context);
event_add(p_context->p_event, 0);

// timer_callback is called when the timer is triggered
p_context->p_evtimer = evtimer_new(p_context->p_evbase, timer_callback, p_context);
evtimer_add(p_context->p_evtimer, &tv);

// event loop
event_base_dispatch(p_context->p_evbase);

pthread_exit(NULL);
}
Pour quoi faire ?
La libevent permet de gérer de manière asynchrone des events de plusieurs types.
Dans le cas présent, un timer est mis à jour. Il peut être remis à jour depuis un autre thread en utilisant le file descriptor write.
C'est l'utilisation du pipe qui permet de rester thread-safe.
std::sort
C++
// Custom comparator
struct FileDateComparator
{
bool operator() (const std::string &left, const std::string &right)
{
struct stat leftStats;
struct stat rightStats;
stat(left.c_str(), &leftStats);
stat(right.c_str(), &rightStats);
return leftStats.st_mtime > rightStats.st_mtime;
}
};

// Real sort on chunks files
FileDateComparator dateComparator;
std::sort(chunkFilesList.begin(), chunkFilesList.end(), dateComparator);
Pour quoi faire ?
Dans le cadre d'un produit de réception d'un flux vidéo live par satellite, nous avons transformé un script python de nettoyage de contenu en un service C++.
L'utilisation de la méthode sort de la bibliothèque standard algorithm et d'un comparateur personnalisé nous a permis d'optimiser les performances de la solution.
forEach
Java
public List<User> getMusicians() {
List<User> musicians = new ArrayList<>();
// Get the users list from each registration item
this.registrations.forEach((registration -> musicians.add(registration.getUser())));
return musicians;
}
Pour quoi faire ?
Dans le cadre d'une plateforme web musicale, nous avons utilisé les nouveautés de Java 8 (itérateurs forEach et lambda expressions) pour condenser le code tout en restant lisible.
Auto Test
TestComplete
VarA=array("Class","Text")
Varb=array("WebButton","Click Here")
Set obj=testObj.Find(VarA,VarB,10)
If obj.Exists then
obj.click
else
msgbox "No object found"
End if
Pour quoi faire ?
Dans le cadre d'un projet d'automatisation des tests d'un logiciel applicatif dans le domaine des équipements médicaux, nous avons mis en place différentes fonctions permettant de simuler différentes actions utilisateurs (saisie clavier, click, lecture de données, etc...)
L'automatisation a permis ainsi un gain de temps de 40% sur certaines phases et de pouvoir lancer des tests nocturnes.
Mutex Struct
C embarqué
static inline void status_struct(t_struct *struct, char *msg)
struct timeval now;
int i;
int j;
char str[64];
long long number;

pthread_mutex_lock(&struct->arguments->lock_status);
gettimeofday(&now, NULL);
number = ((now.tv_sec - struct->arguments->start_struct.tv_sec) * 1000
+ (now.tv_usec - struct->arguments->start_struct.tv_usec) * 0.001);
i = print_nbr(number, str);
j = 0;
str[i++] = '\t';
while (struct->num_struct[j])
str[i++] = struct->num_struct[j++];
str[i++] = '\t';
while (*msg)
str[i++] = *(msg++);
if (check_end(struct) == 0)
write(1, str, i);
pthread_mutex_unlock(&struct->arguments->lock_status);
Pour quoi faire ?
En résumé, cette fonction calcule la différence entre l'heure actuelle et une heure de référence, puis construit une chaîne de caractères str en concaténant les résultats de calcul avec d'autres éléments de la structure t_struct. Ensuite, cette chaîne est écrite sur la sortie standard sous certaines conditions, tout en garantissant un accès protégé à la variable partagée struct à l'aide de verrous de mutex.
Vagrant Ruby
DevOps
# export K8SCLUSTER_IMAGE="centos/7"
# export K8SCLUSTER_IMAGE="centos/8" # KO on k8s-master need review
# export K8SCLUSTER_IMAGE="debian/stretch64" # Debian 9.12.0
# export K8SCLUSTER_IMAGE="debian/buster64" # Debian 10.4.0 (VirtualBox 6.1 Only)
# export K8SCLUSTER_IMAGE="bento/ubuntu-16.04" # Ubuntu 16.04
# export K8SCLUSTER_IMAGE="ubuntu/xenial64" # Ubuntu 16.04 (VirtualBox 5.2 Only)
# export K8SCLUSTER_IMAGE="ubuntu/bionic64" # Ubuntu 18.04
# export K8SCLUSTER_IMAGE="ubuntu/focal64" # Ubuntu 20.04

# Use K8SCLUSTER_IMAGE environment variable to override default image name.
K8SCLUSTER_IMAGE = "#{ENV['K8SCLUSTER_IMAGE']}"
K8SCLUSTER_IMAGE = "centos/7" if K8SCLUSTER_IMAGE.empty?

N = 2

# Link content of ./inventory into .vagrant/provisioners/ansible/inventory to
# reuse group definitions and group_vars.
vagrant_inventory = File.join(File.dirname(__FILE__),
".vagrant", "provisioners", "ansible", "inventory")
FileUtils.mkdir_p(vagrant_inventory) if ! File.exist?(vagrant_inventory)
Dir.foreach("inventory") do |item|
ln_lnk = File.join(vagrant_inventory, item)
ln_trg = File.join("..", "..", "..", "..", "inventory", item)
FileUtils.ln_s(ln_trg, ln_lnk) if ! File.exist?(ln_lnk)
end

# Define box default interface
k8scluster_default_ifname = {
"ubuntu/bionic64" => "enp0s8",
"ubuntu/focal64" => "enp0s8",
}
k8scluster_default_ifname.default = "eth1"

# Define machine variables
k8scluster_hosts = Array.new
k8scluster_hosts_vars = {}
(0..N).each do |i|
host_ip = "172.16.50.#{10 + i}"
k8scluster_hosts[i] = {
"host_ip" => host_ip,
"host_name" => "k8s-node-%02d" % i
}
end
# Apply master specifics k8scluster_hosts[0]["host_name"] = "k8s-master"

Vagrant.configure("2") do |config|
config.ssh.insert_key = false

config.vm.provider "virtualbox" do |v|
v.memory = 3072
v.cpus = 2
end
Pour quoi faire ?
Le script crée un réseau de machines virtuelles Vagrant/VirtualBox pour tester via Molecule le déploiement du cluster Kubernetes (K8S) et de ses applications.
Il est exécuté à chaque merge-reqest afin de valider les modifications des scripts Ansible poussées sur GitLab et éviter ainsi tous les risques de régression.
Ansible YAML
DevOps
# BBOSS Copyright (C) 2018-2021, Laurent Marchelli
# SPDX-License-Identifier: GPL-3.0-or-later

# Installation steps : (install)
# -> 1. prepare
# 2. download
# 3. configure
# 4. activate

- name: Prepare - Install required dependencies
ansible.builtin.package:
state: present
name: "{{ item }}"
loop: >-
{%- if ansible_os_family == "RedHat" %}
{%- set package_list = ["epel-release", "python-virtualenv"] %}
{%- else %}
{%- set package_list = ["virtualenv"] %}
{%- endif %}
{{- package_list | union(["python3-pip"
if (ansible_python.version.major == 3) else "python-pip"]) }}

- name: Prepare - Create project directory
ansible.builtin.file:
path: "{{ stack_project.path }}"
state: directory

- name: Prepare - Create virtualenv and Update pip
ansible.builtin.pip:
state: present
# pip 21.0 dropped support for Python 2.7 and Python 3.5 in January 2021
name: "{{ 'pip' if (ansible_python.version.major == 3 and
ansible_python.version.minor >= 6) else 'pip==20.2.*' }}"
extra_args: -U
virtualenv: "{{ stack_project.path }}venv/"
virtualenv_site_packages: yes

- name: Prepare - Install python dependencies
ansible.builtin.pip:
state: present
# pyrsistent is required by docker-compose, the version 0.17.2 does not
# support python 2.7 and pip does not always choose the right one.
name:
- cryptography
- "{{ 'pyrsistent' if ansible_python.version.major == 3 else
'pyrsistent==0.16.1' }}"
- docker
- docker-compose
virtualenv: "{{ stack_project.path }}venv/"

- name: Prepare - Create docker-compose.yml
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ stack_project.path }}docker-compose.yml"
notify: Restart systemd

- name: Prepare - Create systemd service configuration
ansible.builtin.template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
loop:
- src: docker-compose.service.j2
dest: "/etc/systemd/system/{{ stack_project.name }}.service"
notify: Reload systemd
Pour quoi faire ?
Dans le cadre de déploiement d'un ensemble d'applications pour des usines logicielles s'exécutant dans dans des machines virtuelles; le script permet l'installation d'une ou plusieurs applications web dans une stack Docker managée par systemd. La gestion du protocole https et des différents certificats https est généralement déléguée au reverse proxy Nginx intégré dans la stack.
Flash SPI - SOC
Hardware
Sur la raspberry pi, après activation des interfaces SPI.
1. Vérification de la connexion entre la flash SPI et la raspberry pi et identification de la flash
$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=128k
Found Macronix flash chip "XXXXXXXXXX" (YYYYkB, SPI) on linux_spi.
Found Macronix flash chip "XXXXXXXXXXX/XXXXXXXXX" (YYYYkB, SPI) on linux_spi.
Found Macronix flash chip "XXXXXXXXXXX/XXXXXXXXXXXXX/XXXXXXXXXXXXXX" (XXXX kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "XXXXXXXXXX", "XXXXXXXXXXX/XXXXXXXXX", "XXXXXXXXXXX/XXXXXXXXXXXXX/XXXXXXXXXXXXXX"
Please specify which chip definition to use with the -c option.

2. Extraction de la flash, en précisant la "chip definition" correspondant à notre modèle
$ flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=128k -c "XXXXXXXXXX" -r extracted_flash.raw
$ ls -l extracted_flash.raw
-rw------- 1 xxxx XXXX 4.0M Jun 01 01:01 extracted_flash.raw

3. Extraction de l'image
$ binwalk -e extracted_flash.raw
$ ls _extracted_flash.raw.extracted
0.squashfs squashfs-root
$ ls _extracted_flash.raw.extracted/squashfs-root
bin data dev etc extracted hook.so launch lib media mnt opt proc sbin share sys tmp usr var var.old www

4. Enjoy, on peut maintenant émuler, reverser ou bien fuzzer.
Afin d'émuler, fuzzer il sera nécessaire d'installer un émulateur et de patcher si nécessaire le binaire, certaines fonctionnalités peuvent être propre au SOC.
Cela pourra se faire en utilisant des fonctionnalités tel que LD_PRELOAD et en créant une librairie patcher, ou bien en patchant directement le binaire par exemple.
Pour quoi faire ?
Obtenir l'image d'un IOT dans le but de l'émuler, fuzzer et ou rechercher des vulnérabilités.
image:spi_simle.svg
Schémas de branchement d'une flash SPI pour une extraction via raspberry pi, avec reset du SOC.
La mise en état de reset du SOC est nécessaire pour prendre le contrôle de la flash (dans le cas où le SOC est alimenté avec la flash).
Flutter
Développement mobile cross-plateformes
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Mon application Flutter',
home: Scaffold(
appBar: AppBar(
title: Text('Exemple Flutter'),
),
body: Center(
child: Text(
'Bonjour, monde !',
style: TextStyle(fontSize: 24),
),
),
),
);
}
}
Pour quoi faire ?
Nous avons utilisé cette fonction Flutter pour créer une application simple qui affiche un message de salutation à l'écran. Cet exemple est souvent utilisé comme point de départ pour créer des applications Flutter plus complexes.

L'utilisation de Flutter permet de développer des applications multiplateformes avec une seule base de code. Flutter utilise le langage Dart et fournit des widgets réactifs qui facilitent la création d'interfaces utilisateur fluides et attrayantes. Dans cet exemple, nous avons utilisé des widgets de base tels que MaterialApp, AppBar, Text, etc.

En conclusion, nous avons utilisé cette fonction Flutter pour présenter une structure de base d'une application Flutter, en utilisant des widgets et en démontrant comment démarrer une application Flutter. Cela nous permet de créer rapidement des interfaces utilisateur attrayantes et réactives pour les applications mobiles et web.
Réseau de neurones
Intelligence Artificielle - imagerie
bool computePrediction(const cv::Mat inputImage_in, cv::Mat outputImage_out)
{
if(!dlCompute.predict(inputImage_in, outputImage_out)) // Compute heat map from model
return false;

outputImage.convertTo(outputImage_out, CV_8U); // Convert heat map to 8 bits image (0 to 255)
cv::threshold(outputImage_out, outputImage_out, 50, 255, cv::THRESH_BINARY); // Threshold heat map to create an image mask

// Post process of segmentation with mathematical morphology
cv::morphologyEx(outputImage_out, outputImage, cv::MORPH_OPEN, getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3.0, 3.0))); // Opening -> Remove noise
cv::morphologyEx(outputImage_out, outputImage, cv::MORPH_CLOSE, getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(3.0, 3.0))); // Closing -> close structures

return true;
}
Pour quoi faire ?
Après entrainement d'un modèle dédié à la segmentation d'une structure d'intérêt dans une image 2D (généralement entraîné en python), on charge le modèle en C++ pour pouvoir l'utiliser. Le modèle produit une heat map (une carte de probabilité) à partir de l'image d'entrée, que l'on utilise pour produire une segmentation par seuillage. Un post-traitement permet une amélioration du résultat en débruitant la segmentation (ouverture morphologique) et en connectant des segmentations proches (fermeture morphologique) afin de créer une segmentation plus homogène et cohérente.
FastGradientMethod
Machine Learning & IA
import numpy as np

from art.attacks.evasion import FastGradientMethod
from art.estimators.classification import SklearnClassifier

classifier = SklearnClassifier(model=model)
classifier.fit(x_train, y_train)

# Evaluate the classifier on benign test examples

predictions = classifier.predict(x_test)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on benign test examples: {}%".format(accuracy * 100))

# Generate adversarial test examples
attack = FastGradientMethod(estimator=classifier, eps=0.2)
x_test_adv = attack.generate(x=x_test)

# Evaluate the classifier on adversarial test examples

predictions = classifier.predict(x_test_adv)
accuracy = np.sum(np.argmax(predictions, axis=1) == np.argmax(y_test, axis=1)) / len(y_test)
print("Accuracy on adversarial test examples: {}%".format(accuracy * 100))
Pour quoi faire ?
Les attaques adversariales sont des manipulations ciblées des données d'entrée des modèles d'intelligence artificielle visant à induire des erreurs ou à perturber leurs performances, souvent à l'aide de perturbations imperceptibles à l'œil humain.

Ici nous utilisons la méthode FastGradientMethod pour générer des attaques.

FastGradientMethod est une méthode d'attaque permettant de générer des exemples adversaires en calculant les gradients de la fonction de coût par rapport aux données d'entrée et en ajustant les valeurs des données pour induire des erreurs dans les modèles de machine learning.

Nous allons ainsi comparer l'accuracy, qui est une métrique pour évaluer la performance des modèles de classification, du modèle ayant subi des attaques avec celui qui n'en a pas subi et vérifier la robustesse du modèle d'intelligence artificielle.

Savoir-faire

Aéro défense

Healthcare

Transportation

Energies renouvelables

Tertiaire

Telecom

Nos locaux

Cerebris est installée dans le 14e arrondissement de Paris et vous reçoit dans un espace harmonieux et accueillant, avec une grande terrasse pour nos événements estivaux.

Les sportifs ou les pêcheurs à la carpe apprécieront quant à eux d’être à 300m du Parc de Montsouris !

Miscellanews Letter

Quelle est la capacité de stockage de notre cerveau ?

Le neuroscientifique américain Terry Sejnowski et son équipe ont mesuré la capacité de stockage du cerveau. Les chercheurs ont ainsi analysé des tissus cérébraux de rats, afin de reproduire en 3D une partie du cerveau.

Ils ont ainsi pu remarquer que pour 10% des connexions synaptiques, un neurone n’envoie pas un seul message, mais bien deux messages à un autre neurone. En effet, les synapses sont les connexions entre les neurones, qui permettent de gérer nos pensées et nos souvenirs. Chaque neurone peut être connecté à des milliers d’autres neurones et posséder des milliers de synapses, en sachant que le cerveau humain possède jusqu’à 100 milliards de neurones.

En étudiant ces résultats de plus près, à l’aide d’algorithmes de calculs et d’une microscopie de pointe, les scientifiques ont pu découvrir qu’il existait 26 catégories de synapses différentes, tandis que jusqu’alors elles étaient classées en seulement 3 catégories.

Cette découverte a ainsi permis de mesurer la quantité d’informations pouvant être stockées dans les connexions synaptiques, et le résultat est… énorme ! En effet, les 26 tailles de synapses correspondraient à 4,7 bits d’information, ce qui est 10 fois supérieur à ce que les scientifiques estimaient jusqu’à présent. Ainsi, la capacité de stockage de notre cerveau serait « équivalent à 1 pétaoctet (10 puissance 15 octets), soit une capacité de grandeur proche de celle du World Wide Web » explique Terry Sejnowski.

Votre cerveau s’avère donc être un véritable disque dur !

E-David, la machine à peindre

Et si une intelligence artificielle pouvait rivaliser avec l’être humain dans le domaine de la création artistique ?

C’est ce qu’une équipe de chercheurs en infographie et multimédia de l’Université de Constance, en Allemagne, a tenté de réaliser à travers la création d’un “robot artiste”. En effet, le robot peintre baptisé e-David (et non, ce n’est pas une référence au chef-d’œuvre de Michel-Ange, mais belle et bien l’acronyme de Drawing Apparatus for Vivid Image Display), est capable de réaliser des toiles en s’inspirant d’un modèle. Le projet fut mis en place en 2009 dans le but de comprendre le fonctionnement du processus créatif humain. Ainsi, les chercheurs espéraient pouvoir traduire celui-ci par un algorithme qui pourrait par la suite être repris par des intelligences artificielles.

Au risque de décevoir les fans de science-fiction, il ne s’agit pas ici d’un robot humanoïde mais plutôt d’un bras robotisé capable d’utiliser jusqu’à 5 pinceaux et 24 couleurs. Pourtant, peintre ne fut pas le premier métier d’e-David, puisqu’il était à l’origine utilisé pour souder les carrosseries dans les chaines d’assemblage automobile.

E-David n’est pas le premier robot de ce type, mais il se démarque grâce à sa capacité d’optimisation visuelle, ce qui lui confère des compétences proches de celles de l’homme. En effet, le robot est équipé d’une caméra, de capteurs et d’un ordinateur. Un logiciel lui permet d’effectuer les mouvements de base, mais le point fort de l’algorithme est surtout qu’il permet à e-David d’analyser son œuvre en temps réel et de la modifier en fonction du résultat désiré.

L’optimisation visuelle du robot le rend capable de faire des choix autonomes pour améliorer sa création. Il peut ainsi déterminer s’il doit changer de couleur, de pinceau, ou simplement à quel endroit la prochaine touche de peinture doit-elle être appliquée. Bien que le sens artistique humain reste toujours indétrôné, les résultats sont tout de même impressionnants.

Léonard de Vinci n’a qu’à bien se tenir !

William Shakespeare est un tricheur ?

Vous connaissez forcément le célèbre dramaturge britannique William Shakespeare, mais saviez-vous que certains passages de ses œuvres pourraient être écrites de la main d’autres auteurs ?

En effet, en 1850, un analyste littéraire dénommé James Spedding a remarqué des ressemblances flagrantes entre les écrits de John Fletcher et certaines scènes de la pièce Henry VIII de Shakespeare. A l’époque, on se dit simplement que les deux auteurs ont collaboré sur l’écriture de cette œuvre. D’autres chercheurs pensent que ce serait un autre dramaturge, Philip Massinger, qui aurait participé à la rédaction de l’œuvre de Shakespeare. Mais jusqu’alors le mystère régnait à ce sujet...

Récemment, un chercheur de l’Académie des sciences de Prague nommé Petr Plechac s’est appuyé sur une intelligence artificielle pour analyser la pièce de théâtre shakespearienne. L’étude de James Spedding au XIXe siècle se basait essentiellement sur ce qu’on appelle l’idiosyncrasie linguistique de chaque auteur, autrement dit leur style et comment il apparaît dans Henry VIII.

Avec l’intelligence artificielle, Petr Plechac a pu analyser chaque ligne de la pièce afin de déterminer les caractéristiques de chaque auteur (s’il y en a bien plusieurs). Le scientifique a mis en place un algorithme capable de reconnaître le style des deux auteurs, en faisant « étudier » à son IA plusieurs textes de John Fletcher et de William Shakespeare écrits à la même époque qu’Henry VIII, afin qu’elle puisse identifier les similitudes entre les styles. C’est ce qu’on appelle le « machine learning », ou apprentissage automatique.

Après cela, l’algorithme était capable de reconnaître les deux écrivains dans des textes qui ne lui avaient jamais été soumis. Après analyse de la pièce Henry VIII, la conclusion est surprenante… John Fletcher aurait écrit presque la moitié de la pièce ! William nous avait caché bien des choses.

Pour autant, d’après l’intelligence artificielle, la participation de Philip Massinger est quant à elle assez improbable. Toutefois, le malheureux Fletcher s’est totalement fait éclipser, tandis que Shakespeare s’est attribué tout le mérité de son œuvre. Pauvre John…

Le tout premier appel vidéo fête ses 50 ans !

Les appels vidéo et visioconférences font désormais partie du quotidien, et nous les utilisons régulièrement, que ce soit dans la vie personnelle ou professionnelle (et encore plus en tant de confinement !).

Pourtant, la visioconférence vient d’avoir 50 ans. Et oui ! C’est le 30 juin 1970 que le tout premier appel vidéo fut passé, grâce à un système de l’entreprise AT&T appelé le Picturephone II.

Après l’invention du téléphone en 1877, les esprits se projetaient déjà dans le futur en imaginant des innovations capables de transporter le son et l’image. On imaginait son utilisation comme destinée à des fins commerciales, mais aussi éducatives et personnelles.

L’entreprise AT&T a par la suite développé en 1964 le premier Picturephone, qui n’était alors qu’un prototype destiné à faire des démonstrations techniques. Il existait alors trois bornes Picturephone à Chicago, New-York et Washington et l’appel de trois minutes coutait 16 dollars (un service luxueux donc…). Le Picturephone II de 1970 fut quant à lui proposé au grand public, dans le but de servir dans les bureaux des entreprises.

Le premier appel fut opéré par Pete Flaherty (qui était à l’époque maire de Pittsburgh) et John Harper (PDG d’Alcoa). Le service permettait de couper le son ou l’image selon la volonté des participants, et même de partager un document grâce à un système de miroir amovible : les prémices du partage d’écran de nos Zoom et Teams !

Pour autant, le produit fut un échec, car il était beaucoup trop cher pour les moyens de l’époque. Et c’est le cas de le dire, puisqu’il fallait compter 160 dollars pour 30 minutes d’appel (pas donné le skypéro !).

Un robot devenu actrice hollywoodienne ?

Erica est un robot humanoïde ressemblant à ces poupées japonaises destinées à des mœurs peu catholiques… à l’exception près qu’Erica est animée par une intelligence artificielle, et qu’elle se destine à une carrière sous les projecteurs. Et oui, cette jeune fille faite de circuits et de plastique s’apprête à jouer le rôle principal dans un film américain.

Cet événement marque la première fois qu’une intelligence artificielle sera la vedette d’un long métrage. Habituellement, dans les films de science-fiction, les robots à l’apparence humaine sont en réalité joués par des acteurs, ce qui entraîne parfois des représentations un peu caricaturales.

Parmi les rôles de robots, on retrouve notamment l’acteur Haley Joel Osment jouant David dans Intelligence Artificielle (2001) de Steven Spielberg, accompagné du robot d’amour Gigolo Joe, incarné par Jude Law. On pense également à Arnold Schwarzenegger dans le rôle du robot T-800 dans le célèbre film de James Cameron, Terminator (1985).

Dans le cas d’Erica, pas besoin de simuler une absence d’émotion ou une voix monotone : elle jouera son propre rôle, elle ne devrait donc pas manquer de coller au personnage. Le film en question, intitulé « b » et produit par l’américain Sam Khoze, raconte l’histoire d’un scientifique ayant découvert les possibles effets dévastateurs d’un code destiné à améliorer l’ADN humain. Il aide alors le robot Erica, l’une de ses créations, à s’échapper.

Malgré le budget de 70 millions de dollars, la tâche s’annonce plus difficile que prévu, car l’IA ne possède pas de compétences acquises au cours de sa vie, ou d’expériences vécues pour améliorer son jeu d’acteur. En effet, Erica fut imaginée et créée par deux roboticiens japonais : Hiroshi Ishiguro et Kohei Ogawa, dans le but de faire d’elle une présentatrice télé au Japon. A cette période, les expressions corporelles et les mouvements du robot étaient plus que limités. De nombreuses sessions d’entrainements ont été organisées afin de lui apprendre à reproduire des éléments du langage corporel, et ainsi faire passer des émotions.

Pour autant, la production cherche tout de même une véritable actrice pour jouer le rôle d’Erica lors de certaines scènes que le robot ne pourra pas assurer. Comme quoi, les robots aussi ont besoin de doublure !

L'incroyable vie de Mary Anning, chasseuse de fossiles

Son nom ne doit surement rien vous dire, et pourtant Mary Anning est à l’origine de nombreuses découvertes dans le domaine de la paléontologie et de la géologie. Sa vie, pleine de rebondissement, est une succession d’évènements marquants et surprenants. La paléontologue autodidacte est née en Angleterre en 1799, et dès les premiers mois de sa vie, un évènement extraordinaire fait d’elle la seule survivante d’un coup de foudre ayant frappé son village et tué quatre personnes, dont l’infirmière qui la tenait dans ses bras.

Durant l’enfance, Mary cherchait déjà des fossiles avec son père dans le but de les revendre pour arrondir les fins de mois (a la fin du XVIIIe siècle, la collection de fossile est considérée comme un passe-temps à la mode, et pas encore comme une science à proprement parler).

A l’âge de douze ans, Mary découvre le tout premier squelette complet d’ichtyosaure (une sorte de poisson-reptile ressemblant au dauphin, et ayant vécu du Trias au Crétacé supérieur). Cette découverte lui vaut une certaine réputation parmi la communauté de scientifiques, mais également auprès des collectionneurs. Sa plus grande découverte fut le premier squelette de plésiosaure (une sorte de reptile parfois comparé à la tortue également, ayant vécu du jurassique jusqu’au Crétacé), en 1821. Par la suite elle découvre également le premier fossile de ptérodactyle trouvé en Allemagne.

Ses découvertes représentent des contributions majeures à la paléontologie. Rarement créditée pour ses découvertes, certains scientifiques reconnaissent tout de même ses apports à la discipline et la mentionnent dans leurs travaux. Les fossiles découverts par Mary Anning ont permis une meilleure compréhension de la vie dans les périodes précédentes et ont étayés les théories de Georges Cuvier sur l’extinction des espèces.

Ses contributions forment aussi les bases de la géochronologie, discipline qui permet la reconstruction de l’histoire de la terre grâce à l’utilisation des fossiles. Longtemps oubliée, elle est redécouverte depuis quelques années et honorée comme l’une des figures les plus influentes de l’histoire britanniques.

Un retour en force pour la Indiana Jones du XIXe siècle !

Manger de la terre pour booster son système immunitaire ?

Oui oui, vous avez bien lu. Manger de la terre serait donc efficace pour avoir un système immunitaire plus fort et plus résistant ? Aussi surprenant que cela puisse paraître, c’est vrai !

Mais attention, il ne s’agit pas de n’importe quel type de terre. Pas la peine de vous faire des bols de terreau du jardin au petit-dejeuner… De plus, cette pratique ancestrale nommée géophagie à été largement combattue par les scientifiques occidentaux du XIXe siècle.

Ici, nous parlons d’un type spécifique de terre : le kaolin. Le kaolin est une argile blanche qui permet notamment de faire de la porcelaine, mais il est aussi employé depuis la nuit des temps pour ses vertus thérapeutiques, si bien que les humains ne sont pas les seuls à l’avoir remarqué.

Que ce soit chez les oiseaux, les reptiles ou les mammifères, l’argile, consommée à des doses correctes, permet de tapisser les parois digestives afin de soulager les brûlures d’estomac, les troubles du transit également, et même la diarrhée. Si la consommation d’argile telle qu’elle est peu pratiquée de nos jours dans les sociétés occidentales, c’est encore le cas dans certains pays d’Afrique ou d’Amérique du Sud.

Mais comme pour tout, le dosage est super important. Une trop grande consommation peut potentiellement créer des bouchons dans le système digestif, voire provoquer l’anémie carrément car l’argile empêcherait l’absorption de fer dans le sang.

A consommer avec modération donc.

Sans devoir aller dans des épiceries exotiques, on trouve par ailleurs une forme d’argile dans nos pharmacies : la diosmectite, plus connue sous le nom… de Smecta.

L'invention du zéro

Le chiffre zéro tire ses origines de la civilisation babylonienne qui l'utilisa pour la première fois au cours du deuxième millénaire avant J-C. Il sera par la suite repris par les Mayas, puis les Hindous, avant d'être enfin intégré à un système de numération par les arabes, et de se diffuser dans l'Europe entière dès le Xe siècle.

Le zéro est en réalité le retardataire de la famille, puisqu'il est apparu beaucoup plus tardivement que les autres chiffres. Il fut utilisé de manière indépendante par des civilisations très éloignées les unes des autres, que ce soit en terme de chronologie ou de géographie. Les babyloniens en 2000 avant J-C, les Mayas au IIIe siècle et les Hindous au Ve siècle avaient pour point commun d'utiliser un système de numération de position. Ils avaient donc pour nécessité d'inventer un signe représentant l'absence.

Malgré son apparition tardive, le vilain petit canard de la famille des chiffres va révolutionner l'histoire des mathématiques grâce à sa diffusion à travers des ouvrages arabes de calcul, notamment en Europe à partir du XIIe siècle. Outre le fait de signifier l'absence, le zéro à bien d'autres fonctions ! Il sert également de point de repère, en fixant le seuil de fusion de la glace, ou en représentant le point de départ en géométrie. Le zéro ne sera considéré comme un nombre à part entière qu'à partir du XXe siècle. Il a également une dimension étonnante, de par ces particularités : c'est le seul nombre égal à son opposé, qui est positif et négatif, et qui permet, lorsqu'il est utilisé en division, d'atteindre l'infini. Ni plus ni moins !

Pourquoi certains sons sont-ils si désagréables à entendre ?

Vous avez surement déjà remarqué que certains sons procurent une sensation désagréable, une irritation. Ces bruits font pourtant parti de notre quotidien, et nous les entendons très souvent, qu’il s’agisse de cris d’enfants, d’alarmes ou encore de klaxons. Mais pourquoi ces sons sont-ils associés à un sentiment désagréable ? C’est ce que des chercheurs de l’Université de Genève en Suisse ont tenté de déterminer en réalisant une étude sur l’effet de ces sons sur notre cerveau. Les scientifiques ont donc fait écouter des sons répétitifs d’une fréquence entre 10 et 250 hertz à 16 personnes, en réduisant de plus en plus le temps de silence entre les sons. Il a ensuite été demandé aux volontaires de classer ces sons sur une échelle de 1 à 5 (1 signifiant tolérable, et 5 signifiant insupportable). Les sons les moins supportables furent désignés comme ceux ayant une fréquence comprise entre 40 et 80 hertz.

Par la suite, à l’aide d’un électro-encéphalogramme intracrânien, les scientifiques ont pu enregistrer et étudier l’activité cérébrale durant l’écoute de ces sons irritants. Il est ainsi apparu que les sons d’une fréquence supérieure à 130 hertz sont perçus comme continus, et ne déclenchent que l’activation du circuit classique de l’audition. Or, les sons compris entre 40 et 80 hertz sollicitent beaucoup plus de zones cérébrales, car ils sont perçus comme rugueux (distincts les uns des autres). Les zones activées par ces bruits sont notamment l’amygdale, l’hippocampe et l’insula, qui sont liées à l’aversion et à la douleur, ce qui explique donc pourquoi ces sons nous irritent.

Les alarmes et les klaxons exploitent ces fréquences et cette sensation désagréable afin de capter notre attention et de déclencher un sentiment d’urgence et une volonté de détecter et d’identifier la source et la localisation de ces sons, ce qui nous permet en réalité d’éviter des accidents. Vous comprenez donc maintenant pourquoi la sonnerie de votre réveil vous agace autant !

Cette étude pourrait également permettre de détecter des maladies comme l’autisme, la schizophrénie ou encore Alzheimer, car le cerveau des personnes atteintes de ces pathologies ne réagit pas de la même manière face à ces sons.

Le tout premier réalisateur/acteur de cinéma de l'histoire

William Kennedy Laurie Dickson, né le 3 août 1860 et mort le 28 septembre 1935, est un des inventeurs du cinéma, mais il est également producteur, directeur de la photographie, réalisateur, scénariste et acteur (rien que ça !).

D'origine britannique, fils d'une musicienne et d'un artiste, Dickson se passionne très tôt pour les sciences et la mécanique, et rêve de travailler pour Thomas Edison. Son rêve se réalise et il travaille alors aux côtés d'Edison, notamment comme photographe mais également pour développer le phonographe. Il travaille également sur la conception d'une caméra, d'un système de prise de vue et d'enregistrement synchrone du son.

En reprenant les travaux d'Edison, Dickson et ses assistants inventent alors le modèle de film 19 mm. C'est avec ce format que l’équipe d'Edison enregistre le premier film de l'histoire intitulé Dickson Greeting. Sur cet extrait parfois qualifié d'essai, Dickson salue un public imaginaire, tenant son canotier dans la main.

Mais Dickson, toujours insatisfait, ne s'arrête pas là. Il conçoit le fameux film 35 mm standard, plus adapté aux cadrages larges. Le format de film 35 mm aux perforations Edison sera par la suite adopté par les cinéastes et industriels du monde entier dès 1906 en tant que standard international des films de cinéma.

Edison et Dickson, l’infatigable duo, finalisent ensuite une caméra baptisée kinétographe, la première caméra de cinéma. Et comme si tout cela n'était pas suffisant, Dickson participe aussi à la création du kinétoscope, un coffret en bois dans lequel un film se déroule en continu, permettant ainsi aux spectateurs d'observer à travers un œilleton les images bouger. Il co-invente également la "boucle de Latham", un dispositif présent dans les appareils de projection cinématographique, qui permet d'isoler la zone à déroulement intermittent de la pellicule de la zone à déroulement continu, afin d'éviter sa rupture sous l'effort de traction. Dickson est donc un homme plein de ressources, trop souvent oublié au profit de son confrère !

actu

un cerveau averti
en (cer)veau deux
en voir plus sur LinkedIn

Contact

En attendant que nos cerveaux nous permettent de communiquer par télépathie, nous vous proposons de nous contacter :

téléphone — 01 42 84 34 08
email —



Nous rencontrer :

6 rue Maurice Loewy
75014 Paris
voir l'itinéraire
— © CEREBRIS tous droits réservés



Cerebris est une marque déposée de la société ANSACONSULT
ANSACONSULT (Société par actions simplifiées (SAS))au capital social de 30 000€
Adresse: 6 rue Maurice Loewy, 75014 Paris
Immatriculée au RCS de Nanterre sous le numéro 80338001300018
N° de TVA Intracommunautaire: FR63 803380013

Standard: 01.42.84.34.08
email:

Site pensé et rédigé par

Site dessiné et developpé par

Site hébergé par OVH.net
Siège social : 2 rue Kellermann - 59100 Roubaix - France.
Histoire



Preuves



Références



Réalisations



Savoir-faire



Nos locaux



Miscellanews Letter



Actu



Contact