• The Martian

    Today I finished reading the book The Martian by Andy Weir. It was a phenomenal read and I highly recommend it.

    The story centers around Mark Watney, an astronaut left behind on Mars by his five crew mates due to a freak accident.

    This book kept my attention with every page. The seemingly accurate scientific details, Watney’s goofy sense of humor, and the extreme conditions he finds himself in and his incredible ingenuity to work his way through it all make this book a pleasure to read. I couldn’t recommend it more.

  • Highlights of 2014

    2014 is now over and it’s been a great year. Last year my wife and I moved to Austin, TX which was a fantastic move. We’ve really enjoyed living here. The city and people here are wonderful and there’s never a shortage of things to do. While this year didn’t see as drastic a change as moving, there were some notable happenings.

    Travelled to Hawaii

    For our five year anniversary, my wife and I travelled to Hawaii. It was the most relaxing vacation I’d ever been on by a long shot. We stayed in Maui for a few days and then flew over to the Big Island for another few days. There’s breathtaking beauty everywhere you look.

    With Hawaii crossed off the list I only have five or so states left before I will have visited all 50. Looking forward to my travels to see the rest.

    Dipped a Toe Into Management

    This year I was charged with leading a team at my company. Before this I had only informally lead small teams and projects. But this was my first chance to really be put in charge of a team. My team consists of around 20 developers, testers, analysts and a few others.

    I knew that this position would be different than being focused on programming but it was far more different than I realized. The skill set is totally different, my daily schedule is completely different, I only code a few hours a week. That said, I haven’t minded these changes. I get to work with a lot of great people much more so than I previously had.

    Also, it’s nice to be in a position where I can affect change in the company. As a programmer I only had so much influence but it’s a good feeling to draw on my experience and actually cause change to happened.

    Learned Scrum

    Because of my role change at work, I’ve had to learn a lot more about Scrum. I’m functionally the Scrum Master for my team.

    Before I had understood conceptually what agile meant but this year I feel I really learned it. Previous jobs have very much operated in a waterfall process or no process at all so I hadn’t really had any experience with agile.

    I certainly appreciate why so many companies have moved to it. It’s nice to have a process that everyone can agree on and follow. That said, Scrum isn’t a panacea, but it does seems to be effective.

    Stayed Organized

    I’ve always been interested in efficiency, productivity hacks, task management software, and the like. There’s something fun about it. Mostly I think I just like playing with the tools.

    But I wasn’t that busy. This year that changed. I got much more busy at work and really with life in general.

    Because of that I’ve had to stay organized just to remember everything. That means I’ve been using Omnifocus to keep track of tasks, Google Calendar for meetings and appointments, Evernote for notes and files, as well as other tools. I’ve tried hard to keep my email inbox empty, keep files organized and in general just tried to stay on top of things.

    I wouldn’t say I’m more productive than I was last year but I certainly have had to stay far more organized just to keep track of everything.

    Angular Woes

    Oh Angular, how I love thee. It simplifies a lot for developers and it’s focus on testability is great. It’s a pleasure to use.

    But it is starting to show some warts.

    I’ve now developed a handful of Angular of apps, one of which is truly massive (I don’t use that word lightly). My experience is proving that creating large, complex, and performant apps in Angular can be very challenging. The problem is that the very things in Angular that make things easy are a black box for developers. I suppose it’s a case of leaky abstractions.

    It seems to me that for a large application written in Angular you absolutely must have devs with Angular experience. Otherwise what I’ve found is that Angular makes it so easy to start building things without knowing what is under the hood that you can write very slow code that goes unnoticed until it’s put it together with many other devs’ slow code.

    No framework is perfect. They all have their issues. And Angular’s seems to be this. I’m really looking forward to Angular v2. Hopefully they can improve performance as well as eliminate some of the other cruft that has built up over the years.

    Fountain Pens as a Hobby

    I’m not sure where the idea to buy my first fountain pen came from but it came nevertheless. I bought a Pilot Metropolitan earlier this year and fell in love with the way it writes. I’ve since purchased a few more and tried many different inks.

    I think the tinkerer in me is what loves them. There are an endless combination of pens, inks, nibs and paper that you can try together for wildly different combinations. It’s a lot of fun. I’d recommend everyone try a fountain pen at least once. It’s quite a bit different than your typical modern day pen.

    Conclusion

    So there you have it, a few highlights of the last year. It’s been a terrific year and I’m looking forward to finding out what 2015 has in store!

    Hope you all have a wonderful 2015!

  • Count Your Angular Watchers

    In my day job we’re building a very large Angular app that is having some performance issues. So today I started trying to do bit of tuning.

    One thing I suspected was that there were too many watches but I needed to verify this.

    Thankfully I found the answer in Kent C. Dodds article on counting your application’s watchers.

    Just paste the following snippet into the browser console and it’ll return the number watchers.

    function getWatchers(root) {
      root = angular.element(root || document.documentElement);
      var watcherCount = 0;
    
      function getElemWatchers(element) {
        var isolateWatchers = getWatchersFromScope(element.data().$isolateScope);
        var scopeWatchers = getWatchersFromScope(element.data().$scope);
        var watchers = scopeWatchers.concat(isolateWatchers);
        angular.forEach(element.children(), function (childElement) {
          watchers = watchers.concat(getElemWatchers(angular.element(childElement)));
        });
        return watchers;
      }
    
      function getWatchersFromScope(scope) {
        if (scope) {
          return scope.$$watchers || [];
        } else {
          return [];
        }
      }
    
      return getElemWatchers(root);
    }
    
    getWatchers().length
    

    Even better is that you can select DOM element on the Elements tab in the console and then execute getWatchers($0) and get watchers for only that element and it’s descendants.