LMS
is a motive to work on new stuff while providing a mean to cope with my personal difficulty to remember people's names and relationships.
LMS
stands for "Lacune Mémorielle Sociale" (French for "Social Memory Gap").
Note
Afaik. I invented the terms for "LMS" and "Lacune Mémorielle Sociale". Maybe the name and/or the problem is real thing, but I didn't search.
When LMS
hits me, the typical questions I ask myself look like:
- "Comment s'appelle le père de Paul?" (What is Paul's father name, already?")
- "Qui est la femme de Remi?" (Who is Remi's wife?)
- "Comment s'appellent les femmes de mon cours d'escalade" (What are the names of the women attending climbing class with me?)
These are basically queries on persons ("Paul", "Remi", "Pierre", "me"), relationships ("père de", "femme de", "femmes de"), and tags ("cours d'escalade").
So, let's build-up solutions and create applications, services, etc. around that.
LMS
is made of several projects:
PyLMS |
a CLI and GUI in Python |
to both create a MVP of LMS and further work with Python |
python/README.md |
AndroLMS |
an Android App | because my phone is always at reach when LMS hits me and to explore both Android development and Kotlin |
android/README.md |
As a consequence, this project has superb opportunities to learn:
- I can start with a simple CLI and evolve the project to an auto-scaling SAAS service running in the Cloud, with both a web interface and an Android application.
- I can start with a plain JSON file as a database and evolve to Graph Database and a search service supporting Natural Language requests with AI.
- I can work on both the migrations between each of these steps and keeping them operational concurrently (e.g. the CLI can ultimately become a client to the SAAS service API).
Despite the technical potential, I want to balance it with:
- functional purpose of the tool as the driver and decision maker of technical changes (i.e. no technical change without user value)
- my professional centers of interest and my personal strengths:
- Deepen my knowledge in Python programming and the Python ecosystem (at some point, I prepared for PCPP1 with this project)
- Backend development (I can't deepen into Frontend as much #chooseYourBattles)
- Application and Architecture design
- Software Development best practices
Below, I keep track of this learning plan and its progress.
- comply with the Zen of Python for packages and modules, use
__main__.py
- build best practices:
setuptools
,wheel
(see setup.cfg) - UI development with
tkinter
(PCPP1 certification preparation) (see gui.py) - Testing with
pytest
,unitest
, patching, mocks, fixtures for property testing (see main_test.py) - Testing at scale with Contract Testing, Chaos Testing
- Code Quality:
Black
,SonarCloud
analysis, high test coverage - Change management
- issue tracking with Linear
- issues described as WHY-WHAT-HOW and as small steps of incremental value (sample, other samples)
- code updates with Pull Requests
- Continuous Integration:
GitHub actions
Note
I selected Linear to explore an innovative approach to issue tracking compared to Jira. Unfortunately, it's private. As a workaround, description of Pull Requests reproduces the content of issues.
- Implement a Hexagonal Architecture
- in a monolith: do it in Python, and prove it by adding UI without a change to the core
- in a system
GNU GENERAL PUBLIC LICENSE (GPL)