30 Day Experiment #1: kill the snooze button with 30 within 30

While slacking off doing research on the internet recently, I stumbled upon Raptitude.com, where David Cain writes about getting better at being human. One thing that intrigued me were his self-improvement experiments. He did a total of 22 experiments, with objectives like going vegan for 30 days or following a specific workout regime for 6 weeks. I really liked that idea and decided to that myself someday. That day is today.
Continue reading

Knee pain when running in the cold

I’ve been running for about 18 years now, and knee pain was a regular companion throughout my running career. After finishing the Ironman in 2012, the pain was so bad that I was seriously considering giving up running. Luckily this could be averted, and I have been running mostly pain-free since 2013 thanks to lasers and an impulse purchase on Amazon. But that is a story for another day. Today I want to talk specifically about knee pain when running in the cold. Continue reading

Introducing ConsiderateCode.com

For the last 8 years, this blog has been my primary outlet whenever I had the urge to share some written worlds with the world. This resulted in a hodgepodge of 44 articles covering a wide range of topics: technical articles related to my work as a consultant and software developer, as well as personal stuff like my nerdy side projects and my passion for everything fast.

I’ve decided to give my technical writing a new home: ConsiderateCode.com

You might wonder, why even bother? Truth be told, nobody ever complained that my blog isn’t focused enough. Probably because they forgot what the last post was about, because on average more than two months did pass between posts.

The key to building an audience is to write consistently about a well defined topic. That’s what I am planning to do on ConsiderateCode.com

So if you are interested in Django, Python and software development in general, go check it out and subscribe to the mailing list to get notified of new articles and stuff I work on.

But beware! At some point, I will launch some kind of product and there is a high probability that you will buy it because it will solve a painful problem for you and I have demonstrated my expertise with my technical writing. Sounds like a plan, right?

Frankly, I have no idea yet what this product might look like. For now I focus on writing something helpful on a regular basis.

I will document my journey to product income on this blog, so if you want to see how my grand masterplan works out, just keep this tab open. A slightly more convenient way to stay updated would be to follow me on Twitter.

Why you need a security@ address

If you run any kind of webservice, you should set up a security@yourdomain.com email address, display it prominently on your website and make sure it gets read by an employee with a technical background.

Not convinced? As a case study, check out this post on HackerNews. The OP said he had tried to report a security vulnerability at a messaging and voice services provided, but nobody would listen to him.

The suggestions ranged from full-disclosure to emailing the CTO. I pinged the official Twitter account of the company with a link to the thread, but they brushed it off. Ironically, the company even advertises their service as a security solution on their Facebook page.

After about two hours, a member of the ops team finally chimed in on HackerNews and the issue got addressed. A little later, they also got back to me via Twitter. But the damage was done: people started telling stories of unrelated bad customer service experiences and one person said they are going to evaluate a competitor.

With a security contact prominently visible on the website, the whole thing could have been avoided.

.local domains and Mac OS X 10.10 Yosemite

TL;DR: sudo discoveryutil mdnsactivedirectory yes

After upgrading to Mac OS X 10.10 Yosemite, I found myself unable to access any hosts with a domain name ending in .local

I could resolve the hostname with DNS tools like dig and nslookup, but other tools, namely ssh and ping, refused to do so.

As it turns out, Yosemite (and apparently also iOS 8) changed the way of resolving host names ending in .local to conform to the relatively new RFC 6762.

After much digging I found a fix in the Apple support forums:

sudo discoveryutil mdnsactivedirectory yes

Note that this fix only lasts until the next reboot.

Fixing 1_6.W001 when upgrading from Django 1.5 to 1.7

After upgrading a Django project from Django 1.5 to the current beta of Django 1.7, running the tests triggered a warning:

System check identified some issues:

WARNINGS:

?: (1_6.W001) Some project unittests may not execute as expected.
	HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#discovery-of-tests-in-any-test-module for more information.

This warning is printed by the System Check Framework, which is new in Django 1.7 and checks your project for common problems. You can run it manually with the “check” management command.

python manage.py check

