dfd.academy

nine courses, two drills · all open · no account needed

Courses I write, and what is in each one. Nothing here asks for payment, and none of them asks for an account either — you open one and start. Signing in only keeps your progress.

Every figure below was counted from the thing it describes, with the commands printed at the bottom. Where a count disagrees with a project’s own README, the counted number is the one shown. Each entry also says what is broken in it today.

Index
Course Units Lessons Questions Cards Account
Kubernetes 1990173 none
Elasticsearch 102648 none
DevOps 102648 none
TOGAF 82146 none
AWS 92977 none
Google Cloud 261062 none
Azure 201041 none
Function points 81834 none
Architect roles 71834 none
Citizenship test 367 none
Luxembourgish 2,404 none

A dash means the course has no such thing, not that the number is missing: a vocabulary deck has cards and no lessons, and the citizenship test is one flat bank of questions.

Each one in detail

The platform — nine courses, one place

Live · no account

Nine courses in the Duolingo shape, open without an account: a path of units, a handful of questions at each step, XP for finishing a lesson. Be clear about what it is — a question bank, not a textbook. A lesson is a title, one line of context and one to three questions; there is no reading material, so bring your own source and use this to find out what you have not understood. Get one wrong and it tells you why. Node, Express and SQLite on the back, React and Vite on the front.

Kubernetes is the oldest and much the largest. Elasticsearch covers mappings, the analyzer that rewrites your query and the DSL; DevOps covers pipelines, rollbacks and incidents; TOGAF is aimed at the exam; AWS, Google Cloud and Azure link the vendor’s own documentation from each lesson; function points is IFPUG counting; and the architect course is about the job rather than a stack.

Open the platform →

Courses
3
Units
28
Lessons
119
Questions
196
Kubernetes
14 units, 81 lessons, 143 questions
Elasticsearch
7 units, 20 lessons, 28 questions
DevOps
7 units, 18 lessons, 25 questions
Lessons with no question
0

What was wrong, and what was done about it

Still rough

Run it yourself

git clone git@github.com:alexff91/learn-kubernetes.git
cd learn-kubernetes/backend && npm install && npm run build && npm start
cd ../frontend && npm install && npm run build

The backend defaults to port 5000, which macOS holds for the AirPlay receiver; change it in backend/.env and in the proxy in frontend/vite.config.ts first.

Source: github.com/alexff91/learn-kubernetes — private, and not linked, because the URL 404s without access. Ask for access.

Vivre ensemble — Luxembourg citizenship test

Live · no account

Everyone sitting the Luxembourg citizenship test reads the same official booklet and then has nowhere to practise. This is the practice: every question carries the reasoning behind the right answer, not just a tick, and there is a mock paper in the real format.

Practise for the test →

Questions
367
Explained
every one
Mock exam
40 questions, 60 minutes
Pass mark
28 of 40
Paper split
10 rights, 20 institutions, 10 history and the EU
Account
none — progress stays in your browser

Worth knowing before you rely on it

LuxFlash — Luxembourgish vocabulary

Live · no account

Luxembourgish is required for the Sproochentest and there is very little to study from. A deck, graded by level: what you already know comes back less often, what you forget comes back sooner.

Open the deck →

Cards
2,404
A1
478
A2
814
B1
819
B2
293
Licence
MIT, source on GitHub

Worth knowing before you rely on it

Not a course

learn-elastic

Not listed above

A third repository has an Elastic-flavoured name and is not a course: 3 study paths, 0 lessons, 0 questions. It is a study-hours tracker with a title, a hero line and a footer that mention Elastic; nothing in it teaches anything, so it is named here rather than dressed up as a third course.

How these numbers were counted

Run from a clone of each repository. Both scripts parse the seed files and evaluate the array literals, rather than trusting the README.

# KubeLearn
node count_content.js learn-kubernetes
  UNITS   : 14
  LESSONS : 81
  QUESTIONS (objects in seedQuestions.ts): 122
  lessons with ZERO questions  : 10
  questions dropped at seed time (lesson_idx out of range): 6

node count_misplaced.js learn-kubernetes
  actually seeded             : 116
    on the lesson they were written for : 41
    on a DIFFERENT lesson               : 75 (65% of seeded questions)

# Learn Luxembourgish
grep -c "LevelUnit(categoryId:" lib/data/level_data.dart                 # 32
grep "LevelUnit(categoryId:" lib/data/level_data.dart \
  | grep -oE "lessonCount: [0-9]+" | awk -F': ' '{s+=$2} END {print s}'  # 202
grep -o "WordModel(" lib/data/vocabulary_data.dart \
                     lib/data/vocabulary_extended.dart | wc -l           # 602
grep -o "ipa: '" lib/data/vocabulary_*.dart | wc -l                      # 602
grep -o "WordModel(" lib/data/phrases_data.dart | wc -l                  # 38
grep -o "GrammarExercise(" lib/data/grammar_*.dart | wc -l               # 25

# learn-elastic
grep -c "targetHours:" src/main.js                                       # 3
grep -riE "lesson|quiz|question|answer|exercise" src index.html | wc -l  # 0