Öppna länkar i nya fönster med XHTML
En undersökning av Jakob Nielsen kom fram till att man bör öppna nya fönster för dokument som inte är av ”webb-karaktär” (via Backend Media). Anledningen är att användarna inte ser exempelvis de öppnade PDF- eller Word-dokumenten som delar av webbplatsen.
Tidigare har det hetat att man aldrig ska tvinga på användaren nya fönster, av flera anledningar. Bland annat går det inte att använda ”tillbaka”-knappen från det nya fönstret. På GUUUI kommenterar John Resig dessa nya rön från Nielsen:
That is, of course, considering that the user has some sort of plug-in installed that can handle these documents. If you’re using a non-IE browser and/or don’t have Microsoft Word (and you’re using Windows) then you will now have to close two extra windows, when you only had to close one before.
Jag är tveksam till att öppna nya fönster, men eftersom undersökningen visar att det är bra borde det ju vara så. Min tveksamhet kommer från att det inte är helt enkelt att få igång dessa plugin under Linux – då blir de nya fönstren som öppnas tomma och dokumentet öppnas i ytterligare ett nytt fönster. Det är bara besvärligt, precis som Resig skriver.
Om man väl bestämmer sig för att öppna nya fönster för användaren finns det också vissa tekniska problem med detta.
Attributet target i a-taggen
Med html 4 och xhtml 1.0 transitional sätter man helt enkelt värdet på attributet target i a-taggen till ”_blank”. Om sidan skrivs med xhtml 1.0 strict får man dock inte använda target-attributet. Då måste man använda Javascript (se nedan).
Däremot finns det en modul i xhtml 1.1 (och förmodligen 2.0) som heter Target. Genom att hänvisa till den modulen kan man också i fortsättningen använda target-attributet. Det kräver dock en del handarbete för att få igång, som finns beskrivet på Accessify.com och Swedish Golden Retrievers.
Javascript och DOM
Den enkla Javascript-lösningen är att använda funktionen window.open vid onclick-händelsen. Då öppnas ett nytt fönster för de webbläsare som stöder Javascript, men eftersom href-attributet också används, krävs inte Javascript. Tyvärr skickas sällan information om den hänvisande sidan (eng. referrer) med när window.open används, så för många är det inte en användbar lösning.
<a href="http://www.daven.se/blogg/" onclick="window.open(this.href); return false;" onkeypress="window.open(this.href); return false;">Skriftligt</a>
Sitepoint har en annan, intressant lösning, som innebär att man använder attributet rel för att markera de länkar man vill ska öppnas i ett nytt fönster. När sidan laddas in körs Javascript-kod, som sätter DOM-variabeln target för varje markerad länk till ”_blank”. Detta motiverar man med att xhtml och DOM är helt skilda fenomen. Jag tycker att det är en elegant, men samtidigt något tveksam lösning. Det känns inte helt rätt, som man brukar säga – men det verkar fungera bra.
Veckans begrepp: AES
Krypterings-standarden DES ersattes 2001 av AES. Då hade National Institute of Standards and Technology (NIST) utvärderat femton symmetriska algoritmer och slutligen valt Rijndael som den bäst lämpade. Nycklarna kan vara 128, 192 eller 256 bitar långa, jämfört med DES’ 56 bitar.
Under urvalsprocessen för AES valde man i första omgången bort algoritmer med möjliga defekter (DEAL, FROG, HPC, LOKI97, MAGENTA) samt ytterligare algoritmer som inte passade av olika anledningar (CAST-256, CRYPTON, DFC, E2, SAFER+). Slutligen gick ett par algoritmer vidare till ”finalen”:
- MARS: ”MARS demonstrates very good performance on 32-bit platforms, and its speed excels on platforms that provide strong support for 32-bit variable rotations and multiplications. The algorithm also has the flexibility to handle key sizes much higher than the required 256 bits. Some concerns about MARS include its performance on platforms that do not provide the support needed, as well as the algorithmic complexity.”
- RC6: ”RC6 is very fast on 32-bit platforms, and it is the fastest performer on any platform providing the needed support. ... Additionally, this algorithm is extremely flexible in the sense that the key size, block size, and number of rounds are all fully parameterized. Some concerns about RC6 include the relatively low security margin, declining performance on platforms that do not provide strong support for 32-bit variable rotations and multiplications, and the lack of low-end smart card suitability.”
- Rijndael: ”Fast key setup, and consistently excellent performance across all platforms considered ... The algorithm’s low RAM and ROM requirements also make it very suitable for smart cards. The ability to handle additional key and block sizes also contributes to the algorithm’s outstanding flexibility.”
- Serpent: ”Serpent has one of the strongest overall security profiles and is extremely well suited for smart cards. It is designed to allow bitslice implementations, in which the S-boxes can be computed by logical operations rather than table lookups. Such optimized versions should allow relatively efficient parallel computation of the S-boxes, especially on 32-bit platforms. Nevertheless, its slow speed remains a minus.”
- Twofish: ”It possesses a large security margin, and ... no major or minor security gaps were evident. In terms of performance, Twofish is very fast across almost all platforms. Low RAM and ROM requirements make it suitable for smart cards and other restricted memory environments. Another advantage is Twofish’s flexibility, since it admits several modes of implementation to accommodate various space/time tradeoffs.”
Slutligen valde man så Rijndael med följande motivering (utdrag):
Rijndael appears to be consistently a very good performer in both hardware and software across a wide range of computing environments regardless of its use in feedback or nonfeedback modes. Its key setup time is excellent, and its key agility is good. Rijndael’s very low memory requirements make it very well suited for restricted-space environments, in which it also demonstrates excellent performance. Rijndael’s operations are among the easiest to defend against power and timing attacks. Additionally, it appears that some defense can be provided against such attacks without significantly impacting Rijndael’s performance.
Ännu har ingen knäckt AES-algoritmen, men det finns vissa frågetecken som diskuteras bland annat av Bruce Schneier, Nicolas T. Courtois och på Wikipedia. Inte heller den gamla standarden DES är knäckt, men en ”brute force”-attack tog endast 22 timmar för ”Deep Crack” 1999. Hade den ursprungliga DES-algoritmen från IBM fått behålla 128-bitarsnycklar hade den fortfarande varit säker – kanske till och med säkrare än AES. (National Security Agency, som hjälpte till med att kontrollera DES, minskade nyckellängden till 56 bitar.)
Vanliga användbarhetsproblem på bloggar
För ett tag sedan genomfördes en användbarhetsstudie speciellt för bloggar. (Via Media Culpa.) Resultatet är nedslående och visar att bloggosfären är omogen, och delar av förklaringen till varför det fortfarande inte är helt ”mainstream” med bloggar kan ligga här.
De huvudsakliga problemen man upptäckte under studien var:
- Folk märker inte alltid att det är en blogg de besöker. Bloggar säger inte alltid klart och tydligt – på alla sidor! – att det är en blogg. De ”klassiska” tecknen på en blogg, som de flesta bloggare känner till (listor över kategorier, arkiv, korta artiklar etc), säger ingenting för gemene man. Man måste vara mycket tydligare än så om man vill bli sedd som en blogg. Det kan också vara lönt att kort beskriva syftet med och inriktningen på sin blogg.
- Syftet med att kommentera, och vad som händer med en inskickad kommentar, är inte tydligt. (För att inte tala om trackback; inte en enda person i studien visste vad det var.) Många besökare kommer direkt till en inläggssida, läser kanske inlägget och ser en ruta som säger ”kommentera”. Vad exakt är det som ska kommenteras, och var kommer kommentaren visas? Man kan tänka sig att funktionen tolkas som ett sätt att kommunicera privat med bloggaren, och att ”kommentera” inte nödvändigtvis tolkas som att kommentaren ska gälla just detta inlägg, utan bloggen eller webbplatsen i allmänhet.
- RSS är ett begrepp som folk inte förstår sig på. Det är sällan det förklaras vad det är och vad det är bra för. Besökarna verkar tro att det är något tekniskt avancerat som de inte har någon användning för. Den prenumerations-metod som de flesta kom att tänka på först var via e-post. När RSS förklarades för dem var många rädda att få spam den vägen.
Det är väl värt att fundera på hur man kan motverka dessa problem. Jag har försökt på den här bloggen, men som alltid är användbarhet inte en exakt vetenskap och det kan alltid förbättras. Dessutom behövs studier genom observation för att utvärdera på ett ”riktigt” sätt.
Förutom ovanstående har jag hittat en del saker på olika bloggar som jag hajat till inför. Jag hoppas att ingen känner sig utpekad, men jag kände mig tvungen att ta med exempel. Bilderna verkar ha försvunnit vid någon bloggflytt eller liknande.

