Articles about technology

I like my code alphabetically

I have a confession to make. It might be some variant of OCD, or just stupid attention to pointless details, but I like to sort my code alphabetically.

Whenever there is a list of things where the order doesn't matter, I put them alphabetically. CSS rules, methods, constants, whatever.

Ember on Rails: Validations

In the previous episodes we've built a working Ember.js application to manage our growing collection of Books. It lives inside a Rails application which it uses for its backend.

We're able to list all the books in our vast library, and also add new books to our collection. However, if we try to add a book without giving it a title, the backend gladly accepts it and saves it, which is probably not the optimal behavior.

It is time to add validations to our application.

Ember on Rails

I've been trying to get into Ember.js a few times by now, but I've always been dissuaded for various reasons.

This time around I'd like you all to learn with me - hopefully the act of me writing down what I do will make it stick better for me.

The plan here is to end up with an Ember application backed by a Rails JSON API - we'll see if the future agrees with that goal.

Baruco 2013

I don't go to many conferences - I am pleased that Baruco is one of them.

I really enjoyed the conference. It was well organized with a stellar lineup of speakers. I've returned home from Barcelona with things to ponder, things to try out, and a list of books to read.

Recreating Jane

So the Ender movie is coming out. That's... well, it's coming out.

This had me thinking about the book series and one thing from there struck me as being more science than fiction nowadays (don't worry, no spoilers):

In the later books of the series Ender has a digital assistant called Jane. Jane takes the shape of small in-ear dongle - a "jewel", which Ender communicates with using voice commands.

Could we create - or at least approximate - Jane using existing consumer technologies today?

How we took our tests from 30 to 3 minutes

One of my client projects have grown a fairly large test suite over the last years and it has become way unwieldy. Our original CI server took more than 30 painstakingly slow minutes to complete a test run.

While we are currently writing most our new tests in the fast test style, rewriting 20.000 lines of slow tests isn't something that'll be done in the near future.

So we needed to do something differently that would work here and now.

TL;DR

  • An irresponsible database and more hardware

CSV Query

I seem to often find myself munging datasets from various sources in CSV format. While grep, awk, and sort go a long way, command line tools for processing CSV data are surprisingly lackluster.

Sure, I could import the data into a database and run SQL queries on it, but that gets tedious after a few runs - unless, of course, if you automate it. Which I did, and I have decided to share the tool as CSV Query.

CSS, links, gradients, rounded corners, and IE

On a project we were recently given a nicely designed button that we should implement.

Button using CSS rendered in Webkit

No problem, I thought, that's doable using CSS3. Behold, it was (non-interesting styles like font color and size are removed for clarity):

HTML

<a class="button" href="#">
  Styled with CSS <small>(no extra markup)</small>
</a>

CSS

.button {
  background-color: #f98221;
  background: linear-gradient(top, #fec848, #f87d1a); /* Add vendor prefixes as needed */
  border-radius: 4px;
  border: 1px solid #eca253;
  box-shadow: rgba(0,0,0,0.2) 1px 2px 3px, inset rgba(255,255,255,0.7) 0 0 4px;
  display: inline-block;
  padding-left: 1em 36px 1em 18px;
  position: relative; /* Allows for absolute positioning relative to this element */
  text-decoration: none;
  text-shadow: rgba(0,0,0,0.3) 0.1em 0.1em 0.1em;
}
.button:before {
  background: url('icon_arrow_green.png') 50% 50% no-repeat;
  display: block;
  content: '';
  height: 100%;
  left: -2px;
  position: absolute;
  top: 0;
  width: 31px;
}

There was much rejoicing until the big blue elephant in the room reared its ugly head and pooped all over my nice and clean markup. Thank you, IE, so much.

Button using CSS rendered in IE9

Flash is not the 99%

An "infographic" showing some data points in the epic HTML5 vs Flash battle has recently made its rounds on Twitter and other sites.

I don't care much for whether Flash is the bees knees for games, but I do care about people misleading people with data. And some of the data points depicted in the graphic didn't quite sit right with me, so here's an attempt at figuring at least one of them out.

Flash is supported by 99% of web browsers

Ruby SSL certificate verification errors

On a client project, we had recently installed capistrano-campfire to get notifications in our Campfire chatroom whenever a deployment takes place.

Unfortunately I kept getting

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

when I tried deploying. There's nothing quite like starting the year with SSL issues...

According to this article the problem

... comes from the fact that the new Ruby 1.9 installation doesn't find the certification authority certificates (CA Certs) used to verify the authenticity of secured web servers.

I my case, I was using Ruby 1.8 (well, REE) on OS X Snow Leopard, but the problem - and solution - was the same nevertheless.

Routing requests to local development environment

Some third party systems needs to send requests to your web application in order to work.

Facebook fetches the actual application, Chargify notifies you of subscription changes, payment gateways tell you the transaction has been accepted.

That's fine in production where you have a public facing webserver running, but when you're developing locally you have to jump through a few hoops.

Import MTS video clips to iMovie

My parents have a digital camcorder. A week long vacation with said camcorder, my parents, and their only grandchild produces a fair amount of raw footage. Before we headed back home after the vacation I wisely snapped up all the footage from their camera hoping to eventually run it through iMovie.

Turns out their camcorder stores its clips in MTS/AVCHD format, and I didn't grab all the fluff^Wnecessary files. As a result iMovie '11 cannot import the MTS video clips.

The state of Ruby in Denmark

Yesterday marked the 5 year anniversary of Copenhagen Ruby Brigade. Five years ago, I was part of founding that group. Five years, imagine that.

Back then, you could have heard me claim I knew all the Ruby developers in Denmark. While probably an exaggeration, it wasn't far from the truth. Thankfully that is no longer the case. Yesterday, as I was sitting in the conference room at Podio looking at the other people present, I realized I didn't know half of them. This got me thinking about how far we've come in the danish Ruby community over the last years.

How to make a crappy API

So you want to add a web service API to your web application. Because, you know, that’s what cool startups do (when they are not busy pivoting).

Unfortunately creating a useful API is hard work and you’d have to maintain it and support it and that’s even more hard work and look at the time and the wife is waiting…

So what does a lazysmart developer do? You make your API so terrible that no one wants to consume it. Just follow these simple tips.

Experiment: PileUp Carousel

HTML5, CSS, JavaScript, hardware accelerated 3D transformations – this post has it all. Oh, and a live demo.

I recently had the idea of a photo carousel resembling a pile of photos being shuffled from one side of the screen to the other. The goal was to use as little JavaScript as possible and rely on CSS transitions instead.

New Ruby and Rails apps in Denmark

The number of live, production Rails apps is ever increasing. Even though Denmark is still primarily living in a Microsoft and PHP bubble, great Rails applications are being built around the country.

Out of curiosity, I thought it interesting to compile a list of the newer ones added to the growing list of danish Rails applications, and thanks to my Twitter followers came up with the following list.

On Flash, layers, and HTML5

A common problem when embedding Flash elements on a website is where the Flash content insist on being shown on top of all other overlapping layers of content. For example if you want to show photos in a lightbox on a page with Flash ads, you see the ads bleed through the lightbox and photo.

This is a known problem and the fix is generally to set wmode to opaque or transparent depending on your needs. Problem solved.

That’s what I though when I ran into the problem on eventzonen.dk. It turned out to be not that easy.

Hardware sucks

Once upon a time I would never dream of buying an assembled computer. I’d spend lots of time finding the right components and the cheapest places to buy them. I’d piece the big puzzle together sitting in my dorm room surrounded by cardboard boxes and bubble-wrap.

Most of the time the resulting machine would even work.

Fast forward some ten years to today. My brother recently asked me what processor was in my MacBook Pro and I honestly didn’t know. i-something, perhaps? I can barely remember how much RAM I have. Thing is, I don’t really care any longer.

The case against single line CSS

More is better – at least when it comes to lines of CSS. I personally prefer putting each CSS rule on their own line in my CSS files, but some people have advocated the use of putting each of your CSS rules on a single line, like so:

#wrapper            {width:800px; margin:0 auto;}
#header             {height:100px; position:relative;}
#feature .post      {width:490px; float:left;}
#feature .link      {width:195px; display:inline; margin:0 10px 0 0; float:right;}
#footer             {clear:both; font-size:93%; float:none;}

This single line approach makes it easy to scan through a stylesheet and find the selector you want to modify. But that’s also about as far as the benefits go for this approach.

Webkit-based Xbox dashboard

Webkit – and Safari in particular – have been really aggressive in adding support for upcoming CSS 3 features – and some CSS features not yet part of any spec.

As much of this is still Webkit-specific it isn’t really something I get to use much on client work, but not being one to shy away from new, shiny things, I though it would be fun to dig into this.

I decided to recreate an interface familiar to Xbox players, namely the Xbox Dashboard. It seemed like a good candidate to try out techniques like CSS animations, font-face, multiple backgrounds, gradients, RGBA colors, drop shadows, and custom scrollbars to name a few.

Java kicks Ruby in the what now?

When I first read the Java Kicks Ruby on Rails in the Butt article by Javier Paniza, I brushed it aside as something from the time when Rails was just getting traction and people using related, established technologies started feeling threatened.

I then noticed the date – turns out the article is only a few days old! Color me confused, could that article really have been written in 2009? I thought we had left the FUD-spreading behind us.

In an effort to educate Javier – and hopefully others – I decided to rewrite the Rails part of his article the way he would have written it had he had more knowledge and experience with Rails.

ImmediateFeedbackFormatter - Better formatted RSpec output

Update: If you want something like this for RSpec 2, use Fuubar

On one of my projects the specs are now taking a full 10 minutes to run on my machine. Needless to say, it’s mightily annoying seeing a spec failure in the output knowing you’ll have to wait for 10 minutes before you get the details of what’s failing and you can get to fixing it.

Luckily my co-worker, Laust Rud Jensen, had that same itch and decided to scratch it. Unfortunately he doesn’t have a website to post about these things, so I am posting it for him:

Stikipad doesn't spell doom for all cloud services

My rant about how Stikipad founders has screwed their customers attracted this comment from reader Verity, which I figure warrants a proper reply, not just a comment:

It proves that it will be a long time before we dispense with the desktop
apps. I for one only used stikipad as and when I wasn’t at my own computer
and needed to collect info/data as and when for later.

While I am obviously miffled about losing my data, I disagree with that sentiment. However, the Stikipad fiasco does prove that cloud services can be as fickle as the physical hardware we rely on today. And yet, even after several harddisk failures, we continue to store our data on harddisks.

The ultimate reality is that I am the one who should’ve been keeping a backup of my data – just as if I had the data on my local machine. Having my data stored somewhere in the cloud doesn’t free me from that responsibility. Unfortunately, I am not aware of any real, usable solutions for doing that kind of backups – a dormant business opportunity, perhaps?

Stikipad disappearing from the net and taking my and everybody elses data with it is unfortunate, but doesn’t prove anything general about other services.

It does turn out, though, that the cloud of tomorrow isn’t all that different from the physical hardware of today.

Poor mans Javascript console

Quick and dirty way of testing Javascript live on a website in browsers without Firebug:

<form onsubmit="try {
    $('output').innerHTML = $F('input') + ' => ' + eval($F('input'));
  } catch (e) {
    alert(e)
  }
  return false">
  <div id="output"></div>
  <input id="input" name="input" value="" on="" />
</form>

Requires Prototype, but could probably be rewritten as pure Javascript pretty easily. Could also be turned into a bookmarklet, I guess.

Podcasts as marketing vehicles

Apple, please make it easier for us to consume Steve…

Why is there not a single podcast I can subscribe to, so the HD versions of the most recent Apple keynote, iPhone SDK announcement, or any other reality-distortion-field-spreading event automagically appears on my media center Mac, iPod or iPhone?

As it is now, I have to wait for the video to appear on the website, then open iTunes, then find the podcast, then fetch the single episode, and then wait for that to download. And finally I can view it on my TV. If they instead provided a proper podcast, the iPhone SDK presentation would’ve been waiting for me when I got up this morning.

Apple has probably the biggest podcast aggregator in the world with the iTunes Store. They have near-ultimate dominans on the market for portable audio and/or video players. They have one of the most loyal and fanatic fanbases in the world. They provide high quality videos of their special events and the fanbase is slurping it up. Their marketing machine is highly effective at creating buzz.

They already have all the pieces of the puzzle, they just need to put it together.

They could even provide a podcast of their ads and people would subscribe. It’s free advertising directly to the computer, living room, or pockets of interested customers.

BarCamp Copenhagen

I am going to BarCamp Copenhagen on Friday. This being my first encounter with the BarCamp concept I have pretty much no clue what I am going into, and I am both excited and a tad nervous – I mean, it’s not every day one looses ones BarCamp virginity.

Looking over the list of attendees I can’t help but notice that quite a few Ruby developers – many from the jolly Copenhagen Ruby Brigade crew – are attending; we’re making up 10% of the attendees.

I probably won’t be giving a talk there unless I am hit by a massive amount of inspiration particles before then, but seeing that Casper is presenting I am sure the good word of Ruby will be spread. I will make sure to contribute in some other way at the event, though – in accordance with the rules of BarCamp

I am looking forward to it – and it’s probably a good idea to read up on the whole concept before Friday.

What's the definition of definition list?

According to the HTML 4 specification a definition list can be used to mark up dialogues. Mark Norman Francis objects to this, and in “his article on 24 ways” he goes on to claiming that using definition lists for anything but glossaries, lexicons and dictionaries is a crime against markup:

Living by the specification, a definition list should be used for term definitions

Warning: GZip content, Flash Player, and Internet Explorer 6

This is a followup to my post about using YSlow to optimize websites with a warning.

In that post I mention using mod_deflate to GZip encode all our text based content before delivering it to user agents supporting this. However, I’ve hit an issue with a specific browser. Yup, you guessed it, off course Internet Explorer doesn’t behave properly.

It seems there is an issue when Flash Player 9 running in Internet Explorer receives GZip-encoded content from the server. While IE has no problem with GZipped content on it’s own, it apparently fails to unpack and deliver the content to the Flash player.

This took our network mapper offline until we were alerted to the issue. This means we have to remove GZip encoding for all the content that the Flash player requests. Unfortunately I have not been able to find an easy way to do this just for the Flash player, so I’ve opted for turning off GZip encoding for all the requests to network.xml:

SetEnvIf Request_URI "/network\.xml" no-gzip

Sigh, why can’t things just work out of the box in this business.

Apple WWDC07 keynote thoughts

Going through my aggregated feeds today was a pain. Everyone were writing about the WWDC07 keynote stuff and I hadn’t seen it yet. So I had to stop reading and start looking .

And since I blog too little these days, I figured I might as well write down some notes and loosely joined thoughts while watching, so here goes:

Games

  • With Blizzard and now EA backing the Mac platform and doing simultaneous releases (did EA say this or only John Carmack?), we’re pretty well served in the games area. Other companies are bound to follow.
  • I wonder what the market share of Blizzard and EA combined is like, it has to be big chunk.

Leopard

  • Stacks look awesome
    • The Download stack in particular is great, talk about seeing a need and fulfilling it.
  • New finder – about bloody time
    • Cover Flow? Meh.
      • Cool, sure – “super useful”, doubtful
      • Although with Quick Look it might be good.
  • Back to my Mac – sounds really interesting, might be reason enough to buy .mac
    • Actually makes a good deal of business sense: They want people to have multiple macs, one in every room preferably. People aren’t going to do that unless it’s damn easy having more than one.
  • Time Machine
    • Definitely cool, shoddy UI
    • Wonder if they’ll come out with a Mac Home Server thingy. Jives well with the Back to My Mac as well.

Safari for Windows

  • Why?
  • The slide showed Safari obliterating Firefox’ market share, leaving only IE and Safari. Gee, that’s a bad plan if I ever saw one.
  • Their track record with Windows software isn’t terribly good
    • iTunes is slow as a dog on a sunny day on my XP machines
    • The UIs are different, and Apple aren’t really trying to make a Windows app.

iPhone

  • Web apps for iPhone
    • Cool, I like it, but then again, I am a web developer
    • What is this stuff written in?
      • Is it server based?
      • What the heck format do we serve up to get the iPhone look’n’feel and integration with iPhone services?
        • Some XML format? XUL? XAML? iML ;)?
        • Microformats? :)
    • Oho, this is why they’re putting Safari on Windows. They want to allow as many developers as possible to create and deploy Web apps for the iPhone and Safari for Windows allows the Windows developers to write their stuff on their platform.

