v.38 veckorapport
Senaste dagarna har det gått långsamt på grund av andra saker. Dock får jag en mental distans som är viktig. Jag utvecklar grund-systemet och det är många faktorer som ska förenas i en gemensam struktur som möter ett flertal behov.
Kommande dagar ser jag dock fram emot mer fokuserad utveckling.
Föregående version trekyl.com är provisorisk. Se den som en modell i miniatyr av den riktiga versionen. De senaste dagarna har jag arbetat med att förädla den provisoriska versionen till en grundstruktur för den riktiga versionen. Det kan vara lockande att bygga vidare på miniatyrer i tron om att man är nära målet, men det fallerar alltid längre fram eftersom grunden inte existerar.
När jag nu utvecklar grunden så är den inte onödigt ambitiös och tidskrävande, men högst realistisk och adekvat. Jag kämpar emot mina krav på perfektion som ibland leder till onödigt ambitiösa lösningar. Dock har den drivkraften väglett mig till riktigt bra lösningar. Den drivkraften är viktig, men försiktighet måste iakttas för att inte fastna i ineffektiv idealism.
Jag gjorde grundareten förr, men jag hade valt helt fel teknologi (PHP som bas). Eller... Jag upptäckte bättre teknologier senare (minimal PHP och 95% Javascript med websocket på egen server). Som bekant var det min ofrivilliga väg till Linux som visade sig vara vägen till "det heliga landet" i teknologisk mening. Nu har jag dock med säkerhet landat i vilka super-fundamentella teknologier jag använder, och kan med säkerhet bygga grunden för applikationen.
Eftersom grunden nu är så bra, så är det lockande att försöka implementera den fullskaliga lösningen för kryptering, som jag tidigare motvilligt skippade. Dock kommer jag, även vid denna eftertanke, skippa krypteringen, eftersom det är ett onödigt "kaninhål" att falla ner i. Inledningsvis fattade jag beslutet att skippa krypteringen, grundat i den mogna slutsatsen att det är långt över det faktiska behovet hos användaren. Det gäller fortfarande. Det är dock lockande för en teknik-entusiast som mig själv att försöka implementera allt möjligt som är fascinerande men onödigt och tidskrävande.
Övergripande struktur
Jag utarbetar ett generellt ramverk I Javascript. Javascript är underbart flexibelt när man väl lärt sig tillräckligt. Funktionell objektorienterad programmering är min nya favorit.
Del 1 - basfunktioner
Ett bibliotek med basfunktioner. Exempelvis signalsystem.
Del 2 - meta-ramverk
Ett meta-ramverk som innehåller funktioner för att utöka sig själv.
Del 3 - ramverkskomponennter
Specifika ramverkskomponenter utökar meta-ramverket (del 2) med sina specifika gränssnitt.
Ramverkskomponenter kan använda basfunktioner (del 1)
Del 4 - ramverk
Kombinationen av meta-ramverket och ramverkskomponenter producerar ett konkret ramverk som innehåller all funktionalitet med tillhörande gränssnitt från alla komponenter som lades till via meta-ramverket funktioner. Ramverket är modulärt och skulle till och med kunna utökas dynamiskt under runtime, men det är ej nödvändigt. Den modulära lösningen forserar god struktur och ren, skalbar och hanterbar kod vilket är del av syftet.
Viktig del: en av komponenterna är: central lokal data-store för almän data. Ett plugin håller all sin data privat, och publicerar data formellt i data-store. Andra plugin förlitar sig bara på data-store och känner alltså inte till existensen av andra plugin och behöver inte det för att få relevant data. Detta ger struktur för spridning av data. Detta garanterar p kså att data kopplat till ui är separat från data som publiceras. Annan kod ska aldrig rota i UI för att hitta data, o h ska inte behöva känna till vilket specifikt plugin data kommer ifrån (flera plugin kan därför uppdatera samma data-store segment)
Del 5 - Plugin
Varje komponent som vätter mot användaren av sajten är ett plugin. Exempelvis olika delar av kalkylatorn. (gäller också plugons utan gränssnitt)
Plugins använder ramverket (del 4) samt har tillgång till basfunktioner (del 1).
Att planera och skapa:
- metod att dynamiskt ladda stilmallar för plug in. (api funktion, ange lista, få tillbaka alla mallar)
- princip: mallar existerar enbart I association med plugin.
- init funktion för ramverk som har kontroll över sidans uppstartsprocess, callback eller signal vid uppstart. Signall/callback för hela livscykeln.
- Det lokala data-lagret/api som agerar mot servern. Är lokal central data-store Inga plugin agerar direkt mot servern.