Matthew Lang avatar

Matthew Lang

Family guy and web developer

Paying For Software Is Smart

Paying for tools is a smart choice. If programs like Keynote and Mail.app were actually profit centers for Apple, I would imagine that we'd have far better support, fewer long-term bugs and and most of all, a vibrant, ongoing effort to make them better.

Five Thoughts on Software by Seth Godin

I completely agree with this, after seeing Google eventually take down Reader, I've always swayed towards paying for tools and services when I can. They're more likely to be still running in the long term, offer greater support and they are updated more frequently to ensure their customers are still getting value.

There are exceptions to this though, but this is a rare exception only made possible by exceptional companies.

Two albums worth mentioning are the two albums of The Walking Dead soundtrack. I didn't think these existed until a couple of months ago. The dark and broody music accompanies the show well, but it's also a good listen on it's own.

The Last of Us

This is just a quick hat tip to The Last of Us on the PS4. I've been playing this game for the last few weeks and after playing a series of disappointing games like Destiny and Call of Duty: Advanced Warfare, it's great to see gaming being taken in a different direction. The game itself was brilliant, but not only that it was backed by a great story, believeable characters and a game that didn't rely on an arsenal of weaponry.

Highly recommended.

The De-cluttered Desk

I had been putting it off for weeks, probably months in fact. My desk was slowly becoming a paper-based version of Smaug's hoard of gold . It was time for a de-clutter.

We don't have a huge house but it's big enough for us. My workspace is located in the back of sitting room where my sons tend to congregate in the evening and at the weekend. I've got a desk, bigger than probably most people have in their homes but with it being my workspace for the whole day it needs to have space to allow me to be comfortable.

Over the weekend I started organising the top of my desk and moving things about to give myself more room. It took a few iterations but I'm seeing a benefit of the change now as I write this. I have more space on my desk almost all cables are out of sight. Having got this sorted I turned towards the tower of books, magazines, papers and other dead-wood that was accumulating under my desk.

I was glad to see that I managed to get rid of a few programming books that were aimed at more of a novice level. I've kept some of these books for years, but having not read one of them in the last year, it was definitely time for them to go. Never a bad thing to throw away the books you have learned from and moved on. Old magazines for healthcare and programming were consigned to the recycle box with a vow to keep only the last month's magazine.

Lastly it was the turn off the paper. With reams of paper cluttering under my desk, it was time to keep the stuff that needed to be processed and shred the rest.

The de-cluttered desk is now ready for some productive work. It's amazing the difference that an exercise like this does for your motivation.

Lambeau Field is over 3500 miles away. No distance is too great though to root for the team you love.

Ethan the Paisley Packer

My Development Tools - 2015 Edition

I forgot to do this last year. It completely went out of my head.

Hardware

Not much has changed since I last wrote about this.

  • MacBook Pro - I'm still using the same MacBook Pro I wrote about over a year ago. It has served me well in that time, but in hindsight I think I might have been better off with a MacBook Air. The retina is nice, but I do find the Pro rather bulky when I compare it to my Dad's Air. With all the hype of a new 12" MacBook Air circulating about, I am keen to see what new products have in line for the MacBook range.
  • Mighty Mouse - It's a great mouse but one annoying thing about it is that it frequently disconnects itself and has to be re-connected. A minor annoyance.
  • Logitech K811 - Last year I made the switch to the Logitech K811 keyboard. With a Mac Mini on the desk for the family and my MBP for work, switching between these two using the keyboard is simple.
  • Dell UltraSharp U2414H Monitor - Treated myself to a new Dell monitor at the end of last year. The thing I love about is the thin bevel around the edge and the screen is crisp and clear. Also it's adjustable in terms of height and angle. If I just had a bit more room on my desk, I would definitely stretch to having two of these sitting side by side.
  • External Hard Drive - I'm still using a Seagate external drive for Time Machine backups but I am considering a bigger external NAS for this.
Hardware nice to haves

As I mentioned above, the only change I would make at the moment is to replace my Pro with an Air, but with so many rumours flying around about changes to the MacBook line up, I prepared to wait a few months to see what emerges. Other than that, all my hardware is reliable and working well.

