200henriko.seMån 23 Okt

HITMLI

Översikt

HITMLI är ett system för att på serversidan skapa korrekt och snygg XHTML-kod utifrån annan HTML- eller XHTML-kod. Systemet kan ses som ett enkelt filter som kan ta bort alla typsnittsanvisningar och färger och istället ersätta dem med en CSS-referens. Systemet kan också göra om gamla nu ogiltiga taggar som tex b och byta ut dem mot strong. Men man kan också låta systemet infoga sidhuvuden och sidfötter. Eller till och med infoga viss information från ett annat dokument.* Systemets fördel är att det ska vara enkelt och ta minimalt tid att skapa och underhålla webbplatsen. En möjlig nackdel är att det mest är lämpat för webbplatser som inte har så många besökare.

*) Denna funktion är dock inte skriven ännu.

Jätteprojektet HIT

En gång för länge länge sedan, till och med innan world wide webb hade jag många funderingar på hur man skulle hantera alla sina data. Jag ville ha ett system där hela arbetsgrupper skulle kunna samarbeta med samma data, samt utan att behöva ha någon data dubbel. Tex i ett telefonregister där två kontakter bodde på adress ville jag kunna använda samma adress. Ibland ändrar dom ju postnumren, och då ska man ju bara behöva ändra på ett ställe. Och detta ville jag gör helt utan en traditionell relationsdatabas och all systemering, normalisering, utvecklingskostnader etc, vilket privatpersoner och små företag inte har varken råd eller möjlighet att hålla på med. Skulle man komma på någon ny fakta man vill ha på en person skulle det bara vara att lägga till den. Och var det någon uppgift man kände att man ofta vill ha på alla personer skulle det vara möjligt att lägga till en rad för denna information i en slags mall för nya personer.

Ett sätt formulera det hela är väl att jag ville skapa någon slags databas som man kunde utöka bäst man ville. Och där alla samband egentligen alltid kunde vara många till många.

Dessutom ville jag göra det möjligt att märka upp text med fetstil och sånt, och infoga bilder.

Jag skrev en massa dokument, och gjorde en massa skisser. Men någon kod skrevs aldrig. Projektet vara alldeles för omfattande för att ro iland på min fritid. Men jag lovar. Projektet innehöll en himla massa intressanta tankar och lösningar.

Arbetsnamnet på projektet var HIT, som helt enkelt stod för Henriks Informations Teknik. Och naturligtvis skulle det blivit en hit också, om jag hade haft möjlighet att förverkliga det hela.

Jag vill inte kalla projektet för nerlagt, fast det kanske är det. Min tanke är att det ska återuppstå någon gång. Fast kanske i mindre skala. Eller mer som ett moduluppbyggt system, som då kan dra nytta av andras standarder och andras verktyg, blandat med mina egna. Det är därför HITMLI heter som det gör. Det är en fristående modul. Med en förhoppning är att modulen ska gå att använda som en pusselbit i den stora visionen HIT någon dag.

Mina gamla Perl-skript

För att underlätta skapandet av webbsidor, när det blev poulärt 1996(?) skrev jag en bunt funktioner i Perl, En slags verktygslåda kan man säga. Där man enkelt kunde infoga sidhuvuden och sidfötter. En sak man kunde göra väldigt enkelt var att skapa stycken med en rubrik som verkligen hängde ihop med stycket, vilket inte var det normala i HTML innan CSS. Man kunde skriva å, ä och ö och de konverterades automatiskt till å, ä och ö som det skulle vara då. Färgkoderna hanterade man inte som en stack, utan snarare som att byta penna. Osv. Men det viktigaste av allt var att man alltid fick exakt den kod som krävdes för att gå runt alla buggar i dåtidens webbläsare, utan att själv slita häcken av sig varje gång man skrev någon ny text.

Sidospåret PML

Efter att ha programerat i Python en del bestämde jag mig för att skapa ett nytt superobjekt i Python, som skulle skapa ursnygg och korrekt HTML-kod, som jag ville ha den.

Ett inte fullt så genomtänkt ryck skulle det visa sig när jag började fundera lite mer i detalj på hur jag egentligen skulle styra objektet.

Efter att ha funderat ett bra tag på detta problem, inspirerad av Python, bestämde jag mig för att göra ytterligare ett “markup language” som liksom Python hanterar kodblock, med indentering (indrag) istället för begin-end, klamrar, eller som i HTML skriva samma sak en gång till fast med ett snedstrek framför. Varför slösa tid på att skriva avslut på sina kodblock ?

Arbetsnamnet på detta markup language blev PML, som stod för något i stil med Pythonized Markup Language.