Oh, and a funny sidenote: Steve Jobs (or someone else on the demo machine) apparently played WoW the day before the keynote ;)

Prototype and TEXTware QUICKfind vs Internet Explorer

You know we’re sitting on four million pounds of fuel, one nuclear weapon and a thing that has 270,000 moving parts built by the lowest bidder. Makes you feel good, doesn’t it?

After launching the rewritten and redesigned BiQ I got word of seemingly random IE installations crashing within seconds of opening BiQ. I could not find a way to reproduce this and it only occured on a tiny minority of client installations, so I shrugged it off as yet another reason to upgrade to Firefox.

Launch: BiQ on Rails

After 6 months of evangelizing and advocating, followed by 6 more months of rewriting, and then 3 more months of building new features and enhancing existing ones, we have finally launched the new version of BiQ.

Going from ASP/VBScript on Windows 2000 and IIS to Ruby and Rails on Debian served with love by Apache proxy balancing to a Mongrel backend, using memcached for relieving the database of those common queries, with continuous integration provided by Cruise Control and easy deployment through Capistrano sure as heck feels good.

Add to that the fact that the new look is quite delicious and powered by standards compliant XHTML sprinkled with a tiny amount of Ajax and a hint of microformats and Atom feeds, and has a blog and some new killer features and you’ll probably understand why I am happy.

