Matthew Lang avatar

Matthew Lang

Time for a Reboot

Alan Francis wrote a really great article at the start of December about how he wanted to get back to his Extreme Programming roots and start programming deliberately. If it's too much for some of you then here's a non-programmer translation.

Programming by coincidence is where programmers make assumptions on the code that they are writing. These assumptions lead to code that isn't completely tested and could lead to problems in the application the code was written for. It's like acting on automatic pilot.

I looked back at the last year of programming I did. I opened the project I had been working on for the most of last year and did a code review on it. In general the code was okay, there were tests to cover the core requirements, and I had refactored when I could, gradually trying to improve the code with each iteration. However there was still gaping holes in the code that I should have investigated further. These parts of the code are tested but they are not tested extensively for edge cases, and that's where the bugs can happen.

When I was first introduced to agile methodologies in software development, I read the Extreme Programming website and another book, The Pragmatic Programmer. Both were excellent sources of information and let me taking my first steps in the agile world. Since then I've tried to improve my agile skills with every project I do.

After reviewing the code of the project in question, I couldn't see evidence of an improvement from my time working on the codebase. I seen lots of features that I implemented, but not much else in terms of improvements in the making the code better. When I thought back, I was aware of the features I was implementing but I didn't take the time to really think through the features and their impact on the code. It hasn't cost me any late nights in terms of application crashes, but it's not a road I want to go down.

So this year I'm focusing on a little bit of a reboot for my software development skills. Out goes the new programming languages, the new project ideas and the rest of the programming books I promised myself to read. Back in comes a collection of programming books that I haven't read in over 10 years, but books that I know will get me back on the right path again.

The good habits and practices of great programmers haven't changed much over the years and they probably won't for the next few years. Programming languages and frameworks will come and go, but the ideals and skills that many programmers pursue are still the same as they were 10 years ago. Sometimes it just needs a little time to remember them and go over them again.

Need a Productivity Boost?

Nicholas Bate has 7 productivity boosters to get you on the right track again.

Fixie Friday - Field Cycles

Steel bike. Couldn't resist.

via Cycle EXIF Update

Book Reviews #2

Just a few books I read towards the end of the 2013. I've still got some on my list but a few I've started and given up on.

  • The Broken Blade by Kelly McCullough - First book in a series about a washed out assassin and his shadowy companion. Very unique for a fantasy book in that it's more like detective noir. A great read and definitely not like anything I've ever read in the fantasy genre.
  • War of the Roses - Stormbird by Conn Iggulden - This is the first book by Conn Iggulden in a series that will cover the people and events during the War of the Roses. Mostly factually correct, but again the story is great to read just like Conn's Emperor and Conqueror series.
  • You, Only Better by Nicholas Bate - I've read the book a handful of times now, just because it's easy and quick to read, and each time I take a couple of extra notes from it. If you're looking for a book to reboot yourself this year, then get this one. No nonsense and easy to digest.
  • Crafting Rails 4 Applications by Jose Valim - I was expecting more of a reference book when I first heard of this but I was surprise when I read it to find it was more of a recipe book. Once I started to actually read it though, the recipes are simply there to explain techniques that you can use in your own Rails 4 applications. A must for Rails developers.
  • The NOW Year by Mike Vardy - A very short ebook, but a great reminder of tools and techniques you can use to make working with your calendar a lot easier.

I'm done with bookmarking apps

Last year I dropped Pinboard as a bookmarking manager and instead rolled my own bookmarking application. Initially it worked well for me as all bookmarking apps have done, I was able to save bookmarks quickly and easily and move on. But there was still one problem, my bookmarks are in a seperate box from the rest of my day to day data, e.g. my journal and notebooks. It's been a problem with each bookmarking application I have used. How do consolidate them with the rest of my data?

