
AcmeCal: Selvgjort er velgjort
Jeg har længe savnet et kalenderprogram der var designet til at opfylde mine behov. I går aftes fik jeg så et par timer til overs, så hvorfor ikke skrive sit eget? Det kunne måske være interessant at dele lidt ud af nogle få, spredte tanker jeg har gjort mig:
Brugergrænseflade: Mine to foretrukne brugergænseflader er Unix' komandolinje og min teksteditor. Så selvfølgelig skal de udgøre brugergrænsefladen til mit kalendersystem. En håndfuld enkle småprogrammer der løser én opgave og starter min foretrukne teksteditor når jeg skal redigere ting.
Informationsmængde: Less is more. Det er sjældent at jeg bruger mere end et mødetidspunkt og en overskrift. Eventuelt har jeg brug for et sluttidspunkt og en længere beskrivelse. Gentagende møder er for kompliceret, så det gider jeg ikke lave.
Dataformat: Skal vi redigere ting i en teksteditor skal vi selvfølgelig bruge et menneskevenligt dataformat. Hører jeg nogen sige XML? Nej, det er ikke til at redigere i hånden. Et meget bedre valg er YAML. En bonus er så at beskrivelsesfeltet kan indehold alt den struktur man måtte ønske ved at bruge YAML.
Id-strenge: Hvert møde skal selvfølgelig have en (næsten-)unik identifikation. Hverken titlen eller tidspunktet går, da de begge skal kunen redigeres. Jeg vil genre kunne merge forskellige kalendre, så fortløbende id-numre går ikke og UUID'er er ikke brugervenlige. I øjeblikket bruger jeg bare et timestamp med centisekund-opløsning. Det er hverken garanteret unikt eller specielt brugervenligt. Det sidste løser vi ved at konvertere tallet til et vrøvleord med perl modulet String::Koremutake.
Med 400 linjer perlkode og absolut ingen dokumentation er jeg klar til at præsentere AcmeCal 0.1. Men selvfølgelig skal du hellere skrive dit eget system.
Kommentarer (4)
Måske en notits om at din pakke skal bygges med det mindre udbredte Module::Build, der findes i pakken libmodule-build-perl på Debian.
Det er naturligvis sjovt at gøre det selv, men nogle gange er det også fedt at kunne stå på skuldrene af andre.
Hvis du på noget tidspunkt skal lege med datoer i JavaScript, kan jeg anbefale at tage et kig på det her: http://www.datejs.com/
Det er lidt vildt. Og ville nok tage en smule tid at hacke sammen selv.
Man skal selvfølgelig altid overveje hvornår noget er sjovt at lave og hvornår andre har lavet det bedre i forvejen. Det er lidt for sjov at lave AcmeCal og jeg mene at det opfylder mit behov bedre end hvad jeg har set på af alternativer.
Lige netop håndtering af tidsangivelser vil jeg meget gerne finde nogle skuldre at stå på og jeg har lidt kik på [url=http://search.cpan.org/perldoc?Time::ParseDate]Time::ParseDate[/url]. Der er bare lige to men'er: Jeg skal være helt sikker på at den foretrækker ethvert muligt alternativ til den us-amerikanske middle-endian datoangivelse og jeg skal have mulighed for at vælge om en dato uden klokkeslet skal angive begyndelsen eller slutningen af dagen. Hvis jeg laver en søgning på { from => today, to => tomorrow } skal den selvfølgelig finde events fra begyndelsen af idag til slutningen af tomorrow.
Det kunne være indlysende at bruge [url=http://search.cpan.org/perldoc?Class::Accessor]Class::Accessor[/url] istedet for at skrive mine egne. Men her vurdere jeg at det at introducerer en afhængighed for så lidt ekstra funktionalitet er for dyrt. Det kan være at jeg laver den beslutning om senere.
Derudover betragter jeg klart brugen af YAML og $EDITOR som at stå på de rigtige skuldre. Det modul til import af iCalendar-filer jeg er igang med at pudse af gør også god brug af et eksisterende iCalendar-modul.
Ok, det kunne man ikke...
De to links til perl-moduler skulle have været til
Time::ParseDate der findes på http://search.cpan.org/perldoc?Time::ParseDate
Class::Accessor der findes på http://search.cpan.org/perldoc?Class::Accessor