Software

This is the software that I use every day. These are the essential applications I need to work. If I had nothing else in terms of software, then these applications would be all I would need.

  • Mail - I still haven't found the need to switch to anything else. It handles all my email needs and it's baked into OSX as well.
  • Firefox - No complaints with Firefox and probably now the longest I have went without switching browsers. For a while it was almost a yearly thing. Chrome to Firefox to Safari to Chrome ... you get the idea. The tab groups is a particularly nice feature as I frequently have different tabs open for different clients and projects.
  • Todoist - Another type of tool that I used to do a lot of switching on. I must have tried over 20 different task apps in my time, but Todoist is the one I'm most comfortable with and it's baked into my workflow now. Can't recommend this product enough, especially their premium subscription.
  • iTerm2 - Still my preferred terminal emulator although I no longer use the pane splitting feature of it and defer to tmux for managing my panes.
  • Vim - I did it, I finally made the jump to Vim and I have stuck with it. Despite a few minor annoyances that could be fixed in the config, I am definitely more productive as a programmer in Vim.
  • Dropbox - I re-assessed Dropbox my need for Dropbox a while back wondering if iCloud might better suit me, but having my a seperate service handle syncing my essential files made more sense than relying on iCloud.
  • Facetime - Facetime, in particular the audio only calls, has become my main way of chatting to clients. I only defer to Skype now when I need to have a group conversation.
  • HipChat - It's probably not a good thing to be able to have clients get in touch with you at any moment of the day, but HipChat has become valuable as a portal where I can check-in with clients during the day. Also most of my work is done on Heroku, and I have a number of deployment hooks in place that feed back to client's rooms on HipChat. This way they get to see when code is deployed and ready to be tested as well as seeing notifications from commits I'm making on Github and Bitbucket.
  • 1Password - Probably my most valuable piece of software. Secure, easy to use and does make handling your passwords a lot easier. Also found their iOS app to be useful as well.

While I do use the following software every day, these are more like nice to haves rather than essential. Still, they make me more productive every day, so I'm glad I have them.

  • Alfred - Despite Apple's changes to Spotlight in Mavericks I'm still sticking with Alfred as my preferred application launcher.
  • Fantastical - Scheduling and calender management made easy. I also use this on my iPhone as well.
  • RSS Notifier - I still use this as a mini RSS reader for service updates from the likes of Dropbox, Cloud66, Heroku, Linode and other tech services.
  • Divvy - Great little application for managing your windows. Shortcut keys for common layout patterns have been commited to memory for a long time so it makes setting up different apps on my screen easy to do.
  • CleanMyMac 2 - Broom was great for identifying huge files and folders on my MBP but this goes one further and routinely cleans out junk and reclaims a great amount of wasted space. Usually run once a month now just to keep my MBP in good shape.

The Web

A web developer's playground. Just a small selection of the many services and products that I use online.

  • DuckDuckGo - Still my preferred search engine and I'm also finding that I use the Google bang operator a lot less.
  • Github - My preferred source code management tool for client work only.
  • Bitbucket - A solid source code management tool for my private repos. It's a shame that so many people are automatically are drawn to Github. Bitbucket works well, but it does lack a number of features that Github has.
  • Heroku - I mostly work with Heroku when I am working with clients. I no longer use it for my own projects and products though.
  • Linode (Referral link) - This blogs runs on a small Linode server. Yes it is costing me money each month, but Heroku's scale of pricing from one dyno to two dynos is simply too expensive.
  • Cloud 66 - Despite many attempts at getting a bare server up and running with all the software I would need for a Rails application, I always found the maintenance and deployment of servers too much of a pain. Cloud 66 have an interesting solution in that they analyse your application and configure a server of your choice with all the correct components you need. Deployments can be done from the command line or the Cloud 66 website. So far I have two production applications running on Cloud 66. I'm happy with the setup so far.
  • LinkedIn - Jury is still out on it's usefulness. I get the odd request now and again, but most leads have come directly from email.
  • FreeAgent (Referral link) - Still the best invoicing and time tracking solution for people like myself. Works flawlessly and the FreeAgent team do a great job of keeping you notified with tips and suggestions through their Monday Motivator email.
  • Instapaper - Still the best 'read it later' service there is. Left it for a few months but quickly returned after realising how great it is.
  • Feedbin - My preferred RSS reader and still delivering new features. I am pleased to say that Feedbin is still going strong.
  • Gauges - I haven't reviewed this recently but I'll probably still stick with it. Which reminds me, I have another service in the pipeline that could be using this.

