Basen för allt jag gjort är det senaste som erbjuds i Perls utvecklingsmiljö. Perl och webbservern Apache är djupt integrerade med varandra genom apachemodulen mod_perl.
Perl 5 och Apache under unix är grunden. För min egen webbplats har jag valt OS-distributionen Debian GNU/Linux, databasen PostgreSQL, fritextsökmotorn Glimpse, mailinglistservern Majordomo, och andra program.
CPAN har det utbud av moduler som behövs för grunden. Dvs DBI för databaskoppling, CGI för CGI-programmering, Date::Calc för datumhantering, LWP för webbrobotar, File::Tools, Data::Dumper, Text::Metatext för att använda templates, osv.
Som alltid när man utvecklar program så, bygger man upp och generaliserar programkod. Eftersom jag gjort så många CGI-program med databaskoppling har jag nu ganska mycket kod att bygga vidare på. Både från Information Highway Göteborg och Paranormal.se.
I de flesta fall har jag här haft direkt kontakt med de relaterade modulernas författare, för kommentarer och förslag på förbättringar.
Ovärderligt verktyg vid utveckling av CGI-program. Med detta program får man praktiskt taget aldrig ett "Server error" när cgi-programmet inte fungerar. Programmet fångar alla kompileringsfel och presenterar dem i webbrowsern när sidan laddas. Den fångar även fatala fel under körning. Det kontrollerar att headern är riktig (enligt HTTP-specen). Om headern är felaktig skriver den ut en egen och ger info om vad som hänt.
Om en del av HTML-koden redan skrivits ut, men avslutas med varningar eller ett fatalt fel, ges en lista, under HTML-koden på fel och varningar. Här får man även snyggt formaterat alla indata, cookies, enviroment etc.
Men så länge inga fel eller varningar uppstår är modulen helt transparent. Och inga speciella arrangemang behövs för att använda den. När programemt är klart kan man helt enkelt kommentera bort "use CGI::Debug;".
Jag planerar att lägga upp modulen på CPAN när jag laggt till ettpar funktioner till, så som att man kan få felmeddelandena mailade till sig, och eventuellt syntax-validering av HTML-koden. Alla inställningar kan göras via parametrar på use-raden, udner programmets gång eller via cookies.
Har jobbat en del med moduler för datumhantering. Har bland annat skapat ordentliga objektinterface till datum, som en påbyggnad på Date::Calc.
HTML::Parser kan läsa in en HTML-sida och skapa en trädstruktur, liknande DOM (Document Object Model). Mina egna krav på detta har resulterat i att jag modifierat och byggt ut de relaterade HTML::parser-modulerna. Exempelvis kan man läsa in allt i ett bojektträd, lägga till delar på viss aställen i trädet och sedan skriva ut trädet till en HTML-sida igen (med bi-effekten att man får den renskriven som snygg indenterad HTML).
Har arbetat både med Text::Boilerplate (ej i CPAN) och Text::Metatext, och i båda fallen utökat deras funktionalitet i grunden för att passa mina behov. I CPAN finns 12 moduler templatemoduler. Två är av typen preprocessors, tre ger dig möjligheten att baka in perl i HTML-koden och fem är klassiska template-moduler. Jag känenr mig redo att smälta samman de klassiska templatemodulerna till en ordentlig modul med den funktionalitet jag eftersöker.
Har skapat ett antal generella klasser för hantering av databastabeller. Tack vara dessa kan jag i en konfigurationsfil beskriva kopplingar mellan fält i olika tabeller, mm. Därefter kan uppdateringar, utsökningar mm göras på en högre nivå. Resultatet läses direkt in i den datastruktur man behöver. Bland annat finns metoder som select_field, record_exist_in, store, select_list och select_key. Har även en metoder utvecklade för optimerade databastransaktioner, där satser förbereds för senare exekvering.
Påbörjade under tiden på IHG ett mycket generiskt ramverk för moduluppbyggda CGI-system. Här var det tänkt att man i huvudsak skulle kunna skapa ett helt system enbart genom att skapa sina sidmallar och deklarera sin databasmodell (exempelvis genom att ladda upp en UML-fil från Rational Rose). Funktioner som fritextsökning, epostformulär och multippla språk läggs in som generella moduler. Allt annat kommer egentligen från interatkion med databasen, där sidorna byggs upp i samverkan med sidmallar (templates) och databasmodellen. Administration för systemet automatgenereras utifrån datamodellen. Där behövs inga sidmallar alls.
Extra vikt lades på att skapa ett elegant objektorienterat system där generella eller spciifika klasser kan subklassas för vad som är unikt för det enskilda CGI-systemet.
Av detta projekt finns endast ett par utkast och experiment, men det har givit mig mycket god insikt hur större webbplatser kan struktureras upp för enkel administrering. Exempelvis börjar det dyka upp liknande produkter från andra på CPAN. Här skulle jag kunna samarbeta för att snabbt få ett mycket kraftfullt verktyg för extremt snabb framtagning av databasdrivna webbplatser.
Detta liknar till viss del de utvecklingsmijöer som IBM, Oracle och Microsoft nyligen tagit fram för mallstyrt skapande av databasdrivna webbplatser. Skillnaden här är förstås att Perl - mod_perl - Apache utgör en rikare utvecklingsmiljö, med en bas i GNU Linux och Open Source.
search regexp
- letar igenom alla
underkataloger och listar alla rader i filer som innehåller
angiven regexp.
mvre from to
- döper om eller
flyttar ett antal filer med den flexibilitet perls regular
expressions tillåter.
rch from to flags dir
- Byter ut alla
förekomster av from till to med
regexpflaggorna flags i alla textfiler under
katalogen dir. Dvs en kraftfull global
sök-ersätt-funktion. Mycket anävndbar när man har tusentals
webbsidor att hålla efter. Detta program frågar interaktivt
efter parametrarna om de inte ges på kommandoraden. Den tar
även backupp på alla filer den ändrar och raporterar hur
många ändringar som görs i varje påverkad fil.
rmba
- Går igenom alla underkataloger och
raderar de tilde-backuppfiler som emacs skapar.
Dessutom har jag skapat ett flertal program till min webbplats.
Allt detta kulminerar i ett projekt som jag planerat under lång tid, bestående av en mängd komponenter (som kan införas i etapper). Detta är den ultimata miljön för kollektivt kunskapsuppbyggande.