Most of the bookmarks I have fall into one of two categories:

  1. Long term value - Something that I will need to reference on a daily basis until I have it engrained into my workflow, so I will save it and frequently look it up until I have it engrained in my head or workflow.
  2. Short term interest - A post or article on a new programming method, technology or framework. I will read the post and possibly take notes, but chances are I won't re-visit unless I am absolutely need to.

The second category comprises of the bulk of my current bookmarks. I've saved hundreds of bookmarks that I have rarely re-visited since I first saved them. So what's the point in even having them? Just in case? It's a waste to simply save them and not return to them. Why even save them at all?

In the last two weeks though, I've started a new strategy that involves three buckets for saving bookmarks.

The first bucket is a static page on my website. It's simply a collection of programming and development articles that I have found useful after I have read them. I'll also include a quote of the article and my own thoughts with it if needed. These type of articles tend to expire after a period of time just because programming languages are always changing, so I don't need to search back too far on them if needed.

The second bucket is a collection of files I am collecting together on different topics with really useful resources on them. Let's call them cheatsheets. I'm building these as pages on my website as well so that I can access on the go. Each page is a particular topic and listed on it are just a small collection of links. I'm trying to keep each one down to a maximum number of links but I haven't got to the stage where any of them are too big.

The last bucket is my journal. Anything else I find interesting gets saved in my Journalong journal. This process is made easier due to the fact that I can compose journal entries from Alfred and have them open in the Journalong new entry page so that I can just double check the entry and hit the submit button to save it. I am hoping to make this even easier to do in the future but it works for the moment.

This works a lot better for me as I have three files open on my desktop at all times.

  1. This month's current journal file from Journalong
  2. My programming and development notes file
  3. A cheatsheet relating to the type of work I'm currently doing whether it admin work, a weekly review, programming or writing

As all of these files are markdown files, I use the Marked 2 app to preview them as nicely formatted HTML pages that make them much easier to read and interact with.

In the last week I've really noticed a change in how I think about the bookmarks that I save to these buckets. It has given me a chance to assess each bookmark now. Where as before I might have saved all the interesting stuff I found in my reading list and made an empty promise to look at them later, now I critique each page I read to see if it fits in one of the three buckets I mentioned above. If it doesn't fit in a bucket, I can discard it.

Now that I have specific places for bookmarks I want to keep, I don't need to bother about apps on my phone and iPad and bookmarklets or extensions for saving them. The biggest benefit though is that I'm done maintaining a database of bookmarks. Databases work well for lots of things, but I found it an increasing pain having a database of bookmarks that I never re-visited.

I'm done with bookmarking applications now.

Accountable Intentions

I've probably read close to a dozen posts over the last week on setting resolutions. Half of the posts I read were "how to" posts, offering advice on setting resolutions and following them through. The other half were not so much about resolutions but more about actual people's plans for 2014. Two posts really stuck out for me though.

Curtis McHale is a Wordpress developer from British Columbia and is currently self employed. I read his blog for the whole of last year. What's impressive about Curtis is that he is one of the few people I know who set their intentions down for 2013 publically on his blog and also followed it up with a detailed review at the end of the year. That's real and honest accountability.

That's where many people fail in their resolutions for the year. Lots of people make resolutions for the year but most people keep them to themselves. If you truly want to succeed at your intentions this year then let someone know about them. You don't have to write a blog post about it, you can simply let some family or friends know. The key thing is to let someone know who will not accept your excuses for giving up on your plans.

You've probably noticed the use of the word intentions in that last paragraph. This leads me onto my second recommended post about resolutions and that is Patrick Rhone's post about his plans for 2014. Patrick dismisses the word resolutions and uses the word intentions instead to describe what he plans to do this year. It might be enough of a change if you name them intentions that it will increase your chances of seeing them through.

Seeing the success that others have had with their intentions has opened my eyes a bit to perhaps setting my own for this year. Even though it's well past the start of January, it's never to let to lay down some intentions for the next year, month or even day. Just make sure you let someone know that you're doing it so they can follow you up on it after a while.

