Praktyczne projekty na GitHubie: od sektorów rozruchowych po obliczenia na GPU
Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał

Zastrzeżenie: opisane tu projekty są wynikiem mojej własnej, samodzielnej pracy, wykonanej bez użycia AI. Sam artykuł powstał z pomocą AI.
Większość tego, o czym tu piszę, bierze się z budowania rzeczy. Ten wpis to mapa mojego publicznego kodu na github.com/michalasobczak: czym jest każdy projekt i gdzie przeczytać więcej. Projekty hobbystyczne są w jednym repozytorium, retro-lab, a kod do moich książek w drugim, publications. Kilka projektów ma własny, szczegółowy opis.
Wiele z nich łączy jedna idea: weź jeden mały algorytm, w tym przypadku projekcję 3D, i uruchom go na bardzo różnych maszynach. W przeglądarce, na 8-bitowym komputerze, w sektorze rozruchowym, na mikrokontrolerze i wreszcie na GPU. Każdy port pokazuje coś, co poprzedni ukrywał.
| Katalog | Rok | Język | Co to jest | Artykuł |
|---|---|---|---|---|
| retro-lab/x86-bootloader | 2005 / 2018 | NASM | grafika 2D w trybie chronionym, 3D w 512-bajtowym sektorze rozruchowym | czytaj |
| retro-lab/c64 | 2018 | BASIC, C, asembler 6502 | renowacja Commodore 64 i renderer 3D | czytaj |
| retro-lab/js3d-engine | 2013 / 2018 | JavaScript | ręcznie napisany silnik 3D na płótnie 2D | czytaj |
| retro-lab/esp8266 | 2018 | Lua | ta sama matematyka 3D na mikrokontrolerze | czytaj |
| publications/simple-hpc | 2021–2023 | Java, OpenCL | kod do książki Simple High Performance Computing | czytaj |
| publications/ruby-mikrouslugi-konteneryzacja | 2018–2019 | Ruby, C | kod do książki o Ruby, mikrousługach i konteneryzacji | czytaj |
| publications/jakosc-oprogramowania | 2019 | Ruby, Lua, Perl, COBOL… | kod do książki o jakości oprogramowania | czytaj |
Blisko sprzętu #
Bootloader x86. Dwa programy uruchamiane z obrazu dyskietki bez systemu operacyjnego. Pierwszy przełącza CPU w 32-bitowy tryb chroniony i animuje grafikę 2D z podwójnym buforowaniem MMX; drugi rysuje projekcję 3D liniami Bresenhama i mieści się w 512 bajtach, które ładuje BIOS.

Commodore 64. C64 z pudełkiem, wyczyszczony i odnowiony, podłączony do laptopa przez grabber USB i zaprogramowany na trzy sposoby: w BASIC-u 2.0, żeby zmierzyć koszt obliczeń, w C z cc65 i bezpośrednim dostępem do VIC-II zamiast biblioteki TGI oraz w asemblerze 6502 z DASM.
Grafika wszędzie #
generic i esp8266. Punkt odniesienia dla wszystkich portów: silnik 3D z 2013 roku z teksturowaniem, oświetleniem zależnym od odległości, sortowaniem algorytmem malarza i wykrywaniem kolizji, napisany bez WebGL. Jego matematyka projekcji działa w Lua na ESP8266 z prędkością 300 wierzchołków na sekundę przy 80 MHz i 600 przy 160 MHz.
Książki i ich kod #
Repozytorium publications zawiera przykłady do moich książek:
- simple-hpc i opencl: Simple High Performance Computing. Część 1 to elektronika i budowa komputera w symulatorze TINA-TI (napięcie elektryczne, prawo Ohma, symulacja obwodów). Część 5 to OpenCL z poziomu Javy (JOCL): testy przepustowości pamięci, sortowanie, redukcja, Monte Carlo π, projekcja 3D z C64 na GPU, szyfrowanie DES 40 razy szybsze niż na CPU i przetwarzanie tekstu.
- ruby-mikrouslugi-konteneryzacja: Programowanie w języku Ruby. Mikrousługi i konteneryzacja. Wnętrze Ruby (ObjectSpace, pamięć, współbieżność, rozszerzenia w C), Rack i minimalny Rails, RabbitMQ, testowanie, wdrażanie z Nomadem i GitLabem oraz kompletny projekt mikrousługowy.
- jakosc-oprogramowania: Jakość oprogramowania. Podręcznik dla profesjonalistów. Przykłady testów w Cucumberze, Minitest i busted (Lua) oraz kod legacy w Perlu i COBOL-u.
Po co to wszystko #
Żaden z tych projektów nie był potrzebny w pracy, a wszystkie się w niej opłaciły. Napisanie sektora rozruchowego uczy, co system operacyjny robi za ciebie. Przeniesienie tej samej matematyki na pięć maszyn uczy mierzyć, zanim zaczniesz optymalizować. Właśnie taką wiedzę wnoszę do pracy nad architekturą i infrastrukturą i właśnie dlatego wciąż buduję rzeczy własnoręcznie.