2004

Time for another round of awesome Flash movies:

  • Hoy te amo — For some weird reason, this Flash movie reminds me of The Girl.
  • Walk-Smash-Walk — Weird techno music video thingy.
  • Dad's Home — Scenes of randomness. I almost choked to death on my own laughter when watching this.

    "If every coming scene of this animation is completely unpredictable to you, then I have succeeded. Enjoy!"

  • Fallen Angel: Teaser — Insanely nice and smooth animation. Level of detail astonishing.

I've also updated various parts of my site a bit:

LotR: BfME kicks so much ass. You should play it.

body {
  visibility: hidden;
}

Even if you don't know CSS, this should be funny. :-)

I invited The Girl to watch a movie with me this Sunday, and she accepted. Woho! We're not going to the movies (or cinema) though; we're going to watch it at home. If I'm interpreting this correctly, she must like me. This could be awesome.

If you miss my geeky side, don't worry; it will return in due time.

I invite everyone interested to join Kimmo's IRC channel, #webgurus at Freenode. See the channel website for more info. Although Kimmo initially started it, I sometimes feel like a co-founder. At least, I spend a good amount of time there, and collaborate on the website. (The style, for instance, is mine.) Not anymore.

There's not much news on the girl I really like (the name will be hidden for now. I'm sure you understand). I have this gnawing feeling in the back of my mind that we'll "only" be friends.

So, I'm in love! This is so cool, because the girl in question is utterly sweet and seems to be very smart. I need to spend more time with her to get to know her better, but that shouldn't be hard as I feel really comfortable around her; she doesn't seem to be too interested in small-talk, and that suits me just fine. What's so cool about her is that we both are able to sit in a room and not say a word to each other. And when we do talk, it's about interesting, meaningful stuff. I haven't been in love with anyone for about four years, so I kind of lack experience... Oh well... If she likes me, she'll try to make it work. If she doesn't, she doesn't, and that's perfectly fine; I'm ok with being "just" friends.

I do not want to ruin this... I have to be careful.

In more boring, geeky news: My site reaches new heights of correctness and standards compliance; I have converted all my character entity references into real characters, and now use UTF-8 instead of ISO-8859-1 on request from Alexander Krivács Schrøder.

The observant reader might have noticed that I used HTML 4.01 and XHTML 1.1 interchangably on pages, depending on whether or not they contained MathML. I did this because I felt that since I advocate HTML 4.01 over XHTML as far as that's possible, I should use HTML 4.01 too. So I did, for selective pages. That involved a few nasty PHP hacks, so I decided to get rid of them and use XHTML on all pages again. I know what I'm doing. ;-)

I got a comment on that Christmas comment I made. I'm usually not vague like that, but sometimes even I have to vent. I see it like this: On avarage, person A will buy a gift for person B with approximately the same value as the gift person B buys for person A. So why don't person A and B just buy themselves whatever it is that they want? If I order a Hyundai 21" DynaFlat-X CRT monitor, I'm virtually guaranteed to get that, whereas if I wish for the same product for Christmas, I might get it, or I might get an uncomfortable, itchy sweater that I'll never use. What's the point of that?

So, it's Christmas again; the time of year when dumb people buy dumb stuff to other dumb people with their dumb money. It's a crazy world.

Why can't I live in a Walden Two society? Or an arcology? Or both? I want a Segway, damn it...

So, the new style sheet is ready. What do you think?

Changes and additions:

  • More colors!
  • New list item images for three levels of nested, unordered lists.
  • The style sheet changer is gone. I played around with a replacement for it, a style changer, which enabled you to change the presentation of various things on my site (such as the line-height, navigation bar position, and navigation bar state (fixed or absolute)), but it proved to be too hacky to be worth it. Incidentally, the Settings page is gone.
  • Code blocks' languages are no longer identified with a background image. It's not really necessary.
  • I found a really nice monospace font, called ProFont, that makes reading code very easy. I now use it for all the code examples. I really recommend you install it.
  • Alternate style sheets removed.

Of course, there are some issues. This time I honestly, really don't have any sympathy for you if you use a broken browser; I write 100% correct code and I cannot and will not be punished for that by having to use hacks. This site is dedicated to showing the Good Side of web development. That said, here are the issues:

  • IE rips the Archived News apart.
  • IE screws up IRC excerpts. For some reason, it hides the contents of <dt>s under the background.
  • Mozilla doesn't get display: inline-block;, so code blocks are utterly fucked (by dumb luck, IE SP2 gets it (but only for <code> elements)).

I'm now annoyed by my current style sheet and my style sheet changer. I want to dump them all and work on a new, improved style sheet, free from all the cruft and ugliness of my current one. I intend to use the holy Cascade to its fullest potential and make extensive use of @import, moreso than I'm currently making. With this change comes the ability to affect certain key aspects of my site's style, such as which font to use, the size of the font, background color, and navbar placement, among other things. I'll still have copies of the old style sheets, of course, but not available to the public (unless you hack the URL). The reason for this change is that making and improving upon one style sheet is easier and gives better results than working on and maintaining several half-assed attempts at design (and I'm not very good with design to begin with).

Do I complain a lot? I like to think that I don't, so that means I'm entitled to moan a little about stuff that annoys me. No, I'm not going to talk about the evils of abusing <table> for layout or the evils of using <blockquote> solely for indenting text. I'm not even going to complain about the evils of using proprietary code. No, I'm going to complain about real life stuff that currently bother me to varying degrees. These include, but are not limited to, the following (in no particular order):

  • The bus I take home from school is usually packed with people, so I inevitably have to stand in it, along with several others. For some weird reason or other, people who have to stand stop and stay in the middle of the bus. The back of the bus isn't on fire, nor are there any corrosive gases. There aren't even Glukkons. So the reasons for their not using this fine space remains a mystery to me. It's also highly annoying, seeing as I'm usually the first person to exit the bus and have to push my way through lots of people to reach the exit. Why don't they learn? The bus driver always tells them to move to the back of the bus (and I do too, on occasions), yet they persist to stop and stay in the middle.
  • The school's "intranet", it's:learning, still uses a non-uniform naming scheme for the classes I take. I will have to consult my teacher again and ask for an update on the situation.
  • The seats on the bus stops I use are made of metal. It's fucking cold! Why they made that decision is beyond me.
  • Most seats on the bus stops around my city center are sloped. Not only that, but they provide virtually no friction, so people can't use them unless they bring glue. I'll admit, they look cool, but style doesn't buy usability. At least they're made of plastic, so they're better than the ones I use to get to school.
  • People who pronounce "ha det" "hadem" seriously annoy me (they should say "hade"). I believe this is a Rogalandism (Rogaland is the county in which I live).
  • The weather in Norway sucks, especially this time of the year.

So, this last Sunday was Father's Day. (Scandinavian countries celebrate it on the second Sunday of November. It varies from country to country.) I didn't get my father anything, nor have I ever done so; Father's Day is a crock, and my father agrees, so it's all good. He'd rather be respected and loved all around the year, than having bitter fights all around the year except one day, where he gets a crummy gift that he could have bought himself if he wanted to. Incidentally, I never buy Christmas presents for people, and I never will. Do people hate me for that? No one's telling me. Will people hate me for that when I grow older? Probably. But they'll also hate me for not making my kids (if I get them) believe in Santa Claus and the Tooth Fairy. Fools. I don't see them making their kids believe in the invisible green man on my right shoulder who is responsible for making calculators and trains work.

Yay, my very first political news entry! I won't actually say much, but rather quote an article which sums up my thoughts on the U.S. presidential election pretty well:

"You want to block it out. You want to rend your flesh and yank your hair and say no way in hell and lean out your window and scream into the Void and pray it will all be over soon, even though you know you're an atheist Buddhist Taoist Rosicrucian Zen Orgasmican and you don't normally pray to anything except maybe the gods of really exceptional sake and skin-tingling sex and maybe a few luminous transcendental deities that look remarkably like Jenna Jameson."

Oh, by the way, the quote doesn't sum up my thoughts; the article does. I just find the quote incredibly funny.

There are now four Wilburers.

Today I discovered that my English teacher didn't know what the word inexorable means. But I first had to ask him for the meaning of inextricable. So I guess we're even. :-)