This year's theme: Smarter Budgeting

I mentioned in a previous post about this year's theme being smarter budgeting. After a sort of successful year in 2013, I asked myself where I could improve and one area was very clear to me, budgeting.

Many of you might be thinking that this is something to do with just finances. It isn't. This budgeting for money and time.

When it came to my freelance work, my own projects and family time, I spent far too much time working on things and not making any real progress.

Let's take my new App.net newsletter for example. The idea for Netterpress started in October, however it's taken until now to get the first edition of it released. All in I've probably spent way more time on this project than necessary. Spending extra time on something isn't the only problem though.

Last year I didn't go out on my mountain bike at all. Shocking. I love mountain biking, I really do. Last year though I didn't even give myself the time to go for a quick ride at the weekend or even a night ride during the long summer nights. What a waste.

Last year's theme of being independent isn't quite complete, but I'm getting there. After focusing on this year for a year, I'm now at a point where it's part of my end game to be independent. To help this along though I need to budget my money and time so that I am getting things done and working towards independence.

I've already started allocating myself a fixed number of hours each week for client work and products, as well as blocking off the weekend from all work and using the weekend for reading, cycling and family time. It will be interesting to see how this pans out over the year.

Palmerston...

... a great place to write. No fast food, no traffic, no slog of a commute, no rat race, no corridor warriors, no boss and no 24 hour internet.

My Blog Plans for 2014

Last year was a great year for me in terms of blogging. I managed to write posts for most week days with just a few weeks off, I kept my Fixie Friday posts going and last but not least, I used my blog to share links. Mission accomplished I would say for 2013 but what about 2014?

Next year poses some challenges. I want to keep blogging but I also want to increase the quality of my posts without decreasing the frequency of my posts. I've been thinking about this over the last week during my stay in Canada.

In my review of last year, I certainly skimped on technical posts from my development work. Not that I want my blog to turn into a developer's only blog, but I do want to write more technical posts about my work as a web developer. Maybe one a fortnight would suffice as a starter.

I also kept my posts rather brief with maybe just one post a fortnight being more than 500 words. I want to write one post a fortnight that is more than 750 words with the time taken to research and edit the piece before I hit the publish button. I rarely did any editing on my blog posts with just a skimp over it to check for spelling and grammar mistakes. That's not a good habit to get into, so there will be more of an emphasis on editing everything I write, but in particular the longer blog posts.

To help with this commitment to better writing, my working week is going to be slightly different. I've reserved four days a week for client work with one day a week being reserved for my own work. This gives me a chance to get some writing done in the morning and also curate some content for the Netterpress newsletter while it's in a trial phase.

I'm intentionally not over commiting to doing too much on my blog. I've got other areas where I also need to focus on, so these two changes I've highlighted above are a good place to start. I'll review this after 3 months and see if it's working for me. No reason that it shouldn't, it is after just a small change to my blogging habits.

After the Ice Storm

After the ice storm that hit the Toronto area before Christmas, I managed to get a few shots of the fields across the road from my in-laws house just as the sun was setting. These were taken over two days which explains the change in the clouds.

Fixie Friday - Moth Attack

Last one of 2013, enjoy!

via FGGT

Is the blog truly dead?

Every yeay I read that blogs are dead or declining in use.

Blogs obviously aren't dead and I acknowledged that much right from the title. I (obviously) think there's a lot of value in the blog format, even apart from its massive influence on online media in general, but as someone who's been doing it since 1998 and still does it every day, it's difficult to ignore the blog's diminished place in our informational diet.

RIP The Blog - 1997 to 2013 by Jason Kottke

Despite the declining use of blogs, I think they're still a great format for publishing and I'll continue to blog and read other blogs until they are truly dead.

Fixie Friday - Dosnoventa Houston

via FGGT

Best golf shot of 2013

Best bike trick of 2013

And the boundaries just got pushed even further for bike tricks.