Självklart skulle PML kunna allt som mina gamla Perl-skript kunde. Fast bättre. Men dessutom ville jag få med vissa idéer från mitt gamla HIT, tex möjligheten att infoga information från andra PML-filer.

Efter att ha skissat på PML ett bra tag lade jag ner projektet. Det var helt enkelt väldigt svårt att få bort vissa av avigsidorna med indenteringsprincipen.

Motivationen bakom HITMLI?

Den kod mina gamla Perl-skript skapade följde de standarder som gällde 1996 eller nåt. Fast jag i dagsläget vill man ju ha modern XHTML där innehållet är separat från stilen i CSS. Och även om det var enklare att skriva mina sidor med mina Perl-skript, än utan, så ville jag kunna skapa information med något form av vertyg. Inte ett wysiwyg-verktyg direkt, men nästan. Jag vill alltså ha något nytt som helt kunde ersätta mina gamla Perl-skript, som skulle vara lättare att redigera. Och dessutom ville jag passa på att få med så mycket idéer som möjligt ifrån det gamla HIT-projektet.

HITMLI står för HIT Markup Language Interpreter, eller nåt. Tvärtemot försöket med PML bygger detta inte på ett nytt “markup language”. HITMLI är en tolk, som kan tolka i stort sett vanlig HTML eller XHTML, som kan ha skapats manuellt eller med hjälp av någon vanlig HTML-verktyg. Och i det ögonblick man tittar på dokumenten går HITMLI igenom och städar, byter ut och trimmar koden enligt önskemål. Font-taggar och color-attribut kan kastas bort. Doctype-definitioner kan piffas upp till modernt snitt, oavsett vilken doctype-definition som finns i ens HTML-fil. Men det går också att göra saker som att koda om en helt standard HTML-tabell, så att tex varannan rad får en vit botten och varannan en ljusblå, för att lättare kunna följa raderna. Det går också att byta ut vanliga stycken mot stycken där texten ligger i ett sk span, vilket ger fler möjligheter att lägga en bagrundsfärg bakom själva texten, och inte den fyrkant som stycket utgör.

Främst riktar nog HITMLI in sig på privata webbplatser och företag vars webbplatser inte ha så jättehög belastning. Dvs det är ett system i de “lägre” marknadssegmenten. Just därför har ett otroligt viktigt mål varit att systemet ska kunna köras på de billigaste webbhotellen. Därför är HITMLI inte skrivet i tex Java, eller i mitt favoritspråk Python. Den teknik som verkade klara uppgiften och som verkar finnas mest tillgänglig, även på de billigadste webbhotellen är PHP. Därför är HITMLI skrivet i PHP.

Hur fungerar det?

Först och främst ska man ställa in på sitt webbhotell så att ett visst eget huvudskript körs oavsett vart på servern (eller katalogen) man surfar. De flesta webbhotell tillåter egna felmeddelandesidor. Dessa kan missbrukas. Man kan helt enkelt säga åt webbservern att alla neka åtkomst till alla html-sidor, och sedan ställer man in sitt eget huvudskript som felmeddeandesida.

I sitt huvudskript includerar man själva HITMLI-filen, hitmli.php . Sedan definerar med normalt tre olika callback-funktioner, StartTagHandler, EndTagHandler och ContentHandler. Och tillsist kör man funktionen HITMarkupLanguageInterpreter, där man skickar med filnamnet till den html-fil som egentligen efterfrågades.

Vad som då händer är att HITMLI läser in filen och börjar tolka den. Och allt eftersom den stöter på olika element och innehåll anropas callbackfunktionerna. I dessa är det då möjligt att bit för bit bygga upp ett nytt dokument. Och det är här det fina är. Om callback funktionen blir anropad på grund av en oönskat element, ja då är det bara att ignorera. För element och innehåll man vill behålla är det ju bara att mata ut samma. Men man kan ju också passa på byta ut vissa delar mot andra, eller byta ut dem mot mer komplcerad kod. Endast fantasin sätter gränser som man brukar säga.

Används HITMLI?

Ja, i mina egna projekt. Tyvärr är det väl ingen av sidorna som är så mycket att skryta med. Men jag ser i alla fall att tekniken fungerar. Den sida du läser nu, tex är skrivet i helt vanlig HTML som snyggas upp till XHTML i farten. Min personliga hemsida henriko.se använder också HITMLI. (Min startplats Startplatsen använder en specialversion i Python för avdelningen Om Startplatsen.)

Var får jag tag i HITMLI?

Nja. Det är väl inte helt moget än. Men min ambition är att lägga upp det under lämplig fri licensform, när jag finner det lämpligt. Skulle nån vara väldigt sugen att prova får ni väl höra av er.