July 26, 2007

The iPhone is thorougly hacked

Somebody already figured out how to run an SSH server on the iPhone - and how to compile std unix tools for the phone as well. App=Website no more.

Posted by Claus at 02:07 PM | Comments (0)

July 17, 2007

Unsurprising hack success

Hackers employed social hacking and malware they knew wouldn't be caught by anti-virus software to do cleverly executed digital break-ins. Testing your malware against common anti-malware software is coming soon to a techno-thriller near you. It's an obvious thing to do: Roll-your-own malware tested properly against all the known detectors, used sparingly to avoid unnecessary risk of detection and consequent development of immunity.

Posted by Claus at 10:58 PM | Comments (0)

July 14, 2007

Optimized Tour de France TV-watching

Here are some quick geek tips to optimize your Tour de France TV-watching beyond what the broadcast offers.

One of the annoyances of std (Danish) tour coverage is that the reporters suck with numbers. The coverage has improved lately, adding actually knowledgeable former rider Rolf Sørensen to the reporting mix, but still - we don't get the numbers we deserve, so we simply have to make our own.
The first thing we need to do is do our own timing - and why not use this convenient javascript stop watch (or your watch or your cell phone). Secondly, and this is where the reporters really suck, we need proper numbers for how fast the riders are going. The most useful numbers are time/distance instead of the usual distance/time. These numbers are both easier to observe, using the stopwatch, and more meaningful: Tour math is mostly about how much time difference a rider or group of riders can make up during the remainder of a climb or a race.
Third, to make sense of these times we need some sensible ideas about how fast the racers are actually able to go in different terrain. Here are some pointers observed during this years tour:


  • Peleton, chasing a group of riders for 30-40km: 50km/h

  • Solitary rider, long break: 40-45km/h

  • Sprint leadup - final 2 km: 55 km/h from -2 to -1 km and 65km/h for the last km

  • Sprinter - (this is actually not so relevant to know up to 80km/h instantaneous speed during final burst

  • Moderate climb (5% incline) 25km/h

  • Steep climb (10% incline) 15km/h
  • - what's moderate or steep varies immensely among riders obviously, see below

Below I've compiled a convenient conversion table from km/h to minutes/distance for various speeds and distances. If we use that to evaluate the info above we can tell e.g. that the peleton can gain 5-20 seconds per km on a small group og a single rider on a break, unless this rider is a time trial specialist, so 4-5 min breaks 30km from the finish line are non-events. Danish television used to have a huge problem with bogus excitement about such breaks, but fortunately this has changed a lot.
We also learn why time/distance is so much more telling than distance/time. While a speed difference of 20km/h to 25km/h doesn't sound very dramatic a time loss of 30 seconds per km travelled sounds huge - especially at the bottom of a 15km hill. And these are exactly the kinds of differences that exist between good and great riders.

Geek-optimized tour watching involves timing the front groups as they pass landmarks and/or the official 20, 15, 10, 5 km gates, comparing these speeds to the incline exactly where they are. It then involves comparing time gains per minute to the peleton, figuring out from these numbers the speeds of the different formations on the road, figuring out time to the top, computing plausible total time gains losses. Checking relative performance along different parts of the route also. The many split times of the javascript stop watch are a great help here.

Mountain relevant speeds

km vs km/h101517202225303540
0.500:03:0000:02:0000:01:4600:01:3000:01:2200:01:1200:01:0000:00:5100:00:45
100:06:0000:04:0000:03:3200:03:0000:02:4400:02:2400:02:0000:01:4300:01:30
1.500:09:0000:06:0000:05:1800:04:3000:04:0500:03:3600:03:0000:02:3400:02:15
200:12:0000:08:0000:07:0400:06:0000:05:2700:04:4800:04:0000:03:2600:03:00
2.500:15:0000:10:0000:08:4900:07:3000:06:4900:06:0000:05:0000:04:1700:03:45
300:18:0000:12:0000:10:3500:09:0000:08:1100:07:1200:06:0000:05:0900:04:30
3.500:21:0000:14:0000:12:2100:10:3000:09:3300:08:2400:07:0000:06:0000:05:15
400:24:0000:16:0000:14:0700:12:0000:10:5500:09:3600:08:0000:06:5100:06:00
4.500:27:0000:18:0000:15:5300:13:3000:12:1600:10:4800:09:0000:07:4300:06:45
500:30:0000:20:0000:17:3900:15:0000:13:3800:12:0000:10:0000:08:3400:07:30
5.500:33:0000:22:0000:19:2500:16:3000:15:0000:13:1200:11:0000:09:2600:08:15
600:36:0000:24:0000:21:1100:18:0000:16:2200:14:2400:12:0000:10:1700:09:00
6.500:39:0000:26:0000:22:5600:19:3000:17:4400:15:3600:13:0000:11:0900:09:45
700:42:0000:28:0000:24:4200:21:0000:19:0500:16:4800:14:0000:12:0000:10:30
7.500:45:0000:30:0000:26:2800:22:3000:20:2700:18:0000:15:0000:12:5100:11:15
800:48:0000:32:0000:28:1400:24:0000:21:4900:19:1200:16:0000:13:4300:12:00
8.500:51:0000:34:0000:30:0000:25:3000:23:1100:20:2400:17:0000:14:3400:12:45
900:54:0000:36:0000:31:4600:27:0000:24:3300:21:3600:18:0000:15:2600:13:30
9.500:57:0000:38:0000:33:3200:28:3000:25:5500:22:4800:19:0000:16:1700:14:15
1001:00:0000:40:0000:35:1800:30:0000:27:1600:24:0000:20:0000:17:0900:15:00
10.501:03:0000:42:0000:37:0400:31:3000:28:3800:25:1200:21:0000:18:0000:15:45
1101:06:0000:44:0000:38:4900:33:0000:30:0000:26:2400:22:0000:18:5100:16:30
11.501:09:0000:46:0000:40:3500:34:3000:31:2200:27:3600:23:0000:19:4300:17:15
1201:12:0000:48:0000:42:2100:36:0000:32:4400:28:4800:24:0000:20:3400:18:00
12.501:15:0000:50:0000:44:0700:37:3000:34:0500:30:0000:25:0000:21:2600:18:45
1301:18:0000:52:0000:45:5300:39:0000:35:2700:31:1200:26:0000:22:1700:19:30
13.501:21:0000:54:0000:47:3900:40:3000:36:4900:32:2400:27:0000:23:0900:20:15
1401:24:0000:56:0000:49:2500:42:0000:38:1100:33:3600:28:0000:24:0000:21:00
14.501:27:0000:58:0000:51:1100:43:3000:39:3300:34:4800:29:0000:24:5100:21:45
1501:30:0001:00:0000:52:5600:45:0000:40:5500:36:0000:30:0000:25:4300:22:30
15.501:33:0001:02:0000:54:4200:46:3000:42:1600:37:1200:31:0000:26:3400:23:15
1601:36:0001:04:0000:56:2800:48:0000:43:3800:38:2400:32:0000:27:2600:24:00
16.501:39:0001:06:0000:58:1400:49:3000:45:0000:39:3600:33:0000:28:1700:24:45
1701:42:0001:08:0001:00:0000:51:0000:46:2200:40:4800:34:0000:29:0900:25:30
17.501:45:0001:10:0001:01:4600:52:3000:47:4400:42:0000:35:0000:30:0000:26:15
1801:48:0001:12:0001:03:3200:54:0000:49:0500:43:1200:36:0000:30:5100:27:00
18.501:51:0001:14:0001:05:1800:55:3000:50:2700:44:2400:37:0000:31:4300:27:45
1901:54:0001:16:0001:07:0400:57:0000:51:4900:45:3600:38:0000:32:3400:28:30
19.501:57:0001:18:0001:08:4900:58:3000:53:1100:46:4800:39:0000:33:2600:29:15
2002:00:0001:20:0001:10:3501:00:0000:54:3300:48:0000:40:0000:34:1700:30:00

Flat road relevant speeds

km vs. km/h4045505560657080
0.500:00:4500:00:4000:00:3600:00:3300:00:3000:00:2800:00:2600:00:23
100:01:3000:01:2000:01:1200:01:0500:01:0000:00:5500:00:5100:00:45
1.500:02:1500:02:0000:01:4800:01:3800:01:3000:01:2300:01:1700:01:08
200:03:0000:02:4000:02:2400:02:1100:02:0000:01:5100:01:4300:01:30
2.500:03:4500:03:2000:03:0000:02:4400:02:3000:02:1800:02:0900:01:53
300:04:3000:04:0000:03:3600:03:1600:03:0000:02:4600:02:3400:02:15
3.500:05:1500:04:4000:04:1200:03:4900:03:3000:03:1400:03:0000:02:38
400:06:0000:05:2000:04:4800:04:2200:04:0000:03:4200:03:2600:03:00
4.500:06:4500:06:0000:05:2400:04:5500:04:3000:04:0900:03:5100:03:23
500:07:3000:06:4000:06:0000:05:2700:05:0000:04:3700:04:1700:03:45
5.500:08:1500:07:2000:06:3600:06:0000:05:3000:05:0500:04:4300:04:08
600:09:0000:08:0000:07:1200:06:3300:06:0000:05:3200:05:0900:04:30
6.500:09:4500:08:4000:07:4800:07:0500:06:3000:06:0000:05:3400:04:53
700:10:3000:09:2000:08:2400:07:3800:07:0000:06:2800:06:0000:05:15
7.500:11:1500:10:0000:09:0000:08:1100:07:3000:06:5500:06:2600:05:38
800:12:0000:10:4000:09:3600:08:4400:08:0000:07:2300:06:5100:06:00
8.500:12:4500:11:2000:10:1200:09:1600:08:3000:07:5100:07:1700:06:23
900:13:3000:12:0000:10:4800:09:4900:09:0000:08:1800:07:4300:06:45
9.500:14:1500:12:4000:11:2400:10:2200:09:3000:08:4600:08:0900:07:08
1000:15:0000:13:2000:12:0000:10:5500:10:0000:09:1400:08:3400:07:30
10.500:15:4500:14:0000:12:3600:11:2700:10:3000:09:4200:09:0000:07:53
1100:16:3000:14:4000:13:1200:12:0000:11:0000:10:0900:09:2600:08:15
11.500:17:1500:15:2000:13:4800:12:3300:11:3000:10:3700:09:5100:08:38
1200:18:0000:16:0000:14:2400:13:0500:12:0000:11:0500:10:1700:09:00
12.500:18:4500:16:4000:15:0000:13:3800:12:3000:11:3200:10:4300:09:23
1300:19:3000:17:2000:15:3600:14:1100:13:0000:12:0000:11:0900:09:45
13.500:20:1500:18:0000:16:1200:14:4400:13:3000:12:2800:11:3400:10:08
1400:21:0000:18:4000:16:4800:15:1600:14:0000:12:5500:12:0000:10:30
14.500:21:4500:19:2000:17:2400:15:4900:14:3000:13:2300:12:2600:10:53
1500:22:3000:20:0000:18:0000:16:2200:15:0000:13:5100:12:5100:11:15
15.500:23:1500:20:4000:18:3600:16:5500:15:3000:14:1800:13:1700:11:38
1600:24:0000:21:2000:19:1200:17:2700:16:0000:14:4600:13:4300:12:00
16.500:24:4500:22:0000:19:4800:18:0000:16:3000:15:1400:14:0900:12:23
1700:25:3000:22:4000:20:2400:18:3300:17:0000:15:4200:14:3400:12:45
17.500:26:1500:23:2000:21:0000:19:0500:17:3000:16:0900:15:0000:13:08
1800:27:0000:24:0000:21:3600:19:3800:18:0000:16:3700:15:2600:13:30
18.500:27:4500:24:4000:22:1200:20:1100:18:3000:17:0500:15:5100:13:53
1900:28:3000:25:2000:22:4800:20:4400:19:0000:17:3200:16:1700:14:15
19.500:29:1500:26:0000:23:2400:21:1600:19:3000:18:0000:16:4300:14:38
2000:30:0000:26:4000:24:0000:21:4900:20:0000:18:2800:17:0900:15:00

Posted by Claus at 07:29 PM | Comments (0)

Det kan udvikleren da ikke være stolt af

Dagens historie om at fakturaer hos DKHostmaster kan nås med et HTTP GET request, og altså linkes til, kan udvikleren af siden da ikke være stolt af. Det er meget 1995-agtigt at lade være med at checke for HTTP metoden. Og det er ihvertfald ikke med på REST noderne, men det er måske også så meget forlangt. Måske oplever de det som en service - det er nemt og man kan sende en URL i en email.
DK-Hostmaster bruger PHP. Er der ikke en venlig PHP hacker der vil fortælle dem hvor nemt det er at sikre sig mod den slags?


Posted by Claus at 04:12 AM | Comments (0)

July 11, 2007

Unsurprising

This just in: Ruby is S*L*O*W (and Rails is worse).

Posted by Claus at 10:36 PM | Comments (0)

As true for IM/Presence as for email/blogs

Everybody knows that if they don't control the domain where their blog is or the domain where their email is, they have no control. Which of course is as true for IM and for the up and coming market for cross media presence as it is for email and blogs. Some combination of Atom/APP and Jabber (with SMS, RSS, etc. gateways) should solve this issue - but it needs to be packaged and included in Wordpress and Moveabletype - and hosted by commonly available webhosts, simply part of the standard makeup of a webhost. Including the option to download a usable archive of everything in one file.

Posted by Claus at 04:28 PM | Comments (0)

July 04, 2007

Rails, Slashdotted - no problem

This happy "we're OK and we were slashdotted" piece claims to say something about Rails not being a problem under load - but the solution suggested involves avoiding Rails calls like the plague with a completely custom made, Rails-agnostic caching solution.

[UPDATE: Much more interesting approach here]

Posted by Claus at 04:31 PM | Comments (0)

Geek design

The spreadsheet in the Open Office suite has a number of annoying features - the most ridiculous being the following dialogue which pops up every time you try to delete the contents of a cell with the delete key*.

This is wrong on so many levels. There shouldn't be a dialogue in the first place - the delete key is a simple option intended to just white out what you're pointing at. It's not a conversation starter. On top of that the unwanted dialogue is horrible with just too many options to make it convenient to grasp in one look.

*The idea is that backspace is the simple delete and delete offers something else - but this is non standard and therefore unintuitive and painful.

Posted by Claus at 12:41 PM | Comments (0)

July 03, 2007

Why doesn't the Firefox spellchecker include a language categorizer for choice of dictionary?

E.g. a TextCat derivative. There's absolutely no reason to trouble us bilinguals with choosing a language in a form since its easy to figure the language out from text - particularly if we narrow the choice to the languages the user installs.
Hmm - we're supposed to contribute to open source on our own I guess - so I should probably check if this is XUL/Javascript (more hackable) or C (probably a bridge to far for me right now)

Posted by Claus at 01:40 PM | Comments (0)