via Kottke.org

Time to regroup

The last few weeks have seen my writing tail off from the schedule I would have preferred to keep. It's meant that I've resorted to writing posts on the day they are supposed to be published. Hardly ideal, but those are the breaks in life.

Right now seems like a good time to take a break for a few weeks over the holidays and regroup. I'll still be posting links to here and maybe the odd written post once a week, but I'll be relaxing my writing schedule until the start of next year.

See you all on the other side!

My First Year Freelancing

The start of next year will mark my one year anniversary as a freelance web developer. It's been an amazing ride this last year. I can't believe I'm still doing what I am doing. Working from home, flexible hours and of course working with Ruby on Rails are all great benefits but what's it been really like?

Clients

As for the client roster I'm dealing with just a handful of clients at the moment. The clients I have I can a manage at the moment and I haven't got to the stage where I would be looking for another developer to sub-contract work to. It has been at the back of my mind the last few days with the amount of work I have lined up for next year, but I'll cross that bridge when I get to it.

I've managed to build a nice relationship with the clients I have at the moment. I would be the first to say that I'm not really a people person, but the feedback I've had from clients has been excellent. I think being in constant communication is key to building a great relationship with clients.

Work

The work itself has all been Ruby on Rails work. All the applications I am working on are 3.x applications but I have rolled out a couple of Rails 4 applications of my own just to see any differences so that I can prepare for any upgrades I may have to do in the near future.

I do all back end development work. I don't do any design work or front end development at all. It's amazing the number of people who think I do the design work. A designer I am not but I am looking to expand to doing some front end development work next year. It's important to be not only providing value for clients but also providing options. If I can provide additional services that they would go to someone else for then that benefits

Adjustments

I've had to make a number of small adjustments to my daily work routine in order to survive working from home.

I keep to a 9 to 5 work day purely for the fact that it works well for not just me but everyone in the house as well. What's the point in me working all evening and missing spending time with my family? However I do have to sometimes do work at night, maybe once a week. Things like invoicing and admin work I do at night so as not to split my time on client work during the day. It's extra work that needs to be done.

Jen works half days on a Thursday and a Friday. When she comes home with our youngest son on those days, we have a chat about our day so far and have some lunch. Then I retreat back to the office to finish my work for the rest of the day. She understands the importance of me finishing my work for the day and I only get interrupted by Jen if something is really urgent.

An adjustment I've recently made is no client work on a Friday. I made this decision so that I could get some time to work on side projects and hopefully turn them into income streams. Client work is important but my freelance business will need to weather the ups and downs of demands for my work. In order to get through those hard times it makes sense to have other income streams from products.

Benefits

Working for myself is a real benefit to me at the moment. We have a young family with one at school and one at nursery. With myself and Jen both working child care has always been an issue. Up to last year though we were quite fortunate in our circumstances but if I continued working full-time we would definitely need to consider child care for both our kids, which at the time was an expense we were hoping to avoid.

Working for myself though means that I am able to be more flexible in my hours. I still do a 9 to 5 day most days, but having the option there to take my oldest son to school and pick him up means that we only pay child care for our youngest. I always catch up on work at night if I need to but it's usually only an hour or two which leaves me time to spend with my family.

Drawbacks

I'm usually quite good working on my own, but I do miss the banter of working in a development team. Not just the chance to work with others but also the banter, the jokes and the other perks that come from being part of a team. That's the only drawback to my freelance career so far. I can live with working on my own. The benefits far outweigh this one drawback.

A Great Year

It's been a great year working for myself. It's always been something I've wanted to do, but the opportunity just hasn't been there in the past. Now that I've completed a year working solo, I'm prepared to put the work in to maintain my freelance career as long as I can. It just offers so many more benefits than a full-time position. I'm looking forward to writing another post like this at the end of next year. It's going to be hard work but it's going to be enjoyable hard work.

The Daily Capture

