Matthew Lang avatar

Matthew Lang

I Don't Have One

A reminder from Carl Holscher that opinions on everything aren't a necessity.

Make It Stick

For the last couple of days I've been trying to resolve a bug in an application I'm writing for a client. As I was testing and re-writing the component a first time, a thought jumped into my head, "I' shouldn't be doing it this way. It feels wrong".

A second re-write later to the component backed by tests and my conclusions were correct, I was doing it wrong. It's hard to explain if you're not a developer, so I won't go into the details, but it boils down to best practices. I initially implemented this component one way when I should have implemented it another way. It's taken me a bit longer to get there, but get there I did.

Should I be hard on myself at the fact that I didn't think of this initially? I don't think so. It's easy to be pointed in the right direction when you're part of a team with a shared pool of knowledge. When you're working on your own, you can't be always switched on to the best practices for everything that you do. Practice it enough though and it will stick eventually.

Remembering the Start Page

Remember having a start page? I do.

Everytime I would open my browser, I would be faced with a billboard of widgets that funnelled in data from different sources and displayed them all on the one screen. It was beautiful. Before RSS readers took off, the start page was the go to place for all your news.

I remember my first start page, the Google Personalised Homepage. It was great. All my important feeds on the one screen. Everything I wanted to read for the day in one place. Gradually this evolved over time into iGoogle and with it came changeable backgrounds, widgets created by Google and thousands of widgets created by others. It went to a tabbed page so that you could setup multiple tabs on your homepage. Now you could categorise widgets and cram more data into your home page and you wouldn't need to scroll down to view those widgets, you just clicked on a different part of the screen (yes, I'm failing to see the convenience in this too).

Along came time based backgrounds. These were backgrounds that would change over the course of the day. Now you didn't need to see the same thing in your background all through the day, it would change as the day went on. You could only see this if the you didn't have a screen crammed full of widgets.

I even tried Netvibes for a brief spell and while it as fun to try something different, I went back to using iGoogle after not using it for a week. It was just too familiar and easy to use. Also I had invested time in getting the start page setup exactly as I wanted it.

All good things come to an end though and sadly last year, Google pulled the plug on iGoogle. Online trends have moved on from start pages. Most people now open social media clients as their first port of call for the day or maybe they go straight to their favourite news site to catch up. Only the insane try and start the day by opening their inbox.

Only a few services remain now that offer the start page experience, but I don't see the benefit in using them now. There's too much data out there for me to consume, certainly too much to fit on iGoogle regardless of how many tabs you have on the page.

Feedbin is my new start page now with a greater focus on curated content rather than just letting any old thing in. It has multiple feeds in it like my start page had, but it's better at letting me choose what I want to read and that's more important now.

Where's Your Own Backup?

We IT folk love having backups of data, but what about backups of ourselves?

Carl Holscher describes more.

Switching to Annual Subscriptions

Yesterday I got a hold of my credit card statement. This is the statement for the credit card that I use for my freelance business. Web services, hosting, e-books and subscriptions all go on it. It's not wildy extravagant. Last month I spent just under £100 on products and services for my freelance business. I can definitely cut back on a couple of services I subscribe to and choose lower pricing plans, but there's another area where I can make savings.

Each month I pay a small amount to subscribe to a number of different services. For most of these services I'm happy to pay the monthly amount. It's always under £10 with the exception of one. Not a lot of money, but over the course of the year those add up.

Where I'm not saving money is paying the monthly subscription amount for these services rather than the annual amount. Most online products and services offer an annual discount that means you pay less for that service over the year. You do however have to pay for the annual service up front.

As I'm trying to keep a reign on my spending, I would love to switch to paying a once annual amount for these services, but with there being a handful that I can do this with, I'd rather not do it all in the one month. It would just cost too much money in the one month.

The alternative then is to stagger annual service subscriptions. Starting in April, I'm going to switch one service a month over to an annual subscription in order to save a bit more money. I'm already using these services on a monthly basis and have done for the last two years. I'm a regular payer and will continue to do so, so why not subscribe for a year and save myself some more money?

Making annual payments for products and services will increase my monthly spending for my business at first, but over the rest of the year, I'll see my monthly spending do down. There's a couple of trade-offs with this plan.

