
Bilden illustrerar ett rekursivt system. En Matkalkyl-app körs i en annan Matkalky-app - dÀrför dubbelt upp av allt. Exemplet visar pÄ en strukturell bieffekt av modulÀr systemarkitektur och bilden Àr ett intyg pÄ det. (WeblÀsaren Àr Zen Browser.)
Rekursivt system som proof of concept
MÄlet Àr ett perfekt modulÀrt system. Jag tycker mig ha kommit tillrÀckligt nÀra det nu. HÀr Àr ett proof of concept. Exemplet finns för stunden pÄ trekyl.com.
Bilden ovan visar hur den nya versionen av Matkalkyl kan starta en kopia av sig sjÀlv och köra den kopian som ett plugin i sig sjÀlv. Systemet klarar av att starta en kopia av sig sjÀlv i sig sjÀlv. Systemet kan Äterskapa sig sjÀlv i sig sjÀlv, samt skapa andra tÀnkbara appar i sig sjÀlv.
I bilden Àr det alltsÄ tvÄ identiska men skilda system som körs samtidigt, och den ena körs via den andra. BÄda har sin egen uppkoppling till servern. Detta liknar faktiskt den modularitet som Àr standard i Linux, exmeplevis att en terminal kan köra text-editorn Neovim som i sin tur kan köra en terminal, som i sin tur kan köra Neovim, eller varför inte Tmux och sedan allt möjligt annat. KÀnslan i Linux Àr att allt kan bÀddas in i allt och allt kan kopplas samman med allt. Linux har inspirerat mig till mycket bÀttre systemdesign.

Rekursiv inbÀddning: Text-editorn Neovim kör en terminal i ett "floating window" som i sin tur kör en annan instans av Neovim.
HÀr Àr ytterligare en bild:

