Matthew Lang avatar

Matthew Lang

Web developer with a preference for Ruby on Rails

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.

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.

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.

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.

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.

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.

Social media is killing social media

In the quest to find news users for people to follow in my Netterpress newsletter, I started putting together a few scripts that would poll new accounts created on App.net and update them over the course of the week. I only filtered for accounts categorized as 'human'. I figured that this would limit some of the spam accounts I would get. At the end of the week I would sort the accounts by the number of posts made for each account and then starting hand checking each account from the top of the list looking for interesting users to include in the Netterpress newsletter.

A sound idea in theory, but when it came to checking the accounts, I was disappointed to find that most of the active accounts at the top of my list were in fact spam accounts or valid accounts entirely powered by automated feed tools. There only a handful of actual human accounts in the fifty most active accounts that I looked at last night.

I've never previously done this on other social networks like Twitter or Facebook, but given my experience on Twitter in the past it's hard to be surprised by this.

Social media is it's own worst enemy in my eyes. The very tools that make it easy for us to post from one location to different networks are the very same tools that are used to automate the posting of irrelevant and unsolicited content.

The barrier to many social networks is nothing. All the networks I have heard of are free. Even App.net has a free tier for anyone to join. It's that free entry that makes it so appealing for many, but to others they see an opportunity to post irrelevant content.

In App.net's case, there is a growing number of feed accounts appearing on the platform. While that's okay for feeds that deliver valuable content, there's no getting away from the fact that people will setup accounts to deliver unwanted content, regardless of the social network you use. It doesn't matter what social network you are a member of, there will always be spam accounts trying to dilute the pool of valued content.

I'll be checking through the data over the weekend in preparation for the next Tuesday's newsletter. Hopefully I'll be able to pull together a list of some new users to recommend to others for the next edition of Netterpress.

Quality and Time

I take pride in the work that I do as a web developer. I always try and deliver the best possible work that I can. If you're a developer of any kind whether it's systems, mobile, web or any other type of developer, one of your aims each day should be to deliver the best possible work you can. When we do this we take the time we need within our estimate to deliver the highest quality of code we can afford to.

Quality and time go hand in hand in this case and it doesn't just apply to programming. It applies to everything that we do. If you want to do something right, take the time to do it well.

I come up against this on almost a daily basis with my oldest son. He rushes his homework and then asks me to check it for him. Untidy writing and stupid mistakes in his arithmetic are just two hallmark traits of his rush to finish his homework. At this point I rub out all his homework, even the stuff he got right, and ask him to do again. Before he begins his homework again I tell him that rushed homework is bad homework. If he wants to get it right in the future first time, then he needs to take the time to do it properly. As with all kids he doesn't remember this advice from one day to the next and so he needs to be reminded of it daily. He's getting better and it's good to get him in into the habit of taking his time with his homework now before he starts high school.

A simply example of applying the right amount of quality and time to our work but it's amazing how often I have come up against this in a professional working environment.

I've been in this position a few times where you are expected to deliver a specific piece of work within an allotted time. The time you're given isn't adequate for the amount of work needing done. In the past I would have cut corners. I would have written code without writing tests for it, tested it through the happy path and delivered it for it's intended audience. Bear in mind that while I do this, my line manager at the time is aware of the short cuts taken and is okay with the end result. It's reminiscent of the 'live to fight another day' mantra.

I don't want to fight another day though, and a couple of years ago I remember spending weeks just putting out fire after fire. It was an unpleasant experience made worse by the fact that there was just no room for spending time to deliver quality work. At the time, the company had too much work and little resources to handle everything. So corners were cut and everyone suffered. It's not a nice experience and it's a difficult to recover from this.

I'm more aware now of the need for both quality and time when it comes to delivering your best work. I write tests for my code where I can, I take the time to refactor my code, I test it in a staging environment to check it is working as expected.

When it comes to your work, regardless of the what you do, don't forget that time can have an effect on the quality of your work. It's not a perfect world though and we don't always get the time that we need. We've all been faced with the dilemma of delivering work within a tight amount of time, but rather than letting that be the norm, let that be the exception.