Fix typos

This commit is contained in:
Crom (Thibaut CHARLES) 2019-03-11 14:48:15 +01:00
parent 02be3567ac
commit f559de09d1
Signed by: tcharles
GPG Key ID: 45A3D5F880B9E6D0
3 changed files with 28 additions and 23 deletions

View File

@ -1,7 +1,7 @@
<article> <article>
# Ifremer # Ifremer
Between 2016 and 2017 I worked at Ifremer Brest, on marine observatory stations. During this period I improved the developer environment, installing a lot of automation tools for buildin, checking and deploying/flashing the software on a testing environment. Between 2016 and 2017 I worked in Ifremer Brest, on marine observatory stations. During this period I improved the developer environment, installing a lot of automation tools for building, checking and deploying/flashing the software on a testing environment.
I also worked on understanding / reverse engineering an acoustic MODEM protocol. I also worked on understanding / reverse engineering an acoustic MODEM protocol.

View File

@ -8,7 +8,7 @@
My name is _Thibaut CHARLES_ My name is _Thibaut CHARLES_
I am a French engineer who __love__ computer sciences, especially when it is comes to __Linux__ and __low level__ or __performance constrained__ programming. I am a French engineer who __loves__ computer sciences, especially when it is related to __Linux__ and __low level__ or __performance constrained__ programming.
## Contact me ## Contact me
@ -29,7 +29,7 @@ I am a French engineer who __love__ computer sciences, especially when it is com
## Resume ## Resume
Send me a mail at thibaut.charles.fr@gmail.com and I'll send you my resume as soon as possible ! Send me an email at thibaut.charles.fr@gmail.com and I'll send you my resume as soon as possible!
## Legacy accounts (abandoned) ## Legacy accounts (abandoned)

View File