Backups

I haven't had any major backup disasters in the last year, but that doesn't mean I can stop backing up my data.

  • Time Machine - I had a minor run in with Time Machine a while back trying to get some files from a folder that had synced to iCloud. I stick with it for the moment but I'm wondering if I should look at alternatives.
  • Backblaze - I started using this at the recommendation of Curtis McHale. Good to know that if the worst happens I can get a copy of my data sent to my home asap.

So that's the tools round up for this year. I might do a progress report in the summer with any changes that happened since then. Glad to see that small paid services such as Instapaper and Feedbin are still going strong. Also good to see that I'm not constantly switching tools like I have done in the past. I seem to be reaching a state of 'tools zen' where I know what works for me and what doesn't.

To TDD Or Not To TDD

Skipping the TDD cycle isn't always a bad thing to do. After all, sometimes you just want to write code.

Over the holidays I had some free time. An idea has been in my head for most of the year, but I never got round to scheduling anytime to work on it. I decided now was the chance to throw something together to see if this idea was worth exploring. To change things up a bit I decided to not follow my usual practice of TDD. Some might call that laziness and that might have been a minor factor, after all it was the holidays and this was just me trying something out, but the major factor in skipping TDD was that I had the knowledge to build the application quickly. Over the course of a couple of days I put together the first attempt at implementing this idea.

Aside from a couple of typos and minor bugs, the application is working fine and doing its job. The bugs were just oversights made by myself during those two days and they were easy to fix once found. I'm not surprised by the this as it is a simple application comprising of some basic CRUD operations and a single Rake task. Once everything was looking good, I deployed the application so that I could see it running for a few days. After a week it was clear that all was in working order. I've shared the idea with a couple of people who have so far been positive about it.

Now being a good developer I mostly write tests before I write code. It's the TDD way. This time though I skipped the tests in favour of getting something basic up and running. I had the knowledge and I ran with it. It was supposed to be just a prototype after all.

In the past I've stuck with using TDD when building even the smallest of products. At that point in my career however I was a less experienced developer. I was still figuring things out. The tests made sure that everything was working as I stumbled through different parts of the product. Now though, I have the knowledge and confidence to throw small web applications together without writing tests to in order to explore simple ideas for web applications.

Is it still a prototype then now that it has been shipped and is being used daily? Yes and no. The line between prototype and product is definitely blurred here. I would have to say that until the code itself was backed by a test suite, it's still just a prototype, an idea. So why not trash the code I have at the moment and start again from scratch using TDD?

I could, but I already know what code I need to write. Do I really want to scrap the whole thing knowing that I'm just going to write similar code again? In an ideal world I would probably do this but I knew it would be a while before I got free time like this again. The next obvious step then would be to add tests to the prototype and gradually refactor this code into something more stable. Something ready for the masses.

TDD is still a great practice to follow when writing software, but I think there's a time and a place for it. When writing software as part of your job, for a client, or as a contribution to an open source project, then yes, TDD should be used in these cases, especially if they are expected of you. However, when you are exploring code, ideas and simply playing around then I think it's down to yourself to decide. And if you decided not to TDD, don't sweat it.

TDD might be advantageous when learning a new language or framework but when you have the knowledge to build something quickly then why not. If it's worth pursuing further then start writing tests for the code that you have before things start to get more complicated.

It was a bit of a double win today for me and my son. We each got good news today that have changed how we're viewing the rest of the year. I'm looking forward to seeing what this will end up for both of us. I'm staying tight lipped at the moment on both sets of news but I'll be sharing both of them in due time.