The first is that I'll be tied into that service for a longer period of time, but it's a trade-off I can live with. I've used the services I'm committing to for a few years now and I don't see me wanting to change in the next year at least.

The second is that my monthly spending projection will be hard to track given that some months will have larger one off payments. It's not a major inconvenience but I have been so used to maintaining a monthly amount that has been consistent for the last year.

Switching to annual plans for services is a difficult choice. I suggest that you only consider those services that are critical to your business and also offer a discount over paying monthly. You might only save yourself a small amount on one service, but across a handful of services you could be saving yourself a lot more. Definitely something worth thinking about.

Fixie Friday - Sean Martin's Zephyr

Sean Martin's Zephyr bike

via FGGT

Stir Kinetic Desk

As nice as this desk is from Stir, it is way out of my price league.

Social Networks: The False Ego Boost

Social networks are everywhere. Some are aimed at specific individuals and markets while others just want to be the biggest network on the planet. Visit any website for an individual and you're more than likely to see a string of icons where that person can be found on different social networks. You can see one at the top of this page right now. Take a peek. I'll wait.

Did you see it? A conservative list compared to many other network lists on the web. The reason my list is small is that these are the main networks I use on a daily basis. App.net for conversation, Github for coding, LinkedIn for my career and lastly the most over-looked social network of them all, the RSS feed to my blog. Where's the rest you might ask? Well they're not there for good reason. I simply don't use anything else. At all.

I'm happy with the networks I use and take part in and anything more than this would invade my spare time. I just don't have time for anything else. I know plenty of people that use these networks in the right way and it works for them. They might be multi-disciplined professionals and use Github, Dribble and Flickr for their work. They have multiple talents and need more than one network to share their work. A good reason then to on multiple social networks.

For others though I suspect there's more to having a massive list of social networks against their name. For others I think joining multiple networks is nothing more than a ego boost. I could be wrong but I've heard enough conversations about social networking to realise that there are people out there who see a long list of social networks to their name as nothing more than just an ego check.

People that want to be seen using the latest network, regardless of what the site or service does, are using that service for the wrong reasons. Joining networks due to popularity might be considered okay if you want to gain value from that particular network if you're a business owner or product owner and you can see a market in that network. Seeing a social network as the next big thing people will be talking about and joining it right away is not going to make you any more liked or respected. It's certainly not going to make your life anymore fulfilling.

It's sad to see people join so many different social networks just because they can. They're not a professional indicator and they're certainly not a masure of success. They're a time sink if you're not careful in managing your time on them.

I'd much rather see a carefully curated list of social networks against a person's name or profile. A list of networks that person takes part in and shares their creativity in those networks. A curated list of networks is an indicator that the person has taken the time to weed out those networks that are surplus to their needs and they've recognized the networks that benefit them.

That's the person who's site I like to read or follow. The person that would much rather focus on putting a short story together, publish some code or even show their sketchnotes for a talk they have attended. Their focus is on what they create, not putting their name on every social network they can join.

Netterpress - A Retrospective

I'm four editions into my App.net newsletter and it has definitely been an eye-opener into running a regular publication. Don't get me wrong, I'm enjoying the process of putting together each newsletter and finding content to include, but there is a few areas where I could improve the newsletter and the process of putting it together.

Better user recommendations

This is a new section which only appeared in the third edition. The idea is that I monitor the new accounts being created on App.net and poll for a few days before the newsletter goes out. I filter for possible spam accounts and only include accounts that have been marked as 'human'.

On the weekend before the newsletter goes out I can then analyse the most active accounts for that week and pick out some recommendations for the subscribers of the newsletter.

There's so many parts of this process that can be improved:

  1. Discount feed accounts - A lot of 'human' accounts are using tools like Twitterfeed to automate posting to their account. These are not the type of accounts I want to recommend.
  2. Filter for users that don't have a bio - There's not much use in recommending somebody if they don't have their bio filled in telling people about themselves.
  3. Automate the user polling script - I manually kick off a couple of scripts to poll the App.net API. Ideally this should take care of itself and just run on an interval. Nothing to stop me doing that on my laptop, but I should probably schedule it to start during the day when I know my MBP won't be in hibernation.
  4. Scripting the users list - I put together the list of recommended users in the format of Markdown (like the rest of the newsletter), although there shouldn't be anything to stop me grabbing my list of recommended users and exporting it as a snippet of Markdown that can be included in the newsletter.