@ -15,6 +15,7 @@ You can find [my contributions here](https://github.com/search?q=is%3Apr+author%
## Projects around Matrix ## Projects around Matrix
- For the fun: [Doge bot - much wow](https://github.com/CromFr/matrix-doge-bot). Speak doge and enter. - For the fun: [Doge bot - much wow](https://github.com/CromFr/matrix-doge-bot). Speak doge and enter.
- Command-line client for logging messages: [matrix-logger](https://gitlab.com/CromFr/matrix-logger). - Command-line client for logging messages: [matrix-logger](https://gitlab.com/CromFr/matrix-logger).
- Joined room synchronization across two accounts: [matrix-autoinvite](https://gitlab.com/CromFr/matrix-autoinvite).
</article> </article>
@ -53,14 +54,14 @@ I came up with this because my gaming PC has a home-made watercooling system and
So I had 3 choices for controlling the fan speeds: So I had 3 choices for controlling the fan speeds:
1. Always keep fans at like 70% so the water never gets too hot. 1. Always keep fans at like 70% so the water never gets too hot.
2. Control fan speed using the SSD temperature sensor (the SSD does not heat much, and is placed next to a watercooling radiator, so we can deduce very approximately the water temperature with it) 2. Control fan speed using the SSD temperature sensor (the SSD does not heat up very much, and is placed next to a watercooling radiator, so we can deduce very approximately the water temperature with it)
3. Find or build an external fan controller which uses the water temperature sensor 3. Find or build an external fan controller, which uses the water temperature sensor
Solution 1 is _barely_ acceptable. Solution 1 is _barely_ acceptable.
Solution 2 would require to build a custom program to get the temperatures and set fan speeds using the motherboard closed-source / non existent / even Linux can't / _they're lame_ APIs. Solution 2 would require to build a custom program to get the temperatures and set fan speeds using the motherboard closed-source / nonexistent / even Linux can't / _they're lame_ APIs.
So I designed a small board around an __Arduino nano__, that can take __multiple temperature inputs__ from external sensors (Water and Air), and __adjust fan speed__ accordingly using a simple __temperature/speed curve__. I also put a small __screen__ (_SSD1306_) to display all those information, a button to force high / low / auto fan speeds, and an __alarm__ if the temperature reaches critical values (or sensor is disconnected / short circuited). So I designed a small board around an __Arduino nano__, that can take __multiple temperature inputs__ from external sensors (Water and Air), and __adjust fan speed__ accordingly using a simple __temperature/speed curve__. I also put a small __OLED screen__ (_SSD1306_) to display all this information, a button to force high / low / auto fan speeds, and an __alarm__ if the temperature reaches critical values (or the sensor is disconnected / short circuited).
Since then I can barely hear my PC, even during intensive tasks :) Since then I can barely hear my PC, even during intensive tasks :)
@ -80,7 +81,7 @@ Since then I can barely hear my PC, even during intensive tasks :)
<article> <article>
# Hackathon with _Reporters Without Borders_ <img title="Personal project" src="/img/perso.svg"/> # Hackathon with _Reporters Without Borders_ <img title="Personal project" src="/img/perso.svg"/>
Ask me personally if you want to learn more about it (there are some parts I can't disclose here due to privacy reasons). Ask me personally if you want to learn more about it (there are some parts I can't disclose here for privacy reasons).
</article> </article>
@ -108,15 +109,15 @@ Ask me personally if you want to learn more about it (there are some parts I can
</div> </div>
In 2017 I have a 2-hours course at ISEN Brest with the Electronics Club, to introduce students to __Quality Assurance__ and __Test Driven Development__, with a __language agnostic__ approach. In 2017 I have a 2-hour course in ISEN Brest with the Electronics Club, to introduce students to __Quality Assurance__ and __Test Driven Development__, with a __language agnostic__ approach.
### Course topics: ### Course topics:
- __Quality Assurance__ definition - __Quality Assurance__ definition
- __Unit testing__: Good practices, test driven development, unit tests as documentation - __Unit testing__: Good practices, test driven development, unit tests as documentation
- __Coverage analysis__: examples - __Coverage analysis__: examples
- __Contract programming__: in/out checks, invariants - __Contract programming__: in/out checks, invariants
- __Continuous Integration__: auto testing, online coverage analysis, contribution process on some open source projects (ie: PR merge checks) - __Continuous Integration__: auto testing, online coverage analysis, contribution process on some open source projects (i.e. PR merge checks)
- Misc: stubs / mockups, exception vs assertion, compiler and language tooling, static / dynamic code analysis, fuzzing, code verbosity / factorization, code formatting, profile-guided optimizations - Misc: stubs / mock-ups, exception versus assertion, compiler and language tooling, static / dynamic code analysis, fuzzing, code verbosity / factorization, code formatting, profile-guided optimizations
### More ### More
- All slides (English): https://cromfr.github.io/course-hardenyourcode - All slides (English): https://cromfr.github.io/course-hardenyourcode
@ -129,16 +130,17 @@ In 2017 I have a 2-hours course at ISEN Brest with the Electronics Club, to intr
## Library for parsing game engine files (nwn-lib-d) ## Library for parsing game engine files (nwn-lib-d)
- Parsing and serialization of GFF files, a general purpose, tree-like binary storage format. - Parsing and serialization of GFF files, a general purpose, treelike binary storage format.
+ __Profiling and optimizations__. There are currently two version of the parser: one read/write that may be slow as it instantiates all data structures in memory, and the second one which is read only, very fast and memory efficient as it only crawls over the file without allocating memory. Some work is in progress to make the second read/write. + __Profiling and optimizations__. There are currently two versions of the parser: one read/write that may be slow as it instantiates all data structures in memory, and the second one which is read only, very fast and memory efficient as it only crawls over the file without allocating memory. Some work is in progress to make the second read/write.
+ Keep the structure of the stored data as is (other existing parsers reorder elements). Checksum of the binary file should not be modified if the file is not changed between parsing and serialization. + Keep the structure of the stored data as is (other existing parsers reorder elements). The checksum of the binary file should not be modified if the file is not changed between parsing and serialization.
- __Reverse engineered__ [TRN.ASWM data](https://gist.github.com/CromFr/104bac52dc9191099d9d9e3dbd2c4975), a structure containing compressed 3D mesh with pathing information (pathfinding pre-calculated data, foot step sounds etc.) - __Reverse engineered__ [TRN.ASWM data](https://gist.github.com/CromFr/104bac52dc9191099d9d9e3dbd2c4975), a structure containing compressed 3D mesh with pathing information (pathfinding pre-calculated data, foot step sounds etc.)
- Other NWN2 simple data structures like TLK (translation tables), ERF (tar-like archive), and FoxproDB (used by NWN2 as a persistent key/value database) - Other NWN2 simple data structures like TLK (translation tables), ERF (tar-like archive), and FoxproDB (used by NWN2 as a persistent key/value database)
#### Skills #### Skills
- D language - D language
- __Reverse engineering__ binary files - __Reverse engineering__ binary files
- __3D model generation for visualizing__ map information (shape, face junctions, face properties, pathfinding data, ...) - __3D model generation for visualizing__ map information (shapes, face junctions, face properties, pathfinding data, ...)
- Pathfinding and 3D mesh-cutting and merge __algorithms__
- __Profiling__, __optimizations__ - __Profiling__, __optimizations__
- Heavy __unit testing__, __coverage analysis__ - Heavy __unit testing__, __coverage analysis__
@ -168,7 +170,7 @@ It makes heavy use of my _nwn-lib-d_ library to extract information distributed
The backend is written in D, using the Vibe.d web framework and nwn-lib-d parsing library (the main reason being that D is a good prototyping language, and is fun to write :) ). The backend is written in D, using the Vibe.d web framework and nwn-lib-d parsing library (the main reason being that D is a good prototyping language, and is fun to write :) ).
The frontend is (mostly) written in Typescript using Angular5, MaterializeCSS (JS, JQuery, SCSS) The frontend is written in Typescript using Angular2+, MaterializeCSS (JS, JQuery, SCSS)
- Provides a way to access player's - Provides a way to access player's
+ Characters + Characters
@ -216,10 +218,13 @@ Since the OS was aging (understand _utterly out of date_), and most software do
+ __VirtIO__ for fast network and disk access + __VirtIO__ for fast network and disk access
+ __SPICE remote control__ only accessible through a SSH tunnel + __SPICE remote control__ only accessible through a SSH tunnel
- __Automated setup__ using Ansible - __Automated setup__ using Ansible
- Automated game server updates
+ Manually updating the game server files is very cumbersome and error-prone
+ Now all tasks are automated and updating the server is a __"one click" process__
### Ansible ### Ansible
Since Kimsufi services does not provide disk redundancy nor KVM (Keyboard/Video/Mouse) access to the machine (they are the cheapest dedicated servers available), the setup is fully automated using Ansible scripts. Since Kimsufi services do not provide disk redundancy nor KVM (Keyboard/Video/Mouse) access to the machine (they are the cheapest dedicated servers available), the setup is fully automated using Ansible scripts.
In case of a disk failure, the server can be reinstalled in a __few hours__ (mostly spent on Windows guest setup & updating), and backed up data can be restored quickly. In case of a disk failure, the server can be reinstalled in a __few hours__ (mostly spent on Windows guest setup & updating), and backed up data can be restored quickly.
@ -271,9 +276,9 @@ I built a __conveyor belt__ actioned by a small reduced __DC motor__, controlled
The [D language](http://dlang.org) is a recent language much similar to C++ in term of features, but with a much cleaner syntax. The [D language](http://dlang.org) is a recent language much similar to C++ in term of features, but with a much cleaner syntax.
I love D because it makes possible to write nice and robust applications within a very short time. I like the D language because it makes possible to write nice and robust applications within a very short time.
Here is some small projects I have done using D: Here are some small projects I have done using D:
## Served ## Served
@ -297,7 +302,7 @@ Here is some small projects I have done using D:
Served is a __lightweight file-sharing web service__ (a bit like _Google Drive_) written using the web server library [vibe.d](http://vibed.org). Served is a __lightweight file-sharing web service__ (a bit like _Google Drive_) written using the web server library [vibe.d](http://vibed.org).
It is designed to be __quick and easy__ to deploy. Its default configuration serve folder given by command line and uses UNIX users/passwords (via __PAM Authentification__) to upload/view files respecting file permissions. It is designed to be __quick and easy__ to deploy. Its default configuration serves the folder given by command line and uses UNIX users/passwords (via __PAM Authentification__) to upload/view files respecting file permissions.
By default, the file named `index.md` gets rendered atop of the file list. By default, the file named `index.md` gets rendered atop of the file list.
@ -331,7 +336,7 @@ The goal was to provide a common __web interface__ to __browse and search log__
These entries are written in different files/databases, use different syntaxes and timestamps relative to different time zones. These entries are written in different files/databases, use different syntaxes and timestamps relative to different time zones.
The log viewer has been written to be as easy as possible to extend and maintain: The log viewer has been written to be as easy as possible to extend and maintain:
If you want to add a log page, you just have to write a class. The menus, the interface, the search parameters, and the instantiation is __auto-generated at compile time__. If you want to add a log page, you just have to write a class. The menus, interface, search parameters, the instantiation are __auto-generated at compile time__.
### More ### More
- Source code: https://github.com/CromFr/NWNLogViewer - Source code: https://github.com/CromFr/NWNLogViewer
@ -358,7 +363,7 @@ If you want to add a log page, you just have to write a class. The menus, the in
Neverwinter Nights 2 lacks of third applications. This one __renders NWN2 GUI__ without launching the whole game, and updates itself on file change. Neverwinter Nights 2 lacks of third applications. This one __renders NWN2 GUI__ without launching the whole game, and updates itself on file change.
It allows the developer to write the XML code for the GUI with his favorite editor, while seeing the result in real time in another window, with extra debugging informations that NWN2 doesn't provide. It allows developers to write the XML GUI code with their favourite editor, while seeing the result in real time in another window, with extra debugging information that NWN2 doesn't provide.
Right now it has some quirks on text alignment and font handling, but the result is still close to the in-game rendering. Right now it has some quirks on text alignment and font handling, but the result is still close to the in-game rendering.
@ -494,7 +499,7 @@ The goal of ISEN Brest is to participate and win this race in 1 or 2 years.
### Our work ### Our work
We (_Thomas Abot_ and I) were charged to work mainly on the software part: receiving processed sensor values to make some decisions, and send command values to the servo-motors. Actually we worked on the full stack from hardware choice, interfacing, data processing to the boat intelligence and networking. We (_Thomas Abot_ and I) were charged to work mainly on the software part: receiving processed sensor values to make some decisions, and send command values to the servo-motors. However we ended up working on the full stack from hardware choice, interfacing, data processing to the boat intelligence and networking.
The boats embeds a _Beaglebone Black_ card (similar to the Raspberry Pi, but more hardware-oriented). We also designed the electronic add-on for the Beaglebone to connect the different sensors and actuators. The boats embeds a _Beaglebone Black_ card (similar to the Raspberry Pi, but more hardware-oriented). We also designed the electronic add-on for the Beaglebone to connect the different sensors and actuators.