Trust is a hierarchical, read-only database engine. It uses JSON files as the underlying storage format, and allows to access it either locally through Python, or remotely through REST. It can be used to handle tree-based information such as application configuration or infrastructure topology.
Its major benefit is the elimination of data duplication through node inheritance, that is a mechanism which makes it possible to derive a node from another one, while eventually extending or modifying the base node.
Solange is a continuous deployment, open source product, currently in deployment. When finished, the product will be able to react to commits in order to run the tests, and carefully deploy the changes to production while ensuring continuity of service.
Solange is used, internally, to deploy nearly fifty virtual machines, and already handled over one thousand deployments. It made it possible to deploy all sorts of applications and services: Python's Flask and Node.js' Express apps, MongoDB, Redis or PostgreSQL databases, as well as DHCP and DNS servers, APT proxies, VPN servers, centralized rsyslog machines, Logstash, ElasticSearch, Kibana, Nginx... You name it. For instance, the blog, hosted on five virtual machines—two Node.js servers and three MongoDB replica set members—is deployed using Solange.
At a core, Solange Builder uses a specific syntax which makes it possible to define, very conveniently, the machine: its size, the packages to deploy, the files to modify. By using Trust—an hierarchical read-only database created specifically for Solange—the machines can be defined with ease and parts of definitions can be reused. Based on the definition, Solange is able to create most machines very quickly: from twenty seconds to a few minutes.
Solange Kapellmeister is the other part of the product and will consist of an orchestration tool which will run the tests and essentially determine which machines should be deployed.
Lego DSLR slider
Imagine you did something interesting in Lego, and you want to show it. How do you do it? Do you make a video? Or post some photos?
I decided to take the challenge and solve it with an approach which is slightly more creative that the ones I used to see. Using parallax scrolling technique, I included the step-by-step interactive assembly guide, while showcasing the final product as if it was for sale. The result? A convenient way of displaying information.
Saint Benoît video and website
The video and the website is a demonstration of a way to present a specific location.
In France, it is not unusual for tourist offices to have websites which all look the same, and which are very boring. Living near a small French village, I took the opportunity to show that this shouldn't be the case, and there are ways not only to highlight the specificities of a location, but also show them in an effective and original way.
I hope this project can encourage tourist offices to do a great job and to provide richer user experience and better media content.
On a few videos such as the one about Trust project, I had to talk to the camera. Since I can't remember well the things I have to say, I thought a teleprompter would be great.
However, professional teleprompters cost way too much. So I created an ersatz which works well for me, and may probably help other persons as well.
The web application is an excellent example of how to focus properly on content; if you search for similar apps, you may notice that they are too cluttered, and don't give enough space to the content itself, both when writing the text which has to be read later, and reading it in front of the camera. Another benefit is to be able to use it offline as well.
Nicecall is a small Python library which, with is fluent interface, makes it easy and convenient to invoke external processes in Linux. Its purpose is to replace the outdated and badly designed class in Solange project which dealt with external processes, but the library can actually be used for any project.
This project is also an example of Test Driven Development. The source log shows the development steps, each commit bringing an additional test and a feature which made this test pass. It also shows how I got the design wrong in the first place, and corrected it afterwards.
When I started making portrait photos, I read about five basic lighting setups, but couldn't find an easy to understand, comparative and well illustrated resource about those setups. Asking a question on a Q&A website was unhelpful as well.
So I did some research, and while the books I've found were excellent, their content was limited to text and a few schemas. I thought it wouldn't be useless to provide an explanation with richer graphics and with interactivity, so the website was born.
It shows an effective and compact way of displaying, side by side, the schema of the setup and the result, while combining them with the interaction which makes it possible for a user to see what every additional light brings to the scene.
Koala Barcode Scanner
When I worked on an internal project, I needed to scan EAN-13 barcodes. To my surprise, there was no .NET third-party libraries which were able to detect a barcode from a webcam, and the challenge looked interesting, so I came with my own approach, which work quite well, as shown in the presentation video.
One should note that today, there are much better libraries available. I'm sure I don't even have to name the great applications on Apple Store and Android's Play Store which can read virtually any barcode, but .NET community is not deprived either with several NuGet packages which look promising.
You are reading my blog regularly, aren't you? Well, now you can learn that it's based on a custom engine I've written in Node.js, and stores information in a MongoDB database which is very well suited for this purpose.
The blog engine has a few original features, such as multiple authorship—the ability for several persons to write and maintain an article. I haven't used this feature yet, but it seems fun.
MockEverything solves the chicken or the egg problem of working with .NET legacy code which overly relies on the framework or third-party libraries. In legacy code written by amateurs, it is not unusual to see that it lacks proper abstraction of the externals. If such legacy code has no tests, it becomes difficult to impossible to do anything with it: in order to test it, one has to refactor it by introducing abstractions, but in order to refactor it without causing regressions, one has to have unit tests in place.
Since no other alternatives exist, I created this library which is able to inject custom code in third-party libraries, virtually replacing production code by stubs or mocks, allowing the application code to be tested.
The project showed to be very effective in a context of a legacy SharePoint application which could then be tested and then refactored. However, it has a few limitations, such as the inability to tamper mscorlib.dll, which make it rather of a limited use.
I never liked ORMs. They are bulky, heavy, fat. They build SQL queries behind my back, and I don't like it. I want to be in control. But there is nothing worse than writing ADO.NET stuff. So I built my own object mapper, which takes the burden of boilerplate ADO.NET code from me, while letting me in control of SQL queries.
The project is similar to StackOverflow's Dapper. It has its benefits, such as its fluent interface which makes it a joy to use it, and also its drawbacks, like a minor performance penalty.
I also systematically use this project when customers need to assess the quality of my code. Not only the product is reliable, and was used in several dozens of projects with zero issues in production, but the code itself was refactored on regular basis, and properly commented, that is contains documentation comments and comments which is actually absolutely required to understand the code.