Sommaire
Bienvenue sur lapingenieur.github.io !
Ce site, écrit lors de la campagne Parcoursup de 2023,
introduit les différents pans de l'informatique que j'ai expérimentés.
Le code-source des programmes décrits plus bas est disponible soit sur ce site,
soit sur mon GitHub.
Bonne lecture !
Présentation
Bonjour !
Je suis Elio POLETTI, étudiant en première année à l'INSA Strasbourg.
Études
Après une première année très généraliste, je souhaite poursuivre mes études avec la spécialité Mécatronique.
Je fais partie de la section allemande Deutsch'INSA Confirmé, qui me prépare aux industries des deux côtés du Rhin.
Aptitudes et qualités
Ouverture d'esprit : je me plaît à apprendre de nouveaux savoirs, à découvrir de nouvelles disciplines, de nouveaux points de vus et de nouveaux avis. Je m'efforce de considérer la vision des autres à égale valeur avec la mienne.
Langues : francophone et hungarophone natifs, j'ai un niveau B2+ en Anglais et B1+ en Allemand. J'ai suivi la section Euro Anglais au lycée, et m'intéresse désormais au Deutsch'INSA (Allemand). Je souhaite aussi m'investir dans l'apprentissage de l'Espagnol, à la fin du parcours DI.
Informatique : comme le présente ce site internet, j'ai des connaissances dans de nombreuses disciplines l'informatiques.
Autodidactie : l'ensemble de mes connaissances en informatique et linguistique ont été acquises en autodidacte, par recherches numériques ou bibliographiques.
Sérieux : mes résultats, la quantité et qualité des enseignements optionnels que j'ai pu suivre, ainsi que mon établissement actuel, témoignent du sérieux que je tiens en mon travail, et de mon assiduité.
Perfectionnisme : j'ai appris à user de mon perfectionnisme pour m'investir à grande ampleur dans les projets qui me tiennent à cœur, sans pour autant confondre l'univers des possibles et celui de l'imagination. Ce site, dont le résultat m'est particulièrement satisfaisant, en fait office.
Pourquoi l'INSA Strasbourg ?
J'ai choisi d'intégrer l'INSA de Strasbourg directement après mon baccalauréat pour plusieurs raisons :
Tout d’abord, j’apprécie apprendre de nouvelles notions théoriques, mais j’aime encore plus les appliquer et expérimenter par moi-même des disciplines techniques lors de projets, que l’on ne retrouve pas dans les classes préparatoires. On retrouve d'ailleurs cet attrait dans les notes du DS de dessin technique : 19,6/20 pour une moyenne de promotion à 7,6/20.
D’autre part, cet établissement propose la spécialité mécatronique, qui allie de multiples notions d’ingénierie, et que je souhaite étudier dès l’année prochaine.
L’école m’apporte en outre la possibilité de suivre un enseignement bilingue franco-allemand grâce à la section Deutsch’INSA, et ainsi d’avoir une formation me préparant aux industries des deux côtés du Rhin.
Lycée et Baccalauréat
J'ai présenté le Bacalauréat au lycée général Mauriac d'Andrézieux-Bouthéon :
- note finale de 17,76/20
- spécialités mathématiques, physique-chimie et informatique (NSI)
- options DNL anglais et mathématiques expertes
- mentions Très Bien et Section Européenne (Anglais)
J'ai également suivi des enseignements de latin et de grec ancien jusqu'en classe de première.
Implication
Dès le collège, j'ai participé activement au Conseil de la Vie Collégienne.
Au lycée, j'ai été secrétaire de la Maison des Lycéens durant les trois. Cela m'a permis de participer à l'organisation de la Fête des Talents et du Journal du Lycée.
Dans un cadre plus personnel, j'ai apporté des modifications d'ordre de détails à quelques projets informatiques.
Points d'intérêt
J'ai découvert de nombreux pans de l'informatique, comme la programmation, l'interface en ligne de commandes, le fonctionnement élémentaire des systèmes physiques et logiciels, dont le site internet que vous regardez actuellement est une parfaite illustration. Toutes ces connaissances ont été apprises en autodidacte, en particulier pendant le premier confinement.
La linguistique est aussi une discipline que je porte en mon cœur : ouvre mon polyglottisme, j'apprécie étudier les langues, leur fonctionnement, les différentes solutions qu'elles présentent pour exprimer une même notion et leurs évolutions divergentes ou convergentes, et je m'investis même à leur création : l'idéolinguistique.
Je porte aussi de l'admiration envers les sciences théoriques, bien que je n'aie ni les capacités ni les connaissances requises pour les étudier et les manipuler.
J'ai en outre suivi des cours de musique en classe de percussions au conservatoire pendant 12 ans, et pratique l'ultimate depuis 7 ans.
Développement Web
Le Développement Web, ou WebDev, est la branche de l'informatique qui touche à la création et la gestion de sites internet.
Je manie les technologies modernes nécessaires à la création d'une application web :
Partie logique
La syntaxe Typescript assure le typage et avorte de nombreuses erreurs d'incohérence.
Backend
Des librairies diverses permettent aux applications de parfaire leurs tâches, comme la base de donnée PocketBase.
Documentation
Les documentations, comme MDN, mais aussi les forums, tels que Stack Overflow, sont une source essentielle d'informations.
Toutes ces technologies peuvent être utilisées également dans d'autres optiques, comme la gestion de l'interface graphique via des interfaces comme Tauri en langage Rust.
Élaboration d'un ordinateur 8-bits
Quoi de mieux pour comprendre le fonctionnement d'un ordinateur que d'en créer un soi-même, à partir de vraiment rien ? C'est ainsi que, en m'aidant des différents travaux de Ben Eeater, j'ai théorisé, élaboré et simulé un ordinateur 8-bits à partir de composants électroniques de base. Afin de simplifier l'affichage, ces derniers sont regroupés en modules (voir ci-dessous).
J'ai d'abord émulé le système dans le logiciel Logisim-Evolution en le programmant à la main, avant de créer un langage assembleur et son compilateur spécifiques, dont les explications sont accessibles dans les fichiers exposés plus bas.
Je me suis inspiré du langage assembleur du processeur 6502 pour faciliter l'écriture de programmes pour mon ordinateur émulé, et j'ai écrit un compilateur fonctionnel en python pour traduire les scripts en instructions. Voici les programmes équivalents qui calculent et affichent les nombres (inférieurs à 255) de la suite de Fibonacci en python en assembleur X800 :
#!/bin/env python
while True:
x=0
y=1
while True:
print(x)
z=x+y
x=y
y=z
if x>255:
break
;!LP x800
;!sec beg fibonacci
orig:
lia 1
sta .valuey ; y
lia 0
sta .valuex ; x
loop:
ldb .valuey ; z=x+y
add
brc .orig
sta .valuez
lda .valuey ; x=y
sta .valuex
lda .valuez ; y=z
sta .valuey
lda .valuex
jmp .loop
valuex: ; espace variable x
.word 00
valuey: ; espace variable y
.word 00
valuez: ; espace variable y
;!sec end fibonacci
Une capture vidéo de la compilation et de l'exécution de ce code se trouve à cette adresse.
Programmation Bas-Niveau
Un autre pan de l'informatique que j'apprécie est la programmation davantage bas-niveau : j'ai des connaissances en langage C, et dans les plus modernes Rust, Go et V. Quelques uns de mes projets :
- WSL2 est isolé dans un sous-réseau virtuel, on ne peut pas y accéder depuis le réseau local. sshtpt, écrit en langage V, met en place une session SSH renversée qui connecte un port local (WSL) au port équivalent exposé sur le réseau local (Windows). Il crée des processus directement avec les interfaces système unix de glibc, ne s'exécute donc pas sous windows.
- Yirena est le projet informatique qui m'a été donné de traiter en langage java lors de mon premier semestre à l'INSA. L'objectif est de générer le code tikz qui permet d'afficher le logigramme adaptatif décrivant l'algorithme spécifié en entrée, qui lui-même suit une syntaxe proche du langage Pascal.
- Rsmpeg une frêle interface graphique au logiciel FFmpeg en langage Rust, avec la librairie egui.
- J'ai programmé différents projets sur des cartes Arduino, notamment la gestion automatique de la porte d'un poulailler.
Je suis également à l'iniciative de la page française types de données du langage C du site Wikipédia.
Workflow Linux, Neovim, scripts shell et environnement de travail
GNU/Linux
J'utilise diverses distributions GNU/Linux depuis l'été 2018 : l'ancienne Raspbian, Ubuntu, Manjaro (avant le virage de l'administration), et aujourd'hui Archlinux ("à la main"). J'ai acquis des notions d'administration système en explorant les multiples possibilités et en réparant les accidents d'Archlinux, cette distribution étant par définition très instable.
Neovim
Neovim est un éditeur de texte modal à interface semie-graphique (TUI) très puissant et ultra modulable, personnalisable et extensible. Je m'en sers en tant qu'éditeur de texte et comme environnement de développement grâce au support du LSP. La configuration se fait en lua, et par l'ajout voire l'écriture de nombreux plugins neovim ou vim 8.
Scripts Shell
En utilisant Linux, j'ai rapidement appris à écrire des scripts shell : il s'agit du premier langage de programmation que j'ai appris. Je m'en servs en particulier pour automatiser des actions répétitives, personnaliser et optimiser mon environnement, et même pour écrire des logiciels simples en ligne de commandes (dans les faits, bash n'est pas du tout dédié à ce dernier usage). Quelques uns sont exposés sur mon GitHub.
Workflow
Mon environnement de travail est assez exotique : j'utilise beaucoup de logiciels open-source, donc facilement modifiables et configurables, afin de me forger l'environnement le plus plaisant et le plus optimisé possible. En mode graphique, j'utilise des gestionnaires de fenêtre par pavage (tiling) comme qtile. Je me sers beaucoup de logiciels textuels et gère mes systèmes dans un terminal ; la console ne me fait pas peur, je l'apprécie.
Scripts python
Python est un langage de programmation interprété très populaire. Je m'en suis servis pour différents projets :
- Le compilateur de l'assembleur x800 est écrit en python.
- Projets en spécialité NSI (classe de première) :
- Scripts utiles sur la calculatrice Numworks :
- Cb_lin est un script utile en maths expertes pour vérifier ou non les solutions possibles x de a(x)|b(x).
- Pgcd applique l'algorithme d'Euclide sur deux nombres a et b afin d'en trouver le PGCD.
- Cov est un portage du programme cov.py précédent sur calculatrice : convertisseur de bases numérales.
- Mask est calculateur d'addresse ip de réseau pour une addresse ip locale et un masque donnés.
- Scripts secondaires et jeux sur la calculatrice Numworks ;
derrière l'aspect grossier que peut avoir tout jeu vidéo, on retrouve forcément de la programmation.
Beaucoup d'éléments nécessitent une importante réflexion quant à leur mise en place,
en particulier au vu de l'espace mémoire RAM alloué autant que de stockage tous deux très limités
sur la Numworks. Résoudre ces problèmes est un exercice de programmation très instructif.
- Draw apporte une interface de création graphique très précise et relativement complète pour la calculatrice.
- Floppy est un jeu du genre "flappy-bird", le but est de passer des obstacles verticaux défilant sur l'écrant en faisant sauter un petit personnage. Ce script atteint les limites de la calculatrice concernant la mémoire allouable.
- Write dessine du texte à l'écran à partir d'une chaîne de caractères. Différents paramètres peuvent être ajustés, les functionnalités sont compressées à outrance pour tenir dans les limites de mémoire.
- Crates est un jeu de réactivité dont le but est d'appuyer au bon moment sur la bonne touche suivant la "boîte" (crate) qui s'affiche à l'écran.
- J'utilise également quelques logiciels dont la configuration s'effectue en python, par exemple le gestionnaire de fenêtres Qtile ou le navigateur web Qutebrowser.
Python n'est de loin pas mon langage préféré : selon moi, sa syntaxe à indentation facilite les erreurs, les variables ne sont pas typées, l'absence de normes de nomination des objets apporte une hétérogénéité oppressante lors de l'utilisation simultanée de plusieurs modules, les rapports d'erreur sont peu clairs et l'interprétation très lente...
On ne peut cependant pas nier sa renommée et sa simplicité : il reste l'un des langages les plus utilisés dans le monde.
Chiptune : MilkyTracker
J'ai découvert la programmation de musique dite "chiptune" ou plus couramment "8-bits" pendant le confinement de 2020, via le logiciel MilkyTracker. Le musicien programme sa création dans une sorte de tableau/matrice avec des valeurs hexadécimales, avec une colonne par piste et les lignes représentant l'avancement dans le temps. Chaque piste peut jouer de différents instruments, et chaque instrument peut être composé d'un ou plusieurs samples. Des effets rudimentaires tels que le vibrato ou glissando peuvent être indiqués.
Voici une reprise du thème de Riju que j'ai écrite avec ce logiciel.
Écrire une musique de cette manière permettait aux programmeurs des débuts de l'informatique d'intégrer une bande son à leurs jeux sans trop utiliser d'espace mémoire. Des compositions comme Commando de Rob Hubbards rendent à perfection cet aspect : peu plaisant à l'oreille, ces morceaux sont d'une complexité remarquable. Le chiptune n'a aujourd'hui plus aucun intérêt de ce point de vue.