Så kan man ju inte säga. Hursomhelst, knogar på gör det! Min build environment dog av någon anledning, så nu har jag inte längre någon REPL inbyggd i min editor. Klarar mig fortfarande bra med programmeringen av applikationen, men slösade typ en dag på att försöka få det att fungera. Roligt nog tror jag att min ändra-kompilera-testa cykeltid har minskat, för att använda SBCL i en separat terminal är snabbare än att ha den kopplad innifrån editorn.
Har börjat programmera på månadsvyn, och det går fint. Har brottats mycket med att få text att skrivas ut på korrekt plats utan att för den delen krocka undan grafiska komponenter... bråk med CLIM-standarden eller McClim som vanligt, med andra ord. Nu fungerar det dock och jag kan använda det jag gjort här i dags-vyn när jag sätter igång med den senare.
Har också byggt en del funktionalitet så att jag kan visa flera almanackor samtidigt i månadsvyn, men behöver refactora lite så att jag använder en explicit struktur för att tala om för vyer vilken information de ska visa innan jag fortsätter med lite mer av månadsvyns funktionalitet.
Såhär ser månadsvyn ut nu:
Projektlogg för mitt sommarjobb på IDA(@LiU), där jag implementerar ett GUI till almanackslabben för kursen Funktionell programmering och lisp.
2010-08-17
2010-08-03
År nästan färdigt
Nu skriver jag ut totalt bokade tider för året och månaderna, kan komma att ändra lite på hur de ser ut men funktionaliteten finns i alla fall.
Har också fixat så att dagar där överlapp finns blir röda, och har man implementerat överlapp så ser man tydligt var på dagen överlappet finns.
Såhär ser det ut:
Nu återstår att fixa så att man kan se ledighet istället för det som är bokat.
Har också fixat så att dagar där överlapp finns blir röda, och har man implementerat överlapp så ser man tydligt var på dagen överlappet finns.
Såhär ser det ut:
Nu återstår att fixa så att man kan se ledighet istället för det som är bokat.
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:
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.
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.
Subscribe to:
Posts (Atom)