Now it is time to make the site even better. ;)

Rails 2.0 deprecations

The Rails core team is cleaning up. That’s obviously a good thing, however it does leave us facing a kabillion deprecation warnings when running tests and whatnot.

Unfortunately the official deprecations page appears to have been thrown together quickly after someone noticed that Rails 1.2 had been pushed out without anyone finishing the page that all deprecation warnings were referring to.

So what does a smart Rails developer who wants to be ready for Rails 2.0 when that time comes around do? She reads on…

Online payments are still a mess

This is a followup to my previous rant about the state of accepting online subscriptions.

A few things happened after my post. Most importantly the client met with a focus group of potential users, and – among other things – talked pricing with them. Every single one stated they’d much rather prefer paying a one-off yearly fee instead of automated monthly subscriptions.

Accepting online subscriptions is a mess

Payment gateways, merchant accounts, transaction fees, statements, grraaaah, it’s driving me bonkers.

Here’s the deal: I have a client wanting to sell subscriptions for his web application. Nothing fancy, everyone’s doing it. It should be easy finding a payment gateway supporting that, right? I imagine it is once you manage to wrap your brain around the confusion that is payment gateways and merchant accounts.

Google Code Search launches

Google Code Search is a new search on Google Labs specifically for searching through, well, source code.

And what do the geeks do with it?

Awesome. I am sure there must be some legitimate uses for the search, though, and it’ll be interesting to see what creative geeks will create with it.

SAY WHAT?

Small plea to podcasters; Crank up the volume, we old geezers can’t hear your (probably) quality content.

I’m getting close to 30 years old and apparently my hearing is already failing. Even if I crank the volume on my iPod up to max it’s near impossible to hear what’s being said on the podcasts I follow. Unless ofcourse I’m located in a totally quiet room, which is far from my common listening environment.

TWiT gets audio quality and volume right. The podcasts published by the danish public radio do as well.

I’m close to giving up on podcasts. I frankly don’t see the point of subscribing when I can’t hear what’s being said and I really want to be cool and down with the young podcast-listening whippersnappers.

Looking for a Rails champion

At the day job I’m the sole developer and maintainer of a legacy ASP/VBScript system. Yes, ASP/VBScript. No, not .NET. And yes, it’s driving me insane. The code contains around 42000 lines of VBSCript drivel and 30000 lines of supporting Python code.

The other day I told my boss that I thought we should really, really consider rewriting the application. The existing one is getting cumbersome, hard to maintain, and let’s face it; it’s sucking my soul dry. My suggestion for a new platform is, for a lot of reasons, Ruby on Rails.

My boss was, not unexpectedly, hesitant to say “Sure Jakob, we’ll halt development while you use the next 6 months to rewrite what we already have”. However he was openminded enough to have me try and persuade one of the owners of the company who is a (or at least used to be) techie. Today I met with that owner, prepared to answers question ranging from “but does it scale” over “but what about the performance” to “but how will we ever be able to hire new developers”. It went pretty well.

The bottom line is that I am now looking for an outsider to champion our rewrite. Basically some expert with multiple, deployed Ruby on Rails applicaitons under their belt, who we can fly into Copenhagen, hold a one day seminar/discussion and tell me, my boss, and the owner, why this rewrite is a good idea, what issues we need to be wary of, and perhaps even guide us in a direction that’ll lead to eternal Rails bliss.

Update: I’ve finally managed to pry at least a single specific requirement from the owner: Whoever we get in here to persuade us, must have deployed real, live, revenue-creating production sites in both PHP and Rails. We’re apparently interested in hearing about the differences and benefits of those two approaches.

If you’re up for this, do get in touch with at jakob@mentalized.net or jakob@biq.dk.

Keeping files on multiple computers

I switch between a few different computers on a daily basis; a Windows machine at work, a Windows machine at home, and an iBook on the couch. This does cause some difficulties, one of those being about having access to the same files would be nice.

Podcast musings

I’ve been getting into podcasts recently, for various reasons. The concept of podcasts is great. Listening to smart and funny people is always interesting, and someones voice has a way of getting to you that letters on a screen rarely can.

I don’t, however, see podcasts or videocasts or shoutcasts getting anywhere near as popular as, say, weblogs or wikis. Audio and video as an online information-delivery vehicle carries a bunch of inherent problems.

Clearing up my thoughts about DIA06

In a previous post I took a few easy and cheap shots at some danish web development agencies. I did this since their websites irked a pet peeve of mine. Unfortunatly, in my eagerness to rant I ended up writing a post, that was utterly confused, drawing conclusions that were only partly cool. I apologize for the hodgepodge of that post.

I never meant to imply anything about the abilities of the individual jury members. I am sure they’ll do just fine awarding the Danish Internet. Also, I am sure they “get it” (some of them are even blogging) even though they work for companies that after a cursory glance appear not to. After all, I work for BiQ – a company with no weblog, no newsfeeds, and with validation warnings, and I still like to think I “get it”.

Also, thumbs up to Jon Lund, one of the DIA06 organizers, for noticing and replying to my post. Keeping up to date with the blogosphere and replying to negative posts is a sure sign of someone getting it.

Now, I am still pretty sceptical about DIA06 for various reasons.

Judging the judges of Danish Internet Award 2006

This post is inspired by the announcement of the Danish Internet Award 2006, sporting a 1999-style website complete with Flash intro and invalid markup (They do have a weblog, though).

I looked at the list of people from the grand jury and figured it’d be interesting to see if their companies “get it”. After all, there they are, trying to give out “danish internet awards”. Obviously these are people that has an excellent feel for what’s moving on the international scene in regards to Web 2.0, the web in general, syndication, blogging, folksonomies and what have we.

To make it fair, I only considered the websites of companies that should obviously have a clue, ie the web development agencies. For spice, I added a viral marketing agency to see how they’d stack up.

AJAX activity indicators

An important design element that’s part of the whole AJAX business is somehow letting your user know that stuff is actually happening while the server crunches away. A common way to do so, is to add a little animated GIF that is only shown when the AJAX request is happening.

37signals favor this one, which is taken more or less directly from Mac OS X, I reckon – at least stylistically. I am not sure of the copyrights on that piece of graphic, so I am reluctant to use it in my own apps. Also, occasionally you want something a bit different.

Which is why I’ve made and collected a few free (both as in beer and speech) animated GIFs and put them up here. Download and use them in whatever project you want.

If you have an activity indicator of your own and you want to share it with the world, email it to me, and I’ll get it up there.

Fluxiom is a web application?

Before you do anything else, go to fluxiom.com and check out their video. Then realize this; It’s a web application.

