Nov. 10, 2022, 4:33 p.m.

New challenge, new kata

A new classic challenge is now live if you want to tackle some basic file serving: Trivial Filing

A new kata is now available: Almost Binary

Good luck!

– Jack

Oct. 30, 2022, 7:12 a.m.

Kata issue fixed

An issue that prevented some kata submissions to fail was fixed.

– Jack

Oct. 29, 2022, 1:29 p.m.

A Global Presence improvements

The geolocation provider has been changed to be more responsive and allow for more requests per day/month - the challenge should be less frustrating now.

– Jack

Oct. 25, 2022, 9 a.m.

Fixed badge count display in rankings

Your badges now correctly show up next to your name in all ranking sets - sorry about that.

– Jack

Oct. 24, 2022, 1:44 p.m.

Perl 5 is now a kata language

Perl 5 was my first ever scripting language... and I loved every single second spent with it.

– Jack

Oct. 22, 2022, 1:45 p.m.

Two new kata

Two new kata challenges have been added: it's almost compression and sorting json lines. Have fun!

– Jack

Oct. 19, 2022, 1:10 p.m.

Java added to available Kata languages

I have the flu, so that's probably why...

– Jack

Sept. 15, 2022, 11:50 a.m.

Dark mode

FYI I'm slowly adding a rough dark mode, hang in there while I update all the bits and pieces of CSS. It'll get better.

I sure hope you like neon colors, because it won't get any less neon. :-)

– Jack

Sept. 5, 2022, 11:58 a.m.

Fixed an issue with a_global_presence

My code was pretty stupid at handling IP-to-geography mapping and you'd often hit massive timeouts that were not properly reported to users, but instead just served with a dry 500. Sorry about that, should be better now.

– Jack

Aug. 7, 2022, 3:44 p.m.

Optimized Kata code runners

Running your katas should now be a bit more responsive in general. There is a also now a very brutal 10s timeout after which the kata runner is terminated, if it didn't get a chance to do so politely.

– Jack

July 4, 2022, 1:30 p.m.

New language available for Kata

Rust has just joined the list of languages available to practice kata in. Have at it!

– Jack

Feb. 1, 2022, 10:53 a.m.

Fixed issue with the "backup restore" challenge

Noticed the container responsible for generating database dumps started throwing errors. That's what you get for thinking "I'll just bump library X by 0.0.1", right?

Should all be smooth now!

– Jack

Aug. 3, 2021, 11:57 a.m.

Elixir added as Kata language

After quite a few requests, Elixir has been added as an available kata language. You wanted it so much that I'll actually check it out myself.

– Jack

Aug. 2, 2021, 5:45 p.m.

Faster is better

Cleaned up a few overcomplicated queries that started to hog the CPU a bit too much.

– Jack

April 30, 2020, 8:42 p.m.

reCAPTCHA on logins and registrations

I added reCAPTCHA for logins (some) and registrations (all) to prevent some weak-butt automated sign-ups. If it ever misbehaves for you, let me know.

– Jack

Aug. 19, 2019, 1:13 p.m.

New kata

Is it Monday already? Take care!

– Jack

July 27, 2019, 9:21 a.m.

Haskell, syntax highlighter fixes

Syntax highlighting in the kata editor should now be much more robust. And also Haskell has joined the party. :-)

– Jack

July 27, 2019, 8 a.m.


C++ is now available as a kata language. Up to C++17.

– Jack

July 25, 2019, 5:10 p.m.

Kata ranking

Kata ranking is now public - for now it's slow and ugly, but I'll work on that sometime soon.

– Jack

July 23, 2019, 6:30 p.m.

Minor fixes applied

A small batch of adjustments has just landed. If your kata submission previously got stuck without good reason, it shouldn't now. I'm 60% sure about this.

– Jack

July 20, 2019, 12:09 p.m.

Kata improvements

Pushed some improvements related to katas and the editor. Language is now always remembered, you get better messages when you re-submit code that has already passed, and so on. Should be a smoother experience.

– Jack

July 19, 2019, 2:06 p.m.

Ruby joined the party

Fashionably late, but Ruby is here as a kata language. No party is complete without that little gem.

– Jack

July 19, 2019, 6:59 a.m.

Kata fixes

Some fixes have landed! The point generation algorithm now behaves nicely. Your points are correctly saved to your profile and displayed in the top right corner. As always, keep breaking things!

– Jack

July 18, 2019, 1:47 p.m.