After verifying that all my tests are run, I was left wondering how I can silence the warning after reading (okay, let’s be honest: skimming) the release notes of 1.6. The answer is simple, but I had to look in the source of the system check framework to find it. Apparently you have to explicitly define a test runner starting from Django 1.6. To do so, add the following line to your settings:

TEST_RUNNER = 'django.test.runner.DiscoverRunner'

Maxing out a HP4

For my birthday, I treated myself to something special: I rented a BMW HP4 for a day.

Foto 3With 196 HP from 1000 cc, 199 kg and every electronic gizmo you can imagine, the HP4 stands at the pinnacle of German motorcycle engineering. Now, you might wonder who is crazy enough to rent such a monster. As it turns out, Sixt is! Initially, I wanted to rent a S1000RR, which is basically the same minus the magic electronic suspension of the HP4. But when the rental agent offered me an upgrade for just 20 Euros, I couldn’t resist. Read on to find out what that day brought.  Continue reading

Nürburgring Nordschleife: GT5 vs. IRL

For a long time, I wanted to drive the famous Nordschleife of the Nürburgring. Having seen enough crash videos on YouTube, I realized that some preparation would probably be a good idea. I decided that doing some laps on Gran Tourismo should do the trick.

So I went out to acquire a PlayStation 3, a Logitech steering wheel and a copy of Gran Tourismo 5. To my horror, the Nordschleife was not available out of the box! Had I just spend 400 € for nothing? As it turns out, you have to complete the AMG driving school special event to unlock the Nordschleife. It’s a good way to get to know the track, although you will probably not do your first laps in a historic Mercedes 300 SL.

This brings me to one of the most important aspects of your Nordschleife experience: the car. My problem: I don’t have one. One could probably drive in a regular rental car, but you will probably have issues with the insurance in case of a crash on the Ring.
There are several rental companies around the Nürburging that offer cars specifically for driving on the Nordschleife, most notably RentRaceCar and Rent4Ring. The cars are usually equipped with better brakes, suspension, tires and a roll cage and, most importantly, are properly insured for the Ring. That said, all cars that you can rent still have quite a hefty deductible. Before you sign the contract, make sure that a crash would not be a total financial disaster.

I had set my sight on a Suzuki Swift from RentRaceCar. 130 hp and 1000 kg curb weight promised a lot of fun at a reasonable price. I deliberately chose a low-powered, front-wheel-drive car for my first laps on the ring.

As a consequence, I used the Swift for almost all of my virtual driving. It might be tempting to do a hot lap in the Zonda R, but I wanted to keep it as real as possible.

My plan was to go the Ring once I could complete 10 consecutive laps under 10 minutes without crashing. My best time for a full lap on the PS3 with the Swift was 9:25, but I never managed more than three laps without impact. As the months went by and the days became shorter, I decided that I had enough training and scrapped the plan of 10 under 10.

October 20, 2011 was the big day. (Yes, 2011, this post spent a lot of time in the drafts folder). It was a Thursday. The car was reserved, the weather forecast was looking good and I was eager as rarely before. A good friend of mine agreed to drive me to the Ring and act as codriver. It probably helped that I forgot to mention my failed plan of 10 under 10.

As we got closer to Nürburg, the road got more and more wet. However, there was no way back and we soon arrived at Rent Race Car. After handling the formalities, the friendly staff gave me a quick introduction to the car and valuable tips for my first laps. The customer service leaves nothing to be desired, but note that the cars only have a roll bar (not a roll cage) and the deductible is a whopping 2500 €. Rent4Ring offers a Swift with a full roll cage for a slightly higher price.

We arrived at the entrance of the Nordschleife about 20 minutes before the track opened, enough time for a coffee to increase the nervousness and a quick stroll over the parking lot where a couple of fellow track enthusiasts had gathered. It was a calm day with maybe thirty cars in total, including a couple of nice Porsches and Lotuses.