Conversation recommendations

I'm still undecided about this one, but another idea for App.net members was a service that reads back through your timeline for a given time period and weights conversations based on the number of replies, stars and reposts it gets. On a daily basis, subscribers would then get an email showing the most active conversations over that given time period.

I want to include this in the Netterpress newsletter, but on a per user basis it makes more sense to run it as a separate service. The idea could still be used in the newsletter, but instead of reading back on a specific user's timeline, it could poll the trending conversations feed and use that to search for active conversations.

More automation

I've already talked about automation earlier, but where I also want to automate the newsletter is the finding of new content. It's a manual job right now. I have included hashtags in the first two editions of the newsletter that people can use to tag their posts if it contains news that could be included in the newsletter, but the response to this has been limited.

Going well

So far the newsletter has shown me that putting a newsletter together involves a lot of work. It has been hard work balancing this with freelance work, but with more subscribers I could start blocking off more time during the day to getting an automated news discovery and publication process put together. It's still early days for the newsletter though, and I'm only halfway through the trial run.

Star Wars Rebels Teaser

Must catch up with The Clone Wars series before this comes on.

New Lights from Knog

These are definitely one of the best brand of lights I've used for cycling. Great to see they're getting more and more powerful but still use USB to charge them.

Must check the LBS to see if they have the Blinder Arc 1.7 in stock. It would be great for son's bike.

Effective 7

Being effective is a seven point plan.

Thanks NB.

Considering a Standing Desk

Last week I hurt my back while lifting my youngest son. Five days on and the pain is still there. This latest episode of back pain and many more before it are now putting ideas in my head that it might be time for a standing desk or even a desk that can switch between standing and sitting. There's still a few obstacles though to this.

Is it really beneficial?

I know there's been a lot of talk in the developer community about the benefits of a standing desk but like many of the new ideas that come from the software community, I take each one with a pinch of salt. It's not that I think sitting all day is fine and healthy, it's not, it's just that I've just yet to see a link to the medical research done to back up this claim that standing is definitely healthier for you than sitting.

The last thing I want to do is move from a sitting desk to a standing desk and then run into even more problems with my back. As humans, we're all unique. What works for some people may not work for others. I'm quite a big guy in terms of height and weight. Would I really benefit from switching to a standing desk or would I be causing myself even more pain?

I enjoy sitting

The other problem is that I do enjoy sitting. It's not because I'm lazy or over-weight, I just enjoy sitting. Programming, writing or even sketching, I enjoy it more when I am sitting. My work space is setup to compliment my sitting position and everything around me is within easy reach. I could change all this with a standing desk, but then I would need to change a number of things like my monitor, my keyboard and mouse space, and basically everything else on my desk. This isn't just a switch from one keyboard to another, this is a big change in the way that I work.

I'm already productive

At the moment I am fairly productive through the day but that's because I get up and take frequent breaks, I eat a balanced diet through the day and of course I opt to drink water through the day rather than soda. These don't take away the back pain, but it keeps me healthy and stops my energy levels dipping in the afternoon. While I try to keep as healthy as possible, would having a standing desk really benefit me in the ways that so many other standing developers have seen?

I'm not convinced that I would switch to a permanent standing desk, but having the ability to switch between the two would be something I would be interested in. I'm still thinking on this for the moment and I don't see me making any drastic changes over the next year. Perhaps I might try standing for a couple of hours a day and work solely on my MacBook so that I don't need to move too much about on my desk.

Before I consider a standing desk seriously, there's also the issue of finding the right chair to sit in. Before all the frenzy around standing desks happened, people were quite happy to sit while working. The Herman Miller Aeron proved to be a very popular choice of chair for many developers, but I couldn't justify spending that amount of money on a chair when I first started working from home. I'm currently using a chair purchased from IKEA. It provides me with a comfortable place to sit during the day but it definitely lacks in any adjustability I need to do to change my sitting position through the day.

Maybe a better chair is all I need for the moment?

Things To Do With A Bad Back