Site updates are slow and will continue to be slow until Real Life stuff gets done. This means, among other things, that the Big Thing previously hinted at will be put on ice. For now. Siiiiiigh.

Grammar is fun. Some differences between English and Norwegian grammar:

  • Norwegian nouns have gender (three of them).
  • Norwegian adjectives and adverbs are similar if the noun of the adjective is of the neutral gender. Also, adjectives are conjugated according to the gender of the noun.
  • The possessive apostrophe is absent from Norwegian since we don't need to differentiate our plurals from our possessives (Norwegians, take notice).
  • Norwegian doesn't conjugate verbs according to subject.

Added a little piece of anti-IE CSS to all my .css files. And the funny thing is that IE users won't even notice. ^_^

My parkour skills continue to evolve. A lot of people stare at us when we're jumping around like crazy (I don't blame them). Some even stop and watch for a while. At first I found this a little uncomfortable, but now I don't mind. Parkour is a really nice way to get in shape.

It's probably premature, but I just want to release my HTML Tutorial. There are some topics I still want to talk about (such as validation), and even an entire collection of elements (phrase elements) I haven't even mentioned, but releasing the tutorial now might give me some incentive to, you know, actually finish it.

Web sites that fail to use <label>s for their <input>s annoy me to no end. It's not that hard! I'm baffled at the incompetency of today's "web designers" ("web fools" is more like it). It's really simple, see:

<input name="color" type="radio" value="red" id="red"> <label for="red">Red</label>

Simple, no? The for attribute's value should be exactly the same as the <input>'s id attribute. Didn't you pay attention in school? That's right, you use FrontPage or some equally rubbish crap. (Which reminds me: I'm still not looking forward to the time when we're going to be using FrontPage in our IT class.)

Although it hasn't been evident on the site, I've begun getting an interest for parkour. It's a relatively new urban "sport" (I like to call it an art). It was "invented" by David Belle in France, quickly spread to England, and is just now establishing itself in Norway. The premise is that you should overcome urban obstacles (fences, stairs, roof-tops, whatever) with flow and fluidity. In fact, just before I heard about the existence of the sport, a similar idea had already lingered in my mind for some time. I've always been a fan of Jackie Chan's movies; I adore the way he (unlike many other Kung Fu artists) uses his surroundings to fight/evade his foes, so perhaps parkour is just an extension of that. I might, when I get better, make a dedicated page to parkour on my site, but for now, check out Urban Freeflow for information and neat images and movies of what parkour is all about.

I added the Settings page. You can use this to tweak stuff on my site. Currently there's only the style switcher (moved from the Colophon page) and a new feature that lets you add or remove the Jump to bar. The Settings page is now deceased. The powers of PHP be praised!

Here's a pretty nifty thing. I recommend the Shockwave version; switching pages is slooow, and the .avi file is jerky.

Mike gave me the idea of using a "this page is printer-friendly" link in the footer. Thanks, Mike!

My pages now feature randomly generated quotes. (The quotes are real enough, it's the order they appear in that's random.) Refresh this page or go to another one, and it should feature a different quote. I currently have 42 quotes, and adding new ones is a breeze. I also slightly reorganized the internal structure of the site. Nothing visible, but it'll make life easier for me.

My father bought a new stereo, so I'm getting to use the old (but still better than my headphones) one. Whooo!

I'm currently working on something... pretty big. I don't want to tell what it is yet, nor do I want to release any links (because as we all know, I'm known everywhere to be dark and mysterious), but I can tell you that some of the nifty stuff I've discovered about PHP/CSS in the process may very well end up being incorporated into the site. And on a related note, I seriously, seriously want to overhaul the site's infrastructure to make my Archived News more manageable (among other things).

The second Wilburer, after some pushing in the right direction, has been found.

I've moved the style sheet changer to the Colophon's styles section instead of having it at the top of every single page (content is more important than style).

A pretty interesting pseudo-class has been discussed on and off on www-style. Although I haven't found a need for it myself (not that that's relevant), people apparently want a parent selector. Several proposals have been made:

  • Modify the subject of the selector chain with :subject: .section ul:subject > li { ... }
  • Modify the subject of the selector chain with parentheses: .section (ul) > li { ... }
  • Modify the subject of the selector chain with the dollar sign: .section $ul > li { ... }
  • The :matches() pseudo-class.

The first proposal is fundamentally flawed; :subject isn't a pseudo-class in any sense, it's a modifier. Also, the first three proposals all suffer from the same thing: they break what's been consistent since CSS1; the last part of the selector chain is what's being selected. So far, my favorite is :matches(). With this, you can use look-ahead assertions to determine whether or not to select the element. Say you want to select <ul>s that are descendants of any element with the class attribute set to section, and you want to require that the <ul>s have <li> children (like in the first three examples). This is done like this: .section ul:matches(# > li) { ... }. Here, the # is referring to the element that's trying to be matched (the <ul>). What's more, :matches() takes an arbitrary amount of comma-separated selectors to try to match, of which at least one has to actually match for the element to be selected: .section ul:matches(# > li.note, # > li.important, # dl.compact) { ... }. And if that wasn't enough, :matches() can be nested arbitrarily. You know what, I can't think of an example where one would use nested :matches()s, but the ability is there. :-P

On another note, the first Wilburer has arrived.

"Every facet, every department of your mind is to be programmed by you, and unless you assume your rightful responsibility, and begin to program your own mind, the world will program it for you."

You should read Stephan's reproduction of A Few Notes On The Culture.

Added a section to the Colophon page explaining the style sheets I use.

"An idea of how the day-night cycle appears on the surface of an Orbital can be gained by taking an ordinary belt, buckling it so that it forms a circle, and putting your eye to the outside of one of the belt's holes; looking through the hole at a light bulb and slowly rotating the whole belt will give some idea of how a star appears to move across the sky when seen from an Orbital, though it will also leave you looking rather silly."

Here are my findings of Opera 7.60's speech synthesizer so far:

  • It has issues with :first-letter. It'll spell out the first letter, and then read the entire sentence. So :first-letter applied to the sentence "Pasta tastes good!" comes out "Pee pasta tastes good!".
  • It says "double left angle bracket" and "double right angle bracket" when encountering « and », respectively (I believe it should say "quote" and "unquote", respectively, since these are quotation marks in both Norwegian, French, and German (although the Germans like to turn them the other way around)). I've gone through what I believe is the most correct procedure for identifying language, marking up quotations, and specifying quotation marks; lang="no", <q>, and q:lang(no) { quotes: "«" "»" "<" ">" }.
  • It has real issues with inline elements; it effectively speaks out the contents of them by themselves. Thus, if an inline element is at the end of a sentence, it'll spell out the punctuation mark.
  • It pronounces URLs surprisingly well.

You can see my test case for yourself.

If you want to change what Opera's saying when it doesn't understand your input when pressing and holding the Voice button (the default is Sorry, I did not understand), look for the file vxmstrings_en-us.ini (it should be in the root folder, most probably Opera76) and edit the line nomatch = . My line says Eim sorry Dave, eim afraid I cant do that. I wish I could use "I'm" and "can't", but it doesn't pronounce them well.

Incidentally, I've added quotes from 2001 to the Quotes page.

Yesterday I fell from my aunt's roof and hurt my back something bad. No, don't ask me what I was doing up there in the first place; I don't know. I guess I just like to climb. So, as I was going to get down, I lowered myself down the side, but my fingers slipped (and I had already gained momentum downwards, which didn't help). I hit a flower pot on my way down, hurting my back. I think the pot stopped my head from being smashed into the concrete below; I was conscious the whole time, and my head and neck felt fine. My first thoughts after hitting the ground were I gotta get up so that my aunt doesn't figure out I broke her plant, but I soon discovered I was pretty hurt. My dad came out about ten seconds later, because we were about to leave anyway. So they called an ambulance and rushed me to the emergency room, where a doctor quickly checked me. It was pretty cool, because she mumbled Latin words to herself while checking my back (most likely the technical words for parts of the body. Heh). After that they drove me to the hospital for x-rays. Luckily, there were no broken bones, but my muscles had taken a fair amount of beating. I can move much more easily today than I could yesterday, and I hope I'll be going to school on Monday. I now have much more respect for slippery wet things. :-)