Capturing. It's an action that I repeat every day. Although I don't have exact figures for it, I probably manage about fifty captures a day depending on the context of the capture. Bookmarks, snippets, thoughts, images, posts, code and more. They're all captured into various places and then reviewed, read or actioned on at a later date. Here's a few examples of the things I'm capturing during the day.

Thoughts and ideas

I'm now getting into the habit of journaling about four times a day. Through the day I'll capture ideas, thoughts and challenges that I've faced. I might come across an idea for a small application or I'll make a note about a bit of work that needs to be automated. It like a private social feed back to myself. At the end of the day is my review of the day. I do this every day.

Web pages

Web pages get captured in three places at the moment. The first place is Evernote. Anything that's interesting on App.net is starred. I have a recipe on IFTTT that reads my favourited posts from my timeline there and posts them to my Evernote account.

The second place is the Safari Reading List. I moved for this from Instapaper a few weeks ago. This tends to be for posts that I've found interesting in Feedbin and would like to look at later on.

The third and last place is my private bookmarking application. A couple of months back, I decided to roll my own bookmarking application. It's far from complete but it serves it's purpose for the moment.

Actions

Actions are still a work in progress. Previously I would capture all actions in TaskPaper and then during my weekly review, assign them to a list. For reasons I mentioned in another post, I decided to switch to Todoist for all my list management needs. Anything that requires actioning is added here to the inbox list so that I can assign it to a project or folder during my weekly review.

Emails

This wouldn't be a capture post unless I wrote about my inbox. I tend to keep my inbox fairly clutter free. I carefully vet email subscriptions on a monthly basis and I use a lot of rules that shuffle emails about to various folders. I don't think of my email as multiple inboxes, I tend to view as just one. I have the keyboard navigation pretty much memorised so that I can switch from one folder to another and read and organise emails as I need too.

Most of the emails I do receive are either deleted or filed away on folders, but for a small percentage of them though I forward them onto Evernote. After losing a few important emails a couple of months ago, I've decided to invest in Evernote as a place for important information that I can't afford to lose.

Still too many inboxes

One thing that has become clear from these captures that I do the most is that I still have too many inboxes to maintain. All in I'm sitting at five inboxes at the moment. That's still too many for me.

In a perfect world I would have one inbox that is connected to all the other products and services that I use and lets me move and organise items according to their context, but that's an idea for another day.

At the moment, I think the best I can do is identify a place where I capture the most items and make it integrate with other inboxes with some kind of automated workflow. I can do this easily enough with the tools I have on my MacBook Pro possibly using scripts, but the challenge will be making this work on my iPhone or iPad.

More Essentials from NB

This time the nicely titled, "How to be more intelligent 101". Essential reading from NB.

Journal Day

Mark your calendars for next year, Patrick Rhone is proposing a new holiday for journal fans everywhere, Journal Day (December the 9th).

There are many ways to celebrate or traditions one could keep to mark the day. For instance, this might be the day to take out previous journals and reflect on where you were then versus where you are today. Another tradition may be to let someone you trust read one you have kept and get to know the “real” you.

Journal Day by Patrick Rhone

Column Space

Column space is a prize piece of real estate in a newspaper. In a medium that is restricted by physical size and print run, editors need to select the stories that will interest readers and will of course sell more newspapers.

Unfortunately the same can't be said for a newspaper's modern incarnation, the website for the newspaper. Pages are cheap to put together and publish. News stories ranging from the headline news of the day that affects the whole world to celebrity spats on social media. It seems as if there is no check in place to say whether a story is worthy of being published. All too often, even the most ridiculous of stories get published.

I'm writing this because people that comment on whether a story is worth the column space on a newspaper's website tend to forget or not know that website pages are cheap when compared to the printed word on a dead tree.

Newspapers are restricted to a set number of pages and for a limited time. There's also the printing costs and shipping costs in getting all these newspapers around the country. Even the smallest of stories have to justify their worthiness to be printed in the final edition of the newspaper for the following day.