Holy crap! I can’t wait to see it in action. If indeed the interface and interaction is as the movie shows, this is probably the closest to a webbased desktop application we’ve ever been. It looks like something straight out of the Apple application shop. Go wollzelle!

Ofcourse, nothing less is to be expected with mr. script.aculo.us himself, Thomas Fuchs, on the team. He shares some more details about Fluxiom on his weblog.

Talk about raising the bar for the rest of us dabblers.

Looking for printer-shopping advice

The girlfriend and I are looking at buying a new printer. Our main criteria is that the printer must be usable from both Windows and OS X (and deliver nice quality prints, obviously). Things that would be nice in addition to that:

  • Network connectivity, so we don’t have to have one of the PCs turned on to print from the iBook
  • Color printing. Needs to have separate color/black cartridges in that case.
  • Scanning ability

Any recommendations?

Update: We bought a Brother

On the SONY BMG rootkit fiasco

I’ve been wanting to write about the recent SONY BMG Music copy protection fiasco for a while. The whole thing is simply so messed up and I find it hard to keep my mouth shut.
Short summary:

SONY BMG Music feels legislation alone is not enough to prevent copying of their CDs. They add copy prevention software to their CDs, which is installed silently on the customers computer when the CD is inserted in the drive. The software uses a rootkit, that hides the software from the user.

Sony BMG Music doesn’t see anything shady or insecure or untrustworthy in the practice of installing covert software that hides itself on the users computer and can’t be removed by regular people. After all, you accepted a 3000 word legalese document that fails to give the full story, and most users don’t know – and therefore don’t care – about the software.

However their rootkit is unstable, terribly hard to get rid of, and an easy way for malware to hide itself. The first worm to take advantage of this has been found, others are sure to follow.

CNET.com’s Molly Wood summarizes this nicely:

So, let’s make this a bit more explicit. You buy a CD. You put the CD into your PC in order to enjoy your music. Sony grabs this opportunity to sneak into your house like a virus and set up camp, and it leaves the backdoor open so that Sony or any other enterprising intruder can follow and have the run of the place. If you try to kick Sony out, it trashes the place.

The first lawsuits against SONY BMG Music have been filed over this. The first artists have distanced themselves from their distributors malpractices.

The SONY BMG Music website is ever so quiet about this.

One thing is certain, none of my christmas gifts will contain CDs from SONY BMG Music.

Slow Lighttpd on redirect_to

This seems to be an issue that pops up every so often on the Ruby on Rails mailing list and IRC channel and probably elsewhere. When using Lighttpd proxypassed behind Apache (this might also be true if you’re not behind Apache, I’m too lazy to check) the redirect_to function will take roughly 30 seconds to complete.

To get around this, you can disable Keep Alive in Lighttpd by adding the following line to your config:

server.max-keep-alive-requests = 0

According to the Lighttpd Trac this has been fixed earlier today, so expect this to go away with the next Lighttpd release.

Update: Seems you can also get around this by hacking ActionController. Personally I prefer disabling KeepAlive.

Lighttpd mod_cgi slowdown issue

My first Ruby on Rails project is currently being tested by some friends. Today one of them told me that it was running REAL slow for him; around 15 seconds per request! Needless to say, that’s bad (and weird, since I saw nothing of the kind). Thus began the hunt.

The application is running Ruby on Rails on MySQL on Lighttpd with FastCGI proxypassed behind Apache, which frankly makes it kinda hard to pinpoint a problem like this.

After a bunch of debugging back and forth it became clear that Lighttpd was screwing something up, even Webrick was serving pages quicker to him. However, I had no clue exactly what was going on, so I started trimming the config.

One item removed at a time, restarting Lighttpd, trying to access a bunch of pages, rinse and repeat.

Heureka! Turns out that removing mod_cgi from the list of loaded modules completely removed the problems. Why? Beats me, but there is no doubt that the entire application is running faster now. Even the logfile shows improvement (4-8 times increase in the amount of guesstimated requests per second). Apparently I wasn’t even using mod_cgi for anything except slowing Lighttpd down.

In the future I should probably configure servers using the same policy as when designing websites: Only include the necessary elements, simple, with less cruft. Lesson learned.

My favorite OS X applications

Jumping on the meme bandwagon, here’s a list of my favorite Mac OS X applications (so far):

  • Quicksilver – it took me a while to “get” this. Now, I definatly wouldn’t want to go on without it – and I am not even using it’s full potential. (Sidenote; these guys need to work on their homepage title. I missed their website on Google the first time)
  • TextMate – Damn nice editor, well worth the price.
  • Proteus – This is really the Instant Messaging application I’ve always wanted. As perfect as they come in my eyes.
  • Growl – Adds a little extra “oomph”; Consistent eye-candy with support for / supported by a lot of applications.
  • YourSQL – For all my data access needs.

Oh, it was supposed to be 10? Well, add Terminal, Safari, Mail, iCal and uhm… Finder to that. Yup, looks good. I can’t help but think I am missing something crucial, though.

Google Talk thoughts

Jabber-based, Google-sponsored Instant Messaging. Bloody hell, don’t I feel silly now for never getting my kickass Jabber client application running. Oh, and “hah” to all of you thought I was crazy when talking about the benefits of Jabber ;)

Could it be the first Jabber client with voice support? Wonder how Skype feels about Google stepping in on their turf.

Update: It seems they feel the need to say Skype opens IM and Presence to the world. Introducing SkypeWeb and SkypeNet.

Quality breeds quality

For a long time David tried to persuade me that the extra cost of an Apple computer was worth it, by excitedly telling me “It’s all about the experience, man!”. I didn’t believe him until I finally caved in and ordered an iBook.

Getting that iBook and finally experiencing OS X for myself has been an eye-opener. It is all about the experience, man! Everything about the OS feels polished and in unity. However, the real eye-opening experience for me didn’t come until I started looking at the (mostly indie) software available for the platform.

AJAXified live comment preview

Update: Ah well, it was a fun experiment, but I’ve decided to scrap it again, possible in favor of something pure Javascript’ish. The AJAX preview is either too unresponsive to be worthwhile or I send way too many requests against MT/MySQL that I am comfortable with on a shared server.

Thanks to the wonders of Sam Stephensons Prototype, Movable Types comment preview template and AJAX, I am now sporting live comment previews.

Go check it out.

There is an issue at the moment: It seems Movable Types comment preview doesn’t adhere to the settings I have set for stripping HTML, so some HTML elements might show up in the preview, but be stripped in the final comment. Bad, I know.

So far I’ve only got around to checking it in Firefox, but I think Prototype is my saviour here, and I assume the previews will work in all Javascript enabled browsers that support asynchronous XMLHTTPRequest – ie IE6, Firefox, Safari (I believe).

If you don’t have one of those browsers, well… What are you waiting for?

7 days on OS X

A few stray impressions, thoughts, and notes for myself regarding my first days as a Mac user. Some of these could probably be solved be reading the manual, but if OS X is intuitive I shouldn’t have to, dammit! ;)

I'm a switcher... somewhat

This entry is posted from Safari on my sparkling new iBook. Yup, that’s right, I am now more or less a switcher – even though I have no plans to discard the Windows PCs just yet.

So far the experience has been nothing but positive. Everything is intuitive – and delicious looking – and even though I’ve found myself guessing keystrokes or how to do things with the mouse I have generally been able to guess it within a few tries.

Thumbs up to Apple so far – and thanks to the generous soul who is unknowingly allowing me to post this from the comfort of my couch due to his open WiFi…

Google Web Accelerator brouhaha

The Google Web Accelerator has been a wake-up call for a lot of people (myself included), and it has resulted in a lot of fingerpointing and a lot of “I told you so ages ago, I rock, you suck”. Whatever, get over it.

Fact is the Google Web Accelerator has exposed an age-old problem (with age-old solutions) and we have a real problem on our hands. We need a real solution to this – and no, blocking the "GWA(fantomTip: How To Block Google

Safari passes the Acid2 test

Ever since it was made public, Dave Hyatt has been busy working on making Safari pass the Acid2 test. Yesterday he reached the goal.

Congratulations to Safari for being the first browser to reach this milestone, and huge thumbs up to Dave Hyatt for being quick, focused, and best of all very open and public about his progress.

