2010-07-23

Kodkvalitet

Insåg att jag ofta känner mig osäker på om min kod fortfarande kommer att fungera när jag använder lisp, mycket djup rekursion, lambdauttryck och annat häftigt som kan gå fel. Så jag skrev en unit-test-modul. Den tog längre tid än jag trodde att skriva, runt 1½ dag.

Även om det ger mig större självsäkerhet i att nyttja och utöka kodbasen så känns det som om tiden rinner mig ur händerna. Jag har ännu inte fått någon vy att fungera, och vecka 29 tog just slut. Enligt min planering borde jag bli färdig med den grundläggande funktionaliteten nästa vecka - det kommer jag inte vara. Utöver det har jag en vecka till avancerad funktionalitet och tre till dokumentation och integrering. Tur det, för det kommer att bli tight om tid.

Jag har alltså ungefär 5 veckor på mig, totalt. Jag är inte riktigt säker på hur det kommer att te sig med att få det grafiska att fungera, det verkar antingen som om det ska gå som en dans efter att man fattat galoppen - eller som om det kommer bli som att kräla på glas med bakbundna händer. Jag hoppas att det kommer ta max 1 vecka per vy (tot. 3 v.) så att jag får två veckor till integrering och dokumentation - det kommer nog behövas.

Det känns alltså dåligt. Samtidigt känns det bra, för jag har ju i alla fall äntligen fått en hel del kod skriven - det gör saken lättare att bära.

2010-07-21

Almanackasobjekt -> CLOS, check

Spenderade gårdagen och idag med att skriva kod för att traversera almanacksobjektsträden (år->månad->dag->möte) och konvertera dem till CLOS-objekt.

Anledningen till att jag vill mappa almanackans objekt till CLOS-objekt istället för att använda dem ad-hoc är att Clim utgår från att man har CLOS-objekt som man vill visualisera med presenters. Det går, tekniskt sett, att skriva presenters utan CLOS-objekten, men jag vill kunna följa det som är mest common-case för att lättare kunna ta till mig hjälp från manualer, guider och andra programmerare.

Så som det ser ut nu så har jag objekt som heter clim-år, clim-månad, clim-dag och clim-möte. Egentligen hade jag kunnat effektivisera det hela genom att bara ha clim-möte, som håller reda på när det sker. Det hade dock gjort det svårare i framtiden. När jag (imorgon) börjar med att skapa år-vyn så vill jag ju inte visa varje enskiljt möte, utan vill visualisera dagar (nestlade i månader - det finns stöd för men verkar lite småklurigt). Jag var lite orolig över att det kan bli ineffektivt att behöva traversera igenom alla årsalmanackor varje gång vi behöver uppdatera vår information, men det verkar inte så farligt - vi får se hur IDA-burkarna klarar av det.

Koden ser ut såhär: http://dl.dropbox.com/u/6174666/almavis.lisp

Har fortfarande inte fått klarhet i om push går att använda med :after funktioner, men det är någonting jag tar i tu med först när jag har någonting visuellt att uppdatera.

Kan också nämna att jag ännu inte har koden i något VCS, utan använder mitt DropBox account. Där har jag hyfsad versionering, tillgång till koden från alla mina olika datorer och säker backup. Personen som skulle fixa en dev-server åt mig är just nu ganska upptagen med de konsultjobb han har, men det har ju som märkts inte påverkat så mycket.

Det känns som om jobbet går bra. Närhelst jag sitter och får kod gjord känns det mysigt, medan jag känner mig lite hopplös när jag sitter och läser Clim-dokumentation. Nu känns det dock bättre än det gjorde när jag började med att försöka implementera års-vyn, då visste jag inte var jag skulle börja. Nu vet jag att jag behöver fixa presenters för mina objekt, och att de behöver klara nesting.

2010-07-15

Clim är svårt