Opera 7.60 beta 1 is out. The most notable new feature is the voice support, making Opera even more interactive as you can speak commands to it (I haven't tried that yet since I don't have a microphone handy). The speech synthesizer is really good and can read selected text for you. They claim to support the CSS3 Speech Module; I can't wait to play around with that. They've also finally fixed their stupid <table> + border + background-color + :hover bug. For an example, check my character test page in pre-7.60 and 7.60 (it's not finished yet and I'm only playing around with it; I take no responsibility for the veracity of the content).

Seen on IRC:

bloodymike
I'm serious, I could get any kind of drug at my school. I know too many dealers.
Havard
Do your parents know about this?
bloodymike
About my school. I dunno. They know I won't get mixed up in it.
Havard points his piercing gaze at Michael.
bloodymike
I don't do drugs, stop staring at me!
Havard says "But of course you don't.", then silently continues to write stuff on his notepad.
bloodymike
I'm not crazy! You can't tell me that I am!
bloodymike struggles in his straightjacket.
Havard
Now, I'm just going to give you a little something to help you relax...
Havard
Don't worry, you won't feel a thing.
bloodymike
Noooooo!!!!....Heh heh....
bloodymike snores.
Havard
There's a good boy.
<paragraph><sentence type="normal"><pronoun>I</pronoun> <verb tense="present">wonder</verb> <adverb>how</adverb> <adjective degree="positive">insane</adjective> <pronoun>one</pronoun> <verb type="auxiliary" tense="present">can</verb> <verb tense="infinitive">go</verb> <preposition>with</preposition> <noun size="plural" countable="yes">markup languages</noun></sentence> <sentence type="normal"><adverb>Pretty</adverb> <adjective degre="positive">insane</adjective><comma /> <pronoun>I</prnoun> <verb type="auxiliary" tense="past">should</verb> <verb tense="present">say</verb></sentence> <sentence type="question"><verb tense="infinitive">Find</verb> <pronoun>it</pronoun> <adverb>hard</adverb> <particle>to</particle> <verb tense="present">read</verb></sentence> <sentence type="normal"><pronoun>Me</pronoun> <adverb>too</adverb></sentence></paragraph>

sentence[type="normal"]::after {
  content: ".";
}

sentence[type="question"]::after {
  content: "?";
}

comma {
  content: ",";
}

In case you're not willing to decipher the content that's being marked up, the above says "I wonder how insane one can go with markup languages. Pretty insane, I should say. Find it hard to read? Me too.". GrammarML anyone? :-)

