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."
—
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 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.



















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);
}
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.
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);
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.
List<User> musicians = new ArrayList<>();
// Get the users list from each registration item
this.registrations.forEach((registration -> musicians.add(registration.getUser())));
return musicians;
}
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
L'automatisation a permis ainsi un gain de temps de 40% sur certaines phases et de pouvoir lancer des tests nocturnes.
en (cer)veau deux
téléphone — 01 42 84 34 08
email — hello@cerebris.fr
Nous rencontrer :
6 rue Maurice Loewy
75014 Paris