Added some project entries

This commit is contained in:
Crom (Thibaut CHARLES) 2020-09-08 13:10:55 +02:00
parent 3a1a4aa10f
commit c627104c49
Signed by: tcharles
GPG Key ID: 45A3D5F880B9E6D0
9 changed files with 233 additions and 25 deletions

View File

@ -310,12 +310,21 @@ nav#top:hover, nav#top:active {
}
#section-main article blockquote {
position: relative;
padding: 1px 20px;
padding: 0.5em 1em;
margin: 10px;
background-color: #eee;
border-radius: 0.2em;
border-radius: 0.5em;
font-style: italic;
}
#section-main article blockquote legend {
position: relative;
right: -0.5em;
height: 0;
bottom: 1em;
color: #888;
text-align: right;
font-size: 0.9em;
}
#section-main article blockquote:after {
display: block;
position: absolute;

BIN
img/hedgeclog-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
img/hedgeclog-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 KiB

BIN
img/hedgeclog-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 KiB

View File

@ -1,11 +1,202 @@
<article>
# ExtraCredits Game Jam #6 <img title="Personal project" src="/img/perso.svg"/>
<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>
# git shard <img title="Personal project" src="/img/perso.svg"/>
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
</article>
<article>
# STNeverwinterScript <img title="Personal project" src="/img/perso.svg"/>
<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)
- Multi-platform compatibility (mostly case sensitivity handling)
### More
- [Package statistics](https://packagecontrol.io/packages/Neverwinter%20Script%20syntax%20and%20build)
- Source code: https://github.com/CromFr/STNeverwinterScript
</article>
<article>
# Hackathon Code4Blind <img title="Personal project" src="/img/perso.svg"/>
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)
</article>
<article>
# Contributions to Matrix <img title="Personal project" src="/img/perso.svg"/>
[Matrix](https://matrix.org) is a protocol for secure decentralized communication, that provides a fairly easy to use JSON/REST API for application developers.
[Matrix](https://matrix.org) is a protocol for **secure decentralized communication**, that provides a fairly easy to use JSON/REST API for application developers.
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), ...
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), ...
The community around Matrix is pretty 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.
**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.
## Contributions
@ -50,28 +241,25 @@ You can find [my contributions here](https://github.com/search?q=is%3Apr+author%
![](/img/lowres/fan-controller-4.png)</a>
</div>
I came up with this because my gaming PC has a home-made watercooling system and its motherboard does not have any external sensor pins for the water temperature sensor.
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.
So I had 3 choices for controlling the fan speeds:
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 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
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.
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 / 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 __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).
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).
Since then I can barely hear my PC, even during intensive tasks :)
### Skills
- PCB design
- Some C++ programming on Arduino
- Basic electronics
- C++ programming on Arduino
### More
- Github page: https://github.com/CromFr/fan-controller
- Source code and PCB design: https://github.com/CromFr/fan-controller
</article>
@ -145,7 +333,7 @@ In 2017 I gave a 2-hour course in ISEN Brest with the Electronics Club, to intro
- Heavy __unit testing__, __coverage analysis__
#### More
- Repository: https://github.com/CromFr/nwn-lib-d
- Source code: https://github.com/CromFr/nwn-lib-d
- Status: [<img class="raw" src="https://api.travis-ci.org/CromFr/nwn-lib-d.svg?branch=master"/>](https://travis-ci.org/CromFr/nwn-lib-d)
[<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
@ -193,7 +381,7 @@ The frontend is written in Typescript using Angular2+, MaterializeCSS (JS, JQuer
- plus the skills detailed in nwn-lib-d
#### More
- Repository: [Frontend](https://github.com/CromFr/LcdaAccounts) [Backend](https://github.com/CromFr/LcdaApi)
- Source code: [Frontend](https://github.com/CromFr/LcdaAccounts) [Backend](https://github.com/CromFr/LcdaApi)
- 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/
@ -229,7 +417,7 @@ Since Kimsufi services do not provide disk redundancy nor KVM (Keyboard/Video/Mo
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
- ansible-nwn2server repository: https://github.com/CromFr/ansible-nwn2server (Note: LCDA-specific scripts are kept in a private repository)
- Source code: https://github.com/CromFr/ansible-nwn2server (Note: LCDA-specific scripts are kept in a private repository)
#### Skills
- Server administration
@ -367,7 +555,7 @@ It allows developers to write the XML GUI code with their favourite editor, whil
Right now it has some quirks on text alignment and font handling, but the result is still close to the in-game rendering.
### More
- Source: https://github.com/CromFr/NWNGuiViewer
- Source code: https://github.com/CromFr/NWNGuiViewer
- Design:
+ GTK 3 with GTKD wrapper for D lang.
+ Hand-made XML parser
@ -411,6 +599,7 @@ You are controlling the Boss and you need to end up with as much waves of enemie
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 ?
<legend>Game pitch</legend>
</blockquote>
### Used skills
@ -727,7 +916,7 @@ This project implies everything from electronics and low-level programming to hi
<!--
<article>
# ConfigFile Parser <img title="Personal project" src="/img/perso.svg"/>
@ -739,11 +928,11 @@ The goal was to define an easy to use and extensive library, and post it to GitH
- C++ library design
### More
- GitHub Repository: https://github.com/CromFr/ConfigFile-parser
- Source code: https://github.com/CromFr/ConfigFile-parser
</article>
-->

View File

@ -159,12 +159,22 @@ $ArticleFinalMargins: #{$ArticleBorderWidth + $ArticleBorderRadius};
blockquote{
position:relative;
padding: 1px 20px;
padding: 0.5em 1em;
margin: 10px;
background-color: #eee;
border-radius: 0.2em;
border-radius: 0.5em;
font-style: italic;
legend{
position: relative;
right: -0.5em;
height: 0;
bottom: 1em;
color: #888;
text-align: right;
font-size: 0.9em;
}
}
blockquote:after {
display:block;