2010-08-01

So far so good, 20 arbetsdagar kvar

Äntligen äntligen äntligen! Nu känner jag att bollen är i rullning, så att jag inte längre behöver jobba med att bygga upp momentum utan kan arbeta med saker som direkt ger resultat.

Har ju suttit och behöver läsa in mängder med dokumentation så fort jag försökt göra någonting tidigare, men nu har jag:


  • Konvertering från almanackans typer till CLOS-objekt
  • Kan upptäcka funktionalitet och förändra beteende därefter
  • Rita ut grafik från data, representera objekt
  • Välja vad som ska vara klickbart och reagera på klickningar


Med detta har jag nästan byggt färdigt års-vyn, och bör inte behöva mycket mer för månads- och dagsvyerna. Det återstår en del att göra, men så här ser det ut nu:



Här finns funktionen längd-av-tidsperiod implementerad, vilket almavis reagerar på genom att färga dag-rutorna efter hur många minuter som är bokade.


Jämför med när almanackan inte har längd-av-tidsperiod implementerad. Nu räknar jag istället antal möten under dagen, och har bara fyra nyanser att välja mellan. Resultatet blir att januari månad, där det bara ligger ett möte per dag, förlorat all sin lyster.

Framtida problem:
McClim, som jag använder, är utvecklat av obetalda entusiaster. De har för det mesta gjort ett bra jobb, men det huvudsakliga sättet att byta layout på fungerar inte på den här implementationen. Folk löser det genom att inte använda flera layouter och byta mellan dem, utan istället ha en layout där man byter ut innehållet. Eftersom jag ändå ska porta över mitt jobb till Allegros Clim så tänker jag inte hålla på med sådant.

Jag har planerat att göra en test-integrering när år-funktionaliteten är färdig, för att se vilka problem som uppstår och bättre kunna uppskatta när jag behöver börja med den slutgiltiga integreringen. Förhoppningsvis kan jag skriva lite kod som automatiserar det värsta av portningsjobbet, vi får se hur generaliserbart det problemet är. Hur som helst så garanterar det ju också att det i alla fall faller något användbart i studenternas knän. Integreringen ger också tillfälle att testa om jag kan använda den vanliga metoden för layout-byten, så jag väntar med allt sådant till dess.

Push-pull problemet som jag ordat om många gånger bör gå att lösa på något sånt-här vis:

(let ((old-boka (fdefinition 'boka)))
   (setf (fdefinition 'boka)
      (lambda (&rest argument)
         (prog1
             (apply old-boka argument)
             (meddela-almavis-om-uppdatering)))))

Återstår att försäkra sig om att fdefinition-grejjerna kommer fungera som de ska, och att fundera ut just hur det är lämpligt att informera en CLIM-applikation om att den behöver rita om displayen (den verkar dock göra det nästan varje sekund, så det är inte säkert att det behövs, dock) - man vill inte bara kalla på redraw-funktionen utifrån eftersom applikationen har ett eventsystem man inte vill pajja.

Ska också hälsa från Robert Strandh, den första utexaminerade D:aren. Han jobbar som professor nere i Frankrike (Bordeaux, har jag för mig) och hänger på #lisp på freenode. Han har implementerat en hel del av McClim och har svarat på många frågor och hjälpt mig otroligt mycket med att orientera mig i ramverket, och har även hjälpt till med annat (fdefinition-hacket var hans idé). Jag beundrar honom för att han står ut med mina frågor på sin fritid, och uppskattar det högt.

No comments:

Post a Comment