D&D 5 Spell Book

I’ve been playing Dungeons & Dragons 5 in my sparetime for a while, and it’s very annoying having to look up spells in a big, alphabetized list, so I made an app!

It’s quite simple, it’s just a list of spells, a settings view for inputting the variables needed to calculate how many spells you can have prepared and a couple of filters. It’s very much work in progress, but I wanted to post a short video of its current state here.

A New Job

I suppose if I have any inclinations of keeping this blog updated, this is a perfect occasion to do so: I got a new job! The 1st of May I became a senior iOS developer at TDC continuing the work I’ve done there as a consultant since November, now with a bit more focus on the collaboration done in our group of iOS developers, which are all consultants apart from me.

I’m very excited, I’ve come to greatly enjoy working as a consultant at TDC and I still can’t quite believe I’m lucky enough to be paid to do full-time Objective-C coding.

Panasonic ST60

I finally ordered a new television. All major reviews point to the Panasonic ST60 being the best, mid-range set at the moment. Supposedly the image quality is astonishing, and the only obvious downsides for me are the lack of HDMI ports, it only has three, and no socket for component cables, so I need a converter for my old, dying Xbox 360. Regardless, I’m sure I’ll be quite satisfied with the tv, although that won’t make me not rant a bit about how utterly shitty these sets are designed from a user experience perspective (and how sad it is that they now come with on-screen ads!).

Unlike the smartphone and PC market, there is no real focus on user-friendly and well-designed software or hardware among television sets. So since there are no competition (yet) what you get is a big-ass remote filled with buttons you’re never going to use and a horrendous, laggy so-called “SmartTV” experience that you’ll try your best to avoid.

I mean, just look at this:


I count 18 buttons that I’ll never use, but apart from the remote being filled with weird abbreviations, confusing icons, and redundant text, here’s one example of how utterly out-of-date and in need of a redesign the standard tv remote layout is: There is only one button for the AV inputs. I doubt I’m the only one who regularly uses gaming consoles, my Apple TV or similar devices, so why do I have to flip through all of the connected devices one by one to get to the one I need? You seriously could not fit in six buttons for direct access to my external devices? It baffles my mind that no one has done this yet.

And this, my non-existing blog reader, is the main reason I would love for the Apple TV to become a more integral part of the tv-watching experience, maybe even to the point where it becomes the main hub between your tv signal and what you see on the screen.

Automatically Resizing Windows Independently of Resolution

I switch from using a 27″ monitor at work to my 15″ MacBook Pro at home, and it’s quite annoying having to resize every application’s window when I switch back and forth between the monitors. On the 27″ monitor I don’t want applications in full screen, but I mostly want this on my MacBook Pro. So what I wanted to solve this was a way to automate resizing specific application windows independently of the current resolution, and I ended up fixing it using a Keyboard Maestro macro.

Specifically I created a macro with a hotkey trigger, I chose CMD + Shift + W. I then added a If Then Else action triggered by AppleScript code which checks the current resolution:

tell application "Finder"
    set _b to bounds of window of desktop
    set _width to item 3 of _b
    _width > 1440
end tell

This basically just saves the width of the current resolution into _width, checks if it’s above 1440, which is the resolution width on my MacBook Pro, and returns whether or not this is true. I then trigger the if condition by looking for the status returned by the AppleScript, which looks like this in Keyboard Maestro:


In the area for actions executed if the conditional is true, I added a Manipulate a Window action configured to Move and Resize Front Window for each application I wanted to resize. As you can see in the screenshot below, I have set the specific screen coordinates where I want the window (you can use the Try button to find this easier by trial and error):


In the area for actions executed if the conditional is false, i.e. when I’m on my MacBook Pro, I again added a Manipulate a Window action for each application I wanted to resize. In the screenshot below I wanted the application to become fullscreen, and this is what you see after selecting Move & Resize -> Custom -> Fullscreen:


And that’s basically it. Now I just tap CMD + Shift + W, the script checks the current resolution and resizes and moves the windows accordingly. I uploaded the macro here, as well. You need to make adjustments for your own resolution, but it’s probably easier to just download the macro instead of re-creating it manually.

Using Status Board at GearWorks

I’ve loved Panic’s Status Board app since its launch, and since we’re on the brink of launching two products – the iOS app Boonie Bounce and the web game Mindehimlen – it’s the perfect time for some nicely formatted visualizations of usage data. So we at GearWorks bought an Apple TV and I found a bunch of widgets to suit our needs.

Mindehimlen runs Google Analytics, and I was lucky to find a PHP script which fetches visitor count and page views for a specified site, so that was quite easy to get going. Boonie Bounce runs Flurry Analytics, and while I found a Flurry widget, it was written in Ruby, and I really just wanted it to run on our web server in PHP, so I made a port. I then modified it to suit our specific needs, so we now have two line graphs, and two bar graphs, showing daily usage (active users, new users, sessions, retained users), daily in-app purchases, total downloads, and what kind of in-app purchases people have made. It looks like this:

Status Board @ GearWorks

Note: The data in the screenshot is made up for testing.