All this week I had the pleasure of taking my youngest to nursery in the morning. It's been great dropping him off and seeing his place of learning. It wasn't without incident though. On Wednesday morning my back twinged while lifting the little guy so that he could press the buzzer at the nursery door. The last two days have been very uncomfortable.

After a painful day yesterday, I had to lie down. A couple of pain killers later and I'm lying on my bed wondering what to do next. I picked up my phone and started writing. 500 words, 1000 words, 1500 words. The milestones were just flowing past. When I started feeling tired I had written 2500 words. Not a bad start to a book.

It took me to being flat on my back before I started writing, and once it started it just kept going. I've probably made dozens of spelling and grammar mistakes, but that's what the first draft is for. It's not about details, it's just about writing. Getting the idea on paper using words. I've made that first step in getting something down and I'll be continuing with it now over the weekend.

Fixie Friday - Cloud 9 Cycles

Cloud 9 Cycles bike

via FGGT

Who Are You?

Social networks are a funny thing. They allow people who are shy or uncomfortable in crowds to be as vocal as they like. I often wonder though if this is less common than people might think. I assume that there are many others like me who use the internet hundreds of times a day. Announcing their arrivals at locations, updating their status on an hourly basis and posting their lives to the world as if they are the star in their own reality TV show.

I definitely don't do this.

My social networking habits have rarely changed in the last few years. I keep to myself mostly, engage with others when I want to and only contribute when I'm sure that I am correct in what I am saying. It's a reflection of who I am when I am around people. A quiet listener. I don't say much unless I'm confident in what I am going to say.

One of the problems I have is that initial reach out to someone, whether that person is physically in the room, or another avatar in the world of social networking. Reaching out online is easier, but I still hesitate a bit when I'm making that initial introduction. I always thought that when social networks started with Facebook and Twitter, I would be more engaged with people than I am at a conference or meet up. Turns out I was wrong and the reason is that if that person is in the room or on the other side of the world, I always will be hesitant in making that first introduction. It's just who I am.

And that's enough for me as an individual. I use my voice online when I have to or want to. Mostly when I want to. If I have to say something, I usually think about what I am going to say first before committing to clicking the button that publishes your inner thoughts for the world to see. In that case, most of the time I'll scrap the idea of posting what I have to say and let it slide.

Does your online personality reflect who you truly are as a person?

How to Keep a Programming Journal

Keeping a journal is great for anyone looking to record their thoughts and experiences but I have also been keeping a programming journal for some months now and I have found it to be a great resource to help me through the day.

I got the idea for a programming journal from my late Granpa. During his retirement years he spent a lot of time learning to code. He kept a number of notebooks where he would scribble notes or code from what he did that day. Sometimes he would even write the code in the notebook in his armchair before taking to his PC the next day to try it out. Sadly these notebooks were thrown out before I could get a hold of them, but I still remember watching him scribble away in his big armchair.

For my journal I've opted to use a plain text file written in Markdown. Pen and paper would be okay for daily reviews, but copying snippets of code and urls is just much easier to do on your computer rather than transferring it to paper.

Choose a journal tool

First we need to choose a journal. Use a tool you're familiar with like Evernote, a plain text file or even pen and paper. Use whatever works best for you.

The reason I would encourage you to use a tool that you're already familiar with is that it will help you make a habit of this. If you want to try something new then feel free to but I think using a tool you're already familiar with makes it much easier to make this a daily habit.

What to journal?

There's several things that I like to keep in my programming journal. The first is the date. It acts as a reference and let's me review my past week or month in terms of work. I would say this is an essential element to your journal. Anything else that follows is optional but I find that a good mix of the following means I don't miss anything.

1. Snippets

There are snippet managers that let you save snippets of code for future use but the one thing I find lacking with these tools is the context in which why I would want to re-use code. Storing the snippet in a journal means that I can provide a background to how I discovered the snippet and any benefits or drawbacks there are to using it.

2. Articles

Bookmarking these in your favourite bookmarking application is good for a reference point, but what did you learn from reading the article. Is this information going to be easy to find in your bookmarks again when you need to find it? Maybe, but I find that storing the programming articles that I read in my journal means that it's easier to find them again.

3. Problems