För att vara så flexibelt så behöver Clim såklart också vara svårt. Det finns massor av exempelapplikationer med, så jag har kollat på en del av dem för att se om jag kan imitera för att snabbt bygga min applikation. Verkar inte så, allt för många macron används så det blir svårt att se vad som är funktionskod som kan kopieras och klistras, och det är mycket jag inte vet hur eller varför det används - trots att jag läst en del av manualen. Att de gör avancerade applikationer på väldigt få rader kod är ju lovande, men nu ska jag gräva ner mig i lite guider och manualer för att förstå grunderna lite bättre.

En ok dag

Har fightats mycket med ASDF-systemet och uppdelning av projektet i olika filer idag. Den mesta av tiden gick åt till att lära mig hur paket fungerar i CL. Fixat så att mitt system kan se vilken funktionalitet studenten implementerat, det var inte speciellt svårt - mest anrop av typen (find-symbol "överlapp" 'common-lisp-user). Det krävde dock också krävde att jag lärde mig pakethantering.

Anledningen till att pakethantering behöver användas är för att man väldigt starkt rekommenderas att göra det när man programmerar Clim. Clim använder nämligen ett eget paket för sina egna funktioner, och antingen så gör man sitt eget eller så skriver man sin kod i det paketet - inte nice. Detta medförde att jag behövde fixa en visa-grafiskt funktion i default-paketet (common-lisp-user) som almanackan kommer vara definerad i, vilket gjorde det svårt att fixa dependencies och sånt utan att ha ett ordentligt ASDF-paket. Hittade dock en väldigt bra irc-kanal (#lisp på freenode.net) där erfarna lisp-användare kvickt svarade på mina frågor. De dirigerade mig till bra information om paket och hur man utformar dem smidigast.

Det kan hända att jag behöver ändra en del av de här sakerna när jag kör på IDA (ASDF finns med i AllegroCL sedan 7.0, vet ej vilken version IDA kör) men det är ganska trivialt att fixa. Det finns större problem att se upp för: CLIM standarden är lite tvetydig ibland, så McClim och Allegros implementationer av standarden är tydligen inte alltid de samma - därför tycker jag att det är trevligt med den extra veckan planerad för dokumentation jag gav mig själv i min milestone-plan i en tidigare blogpost.

Imorgon kommer jag sätta igång med att implementrera års-vyn. När jag är färdig med den så tänker jag först se om det fungerar att köra på IDAs datorer, sedan forstätta med månads- och dagsvyerna.

2010-07-14

Bra dag

Har jobbat en hel del idag, äntligen fått igång SBCL+Clim på riktigt! Alla tidigare metoder har varit struliga, och efter mycket om- och men så har det visat sig att den metod som enligt instruktionerna skulle vara mest komplicerad (installera från source taget via CVS) var väldigt lätt, tog väl inte mer än 4-5 timmar. Jösses.

Nu har jag i alla fall lyckats fixa ett tudelat fönster som jag kan fylla med mina egna paneler, dvs mitt eget innehåll.


Har också skickat iväg ett mail där jag frågade om push/pull-problemet på clim-listan. Clim-standarden har tydligen en funktion som gör regelbunden pull, men push (som prestandamässigt är att föredra) kan kanske gå att implementera utan att bryta abstraktionslagren trots allt! Man kan i vilken source-fil man vill appenda :after funktioner till Generic-funktioner (CLOS) så att t.ex. almanacks-visualisering kan säga till att så fort en uppdateringsfunktion körts så rita om visualiseringen. Det fina är att existerande kod inte skulle bero på visualiseringskoden, inte ens känna till den. Vi vill ju inte blanda in en massa visualiseringskod i almanackan som redan är väldigt svår för studenterna att vira huvudet om.

Har också strukturerat upp hur jag ska implementera årsvyn, såväl som lite övrig funktionalitet.

2010-07-11

I lägenheten nu

Jobbar idag, söndag, eftersom jag inte känner att jag fått tillräckligt gjort under veckan. Sitter nu i en lägenhet jag har för mig själv, med arbetsrum och bra skrivbord att jobba vid. Arbetsron här är bra.

Har sshfs så att jag kan koda lokalt, för latencyn ligger runt 300ms vilket gör att X11-forwardat emacs-allegro-cl är sjukt söligt att jobba i. Nu tidigt i arbetet då jag inte ännu är intim med CLIM så kommer jag säkert behöva göra många snabba koda-testa cykler, vilket blir långsamt och jobbigt eftersom jag måste ladda in den nya filen i emacs-allegro-cl, C-c C-b, C-x o, (test) ... inte så farligt men när varje knapptryckning har en latency på 300ms så blir det lite jobbigare.

Ligger därför ute med mail till mailinglistor där jag frågar om råd för att få SBCL och McClim att fungera lokalt. Tills dess så härdar jag och programmerar som i sirap.

Lite milestones jag tänkt mig:

Imorgon börjar vecka 28.
v28
v29
v30 Grundläggande funktionalitet färdigt
v31
v32 Börja skriva användarinstruktioner
v33
v34 Leverans fredag

Räknat i veckor ser det ju bra ut, en down 7 to go. Det är dock aldrig bra att räkna i veckor, det ser för bra ut. Egentligen är det totalt 36 dagar kvar. Inte mycket. Jobba jobba.

Det jag börjar med att göra idag är att skriva ut information från almanackan i GUIn, det tänker jag först göra genom att sätta ett fönsters titel till information vi fått från almanackan.

Därefter tänker jag skicka ut lite mail och fråga CLIM-programmerare om push/pull-problemet, det borde finnas någon standardlösning för pull, skulle jag tro.

Efter det börjar jag med att rita ut ett fönster uppdelat i två delar, vänster för kontrollytan och höger för en dagsvy. Efter det bör jag dela upp funktionalitet i mindre user stories och börja med implementationen på allvar.

2010-07-08

Lite problem, löser sig

Gav upp att köra någonting på IDAs datorer medan jag bor här på vandrarhemmet, det tog 12 minuter att få upp emacs-fönstret efter att jag kört emacs-allegro-cl kommandot. Det blir dock bättre från och med lördag, då jag flyttar till flickvännens föräldrars gamla lägenhet, där de har mycket bättre anslutning. Utifall fördröjning gör det jobbigt har jag fixat så att jag kan programmera lokalt fast så att jag skriver till IDAs filsystem, så att det bara blir jobbigt när jag testar, inte när jag programmerar.

Har inte jobbat så mycket som jag ska den här veckan. Får nog förlänga jobbperioden med en 3 dagar mot slutet för att kompensera, deadlines bör fortfarande hålla. Fick igång McClim på SBCL lokalt, och de testprogram de hade där visade att CLIM har mycket smidig funktionalitet för utritning av interface-saker, som gör att mycket av arbetet bör bli lätt när jag väl fått en bra förståelse för systemet.

Nu ska jag bara se till så jag kan köra almanackan på SBCL, sedan se om jag kan visa någon information från almanackan i ett CLIM-fönster. Efter det bör det vara dags att börja med funktionalitet.

2010-07-03

Status

Eftersom det inte var 100% säkert att IDAs servrar skulle stanna uppe hela sommaren (kanske en veckas avbrott) så tänkte jag fixa en lokal environment först. Har jobbat med att få SBCL och McClim att fungera på min virtuella Ubuntumaskin idag. Får jag dem inte att fungera imorgon så börjar jag programmera på projektet i alla fall, och får lita på att IDAs servrar stannar uppe hela sommaren.

SVN servern är tydligen inte heller uppe ännu, men är på väg. Personen som fixar det åt mig håller på att fixa ett företag som ska hosta development-boxes, och de planerar att vara ready-for-business tidigt 2011. De ska fixa en tidig (och gratis) beta-ish box åt mig, vilket borde vara gjort idag eller imorgon.

2010-07-02

Taiwan

Har just anlänt till Taiwan, varifrån jag kommer utföra jobbet. Nu är klockan 01:00 den 2a Juli, lokal tid. Börjar när jag vaknar efter en natts sömn, något jag verkligen behöver efter att ha flyttat ut en lägenhet och flugit ~24h.

En kamrat fixar en server åt mig som bör kunna fungera imorgon eller i övermorgon, så imorgon börjar jag med att sätta upp en lisp-environment som jag kan köra lokalt, och som ska verka fungera på samma sätt som IDAs.