Thomas Testaud

Développeur Web Junior

À la recherche d'un premier emploi, alternance ou stage

Alternance de 1 an au rythme de 3 semaines en entreprise et 1 semaines en cours

Stage convetionné de 3 mois en entreprise

26 ans

Disponible en présentiel sur Annecy et les régions avoisinantes

Disponible partout en télétravail

Dominance Back-End : PHP et JavaScript

Maîtrise des languages HTML, CSS, JavaScript, PHP et MySQL

Compétant en Programation Orienté Objet

Connaissances en Symphony et en VueJS

Anglais niveau C1 (bilingue)

Passionné, sérieux et travailleur

Contactez-moi !

Ou appelez-moi au

06 77 98 48 57

Projets

VisualChecker

Créé pour équipe de rédacteur.e.s, DNT VisualChecker est mon premier projet en cours de développement pour une entreprise. C'est une app de traitement de texte qui sert à éditer les balises dnt (do not translate), utiles dans les logiciels de TAO (Traduction Assistée par Ordinateur).

VisualChecker

Image de l'aplication DNT VisualChecker

CarCity

CarCity est un mini GTA-like en JavaScript. On y incarne un petit bonhomme bleu que peut se promener à sa guise, enter et conduire des petites voitures HTML/CSS.

CarCity

Image du jeu CarCity

MemoList

MemoList est une application en PHP qui favorise l'apprentissage des langues étrangères. L'app affiche un mot aléatoirement pour lequel il faut trouver son équivalent. L'utilisateur peut librement ajouter ou supprimer des termes dans la base de données, au fur et à mesure de sa progression.

MemoList

Image de l'application MemoList.

Blog.com

Blog.com est un Tweeter-like en PHP. C'était mon premier projet PHP conséquent. Lors de son développement, je ne maîtrisais pas encore bien le modèle MVC, ni les diverses failles de sécurité. Le code y est certes chaotique... Mais il marche !

Blog.com

Image de l'application MemoList.

thomas.testaud@hotmail.fr

class Car {used=false;acceleration=0.1;speed=0;gear=5;positionX=50;positionY=200; direction = 90; model; on = false; interval; constructor(x, y, direction, model) { this.positionX = x; this.positionY = y; this.direction = direction; this.model = model; this.refresh(); } use() { if (this.used) { this.used = false; this.onOff(); } else if (this.used === false) { this.used = true; this.onOff(); } } onOff() { if (!this.on && this.used) { console.log('The car started'); this.on = true; this.engine(); this.lights(); } else { console.log('The car stoped'); this.gear = 0; this.inercia(); this.lights(); setTimeout(() => { console.log('stop'); this.on = false; clearInterval(this.interval); }, 3000); } } accelerate() { if (this.used) { if (this.on) { this.gear += 1; console.log('Faster'); this.inercia(); console.log(this.speed); } else { console.log('You need to turn on your car before using it!'); } } } decelerate() { if (this.used) { if (this.on) { console.log('Slower'); this.gear -= 1; this.inercia(); console.log(this.speed); } else { console.log('You need to turn on your car before using it!'); } } } turnLeft() { if (this.used) { if (this.on && this.speed !== 0) { console.log('Turn left'); let i = 0; let turn = setInterval(() => { i++; this.direction -= 1; if (i >= 30) { clearInterval(turn); } }, 10) } else { console.log('You need to turn on your car before using it!'); } } } turnRight() { if (this.used) { if (this.on && this.speed !== 0) { console.log('Turn Right'); let i = 0; let turn = setInterval(() => { i++; this.direction += 1; if (i >= 30) { clearInterval(turn); } }, 10) } else { console.log('You need to turn on your car before using it!'); } } } refresh() { this.calculateDirection() document.querySelector('.' + this.model).style = `top: ${this.positionY}px; left: ${this.positionX}px; transform: rotate(${this.direction}deg);`; } lights() { console.log('Switch the lights'); document.querySelectorAll('.headlight-'+this.model)[0].classList.toggle('headlight-on'); setTimeout( () => { document.querySelectorAll('.headlight-'+this.model)[1].classList.toggle('headlight-on'); }, 200); setTimeout( () => { document.querySelectorAll('.rearlight-'+this.model)[1].classList.toggle('rearlight-on'); }, 100); setTimeout( () => { document.querySelectorAll('.rearlight-'+this.model)[0].classList.toggle('rearlight-on'); }, 250); } engine() { this.interval = setInterval(() => { console.log('engine is running'); this.positionX += this.Xcoef; this.positionY -= this.Ycoef; this.refresh(); }, 35); } inercia() { if (this.speed <= this.gear) { let run = setInterval(() => { this.speed += this.acceleration; console.log(this.speed); if (this.speed >= this.gear) { this.speed = this.gear; console.log(this.speed); console.log('speed === gear'); clearInterval(run); } }, 35) } else if (this.speed > this.gear) { let run = setInterval(() => { this.speed -= this.acceleration; console.log(this.speed); if (this.speed <= this.gear) { this.speed = this.gear; clearInterval(run); console.log(this.speed); console.log('speed === gear'); } }, 35) } } calculateDirection() { //calcule la vitesse de déplacement sur chacun des axes en fonction de la rotation de la voiture this.Ycoef = this.speed * (Math.cos(this.direction * Math.PI / 180)); this.Xcoef = this.speed * (Math.sin(this.direction * Math.PI / 180)); } generateHTML() { document.querySelector('.car-slot').innerHTML += ; } // seatBelt() { // human.positionX = this.positionX; // human.positionY = this.positionY; // } } export default Car