Sometimes the best way to think through problems is to write about them. I've faced a number of difficult problems in code in my experience. Each time I've faced such a problem I write about it. I ask myself a few questions about the code and what needs to be done in order to maintain the code or write a new feature for it. Writing through such problems can often expose a chain of thought that might not have been immediately clear when you first faced the problem.

Such writing like this goes in the journal along with a summary indicating whether writing through the problem was successful or not.

4. Reviews

How many of you as programmers review your day? Did you record that big win you did today in refactoring that monster class into six separate service classes that are now fully tested and don't break the single responsibility principle?

If not why not?

I'm not the most confident of people so when I'm staring at some code that's holding me back, I find it useful to review my previous wins just to tell myself that yes I can overcome this problem. Sometimes just a review of what we did in the past is enough to get us in the right frame of mind to overcoming programming problems.

Do it daily

Perhaps the most important thing to remember about keeping a journal is to make sure that you fill it in daily. Don't worry about holidays or weekends where you're not working or programming. Missing days is fine.

I find that the easiest way to remember is that if I wrote any code that day, I record a journal entry on it. It doesn't need to be an epic monologue to describe the two line change you made to an open source project. Keep your journal entry relative in size to the amount of code you wrote that day.

In the past I would have articles bookmarked in one place, notes on code saved in a commit and snippets stored in a snippet manager. That's a lot of information spread out. Having it in one place makes it easy for me to review past experiences, search for snippets of code and find articles I have read. At the end of the week, I can pick out anything that requires a follow up.

It's working well for me as a learning and review aide and thanks to my Granpa for the idea!

One Gesture, Multiple Actions

I've been using Unread on my iPhone since it's launch and it is a joy to use. I star the articles I want to remember so that I have a list of them in my Feedbin account, then I share the article to my reading list. Simple right.

My only niggle is that I have to do these as two separate actions. Why can't they be combined?

Far be it from me to dictate the features of an application written in a language I have no knowledge of, but if these steps are coded into the app, then why do I have to do them individually? Surely there must be a way of allowing me to combine the actions I want to take when I star an article?

This isn't a dig at Unread or it's developer but what I'd like to see more of in applications is automation. One gesture or action to star an article and share it to the places I want to.

The argument against this would be that some people might just select every network and blog they're connected to and share it everywhere which is silly, so maybe limit the number of actions that can be combined to three maybe?

With a growing number of social networks, bookmarking sites and other blogs, it can take some people a number of gestures to share an article to the places that they want to. Why can't we combine these into one?

Plain Text Data Please

Being a fan of plain text files means that I am particularly picky about the services and tools that I sign up for. A service could have all the killer features that I need but if it can be made simpler by some scripting and text file, then I'll opt for that instead.

It all about data access. If I can access my data that your service stores and export it to something else, without too much fuss might I add, then I'm already going to like your service.

Todoist are an example of a good service in my eyes. I have their app on my iPhone and MacBook and I use it daily. It's a great service for managing your to do lists. The export facility though is a winner for me though. It does backups of all your to do lists on a regular basis for you. These backups can be downloaded (or exported if you want) to your computer. When you open them, the backup consists of a text file for each list with all your to dos listed in simple plain text.

At the other side, there are two types of services you need to watch for if access to plain text data is your key concern.

1. Services that don't allow access to your data.

These services are thankfully becoming less frequent now thanks to the fact that of those services that don't allow access to your data, there are some where you can at least access it through an API. Although this is only of benefit to developers, it does mean that with a little scripting you can grab your data and save it to a format that makes it easier for you to use.

The last time I checked, Path still doesn't allow access to your data in any kind of format and their API isn't published either which makes getting your data out and onto another network or journaling app much more of a manual process.

2. Services that allow access to your data but in a format other than plain text.

When I say a service uses something other than plain text, what I mean is that the format that they export to might be readable by any text editor but could be in a less friendly format like XML.

This is definitely down to personal choice and experience, but I am more comfortable working with JSON files than I am with a format like XML.

I use Evernote a lot now. Mostly for my freelancing work. When I exported some notes I created as part of my evaluation of it, I found that the notes were exported to a format of XML. Not user friendly at all if you don't have any experience with programming and you want to take these notes to another package.

