cv-online/pages/projects.md

1304 lines
43 KiB
Markdown
Raw Normal View History

2020-09-08 13:13:51 +00:00
<article id="search-article">
# Search in projects
<p>
<label for="search-box">Keyword:</label>
<input id="search-box" type="text" name="search">
2020-09-08 19:33:08 +00:00
(regular expressions are allowed)
2020-09-08 13:13:51 +00:00
<div id="search-results" style="display: none">
Showing <span id="search-results-count"></span> projects:
<ul></ul>
</div>
</p>
<script type="text/javascript">
$("#search-box").bind("input", () => {
2021-01-29 17:48:17 +00:00
let keyword = $("#search-box").val();
2020-09-08 13:13:51 +00:00
if(keyword == ""){
$("#search-results").hide();
return;
}
2021-01-29 17:48:17 +00:00
if(keyword.toLowerCase() == "c++"){
keyword = "C\\+\\+";
}
2020-09-08 13:13:51 +00:00
const keywordRe = new RegExp(keyword, "i");
let count = 0;
$("#search-results > ul")[0].innerHTML = "";
$("article").each((i, elmt) => {
if($(elmt).attr("id") == "search-article")
return;
if(keywordRe.test($(elmt).text())){
$(elmt).show();
count++;
const header = $(elmt).children("h1")[0];
if(header != null){
$("#search-results > ul").append(
"<li><a href=\"#" + $(header).attr("id") + "\">" +$(header).text() + "</a></li>"
);
}
}
else
$(elmt).hide();
})
$("#search-results").show();
$("#search-results-count").text(count);
})
</script>
</article>
2021-01-29 18:20:41 +00:00
<article>
<h1 id="ecgj6">Advent of Code 2020 <img title="Personal project" src="/img/perso.svg"/></h1>
2021-01-29 18:23:45 +00:00
In December 2020 I decided to participate in the Advent of Code 2020, a yearly event where every day of December, you get an __algorithmic puzzle__ that you can solve using any language you want (the input data is randomly generated and you must provide the correct answer). I chose to solve the daily puzzles with __Rust__ code, since I am __very interested in this language__ and I haven't practised it very much.
2021-01-29 18:20:41 +00:00
2021-01-29 18:23:45 +00:00
My goal was not to earn a maximum of points by solving the puzzles as fast as possible once they are released (they were released at 6AM an France), but rather to __find the most interesting and/or efficient ways to solve__ them.
2021-01-29 18:20:41 +00:00
2021-01-29 18:23:45 +00:00
I also joined the Discord server or my former engineering school to __help students__ that were participating in the event. This led to a lot of interesting discussions about code instrumentation and optimisation, algorithmic complexity, regular expressions, language features, ...
2021-01-29 18:20:41 +00:00
### Skills
- Rust programming
- Algorithms
- Problem solving
- Teaching
### More
- AoC website: https://adventofcode.com/2020/
- My solutions: https://gitlab.com/CromFr/advent-of-code-2020
</article>
2020-09-08 13:13:51 +00:00
2020-09-08 11:10:55 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="ecgj6">ExtraCredits Game Jam #6 <img title="Personal project" src="/img/perso.svg"/></h1>
2020-09-08 11:10:55 +00:00
<div class="cinema">
<a
data-lightbox="hedgeclog"
href="/img/hedgeclog-1.png"
title="Game logo">
![](/img/hedgeclog-1.png)</a>
<a
data-lightbox="hedgeclog"
href="/img/hedgeclog-2.png"
title="Level 2">
![](/img/hedgeclog-2.png)</a>
<a
data-lightbox="hedgeclog"
href="/img/hedgeclog-3.png"
title="Water mechanic introduction">
![](/img/hedgeclog-3.png)</a>
</div>
<blockquote>
A fire broke out at "Hedgehogs and associates" !<br/>
All hedgehogs have to leave the building!<br/>
But co-workers need to keep a safe distance from each others spikes !<br/>
Help them get through the fire hazard!
<legend>Game pitch</legend>
</blockquote>
On August 21st 2020 I participated with Romain Pelle ([@roma-p](https://github.com/roma-p)) to a 72h Game Jam organized by [ExtraCredits](https://www.youtube.com/extracredits/) with the theme _"Take Care"_.
The game we created is a **puzzle game** where you control multiple hedgehogs and must direct them to the exit door, while avoiding the fire and making sure that they don't get too close to each other.
Each level has been designed to introduce **one single mechanic at a time**, with a **gradual yet rewarding difficulty curve**.
### Reception
The game received a lot of very **positive feedback**. There is no official ranking of games, but the game moves between the **10th and 20th place** according to itch.io popularity ranking (though we don't know how this ranking is computed).
<div class="cinema">
<a
data-lightbox="hedgeclog-feedback"
href="/img/hedgeclog-feedback-1.png"
title="Host's feedback">
![](/img/hedgeclog-feedback-1.png)</a>
<a
data-lightbox="hedgeclog-feedback"
href="/img/hedgeclog-feedback-2.png"
title="10th place ">
![](/img/hedgeclog-feedback-2.png)</a>
</div>
### Skills
- Game design
- Godot 3 (python-ish scripting)
- 2D sprite creation (Krita)
- Sound design (Audacity)
- Level design
### More
- Game jam page: https://itch.io/jam/extra-credits-game-jam-6
- Game page (can be played in the browser): https://cromfr.itch.io/hedgeclog
- Source code: https://github.com/hedgeclog/HedgeClog
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="git-shard"><img class="left" src="/img/git.png"/> git shard <img title="Personal project" src="/img/perso.svg"/></h1>
2020-09-08 11:10:55 +00:00
Git-shard is a **git extension** designed to help publish multiple small repositories (shards) from one single git private repository.
It was originally designed for [Skywing](https://github.com/SkywingvL), who contributes a lot to the _Neverwinter Nights 2_ community and has troubles releasing his work due to some parts of it being under a non-disclosure agreement.
### Tech
Git shard has been written in one **single bash file**, as bash is almost always installed alongside git (even for a Windows install).
The shards are versioned inside a separate directory, and tracks the current files present in the big repository. **Shards can be manipulated exactly like standard git repositories**, using `git shard exec shard_name command` (which internally translates into `git --git-dir=.git/shards/shard_name --work-tree=shard_name command`).
Commits from the main repository can be quickly copied to each shard with a single command: `git shard commit`. This makes it **easier to use than git submodules when one change may affect multiple shards** or when there are a lot of shards.
### Skills
- Advanced bash scripting
- Git plugin / extension dev.
### More
- Source code: https://github.com/CromFr/git-shard
2020-09-08 19:33:08 +00:00
<div style="display: none">
Multiplatform Linux Git VCS
</div>
2020-09-08 11:10:55 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="stneverwinterscript">STNeverwinterScript <img title="Personal project" src="/img/perso.svg"/></h1>
2020-09-08 11:10:55 +00:00
<div class="cinema">
<a
data-lightbox="stneverwinterscript"
href="/img/stneverwinterscript-1.gif"
title="Demo">
![](/img/stneverwinterscript-1.gif)</a>
</div>
STNeverwinterScript provides a lot of **IDE-like features** to Sublime Text 3 **for writing NeverwinterScript** code.
NeverwinterScript is a C-like language, with enough differences that **standard tools provide inaccurate results** or simply don't work. STNeverwinterScript provides a replacement for those tools, integrated into the editor.
It features:
- **Syntax highlighting**
- **Auto-completion** for functions, constants, #define and #include scripts names
- **Documentation** pop-ups generated from in-line documentation
- **Code snippets**
- Basic build tool (run the compiler against the current file / folder)
- **Smart build tool** (quick multi-threaded compilation)
- 2DA syntax hilighting (2D-arrays)
### Tech
Completions are generated using **regex-based parsing** (it's not perfect but it is a lot simpler than implementing a fully featured language lexer), and updates the symbol list in real time (unmodified files are cached).
The smart build tool keep a list of all scripts, **creating and updating a dependency tree**. If a file is modified, all scripts that depends on it are queued for compilation. The scripts to compile are then **spread across multiple compiler processes** (the compiler is single threaded) for faster compilation.
### Skills
- Python 3
- Language-specific IDE features: auto completion, documentation, build system, ..
- Software optimization (caching, multi-threading)
2020-09-08 19:33:08 +00:00
- Multi-platform support (mostly case sensitivity handling)
2020-09-08 11:10:55 +00:00
### More
- [Package statistics](https://packagecontrol.io/packages/Neverwinter%20Script%20syntax%20and%20build)
- Source code: https://github.com/CromFr/STNeverwinterScript
2020-09-08 19:33:08 +00:00
<div style="display: none">
Multiplatform tool plugin
</div>
2020-09-08 11:10:55 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="code4blind">Hackathon Code4Blind <img title="Personal project" src="/img/perso.svg"/></h1>
2020-09-08 11:10:55 +00:00
Code4Blind was a **hackathon** organized by _[Les désordinateurs communicants](https://lesdesordinateurs.org)_ for working on solutions to **help visually impaired people to practice rock climbing**.
The **topics** were:
- Image processing for detecting and classifying holds
- Communicate the path and holds layout on the floor before climbing
- Recording the movements executed by a climber in order to be able to give instructions to the next climber.
- Communicate the holds around the climber while climbing
I worked on the last topic, and we decided to **experiment with binaural (positional) audio** to signal available holds around the climber.
- Hold direction is communicated with binaural audio position
- Hold distance is communicated by volume
- Sounds type (bell, drum, ...) indicate the shape of the hold
- Multiple holds can be differentiated with sound pitch
In order to start working on a prototype, we assumed we were already provided with the head position of the climber in real time, and the holds position in the path.
### Results
The results were not very promising. Current **binaural audio libraries gives very inaccurate results**, especially for locating up vs down and front vs behind directions. This could be either caused by:
- The **missing head-related transfer function** (HRTF), which is different for every person and difficult to obtain without very specific equipment.
- **Inaccurate software audio processing**. Even with the best conditions, libraries never yields results that are as good as a real-world recording.
- **Lack of experience or ear training** with software-based binaural audio.
Nevertheless, the hackathon was very exciting and I really appreciated the experience, as I am both a software developer and an experienced rock climber.
### Skills
- Android dev.
- Binaural / positional audio
- Brainstorming and feedback gathering with users
### More
- [Hackathon website (french)](https://lesdesordinateurs.org/index.php/code4climb/)
- [PoC source code](https://framagit.org/lesdesordinateurs/audioxyz)
2020-09-08 19:33:08 +00:00
<div style="display: none">
Java Gradle
</div>
2020-09-08 11:10:55 +00:00
</article>
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="matrixcontrib">Contributions to Matrix <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
2020-09-08 19:33:08 +00:00
[Matrix](https://matrix.org) is an open source protocol for **secure decentralized communication**, that provides a fairly easy to use JSON/REST API for application developers.
2018-05-15 23:18:54 +00:00
2020-09-08 11:10:55 +00:00
Currently it's **mainly used for chat** using [Riot](https://riot.im), but **the protocol is quite versatile** and can be used in many different ways like [blogging](https://github.com/lukebarnard1/journal), communicating with [home assistant](https://www.home-assistant.io/components/notify.matrix/), IOT control, [virtual reality](https://www.youtube.com/watch?v=mGDaQQlXrLA), ...
2018-05-15 23:18:54 +00:00
2020-09-08 11:10:55 +00:00
**The community around Matrix is very strong**, and many people have created alternative clients, and bridges for synchronizing other chat platforms (IRC, Slack, Mattermost, Telegram, Discord, ...) with Matrix. Progressively Matrix is becoming the one chat platform to rule them all.
2018-05-15 23:18:54 +00:00
## Contributions
2018-07-10 14:32:21 +00:00
You can find [my contributions here](https://github.com/search?q=is%3Apr+author%3ACromFr+user%3Amatrix-org).
2018-05-15 23:18:54 +00:00
2018-07-10 14:32:21 +00:00
## Projects around Matrix
- 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).
2019-03-11 13:48:15 +00:00
- Joined room synchronization across two accounts: [matrix-autoinvite](https://gitlab.com/CromFr/matrix-autoinvite).
2018-05-15 23:18:54 +00:00
2020-09-08 19:33:08 +00:00
<div style="display: none">
Open-source Open Source
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="fancontroller">Fan controller <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="fan-controller"
href="/img/fan-controller-1.jpg"
title="Setup on my machine">
![](/img/lowres/fan-controller-1.jpg)</a>
<a
data-lightbox="fan-controller"
href="/img/fan-controller-2.jpg"
title="">
![](/img/lowres/fan-controller-2.jpg)</a>
<a
data-lightbox="fan-controller"
href="/img/fan-controller-3.jpg"
title="">
![](/img/lowres/fan-controller-3.jpg)</a>
<a
data-lightbox="fan-controller"
href="/img/fan-controller-4.png"
title="Sketch">
![](/img/lowres/fan-controller-4.png)</a>
</div>
2020-09-08 11:10:55 +00:00
I came up with this because my gaming-oriented PC has a home-made watercooling system and its motherboard does not have any external sensor pins for the water temperature sensor.
2018-05-15 23:18:54 +00:00
So I had 3 choices for controlling the fan speeds:
2020-09-08 11:10:55 +00:00
1. Always keep fans at around 70% so the water never gets too hot. Effective but too noisy for my taste...
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). It would require to write a custom multi-platform tool that would somehow find a way to control fan speed (and would require some reverse engineering on the motherboard).
3. Find or build an external fan controller, which uses the water temperature sensor.
2018-05-15 23:18:54 +00:00
2020-09-08 11:10:55 +00:00
I went for solution 3. and 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).
2018-05-15 23:18:54 +00:00
Since then I can barely hear my PC, even during intensive tasks :)
### Skills
- PCB design
2020-09-08 11:10:55 +00:00
- Basic electronics
- C++ programming on Arduino
2018-05-15 23:18:54 +00:00
### More
2020-09-08 11:10:55 +00:00
- Source code and PCB design: https://github.com/CromFr/fan-controller
2018-05-15 23:18:54 +00:00
2020-09-08 19:33:08 +00:00
<div style="display: none">
DIY soldering embedded systems
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="hackathonrwb">Hackathon with _Reporters Without Borders_ <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
2019-03-11 13:48:15 +00:00
Ask me personally if you want to learn more about it (there are some parts I can't disclose here for privacy reasons).
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="coursehardenyourcode">_Harden your code_ course <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="hardenyourcode"
href="/img/hardenyourcode-1.jpg"
title="">
![](/img/hardenyourcode-1.jpg)</a>
<a
data-lightbox="hardenyourcode"
href="/img/hardenyourcode-2.png"
title="What happen without any QA?">
![](/img/hardenyourcode-2.png)</a>
<a
data-lightbox="hardenyourcode"
href="/img/hardenyourcode-3.png"
title="Who thought about this?">
![](/img/hardenyourcode-3.png)</a>
</div>
2019-09-18 13:33:48 +00:00
In 2017 I gave 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.
2018-05-15 23:18:54 +00:00
### Course topics:
- __Quality Assurance__ definition
- __Unit testing__: Good practices, test driven development, unit tests as documentation
- __Coverage analysis__: examples
- __Contract programming__: in/out checks, invariants
2019-03-11 13:48:15 +00:00
- __Continuous Integration__: auto testing, online coverage analysis, contribution process on some open source projects (i.e. PR merge checks)
- Misc: stubs / mock-ups, exception versus assertion, compiler and language tooling, static / dynamic code analysis, fuzzing, code verbosity / factorization, code formatting, profile-guided optimizations
2018-05-15 23:18:54 +00:00
### More
- All slides (English): https://cromfr.github.io/course-hardenyourcode
2020-09-08 19:33:08 +00:00
<div style="display: none">
course ISEN teaching CD CI
</div>
2018-05-15 23:18:54 +00:00
</article>
2019-09-18 08:24:04 +00:00
<!-- ######################################################################### -->
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="nwn2-backend-stuff">Neverwinter Nights 2 related stuff <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
## Library for parsing game engine files (nwn-lib-d)
2019-03-11 13:48:15 +00:00
- Parsing and serialization of GFF files, a general purpose, treelike binary storage format.
+ __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). The checksum of the binary file should not be modified if the file is not changed between parsing and serialization.
2018-05-15 23:18:54 +00:00
- __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)
#### Skills
- D language
- __Reverse engineering__ binary files
2019-03-11 13:48:15 +00:00
- __3D model generation for visualizing__ map information (shapes, face junctions, face properties, pathfinding data, ...)
- Pathfinding and 3D mesh-cutting and merge __algorithms__
2018-05-15 23:18:54 +00:00
- __Profiling__, __optimizations__
- Heavy __unit testing__, __coverage analysis__
#### More
2020-09-08 11:10:55 +00:00
- Source code: https://github.com/CromFr/nwn-lib-d
- Status: <img class="raw" src="https://github.com/CromFr/nwn-lib-d/workflows/nwn-lib-d/badge.svg"/>
2018-05-15 23:18:54 +00:00
[<img class="raw" src="https://codecov.io/gh/CromFr/nwn-lib-d/branch/master/graph/badge.svg"/>](https://codecov.io/gh/CromFr/nwn-lib-d)
- Reversed spec for TRN.ASWM format: https://gist.github.com/CromFr/104bac52dc9191099d9d9e3dbd2c4975
## Account manager
<div class="cinema">
<a
data-lightbox="lcdaaccounts"
href="/img/lcdaaccounts-1.jpg"
title="Character view">
![](/img/lowres/lcdaaccounts-1.jpg)</a>
<a
data-lightbox="lcdaaccounts"
href="/img/lcdaaccounts-2.jpg"
title="Dungeon completion status">
![](/img/lowres/lcdaaccounts-2.jpg)</a>
</div>
It's a big project aiming to provide to players a __web interface and an open API__ for managing their server account and browsing characters.
It makes heavy use of my _nwn-lib-d_ library to extract information distributed across ~300MB of various game files as fast as possible.
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 :) ).
2019-03-11 13:48:15 +00:00
The frontend is written in Typescript using Angular2+, MaterializeCSS (JS, JQuery, SCSS)
2018-05-15 23:18:54 +00:00
- Provides a way to access player's
+ Characters
* Basic information
* Quest status
* Dungeon completion
* ...
* Public status to share characters infos with other players
* Custom notes
+ Account settings
* Authorized application (token-based)
* Password change
- __Authentication portal__, similar to OAuth (OAuth2 compatibility is a milestone)
- Cache system & rate limiting to prevent from DOSing the service.
- Localization using the NWN2 translation files (TLK).
#### Skills
- D language, with Vibe.d web library
- Frontend design, with Angular / MaterializeCSS
- plus the skills detailed in nwn-lib-d
#### More
2020-09-08 11:10:55 +00:00
- Source code: [Frontend](https://github.com/CromFr/LcdaAccounts) [Backend](https://github.com/CromFr/LcdaApi)
2018-05-15 23:18:54 +00:00
- Production frontend: https://account.lcda-nwn2.fr (French)
+ Character example: https://account.lcda-nwn2.fr/Crom%2029/vault/krogar (French)
- Production API: https://api.lcda-nwn2.fr/
## Server infrastructure
The previous server was hosted on a Windows XP machine, behind a home connection.
Since the OS was aging (understand _utterly out of date_), and most software do not run anymore on the platform (and the lack of decent remote control / automation), I decided to setup a brand new server running __GNU/Linux__, with a __light windows virtual machine__ just to run the game server (the game server only runs only under Windows, and require DLL injection support for plugins, which puts Wine out of the game).
### General
- Dedicated server hosted on Kimsufi (OVH) servers (low budget / second hand servers)
- Ubuntu 17.04 (LTS) host system (when created)
+ MariaDB used by nwn2server
+ LcdaApi and LcdaAccounts services
+ Automated nwn2server updates
+ Automated player data & server __backup__
+ Other web services like a [Wiki](https://wiki.lcda-nwn2.fr/), LcdaAccounts, LcdaApi, ...
- __KVM Virtualization__
+ Running only the nwn2server process, on Windows Server 2012
+ __VirtIO__ for fast network and disk access
+ __SPICE remote control__ only accessible through a SSH tunnel
- __Automated setup__ using Ansible
2019-03-11 13:48:15 +00:00
- 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__
2018-05-15 23:18:54 +00:00
### Ansible
2019-03-11 13:48:15 +00:00
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.
2018-05-15 23:18:54 +00:00
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.
#### More
2020-09-08 11:10:55 +00:00
- Source code: https://github.com/CromFr/ansible-nwn2server (Note: LCDA-specific scripts are kept in a private repository)
2018-05-15 23:18:54 +00:00
#### Skills
- Server administration
- __Ansible__ automation
- __Optimized virtualization__, __Nested KVM debugging__
- Windows server administration :( (We needed DLL injection support for the nwn2server, which isn't supported by either Wine or ReactOS)
2020-09-08 19:33:08 +00:00
<div style="display: none">
Linux Windows automation frontend backend web html css server admin
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="rhumroll">Rhum roll ! <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="rhumroll"
href="/img/rhumroll-1.jpg"
title="Final installation. Ready rhums are put on the top floor">
![](/img/lowres/rhumroll-1.jpg)</a>
</div>
A funny one-day project.
2020-09-08 19:33:08 +00:00
I built a __conveyor belt__ actioned by a small reduced __DC motor__, controlled by a Raspberry PI (with a H bridge for power separation). Every 3 hours, the bottles rotate for about _3 π / 4_, so my rum is gently blended and get a __better__ _taste_ __faster__ :)
2018-05-15 23:18:54 +00:00
### Skills
- PCB design & some basic electronics
- DIY: the conveyor belt is made of tire inner tube
### More
- Not much source code, since it's mostly electronics
- If you insist, here is the bash script: `echo 1 > /sys/class/gpio/gpio$PIN/value; sleep 10; echo 0 > /sys/class/gpio/gpio$PIN/value`
2020-09-08 19:33:08 +00:00
<div style="display: none">
arduino electronics contraptions
</div>
2018-05-15 23:18:54 +00:00
</article>
2019-09-18 08:24:04 +00:00
<!-- ######################################################################### -->
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="dlang-stuff">D Language <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
2021-01-29 17:28:16 +00:00
The [D language](https://dlang.org) is a recent language very similar to C++ in term of features, but with a cleaned syntax and better compile-time features.
2018-05-15 23:18:54 +00:00
2019-03-11 13:48:15 +00:00
I like the D language because it makes possible to write nice and robust applications within a very short time.
2018-05-15 23:18:54 +00:00
2019-03-11 13:48:15 +00:00
Here are some small projects I have done using D:
2018-05-15 23:18:54 +00:00
## Served
<div class="cinema">
<a
data-lightbox="served"
href="/img/served-1.png"
title="Served example page">
![](/img/served-1.png)</a>
<a
data-lightbox="served"
href="/img/served-2.png"
title="File inspection: Rights, rename, move, etc...">
![](/img/served-2.png)</a>
<a
data-lightbox="served"
href="/img/served-3.png"
title="Markdown rendering">
![](/img/served-3.png)</a>
</div>
2019-09-18 11:35:41 +00:00
Served is a __lightweight file-sharing web service__ (a bit like _Google Drive_) written using the web server library [vibe.d](https://vibed.org).
2018-05-15 23:18:54 +00:00
2021-01-29 17:28:16 +00:00
It is designed to be __quickly deployed__ as a __web file server__ that can also be used to __upload files__ to a directory. 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.
2018-05-15 23:18:54 +00:00
By default, the file named `index.md` gets rendered atop of the file list.
### More
- Source code: https://github.com/CromFr/Served
- Design:
+ Bootstrap
+ JQuery
+ Markdown rendering with Showdown
+ Interfacing D lang. with C library (PAM)
## NWN2 Log web access
<div class="cinema">
<a
data-lightbox="nwnlog"
href="/img/nwnlog-1.png"
title="Log entry listing">
![](/img/nwnlog-1.png)</a>
<a
data-lightbox="nwnlog"
href="/img/nwnlog-2.png"
title="Search queries and auto-generated menu">
![](/img/nwnlog-2.png)</a>
</div>
The goal was to provide a common __web interface__ to __browse and search log__ entries written by the Neverwinter Nights 2 server _La Colère d'Aurile_.
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:
2019-03-11 13:48:15 +00:00
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__.
2018-05-15 23:18:54 +00:00
### More
- Source code: https://github.com/CromFr/NWNLogViewer
- Design
+ REST API generating Json data
+ Search & data-binding using AngularJS
+ Much code generation using D meta-programming features
## NWN2 GUI viewer
<div class="cinema">
<a
data-lightbox="nwngui"
href="/img/nwngui-1.jpg"
title="Complex GUI rendered by the tool">
![](/img/nwngui-1.jpg)</a>
<a
data-lightbox="nwngui"
href="/img/nwngui-2.jpg"
title="Same GUI rendered by the game with additionnal scripting">
![](/img/nwngui-2.jpg)</a>
</div>
Neverwinter Nights 2 lacks of third applications. This one __renders NWN2 GUI__ without launching the whole game, and updates itself on file change.
2019-03-11 13:48:15 +00:00
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.
2018-05-15 23:18:54 +00:00
Right now it has some quirks on text alignment and font handling, but the result is still close to the in-game rendering.
### More
2020-09-08 11:10:55 +00:00
- Source code: https://github.com/CromFr/NWNGuiViewer
2018-05-15 23:18:54 +00:00
- Design:
+ GTK 3 with GTKD wrapper for D lang.
+ Hand-made XML parser
## Phobos
Phobos is the standard library of the D language.
I have fixed a few bugs in the library, and I am looking to fix more of them in the near future :).
2020-09-08 19:33:08 +00:00
<div style="display: none">
multiplatform linux frontend backend web html css open source contributions server admin
</div>
2018-05-15 23:18:54 +00:00
</article>
2019-09-18 08:24:04 +00:00
<!-- ######################################################################### -->
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="ld32gj">Ludum Dare 32 <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="ludum32"
href="/img/ludum32-1.jpg"
title="Game example">
![](/img/ludum32-1.jpg)</a>
<a
data-lightbox="ludum32"
href="/img/ludum32-2.jpg"
title="Longer game, with walls, traps and goblins">
![](/img/ludum32-2.jpg)</a>
</div>
Ludum Dare is an online community best known for “Ludum Dare”, the Accelerated Game Development Event of the same name (also called a “Game Jam”).
For the Ludum Dare 32 (April 2015), _Thomas Abot_ and I developed a little game on the theme _"An Unconventional Weapon"_, using the Unity 3D game engine.
2018-05-17 10:01:21 +00:00
<blockquote>
Adventurers are coming to get your treasure, you are controlling your ultimate weapon to protect it : the Boss.<br/>
<br/>
You are controlling the Boss and you need to end up with as much waves of enemies as possible. To help you, you can place walls to block enemies, traps (who can be activated by clicking on it) to damage enemies, and hire goblins to help you (but beware not hurting them!).<br/>
You can get gold by killing enemies (by attacking them or by activating traps while enemies are on it).<br/>
<br/>
How long will you resist ?
2020-09-08 11:10:55 +00:00
<legend>Game pitch</legend>
2018-05-17 10:01:21 +00:00
</blockquote>
2018-05-15 23:18:54 +00:00
2020-09-08 19:33:08 +00:00
### Skills
- Unity engine
2018-05-15 23:18:54 +00:00
- C#
- 48 hours of intense game jam coding ♥
### More
- [Ludum Dare page](http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=51321)
- Source: https://github.com/LD32-Tutti/Tutti
</article>
2019-09-18 08:24:04 +00:00
<!-- ######################################################################### -->
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="akadoc">Akadoc <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
A game project started with friends, that was far too ambitious and got abandoned.
<div class="cinema">
<a
data-lightbox="akadoc"
href="/img/akadoc-1.png"
title="">
![](/img/lowres/akadoc-1.png)</a>
<a
data-lightbox="akadoc"
href="/img/akadoc-2.png"
title="">
![](/img/lowres/akadoc-2.png)</a>
</div>
### More
2019-09-18 08:24:04 +00:00
- Repository: https://git.tcharles.fr/akadoc/akadoc
- Game design documents: https://git.tcharles.fr/akadoc/specs/src/branch/master/archives (French)
2018-05-15 23:18:54 +00:00
### Skills
- Game design
- Unity engine
- C# scripting
</article>
2019-09-18 08:24:04 +00:00
<!-- ######################################################################### -->
2018-05-15 23:18:54 +00:00
<article>
2020-09-09 14:40:45 +00:00
<h1 id="tempest">Tempest Autonomous sailboat <img title="School project" src="/img/school.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="microtransat"
href="/img/microtransat-1.jpg"
title="SnoopySloop, boat of 'Team Joker'">
![](/img/lowres/microtransat-1.jpg)</a>
<a
data-lightbox="microtransat"
href="/img/microtransat-2.jpg"
title="Tempest - Hull paint">
![](/img/microtransat-2.jpg)</a>
<a
data-lightbox="microtransat"
href="/img/microtransat-3.jpg"
title="Tempest - Equipment">
![](/img/microtransat-3.jpg)</a>
<a
data-lightbox="microtransat"
href="/img/microtransat-4.jpg"
title="Tempest - Sailing">
![](/img/microtransat-4.jpg)</a>
</div>
My 4th year project at ISEN Brest was the development of an __autonomous sailboat__, in order to participate in the Microtransat in few years.
### Microtransat
The Microtransat Challenge is a transatlantic race of fully autonomous sailing boats, measuring less than 4 meters.
This race was created in 2006 and no one has ever succeeded, with 7 trials from university and engineering school teams.
The goal of ISEN Brest is to participate and win this race in 1 or 2 years.
### Our work
2019-03-11 13:48:15 +00:00
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.
2018-05-15 23:18:54 +00:00
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.
This project had many challenging (understand interesting) parts:
- Design a socket interface so the hardware acquisition can be developed independently from the intelligence.
- Provide a modular simulation web interface to test and debug the program as much as possible.
- Wind optimization: the boat goes faster windward than downwind.
- Tacking: The boat cannot go directly upwind, and the program needs to handle this correctly.
- Fixing the kernel PWM drivers that had a bug preventing to generate more than 2 PWM.
- Find solutions for:
+ Cable jamming around the servo-motors.
+ Van design, placement and electronics.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Interface sensors and actuators with the program
- Defining sail boat intelligence
- D Language
- Cross-compiling D code using GCC/GDC
- Inter-process communication
### More
- [Source code](https://github.com/ISEN-TempestProject)
2019-09-18 08:24:04 +00:00
- [Presentation slides (fr)](https://tcharles.fr/slides/voilierautonome-pres/index.html)
2018-05-15 23:18:54 +00:00
- [Report (fr)](/res/tempest.pdf)
2020-09-08 19:33:08 +00:00
<div style="display: none">
embedded systems linux beaglebone electronics sensor data acquisition
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="courses-git">Courses on Git <img title="Personal project" src="/img/perso.svg"/></h1>
2021-01-29 17:28:16 +00:00
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="gitcourse"
href="/img/gitcourse-1.jpg"
title="First course">
![](/img/gitcourse-1.jpg)</a>
</div>
In 2013, I gave 3 courses of 2 hours on Git, a version control system (like Subversion, Mercurial, ...) at ISEN Brest, for voluntary students and teachers.
This course aims teaching the use of Git in collaborative projects, from the basis (add, commit, push, pull, ...) to more complex things (branch, merge, conflicts, stash, ...).
### More:
2019-09-18 11:35:41 +00:00
- [Material (fr)](https://tcharles.fr/coursgit/)
2020-09-08 19:33:08 +00:00
<div style="display: none">
course ISEN teaching
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="arcade-cabinet">Arcade cabinet <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a
data-lightbox="bornearcade"
href="/img/bornearcade-1.jpg"
title="Main structure">
![](/img/bornearcade-1.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-2.jpg"
title="Finished assembly">
![](/img/bornearcade-2.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-3.jpg"
title="First show at ISEN open day">
![](/img/bornearcade-3.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-4.jpg"
title="On OpenHexagon, an OpenSource clone of SuperHexagon">
![](/img/bornearcade-4.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-5.jpg"
title="Playing Flappisen, a FlappyBird clone written by a student">
![](/img/bornearcade-5.jpg)</a>
2020-09-08 19:33:08 +00:00
<br/>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-6.jpg"
title="Second version, replaced the dead CRT TV to a LCD panel">
![](/img/bornearcade-6.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-7.jpg"
title="The screen is slightly too large">
![](/img/bornearcade-7.jpg)</a>
<a
data-lightbox="bornearcade"
href="/img/bornearcade-8.jpg"
title="Second version">
![](/img/bornearcade-8.jpg)</a>
2018-05-15 23:18:54 +00:00
</div>
In 2014, I worked on an arcade gaming console with the Electronics Club of ISEN Brest, that is available to students in school.
I worked on the 3D Design, structure cutting/assembling, Archlinux configuration and development of the game selector.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- DIY
- Solidity-constrained design
- ArchLinux configuration
- Development of the game selector in D
### More
- Game selection software (OpenAGS): https://github.com/Club-Elec/OpenAGS
2020-09-08 19:33:08 +00:00
<div style="display: none">
Linux system x11 arcade cabinet retro gaming
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="portfolio">Portfolio / Online CV <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
In 2013, I decided to put online a detailed personal presentation website in addition to my CV.
It allows me to detail precisely each project I've done since I began programming.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Website design (inspired from GNOME Shell 3)
- HTML5, CSS3/SCSS, Javascript, PHP
- Update 2015:
- Removed PHP (yay!)
2019-09-18 11:35:41 +00:00
- Using [EmberJS](https://emberjs.com/)
2018-05-15 23:18:54 +00:00
- Articles rewritten in Markdown
2019-09-18 08:24:04 +00:00
- Update 2017:
- Removed Ember ! (yay! npm dependent project are a nightmare to maintain)
- Using Marked.js for in-page rendering (I should switch to server-side md rendering)
- Just plain JS/CSS/HTML, should last much longer
2018-05-15 23:18:54 +00:00
### More:
2019-09-18 08:24:04 +00:00
- Source code: https://git.tcharles.fr/tcharles/cv-online
2018-05-15 23:18:54 +00:00
2020-09-08 19:33:08 +00:00
<div style="display: none">
frontend
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="3dprinter">3D Printer <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
2019-09-18 11:35:41 +00:00
In 2013, I assembled a 3D printer kit, with the Electronics Club of ISEN Brest. This was a RepRapPro Mendel monocolour.
2018-05-15 23:18:54 +00:00
Presentation video (fr):
<div class="cinema center">
<video controls>
<source src="/media/3dprinter.mp4" type="video/mp4"/>
<source src="/media/3dprinter.webm" type="video/webm"/>
<a href="/media/3dprinter.mp4">Download video</a>
</video>
</div>
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- DIY
- Patience, rigor
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="quadcopter">Quad-copter <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
In 2012, with the Electronics Club of ISEN Brest, started working on a radio-controlled quad-rotor drone.
<div class="cinema">
<a
data-lightbox="drone"
href="/img/drone-1.jpg"
title="First structure">
![](/img/lowres/drone-1.jpg)</a>
<a
data-lightbox="drone"
href="/img/drone-2.jpg"
title="Current structure, much lighter">
![](/img/lowres/drone-2.jpg)</a>
<video style="height: 300px; width: auto;" controls>
<source src="/media/drone.mp4" type="video/mp4"/>
<source src="/media/drone.webm" type="video/webm"/>
<a href="/media/drone.mp4">Download video</a>
</video>
</div>
This project implies everything from electronics and low-level programming to higher level software for the stabilization : we didn't want to build a kit, our goal was to build everything from scratch.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- DIY
- Electronic card development
- Brushless motors control
- ARM development in C++ aimed for raspberry Pi and for STM32F4 (bare metal)</li>
- TCP/IP network communication
- User interface with Qt 4.8
- Presentation of the quad-copter at open days
### More
- [Source code](https://github.com/search?utf8=%E2%9C%93&q=Aerodrone_+user%3ACromFr&type=Repositories)
2020-09-08 19:33:08 +00:00
<div style="display: none">
Linux embedded systems compiler toolchain GUI
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="toy3dengine">3D Engine <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
In 2012, after working on MatrixRun with Irrlicht, I decided to study and write a sample 3D engine using OpenGL
It only handles basic forms, like cubes and height maps (defined in text files), and chain renders the scene, respecting relative positions.
<div class="cinema">
<a
data-lightbox="3dengine"
href="/img/3dengine-1.jpg"
title="Rendering 2 cubes and a Heightmap">
![](/img/3dengine-1.jpg)</a>
<a
data-lightbox="3dengine"
href="/img/3dengine-2.jpg"
title="Class diagram of the rendering chain">
![](/img/3dengine-2.jpg)</a>
</div>
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Source code study of Irrlicht
- OpenGL 2 API
- C++ Dev.
2020-09-08 19:33:08 +00:00
<div style="display: none">
Multiplatform custom 3d engine
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="burgerquizz">Burger Quizz <img title="School project" src="/img/school.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a data-lightbox="burgerquizz" href="/img/burgerquizz-1.jpg"
title="Game example">
<img src="/img/lowres/burgerquizz-1.jpg" alt=""/>
</a>
<a data-lightbox="burgerquizz" href="/img/burgerquizz-2.jpg"
title="Animated Burger-Menu">
<img src="/img/burgerquizz-2.jpg" alt=""/>
</a>
</div>
In 2012, I realized a web-site with another student, in order to play BurgerQuizz, a game from a French TV Show.
This project was realized after the courses on Apache/PHP/SQL in the second year at ISEN Brest.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Development of a website (HTML5/CSS3, Javascript, PHP, MySQL)
- Development of a user interface to edit the database in Java
- 30-day project with a deadline
- Version control with SVN
### More
- [Demo (French)](/redirect-burgerquizz)
2020-09-08 19:33:08 +00:00
<div style="display: none">
frontend backend GUI database
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="matrixrun">MatrixRun <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
In 2011, I worked on a 3D video game project, controlled by wiimotes, and detecting the player position with IR diodes.
---
It has been inspired by [WiiDesktopVR from Johnny Chung Lee](http://johnnylee.net/projects/wii/). The goal of this project was to discover the possibilities offered by the wiimotes and this 3D simulation and to make a game with it.
Johnny Chung Lee project:
<div class="cinema center">
[![View on youtube](/img/lowres/matrixrun-wiidesktopvr.jpg)](https://www.youtube.com/watch?v=Jd3-eiid-Uw)
</div>
The game goal is to progress with a ship in a tunnel, avoiding obstacles and killing enemies
The ship movements are controlled by the head of the layer, and the guns by two wiimotes held by the player.
In-game video : Random tunnel generation, player movements and fire
<div class="cinema center">
<video controls>
<source src="/media/matrixrun.webm" type="video/webm"/>
<source src="/media/matrixrun.mp4" type="video/mp4"/>
<a href="/media/matrixrun.mp4">Download video</a>
</video>
</div>
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Rigor in code writing, object-oriented model design
- 3D engine use : Irrlicht
- Common interface driven input/output
- Random tunnel generation, by defining each polygon
- Particle system (for visual effects like explosion and smoke) : Spark Particle Engine
- Game presentation in ISEN open days, and in some local events
### More
- Source code: https://github.com/CromFr/MatrixRun
2020-09-08 19:33:08 +00:00
<div style="display: none">
multiplatform game
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="navalwars">NavalWars <img title="School project" src="/img/school.svg"/></h1>
2018-05-15 23:18:54 +00:00
<div class="cinema">
<a data-lightbox="navalwars" href="/img/navalwars-1.jpg"
title="Main menu">
<img src="/img/navalwars-1.jpg" alt=""/>
</a>
<a data-lightbox="navalwars" href="/img/navalwars-2.jpg"
title="Game example">
<img src="/img/navalwars-2.jpg" alt=""/>
</a>
</div>
In 2011, I realized a console battleship game with another student, written in C.
This project was my first software project as part of a team, and started my passion of computer sciences.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Writing a program in a team
- 5-day project with a deadline
- AI design and implementation
### More
- Source code: https://github.com/CromFr/NavalWars
2020-09-08 19:33:08 +00:00
<div style="display: none">
CLI command line networking
</div>
2018-05-15 23:18:54 +00:00
</article>
<article>
2020-09-09 14:40:45 +00:00
<h1 id="lcda">La Colère d'Aurile <img title="Personal project" src="/img/perso.svg"/></h1>
2018-05-15 23:18:54 +00:00
Since 2009, I am in the development team of _La Colère d'Aurile_, a French persistent role-play/action server on Neverwinter Nights 2 based on the pen&paper role playing game Dungeon & Dragons.
## Neverwinter Nights 2
<div class="cinema">
<a
data-lightbox="nwn2"
href="/img/nwn2-1.jpg"
title="Races and classes of NWN2">
![](/img/lowres/nwn2-1.jpg)</a>
<a
data-lightbox="nwn2"
href="/img/nwn2-2.jpg"
title="Concept art of the extension Storm of Zehir">
![](/img/lowres/nwn2-2.jpg)</a>
<a
data-lightbox="nwn2"
href="/img/nwn2-3.jpg"
title="Concept art of the extension Storm of Zehir">
![](/img/lowres/nwn2-3.jpg)</a>
</div>
Neverwinter Nights 2 is a role playing game based on the universe and rules of Dungeon and Dragons 3.5, developed by Obsidian in 2006, following the first of the name.
This game offers - in addition to a solo campaign - an online multiplayer mode, with a nice editor that allows to create custom content and host in on a personal server.
The editor is quite powerful, and allows to create 3D maps, dialogs, compiled scripts (in a C-like language), ... and the environment around it is free enough to add custom 3D models, ingame UI or change the core rules of the game (races addition, class addition, spell modification, ..).
Some developers have even found a way to execute C# program on the server-side through pipes with the server process, allowing for example to do SQL requests.
## _La Colère d'Aurile_
<div class="cinema">
<a
data-lightbox="lcda"
href="/img/lcda-1.jpg"
title="Waterdeep city center by night">
![](/img/lowres/lcda-1.jpg)</a>
<a
data-lightbox="lcda"
href="/img/lcda-2.jpg"
title="Mintarn island">
![](/img/lowres/lcda-2.jpg)</a>
<a
data-lightbox="lcda"
href="/img/lcda-3.jpg"
title="Underdark">
![](/img/lowres/lcda-3.jpg)</a>
</div>
_La Colère d'Aurile_ is a public persistent server, launched in Avril 26 2008.
Since 2012, I am the administrator charged of development and integration.
2020-09-08 19:33:08 +00:00
### Skills
2018-05-15 23:18:54 +00:00
- Team development of the server
- Handling a non-professional development team (objective attribution, priorities, ...)
- Creation of maps, scenarios, dialogs, quests, monster balancing, ...
- Development tools setup : Git, Continuous integration by hook scripts
- Design and management of a MySQL Database
### More
- [Web site](http://lacoleredaurile.xooit.fr/portal.php)
- [Remapping](https://www.youtube.com/watch?v=n8AqZzG1_1M)
- [Experiments with powder barrels](https://www.youtube.com/watch?v=yVMEmEEtULQ)
- [Dialog UI redesign (with my own drawings!)](https://www.youtube.com/watch?v=gEHg1zyRMSo)
2018-07-10 14:32:21 +00:00
</article>