Now look at a news website. Technology today can now scale websites to millions of visitors a month on platforms that are readily available to many. A typical news website will be continually updated throughout the day. Every hour sees the addition of more news stories and existing ones being updated with new information if they are still relevant.

Even news with the smallest confirmed information is published with breaking news on a story being published so that so that news website can say, "Yeah, we're investigating this story too".

As more details on these stories come through, they are quickly expanded into more details pieces with links to other related stories and sometimes even interactive maps or graphs are added. There is simply no limit to the column space that a news website has. It's is always growing as along as it is relevant.

Then there's the column space on the front page of a newspaper. Reserved only for the big stories of the day, it was once the coveted part of the newspaper where many journalists want to see their story being published.

The news website is a little less precious though about what makes front page news or in this case, home page news. The home page has become a carousel of stories that are always in a state of change. Developing stories are pushed to the top portion of the page, with other stories eventually tailing off to the bottom. Where newspapers in the past only published a handful of stories on their front page, news sites can easily accommodate over 50 different stories on their home page.

There's no rule now in saying what makes the cut for published news. The idea of column space is dead. News now moves at such a frantic pace that news sites change every minute depending on what's happening around the world. News websites just want to be seen to be reporting the news that happening now rather than reporting the news that is relevant or important.

What if there was a news website that respected the fixed number of pages they had available and only reported on the news that mattered? What if it remained static for 24 hours and only updated once a day? Would you read it?

That's the problem though, no one wants a news website like that. The majority of us expect the news to be updated on a minute by minute basis and within easy reach on any one of the computers or devices they happen to be near at the time.

Column space was once treasured, but sadly it has been replaced by the rule that a story can be published if that story is relevant or might bring more visitors to that newspaper's website. It's that last part that irks me, as it appears to be the guiding factor on many published news stories that are just not relevant with what's happening in the world today.

I'll sign off now, as I'm running out of my column space of 750 words.

The Archive

My blog archive goes as far back as 2009. A single post on a suggestion for Google Reader is all I can show for that year. In 2010, I wrote two posts, then in 2011 I wrote some more. My early blog posts might have lacked content and aim, but it was a start. It's crossed my mind today that many of these posts are no longer relevant or readable and therefore could be deleted.

Should I delete any posts just because I thought they were inferior?

Absolutely not.

My blog archive is my digital timeline, it's not a complete history, but I'm getting more and more consistent with my posts and I'm frequently writing from a reflective angle. My archive is me through the years. A scrapbook of my thoughts on various topics. I might not have liked what I wrote in the past but I leave it there as a reminder. When I compare what I am writing about today with what I wrote about in the past, it lets me see I am getting better at putting my thoughts into words.

Don't Self-Destruct

Nicholas Bate identifies the seven ways to self-destruction.

Tip: Identify and eliminate these destructive patterns.

Bike Bullies

Proof that technology and search companies are not the only corporate bullies when it comes 'brand protection'.

Just disgusting Specialized, and yes, the actual Roubaix cobblestones are what first come to mind when I hear the name. Not your bike.

Teaching Programming

I've read quite a few articles about teaching kids how to program and write code. There's the argument that the world has embraced technology to such an extent that it's hard not to have your life touched by technology in some way. Some advocates of teaching kids to program say that it should be part of the school curriculum from a very early age.

I agree with teaching kids about technology and how to control it, but I believe this should only start at a point where reading and writing have been mastered. The point where kids can read basic instructions and write about their experiences.

I think my oldest son is at that point. So next year, I'm going to start teaching him how to write code. It won't just be about writing code though, I aim to educate him about basic terminal commands, show him how computers work and how their used all over the world in different ways.

I'll be blogging about it along the way, maybe one post a month, with a guide to what he has been working on. It should be fun, and it will be nice to get to spend time with him as well.