Först ett utmärkt exempel på hur man inte bör presentera sina flöden för besökarna. Rubriken ”meny” säger ingenting, och vad är relationen mellan ”album” och ”RSS 0.90”? Dessutom säger namnen och versionsnumren på teknikerna ingenting. För många flöden är bara förvirrande.

Hur lång tid tar det att hitta eventuella kommentarer på den här sidan? Det är så mycket tydlig information att det är omöjligt att skumma igenom. Ett tips till upphovsmannen är att använda grå text och olika storlekar för att framhäva respektive ”dölja” informationen. Dessutom kanske inte trackback-länken behöver visas två gånger?

Samma sak här. All metainformation har tryckts ihop i ett stycke med löpande text. Det är trevligt på ett sätt, men omöjligt att snabbt hitta den information man vill ha. Länkarna i avvikande färg är det enda som fångar uppmärksamheten och resten syns bara vid en noggrannare läsning.

Var tror du den permanenta länken döljer sig? Var skulle du klicka för att läsa kommentarerna? Inte på rubriken, datumet, knappen med en pil eller brevet med en pil, hoppas jag. På klockslaget, såklart! Helt ologiskt. Alla alternativ jag räknade upp hade varit bättre, med undantag för det lilla brevet (som innebär att du kan skicka inlägget per e-post). Det här är ett av mina hatobjekt. Det ser likadant ut på nästan alla Blogger-bloggar, och det kan vara ännu värre på vissa Movable Type-bloggar (klicka på det lilla ”§”- eller ”#”-tecknet för en permanent länk.).

Snygg grafik med nytänkande text är inte alltid positivt. Jag var övertygad om att grafiken hade med inlägget att göra och klickade på det. Märkligt, jag fick upp inlägget i en ny ruta! Efter ett par sekunders funderande kom jag på att ”föreviga” naturligtvis innebär ”skriv ut”... Det är inte bra att använda ett vackert, men ovanligt språk när man vill göra sig förstådd. Inom varje yrke har man en jargong eller terminologi, och det gäller också för programvara och webbplatser. (Byt gärna namn på ”arkiv”-menyn i ett Windows-program och se vad användarna säger.)
Ny sudoku-generator
Jag fick för mig att jag skulle göra en sudoku-generator igår kväll, så då gjorde jag det. Den använder sig av AJAX (dvs. Javascript) istället för Shockwave, som Svenska dagbladet använder. En ny sudoku genereras automatiskt var fjärde timme, och svårighetsgraden varierar. Denna sudoku-generator är ersatt av en mer avancerad.
Tack vare AJAX behöver du aldrig ladda om sidan. Använd knapparna för att rätta sudokun eller visa lösningen. Du kan också skriva ut en sudoku och lösa den i hängmattan eller var som helst (och sedan återvända till rätt sida för att se lösningen).
Eftersom det är såpass nytt kommer jag förmodligen förbättra det ganska snart. Rapportera gärna buggar eller kom med andra synpunkter.
Bloggblogg-rekommendation
Om du gillar att läsa om aktuell och framtida bloggteknik kan jag varmt rekommendera David Halls blogg Månhus beta. Det är förmodligen den blogg jag själv tycker har de mest intressanta och genomtänkta inläggen gällande teknikutvecklingen inom bloggosfären. I ett nyligt inlägg diskuterar han exempelvis PubSub som en ersättare till trackback-funktionaliteten.
Sökmotorer och dynamiska webbplatser
När man jobbar med dynamiska webbplatser finns det en del saker man bör tänka på för att hålla sig väl med sökmotorerna. Jag har nyligen gjort två erfarenheter genom utvecklingen av Blogwalk; hur man undviker att bli bombarderad av förfrågningar från spindlarna, och hur man bör visa felsidor.
Flera URI:er per sida
En titt på Google visar att det i skrivande stund har indexerats 47 100 inlägg från Blogwalk. Det finns dock bara drygt 18 700, vilket ger ett snitt på 2,5 URI:er per inlägg! Alltså borde det rimligtvis gå åt 2,5 gånger mer bandbredd än nödvändigt för just Googles spindlar. Varje unik URI antas peka på en unik sida, så spindlarna kommer att indexera samma sida flera gånger. Om och om igen.
På Blogwalk har varje inlägg ett index som pekar ut det i databasen. Detta index anges till skriptet, som sedan visar inlägget: /blogwalk/index.php?post=1234567. Man kan också korta ned det till /blogwalk/?post=1234567 tack vare Apache. För att göra URI:n lite snyggare använder jag numera Apache-modulen mod_rewrite så att man istället kan skriva /blogwalk/post/1234567. Men det blir ännu värre: AdSense-reklam använder i stor grad URI:n för att avgöra vad som ska visas. Därför valde jag att inkludera inläggets titel i adressen, så att eventuella nyckelord hittas direkt. Alltså kan inläggen nås också via /blogwalk/post/1234567/titel_pa_inlagget. En fjärde URI till exakt samma sida – alla fungerar och indexeras flitigt av sökmotorerna.
Lösningen är att tala om för spindlarna vilka URI:er det är som gäller. Det görs helt enkelt genom att kontrollera den URI som angetts ($_SERVER["REQUEST_URI"] i PHP) och skicka http-koden 301 (”Moved Permanently”) tillsammans med den ”bästa” adressen. Då tas alla varianter bort, och endast en URI per sida finns kvar i indexet. Om man bara returnerar en annan adress med Location-fältet i http-huvudet används istället koden 302 (”Found”), som i det här fallet säger att den angivna URI:n ska fortsätta att indexeras.
Borttagna sidor
När man tidigare angav ett felaktigt index för ett inlägg på Blogwalk visades ett felmeddelande: ”Detta inlägg finns inte”. Http-koden som returnerades var fortfarande 200 (”OK”), och alltså kommer sökmotorn fortsätta indexera sidan med det nya innehållet. Lösningen är att returnera felkod 404 (”Not Found”) eller 410 (”Gone”). Med PHP görs det på följande sätt: header("HTTP/1.1 404 Not Found");. Så småningom kommer sidan tas bort ur indexet.
Makalös bloggparodi
Jag såg nyss Johan Norlunds blogg, ”Johans makalöst dumma vardag”, som verkar vara en parodi på bloggar. Det verkar nästan som att han försöker retas lite med bloggosfären. Eller möjligen komma med ett inlägg i den ständiga debatten om bloggarnas existensberättigande.
Vad sägs till exempel om följande välformulerade och informativa inlägg:
Det låg några smulor på barbordet. Jag var inte hungrig så jag sopade ihop dem och slängde dem i soporna.
Lysande! Ett mästerverk av banalitet.
Men riktigt så banala är väl inte ens dagboksbloggarna. Eller? Ett nyligt inlägg från Linda Skugges blogg:
Katten la precis sin rumpa mot mitt vattenglas. Haja så äckligt! Nu ska jag msn-a med Linna.
Uppenbarligen finns det alla typer av bloggar. Undrar vem Linna är.
AdSense-reklam på XHTML-sidor
Googles reklam-tjänst AdSense använder sig av Javascript för att skapa annonserna på dina sidor. Dvs. du anropar ett skript på Googles server, som sedan använder sig av funktionen document.write() för att infoga länkar. Denna funktion fungerar inte på xhtml-sidor som levereras som xml-dokument, och då visas ingen annons!
(Xhtml-sidor bör levereras med en MIME-typ för xml-dokument och inte längre text/html!)
Som tur är går det att kringgå denna begränsning i AdSense-skriptet. Genom att använda antingen taggen object eller iframe kan vi placera ”anropet” till AdSense-skriptet i ett annat dokument och inkludera det i huvuddokumentet. Detta nya dokument behöver inte alls vara ett xml-dokument utan kan vara html 4. Därför fungerar AdSense. Exempelvis följer Blogwalk xhtml 1.1 och levereras som application/xhtml+xml – ändå fungerar annonserna, tack vare detta knep.
Som vanligt ställer dock Internet Explorer till problem. Taggen object bör inte användas; då visas en ful ram runt den inkluderade sidan, tillsammans med rullister. Istället är det iframe som gäller, men inte ens det räcker. I det inkluderade dokumentet måste vi ange som stil: html, body { border: none; overflow: hidden; } för att ta bort ram och rullister. Firefox har inga problem att visa vare sig object eller iframe på ett snyggt och korrekt sätt.
(Förresten kommer taggen img tas bort i xhtml 2.0, och tanken är då att object ska fylla dess funktion. Det är helt omöjligt med Internet Explorer idag. Förhoppningsvis kommer Internet Explorer 7 ordna detta.)
Varför gör inte Google AdSense xml-vänligt? Det kräver visserligen en total ombearbetning av skriptet och gör det något besvärligare för den som vill visa annonserna på sina sidor; men när utvecklingen går mot xhtml 2.0 kommer det förr eller senare behövas. Idag är det som bekant inte roligt med AdSense och xml.
Flera nyheter på Blogwalk
De senaste dagarna har jag introducerat ett antal nyheter på Blogwalk. Grundfunktionaliteten är densamma, men jag har lagt till ett par nya sätt att upptäcka vad som pågår i bloggosfären.
De etiketter eller kategorier en bloggare sätter på sina inlägg följer nu med till Blogwalk. Det innebär att du kan välja en etikett för att se fler inlägg inom samma område. Dock inkluderar inte alla bloggare sina etiketter i flödet – som naturligtvis är ett krav för att Blogwalk ska upptäcka dem. Titta gärna på etikettmolnet. Så småningom kanske jag låter besökarna sätta egna etiketter på inläggen.
Sedan tidigare har Blogwalk varje vecka kompilerat en lista med ämnen som nämnts flera gånger i olika blogginlägg. Förutom detta har jag nu lagt till att du kan se de vanligaste sökfraserna som leder besökarna från sökmotorer till Blogwalk. Dessa verkar stämma ganska väl med vad som är aktuellt i bloggosfären och kan vara bra om du vill hålla dig à jour (eller är uttråkad).
Varje vecka sammanställs också en lista med de vanligaste länkarna i blogginläggen. Där ser du de länkar som förekommit flest gånger i de olika bloggarna. Många stora webbplatser och tjänster kommer säkert alltid finnas med på listan, men också bloggar, nyhetsartiklar och andra hemsidor som det pratats mycket om i bloggosfären under veckan. Även detta kan hjälpa dig att hålla dig à jour, men listan kompileras först måndagen efter.
I stort sett alla etiketter skrivs idag ur ett lokalt perspektiv. Etiketten om mig, eller övrigt, säger väldigt lite utanför den egna bloggen. Det gäller att tänka generellt och använda etiketter som är betydelsefulla också när de visas på Blogwalk. Samma resonemang gäller förstås för Technorati och Tagcloud. Tänk stort.
Jag hoppas att dessa nyheter kan vara till någon nytta. Om du har ytterligare förslag på funktionalitet, eller bara helgalna idéer, hör gärna av dig. Det är kul och utvecklande att hålla på med sådant här.