However the race isn’t over. So far there is no public, stable, released version of any browser that passes the Acid2 test.

There is no “victory” until real life users can view the Acid2 test without flaws on their own monitor.

Heard around the office

Open source is for people who don’t want to make money

Note this wasn’t in reference to creating open source solutions, but about using open source to power your business (specifically at the database level).

Who wants to prove the above wrong?

Synchronizing my Outlook with my T610

I have a Sony Ericsson T610 cell phone, one Microsoft Outlook 2002 (yeah, I know…), a Bluetooth dongle I’ve forgotten model and make of, and XTNDCOnnect PC.

Once upon a time, they were all able to communicate with each other and everything was good. Then suddently, a mysterious thing happened, and XTNDConnect PC would no longer talk to the T610. Nothing I did, would make it want to again – until now.

A cry for MS SQL Server help

What would make a MS SQL Server 2000 randomly decide that performing write operations is too daunting a task? And instead of telling people that it doesn’t want to write things anymore, it just fails to respond while the query times out.

Nothing in the SQL Server error logs indicates any problems. Nothing in the SQL Server process list included in the email I get for every database error indicates any problems. Neither the event logs nor the IIS access log indicate any problems. The disk has plenty of free space. The server is not stressed in any way. It delivers results from reading just fine.

Still it just fails when writing. I am glad I am not a server administrator – oh wait, I am meant to be one in this case, doh.

To AutoLink or not, that's the question

I don’t get the big outcry surrounding the Google Toolbars upcoming AutoLink feature. People are crying foul, apparently because Google changes their content, that they can no longer be sure what readers see on their website, and that this is just the beginning of a slippery slope ending with tools freely roaming the Internet, changing links here and there while eating babies.

It seems to me people are overreacting.

MSN Search doesn't like me, so I don't like it

I put the newly launched MSN Search to the ultimate test: Searching for my name. Result #34, the last result of the bunch, was my about page. It was one of 3 results containing all 3 words from my name, and deemed less relevant than all other results. Result #1 was a list of weblogs, where I was mentioned with a link to mentalized, so they have been able to spider the site.

Leaving out my middle name from the search doesn’t even bring up mentalized as a result.

Searching for mentalized puts actual content from this site at result #15, below a bunch of sites linking to it. Matter of fact, we have to go to page 4 before we start getting results that aren’t links to this very site. Apparently links to the domain mentalized are more relevant than the actual website at the domain.

Another odd thing: When searching for my name, the number of results and available pages changed depending on what results page I was currently looking at. On page 1, I had 60 results and 5 pages, on page 2 and 3; 60 results and 6 pages. Then on page 4 I was suddently down to 34 results on 4 pages – how odd.

Sorry Microsoft, you may be trying to be good boy using near-standards, but a Google killer you are not – yet…

Google AntiAdWords

This showed up in my Google ads today:

Jens Jacob, Berlin

Apparently someone really has it in for Jens Jacob, Berlin and is willing to spend money on getting his point through.

This made me wonder what other, creative, non-advertising uses people have found for Google AdWords. Locating lost dogs? Finding a date for the weekend? Proposing perhaps?

Google Suggest

The big geeky story around the blogosphere these days is the new Google Suggest feature.

Drew McLellan takes you behind the scenes, Adam Stiles looks at and “hacks” the technical side of Google Suggest, and Kevin Gibbs who made the feature talks about how the idea stems from a lunch table conversation to a new service from Google Labs.

Remember though, this is not something new or revolutionary. A Sitepoint article from 2003 talks about this, as does this Apple Developer article (which dates back to primo 2002 it seems – what’s with the having no date on content :o/). While the execution of the techniques might not be 100% identical, the concept is.

Having a BigCo player like Google take such a visible advantage of this technique, hopefully means more people will be inclined to step up and do the same in their own projects. I am looking forward to seeing how this will be implemented in non-search-related areas.

Putting Debian on Ruby rails

David keeps yapping about his Ruby on Rails framework, and I have to admit it looks interesting.

So I decided to give it a shot, and see what all the fuzz was about. After all I only had to install 3 things:

  • Ruby
  • RubyGems
  • Rails

But oh boy, had I known the difficulties I was setting myself up for and I probably wouldn’t have…

Breaking the Linux barrier

Linux sucks. Or rather; Getting to know Linux sucks if you don’t already know Linux.

I don’t consider myself a total dimwit in regards to computers or command line processors and the like. As a fact, I tend to believe I am rather good at these things. Nevertheless – or perhaps that’s the reason – whenever I dive into Linux I end up going to bed too late and frustrated.

Setting up CVS over SSH on Windows 2000/XP

The last month I’ve had to setup CVS clients on a few different machines and each time I have cursed under my breath over how annoying Windows is for this.

Basically I wanted command line CVS access over SSH2 using public/private key authentication and I wanted to install as few tools as possible (read: preferably no Cygwin). I ended up using PuTTY’s Plink application for the SSH part and the “official” Win32 CVS client port.

What follows is my guide to installing CVS. Note, this is what worked for me, nothing else. This might work for you, it might not, and it might blow up your computer, so use at your own risk.

Validating IE team websites

Scoble assures us that it is untrue that Microsoft doesn’t want to comply with the W3C standards. Dave Massy from the IE team calls it a myth that Microsoft doesn’t support standards.

Still, the newest addition to Microsofts IE-marketing, the IEBlog, indicates the opposite. As do every known blog run by members of the IE team.

I realize validation isn’t the end-all, be-all of standards compliance. However I would expect, that the development team that has to struggle with parsing and rendering the bottomless bowls of tag soup making up the WWW today would be a little more concerned about outputting proper HTML.

To be fair, it seems like they’re simply relying on some internal blogging/CMS tool and the real culprit is this tool.

Here’s to hoping that Microsoft will some day put their money where their mouth is, and actual show the world that they understand, know and care about webstandards. Producing a single semantic, validating website would be nice first step.

Why HTML email must die

I just received my first (non-spam) email taking advantage of everybody’s favorite HTML-tag, <marquee>. In a business related email, that I was supposed to take seriously. Somehow that proved quite difficult.

The tale of changing DSL providers

At the beginning of 2004 I made the decision to change from my internet provider, Tiscali, and get a new one, Cybercity. Now, a few months later it seems evident that Tiscali don’t want to let their customers go, and Cybercity don’t want new customers.

I have now decided to publish my journal of the tragicomical events in this tale (in danish). Sadly, I didn’t have enough common sense to write everything down from the beginning, so the journal isn’t complete.

The bottom line of the story so far, is that I feel lied to and neglected by my (perhaps) coming ISP – even before becoming a customer.

Damn you all to hell!

Arg! “Re: Re: Document”, “stolen”, “Fake”, “Re: Your bill”, “something for you”, “Re: Your document”, “hi”, “hello”, “unknown”, “warning”, “read it immediatly”, “information”, and the list goes on.

People, stop getting viruses – how hard can it be? Having a virus scanner is no reason to not apply common sense when reading emails. Failing to do so results in me having to deal with people assuming that since your virus forged my email address as sender, that I am the one stupid enough to have been infected.

Sigh…

Online comics

First of all, these are the web comics I try to keep updated with:

Some of them update daily, some weekly, some whenever they feel like it, which are all fine. However, as far as I can tell, only 3 of them provide a way to notify their readers about an update, and they only do so by email.

Online comics is such an obvious area to apply the push-mimicing technique of RSS feeds. I know a select few comics are available at Tapestry, but a third party solution like that is somewhat sketchy (as evident by the recent removal of Calvin and Hobbes from the Tapestry feeds).

I wonder why not more comics supply feeds, it would be a great way to keep readers coming back whenever a new strip is released. They don’t even have to include the strip in the feed if they want to expose their readers to advertising – a simple link to the updated strip would keep me happy. Perhaps a Tapestry-like service that comic authors could sign up for so they wouldn’t have to go through the technical hassles, hmm…

End the autoreply madness already!

Fine, so you have an email server or client that can autoreply to people sending you mail, notifying them if you are on extended vacation, “on course” (actual autoreply), taking a dump or whatever, great for you.