Thankfully though Evernote does export to HTML which is far easier to read and while the HTML can't be imported back into Evernote should you need to, HTML is easier for reading your notes into another service.

This is the best of example I have of a service that exported to an unfriendly format. The reason why I still stuck with Evernote was that I can export the notes to HTML which is easier for me to script than XML.

Plain Text Please

If a service exported to anything more complicated than flat file with XML based markup then I wouldn't use that service. It's just a matter of having my data accessible in a format that doesn't inconvenience me.

Data access is a key criteria for me when assessing services that I want to use. My data should be accessible and ideally in a format that doesn't need a programmer to make sense of. Plain text formats win in this aspect due to their instant readability. Everything else is just a hindrance in my eyes.

Fixie Friday - Jooona's Kagero

Write from the Beginning

I need answers. Not right now, but definitely later on.

I've an idea in my head to turn my Grass Roots Productivity series into a book. This involves what many in the trade refer to as 'writing'. Therein lies my first problem.

Where do I begin?

For my only attempt at NaNoWriMo I just wrote a short introduction to a story. Each subsequent day I wrote more and more. No planning, no outline, no overall story to start from. Needless to say I struggled some days and faired better on others.

Is an outline really necessary though? I don't know. I've never written an actual book before. Some people say just write, others say outline first.

I suppose at the end of the day what I have as a first draft is not going to be the finished article and it will need to be read, edited and reviewed a number of times before I publish it. I'm not looking for a the winning recipe to writing a prize winning novel. I'm looking for practical advice to starting a book.

  • Do I outline the book?
  • Do I just write to see where it takes me?
  • Do I build on my existing blog posts?

I've got too many questions and no answers. Bugger it, I'll draft an outline and start writing from there. I need to start somewhere.

Unread - The Simple RSS Reader

It isn't often you find yourself using an app that is just effortless and simple to use. If you have an account with FeedBin, FeedWrangler or Feedly, then you'll want to check out Jared Sinclair's new app, Unread.

Good News for Everyone

Bring Back DungeonKeeper

I wrote about IAPs last month and now after seeing this, I will no longer support games developers who trade a fair business model for greed.

Justifying Purchases

One aspect of freelancing that I didn't expect to be much of an issue was that of justifying buying new equipment. I already had a pretty nice setup when I started. A MacBook, an external monitor and a working keyboard and mouse. That was all I needed to get started. I didn't worry about replacing the equipment over time, it just never crossed my mind.

Then last year the MacBook started to grind down with the amount of use it was getting on a daily basis. Tests ran slow, there was little free disk space left and at the back of my mind was the thought that the MacBook was already about five years old. What if it just died on me?

So I headed down to the local Apple store and done a check over the specs of the MacBook Pros and found myself a suitable specced Pro at a good price. I had only just received payment of my first invoice and already I was spending some of it. In my head though I knew I was justified in buying a Pro. My little black MacBook was not consistently handling the amount of work I did on a daily basis. Beach balling was a common daily occurrence, so a new laptop made sense.

In the last couple of weeks though my Apple keyboard of four years has started to show signs of wearing down. Certain keys sometimes need a double press to respond. I've tried shooting compressed air in at these keys but they're still sometimes unresponsive. Time for a new keyboard.

I was simply going to replace the keyboard I had for another one of the same model. The Apple keyboard is nice but I sometimes find the compactness of it just a bit on the small side. It was time to look elsewhere and one keyboard that did catch my eye was the Logitech K811. A similar profile to my keyboard, illuminated keys and it let's you switch between three different bluetooth devices.

The only problem was the price. At just under £90 it is easily the most expensive keyboard I have considered buying. It seems a lot of money, but then I remember thinking that about my Apple keyboard which was also more expensive than a standard keyboard.

What I keep forgetting is that a keyboard is one of the tools I use on a daily basis. I use it for the whole of the working day and if I'm to consider keyboards in a higher price point then I think I am justified in spending that little bit more to get a comfortable keyboard that let's me work fluently through the day.

I would love nothing more to splash out on a new massive screen, an array of new hard drives, a new router and lots of other goodies, but these are really nice to haves. The essentials that I need such as a laptop, monitor, keyboard and mouse are the essential tools that make my working day a lot easier. It's these tools that I should consider spending a bit more of my budget on should I need too.