Then it was time. The track opens. You roll up to the toll gate. You drive through the corridor of pylons. Accelerate. Past the bridge. This is where the time starts. On the slight downhill to Hohenrain, you quickly built up speed. On the first turn, it becomes immediately clear that this is the real thing and no amount of time sitting on your couch twisting your fancy force-feedback wheel prepare you for it. With a wet track, there was quite a bit of understeer on the last turn before the start line. That’s scary and reassuring at the same time. It’s scary, because it shows how little grip there was on the damp track. It’s reassuring because you could actually do something about it. The little Swift is forgiving and leaves a lot of room for errors. After the twists at Hatzenbach and Hoheneichen, we approached the first fast section, from Quiddelbacher Höhe to Flugplatz. In the game, you go can go flat out all the way to Schwedenkreuz, which just seemed ridiculous while we were flying down the narrow track at 180 km/h (~110 mph). After passing the turn at Aremberg, the biggest shortcoming of virtual driving became obvious: the elevation. You can feel the pressure in your ears increase as you fall down Fuchsröhre. At increasing speed, you approach the bend in the dip, which seemed much more threatening than in the game, even at 3/4 of the speed. The tight turns at Adenauer Forst seem easy, but that is mostly caused by your incredibly slow speed. You line still sucks. Accelerating towards Metzgesfeld. In the game, you maybe lift, but on the track you definitely brake. Taking it easy through Kallenhard and Wehrseifen, where you always crash in the game. The scars in the wall at Breidscheid remind you that there is no reset button this time. Staying wide at the tricky, tightening turn at Bergwerk. Trying to find some dry spots racing through Kesselchen. Again, slight bends turn out to be proper turns that warrant braking. The fact that the car is much faster than in the game doesn’t help. After another tricky turn at Klostertal, you get the best, but also shortest carousel ride of your life. Considering how the whole car shakes, it seems a miracle that you leave Karussell in one piece. But there is no time to breathe, as you race up to Hohe Acht. You are thrown from side to side, the little Swift diving deep into the suspension at Eschbach. Your stomach complains that nobody told him that he’s going on a rollercoaster ride while you pass Brünnchen. Approaching Pfalzgarten I, where spectators are almost guaranteed spectacular crashes on busy days. Down a massive descent towards Pfalzgarten II, ABS stepping in as you cowardly brake over the small jump. Suddenly a blind turn, where you were expecting a mostly straight line towards Schwalbenschwanz. As you rattle over the second, small carousel, you lose ESP. Only a few past turns on Galgenkopf left, then you approach the gantry, the unofficial finish line for the tourist drive. This was your first lap of the Nürburgring. The probably most intense 20 kilometers of your life lie behind you. Your knees tremble a bit, but a big smile is stuck on your face.

Cut to the chase, what was the time? Unfortunately, only the second and the third of the four laps that I did that day were recorded. My second lap was 11:30 from bridge to gantry, and my guess for the first lap is somewhere north of 12 minutes. Way slower than my time on the PS3, way slower than anything I had seen on YouTube, way slower than Jeremy Clarkson in a diesel or a girl in a van.

Does it matter? Not really. Driving on the Nordschleife was one of the best experiences of my life, period.

Were those hours playing Gran Tourismo 5 well spent? You bet! Although playing the game doesn’t even come close to reality, it helped tremendously to know the track layout and to have a rough idea of how fast a turn can be taken. But there are many subtle differences, so take it easy on your first laps and don’t expect to beat your virtual times.

Have fun and stay safe!

Firmware update gone horribly wrong

A couple of days ago, my 15″ Macbook Pro from early 2011 started to misbehave. It didn’t wake up from sleep and froze regularily.

Macbook SurgeryAfter a lot of headscratching, grepping of logs, cursing of TimeMachine and googling, I finally identified my 256 GB Crucial M4 SSD, firmware rev. 009, as the likely culprit. A new firmware version 070H claimed fix a bug that was triggered after 5184 hours of uptime. Sure enough, the uptime reported by SMART on my 15 month old disk was way above this threshold (note to self: spend less time in front of computer).

So I decided to update the firmware. This is where the fun part begins. Updating the firmware is usually not a big deal: burn an image to a CD or write it to an USB stick and reboot the machine, confirm some scary warnings and presto, you are done. But not so quick. Continue reading