Soft launched kata

A starter set of 4 kata tasks are now available, obviously in a beta-ish fashion. For now, four languages are available: Python, JS, PHP (heck, right?) and Go.


– Jack

Nov. 28, 2018, 11:08 a.m.

Improved error handling

I improved error handling around some trickier challenges (the ones with git and docker mainly) to be more helpful instead of throwing 502s when unexpected things happen.

– Jack

Nov. 23, 2018, 3:08 p.m.

Reading QR is up

New challenge is up! Fun fact: this one was almost part of the original, launch-day 5-challenge set, but I just didn't love it enough. I'm pushing it live since it's rather simple and will make for a good first-challenge. Cheers!

– Jack

Nov. 5, 2018, 9:46 a.m.

GitHub avatars

Minor patch: if you signed up using GitHub, the site will now use your GitHub avatar instead of going straight for the Gravatar version.

– Jack

Sept. 10, 2018, 11:15 a.m.

RSS support for changelogs

Two feeds are now available:

Still playing around and adjusting things, but feel free to give it a go!

– Jack

Sept. 8, 2018, 3 p.m.


So how's the weekend? Say hello to the most nostalgic challenge yet: touch_tone_dialing.

– Jack

Sept. 1, 2018, 12:31 p.m.

Back to school

What's up?

Over the next one-two weeks I'll be pushing out some new challenges that I've been prototyping for way too long. That's the plan at least.

I won't be sending any mass notifications until they're all live, so if you're reading this you're way ahead!

I just published the first one of those, and arguably one of the most oldschool I have this time around. Fits neatly with the back-to-school thingy, doesn't it?

Say hello to brute_force_zip which totally sounds like a band name.

– Jack

Aug. 16, 2018, 9:13 p.m.

The backup challenge no longer misbehaves

I quick-fixed the issues with the backup_restore challenge returning a base-64 encoded Postgres error instead of a real dump for 3 out of 5 attempts. I'll be looking into a more permanent fix tomorrow, but basic functionality is restored.

Thanks to everyone who reported this!

– Jack

Aug. 14, 2018, 3:22 p.m.

Becoming a better...

I had this idea to find a way to share some of the most influential posts, books and articles that I'd ever bumped into. It's a huge work in progress, but I decided to run with it. Take a look at the becoming a better developer listy-thingy.

And now that I've gotten that out of my way, I can move on to creating a new challenge or two.

– Jack

April 11, 2018, 11:14 a.m.

Layout adjustment

The number of challenges sort of outgrew the simple list format of the /challenges page. I switched it to a simple two-column layout. Let me know if that works.

– Jack

March 27, 2018, 12:40 p.m.

Jotting JWTs is here

Hey! Jotting JWTs is now live.

If you're looking out for something worth more points, I've one more coming up soon-ish. It's a variation of the basic face detection challenge, and point-wise should be in the same ballpark as the one with Redis.

So you know, hang in there.

– Jack

March 21, 2018, 10:06 a.m.

Incoming: hosting git

The hosting_git challenge should now be live and working fine.

– Jack

March 20, 2018, 11:13 a.m.

Playground mode added

I've added a way to keep submitting and checking solutions after you've passed a challenge. Simply pass &playground=1 as part of the URL and the server will let you through instead of rejecting you. I have no idea why it took me so long to add that. Kept slipping away, but it's finally here.

– Jack

March 17, 2018, 4:35 p.m.

After a break, a new challenge

Hey, hey! After a short break to catch a breath, here's a new one for you: dockerized solutions.

As always at first, may be a bit rough around the edges — I'll be fixing any issues that come up over the weekend. Treat it as a chance to earn some extra credit by reporting anything nasty you may find. :-)

– Jack

Feb. 15, 2018, 9:25 a.m.

Fixed the Redis challenge generator that got stuck

The generator for the_redis_one got stuck for an unknown reason. I've restarted the container and will add some extra logging/reporting to make sure this doesn't happen too often.

Thanks to /u/mindroc.alin for reporting this!

– Jack

Jan. 26, 2018, 12:28 p.m.

Slight badge update

I finally got to work a bit on stuff around badges - clicking on a badge on someone's profile page will now navigate you to a page which will shed some extra light on the badge.

By the way, I pushed this clickable-badge-thingy feature silently yesterday, told no-one about it and after 10 minutes I could see page views started coming in for the badge pages... how do you guys discover these things? Can I keep nothing secret? Y'all seriously scary.