Telescope integrerat i Neovim, för navigering bland filer. Exempel pÄ integrering via hög modularitet.
Innebörd
Bilden lÀngst upp Àr ett proof of concept vilket demonstrerar att Matkalkyl har startat en kopia av sig sjÀlv i sig sjÀlv - dÀrför Àr det dubbel uppsÀttning av allt. Den tekniska möjligheten som demonstreras hÀr Àr en bieffekt av den goda systemarkitektur jag strÀvat efter. Exemplet demonstrerar en konkret effekt av ett system med hög abstraktionsnivÄ.
AnvÀndningsomrÄde
Ett modulÀrt system ger mÄnga möjligheter. Exempelvis kan enkelt byggas en live-vy dÀr en person kan ha inblick i en vÀns kaloriförbrukning och andra aktiviteter. Avancerade funktioner kan lÀggas till utan specialprogrammering. Vi vill uppnÄ sÄ liten mÀngd specialprogrammering som möjligt, och alltid kapsla in det i vÀl avgrÀnsade moduler. Det gör att systemet övertid inte utvecklar oavsiktlig komplexitet som sedan stjÀlper hela systemet. Vi vill ha möjlighet att i hög utstrÀckning kunna utveckla avancerade funktioner som vi Ànnu inte förutsett, vilket dÀrför stÀller höga krav pÄ modulÀr struktur samt nödvÀndiggör en hög grad av abstraktion som omsluter de konkreta modulerna.
Konceptuell renhet
Nu upplever jag att systemet Àr konceptuellt "rent" eftersom systemet Àr modulÀrt. Denna demonstration indikerar att systemet har en hög grad av flexibilitet och samtidigt Àr konstruerat pÄ ett hÄllbart sÀtt. Flexibilitet kombinerat med hÄllbarhet Àr en intellektuell utmaning. NÀr ett system tillÄter flexibilitet utan disciplin uppstÄr beroenden mellan komponenter som sedan leder till att systemet blir oflexibelt och ineffektivt. Utmaningen Àr att utveckla grundstrukturen som tillÄter flexibilitet men samtidigt hindrar att komponenter utvecklar beroenden som sedan hindrar det övriga systemet frÄn att utvecklas, varav systemet har blivit raka motsatsen till flexibelt.
För att ett system ska bli konceptuellt "rent" mÄste flera aspekter övervÀgas vÀl:
- BestÀmma kategorier för moduler (grundfunktioner, ramverk, ramverks-grÀnssnitt, plugins, app, app-grÀnssnitt)
- Relationer mellan kategorier (vem skapar vem, vem innehÄller vem, vem kan nÄ vem och hur)
- Struktur för modulers interna innehÄll
- Struktur för vad moduler exponerar för andra moduler,
- Struktur för modulers funktioner,
- Struktur för modulers data som de exponerar till andra moduler,
- Struktur för signaler som moduler avger (ex NĂTVERK_NERE)
- Struktur för modulers livscykel (skapande, varande, avvecklande).
Detta ska göras med hÀnsyn till olika domÀner sÄ som nÀtverk, data, grÀnssnitt, signalsystem etc.
Tankar kring perfektion och vision
NÀr jag vÀl har en vision Àr jag inte tillfreds förres jag nÄtt mitt mÄl. Ibland kan mÄlen kÀnnas omöjliga, och jag sjÀlv vet inte riktigt vad jag söker, men jag vet vad jag inte söker. Mina visioner Àr svÄra att uppnÄ dÀrför att jag nÀstan aldrig Àr nöjd. Ibland undra jag om min drivkraft grundas i ett orimligt ideal om perfektion som Àr omöjligt att uppnÄ. SÄ Àr inte fallet. Jag har ibland upplevt perfektion som ett resultat av mitt arbete - Àven om det senare kan förbÀttras ytterligare. Via rÀtt fokus kan jag investera tid för att Ästadkomma perfektion allt oftare och i flera avseenden. Saker som görs vÀl bestÄr ofta inte övertid, ÀndÄ. Att lÀgga extra tid pÄ att göra saker och ting vÀl lönar sig i lÀngden - att skapa bestÄende lösningar i alla aspekter av livet.
StrÀvan efter perfektion handlar om att vÀgra acceptera tillkortakommanden som jag i mitt hjÀrta vet att jag kan förbÀttra. Exempelvis demonstrerar jag i denna artikel en nivÄ av systemarkitektur som var ganska svÄr att framstÀlla. Jag var medveten om att en högre nivÄ var möjlig, och perfektion handlar precis om att inte ge upp den högre standarden som hjÀrtat kan se. NÀr jag nÄr den högre standard som mitt hjÀrta kan se, dÄ uppstÄr kÀnslan av perfektion, vilket Àr en genuint god kÀnsla. I övrigt verkar det som att den nivÄ av programmering jag nu ger mig i kast med krÀver perfektion i allt, eftersom Àven smÄ misstag straffar sig hÄrt (JavaScript i sig sjÀlv stÀller sÄdana krav).
Inte sÀllan Àr det dock lÀttare för mÀnniskan att ignorera en högre standard, dÀrför att engagemanget som krÀvs för en fullstÀndig lösning Àr mer Àn vad individen tycker Àr bekvÀmt. Perfektion handlar om att Äterkommande ge sig i kast med de svÄraste uppgifterna. Jag bekÀnner Àrligt att sakförhÄllanden faktiskt kan förbÀttras (jag kan nÄ en högre abstraktionsnivÄ, jag kan organisera koden bÀttre, etc...), sÄvida jag sjÀlv vÀljer att anstrÀnga mig för att förbÀttra mina egna förmÄgor. Min strÀvan efter perfektion Àr alltsÄ ocksÄ - utöver att skapa ett bra system - ett sÀtt att förbÀttra mig sjÀlv, vilket för mig ger livsmening och livsglÀdje - sjÀlva processen av att möta friktion och att utvecklas via det.
Det Àr ocksÄ det som ger kÀnsla av mening i livet: att ta sig an nÄgot som upplevs vara lÄngt över ens kapacitet. Linux, JavaScript (ren sÄdan) fÄr mig ofta att kÀnna mig sÀmst och oförmögen, men nÀr jag tittar tillbaka i tiden upplevs tidigare trösklar numera vara rena barnleken.
Notis om Windows 11
Det Àr tydligen sÄ att Windows 11 Àr mycket kritiserat ur sÀkerhet och integritetsperspektiv. MÄnga tycks överge det. Jag bytte för flera Är sedan till Linux. Windows har enligt folk blivit Ànnu vÀrre nu pÄ senare tid. DÄ Windows 11 inte tillÀt mig skapa ett lokalt konto, utan krÀvde ett online konto för att kunna anvÀnda datorn, och hindrade mina försök att kringgÄ det, rÀknade ut att jag lika gÀrna kan lÀgga tiden pÄ att lÀra mig Linux istÀllet för att krÄngla med Windows. En fördel med Linux Àr att Linux-kunskap bestÄr. Jag var förvÄnad över att program aom jag anvÀnde för 20 Är sedan i Linux fortfarande fungerar pÄ samma sÀtt och fortfarande Àr gold-standard (exempelvis rsync). Linux har ocksÄ mognat mycket de senaste 15 Ären. DÀrtill kan man mycket lÀttare lÀra sig Linux idag med hjÀlp av ChatGPT eller annan AI.