Jakob Nielsen's Alertbox, a huge collection of articles he's written, continues to suck away my time. I really enjoy reading it, because it's clearly and concisely written and every document has an extensive array of outgoing links to peripheral subjects. All his links have very good titles, which makes it predictable where you'll end up after following the link (but you should expect that from a usability expert, shouldn't you?). Suffice it to say that his links have earned my complete trust. I don't like the extremely simple look of his articles; he should really increase the line-height and set a subtle background color. But that's nothing my user style sheet can't fix. (I really enjoy applying it and going fullscreen (F11) in Opera when reading long articles.)

Incidentally, I've fallen victim to mistake number six in Top Ten Mistakes in Web Design: Page Titles With Low Search Engine Visibility. It's fixed now; instead of "Håvard's web site - [title]", the <title> element (that's what shows up in the title bar of the browser) now contains "[title] (Håvard's web site)".

The incompetency of our school's "intranet" (it's not really an intranet since you have to log onto it via HTTP), it's:learning, infuriates me to no end. And this time it's not mainly because yet another <table> gets raped or that they specify several CSS declarations' values that are the initial values anyway (yes, they actually do that), but because of a few severe usability problems. The dropdown from which you choose which class to view information about has a redundant "Go" button; the page changes immediately after you select the option. This deviates from expected behavior, and leaves me wondering what the hell that button is doing there in the first place. Another, although not as serious, thing that bothers me is that the teachers apparently can't decide among themselves on which format to use for the options. Some use the full name of the class (such as Brukersystemer, the IT class I take), some use the class code (such as 3REL, the format I prefer) and yet some have the name of my school, followed by my group (3AFB), followed by my class, in parentheses, lowercased (Sola vgs 3AFB(krø))! Is some fucking consistency too much to ask for? (Technically I haven't, ehrm, asked yet, but I will. Believe me, I will.)

The highest usability hazard has to be the interchangable use of .doc files and PDFs for our time schedules and other miscellaneous information, all of which fit perfectly in HTML. It's seriously annoying to have to fire up Word or Adobe Acrobat Reader when I shouldn't have to.

Blasted incompetence...

On a more happy note, my HTML tutorial is really starting to shape up, XML and XSLT look enticing, CSS3 will rock your world, and my English teacher, Ivar Lein-Mathisen, kicks ass.

Bloglines is a fantastic piece of online service that is used to track news updates to sites that provide so-called feeds. It's totally free and you don't have to install anything on your machine to start using it. Just sign up and start using it. It claims to understand all syndication formats, which is, from what little I understand about syndication, a great achievement. Incidentally, I should learn more about syndication and stuff.

I can now do backflips on a trampoline! Yes! Now I have to train so that I can do it on the ground.

"Everyone loves magical Trevor,
'cause the tricks that he does are ever so clever.
Look at him now, disappearin' a cow.
Where is the cow hidden right now?

Takin' a bow it's magical Trevor
Everybody's seen that the trick is clever.
Look at him there with his leathery, leathery whip.
It's made him magic, and with a little flip...

Yeah, yeah, yeah, the cow is back
yeah, yeah, yeah, the cow is back.
Back, back, back from his magical journey, yeah.

What did he see, in the parallel dimension?
He saw beans, lots o' beans, lots o' beans, lots o' beans, oh,
beans, lots o' beans, lots o' beans, lots o' beans, yeah, yeah."

It's funny.

I love badasses. I love people who state their opinions and are not afraid to do it. I love non-bullshit people. Yes, non-bullshit, that's a good word. Incidentally, I have discovered another badass: Adam Quenneville. (Link removed by request.) Maybe I should add a Badass section to the Links page? Hmmm...

Here's a pretty cool thing about CSS. You can use position: fixed; to add headers and footers (or whatever you want) to every printed page. At first it didn't make sense to me why it behaves like that, but with some reading and pondering, it made perfect sense. You see, fixed fixes the element to the viewport. In the screen medium, the viewport is what you see on your screen. It's where everything the user should read (or listen to) and/or interact with is. So when you use position: fixed; (optionally in conjunction with top, right, bottom and left) on an element, that element will stick to the viewport, at optionally specified offsets. Now, the print medium, unlike the screen medium, provides several viewports, one for each page. And so the element will stick to each viewport, at optionally specified offsets. Pretty neat, huh?

Another cool thing about CSS is display: run-in;. I haven't seen it used in practice yet, but I've seen people who have faked the effect. Its behavior is quite simple: If a block level element immediately follows the run-in element, the run-in element becomes the first inline element of that block. It's quite useful when you want, say, headings to run into the following paragraph; simply set display: run-in; on the heading(s).

"Good morning, and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel. The time is 8:47AM. Current top-site temperature is 93 degrees, with an estimated height of 105. The Black Mesa compound is maintained at a pleasant 68 degrees at all times.

This train is inbound from Level 3 dormitories to Sector C Test Labs and Control Facilities. If your intended destination is a high security area beyond Sector C, you will need to return to the Central Transit Hub in area 9 and board a high-security train. If you have not yet submitted your identity to the Retinal Clearance system, you must report to Black Mesa Personell for processing before you will be permitted into the high-security branch of the transit system.

Due to the high toxicity of material routinely handled in the Black Mesa compound, no smoking, eating, or drinking are permitted within the Black Mesa transit system.

Please keep your limbs inside the train at all times. Do not attempt to open the doors until the train has come to a complete halt at the station platform. In the event of an emergency, passengers are to remain seated and await further instruction. If it is necessary to exit the train, disabled personnel should be evacuated first. Please, stay away from electrified rails and proceed to an emergency station until assistance arrives.

A reminder that the Black Mesa Hazard Course decathlon will commence this evening at 1900 hours in the Level 3 facility. The semi-finals for high-security personnel will be announced in a separate secure access transmission. Remember, more lives than your own may depend on your fitness.

Do you have a friend or relative who would make a valuable addition to the Black Mesa team? Immediate openings are available in the areas of materials handling and low-clearance security. Please contact Black Mesa personnel for further information. If you have an associate with a background in the areas of theoretical physics, bio technology or other high-tech disciplines, please contact our civilian recruitment division. The Black Mesa Research Facility is an equal opportunity employer.

A reminder to all Black Mesa personnel: Regular radiation and biohazard screenings are a requirement of continued employment in the Black Mesa Research Facility. Missing a scheduled urinalysis or radiation checkup is grounds for immediate termination. If you feel you have been exposed to radioactive or other hazardous materials in the course of your duties, contact your radiation safety officer immediately. Work safe. Work smart. Your future depends on it.

Now arriving at Sector C Test Labs and Control Facilities.

Please stand back from the automated door and wait for the security officer to verify your identity. Before exiting the train, be sure to check your area for personal belongings. Thank you, and have a very safe and productive day."

But seriously.

Big changes. All pages that used to use SSI now use PHP (which includes pretty much all of my pages). The main reason for the conversion was the ability to add a consistent style sheet changer, but seeing as PHP is infinitely more powerful than SSI, I can now (of course) add more powerful features to the site, more easily. Link rot is no problem thanks to the magic that is mod_rewrite. All requests for .html or .shtml are automatically rewritten to their .php equivalents.

As briefly mentioned, my site now features a style sheet changer. It's located at the top, and enables you to change the style of my site in three easy clicks. Only one thing is required on the client side; cookies must be enabled. Fortunately, this is almost always the case. One major advantage of a style sheet changer like this is that the change is consistent over several pages and that IE also gets the ability to change the style, just like Opera, Mozilla and several other browsers already do natively.

I feel that I spend maybe too much time on the technical side of my site leaving the important bit, content, neglected. I promise that this trend will not last.

My deepest fears have become reality. For the IT course I'm taking in school, we'll be using Frontpage. Oh, the horror!

"Psykopaten havner i fengsel i kanskje 4-5 år, soner halvparten, slipper ut igjen og dreper enda en person. Har vi det så bra i landet at vi må sørge for å passe godt på psykopatene våre og la dem drepe fritt så vi får krydder i form av angst og redsel til livene våre? Det vi skulle gjort var å sende alle de uhelbredelige psykopatene til en øde øy og la dem drepe og rane hverandre til det ikke var noen igjen. Jeg er overbevist om at alle gjennomsnitts oppegående mennesker hadde hatt godt av å slippe å frykte døden i en trist bakgate i Oslo. Tenk positivt! Tenk smart! Tenk på fremtiden din! Flytt til nordpolen."

Source: www.lokaltog.net/andre-ting/masse-rart

If you didn't understand that, you need to learn Norwegian, then come back. Then, follow this link to Kim's site and read his shit. He's like Maddox, only Norwegian and better at webdesign.

On request from Trevor Morris, here's a translation of the quoted passage above:

"Psychopaths go to prison for maybe 4-5 years, spend about half of that time there, get released, and kill yet another person. Are we really so comfortable in this country that we have to take good care of our psychopaths and let them kill freely so that our lives are spiced up in the form of anxiety and fear? What we should do is send all the uncurable psychopaths to a deserted island and let them kill and rob each other until none were left. I'm convinced that avarage, enlightened people would be pleased to be able to not fear death in a sad alley in Oslo. Think positively! Think of your future! Move to the North Pole."

I'm playing around with a PHP script made by Richard Lainchbury that generates a file listing for the directory it's in. I've made slight adjustments to it (making it valid, making it output readable code and removing general ugliness (such as &nbsp;s)) and will continue to tweak it, and hopefully, one day, learn how and why it works. In any event, this script is superior to Apache's indexing, which uses HTML 3.2 and <pre> when it should be using HTML 4.01 and <table>, which is what Richard's script does.

Progress on my HTML tutorial has stagnated because of the myriad of (mostly non-web related) stuff currently happening. I will try to get started on it Soon Enough.

Made another CSS alacrity; dialog01.

I'm back.

I received snail-mail from Michael Wilcox. That was fun. His hand-writing isn't particularly good, but neither is mine. :-)

Here's a pretty cool thing about PHP; you can limit a variable's length in double quoted strings with curly braces. I've often wondered how it can know how many characters after the dollar sign is part of the variable. Now I know; it greedily takes as many characters as it can to form a valid variable name. And a variable name, as any label in PHP, is expressed with the regex [a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*. The reason something like this...

<?php
$foo = "15";

echo "Today I ran $foo meters!";
?>

...works is because the parser sees the dollar sign, then greedily consumes characters until it comes to an illegal character. Space is an illegal character in any label, so this works. If you go like this...

<?php
$foo = "15";

echo "Today I ran $foom!";
?>

..., however, you run into trouble. It sees the dollar sign, chews characters, then chokes on the exclamation mark, and finds $foom, which is a value-less variable. As said, you can limit the variable's length by enclosing it in curly braces (including the dollar sign inside the braces is optional):

<?php
$foo = "15";
$bar = "20";

echo "Today I ran ${foo}m!";

echo "But Jacob ran {$bar}m...";
?>

This works as expected.

Why do Jackie Chan's newer movies suck so much? I mean, why does Tuxedo suck so much? What happened to Legend of Drunken Boxing or Gorgeous? The Rush Hour series is mediocre. I was actually pleasantly surprised by Shanghai Knights. You know what they ought to do? Put Jackie Chan and Jet Li in a warehouse fillled with interesting toys, and throw fifty goons in there with them. Let Jackie play with them for a while, and then send them to Jet, who offs them. That'd be fun to watch.

Allow me to reiterate: You really should be getting Far Cry. As I'm progressing through the game, it gets better and better.

Oh, and one last thing: My HTML tutorial is coming along very nicely.

So, I'm back from my three weeks' vacation to England. Oh right, I didn't mention that. Ooops. I didn't think anyone would miss me, but I was wrong. Sorry lads, won't happen again.

Most of the time on the trip was spent driving around England (we drove about 250 (metric) miles, in fact), so I decided to read through the PHP 4 Bible by Tom Converse and Joyce Park, sans part II, which deals with databases and such. (Which I don't need. Yet.) So, there I was, in the car, reading about a web scripting language. With no computer to try out all the cool stuff I read about on.

I visited Alton Towers again, this time with my sister. Great fun, besides the queue times.

Also, I visited Alex again, which was fun. We went rock climbing, walking in the forest, going to the pub and looking at a castle ruin which ties up to the battle of Hastings in 1066 in some way I can't quite remember. But most importantly, Alex had a spare computer I could use! I eventually managed to write a semi-useful PHP script on it, which I'll soon release.

The 30 hours' boat trip home was hellish. My head is still woozy. Never again...

In other, perhaps outdated, news: Far Cry is one of the best FPSs I've seen in a long time. You owe it to yourself to play it.

Kimmo Alm (which is Indian for The One Who Cannot Decide On Things) has finally decided to put his site online. And about damn time, too! It's not that content-rich yet, but he has a great foundation for great stuff. Also, you're able to comment on every single page on his site! He's got some random quotes in the header, and guess what? He's quoted me, Of All People. :-) Keep clicking F5 if you don't get it the first time. The only thing I can complain about is his small font size.

All in all, very nicely done, Kimmo. I'm looking forward to seeing your site grow into something big and amazing.

PS: My site no longer says "Håvard's Homepage", but rather "Håvard's web site". Kimmo thinks it sounds more professional. ^_^

I'm learning Python, and it's great fun. This is my first programming language ever, so everything's kind of fun, even the more trivial things, like traversing a string and reversing the characters. Which is what I want to talk about. Here's my code:

a = raw_input("String? ")
n = len(a)

if n == 1:
    print "Your string is", n, "character long."
else:
    print "Your string is", n, "characters long."

while n > 0:
    print a[n-1],
    n = n-1

This program asks for an input and checks the length of it. If the length is 1, it prints the singular form of "character" (along with the rest, of course). If it's not 1, it prints the plural form. It then proceeds to print the n-minus-1-th character in n (which is our string) and subtracts 1 from n every time through the while loop. The comma at the end of the print statement suppresses the line break, but it still adds a space between all the characters, which is annoying. Thankfully, Michael helped me out:

a = raw_input("String? ")
n = len(a)
i = ""

if n == 1:
    print "Your string is", n, "character long."
else:
    print "Your string is", n, "characters long."

while n > 0:
    i = i+a[n-1]
    n = n-1
print i

This does almost the same thing, except it uses concatenation, which eliminates the spaces between the characters, and waits until the end to print the reversed string. Thanks Michael. :-)