But please, for the love of my time and everything else I consider sacred, do not start sending autoreplies stating “I will reply to your email”! Think, please. You don’t have your answering machine saying “I am here, I will answer the phone” do you?

Imagine for a second what would happen if I started doing the same thing in reply to that autoreply? I am sure our mail servers would love having that little chat and I would love seeing my inbox fill up with mindless drivel – I get enough of that from spam already, thank you.

If you want to reply to my email, how about actually, you know, reply to it?

Hell froze over

Hell froze over and “probably the best Windows application ever written” was released. And I could care less:

The iTunes Music Store is not available in your country yet. You will be able to browse music and listen to previews, but you won’t be able to purchase music unless your billing address is in the United States.

Google rocks my world

As if Google wasn’t absolutely amazing already, it now features a calculator. Apart from doing basic calculations, it also converts various physical units, ie what is 45 degrees Celsius in Fahrenheit. How cool is that?

Oh, and shameless Firebird plug: I just realized how Firebird and other browsers make this addition to Google so much cooler. I always have a “Search in Google” textfield in the corner of my browser. A simple keyboard shortcut and I can convert and calculate. Good job.

Now, patiently waiting for currency conversions to appear.

Sorry for my continued adding to this entry, but this searchto+life+the+universe+and+everything in the calculator is too funny. (Via, Mark Pilgrim)+

Why you shouldn't use MSN for search

Going through my referrerlogs I noticed a person coming from an MSN search for “keyboard” (“tastatur” in danish). Investigating a bit, I found out that MSN Search ranks me as number 4(!) using that searchterm. To be fair, I have mentioned keyboards on occasion, so I can see why my site might be relevant, but I place higher than many manufacturers and retailers of keyboards.

However, the fun will reach no end. The description on MSN Search of my website is (translated – original here):

Jakob Skjerning invites you inside and presents his weblog. Among other things, you can read about his experiences with his new keyboard or see how you can wash your clothes via the Internet.

Oh yeah, that description is spot on, keyboards and online washing machines, that’s what Mentalized is all about. Whoever has written that? It certainly isn’t me. Does MSN have people sitting around writing descriptions for every website in their index?

Anyways, ignoring the irrelevance of my website for that search and the out-of-sync description of my website, MSN Search makes yet another mistake; The link takes the user to my journal index. Not to the post I wrote about a keyboard, not even to a page containing the word that was searched for.

Three strikes for MSN Search, you’re out. Since Microsoft wants to become a major player on the searchengine market, they better shape up and create an engine that can deliver some proper results. I am guessing the major reason any people use MSN Search is because it will per default be invoked from the addressbar of IE, not because it is the better choice.

In semi-related news, Google thinks I am authorative on “butts in tight leather”, hehe.

20 questions to the AI

Artificial Intelligences are brown, dangerous, hunts for food at night and are generally pleasurable. At least according to this AI which challenges you to a game of 20 questions. You think of an object and the program tries to guess what it is in less than 20 questions.

It is pretty good at it actually, and since the program is learning all the time, it will become better as more people play the game. So far it has beat me in most common objects like “a video game” or “a ceiling fan”. More obscure objects like “a dragon” took more than 20 tries, having the AI guess at a bunch of different dinosaurs first. Furthermore, the AI seems to believe that a formula 1 car is similar to a dragon, oh well…

It’s impression of itself could do with a reality check though:

Uncommon Knowledge about artificial intelligence
Is it dangerous? I say Probably.
Does it have fur? I say Probably.
Does it usually hunt for food at night? I say Probably.
Is it brown? I say Probably.
Can it swim? I say Yes.
Is it a domesticated animal? I say Yes.
Does it exist in other dimensions? I say Probably.
Does it have arms? I say Yes.
Does it have feet? I say Yes.
Does it have a sense of smell? I say Probably.
Is it pleasurable? I say Yes.

Via Kottke.

New bot on the block

I too have been visited by MSNBOT, Microsofts newest weapon in the battle for search supremacy:

2003-06-19 07:24:42 131.107.163.58 GET /robots.txt - 404 270 MSNBOT/0.1+(http://search.msn.com/msnbot.htm) - 2003-06-19 07:24:42 131.107.163.58 GET /index.asp - 200 0 MSNBOT/0.1+(http://search.msn.com/msnbot.htm) -

For more information about the bot, check out Microsofts page about it and an anonymous source description of what it is all about.

I wonder what all the RSS fuss is about

They are all doing it; advocating RSS and/or providing RSS feeds. Heck, I myself am providing an RSS feed for those who care, although I have never been one of those who cared for reading blogs via RSS. I have tried to care for it a few times, but somehow it didn’t appeal to me.

However, people praising RSS over and over again have persuaded me to give RSS aggregators a shot once again. So be it. AmphetaDesk, Aggie, FeedReader, and Syndirella have been downloaded, the hunt for the perfect acceptable RSS feed reader has begun.

IP address to numerical

An IPv4 address consists of 4 bytes and is generally represented as A.B.C.D – for example the IP address of mentalized.net is 217.116.224.24 (note, you can’t actually use this IP address to access mentalized.net). This address can also be expressed as the numerical value, 3648315416.

The numerical value is easily calculated by considering an IP address as being a 4 byte value. In hex this gives us D9.74.E0.18 – dots added for clarity. Without the dots, the hex value represented here (0xD974E018 – which can also be used as an IP address) equals 3648315416. In short:

217.116.224.24 = 0xD974E018 = 3648315416

There you go, Thomas :)

PhoneCam to blog in 7 keypresses

So to recap, I take a photo with my phone, push about 7 buttons to send it off to a secret email account on one server. A cronjob on a different server checks the account every 10 minutes, then processes the messages and sends the results to a third server via xml-prc, which updates a movable type blog (including one custom template to produce the table you see above, and another template to create the CSS on the fly), which is included in another movable type blog

I know, I'm a geek, but that's seriously cool; "instant" photoblogging from ones camera telephone. Better living through Linux, XML-RPC and open source? ;)

Bogus referrers

My referrerlogs are being polluted. Popdex, Organica, Technorati and others seem to not care about the HTTP specification and are reporting bogus referrer headers from their spiders.

From the HTTP specs regarding the referrer headerfield (emphasis mine):

The Referer[sic] request-header field allows the client to specify, for the server's benefit, the address (URI) of the resource from which the Request-URI was obtained [...] The Referer field MUST NOT be sent if the Request-URI was obtained from a source that does not have its own URI, such as input from the user keyboard.

