•  WWDC 2018


    15 year old me was pretty excited about watching the Apple Event where Apple would unveil the penultimate iPods Nano and Touch. 23 year old me was even more excited to have the chance to go San Jose and attend WWDC in person. I thought I’d write about my takeaways from attending and why I’m so keen to return.


    Learnings and Inspriation

    Although you can watch the vast majority of the WWDC sessions online, it’s nothing compared to 5 days of dedicated learning in proper theatres. There are around 6 time slots during each day which each have up to 3 concurrently running sessions. There is always something worth going to. This means that you end up going to so many sessions that you would have likely would never watch online and there are so many tricks to learn. I work on a large Objective C and Swift project and our compile time is dreadfully slow. I attended several sessions that taught changes you could make to your application to improve compile time which have now been compiled into a massive JIRA board at work of project cleanup tasks where the speed improvements alone are worth the cost of a WWDC ticket.

    The sessions are great, but even more useful are the labs. These offer you the chance to speak to the actual Apple engineers who wrote the APIs that you are consuming. I cannot recommend enough making sure that you attend as many labs as possible. I went to a UIKit one and an LLVM one. The UIKit one I attended, I asked about some UITableView autolayout based sizing header and footers where I have a working solution (thanks to StackOverflow) but I was convinced there was a better way. Sure enough, I was linked a great GitHub Gist on how to do this properly. The LLVM session I was hoping for some simple solutions as to why our compile time is so slow (up to 40 minutes for a clean build and overly keen 20-minute recompiles). The engineer I spoke to was nice but he was just shocked as to how poor the compilers performance was on our project. The feedback I got was to file a couple of radars and to try and split up our main target into more separate frameworks - which is easier said than done. Even with no concrete actions to leave with, it was incredibly useful to at least have some validation that our build settings were correctly configured - something that can be all too easy to mess up.

    My biggest regret would be that I could not remember enough things to take to the labs. In the future I’m planning on keeping track of all solutions I have to problems that are less than satisfactory. This last week I’ve added a note to check how Apple recommends that you manage screen orientation for single cases where you need to display in landscape. Particularly for the case where you have an AVPlayerViewController - which you should not subclass.

    My personal favourites of the sessions I attended -

    Tim Cook


    Possibly my favourite thing about the conference was the sheer variety of developers you met. There are 5000 developers that attend WWDC, and there is also Layers conference and Alt Conf running at the same time, also in San Jose. I met people who worked on custom email clients,banking clients, car rentals, music streaming, cycling, design prototyping, podcasting and even simulated Santa phoning, to name a few. All these companies are working so many different technologies and you are always chatting and exchanging experiences and recommendations. I met more developers in a day than I had previously met in my life. I found this to be invaluable, particularly at my age, should I ever come across a problem that I’m struggling with and perhaps my co-workers have no experience in, I now have a wealth of people to contact where there’s bound to be someone with some experience in what I’m working with.

    San Jose

    Silicon Valley is fully committed to all its cliches which is both a strength and a weakness. Whilst I was there, the most exciting things for me were the dock-less electric scooters and the Tesla Model 3. Both of which appear to me to be the future of transport.

    For the unaware, the scooters are electrically powered, internet connected scooters that you can find on most sidewalks in certain US cities. You scan a barcode with your phone and you are then free to ride the scooter as far as its range of roughly 35 kilometres will allow. Typically you pay $1 to start and subsequently 25 cents per minute.

    I for one, cannot wait for these to come to the UK. I hope that they become commonplace and people can learn to be sensible with them. My hotel in San Jose was around 2.5 miles from the conference center, for this commute I tried the tram, taxis, bikes, and scooters. Scooters were by far the most fun, convenient and cost-effective option. When traveling around Edinburgh, I’ll take my bike any chance I can get, because I love to be out in the open and to be able to move around at my pace and be limited by public transport timetables. Dockless scooters - and bikes - offer this same freedom wherever you are. They also have the added benefit of not having to lock up and remember your own vehicle and there’s a possibility that scooters will lower the bar for access to last mile transport. Not everyone feels comfortable riding a bike - some may feel far more comfortable on a scooter where you don’t get sweaty and in the case of an accident you can easier step off a scooter than a bike.

    Lime Scooters

    Whilst on the train from San Francisco International to San Jose I spotted my first Model 3. While I did not get to try one (I talked myself out of renting one on Turo) I can say that they look amazing in person.

    Model 3

    Model 3

  • Podcast List - May 2018

    When I first started this blog I made a post about the podcasts that I have enjoyed listening to at the time. Since then, I’ve discovered a some other podcasts that I thought I’d share.


    The Daily

    This New York Times podcast comes in ~twenty minute episodes, five days a week. I got into it through the new series they are hosting called Caliphate that details the story of an ex-ISIS member that is incredibly interesting.

    Planet Money

    Another NPR podcast that I have started listening to more frequently. Planet Money tells really interesting stories relating to economics. This sort of topic is usually not my sort of thing but the Podcast always tells an interesting story that is really accessible.

    On The Media

    I view On The Media as the media version of Planet Money. Some of the episodes can be too America-focused, but there is the odd story that they tell of media outcomes elsewhere in the world.

    Black Hands

    Black Hands is a murder mystery podcast that investigates the murders of a family in New Zealand. The story is interesting, though I wasn’t completely satisfied with the ending, and the accents are even better.


    As a side note, whenever I recommend someone a podcast and they haven’t listened to podcasts before, I always recommend that they download Overcast. Overcast is a free podcast player for iOS that comes with a handful of features that make it great. The main feature that I love is that it shortens the silences in a Podcast - I’ve saved over 28 hours of listening through having these silences shortened. This is not a feature that is exclusive to Overcast by any means, but it’s still a great, free app.

  • Nintendo Switch Review

    Nintendo Switch

    The Nintendo Switch is the first games console I’ve owned in years, the last was a Nintendo Wii that I shared with my brothers. I bought it last year on a whim when I was living in a flat where I had no TV and I wanted some games to play other than League of Legends. Since then I’ve spent hundreds (yes hundreds) of hours playing various games and thought it would be worth writing about my experience with it.


    I love the size, feel and appearance of this console. It is both perfectly sized and perfectly weighted. The controllers - Joycons - feel great in your hand. When playing with them detached from the console they can be a little small in the hand. There are small slide on grips that make them a slightly better fit, but I never bother with these as I love to be able to drop the Joycons back onto the console in a moment.

    My biggest criticism of the console hardware wise is the quality of the screen, which is fairly dark and plastic-y. It would be cool to see how good the screen could be if the Switch wasn’t limited by hitting a price point. It certainly wouldn’t be as popular and accessible as it is - but I think it would be cool to see.

    Battery Life

    The battery life on the Switch is reasonable. I believe that it’s rated to last around 3 hours on a charge for most games, which I think is fine. There is rarely a case where I want to play for any longer. Whenever I’m not playing I leave the Switch in its dock which means that it’s always charged and ready to go when I pick it up.

    Nintendo, brilliantly, included a USB-C charging port on the switch. This is great for many, many reasons which you can read about elsewhere. But the key thing to note is that I can charge this using any battery pack or directly from my laptop, which is great when traveling, which this console excels at doing.


    The operating system on the Switch is also brilliant. I haven’t used other modern consoles extensively, but I do know that they are cursed with long load times. The Switch OS wakes from sleep as fast as any modern smartphone and moving around the system is equally as fast. There are sound effects with most button movements which aren’t annoying - an achievement in itself.

    Beyond the speed of the system, there are some things that certainly would be nice to have. The Switch comes with screenshot functionality built in, but these screenshots are incredibly awkward to get off the device - you only get the option to share to Facebook or Twitter. It would also be great to be able to have a media player on the Switch that you could sync stuff to remotely. I would love to be able to chuck films and things on it and watch them on the go. No device can switch between being portable and being on your TV like the Switch can, and I would love to be able to utilize this ability further.

    Nintendo Switch


    Games on the Switch are great. I don’t think there’s a game I’ve bought that I regret purchasing. Here’s a quick list of my favourites.

    • The Legend of Zelda, Breath of the Wild
    • Splatoon 2
    • Snipperclips
    • Rocket League
    • Mario Kart 8 Deluxe
    • Doom

    I’m currently eyeing up the new Donkey Kong game which I keen to buy as soon as Nintendo stop charging £50 it.

  • Peak Design Everyday Backpack Review

    Strap on carry

    I’ve had the Peak Design Everyday Backpack for a year and a half. I backed it on Kickstarter and waited 6 months for it to arrive, running my already tired Herschel Supply Co bag into the ground in the process. I’m hoping it’s the last backpack I buy. It comes with a lifetime warranty and 18 months on it’s still solid.


    Perhaps my favourite thing about the bag is just that it feels great - it is made from a sturdy water-resistant material that provides it a solid shape; the straps are made from the same material as seatbelts and can hold any weight your through at them with ease; the back of the bag sits firmly, assuringly against your back; and the inside of the bag is made from a soft material that I feel happy throwing my camera inside. There are very few bags that blend utility with aesthetics like this bag does.

    Speaking of utility, this bag can do everything. There’s a reason that Peak Design call it the everyday backpack. The inside of the bag is one big space that is separated by flex fold dividers. These are like you’d expect to find in a camera bag but a hundred times better. They are slim rather than bulky, they are easy to move around and they can be folded up or down to create little compartments in your bag to keep your stuff separated. This is extremely useful when you have a bunch of stuff in your bag. My camera has its own space on the right hand side, if I’m grabbing shopping on my way home then it stays in the top of the bag, kept tidily away from everything else. When you need to get something out of the bottom of your bag, you just turn it on its side and reach into that compartment. There are also two expanding side pockets that I use for my bike D-lock and for a water bottle, The laptop compartment is completely separate to the rest of the bag and can be accessed at the back of the bag. It can take a 15” MacBook Pro, an iPad and some charging cables. When you have filled up the insides of the bag, there are a number of straps and anchor points on the outside of the outside of the bag that you can pull out at any time to strap stuff to your bag. I use these for carrying all sorts of things that a regular backpack could not do. I’ve strapped on clothes, boxes of cereal, packages that I have had delivered to my office, my bike helmet and even a pack of three pillows.


    The only wish I had for this bag was that it was bigger. Peak Design do make a 30L version of this bag but it looks bulky and unwieldy compared to the 20-litre model. Since buying it 18 months ago, I have been using this bag every day, it has been brilliant.

  • Fresh Pasta

    A couple of months ago I first made fresh pasta and was amazed at how easy it was to do - it requires just two ingredients and can be done in 15 minutes. In the summer my Mum’s hens lay more eggs than she knows what to do with at times and this is a delicious way to make use of them.

    Pre roll

    + 175g 00 flour
    + 2 medium eggs (the fresher the better)
    + 25g fine semolina (or 25 more grams of flour)

    If you don’t have any eggs or want to make vegan pasta, you can simply swap the eggs for 200g of water.

    The method is to simply mix the ingredients together, then wrap in clip film and refrigerate for at least 30 minutes before rolling out and cooking. To mix the ingredients you can either use your hands (takes around 10 minutes) or blitz it in a food processor for 30 seconds. At first, it seems like the dough will not come together, but just keep mixing - it will get there eventually.

    After refrigerating, you just need to roll out your pasta into whatever shapes you like. The easiest is most likely tagliatelle - you just need a rolling pin, a knife, and some elbow grease. You can also get a pasta roller for fairly cheap which will roll your sheets out in seconds.


    Pasta cut

    Pasta cut

    One last thing to note is that fresh pasta cooks much quicker than dried pasta - if you chuck this in this boiling water, it’ll be ready within 5 minutes. Also, you can leave the dough in your fridge for up to a week before using it.

    Pasta cut

    My carbonara skills aren’t quite where I want them to be yet - I’m prone to scrambling the eggs when mixing everything together - but the flavor is that of some of the best pasta that I’ve had.

  • Animating Tab Bar Controller Taps

    Following on from my previous animation posts (here and here), this post is about animating the taps on an iOS tab bar - an effect used by Spotify in their app. UITabBarController is an old piece of UIKit that draws its architecural design from AppKit. Configuring your tabs requires you to use UITabBarItem, you have no access to the internal UIBarButton class. Because of this, we have to use some less than ideal valueForKey method - however, in this case I feel this is OK as there is no crticial operation relying on it, just an animation.

    For this effect, we also must subclass UITabBarController as we require access to the didSelectItem method, the only available method for UITabBarControllerDelegate is the didSelectViewController version. You could perhaps look at the tabBarItems of a UITabBarController and look at its subviews and try and relate the two, but I imagine that it is unlikely you can guarantee that they will be equally ordered.

    The next best option I can think of is to roll your own version of UITabBarController where you control all the views and touch events and can do all the animation you want. But, if a subclass and short solution suits you, then read on.

    class AnimatedTabBarController: UITabBarController {
        override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
            guard let barButtonView = item.value(forKey: "view") as? UIView else { return }
            let animationLength: TimeInterval = 0.3
            let propertyAnimator = UIViewPropertyAnimator(duration: animationLength, dampingRatio: 0.5) {
                barButtonView.transform = CGAffineTransform.identity.scaledBy(x: 0.9, y: 0.9)
            propertyAnimator.addAnimations({ barButtonView.transform = .identity }, delayFactor: CGFloat(animationLength))