"...quemadmodum gladius neminem occidit, occidentis telum est." [...a sword never kills anybody; it's a tool in the killer's hand.]

- (Lucius Annaeus) Seneca "the Younger" (ca. 4 BC-65 AD)

Browsers, mod_rewrite, SSI, XHTML, MathML, UTF-8 and ISO-8859-1 all continue to conspire against me, ensuring that my life is as hard as possible.

Once upon a time (today in fact), Firefox started complaining about what I thought was <?xml version="1.0" encoding="ISO-8859-1"?>. I tried using that XML processing instruction because Firefox apparently doesn't fetch the AddCharset directive sent from my .htaccess file, and assumed UTF-8 as the default character encoding. This was when the moaning started. I had no idea why it started moaning, but apparently it doesn't like white-space before either a DTD or an XML processing instruction. Fine, I can accept that. Then, upon some pondering, I realized that I needed to put my SSI directive <!--#include --> before all my variables so that the white-space would disappear. The white-space disappeared, Firefox doesn't complain, and it gets ISO-8859-1 like it should. However, since the variables aren't passed to the included files, you'll see "Håvard's Homepage - (none)", followed by "(none)". I've decided that you're going to have to live with that until I collect enough courage to switch to PHP.

I amaze myself sometimes... Problem fixed. It's as simple as to just add the XML processing instruction at the very top of every page, instead of only in the included one.