The above-mentioned sites all have spiders crawling websites, and in violation of the specs they all pass an URL to their own website in the referer-field although none of them has obtained the URI to my site from the URI they are passing (do you see a link to me at http://organica.us/r? Didn't think so).

My initial guess was that the misuse is a failed attempt to explain what their spider is and where it is coming from (conceptually the spider is coming from ie http://www.popdex.com/ but it sure didn't obtain my URI there). However another field exists that can rightfully be used for this purpose; The user-agent field - put links to your website there.

It turns out that at least Popdex and Organica already utilize the useragent field for this, so I am left to wonder why they're messing with the referer field. Ignorance comes to mind, luckily that can be remedied.

It annoys me that people opt to pollute my referrerlogs with fake data. I am especially surprised by the 3 above-mentioned sites doing it, seeing how they all rely heavily on the blogging community, that generally doesn't look mildy on misuses like this. News aggregators have been taught to behave, hopefully the spiders are next.

Reinstalling at work

At last my new computer arrived at work, and I could start installing all the software-goodies I claim to need. For some reason I decided to write down what I installed and in which order, and for some even more obscure reason I am going to share that list with you – aren’t you thrilled?

I will most likely be adding small tools and utilities to the machine during the next many months, but the above should enable me to get my work done (now I only need to install a motivator in myself then I’m settled).

One notable thing I have deliberatly skipped installing so far are the various programs I use for my own pleasure – ie. The Bat for checking my mentalized-mail and mIRC for general chatting purposes. In some vague way I hope this will improve my efficiency a bit, although I have always been under the delusion that it didn’t decrease by having those programs installed (and running). I guess time will tell.

EU granting copyrights to consumers?

After all but 2 EU nations rejected the restrictive European Union Copyright Directive (EUCD), the European Commision has now presented a much lighter directive. This new directive tries to preserve the rights of individual consumers while trying to stop commercial copyright infringement and piracy through filesharing services. If the directive passes, it should mean that we as consumers will be allowed ownership of the content we buy and will be free to create copies of CDs for use in our car stereo, rip MP3s for the iPod, and buy DVDs from other regions. Not surprisingly the content-owners claim the directive is "inadequate" and "unambitious". I will not even pretend that I have the knowledge to judge the adequacy of the directive, but if there is anything the directive is, it is ambitious. Trying to actually give the consumers freedom to do what they want with the products they buy, instead of turning them into outlaws when they want to listen to their personal selection of smash hits while commuting to work seems quite ambitious to me and like a huge step in The Right Direction.

Too nosey for referrerlogs

Heh, going through referrerlogs is kind of fun in a geeky sort of way. Doing this I stumbled across an odd referrer to my previous post. A little digging revealed that the visitor came from a browserbased email reader. In other words, someone has sent the URL of one of my entries to somebody else, who followed the link to my entry. Why anyone is sending emails about my entries around the net I dunno, and it annoys the hell out of me - even though it really doesn't matter one bit. I guess I'm just too nosey to scrutinize referrerlogs.

"You use icons, now pay up"

If your company website uses images for navigation and some method of keeping those images visible at all times while browsing the site (like frames or CSS), you are possibly owing Ameritech Corporation money. They own US Patent no 5'933'841, title "Structured Document Browser" which in part reads

When the icon is selected while browsing a document, the browser will display the section of the structure corresponding to the icon selected, while preserving the constant user interface.

They are now testing their claims against the website www.museumtour.com, and if they win, museumtour.com is to pay a license fee for using icon-based navigation. Hey, let's claim to own a patent on website navigation...

Redesign list

Brad Choate is redesigning his website, and he's blogging his progress. He has a long list of ideas/task indicating a good deal of care for usability/technical details and is checking them off as he goes. In a voyeuristic kind of way, it is interesting to watch how somebody else deals with a redesign process, and with minor tweaking his list can be used as a general (albeit not complete) checklist for most (re)design tasks out there.

Wow...

This is pretty cool. Apple recently announced their Safari webbrowser. That's fine and dandy, and I don't use a Mac,so I don't particularly care, but big parts of the blogging community is all over this announcement (quite understandably I might add). On January 7th, Matthew Haughey wrote on his weblog about Safari, among other things stating
My biggest problem with Safari is that it seems to default to a 72dpi display instead of every other modern browser's 96dpi.
A day later, January 8th, Dave Hyatt who's a developer on Safari, writes on his personal weblog:
we have Safari working at 96dpi now
Fast reaction, open communication, no bullshitt excuses, way to go! When is Safari due for Windows?

Experiencing Outlook XP

To make my start of 2003 even more pleasant, it turned out that my boss had bought himself a new laptop. A nice little machine that I luckily didn't have to install as it came preinstalled with Windows XP and Office XP. Unfortunatly, Outlook XP apparently sucks for formatting mails.

...Would you like bugs with that?

Sigh, the year 2003 sure starts interesting. One of the developers we have used in building an important tool for our website apparently didn't have enough confidence to believe that his work would be used for more than half a year. At leasn't he didn't bother to create a date-recognizing algorithm that accepted years after 2002 as proper dates, so when my boss tried running the tool on his first day at work in the new year, it broke. 1 minute later I get torn out of my warm, cozy bed about an hour before planned and had to go through his crappy code to fix his thoughtless bug before I even got my first cup of coffee. Not surprisingly, the regex "19\d\d|200[012]" does not cover all possible years. Gee, a year 2003 bug, and it's all mine, I'm so pleased.

Some spammers don't even bother...

SpamAssassin caught yet another spam-mail for me today. I am pretty sure I have never seen spam score this high (22.80 points):

SPAM: Content analysis details: (22.80 hits, 4 required)
SPAM: TO_MALFORMED (-0.8 points) To: has a malformed address
SPAM: USER_AGENT_OE (-0.3 points) X-Mailer header indicates a non-spam MUA (Outlook Express)
SPAM: MIME_ODD_CASE (3.5 points) MiME-Version header (oddly capitalized)
SPAM: FROM_MALFORMED (2.2 points) From: has a malformed address
SPAM: INVALID_MSGID (1.2 points) Message-Id is not valid, according to RFC 2822
SPAM: SEARCH_ENGINE_PROMO (2.9 points) BODY: Discusses search engine listings
SPAM: EXCUSE_7 (2.6 points) BODY: Claims you can be removed from the list
SPAM: EXCUSE_3 (1.9 points) BODY: Claims you can be removed from the list
SPAM: REMOVE_SUBJ (1.7 points) BODY: List removal information
SPAM: JAVASCRIPT (-1.4 points) BODY: JavaScript code
SPAM: HTML_FONT_COLOR_RED (-1.2 points) BODY: HTML font color is red
SPAM: BIG_FONT (-0.4 points) BODY: FONT Size +2 and up or 3 and up
SPAM: HTML_50_70 (-0.1 points) BODY: Message is 50-70% HTML tags
SPAM: SPAM_PHRASE_13_21 (3.0 points) BODY: Spam phrases score is 13 to 21 (high)
SPAM: [score: 17]
SPAM: HTML_FONT_COLOR_BLUE (0.8 points) BODY: HTML font color is blue
SPAM: MAILTO_LINK (-0.6 points) BODY: Includes a URL link to send an email
SPAM: JAVASCRIPT_UNSAFE (-0.3 points) BODY: Easily-executed JavaScript code
SPAM: FORM_W_MAILTO_ACTION (2.4 points) BODY: Includes a form which will send an email
SPAM: MAILTO_WITH_SUBJ (1.7 points) URI: Includes a link to send a mail with a subject
SPAM: DATE_IN_FUTURE_06_12 (1.7 points) Date: is 6 to 12 hours after Received: date
SPAM: MISSING_MIMEOLE (1.6 points) Message has X-MSMail-Priority, but no X-MimeOLE
SPAM: CTYPE_JUST_HTML (0.7 points) HTML-only mail, with no text version

Tweaks and upgrades

During the weekend I've been going through the site, tweaking CSS, HTML and Javascripts in order to become 100% standards compliant and to fix some visual quirks. After struggling with Movable Type templates, their standard scripts, the lack of CSS2 support in IE, and other minor details (like the fact that IE actually renders <form>-elements), it looks like I have reached my goal. All pages should now validate as XHTML 1.0 Strict and my stylesheet validates as CSS2. If you happen to find one that doesn't, let me know.

Microsoft to be taken seriously?

Yet another critical security hole has been discovered in a piece of Microsoft software. Naturally I want to close that hole, so I download and run the patch. Now I am faced with a dialog telling me that I need to reboot my server after patching. Are you kidding me? I patch the data access components, which are far from an internal part of the Windows kernel (I am not even sure I use them on the server, but I don't feel like taking any chances) and they want me to shut down a server in production? How can they even suggest it? Doing a quick restart of invidual services I could go along with, but rebooting the server, I don't think so.

PDA temptation

Ok, I admit it, I am a sucker for gadgets, and especially PDA-style devices seem to be aiming for a soft spot in me. Today Dell's Axim X5 hit me. With a 400Mhz processor, 64MB RAM, expansion for 802.11, space for Flash RAM cards and Audio output it looks very tempting. It doesn't look too bad either.

Hey Einstein

Wise words from PHP father Rasmus Lerdorf:
"Don't over-architect things. If your solution seems complex to you, there is probably a simpler and more obvious approach. Take a break from the computer and go out into the big (amazingly realistic) room and think about something else for a bit."

Spam, spam, baked beans, and spam

phil ringnalda dot com warns about the latest idea from the lowlife scum also known as spammers: Target the comment sections of blogs using a script that posts a comment to every entry on the blog. Why don't we just do like we do at Daily Rush? When a comment is posted, the blog-software checks if a post like it (either exactly or using some isTextAlike-algoritm - I believe a couple exists in CPAN making implementation in ie Movable Type reasonably easy) has been made recently (or at any point). If it has, the post isn't accepted. The deluxe version could automatically ban the posting IP after a fixed amount of tries. It seems to me this would probably take care of most of the problems - at least until the spammers get a clue.

Mining emails

Just for kicks I created a tiny web-spider (less than 2K, 30 minutes coding time) in Python designed to get email addresses off websites. The script is small, the rules for recognizing website- and email-addresses are real simple, but still it is pretty effective. Starting at my website and crawler no further than 1 link away - only following links to the homepages of websites, it runs for half a minute and returns 18 emails after crawling through 28 URLs. If I increase the distance it can crawl away from my website to 2, it crawls through 306 websites and returns 151 email addresses. Sheesh, is it really that easy - no wonder I'm getting more and more spam. Although I am wondering, how come there is a market for selling email addresses when it is this easy to farm them.

Musical dinosaurs

Not only the danish newspaper industry aspires to become the next extinct dinosaur in the digital world of tomorrow. The music business is right on their tail. EMI has announced that they have found the solution to their dwindling income: They will simply use copy-protection on their CDs - that should take care of digitally pirated music... I am terribly sorry, but I fail to see why EMI believe they are different from the software business, where decades of copy-protection have not got rid of the software pirates. I also fail to see how this will solve the problem with the distribution of MP3's which until now have been blamed for the decline in revenues. And lastly I fail to see how they can be so naive to think that a copy-protection will actually work - if it can be read digitally, it can be copied digitally. Think again, EMI - or is it simply "think"? Update: Spotted this great column while surfing past CommonMe.

Online laundry

This is pretty cool: IBM connects washers and dryers to the web, meaning students living in dorms can monitor and control their laundries from their computer. From a website they can monitor if a washer is available, they can dispense soap and even receive an email when their laundry is ready to be picked up. Payment for the laundry is handled by either credit or by using a cellphone - very nice touch. To put this a bit in perspective, back at my old dorm we considered putting a webcam in our laundromat to spare us from having to walk to the basement to check for available machines. The idea was scrapped because of lack of funding - I suppose we should've have asked IBM to spearhead the project for us.

Adjusting ergonomically

In an attempt to make my working enviroment more ergonomically pleasing, I (quite literally) laid my hands on one of those curved keyboards, that are supposed to be more healthy for your arms and hands. I swear, the transition phase is going to take a while. I have never received any formal training in typewriting, but I have learned to write at a decent pace over the years using my own system, which I suppose is a decent approximation of the usual 10-finger system. And that is all it is, an approximation, and it seems my new keyboard is determined to keep reminding me of that. It is divided into two blocks of keys, one for each hand. This probably makes a lot of sense for people using the correct 10-finger system, but for people using the Jakob-10-Finger Systemtm it gives all kinds of problems, like instead of hitting the y-key, they hit nothing but thin air. I simply cannot force my right hand to be in charge of pressing the y or h. We'll see how long before I give up because of this and return to a standard keyboard, and in the meantime I am happy I am not trying to get used to one of these keyboards.

Patenting existing technology

Yet another ludicrious software patent has seen the light of day. ActiveBuddy has been granted a patent regarding Instant Messenger bots. In short the patent covers systems who can receive queries from remote computers and return an answer – all done via instant messenging.

The founder of ActiveBuddy, Tim Kay, claims:

"We invented interactive agents. […] We are a startup company and we have to protect our future.

Dear Mr. Kay, it is impossible for a company to be a startup and at the same time having invented interactive agents for Instant Messengers. Interactive agents (or bots), that respond to textual queries from remote computers, processes the query and returns an answer has been around for ages, utilizing several messaging protocols including ICQ, Microsoft Messenger and IRC.

By my hasty quasi research, I’ve managed to find the Eggdrop IRC bot that apparently has been around since 1993 – that is 7 years before ActiveBuddy was even founded.

The book, Bots: The Origin of New Species from 1997 describes several bots existing at that time (read extracts from the book here.

On The MUDdex you can find logs of bots responding to textual queries, dating back to 1989.

Mr. Kays answer when faced with the fact, that interactive bots existed long before ActiveBuddy was founded: “I’m not familiar with that”…

Censored by M S N

Apparently Microsoft have decided to put themselves above morals and ethics and decide for the users of the MSN Messenger what they may and may not call themselves. When trying to change your .NET name, some words will simply make your name “invalid”. So far I have identified the following, does anybody have a list of these forbidden words?

  • Abuse
  • Admin
  • Fuck
  • Microsoft
  • MSN
  • Messenger
  • Spam
  • Tits

Oddly enough, “porn” is accepted…

Yum, this spam is fresh

We all know them, and we hate them all: E-mails in your inbox advertising everything from "Get rich in 5 minutes"-schemes to penis-enlargements and "free" busty blondes. Now I wouldn't mind any of those things, but I do mind the advertisments for them polluting my inbox. Unfortunatly I am a gullible fool and have a tendency to post my e-mail address all over the internet and sign up for all kinds of services. "Oooh, become a user - click-clickety-click-submit". Heck, I like people being able to get in touch with me, even people I do not know, but I do not want to have to scuffle through myriads of spammails to find the one interesting mail that day. So I decided to start fighting back instead of forever silently deleting unwanted mails. Luckily my email provider gave me the opportunity to have my e-mail account moved to a mailserver running SpamAssassin, a rule-based spamfilter. All I need to do know is to sit back, setup a filtering rule in my e-mail client which could move all spam to a seperate folder, delete it, reply calling the sender a lameass goatwanker, forward to Spamcop or some blacklist or whatever I desire. Most important, I can go through the spam when I feel like it and do with it what I deem necessary. Last night I did my first submission to Spamcop. It locates e-mail adresses, builds and sends complaint-mails to administrators, all while protecting my precious e-mail address. Even though I realize my reporting efforts most likely are in vain, I had a smug grin on my face when Spamcop reported: "Yum, this spam is fresh".

Don't do sigs

Most new bulletin board systems like phpBB, EZBoard and UBB provide users with the ability to put their personal mark on their messages in the form of textual signatures and smaller personal icons. Alas the users are usually also provided the ability to use graphics in their signatures and quite frankly, most users should not.

Deep linking?

Dave Winer pointed me in the directon of a story on Wired regarding deeplinking. The story is particularly relevant for me as it involves the Danish Newspaper Publishers Association and the company Newsbooster (which has offices two floors above my office and by the way is hosted by our owners). The ruling in this case is going to affect rulings about copyright infringement in every country of EU. The DNPA is apparently mad about Newsbooster creating links directly to individual stories on their websites, which the DNPA provides voluntarily and free of charge, thereby surpassing the frontpage and other pages the user otherwise would have to pass through ("click here" instead of "click here, click there, then there, scroll down, the click there"...). Instead of spending money on lawsuits, the DNPA should get off their reptilian dinosaur butts and either plainly remove the content they don't want linked, or lock out visitors coming from Newsbooster and/or other non-approved sources. That solution would be both cheaper and faster for them, and in the future they would not be forced to mobilize the army of lawyers whenever a vicious villain decides to overstep the borders of "intellectual property". This case makes me wonder if the DNPA is ready to even have an online presence. It seems to me that they are more comfortable in an enviroment based on writing and paper, where nobody would ever show a single story in a newspaper to a friend without showing him the frontpage and all the other pages first...

The power of six degrees

I just had an e-mail arrive in my inbox. That itself is not particularily special nor interesting, however the sender was a person who seems to be existing in the outer rim of my own, little, personal world. For some reason our lives seem to cross paths once a year or so. What strikes me as interesting about this whole deal, is the way he found me. Apparently he followed a chain of blogging links from one of his friends blog and ended up looking at this digitalized version of my life. The power of Six Degrees Of Separation in full effect.

The need for communication

On any given day, when I am sitting at home after work, I can be contacted through 2 different instant messengers, 3 different e-mail accounts (with a multitude of aliases each) and on 2 different IRC-networks (where I am on around 10 channels). Talk about being desperate for communication. Funny thing is, when somebody I don't know tries to contact me, I usually ignore him/her.

This is a weblog

I have always promised myself that I would not fall prey to the blogging-fever that has been going around, and for a long time the title of my website actually was "This is not a weblog"... Well, nothing lasts forever - neither did my opinion on weblogs. Welcome to my journal.