The Story of LWT 3.0.0: 1,000 Commits, 2 Architecture Changes, and One Lesson About Simplicity
A few weeks ago, I published LWT 3.0.0. That’s the biggest release in the project’s history — over 1,000 commits, roughly half of all commits since the project ever started. The entire structure was rewritten: new database engine, new backend, new frontend framework, and even a new security model. It took almost two years since the last release. I went to other projects, stepped away from this one, and actually recommended useful alternatives. So why did I go back to building this ship of Theseus? ...
Implementing Wav2Vec2.0 in Unity Sentis
In a previous post, we covered how to use Wav2Vec2.0 in Python and export to the ONNX format. Now, let’s try to use this model in Unity. We will use Unity Sentis 2.1, as it is the official way to use ONNX model as of today. If we were to stick to Python, we could run a program in parallel of the Unity code as we did in Speech-to-world, but this time let’s use the model directly in Unity. ...
Wav2Vec2.0 in Unity Sentis: export to ONNX
Lately I have been digging around the use of Automatic Speech Recognition (ASR) systems, and their use in Unity to analyze speech without requiring a high-end graphic card. It drove me back to integrating Hugging Face model inside Unity, let’s have a look at the method used. This is the first one of a series of two posts, and here we will focus on preparing the model for the outside world. ...
Rebuilding LWT's API, part 2
Hi there! Much work has been done and the new LWT REST API is now ready! For records, the initial suggestion, formatted with the help of ChatGPT, looked like the following (see part 1 for details): 1. GET API Endpoints: - Get API Version: `GET /api/version` - Get Next Word to Test: `GET /api/test/next-word` - Get Tomorrow's Tests Number: `GET /api/test/tomorrow` - Get Phonetic Reading: `GET /api/text/phonetic-reading` - Get Theming Path: `GET /api/text/theme-path` - Get Texts Statistics: `GET /api/text/statistics` - Get Media Paths: `GET /api/media/paths` - Get Example Sentences: `GET /api/sentences/{word}` - Get Imported Terms: `GET /api/terms/imported` - Get Similar Terms: `GET /api/terms/{term}/similar` - Get Term Translations: `GET /api/terms/{term}/translations` 2. POST API Endpoints: - Update Reading Position: `POST /api/reading/position` - Add/Update Translation: `POST /api/translation/{word}` - Increment/Decrement Term Status: `POST /api/terms/{term}/status` - Set Term Status: `POST /api/terms/{term}/status/set` - Test Regular Expression: `POST /api/regexp/test` - Set Term Annotation: `POST /api/terms/{term}/annotation` - Save Setting: `POST /api/settings` It featured 11 endpoints on GET and 7 on POST. The key of this approach was it was not a fundamental change but rather a reorganization of the already existing AJAX requests. In fact, GPT do not have access to all the app information, as most endpoints are simply a simplification of the explanation sentence, and were sometimes optimistic or simply wrong: for instance GET /api/text/statistics, how are we supposed to know that we get statistics for a subset of texts here? ...
Rebuilding LWT's API, part 1
Hey everyone, for the next release of LWT I have been working on a complete refactor of the AJAX API that will enhance both security and the development for the future versions of LWT! The Issue A glance at all the different AJAX files composing LWT before unification. As LWT was growing, so were the AJAX calls and without any control. In the end, LWT as of 2.8.0 harbored a collection of PHP files with different formats and standards, making the API difficult to expand and to understand. ...
A Solid Snake
Let’s talk about a project I’ve been working on for a long time, and my first published Python package: pylinkage. It’s a lightweight linkage designer and simulator that lets you quickly define and optimize mechanical linkages in code. Introduction Pylinkage dates back to 2018, when I started working on a project on leg mechanisms. At the time there was no simple way to generate mechanical linkages in Python, so I decided to create my own open-source package. The goal: go from linkage definition to mathematical optimization with minimal boilerplate. ...
The Future of LWT-fork and LUTE
As announced in a GitHub post, I’d contributed enough to the current version of LWT to consider that it was time to roll over a new project, namely LUTE. In this blog I’m detailing the reasons for this change and its implications. A Bit of History After one year of contributing to my fork of LWT, I felt that I had done most of the reasonable housekeeping and small feature insertions. It was quite fun, but the more I worked, the more I felt that I had to stop contributing to the app at some point. ...
leggedsnake: Retro-ingeneering Evolution
leggedsnake is a cool project I developed in Python. Its purpose is to improve the design of linkages, specifically leg mechanisms. The idea is to create a linkage using pylinkage, and then use a dynamic simulation (with gravity and forces) to select a better linkage based on a genetic algorithm. Demo video of leggedsnake Inspirations/Other cool projects This project was strongly influenced by Theo Jansen’s stranbeesten. At some point, it became more important when I felt that the already existing leg mechanism optimizers such as the one from Amanda Ghassaei (and please visit her impressive website!) could be improved. ...
Maintaining LWT
Hi there! In this post I’ll delve into a project which has taken a big part of my time for the last few months, the maintenance of an open-source language learning app: LWT. Original LWT logo LWT, standing for Learning With Texts, is a wonderful tool to learn text in your web browser, but it was quite abandoned 10 years ago, and it has not reached a larger audience since it was a bit difficult to use. So, I decided to blow the dust out of it, and started working on the GitHub community-maintained version. For those interested, the original project was posted at SourceForge.net. ...
Launching the Display Cabinet!
The purpose of this blog is to showcase some projects that can be of any interest to someone. I started doing it since I enjoyed starting new stuff, but when it was done it was falling to oblivion. Moreover, I do not have a lot of options for advertising GitHub projects for instance, so here is this blog to improve referencing. So, I hope you will enjoy going across the random projects of the Display Cabinet, and may you find something useful! ...