Stéphane Doyon
Contactez-moi! (s.doyon@videotron.ca)
Formation
| Compétences
| Réalisations
| Emplois
- Maîtrise en informatique à l'Université Laval, complétée en 1999. Bourse de recherche du CRSNG, Tableau d'honneur du doyen de la faculté des études supérieures.
- Baccalauréat en informatique à l'Université de Montréal, complété en 1997. Médaille du Gouverneur (97), bourse de la doyenne de la faculté arts et sciences (96), bourse de recherche du CRSNG pour étudiant du bacc. (été 95).
- Google, depuis 2008.
- Maximum Throughput, 2002 à 2007
- Chef d'équipe pour le groupe "Systèmes" depuis février 2007.
- Optimisation, calibration, intégration de fonctionalités et résolution de "bugs" dans le noyau (kernel) linux utilisé à l'intérieur d'une solution d'entrée/sortie vidéo et "network attached storage", servant dans le domaine de la production de films.
- Développement et intégration de "patches" expérimentales en vue d'améliorer le débit, l'extensibilité ou la stabilité, dans le serveur NFS, des portions de systèmes de fichiers et gestion mémoire, le "block elevator", gestion de volumes, pilotes SCSI, pilotes de cartes réseau et certains aspects de la couche réseau. Expérience avec une plate-forme multi-processeurs.
- Portage de pilotes ou fonctionalités vers différentes versions du noyau.
- Réalisation d'une application d'enregistrement vidéo à haut débit recevant des images par InfiniBand.
- Développement d'un outil de transfert de fichiers haut débit et "multi-thread" pour la migration de données.
- Développement d'outils permettant de reproduire différents motifs d'entrées/sorties, de mesurer le débit et de récolter des statistiques systèmes. Conception d'un système de test de débit capable de gérer plusieurs machines à la fois. Langages utilisés: python, C, bash and perl.
- Expérience de développement de "build scripts" nécessaires à la compilation d'une distribution maison. En gérant les "patches" pour divers utilitaires système et pilotes, j'ai acquis de l'expérience avec les fichiers spec RPM. Expérience d'administration système.
- VIPSwitch (groupe Software et équipe Architecture), 2000 à 2002
- Développement d'un commutateur/routeur visant les réseaux métropolitains, basé sur une architecture matérielle dédiée. Élaboration des spécifications définissant le comportement de chaque composante matérielle par rapport à la retransmission de paquets en fonction de plusieurs protocoles (MPLS, IPv4, IPv6, ARP, ethernet brigding, IEEE 802.1Q). Élaboration des protocoles permettant de configurer les composantes matérielles et de rediriger les cas d'exception des protocoles vers la portion logicielle. Réalisation d'un lien de communication entre le processeur et le matériel, d'une interface réseau virtuelle pour le processeur, ainsi que des mécanismes logiciels supportant le protocole ARP (incluant des modifications aux fonctions réseau du noyau Linux). Expérience de développement sur une plate-forme embarquée lors de mon travail sur un autre produit: un routeur pour "wide area networks".
- Gemplus Canada (groupe carte), 1999 à 2000
- Conception et développement sur carte à puce JavaCard. Réalisation d'une "applet" cryptographique permettant de stocker des clés privées sur la carte et de s'en servir pour apposer des signatures électroniques ou déchiffrer des messages. Inter-opérabilités avec d'autres cartes; respect de certains standards cryptographiques. Optimisation de l'espace requis par l'applet. Travail lié à la compilation d'applets, à la communication avec la carte, et au débuggage d'une nouvelle carte. Travail lié à plusieurs standards du monde des cartes à puces. Notions de cryptographie: cryptographie à clé publique et cryptographie symétrique, signatures électroniques, message digests, message authentication codes.
- VisuAide (groupe R&D), 1997
- Travail sur un magnétophone numérique et organisateur personnel destiné à des usagers aveugles. L'interface usager était entièrement réalisée à travers la seule fonction de sortie disponible sur cet appareil: le son et les messages préenregistrés. Ajout de diverses nouvelles fonctions dont le support pour un format de disquettes étendu (non-standard) et améliorations à l'interface usager. Programmation système dans un environnement embarqué temps réel, avec des contraintes d'espace importantes.
- Loto-Québec (groupe architecture et recherche technologie), été 1996
- Conception et test d'un algorithme démontrant la faisabilité d'une fonction nécessaire à l'implantation d'un nouveau jeu (fortes contraintes sur le temps d'exécution). Simulation pour prévoir le nombre de gagnants pour une variante de ce jeu.
- Projet Safari (systèmes tutoriels intelligents, Université de Montréal), été 1995
- Implantation à l'aide de programmes CGI d'un questionnaire web interactif (avec suivi du cheminement par usager). Travail d'analyse lié aux stratégies tutorielles.
- Centre de Recherche sur le Transport (Université de Montréal), été 1994
- Projet de recherche opérationnelle visant à modéliser des files d'attente de voitures à un feu de circulation.
- Thèse de maîtrise sur la sécurité de Java: Exploration des différents aspects sécuritaires de l'architecture Java, en particulier du bytecode verifier qui effectue une analyse statique du code mobile. Compréhension du fonctionnement de la machine virtuelle Java et du jeu d'instructions bytecode. Publication de trois articles sur le sujet: dans Computer Communications (Elsevier Science), comptes rendus de 2000 ACM Symposium on Applied Computing et comptes rendus de Parallel and Distributed Computing and Systems.
- Développement d'un lecteur de musique numérique de salon basé sur un routeur sans fil et le "firmware" ouvert OpenWRT.
- Contribution de code au projet Rockbox, le "firmware" ouvert pour lecteurs de musique numérique portables: améliorations aux menus et dialogues parlants.
- Développement d'un outil de prise de note vocal et lecteur de livres parlés sur l'assistant numérique personnel iPAQ sous Linux, en python et C. Compilation croisée de noyaux et d'applications, utilisation d'un système de fichiers pour mémoire "flash", débuggage par port série, environnement de travail nfsroot, portage d'applications à l'architecture StrongARM (alignement, conversion d'algorithmes en point flottant vers point fixe). Expériences de programmation dans le domaine du traitement du son numérisé: combinaisons de sons, altération de la vitesse, changement de fréquence d'échantillonnage, détection de silences, algorithmes de compression... Expérience de design d'une interface usager non-visuelle.
- Expérience avec Asterisk, le PBX logiciel libre: réalisation d'un jeu de tic-tac-toe auquel on peut jouer par téléphone, ainsi qu'une fonction permettant de relayer un appel. Brève expérience dans la retransmission du protocole SIP à travers des pares-feu.
- Développement d'un système permettant de numériser et préparer des livres parlés à partir de cassettes audio, écrit en python et C. Il transpose le son des cassettes quatre pistes jouées avec un lecteur ordinaire, et il identifie les différentes parties du livre en détectant les silences et les tonalités d'indexage.
- Co-auteur du logiciel BRLTTY. Ce logiciel pilote des afficheurs braille et offre des fonctions de revue d'écran permettant à des personnes aveugles d'utiliser Linux. En particulier, je suis co-auteur du premier pilote Linux pour un afficheur USB.
- Co-auteur de cicero, un logiciel de synthèse vocale de langue française, écrit en python. En utilisant des règles contextuelles, le moteur convertit le texte en phonèmes et attributs prosodiques, qui sont ensuite passés au syntétiseur de voix MBROLA. Les règles de prononciation de Cicero ont été réutilisées pour réaliser la voix française de eSpeak, un autre logiciel ouvert de synthèse vocale.
- Dans le cadre d'un cours-projet, j'ai travaillé sur l'implantation d'un algorithme d'apprentissage automatique appliqué à la reconnaissance de la parole.
- Pendant quatre sessions j'ai fait partie de l'équipe d'étudiants qui donne des séminaires d'introduction à UNIX et qui offre un support technique aux nouveaux étudiants des départements d'informatique et de mathématiques à l'Université de Montréal.
- Développement d'un système de contrôle d'un scanner via le web, utilisant quixote, XMLRPC, python et apache.
- Développement d'un script qui découvre les nouvelles références à propos d'un sujet donné apparaissant sur le web au fil des jours, en utilisant l'API de Google.
- Étude des besoins, achat d'équipement et implantation d'un réseau local de stations Windows pour une petite entreprise de services financiers.
- Réalisation d'un jeu d'othello qui utilise l'algorithme de recherche minimax et la procédure d'élagage alpha-beta.
Anglais et français parlé et écrit.
Programmation:
- Maîtrise du C, bonne connaissance de python, ainsi que du langage de "scripting" du Bourne shell (et des utilitaires UNIX).
- Connaissance de C++, perl, Java et quelques brides de PHP.
- Notions de programmation concurrente.
- Notions de programmation sécuritaire, connaissance des schémas classiques de vulnérabilités.
- Expérience de Programmation système sous UNIX: réseau, "threads", fichiers, gestion de processus, communications séries...
- Expériences supplémentaires de développement dans le noyau Linux: pilote USB, IDE hot-swapping.
Système d'exploitation Linux:
- Expérience dans la configuration de services: du courriel et du web jusqu'aux VPNs, "uninterruptible power supplies", modems, et sauvegardes de sécurité.
- NETfilter et réseautique avancée: élaboration de règles pour pares-feu, plafonnement de la fréquence des ouvertures de connexions, "port knocking", NAT et "port forwarding", "tunneling".
Divers:
- Connaissance de base du langage SQL et des principes des bases de données relationnelles. Brève expérience avec PostgreSQL.
- Expérience de travail avec LaTeX.
- Connaissance de CVS et subversion. Gestion de "patches" avec quilt. Connaissance de base de git.
Loisirs: ébénisterie, canot-camping, musique.
Formation
| Compétences
| Réalisations
| Emplois
Contactez-moi! (s.doyon@videotron.ca)