There's more to come, but I think I'll focus on pushing new challenges this week - and hopefully some harder ones. I have quite a lot of ideas written down, but it usually takes a while to make a quick proof of concept and validate if it makes any sense. Keep your fingers crossed!

BTW, I'm still awarding badges manually, so if you do something that you'd expect to get a badge for, be patient. :-)

– Jack

Jan. 23, 2018, 7:45 p.m.

WebSocket challenge live and... fixed

I fixed an issue with the solution checking code for that websocket challenge.

Congratulations to /u/punitx for being the first one to solve it!

– Jack

Jan. 22, 2018, 7:12 a.m.

GitHub logins fixed

Fixed an issue that prevented GitHub logins for most users - sorry about that.

– Jack

Jan. 21, 2018, 6:37 p.m.

Usernames can now be changed

I've fixed some weirdness (brought to you in the first place by me being a lazy clod) around how usernames are handled. The gist of it is:

  • your username may have changed: if you used an email like, your username is now johndoe, which seemed like a better fit
  • when you sign up with email, I still take the username out of the address but now I'll append some random funky digits to make sure it's unique
  • GitHub logins haven't changed... unless the username I get from GitHub would collide with something over here. In which case, again, I add some random funky digits.

If you want to adjust your username, take the next exit and go here.

– Jack

Jan. 18, 2018, 9:51 a.m.

Problem URL is now clickable

The end of an era: you no longer have to swear every time you copy-paste the GET /challenges/some_challenge link. It's now a completely sane <a> which will open a sample problem set in a new tab.

– Jack

Jan. 16, 2018, 5:43 p.m.

Serving DNS improvements

The challenge no longer crashes awkwardly when dns_ip is not an IPv4 address. But it still expects an IPv4 address. :-)

– Jack

Jan. 14, 2018, 10:23 a.m.

Improved feedback for Tales of SSL

Tales of SSL was notoriously annoying when anything went wrong with parsing the subject line of a submitted certificate. And by annoying I mean it kept throwing 500s. I've added two extra error messages to give better insight into what actually went wrong.

– Jack

Jan. 12, 2018, 9:52 p.m.

Landing page update

I... drew a new landing page.

– Jack

Jan. 10, 2018, 4:13 p.m.

Redis challenge point change

The reward for solving the redis one was bumped from 40 to 70 points. If you've already solved the challenge, your points were updated!

– Jack

Jan. 10, 2018, 10:38 a.m.

Visual basic math clarification

I just added a note on integer/floor division for visual basic math to lessen any potential confusion.

Also, the solution endpoint will now gladly accept strings and will try to make an integer out of it. This was not the case, so "-10" failed an equality check to -10.

By the way, congratulations to /u/appleskin for being the first one to nail it!

– Jack

Jan. 8, 2018, 2:29 p.m.

Adjusted ranking sort algorithm

Rejoice! Users with the same amount of points are now ranked chronologically - the way it should be. This was surprisingly tricky to implement. Maybe I just can't brain today. Have stupid.

– Jack

Jan. 4, 2018, 8:32 p.m.

Minor bug fix

Just fixed another bug causing the app to throw a 500 instead of returning anything of value when the unsigned int value doesn't match the expected value for the Help me unpack challenge.

– Jack

Jan. 4, 2018, 4:04 p.m.

Shameful bug in Serving DNS fixed

Just pushed a fix to a bug related to handling the RP field in the DNS challenge. Hugely sorry about this - if you attempted the challenge and got stubbornly denied at the RP step, give it another chance when you have the time.

By the way, anytime you feel something is really, really off and reeks of a bug - I'm listening at maligree at gmail.

Really, really sorry!

– Jack

Dec. 19, 2017, 7:46 p.m.

Improve Redis challenge solution handling

I've added a long overdue check for missing keys when you submit a solution for the_redis_one challenge. From now on, if your solution is missing a key, you'll get a neat message instead of the unruly 500 response.

– Jack

Nov. 24, 2017, 4:55 p.m.

Two new challenges... and this right here

Today brings us two new challenges:

  • Password hashing - a rather easy tour of some basic crypto-password-y things
  • Serving DNS - first challenge (but more to come) where you need to deploy and set up a service that then gets validated from our side

The changelog has also been added as a non-invasive way of previewing changes, adjustments and possibly more.

– Jack

You too can support h^ by buying me a coffee. Cheers!
Also, I'd love to hear from you. Whatever you got, drop me an email. My h^ profile is here.