Problemet var, att Internet växer, att användarna
blir fler och mer diversifierade, att tekniken ändras till
höger och vänster osv. Följande punkter avhandlar
vad problemet var när vi började bygga "nya"
Yelah:
- Informationsstrukturering. Informationsmängden
växte. Yelahs site blev bara större och större.
Det var snårigt att hitta och det gick inte att
söka bland sidorna. Man kunde iofs hitta bland sidorna med
vanliga sökmotorer som Altavista, men
träffsäkerheten var ytterst låg.
Informationen behövde struktureras om och göras
sökbar.
- Länkar. Länkar dör. Yelah har för
närvarande ett stort länkskafferi till folk och
fä både här och där. Vi har inte längre
en chans att kolla alla och hålla reda på dem. Varje
gång en länk ska ändras blev det handarbete med
pill i HTML-filer för att ändra eller ta bort den.
- Tillgänglighet. Yelah är tillgänglig
för de flesta läsare, men det sker på bekostnad
av godis som en designer ogärna vill offra. Vi blir tvugna
att skala ned alla sidor för att platsa i läsare som
Lynx. En del läsare vill läsa texterna "off-line" och
många anger att de skriver ut artiklarna och läser dem
på papper. HTML är inte speciellt lämpat för
pappersläsning.
- Dynamik. vi ville kunna ha "newsflashes" o dyl på
Yelahs hemsida, med senaste nytt som tillkommer mellan de
ordinarie numren. Förr var vi tvugna att göra detta
genom att handeditera HTML-filer.
- Distribuerat ansvar. Vi ville kunna dela ut ansvaret
att sköta olika underavdelningar till betrodda personer.
Exempelvis skulle någon annan än webeditorn (fn Pelle
Sten) kunna gå igenom och uppdatera dåliga
länkar.
Alla de här problemen var rätt triviala ur
webutvecklingssynpunkt. De har funnits förr och de kommer att
dyka upp igen. Många sk IT-företag (Spray, Icon
Medialab, Framtidsfabriken osv osv) lever på att lösa
dylika problem åt företag och institutioner. Yelah hade
INTE råd att anlita dessa. Dessutom var det
önskvärt att lösningen byggdes helt och hållet
med sk "fria" programvaror, vilket dessa företag sällan
gör.
Jag adresserar problemställningarna punktvis med
den lösning som sedan implementerades.
- Informationsstrukturering. Detta löstes
genom att bygga en databaslösning där
artiklarna kunde indexeras, efter mönster från den
svenska artikeldatabasen "artikelsök". Man kan i och
för sig lägga in samtliga artiklar i en databas,
förse dem med nyckelord osv, men den metoden är inte
långsiktig. En bättre metod är att låta ett
dataprogram söka igenom de befintliga artiklarna och
indexera dem, på samma sätt som t ex sökmotorer
på Internet.
För att sökmotorer skulle kunna hitta bland Yelahs filer
skulle vi bli tvugna att strukturera HTML-filerna på ett
sökmässigt godkänt sätt, med
<META>-taggar som talar om vilka nyckelord etc som skall
indexeras. Detta blir lätt soppigt och tar lång tid.
Därför var det i mitt tycke bättre att
konvertera alla artiklar i arkivet till en XML-baserad
artikelform där nyckelord o dyl är tvingande.
Därigenom kan artiklarna automatiskt indexeras i en databas
utan större problem, och XML-filen kan vid behov omvandlas
till såväl HTML som annat.
- Länkar. För att någotsånär
hålla reda på länkarna placerades dessa i
en databas. Databasen kan editeras av vem som helst via
webformulär, som används för att administrera
länkarna. Till webformulären och länksidorna
används PHP. Lösningen kompletterades med en robot
(humoristiskt kallad yog-sototh, the eater of dead
links) som
söker av alla länkar periodiskt och själv letar
efter länkar som dött, flaggar dem i databasen och
lägger dem i en lista som länkadministratören kan
kolla av.
- Tillgänglighet. För att öka
tillgängligheten av innehållet på Yelah:s site
modifierades alla sidor att skilja på form och
innehåll. Innehållet lagras i den XML-baserade
artikelformen, vilken sedan kan exporteras till valfritt format.
I XML-artikelformen finns bara ett fåtal märktaggar,
de mest nödvändiga elementen som man känner igen
från HTML, exempelvis rubrik / underrubrik / stycke /
uppräkningslista / fotnot osv. Denna definieras
fullständigt under "teknik" nedan. Formen kan läggas
på valfritt XML-derivat genom att använda exempelvis
CSS. Det finns en fungerande lösning för att
presentera artiklarna direkt i XML med style:ning via CSS
redan idag, men de flesta användare använder nog
fortfarande HTML-derivaten.
- Dynamik. Detta löstes med sk dynamiska websidor.
Här talar vi givetvis återigen om PHP. Dessa
"småprogram" skriver ut innehåll ur en databas till
en websida och kan dessutom editeras från en websida. Samma
teknik används för
länkarkivet.
- Distribuerat ansvar. Redan det faktum att länkar
och dynamiskt innehåll kan editeras via websidor
innebar en möjlighet att distribuera ansvaret. Det
behövde bara kompletteras med en säkerhetslösning
för login / logout, i vårt fall baserad direkt
på HTTPS (SSL), med personlig inloggning via
den enkla användarlista som stöds i webbservern
Apache.
Teknikvalen i RSS gjordes efter följande kriterier:
- Funktionalitet, allt skall fungera för användarna,
annars kommer de aldrig tillbaka. Fungerande verktyg, inte bara i
teorin eller "3 år in i framtiden" i nån teknikers
huvud.
- Endast fri programvara skall användas.
- Design är underordnat funktionalitet och läggs
ovanpå det färdiga resultatet som en sista polish. Det
är viktigare för användarna att de kan
använda Yelah än att de kan titta på
Yelah.
Arkitekturen utgår från att artiklar
finns i ett arkiv. Artiklarna formateras i en given
XML-implementation, och de XML-formaterade artiklarna konverteras
sedan till olika format (exempelvis HTML) med ett specialanpassat
verktyg, XMLtools.
Artiklarna indexeras automatiskt i en databas, där
arnvändarna kan bläddra bland kategorierna eller
söka fritt i databasen.
Implementationen är gjord som en sk "trelagerlösning"
där det översta lagret, presentation och
adminstrationsgränssnitt, skrivits i ett enkelt
webscriptspråk och därför är lätt att
ändra eller helt skriva om vid behov.
I mitten finns olika sk "out of process"-komponenter som t ex
konverterar artiklarna till olika format. I och med att programmen
körs som egna processer riskerar de inte att krascha
webservern. Ren C används som programmeringsspråk
för att få upp hastigheten.
Som "backend" finns en databas och ett filsystem med XML-filer.
Härifrån hämtas all substansiell information
från systemet, och här lagras nytt material.
Här listas de tekniker och verktyg som befanns
lämpliga att använda för projektet.
- Expat -- en högpresterande XML-Parser används som
grund för CGI-implementation av presentationsprogram. (Se
XMLtools, nedan.)
- Apache -- väl beprövad webserver.
- PHP -- beskrivningsspråk för dynamiska
websidor.
- MySQL -- Fri databashanterare som är lämplig
för mindre projekt.
- Tidy -- ett verktyg som "tvättar" HTML-filer och
anpassar dem till XHTML som är snarlik Yelahs XML-mall.
Yelah XMLtools (programmerade i C av Linus Walleij):
- article.dtd -- Yelahs artikelmall för XML (DTD)
- xmltohtml -- verktyg som parsar XML till HTML, antingen till
kompletta HTML-sidor eller till HTML utan headers som kan
inkluderas i en annan websida.
- xmltortf -- verktyg som parsar XML till RTF för
ordbehandlare
- xmltotxt -- verktyg som parsar XML till råtext
(ISO8859-1)
- xmltotex -- verktyg som parsar XML till TeX-format
- xmltopdb -- verktyg som parsar XML till Palm Pilot Doc
(Aportis Doc, RichReader)
- xmlindexer -- verktyg som parsar XMLfiler och indexerar dem i
databasens artikeltabell
Andra verktyg (diverse språk, Linus Walleij):
- Diverse PHP-script -- sköter presentationslagret för Yelah,
detekterar använd browser och anpassar sig etc
- Yog-sototh -- plockar ut länkarna ur Yelahs länkarkiv
och kollar att de är OK genom att surfa till dem. Skrivet i
perl
- Diverse cron-script -- körs automatiskt för att
spegla och göra backup på Yelah, samt för att
generera webbstatistik, skrivna i C-shell och BASH
Alla verktygen är färdiga och finns för
nedladdning under GNU General Public License (GPL) som ett exempel
att jobba vidare på för de som är intresserade av
denna typ av program. Allt är som sagt skrivet i C och
använder James Clarks XML-parser Expat. För att
installera dessa verktyg (unix är det som gäller
här, såklart), följ den vanliga metodiken
för att kompilera Unix-program.