I feel like debunking two myths that roam around the two IRC channels I hang around in (#html on irc.homelien.no and #web on irc.freenode.net), namely...

  1. ...that <table> was never meant endorsed by a spec to lay out web pages, and...
  2. ...that XHTML MUST NOT be sent as text/html.

A lot of people will scream these things at you, but apparently they haven't read the relevant specs thoroughly enough. I quote the HTML 3.2 table section:

"HTML 3.2 includes a widely deployed subset of the specification given in RFC 1942 and can be used to markup tabular material or for layout purposes. Note that the latter role typically causes problems when rend[er]ing to speech or to text only user agents."

Source: www.w3.org/TR/REC-html32#table

Now, of course you shouldn't misuse <table> for layout purposes, but claiming that they were never intended to do layout is a lie.

And then we have the people who claim that XHTML MUST NOT be sent as text/html. Debunking that myth is also just a matter of referring to the relevant spec. The summary clearly states that XHTML SHOULD NOT be sent as text/html, and SHOULD NOT is clearly defined in RFC2119 (there's probably an RFC on how to properly sort your laundry) as:

"This phrase, or the phrase 'NOT RECOMMENDED' mean that there may exist valid reasons in particular circumstances when the particular behavior is acceptable or even useful, but the full implications should be understood and the case carefully weighed before implementing any behavior described with this label."

Source: www.faqs.org/rfcs/rfc2119.html

I'd say that Internet Explorer not being able to even display XHTML sent with the proper MIME type is a valid reason for implementing aforementioned behavior. At least, that's my reason.

Next time you want to complain about something, do your homework.

"We don't support the browser you are currently using.

We recommend you use Netscape 6 or Internet Explorer to shop our site. If you wish to install the latest version of Netscape or Internet Explorer on your computer, please click on the links listed below."

Source: Grocery Gateway

Ha ha ha HA!

"Thank you for visiting PPP lifetime care's site. We recommend you view the site using Microsoft Internet Explorer version 4 or later.

Please click the following link to download the latest version of Microsoft Internet Explorer."

Source: Lifetime Care

Never.

"The browser you are using (Opera/7.51 (Windows NT 5.1; U) [en]) is currently unsupported. Please update your browser to the most current level."

Source: Stanton Magnetics

Update? Are you insane? As of the time of this writing, I own the absolute latest version of Opera, which is 7.51.

"The Ballard Designs Web site has detected that your browser is incompatible with our site. Please use either Microsoft Internet Explorer or Netscape Navigator version 4.0 or higher."

Source: Ballard Design

No.

"Sorry, this page does not support your browser. Please click here to upgrade to the latest version of Netscape."

Source: siig

Ok, I think that's enough.

Added outlines to pages which require them. Hopefully this will turn out to be a helpful navigation feature.

Made a CSS counters test page, and linked to it on the CSS Alacrity page. Counters are actually pretty hard to understand (well, if you read the spec and expect it to be a tutorial), but I finally managed, so I'll try to explain how I did the CSS counters test page in simpler terms than how the spec explains counters. Note that as of right now, counters are only supported by Opera (as far as I know; feel free to correct me).

A counter is created as soon as it is referred to, and is included in the content property, in either :before or :after pseudo-elements (CSS3 will allow you to use content with any selector, not limited to :before or :after). The function for counters is counter() and like everything in the content property (be it a string, the attr() function, url()...) it is concatenated with the rest with a space. counter() takes an identifier (and optionally any value from list-style-type, separated with a comma) as its argument. Put another way, you name your counters as you see fit. So, first we'll want to generated the string "Chapter " followed by the chapter number followed by the string ": " before an <h1> element:

h1:before {
  content: "Chapter " counter(chapter) ": ";
}

Actually, this won't do much good; the only thing it'll do is prefix "Chapter 0: " to every <h1> element. We want to increment it by 1 every time another <h1> is encountered. This is done with the counter-increment property. This property takes an identifier plus an optional integer as its value (or even several of the two). The integer specifies how much the counter is incremented each time the element is encountered, and can even be negative. The default value is 1 however, which fits our need just fine, so we can omit the integer in this case. Our CSS now looks like this:

h1:before {
  content: "Chapter " counter(chapter) ": ";
  counter-increment: chapter;
}

Note that the counter is incremented before it's prefixed to <h1>, even though content appears before counter-increment in the source.

That takes care of our most important headings. Now we want to prefix our <h2>s with "Section " followed by the current state of the chapter counter, followed by a dot, followed by a new counter we'll create called counter(section). Remember that counter(chapter) isn't incremented by anything else than <h1>, so it'll stay the same throughout all <h2>s until they're interrupted by another <h1>:

h2:before {
  content: "Section " counter(chapter) "." counter(section) ": ";
  counter-increment: section;
}

Uh-oh! What happens to the <h2>s interrupted by an <h1>? You're absolutely right; they'll just keep counting, which is not quite what we want. The counter-reset property will take care of that little problem. It has the exact same syntax as counter-increment, except that the optional integer specifies to what value the counter is set when being reset (the default is 0, which is what we want, so we omit the integer once again). So for every <h1> encountered, we want counter(section) reset. Here's the first CSS rule, modified:

h1:before {
  content: "Chapter " counter(chapter) ": ";
  counter-increment: chapter;
  counter-reset: section;
}

This means that we must also reset the counter for our <h3> elements (which we'll call counter(sub-section)) whenever an <h2> element is encountered. Our second CSS rule is thusly modified:

h2:before {
  content: "Section " counter(chapter) "." counter(section) ": ";
  counter-increment: section;
  counter-reset: sub-section;
}

So as you can see, counters are pretty nifty. Realize that counter-increment doesn't need to be in the same rule block as the counter() it increments. This allows for cool effects, such as, say, counting the number of paragraphs on a page and displaying the results at the bottom of the page. (Though a silly idea, it's a good way to understand counters.) Create a dummy <div> at the bottom of the page, called, say, <div id="para_counter">. CSS is as follows:

p {
  counter-increment: paragraphs;
}

div#para_counter:before {
  content: "There are " counter(paragraphs) " paragraphs on this page.";
}

Incidentally, I now use counters to count the number of quotes I have on the Quotes page.

I've started writing articles, and hence I've linked to the Articles page. Deceased. I've spent a whole lot of time reading about web related stuff, so I figured it's time I wrote something myself, since only now do I feel proficient enough to do so. I'm also planning on making an HTML tutorial and if that goes well, a CSS one, so consider the articles a warm-up for this. I'm having troubles figuring out how to structure them though, since I have so much to say about subjects peripheral to HTML, and a lot of rants lurking in my brain which could potentially ruin an otherwise decent tutorial. I also sometimes have a tendency to rush my explanations on given subjects, if I know a lot about them myself. Oh well, I'll just have to try to see, right?

In other news, the much-anticipated Deus Ex modification Redsun 2020 has finally, finally been released. I've played a couple of levels into the mod, and I can tell you, it's been worth the wait.

Rockstar North's Manhunt is cool. The gameplay is sweet, and the AI seems to be incredibly advanced. And I absolutely love the comments from NPCs.

Ever wanted to play a blob of tar with more maneuverability than Jackie Chan, twice the toughness of Jet Li, and with a wider range of facial expressions than Steven Seagal? Look no further: Gish is what you need.

I've been trying and trying to integrate \(a^x\) but never made it. That is, until a class-mate of mine helped me. The answer was right in front of me, but I didn't see it. Anyway, here goes. We set it up:

$$\int{a^x} dx$$

Next, we transform it a little:

$$\int{e^{\ln a^x}} dx$$

The rest is pretty straight-forward:

$$\begin{align*}\int{e^{x \ln a}} dx &= \frac{1}{\ln a} e^{x \ln a} \\&= \frac{1}{\ln a} e^{(\ln a^x)} \\&= \frac{1}{\ln a} a^x \\&= \frac{a^x}{\ln a}\end{align*}$$

I removed the links on all the code examples. There's really no need for them.

And now, for a pretty cool math task I did today.

Find the indefinite integral of the following function:

$$f(x) = ae^x - \frac{1}{2b\sqrt{x}}$$

We start by setting it up:

$$\int{\left(ae^x - \frac{1}{2b\sqrt{x}}\right)} dx$$

I'll turn the expressions into exponentials, so that we can integrate them:

$$\int{\left(ae^x - \frac{1}{2} b^{-1} x^{-\frac{1}{2}}\right)} dx = ae^x - b^{-1}\sqrt{x} + C$$

This gives us the following integrated function:

$$F(x) = ae^x - \frac{\sqrt{x}}{b} + C$$

The W3C validator has got a face-lift, and it looks sweet. Other new things include a fallback DTD in case one isn't specified and better explained error messages. So if you're one of the sloppy guys writing invalid HTML, you'll love the new error messages. :-)

Been spending some time acquainting myself with regular expressions. Although I haven't found any practical use for it myself yet, I definitely see the power they entail. For instance, had I known about regular expressions before my switch to ISO 8601, the whole process of converting the dates from DD.MM.YYYY to YYYY-MM-DD would be automated, and I wouldn't have had to spend half an hour doing it manually. I could have searched for ([0-3][0-9]).([01][1-9]).(200[34]) and replaced it with 3-2-1. *sigh*

MathML is very cool, and viewing a piece of MathML in, say, Firefox (with the associated fonts) is an utter bliss. But do you realize how extremely verbose it really is? Take the example of x^2. Here's how you would mark it up with HTML:

x<sup>2</sup>

Which renders as such:

x2

Here's the same expression in MathML:

<math xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
  <mi>x</mi>
  <mn>2</mn>
</msup>
</math>

Which renders like this (assuming, of course, you're using Firefox or Mozilla):

x2

Not really too verbose. But it gets worse if you have something like 2x^5a. HTML:

2x<sup>5a</sup>

Which renders as:

2x5a

And with MathML:

<math xmlns="http://www.w3.org/1998/Math/MathML">
<msup>
  <mrow>
    <mn>2</mn>
    <mo>&InvisibleTimes;</mo>
    <mi>x</mi>
  </mrow>
  <mrow>
    <mn>5</mn>
    <mo>&InvisibleTimes;</mo>
    <mi>a</mi>
  </mrow>
</msup>
</math>

And rendered:

2x5a

That's pretty verbose, no? There are several reasons why I bother.

  1. It's superior to using images and plain text.
  2. It can nest expressions to arbitrary depths.
  3. It prints and renders well.
  4. It's computable. I haven't seen a UA which can do this yet, nor have I really looked for one. But the idea is exciting.

I have thoroughly tested Firefox, and come to the conclusion that it's awesome. In addition, and after some tweaking, I got it to behave kind of like Opera, too. Firefox, when installed, is lightweight and doesn't really have all that many features. This is where extensions come into play. If there's a feature you're missing, simply install the corresponding extension. Here are two good repositories that I've found: David Tenser's extension page and MozDev's Extension Room. Here are the steps required for Firefox to behave almost exactly the same as Opera:

  1. Download and install Session Saver. This will make Firefox remember opened windows and their history after you close an instance.
  2. Download and install Mouse Gestures. This enables, well, mouse gestures. To perform a mouse gesture you hold down a mouse button (configurable) and move the mouse in a set pattern. (People who have played Black & White should be familiar with it.)
  3. I really like how the mouse cursor didn't change when you hovered over normal text in Opera. You can mimic this behavior in Firefox by adding this to your html.css file (located in the /res/ folder where you've installed Firefox):
    *:hover {
      cursor: default;
    }
    
    

Other extensions of interest include Minesweeper, BlockFall (a Tetris clone) and the Mozilla MNG Decoder, which enables MNG support.

I feel like talking about BNF. BNF is a method for describing syntax. The CSS specs use a slightly modified version of BNF, which was what got me interested in finding out more about it in the first place. As far as my understanding goes, there are two offsprings of BNF; EBNF, which is standardized in ISO 14977, and ABNF, which is documented in RFC 2234. The differences between the three are small and annoying, so I'll try sticking to EBNF. So. BNF (whatever the flavor) is composed of production rules. A production rule looks like this:

foo ::= bar

::= means "is defined as". The production rule is read "foo is defined as bar". The production then looks like this:

foo
bar

We start with foo, and bar is produced. Fairly simple. We can complicate things a little:

foo ::= bar
bar ::= baz
baz ::= diligo

This gives the following production:

foo
bar
baz
diligo

We take what's on the left side of ::= and substitute it with what's on the right side. Consider the following:

foo ::= bar | baz

The vertical bar indicates a choice. "foo is defined as bar or baz, but not both". The production can then be either

foo
bar

or

foo
baz

but it can't be

foo
bar baz

There are several operators which make things all the more interesting. We have the three wildcard operators ?, * and +. ? means that an item must appear zero or one times (or, if you prefer, the item is optional), * means that an item must appear zero or more times and + means that an item must appear one or more times. If you want to explicitly specify how many times an item is to appear, you use {A,B}, where the item appears at least A times and at most B times. If you want foo to appear exactly five times, you'd write foo{5,5}. Parentheses are used for grouping, and quote marks denote a string (that is, it's supposed to be written out exactly how it's represented, without the quote marks). Strings are called terminals, since they can't be further defined. Similarly, number and digit are non-terminals, since they can be further defined. Here, I've defined the construction of a number that can be negative and/or fractional. See if you can decipher it. :-)

number ::= "-"? digit+ ("." digit+)?
digit  ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

Violent movies and video games don't turn rebellious adolescent youths into vicious killers. Articles like these do. It spews a whole lot of nonsense, and completely fails to support its claims. For instance:

"Same conformist thinking, same lousy outcome."

Uh-huh. Take a look at, oh, say, the CSS Zen Garden. This is of course the obvious example. Now, take a look at diveintomark, SimpleBits, stopdesign, Meyerweb, Musings, Brainstorms & Raves, mezzoblue, Andy Budd's site, Photo Matt, The Daily Report, and the obligatory CSS examples. Need I go on?

In other news, and unlike David Emberton, Kill Bill Vol. 2 is awesome. You should watch it.

I have changed from using the European date format (dd.mm.yyyy) to using the ISO 8601 date format (YYYY-MM-DD), on recommendation from Michael Wilcox. ISO 8601 is an international date format used by several companies worldwide, with still more people starting to use it. It has several advantages over the European style, which I will not go into here (you know how to google, don't you?). Incidentally, the fragment identifier for the news items now use #YYYY-MM-DD #nYYYY-MM-DD instead of the old #ddmmyyyy.

Downloaded and tested Opera 7.50 beta 1. It claims to accept application/xhtml+xml, so it gets application/xhtml+xml, which is awesome. However, because of this, it chokes on some MathML character entities, spewing out the offensive code when it encounters the first one, then stops processing the rest of the document. This is, in fact, the way XML parsers should behave when they encounter errors. But it shouldn't choke on those character entities in the first place. Since my navigation bar is at the bottom of the source, it doesn't display on pages with the MathML character entities. That sucks. I've informed Opera about this, and I really hope it gets fixed before the final release.

Busy, busy, busy.

Completed XHTMLizing and MathMLizing everything, in addition to figuring out how to properly serve application/xhtml+xml to every UA that can handle it. Posts and pages containing MathML have proper notices about it, with a link which directs you to the MathML section of the Colophon page where instructions on how to get MathML working reside. And now, for your viewing pleasure, a random mathematical equation:

$$f'(x) = \lim_{{\Delta}x\to0} \frac{f(x + {\Delta}x) - f(x)}{{\Delta}x}$$

Of course, this change means IE fucks something up. I mean, of course! It's beginning to feel more and more like a natural law. Now, the aforementioned annoyance doesn't really matter much, it's just dead ugly. At the very top, it displays the following characters: ]>. I know how to fix it, but I won't. Why? Because that means more code. Those characters are part of an entity I've defined, namely &m;. I can use this entity in the xmlns attribute which has to appear in every single <math> start tag instead of the inferior (and long) URL http://www.w3.org/1998/Math/MathML.

Ok, I've made the decision: As soon as I finish converting everything from HTML to XHTML, my documents will be sent as application/xhtml+xml, with no content type rewriting magic done server side. This means, as you probably already know, that IE users will be "blocked" out of my site. Incidentally, I've changed my philosophy somewhat. I no longer see it as me blocking users from my site; the content is out there, and it's viewable. It's your software that sucks. Get, something, better.

Actually... no. That was done in a blind rage. Never mind. I'm not going to do it. I'll use server side magic to serve application/xhtml+xml to Mozilla and text/html to the rest. The nice people in #web reminded me that people using text-only browsers will also be prompted to download it, which just isn't nice.

I made a new design. Like it? I do. I was very inspired by Even. He really knows how to properly design web pages! April fool! The April fool style sheet is linked to as an alternate style sheet, so if your browser has that feature, you can select it.

Annoying discovery of the day: The W3C validator doesn't pick up missing character entity end delimiters (;) for HTML. Since I've always validated against the HTML standard (specifically, HTML 4.01 Strict), I've always been blissfully ignorant of this, but as I'm converting all my documents to XHTML (because of MathML) I'm haunted by "reference not terminated by REFC delimiter" errors. Now, the validator doesn't do anything wrong with not picking these errors up, as REFC delimiters are optional in SGML but required in XML (and it does pick them up when validating against any version/flavor of XHTML). These errors are my own, but I'm a little annoyed about how lenient SGML is...

I once tried to get MathML working, to no avail. Now I see why; I sent it as text/html when I should have been sending it as application/xhtml+xml, which is the proper MIME type for XHTML. With this knowledge, I put up a MathML test suite, where I'm basically playing around with MathML.

Now, IE users trying to retrieve documents sent as application/xhtml+xml will be prompted to download it, which means that I, even though it's not even my fault that IE sucks, have to find a way to send it as text/html to IE and application/xhtml+xml to everything else (unless I find out that there's another browser out there that can't handle the application/xhtml+xml MIME type correctly). I'm this close to just sending my documents as application/xhtml+xml to everything, and in the process ban IE users from my site. Is that smart? No. Is it tempting? Hell yes!

IE is the bane of my existence...

Let's have a little look-see at XHTML 2.0, shall we?

First up, we have <blockcode>. This will come in handy, since it beats <code class="block">. (<code> is an inline element by default.)

Then we have the <section> and <h> elements, and the suggested deprecation of <h1> through <h6>. A basic document structure in HTML:

<h1>Main title</h1>

<p>First paragraph of the main title.</p>

<p>Second paragraph of the main title.</p>

<h2>Sub title 1</h2>

<p>First paragraph of first sub title.</p>

<p>Second paragraph of first sub title.</p>

<h2>Sub title 2</h2>

<p>First paragraph of second sub title.</p>

<p>Third paragraph of the main title.</p>

But wait a minute. How do we know that the last paragraph "belongs", if you will, to the main title? With XHTML 2.0, you'd nest <section> elements. The level of nesting indicates the importance of the <h> embedded somewhere in there, thus allowing arbitrary levels of headings (no longer restricted to six levels):

<section>
  <h>Main title</h>

  <p>First paragraph of the main title.</p>

  <p>Second paragraph of the main title.</p>
    <section>
      <h>Sub title 1</h>

      <p>First paragraph of first sub title.</p>

      <p>Second paragraph of first sub title.</p>

      <h>Sub title 2</h>

      <p>First paragraph of second sub title.</p>
    </section>
  <p>Third paragraph of the main title.</p>
</section>

There. Now the last paragraph has a proper parent. Or sibling, depending on how you view it.

I don't yet know where I stand on the deprecation of <h1> through <h6> issue. On one hand, it would be nice to be able to choose your style. On the other hand, XHTML 2.0 isn't supposed to be backward compatible with any previous version of HTML or XHTML (HTML 2.0, HTML 3.2, any flavor of HTML 4.0 and HTML 4.01 (Strict, Transitional and Frameset), XHTML Basic, any flavor of XHTML 1.0 (Strict, Transitional and Frameset) and XHTML 1.1).

Oh, and <l>, which stands for line. This'll be used to mark up lines of text, like a poem or a piece of computer code. Doing it like this (as opposed to using <br>), will allow you to automatically add line numbers. To quote the specs:

"By retaining structure in text that has to be broken over lines, you retain essential information about its makeup. This gives you greater freedom with styling the content. For instance, line numbers can be generated automatically from the stylesheet if needed."

Source: www.w3.org/TR/xhtml2/mod-inline-text.html#sec_9.7.

It's pretty cool, but you can do something similar, today, in HTML, using list items and some CSS. Check out Simon Willison's Numbered Code Listing Experiment.

<q> is now <quote> and it's now the author's responsibility to add quote marks, not the UAs'. Otherwise, there are no differences between the two.

This is far from a comprehensive look at XHTML 2.0, it's just scratching the surface a little.

Went through the Archived News and deleted the title attribute of every <acronym> element whose acronym was already defined at the first occurrence in a given post. Eh, what I mean to say is, only the first occurrence of an acronym in a post has its title attribute set. This makes my posts appear cleaner, without all those pesky dotted underlines for each and every single acronym.

The clouds are gone, the sun is here... I reckon I should re-assemble the ping-pong table and play some ping-pong! ("Heh, he said table.")

Stupid realization of the day: Floats in CSS potentially span several elements, depending on whether they need to or not. At first I found this weird, but upon further pondering it made perfect sense. You see, that's the behavior you'd expect most of the time. Want it to keep its place within the containing element? clear to the rescue.

Drawing overlapping vectors sucks. I can't find a suitable way to do it! Currently, I use curly braces to mark sections along the line, but this is far from optimal. Especially with more than two overlapping vectors.

Seen on IRC:

jazz4u
sorry if I'm not as good as the rest in here, but I'm willing to learn.
jazz4u
less sarcasm and more helping please.

I wish more people had the same mind set; there would be a lot less sarcasm and a ton more help then.

Fixed the stupid gap that IE inserts between my navigation bar list items. It has something to do with IE flipping out when you use display: block; on anchors inside list items. In short, it's remedied by setting the list item's display value to inline. I'll research this some more, perhaps even make an extensive test suite. Thanks very much to John Serris for cluing me in.

I was very inspired by Eric Meyer's Pure CSS Popups and decided I'd try to improve on his technique, resulting in popup01 and popup02 on the CSS Alacrity page. His example lets the link and the link description run into each other, making it hard to see what the link is and what the link description is on UAs without CSS support. My immediate reaction was to use definition lists with the links in <dt>s and the link descriptions in <dd>s, like this:

<dl>
  <dt><a href="#">Home</a></dt>
  <dd>This will take you to the heart of my den.</dd>

[...]

  <dt><a href="#">Jason</a></dt>
  <dd>Jason's little corner. He has some interesting stuff going.</dd>
</dl>

But this soon presented problems of its own. I thought I could use the adjacent selector to select the <dd>s when the <dt>s are hovered (I really wanted to avoid this since IE doesn't understand :hover for anything else than <a>):

dt:hover + dd {
  [...]
}

For some reason or another, this does not work in Opera or Mozilla. Doing it the other way around (dt + dd:hover) works, but of course serves no purpose for what I want to do. So I looked for other alternatives. The first one, popup01, is almost identical to Meyer's example. The only difference is that all the links are in separate list items, and the link descriptions are separated by a hyphen, making it easier to see where they begin. Still, everything has to be within a link, with the descriptions in pointless <span> tags. I can do better.

The second one, popup02, is visually identical to the first one but structurally different; the descriptions are now in the title attribute of the links and extracted using CSS generated content, then positioned appropriately. This means that UAs not capable of handling generated content will still get the description, assuming they have a way to retrieve the title. Most do, in the form of hovering the mouse over the element.

Of course, both are displayed correctly and exactly the same in Opera, like they should. I mean, of course! Opera is king. Mozilla has an interesting, but wrong, rendering of popup02; it doesn't recognize that the generated content is being taken out of the document flow and thus displays it inside the list item.

This CSS business is fun.

Here's a thought. What if one could select character entities in CSS? If you wanted your right-pointing arrows to be a little bigger, you could do this:

&rarr; {
  font-size: 120%;
}

Or if you wanted a "tooltip" to appear over your weird Norwegian characters (æ, ø, å) to indicate pronounciation, you could do this (provided you've marked them up as character entities and not typed them directly as you can do if you use the iso-8859-1 character set):

&aring;:hover:after {
  background: #ccc;
  border: 1px solid #000;
  content: "This character is pronounced like the 'a' in the word 'all'."
  position: absolute;
  top: 10px;
  left: 10px;
}

Or if you plain simply just want to indicate where all your character entities are, you could make them all red by doing something like this:

&*; {
  color: #f00;
}

Ok, my redesign is more or less complete. The navigation bar is no longer a <table>, but instead an unordered list. It's now at the bottom of the source code but is brought to the top in visual media with CSS, and hidden in the print medium. Since the navigation bar is now structurally at the bottom, people using alternative or assistive UAs (such as screen readers or text-only browsers) will be presented with the main content first, and a generic link at the top of each page which enables them to quickly jump to the navigation (this is hidden in visual media, of course). All this makes for great accessibility.

Now, the navbar doesn't look all that good in Internet Explorer. It seems that setting display: block; on <a>s inside <li>s makes the <li>s really space out. I've been trying to find a workaround, to no avail. I could do display: inline; on them, but that would break the border across lines, which only makes it look worse in both IE and other browsers.

The Files page is gone. Maybe I'll put it back up when I have some real content to put there.

Like it? Hate it? Let me know at havard.skjaeveland@gmail.com.

Found a riddle I think is quite neat. It's written by Einstein, who supposedly claimed that only 2% of the world population would be able to solve it, but I really doubt that's true; it isn't really hard if you've got the patience and look at the facts one at the time. So here goes:

  • In a street there are five houses, painted five different colors.
  • In each house lives a person of different nationality.
  • These five homeowners each drink a different kind of beverage, smoke different brands of cigar and keep a different pet.

Find out, by utilizing these facts, who owns the fish:

  1. The Brit lives in a red house.
  2. The Swede keeps dogs as pets.
  3. The Dane drinks tea.
  4. The green house is on the left of the white house.
  5. The owner of the green house drinks coffee.
  6. The person who smokes Pall Mall rears birds.
  7. The owner of the yellow house smokes Dunhill.
  8. The man living in the center house drinks milk.
  9. The Norwegian lives in the first house.
  10. The man who smokes Blends lives next to the one who keeps cats.
  11. The man who keeps horses lives next to the man who smokes Dunhill.
  12. The man who smokes Blue Master drinks beer.
  13. The German smokes Prince.
  14. The Norwegian lives next to the blue house.
  15. The man who smokes Blends has a neighbor who drinks water.

Added another entry to the CSS Alacrity page; pos. It's supposed to be some kind of pseudo ad for CSS. A lot of suggestions for the slogan were flying back and forth, such as "CSS: Sense from style.", "CSS: When you've had enough dancing on the <table>.", "CSS: Weapon of <table> destruction.", "CSS: Keep your layouts off the <table>.", "CSS: Layout with <style>." and "CSS: Who gives a shit?", but I ended up choosing Tom Gilder's "CSS: Relearn your <table> manners.".

So, Even (remember, capital first letter means it's a name) has again started works on a new web site. It looks really nice, and uses very clean markup. Also, he promised me he'd actually follow up and update this one! :)

I've been playing quite a bit of DX:IW lately, and come to the conclusion that the game doesn't actually suck as much as the demo would have you believe, if you try to ignore all the goofy little things they messed up. Ok, let's rant.

The interface sucks. I'll summarize:

  • When clicking a menu item, there's about a half second delay before the submenu shows. Combined with the fact that there's no quick save, saving the game in this fashion quickly becomes a nuisance.
  • The notes section has adopted the functionality of the log tab from DX and you can no longer take notes by yourself.
  • The font size doesn't change when you change the resolution.
  • You no longer have a log of your communications.
  • Strangely, the game automatically deletes images which no longer apply to your current mission, which is stupid. I loved browsing through all the images I'd collected at the end of DX.
  • The inventory has been radically redesigned; say goodbye to drag-and-drop and welcome click-and-click. Also, you can no longer assign a number to objects for your tool belt.
  • The objects in your inventory have way too little information. What happened to information overdose à la System Shock 2?
  • There's an individual shortcut key to different screens; no more tabs.
  • Computer credentials and keypad codes are now invoked automatically (and not saved as notes). Say goodbye to wasting thirty minutes guessing a three-digit code, starting with 000.
  • Skills are gone.
  • Credits from ATMs are retrieved automatically.
  • The interface is generally too console-looking and intrusive, cluttering up your view.

In addition, the lockpick and multitool are still merged into a weird little piece which emits orange light. Not only does this look goofy, but what good does sending electronic impulses to a steel door do?

There are also some bright sides of the game, the ones that make me want to play the game in the first place. The graphics have been beefed up quite a bit. Every light source is now dynamic, and every object in the game casts and receives realistic shadows. Also, most (if not all) textures are bump-mapped, which makes for some pretty amazing effects, especially on the clothing of NPCs.

The game's got a full-fledged physics system. This is the first game I've seen where rag dolls interact with each other and not only with the environment. In fact, every inanimate object in the game interacts with everything else. Havoc time!

The story is awesome. The Omar are badasses. The new spiderbot is cool.

An Omar.

The non-linearity of the story is enhanced quite a bit, since different factions give you different objectives to complete, and your alignment with them depends on how (or if) you complete their objectives. Furthermore, these factions often give you conflicting goals, forcing you to choose between them. Also, there are (like in the first game) a lot of subquests you can do to earn extra credits.

There are 97 posts for 2004.