Frontend
Interfejsy piszę w TypeScripcie na Reakcie, a style w Tailwindzie, od stron po panele. Czysty JavaScript zostaje tam, gdzie przeglądarka wystarczy sama, jak na tej stronie, która nie ma żadnego kroku budowania.
-
TypeScript
1 949 953 linie
- Mój główny język: frontendy w React, backendy w Node.js i Express, panele i aplikacje. Prawie połowa kodu w moich repozytoriach to TypeScript.
-
JavaScript
137 213 linii
- Interakcje i animacje w przeglądarce, jak na tej stronie napisanej w czystym JS. W większych projektach zastępuje go TypeScript.
-
TailwindCSS
- Standard w moich frontendach, od stron po panele.
-
React
- Podstawa moich frontendów i paneli, a w React Native także aplikacji Plazera.
Poza codziennym zestawem: Bootstrap (responsywny UI, dziś zastąpiony Tailwindem), Vue (framework do interfejsów), Angular (framework frontendowy).
Backend i API
Większość backendów to Node.js z Expressem i Prismą. Go wchodzi tam, gdzie liczy się wydajność i prostota, jak w Plazerze i serwerze Lunatic Chess. PHP trzyma backend tej strony, a Python robi skrypty, boty i monitoring.
-
Go
213 414 linii
- Backend komunikatora Plazer, serwer gry Lunatic Chess i mniejsze gry sieciowe. Sięgam po niego tam, gdzie liczy się wydajność i prostota.
-
PHP
130 914 linii
- Backend tej strony, sklep internetowy na własnym mikroframeworku i kustomizacja panelu Pterodactyl.
-
Python
83 484 linie
- Skrypty i automatyzacje do pracy z serwerami, boty Discord i backend monitoringu usług.
-
Java
9 922 linie
- Serwer statystyk, z którego biorą się liczby na tej stronie, i platforma rezerwacji w Spring Boot.
-
Node.js
- Backendy na Node.js i Express z Prisma, obecne w większości moich paneli i stron.
-
FastAPI
- Backend monitoringu usług VulCode.
-
Laravel
- Kustomizacja panelu Pterodactyl, który jest zbudowany na Laravelu.
-
Symfony
- Komponenty Symfony, na których opiera się Laravel w panelu Pterodactyl.
Poza codziennym zestawem: ASP.NET Core (API w .NET), Flask (mniejsze usługi w Pythonie), Django (duże aplikacje w Pythonie).
Systemy i niski poziom
Rust dostaje rzeczy, które muszą być szybkie i pod pełną kontrolą pamięci: rdzeń Flaema, serwer Gyred i terminalowy vulp. Węzłów Flaema pilnuje Elixir na OTP. Najniżej jest hobbystyczny system operacyjny w C, z kodem startowym w asemblerze, który bootuje w QEMU.
-
Rust
791 378 linii
- Rdzeń platformy hostingowej Flaem, serwer Gyred i terminalowy vulp. Wybieram go tam, gdzie potrzebuję pełnej kontroli nad pamięcią i wydajnością.
-
Elixir
80 963 linie
- Nadzór węzłów we Flaemie oparty na OTP i serwer klucz-wartość w pamięci mówiący protokołem Redisa.
-
C
49 346 linii
- Hobbystyczny system operacyjny na x86_64, który bootuje w QEMU, z własnym planistą i trybem użytkownika.
-
Assembly
397 linii
- Kod startowy mojego systemu operacyjnego, który przełącza procesor w tryb 64-bitowy.
Aplikacje mobilne
Na telefony piszę natywnie: Kotlin na Androida, Swift na iOS. W Kotlinie powstał też własny silnik relacyjnej bazy danych, a w Swifcie interpreter Scheme.
-
Kotlin
206 188 linii
- Natywne aplikacje na Androida, własny silnik relacyjnej bazy danych i mały język skryptowy.
-
Swift
116 812 linii
- Natywne aplikacje na iOS i interpreter języka Scheme.
Gry, modding i grafika
Od gier się zaczęło: wtyczki w C# do serwerów SCP:SL, z których wyrosła Nebula. Dziś to skrypty w Lua do Lunatic Chess, silnik wokselowy w C++ i grafika, modele oraz montaż do tego, co robię.
-
C#
162 872 linie
- Wtyczki do SCP:SL, z których wyrosła Nebula, dashboard do homelabu w Avalonii i emulatory starych konsol napisane od zera.
-
C++
57 275 linii
- Silnik gry wokselowej z własnym renderowaniem.
-
Lua
32 053 linie
- Gra roguelike z bestiariuszem i ekwipunkiem oraz skrypty figur i map w Lunatic Chess.
-
Photoshop
- Grafika rastrowa.
-
Da
DaVinci Resolve
- Montaż wideo.
-
Blender
- Modelowanie i renderowanie 3D.
Poza codziennym zestawem: Unity (silnik gier), Godot (otwartoźródłowy silnik gier), Unreal Engine (gry 3D).
Bazy danych
Domyślnie SQLite przez Prismę, bo w mniejszym projekcie nic więcej nie trzeba. Kiedy projekt rośnie, jak Plazer i Flaem, wchodzi PostgreSQL, a Redis robi tam za cache. MySQL został z paneli hostingowych i Pterodactyla.
-
MySQL
- Baza pod panelem Pterodactyl i panelami hostingowymi.
-
SQLite
- Domyślna baza w mniejszych projektach i panelach na Prisma.
-
JSON
- Format wymiany danych, między innymi między moim serwerem statystyk a tą stroną.
-
PostgreSQL
- Baza pod Plazerem i Flaemem, gdy projekt potrzebuje więcej niż SQLite.
-
Redis
- Cache w Plazerze i Flaemie.
Poza codziennym zestawem: MongoDB (dokumentowa baza NoSQL), ClickHouse (analityka w czasie rzeczywistym), Cassandra (rozproszona, wysoka dostępność).
Infrastruktura i narzędzia
Prawie każda moja usługa stoi w kontenerze na Docker Compose, za Nginxem jako reverse proxy. Ponad setką repozytoriów zarządzam przez Gita i vulp, a kod piszę w VS Code.
-
Git
- Podstawa pracy nad ponad setką repozytoriów, a do zarządzania nimi naraz używam vulp.
-
Docker
- Prawie każda moja usługa stoi w kontenerze, najczęściej na Docker Compose za Nginxem.
-
Nginx
- Reverse proxy przed wszystkimi usługami na moich serwerach.
-
VS Code
- Główny edytor kodu.
-
Visual Studio
- IDE do C# i .NET.
Poza codziennym zestawem: Kubernetes (orkiestracja na dużą skalę), Grafana (dashboardy z metrykami), JetBrains IDEs (IDE od JetBrains).
Z ciekawości
Języki, w których zbudowałem jedną konkretną rzecz, żeby zrozumieć, jak działa od środka: bazę klucz-wartość w Zigu, solver SAT w Haskellu, giełdę w Solidity, własny język w F#.
-
Dart
6 013 linii
- Silnik arkusza kalkulacyjnego z własnym językiem formuł.
-
Solidity
4 688 linii
- Zdecentralizowana giełda z pulami płynności, stakingiem i timelockiem.
-
Ruby
37 655 linii
- Własny framework webowy oparty wyłącznie na bibliotece standardowej, z obsługą WebSocketów.
-
Zig
44 583 linie
- Wbudowana baza klucz-wartość z logiem zapisu.
-
Haskell
3 609 linii
- Solver SAT z parserem formuł i narzędziami do logiki zdań.
-
Scala
3 133 linie
- Prosty silnik szachowy.
-
F#
3 017 linii
- Mały, statycznie typowany język programowania z rodziny ML napisany od zera.