Matthew Lang avatar

Matthew Lang

Family guy and web developer

Web Development

Rails, Ruby, front-end work, and building things for the web.

Finding the balance with AI dev tools

As a relatively late adopter of AI tools, well, amongst software developers anyway, I am slowly coming round to the benefits of AI. Like most people, I started with the big-name AI tool, ChatGPT, but it didn’t take me long to discover Anthropic and their Claude and Claude Code tools.

Over the last six months, I’ve been a heavy user of Claude Code. It definitely provides serious productivity gains. Here are a few examples of where I have used Claude Code in the past few weeks.

  • Upgrading a couple of Rails applications from 7.0 through to the latest 8.1 - The Rails upgrade process is fairly straightforward, and I’ve done quite a few upgrades over the years, but the process has been
  • Re-starting development on Dailymuse - work on this has been slow over the last couple of years, but the last few months have seen some big changes in my micro-product.
  • Exploring Hugo and Jekyll themes - I had been working on a Hugo theme I planned to use on Micro.blog, but since moving to self-hosting, I have migrated this over to Jekyll.
  • Built supporting tools for my blog - Self-hosting with Jekyll is easy, but I wanted to still have the option of hosting images and posting on the go as I used to with Micro.blog. I managed to build a number of these features to support my Jekyll blog over the course of a week.

The accelerated pace of development is probably the first thing software developers notice when using AI tools like Claude Code. You can build features and even applications at such a rapid pace, which is good, but it’s also been a red flag for me since I started using these tools.

With increased production rates, I am concerned about retaining the knowledge of what I am building. Will I know enough about the code base to support it in the future? When my code breaks, how will I know how to fix it?

I am exploring a few ways of ensuring that I know the code that I am shipping, including:

  • Taking notes on code changes, especially in areas of the code base that are important and application or business-critical.
  • Adding more comments to my code - this might serve the AI tools more than me, but having comments throughout the code does give me a quicker understanding of the code I am adding and where I am adding it to.
  • Spending more time reviewing code — especially AI-generated code. What is this code doing? Do I understand it? Can I make this code better? Is this code even suitable?

There are other ways I can improve my retention of the codebase, and yes, AI tools can help with that. However, as good as the AI tools are, there still needs to be human understanding of the codebase to make the right decisions about future changes, and that begins with understanding the code and ensuring I retain enough knowledge about it.

A change to my blog

After a few years of being on the Micro.blog platform, it’s time to host my own blog again. I’ve thoroughly enjoyed hosting my blog on Micro.blog, but I want to have more control over what my blog does for me.

Having my blog on Jekyll wasn’t enough, though. I needed to be able to blog from my phone if needed. So, over the last couple of days, I have been building a Rails app that helps me to do what Micro.blog offers. I’ve tried to do this in the past and failed miserably, but this time I’ve added enough knowledge to know what I need.

The Rails application handles two important steps that I need to continue blogging about when I have my phone.

Uploading and hosting images

The first is the uploading and hosting of images. I previously included all images in the blog itself when I last ran my blog using Jekyll. As expected, it led to some seriously long build times for Jekyll.

The new application allows me to upload and serve all the images for my blog. Each image is saved in different sizes, and I’m using an LLM to generate alt text as it’s uploaded.

This allows me to manage uploads separately from the blog itself and keeps the blog’s build time fast.

Posting on the go

The second is creating posts on the go. I previously did this using GitHub’s web interface, pasting the post directly into my repo. Not exactly straightforward, and it worked to an extent, but it became more of a chore than anything else.

The new application allows me to compose posts on a much friendlier web page. I can save the post as a draft and come back to it later. When it is ready to publish, it commits the post directly to my blog’s repository on SourceHut, where I have a build script to deploy the code to my server after each commit.

What I’ll miss

Yes, features are missing from my setup, like cross-posting, bookmarks, and bookshelves, and over time, I might replace them with my own take on these features. For the moment, though, I’m quite happy knowing that my blog is back to being something I have full control over, and I have more of a say in how it’s built and displayed.

And yes, this means I have parked the three-column theme I was building for Micro.blog. I doubt I will finish it. Apologies if you have been looking forward to it.

I will still be keeping my blog pointed at the Micro.blog community and I wish nothing but success for the platform. It’s a great community, and I hope it continues to grow.

Tinkering with build scripts on SourceHut

I’ve been messing about with builds on SourceHut for the last couple of days.

Yesterday, I got a build script working that triggers a deploy for a Rails application over at Hatchbox. It’s the last part of a release script I have put together that automates deployments for me. I can see myself using this in other Rails applications as well.

This morning, I got a build script working to build and deploy a Bridgetown site using SourceHut’s built-in static hosting. I could have had a Jekyll site running probably in half the time, but I was curious to see what Bridgetown offers for static sites. It involved a bit more in the build script, but the site is working now. No idea yet, what I will do with the site, but it’s good to know I can use Bridgetown.

Most importantly, I feel I have rediscovered an interest in my side projects over the past week. Between using Zed, Claude Code and SourceHut, I have been hacking away at various little scripts and ideas just to automate a few things and broaden my programming knowledge a bit and dare I say it, thoroughly enjoying it.

I think I’m at that point in Micro.blog where I would like a filter on the timeline page. I’d like the option to filter the timeline by Micro.blog accounts or external accounts I am following.

Making do with plain text files

After my recent decision to scale back on GitHub issues and pull requests, I’ve found some traction again with plain-text files.

In a couple of Rails applications, I have a docs folder where I store several Markdown documents that serve as guides for some of the code. To this, I have added three files, FEATURES.md, BUGS.md and PLANNING.md. The features and bug files are self-explanatory, but the planning file might need some explanation.

GitHub has a feature called milestones that lets you set an end date for a milestone. You can also add issues to a milestone. I always thought it was a nice feature that mimicked a sprint from agile methodologies like Scrum.

The planning file contains the sprints I have set out for the next six months, with each sprint listing the planned features and bugs I will work on. It gives a nice top-level view of what’s ahead and is easy to update.

I’m still in the early days of this plain-text switch from GitHub’s own features, but I’m already seeing benefits. The files live in the application’s codebase, so updating them is easy in a text editor. Having these files in the code base reduces the amount of context switching I need to do. Features and bugs can be planned in one pane, with any related code being open in a neighbouring pane, side by side.

Finally, the files are plain text, so they can be manipulated by any scripts. I am considering an auto-generated HTML file that provides an overview of the project’s status. It would include the number of open issues, a roadmap for the next few sprints, and any open bugs.

The planning tools that cloud-based products like GitHub and GitLab provide are fine, but are definitely overkill for what I need. Making do with plain text files isn’t a step down; it’s just an easier way for me to manage these projects with minimal overhead.

You probably don't need GitHub

All too often, I would start a new project on GitHub, only for it to gather dust. It’s one of the reasons I moved my personal projects to SourceHut: I don’t need the social interactions GitHub provides. I still have a couple of larger Rails applications that I host on GitHub, using a separate account.

A minor revelation struck me last night when I was trying to merge another pull request for one of these Rails applications. I probably don’t need to merge this pull request or any other pull request. Since I’m the only one with access to the repository, I can skip creating, monitoring, and merging pull requests and simply use git merge when I am ready to merge the branch into the main Git branch.

Why am I even using issues, projects and milestones in GitHub? Again, it’s just me on the repository, and I don’t need to collaborate in the sense that GitHub allows.

The only reason I am left with using GitHub is that the hosting provider my Rails application runs on uses Git to track changes and automatically deploys them to the server when changes are detected. I have it set up to use GitHub.

Suppose I can handle deploys on another Git service or even from my local laptop. In that case, I can switch away from GitHub for this account.

Still, when it’s just you and the repository, you probably don’t need several of GitHub’s features or even GitHub itself. Just a remote Git repo, and there’s plenty of other options out there.

The Discovery page on the Bear blogging platform is a great way to discover new and popular content. I would love to see a similar feature on Micro.blog.

I’m not big on measuring posts by likes or whatever you want to call it, but it is one of the few ways to measure popular content.

I started building my own MVC framework using Ruby this week. It’s intended to be a fun project to explore how a framework works internally and to see how far I can get building something that can power a few small web applications.

A brief set of headphones

I’ve been a bit of a die-hard Anker fan for the last few years. I’ve spent my fair share on chargers from them over the previous few years, and I can’t fault them one bit. The earliest ones we bought are still working and are used to power the LEDs for a few of our Lego Star Wars dioramas.

The same goes for their headphones. I got a pair of Anker Soundcore Life 2 headphones for my 40th birthday. It was only this summer that I finally had to retire them. I replaced the ear pads for them only once during the entire time I owned them. I couldn’t fault them. The long battery life, quick charging, and noise-cancelling feature were beneficial for my daily influx of calls and meetings at work.

With my headphones on the blip during the summer, I started borrowing my youngest’s headphones, Anker Q20i headphones, but I knew the day would come when I would need to get a set for myself.

Last week I purchased a pair of Sony WH-CH520 headphones. All the usual stuff. Bluetooth, multi-device function and over-the-ear style. I can’t wear an in-ear set like AirPods all day. It’s too uncomfortable.

Sound quality is good, and they’re easy to connect to different devices. The multi-device function was a bit finicky and required installing the app, but once set up, it was easy to switch between devices. I have noticed the audio stutters upon initial connection and for a few minutes after it.

I have reservations about the physical side of the headphones. They are very light and don’t feel as solid as my Soundcore headphones or even the Q20i headphones. Also, the ear pads are a lot smaller than Anker’s ear pads, which means they sit on my ears as opposed to over my ears like the Anker ones do. After a couple of hours of use, they are very uncomfortable to wear.

I’ve got mixed impressions about the headphones, so I have decided to return them. The stuttering audio is the main issue with the uncomfortable feeling when wearing them being the other. Yes, the Sony headphones were at the cheaper side of the scale and I do believe you get what you pay for, but the Anker headphones are on a similar price and I do find them more comfortable and the audio has always been faultless.

Just need to wait for the refund and then re-order the Anker ones, so for the moment, I’ll still be borrowing my youngest’s headphones.

Learning with React and single-page HTML applications

As part of my plan to learn React, I’ve been building single-page HTML applications that use local storage to persist any information between sessions. As a start, I built a roulette wheel for our team at work to determine who goes first during stand-up each morning.

I have since moved on and created applications for a technical log, a start page, and I have a few other ideas brewing. The persistence to local storage in the browser is common between all the applications, but I’m trying to build different ways to interact with these applications so that I can learn more about React.

Next week, I hope to develop a replacement for the Excel spreadsheet we use to track our OKR goals at work. The Excel spreadsheet is functional and certainly doesn’t win any prizes for looks. I thought this would be a good learning project to tackle in React, as the formulas we use would enable the page to be more dynamic.

I’ve been trying to find a cheap way to host an HTML page with a bit of React on it that can be deployed just by uploading it with an existing service I use. The React didn’t play too well with Micro.blog’s single page feature. I have a DigitalOcean account, so I uploaded it there for the moment.

I have a collection of posts in my blog’s archives that mostly contain links with a single image and a comment. A lot of the links for these posts are now returning 404s. I’m tempted to just bring all the images together in a single Micro.blog collection and remove the posts.

Prototype finished for my Micro.blog theme

I’m pretty happy with the Hugo copy of my own Micro.blog theme I’ve been working on for the last couple of days. It will have a few customisation options for colour scheme and fonts.

I’ve been trying to clone the blank theme when creating this new theme in Micro.blog, but it appears to be using the Sumo theme from my current blog instead of pulling the blank theme from GitHub.

Hopefully by the weekend, I’ll have a working version for others to use.

I didn’t realise that running a different blog under the same account on Micro.blog still posts to the timeline under your account. I was kind of hoping it didn’t. Thought it might have been a way to work on my blog theme using a different blog.

A first pass at my own Micro.blog theme. I have more CSS than I actually wanted, but making it readable with just enough CSS was the goal for today. I now need to determine what to add or edit to enable it to work with Micro.blog, so I can upload it.

A blog page features posts about technology, coding, and espresso, along with a header and navigation links.

First steps with my new Micro.blog theme

In my foolish quest to build my own Micro.blog theme, I spent some of the evening learning about Hugo and how its theming works. It is not dissimilar to Jekyll in many respects, and I think I have enough to start working on my own theme.

Initially, I’m going with a really basic theme—no colours, frameworks, or complex layouts—just a single column with basic text elements. This will allow me to see what the minimum I can get away with for my theme is. That’s the easy part.

The hard part—it’s definitely not one of my strengths—is putting together a design for a second theme. Web design is not my strong point.

I want to make something that isn’t wildly unique, but has enough to stand out from the rest of the Micro.blog themes. I might let this one simmer away for a few days and check out a few other blogs I like and see what can be done.

This weekend though, the plan is just to have a basic working theme.

Learning through development tools

Today, during a major debugging session with a Rails application, I wanted to condense what was in the logs between two consecutive requests to understand what was happening. It was too much to read through everything. I just needed to scan through all these requests and flag whether they were successful or not.

So today, rather than scribbling down another Ruby script, which would have been easy, I started a log analyser using Rust. It’s early days for the script, but it already compiles a list of endpoints, which is a good start.

It’s a reminder to myself that there are plenty of development tools and aids I can build using a variety of languages and frameworks. And if I only use that tool a few times, that’s okay, too. At least I will have learned something.

I updated my Rails app’s start script to launch Docker containers for PostgreSQL and Redis. I also added a kill script to stop them when I’m done coding. I hope this helps my struggling laptop battery by properly shutting down services.

It’s a quiet morning with some code and coffee. I am working through an issue with a product of mine using forms, Rails, and Sidekiq. I’m happy to put the time into this over the weekend, as it’s a core part of the product and will be reused heavily in the future.

I forgot how great the chatbots are in Basecamp. They can respond to commads and can communicate from outside apps.

I see they also allow the ability to use different formatting in their message content. That’s the next thing I think I will try and do. Nicely formatted chatbot messages.

I found myself locked out of a recent GitLab free account I created for a specific purpose. Frustratingly, I have yet to be informed why my account was closed, and there has been no communication from GitLab. I’ve since recreated everything in GitHub. To be locked out without any communication is poor.

Web development like it's 2009

I am in favour of Simon Willison’s “no build frontend” web development approach.

If you’ve found web development frustrating over the past 5-10 years, here’s something that has worked great for me: give yourself permission to avoid any form of frontend build system (so no npm / React / TypeScript / JSX / Babel / Vite / Tailwind etc) and code in HTML and JavaScript like it’s 2009.

I’ve been building Writeabout in Sinatra, and I’ve reached the point where I need to add a bit of JavaScript to allow the changing of the light, dark, and system themes. I already have these implemented in the original Rails code as Stimulus controllers, but I’m sure it won’t be too much work to rewrite them as plain old JavaScript.

I don’t have a favourable opinion of frontend web development. I’ve always found it unnecessarily complicated and constantly changing, but rarely for the better. For the last few years, I’ve used TailwindCSS because its build step in Rails applications is minimal—the productivity gains outweigh the added complexity. Beyond small learning projects, I’ve resisted adopting anything like React or TypeScript.

That’s the 2nd time in a matter of weeks I’ve used a YAML file as a data source instead of going to straight to creating a table in the database.

The YAML file bridges that gap nicely of not needing the database quite yet, but we do need to store some structured data.

That’s pretty much most of my repositories moved from GitHub to sourcehut.

Writeabout is still on GitHub but is undergoing a Sinatra rewrite. Once that’s complete, I’ll mark the one on GitHub as archived and publicise the new one on Sourcehut.

More of my projects will gradually appear on sourcehut.

Finding the Right Git Platform for Personal Projects

I migrated one of my two GitHub accounts to GitLab a few weeks ago. The move itself had nothing to do with missing features or pricing. It was primarily to try out something else that wasn’t GitHub.

At my job, I spend most of my days on GitHub. When working on my little projects, stepping back into GitHub feels like I am back at work again. With the lines blurring between work and personal coding, I started to think that when I spent time coding on my projects, it still felt like “work”.

So, for one GitHub account, I migrated that account to GitLab. It’s been a great move, and despite being on GitLab’s free tier, I can still match feature for feature what I was paying GitHub for. And when it comes to working with that account, I don’t feel like I am back at my desk.

After the move, I considered moving my other private repositories to GitLab, but GitLab would be more than I needed. It has many great tools for maintaining code bases, but I don’t need them for smaller projects.

I needed something other than GitHub or GitLab.

Enter SourceHut, created by Drew DeVault. SourceHut is a collection of open-source development tools that are a good alternative to GitHub and GitLab.

I’ve been considering using SourceHut for a while, but I have only started seriously considering it in the last couple of weeks.

Today, I created my account and initialised a single repository to get me started. A much more straightforward and basic user interface is strange, but it works. I have become accustomed to the feature-rich user interfaces of GitHub and GitLab. While SourceHut lacks many of the features found in the two bigger platforms, the simplicity of the SourceHut user interface makes it refreshing to use, with just the essentials.

Over the next few weeks, I will migrate more repositories, and then I can demote my GitHub account to be used only for work.

Finally finished my greenhouse project.

A much better use of the space and will be a better environment for growing. We’ve more flowers growing on the deck as well. Be nice when these are in full bloom.

We’ve more plans for next year. A couple of raised beds will be added for vegetables and herbs.

A small glass greenhouse with a black frame is situated on a bed of stones in a backyard garden.

On-course lesson for the boys today with their coach. Turned out to be a cracking day for it despite the downpour this morning.

I’m just acting as caddy for the wee yin. 😂

Three people are playing golf on a wide green course under a partly cloudy sky.

Good GitLab features for devs building on the side

Over the weekend, I spent time getting my GitLab account, working with a single repository, and migrating the CI script from GitHub to GitLab.

The biggest issue was the CI script, and why shouldn’t it be? There’s rarely a “one script fits all” regarding CI scripts. When I started this project, I had issues getting the CI script working in GitHub. After a few pushes on the one branch, I eventually got there. Migrating this script to GitLab’s CI ways was more straightforward than I thought, but I still had a few issues I managed to resolve.

In addition to all the usual source code management goodies that GitLab offers, a few stood out.

Private repositories are available on GitLab’s free tier. Having used GitLab in the past, I already knew this, but it’s refreshing to see that GitLab is sticking with offering this feature on a free tier.

Feature flags are available on GitLab’s free tier. They are a means of configuring how your code behaves by using toggles and checks to ensure that it only carries out certain functionality. I have a number of feature flags in my application, but they are all based on a YML file in the source code. I will be migrating these to GitLab, though, so that I can toggle them without having to deploy any changes to the YML file that controls them.

Error tracking is available on GitLab’s free tier. Previously, I used Sentry for this, but GitLab also uses Sentry under the hood for their own error tracking feature. Yes, I can probably get more information by having a dedicated Sentry account, but at the moment, I am just checking to see if users raise any errors in the application.

For developers building on the side, these features on GitLab’s free tier are of great value and definitely swing my vote from GitHub to GitLab. Over the next few weeks, I hope to migrate the feature flags over, use more of GitLab’s platform, and see what it can help me with.

Juggling some apps again

I’ve been juggling several app changes over the past few weeks.

Gone are the GitHub and Copilot accounts and subscriptions I used to build a product. I’ve replaced them with a GitLab account on the free tier. The GitLab free tier offers quite a lot compared to GitHub, but there are downsides, like no security alerts. However, I can manage for the moment. I’m still not sold on the GitLab Duo subscription, but I’ve covered that with the following subscription change.

I upgraded my ChatGPT account to the Plus plan over the last month, and I think I will keep it for the immediate future. It’s not quite as integrated as Copilot when it comes to assisting with coding, but it works well for diagnosing issues in my code when needed. I also use it more when searching the web for something specific. I still use DuckDuckGo for general searches that I can filter by the most relevant results, but I use ChatGPT for more targeted searches.

Finally, after a few months with Ulysses, I’m just not using it how I thought I would, so I downloaded Bear again and started moving some of my notes over to that to start using it again. Bear feels less formal than Ulysses, which is why I don’t think Ulysses is sticking for me.

We’ll see how the change goes over the next few weeks.

Hats off to DNSimple’s contact form for support. It includes a dropdown of accounts you are logged into. Being able to select an account makes contacting them much easier and narrows down the location of the reported issue. This is a simple but effective way to improve customer feedback.

My initial experience with Kamal hasn’t been great. At the start of the year, I spent a few days at best with it, but I kept running into issues, which eventually got forgotten. I’m restarting again with Kamal, as I feel it could be of real benefit in hosting my own apps.

Picked up a couple more of these notebooks from Atoms to Astronauts.

Good quality paper and the covers are superb. Picked up the astronomy and geology notebooks this time.

They’re catching on in the Lang household as my youngest asked for a couple as well.

Two science-themed notebooks, one featuring a geological design and the other with planetary orbits, are titled "Atoms to Astronauts Science Notebooks."

Last year, I relocated my office to the back of our home with a south-facing window. I now use light themes more frequently when the sun is bright during the day. The Noctis set of themes for VS Code is ideal if you’re looking for light and dark themes in a single extension. Recommended.

The wee guy wanted nachos for dinner. Combine that with some salsa and guacamole, and that’s a pretty good dinner. Definitely one of my favourites.

A dish of cheesy nachos with ground beef is accompanied by bowls of guacamole and fresh salsa on a textured placemat.

Cracked my laptop cover so put the replacement cover I have on.

On the downside I lose all the stickers I had on the old one. On the upside I get to sticker up the new one!

A green laptop cover with various tech-themed stickers is placed on a wooden surface, next to a closed blue laptop.

My quarterly Field Notes subscription arrived today. This “Vintage” edition is rather regal, with a deep red cover and gold ink.

As always, my wife quickly nabbed the Field Notes pen for herself. She keeps a little stash of them for work. 🙂

Several Field Notes memo books featuring vintage designs are placed on a wooden surface.

Side-projects have taken a back seat over the next couple of weeks with the run up to Christmas. Looking forward to getting back to these over the holidays.

I downloaded Glass after seeing it mentioned in my Micro.blog timeline. I like what I see so far, so I will give it a go over the next few weeks and see if it’s something I want to keep going long-term. I do enjoy taking pictures and posting them online.

Trying out TickTick

For the last weeks, I’ve been back to using bullet journaling. It works well, especially for my day job, for which I use a separate notebook. For everything else outside of work, though, it’s been working okay, but I feel I still need something digital-based for long-running projects.

Keeping a long list of tasks in a notebook is fine if you have one or two long-running projects, but I have a couple of web applications to keep track of and a growing project that now requires multiple lists.

I’ve tried almost every known task manager, and none of them has worked. Every task manager is different, so they usually don’t work out for me for various reasons. One task manager I haven’t tried though is TickTick.

First impressions are good. Tasks can be put into lists and even folders. They can also be tagged so that they can be filtered. A couple of extras I didn’t expect to see are the baked-in Pomodoro timer, an excellent addition to a task manager, and the ability to track habits.

It’s still early days, but it’s clear to me now that I need a digital task manager to keep track of these long-running projects. We’ll see how TickTick works out in the long term.

Walking the path with TypeScript

This week, I spent most of my free time adding an NPC character to my ThreeJS game and have them walk towards me each time I move my own character.

I’m using the A* algorithm. Each time I move my own character, the NPC finds the shortest path to my character using this algorithm and then moves one step to my character.

As I’m already using a two-dimensional array to represent the game’s board, using the algorithm on this array helped me get it working. What I wasn’t prepared for was the amount of code needed to implement the algorithm and move the NPC across the board. Still, I managed to learn a thing or two more about TypeScript.

What’s next for my game? I’m not sure yet. There are so many things that I could be doing, such as adding attributes for my characters, both PC and NPC characters, and adding more elements for the map, like ancient ruins. My youngest is also designing skins for the playing character and the NPC, so they’re more than just coloured rectangles on the board.

I had more fun with ThreeJS tonight. I increased the size of the board and added some trees and boulders to it. I am now at a point where I will focus more on building a representation of the board as an object to start moving my character around the board.

A screenshot of a green tiled board with trees and rocks on the board against a black background.

I continued to make some progress with ThreeJS and TypeScript tonight. I managed to draw a tiled board, move it around the screen with the mouse and be able to change my field of view with a slider.

A screenshot of a green tiled board on a black background.

A couple of web development projects for the winter

Now that the golf season is down to me and the boys only getting out at the weekend, I can start spending more time on a few side projects. There are so many things I would like to learn, but I figure just limiting myself to a couple won’t take up too much of my time.

So, from now to March, I’ll spend a few hours each week on the following.

  • Learning more about Rails 8 and KamalDailymuse and Writeabout will each get a bump to Rails 8. Only Writeabout, though, will get the Kamal) treatment to begin with. When I have gained enough knowledge about Kamal, I’ll also look to deploy Dailymuse with Kamal.
  • Learn TypeScript and ThreeJS — A work colleague showed me a hobby project he is working on using ThreeJS. It’s the perfect excuse to learn TypeScript and build something for the web that isn’t just another web application.

Molly White reminds us that we can have a different web.

Though we now face a new challenge as the dominance of the massive walled gardens has become overwhelming, we have tools in our arsenal: the memories of once was, and the creativity of far more people than ever before, who entered the digital expanse but have grown disillusioned with the business moguls controlling life within the walls.

We can have a different web

After chatting with a colleague at work about a little development project he’s been working on, I now find myself messing about with ThreeJS and TypeScript. I managed to get the ThreeJS demo code working to show a spinning cube. It’s a start. The next step is to get it working in TypeScript.

I got up early this morning, and instead of starting out with some writing of the Ruby code, I opened my notes app and started writing a blog post for today. Nothing major, just an observation for tomorrow. It’s queued up and ready to be published later today. Feels good.

Cal Newport with some advice on dealing with election day anxiety.

Here I have a suggestion that I think could be healing for all points of the political spectrum: use the stress of this election to be the final push needed to step away from the exhausting digital chatter that’s been dominating your brain.

After You Vote: Unplug

Although I am not voting, I am slightly anxious about what the electoral map will look like by tomorrow. With the timezone difference though, I won’t have any issues following Cal’s advice. By 10pm tonight I will likely be out for the count.

Settling into Stimulus once again

Over the last few days, I’ve been writing more JavaScript than usual. The reason? I am using Stimulus a lot more in one of my Rails projects.

Enhancing the functionality of my Rails application with some HTML markup and a JavaScript controller is good, as Stimulus has a small learning curve and integrates well with Rails.

As I add more Stimulus to the application, though, I am learning some of its best practices the hard way. One criticism I have of my own controllers is that they are very page-specific. That’s fine for now, as the application is relatively small. Still, I plan to break these controllers into more generic behaviours that can be re-used more easily across the application in the future.

I’m always hesitant about using AI tools while coding, but I have found one good use for AI while coding: naming things. I’m terrible at naming things.

This week, though, I’ve been using Copilot to see if I can improve on the names of the objects and methods I have. I’ve had good results so far.

Big yin all set for today’s Junior Club Championship at Fereneze Golf Club. Weather is looking good and a lot better than last years downpour.

A man in a navy shirt and grey shorts is putting on a golf green surrounded by trees and grassy hills.

Happy birthday, Drew! I hope you had a good day and enjoyed all your birthday goodies.

Starting the day with a stack of presents, then a round of golf with your brother, dinner at the golf club and finally some cake. Definitely a good day.

A woman and a young boy are celebrating with a lit birthday cake adorned with colorful decorations on a red tray, standing in front of a gray couch and framed artwork.

I’m tempted to go all in with Micro.blog again. It has enough features for me to consider ditching my own website, as well as a few new themes that are both nice to look at and customisable.

Went to the Beyond Van Gogh show at the SEC in Glasgow tonight.

A truly immersive experience with Van Gogh’s art displayed on all four walls.

We must have sat there for about an hour watching a few iterations of the show.

Rounded off our week at St Andrews with a last minute round at the Fairmont Torrance course for the boys. Both had great scores going round.

Took the wee guy down to the Balgove course in St Andrews.

He had a great time and thoroughly enjoyed getting to hit his irons and wedges off the tee for a wee change.

Thanks to St Andrews local, Ben, for the lift back as well!

A boy putting out on a golf green with a cloudy sky in the background.

Start of a week long holiday for us up at St Andrews while Ethan plays a competition up the road at Tayport. Got a nice Airbnb in St Andrews. A couple of days exploring planned.

I have a second Github account that I wish to use with co-pilot in VS Code, but it seems that VS Code does not allow multiple accounts when using this extension. Considering a second text editor now as the only option to do this. Does anyone know if Nova has extensions for GitHub and co-pilot?

Back at Blairgowrie for Ethan to compete in the second round of the SGF Foundations Trophy. He’s tied for second place, so he’s looking good to qualify for tomorrow’s final two rounds.

A lavender shrub with a golf course in the background.

Spent the day updating a Bash script at work for one of our deployment processes. A nice change of pace from what I’ve been doing through the week, but also a great chance to learn something a bit different from the regular list of programming languages I use.

Back to mid-week golf with the boys! Big yin is studying for an exam tomorrow so it’s just me and the wee guy out on the course tonight.

Boy playing golf with trees in the background.

This is a good reminder by Nicholas Bate of the power of a list.

The list remains the most powerful task management tool: a simple, accessible and visible flight deck. One thing: use it not only to capture what you have to do but also what you wish to do. Don’t simply be reactive; be proactive.

Nicholas Bate

Given the increasing use of portrait mode as dictated by mobile phone screens, I’m curious if I’ll ever get to the point in my web development career where I’ll have my desktop screens in portrait mode.

Last night, I started adding a blog to my website. Managed to get a couple of test posts rendered.

It’s nothing fancy, just a bunch of markdown files picked up by Rails and rendered as HTML using RedCarpet and Tailwind Typography. Will polish it up tonight and start adding the RSS feed.

I think I would like to see more options available when composing posts in Micro.blog. As a default I would like the ability to always show the categories and the cross-posting options. Most of the time I’ll cross-post everything everywhere, but not always.

Code and coffee session working on my new website this morning was something of a success. Added new jobs to import starred Github repos and liked Instapaper articles to my bookmarks collection. I also added my Micro.blog posts to the homepage.

Got the bed of veggies going for the roast, potatoes, carrots and parsnips are peeled and ready, Yorkshire pudding mix is chilling in the fridge, some tunes on in the background and the coffee is brewing.

Just another chill Sunday afternoon.

Cracking afternoon of golf with the wee guy.

Still blue skies, the slightest hint of a nip in the air, and the changing colours on the trees.

Love golfing during this time of year.

Can anyone recommend some resources on getting setup with Obsidian? I’m thinking plugins, themes and organising it. It will primarily be a place for me to organise some notes and perhaps some writing.

Cracking day at Edinburgh Castle with the family! Still a great place to visit. I would have liked less crowds there to get a chance to get a few more interesting pictures, but can’t argue with its popularity.

📸 day 23 / a day in the life #mbsept

The big yin’s office for the day as he prepares for the Scottish Junior Team Championship tomorrow.

Hush - A new content-blocking extension for Safari on iOS and Mac.

Unlike some blockers, Hush has absolutely no access to your browser habits or passwords. Nor does it track behavior or collect crash reports - nothing leaves your device.

📸 day 11 / retrospect #mbsept

In retrospect, I could have saved myself a bunch of work and named my models better when I built this Rails application.

Finally, I resolved a wee build issue with my custom theme changes here on Micro.blog. Switching the Hugo version down to 0.91 did the trick. Regular posting can commence again!

I went out for a few holes with the wee guy this afternoon. He played well, but he still needs to work on alignment. He’s getting more and more consistent each time he goes out which is good. Love this time of year for golf. Cooler days, and the trees are starting to change colour.

Cracking night for nine holes with the wee yin, and he beat his personal best again. I love seeing him enjoying the golf. I can’t argue with the views either!

I played a few holes tonight with the big yin. Neither of us played particularly great, but good to be out in the sunshine.

A good practice round for Ethan playing for Fereneze Golf Club at the Home Nations competition at Cheshire. Blue skies overhead, but muddy underfoot.

A Mother’s Day request from Jennifer, chilli for dinner with all her usual favourite sides. Some rice, chips, guacamole, and sour cream. I’m sure she’ll be happy with that.

Another cold afternoon walk to break up the day. It won’t be long until spring, and we will see the green leaves on the trees again. I can’t wait.

The weather is getting better each week, so we’re finding ourselves at the golf a bit more often. The boys had a good practice round today.

Minilog 15 complete. Using a two-page spread for the weekends condenses how many pages I need for a month. This month’s almost fitted in a single notebook.

Good to get the boys back in the studio this morning. A nice shot from Drew, sticking it to two feet from 75 yards out.

I can’t wait for the weather to pick up again so we can all get back on the course again.

My new Air arrived to replace my ageing Pro. Ten years is a long time to have a laptop. I definitely had my money’s worth from the Pro. Lots of setup to do over the next couple of days.

I have been wrestling with the Vips library for Ruby for most of the afternoon. I am trying to get multiple PNG files with alpha channels to layer on top of each other to produce a final image. So far, my only success has been combining a single PNG file with a JPG.

Patrick Rhone’s plan for measuring his days in the future is definitely something I can get on board with.

One day, I hope not to measure my days in minutes or hours, but in miles walked and pages read.

Patrick Rhone

And on that note I finished a book this morning and just finished an hour walk with Jennifer through the trees where we live. A great day so far by any measure.

Winter ready

The boys pitched in this afternoon and tidied up the back garden. Leaves were raked away, patio furniture cleaned down and stored away, golf nets and mats put away, and we topped up the bird feeder.

We then got the Christmas tree and decorations out and put them up all around the house. It’s nice having to look forward to over the next few weeks.

The Lang household is ready for winter.

Better off without Twitter?

There is a lot of online chat about why losing Twitter might be okay.

I’ve read a few threads on Reddit, Micro.blog and Twitter itself that we would be better off without Twitter. It’s a convincing argument.

Twitter has become different from its early days of tweeting by text with 140 characters. The platform has grown into a platform for the world. It broadcasts news updates, provides coverage of sporting events and scores, updates on critical political events, and acts as a marketing platform for thousands of organisations and millions of people.

In the last few years, though, Twitter has become something else. A battleground. A place where discussions can often fall into threads of trading insults at each other. A place where people, governments and organisations can pedal lies with minimal accountability. A place where people can hide behind their avatars and threaten others without being held accountable. Twitter has tried to deal with these negative experiences over the years with content moderation and enforcing the platform’s rules, but it still happens.

I might be painting Twitter as a terrible place, but there are positives to Twitter. Although I’m not a frequent tweeter, the content from the people I follow on Twitter is of value.

I’m under no doubt that many others are happy with their Twitter experience. They follow the accounts they want to, scroll through their timelines and share and interact with others on the platform as they want to. If the world is better off without Twitter, will these people be better off without it too?

Regular bloggers and those who know their way about the web will largely agree that the world is better off without Twitter. They can continue writing and posting from the platforms they enjoy using. What about the people who genuinely want the ease of Twitter and what it brings to them?

If Twitter were to disappear, I’m sure I would find alternative means of following others through different platforms and means. What about those who are not so Internet savvy? They might need help finding an alternative means of following others, which leads me to think that we’re not better off without Twitter. Well, not at the moment. The web is still an excellent platform, and this could change.

What is the sign of a good developer’s blog? An RSS feed, of course! Good to see one on the 37signals development blog. Just two articles in, and I’m already hooked.

Not quite fully on DigitalOcean

Over the last few weeks, I’ve been migrating several Rails applications to Hatchbox. I’ve still got a couple of applications to go. Still, one last thing I wanted to do was migrate my blog over to DigitalOcean’s Apps platform.

I’ve been using Render to host my blog for the last few months. While it’s free, and I have been okay with using it, I’ve wanted to minimize my digital footprint of the services I use. Over the weekend, I spent almost eight hours trying to get my blog to compile and run on DigitalOcean.

Sadly, my blog wouldn’t compile due to the Tailwind integration I am using. An error with the Jekyll PostCSS gem kept breaking the building of the website. I’m still digging into the actual issue, but it is getting parked until I have more time to look into it.

I started another minilog yesterday.

That’s 12 notebooks mostly completed over the last year. I say mostly completed, as there’s a couple of notebooks in there that I didn’t finish. It’s been a good daily exercise over the last year and I’m going to continue it through to next year. Also, it gives me something to do with my Field Notes subscription!

I’ll also start sharing a few pages from them again as they are completed.

Spent most of the afternoon finalising some changes for my Rails app for posting to my Jekyll blog. It needs a few more tweaks before I open source the application, but it now allows me to log in on multiple devices, which means you might see more of my posts soon.

With Ethan playing the last round of a competition at Longniddry Golf Club today, Jen, Drew, and I decided to wander around the surrounding area.

We had already planned to take a walk along Longniddry Bents. Despite the usual grey weather that Scotland is famous for, the walk along the beach was great. We then headed into Cockenzie and Port Seton, but with little to do there, we had a look to see what was nearby.

We decided to head there because Rosslyn Chapel was just a half hour away. We were a few minutes late for the tour’s start, which allowed us to take some great pictures of the outside of the chapel while everyone was inside getting the guided tour. The inside of the chapel was just as beautiful as the outside. Particularly the Apprentice Pillar and the many carvings on the pillars and arches inside the chapel.

All in all, it was a pretty great day.

I am trying out something new this morning. I built a small Rails app that streamlines the posting process to my blog. It automates most of the process and only requires the post content itself. If it’s working, you should see this post!

Lego Marvel Venom with Light Kit

A couple of weeks ago Drew bought this Lego Marvel Venom set. We decided to try out the additional light kit for it from Light My Bricks.

I have to say, the final result looks pretty good. The LEDs and wires fitted into the build nicely, although the green LEDs that go in behind the Venom’s teeth were a bit of a pain to fit and to stay in place.

Unbeknownst to Drew, he’s got a another light kit heading his way for Christmas which will be for the Lego DC Batman head we’ve bought him. I’m looking forward to seeing how that one turns out.

Astronomy Photographer of the Year 2022

I’m a sucker for all things space, even more so when it comes to anything that allows us to see what’s in space. Hence the Astronomy Photographer of the Year competition is something I look forward to every year.

The Andromeda galaxy captured by Yang Hanwen and Zhou Zezhen which won Young Astronomy Photographer of the Year, is one of my favourites of this year’s winners.

The overall winner though was Gerlad Rhemann’s image of Comet Leonard which was taken on Christmas Day of last year. It captures the point when a piece of the comet’s tail becomes seperated due to high velocity solar particles.

Enjoying web development once more

Tonight, I’ve been building HTML templates with Tailwind to integrate them into a CMS of sorts using Rails. Is it a product? No, it’s just me hacking about on a wee Rails app and trying to brush up my skills once more. The last time I genuinely enjoyed doing this was a good couple of years ago.

So what prompted this change?

Well, the main reason is that I’m enjoying my job now. It’s full-time, but I’m also fully remote, so cutting out the commute has been a big win. There’s something to be said about working from home. It definitely suits me better than being in an office. I don’t mind being in an office environment, but the distractions can put your focus off a bit, depending on where you work. Working from home means, I can get my head down and get on with the work.

I’m using Ruby on Rails again. It’s not the most recent version, but I’ll take working with any version of Rails over working with just about anything else at the moment.

While working remotely, I am in a close-knit team that regularly checks with each other throughout the day. Although being remote has its benefits, you do need some contact with others throughout the day. Although Slack isn’t the ideal medium for this as it is pretty distracting, being able to meet and discuss with your team members regularly throughout the day breaks up the day nicely.

As a result, I’m finding myself reaching for the laptop more at night and hacking on Rails or Laravel apps. Now, if you don’t mind, I need to finish this little bit of code before turning in for the night.

My oldest son Ethan turns 16 today.

It still only feels like yesterday when we first brought him home from the hospital. A few highlights over those 16 years include his first nativity at nursery, his first day at school, becoming a big brother, his first holy communion, and his first junior club championship win, and many more great stories that we’ve captured. Now, he’s the tallest in the house and definitely the biggest hitter in the family when it comes to golf.

It will definitely be interesting to see what the next 16 years bring.

Happy birthday pal!

My youngest son, Drew, turned 10 years old today and boy did he have a great day.

A few rounds of laser tag ensured that he and his brother reminded us that the Fortnite skills on the PlayStation are transferrable to other areas in life. I wasn’t expecting to run around that match, but it was great fun.

After that it was back to his aunt’s house for cake and big birthday spread with a few presents to open.

It as great seeing the kids together once again and it’s been so long since they’ve all been together. A good chance then to re-create one of our favourite pictures of the kids all together on the front step.

That rounded off a truly great day for Drew. Happy birthday pal!

An unexpected perk of this trip to Canada was being able to play Glen Abbey golf course, which has been a host of the RBC Canadian Open for a number of years. We’ve always visited this course as spectators to the tournament, but being able to play it was an opportunity me and Ethan couldn’t pass up.

A strange course, as it features a handful of holes that are located down a ravine which made for a very different experience to other golf course we’ve played.

A fantastic day with Ethan and we both played pretty well considering it was out first time on the course.

Niagara Falls trip

All of us headed down to Niagara Falls for the day to enjoy some of the sights down there. The first thing we all did was the boat trip to see the falls up close. We haven’t done this since Drew was born so it was nice for him to experience this with all of us. After a wander round Clifton Hill, we grabbed some pizza and did the Sky Wheel to take in some great views of the falls.

Playing Hidden Lake again

Me and Ethan played Hidden Lake again today. We stuck with what we liked and played the new course. We also got paired with a couple of locals who kept us right and gave us a few pointers to deals on local courses. Nice to see that the food is still great at Hidden Lake as well. Highly recommend the smash burgers!

A bug or a lack of understanding?

This morning I finally resovled an issue with a Rails application of mine.

After a couple of weeks, of getting an hour every other night to resovle this, I finally understood what the problem was and how it could be fixed. A bug? Not necessarily, it was more of a lack of understanding on my part. The issue is fixed now and I can now crack on with other elements of the application.

Deer on the 11th tee

There I was waiting on the final match tonight when I noticed a nice bit of light through the trees from the 11th tee. It wasn’t until I got home and I realised I captured a deer almost in the middle of the shot.

Signed up for the free plan on MDN Plus this morning. I’m not convinced that I need either of the paid plans yet, but I might change my mind after a few weeks of using it.

How I am using different tools and themes to seperate my work from my home.

It’s always good to use good tools for the job. In my case, I’m back to using a Macbook Pro and macOS as my development machine and operating system. It’s also great that I am working with Ruby and Rails once again.

The downside to using the tools is that they are the same tools I use to write web applications in my spare time. I enjoy hacking on ideas for web applications and using them for my own use, but I’ve noticed that the lines have started to blur when I use other tools.

Take for instance, source code management. I’m now using the same source code management tool for both work and my own projects. With source code management being a big part of my workday, I don’t enjoy using it the same way now for my own projects.

If I’m to continue enjoying hacking on my code after then, I want it to be an enjoyable experience. While I have no complaints about my job, it’s not a part of the day I want reminded of when it’s the evening or the weekend. I’ve been exploring different options for source code management over the last couple of weeks. I have decided to try out Gitlab for this over the next few months. It’s free, has similar processes to my current source code management tool, and integrates well with the hosting company I use for my web apps.

I’m also looking into other ways of using different tools or using the same tools differently. iTerm and Visual Studio Code are two tools that I use both at work and at home but finding alternatives to these is tricky when I use these tools really well. So instead of changing these tools to something else, I’m just changing how these tools look.

For iTerm, I have different looking terminals for work and home. It’s not much of a change, but the look definitely changes the dynamic of being at work and being at home.

I’ve also done the same with Visual Studio Code. I’m not going to look for a new text editor when I already use this quite proficiently. Instead, I am using the toggle extension in Visual Studio Code to change the theme and font settings for when I am at work and when I am home. A simple keyboard shortcut is now all it takes for me to change my interface from work to home.

Setting these boundaries between these contexts is essential as it creates a space for both. While I use many of the same tools, I do like to feel that I am in the correct mindset at the right time. That means using the appropriate tools for each and being able to distinguish between each. If the same tool has to be used for both, then a simple change of how that tool looks is all it takes for me to determine which context I am in.

Are we on the verge of a new surge in blogs?

Anil Dash writes about the recent resurgence of the web. There are definitely many reasons why this is happening. Still, a key one for me is the growth of tools that make building websites easier for everyone.

While the core technology of the web is decades old, the tools that help make it and run have been quietly evolving into something extraordinary in the last few years, too. There’s a flourishing of powerful new frameworks that make it simpler than ever to build flexible, responsive, useful sites. New hosting platforms let those sites be deployed and delivered faster and more reliably than ever. And you can build one of these sites in literally under a minute, then collaborate with people anywhere in the world to iterate on making the site better.

A Web Renaissance by Anil Dash

I might be pre-empting the return of the glory days of the web when blogs and RSS feeds were everywhere. As good as that would be, I don’t think we’ll ever return to those days. I do hope though, that we are seeing a return to the web as an open platform for people to build and share content.

Almost finished the new site design. Deployed some changes this morning to make it easier to read on mobile devices. There are still a few snagging points that will be resolved over the next few days, but I’m really pleased with the end result.

I need to use checklists more often

This morning I put the final touches on a Rails application that I planned to move from DigitalOcean to Render whilst upgrading it from Rails 6 to Rails 7. The actual change of platforms wasn’t too much of a problem, but the upgrade to Rails 7, and the third one that I have done, still presented me with a few issues. These problems were not too difficult to fix, and after an hour or minor tweaks, I managed to get the application up and running on Rails 7.

With this being the third Rails 7 upgrade I have done, I’m gradually building up a checklist that uses the Rails document as a base and includes a few other steps when it comes to moving away from Webpacker as well. This checklist will prove invaluable for another couple of Rails 7 upgrades that I plan to do over the next couple of weeks.

With a checklist, you know where you are and the steps you need to take. It allows me to do these upgrades in sections as well, so that I can do a few steps, take a break and then pick up where I left off, knowing what the last step was and what the next step will be. It’s a wonder I don’t use checklists a bit more. I know a few tasks are coming up over the next few months where a couple of checklists will be invaluable once again.

More checklists, please.

Why I'm on the slow uptake with Todoist

I’ve been trying to get more out of my Todoist setup recently by using labels to tag more of the tasks that I have there. It’s similar to the previous setup when I used Todoist a few years ago. I have labels for the duration of the task, labels for the context of the task, and some GitHub style labels that provide some further context to tasks related to building web applications.

It’s working well so far, and now the next step is to use Todoist’s filters to pull together some tasks from various projects. It’s at this point where I fell away from Todoist last time. I ended up with far too many filters that split all my tasks into multiple lists that were too hard to maintain.

This time I have vowed that things will be different. This time I am starting with just a single filter of minor tasks that I can pick off through the week.Most of my tasks are scheduled throughout the week. So there’s no need to apply additional filters to these tasks. It will get done on the scheduled date and time. For those minor tasks that can take me up to 15 minutes, I’ve decided to allow them to sit in Todoist and get done when I need to do them. With them spread over several projects, the new filter will bring them together under one view.

I’ve been intentionally slow on my uptake with Todoist this time. It can become overwhelming to try and use everything from the get-go. However, this time, I decided to pace myself and try out different parts of Todoist when I needed to. It is working well so far.

Progress update for my side-projects

At the start of the year, I chose “build” as my word for the year. The single word strategy is the idea that you choose a word that will direct what you do for the year. Having not done this for a couple of years I wanted to go back to doing this so that I could at least focus on something for the year.

It’s mid-way through January and now seems as good as any to review what I’ve been building over the last two weeks and what I will be building in the near future.

My Twitter List Banner Maker (a mouthful I know) is now public on my GitHub profile. It’s far from complete but it’s working and with a few tweaks here and there can be used by others for their own lists. While building this I did learn a couple of things. Mainly, authentication with the new Twitter API, and also I improved my knowledge of RMagick by learning how to merge images together to change how they look.

In the background, there’s also a number of other things I’ve been building up.

  • I am continuing to post to my blog during the weekdays to build an audience up again. I’m not looking to build an audience of thousands, just more people that like what I am writing.
  • I am building a single document that will act as my playbook if you like for the day. A template for the day if you like. It’s been working well for me but it still needs some refining.

Looking ahead, over the next few weeks I am going to start building an application using the Blitz.js framework. A fellow developer from Glasgow put me onto this framework a week ago and I’m intrigued by the comparison to Rails but also that it’s a JavaScript framework and that’s one language that I am keen to build up my knowledge of in 2022.

The application won’t be too complex, a single-page application with a form that does validation and uses an external resource to look up information based on the data provided by the form. It was the simplest idea I could think of at the time and could be done within the next few weeks.

I’ll also continue to tweak the Twitter List Banner Maker so that it formats avatar images into a layout that is determined by the number of members on the list.

That’s enough for this month’s update. The next one will drop in mid-February.

Trying to promote myself a bit more on Github

I’ve been looking at my GitHub profile over the last couple of days. It seems like a graveyard of half-finished or throwaway projects that do not show my best work.

While I’m not in the freelance market and not looking for any roles soon, I would like my GitHub profile to reflect some of my better work. There are a few things I am going to do from now on to achieve this.

I have a backlog of projects that I’ve used for exploring different parts of Ruby, Rails and JavaScript. These primarily reside on my laptop and be shared for others to use with a bit of a polish. These projects are not, by any means, world-changing ideas. They are just projects that I used to try something out.

What I plan to do, is publish one project/application a month on my GitHub account. I will provide some instructions on running the application and any updates that I may do on it in the future.

I also have several other repositories on GitHub that are quite frankly just sitting there doing nothing, and they’re not worth much, so I’ll delete these from my account. There’s not much sense in having on my account if they’re not doing anything.

This month I’ll be wrapping up and publishing a ruby script that generates an image for your Twitter lists. I’ve been trying to get my head around the Twitter API over the last week and the different authentication methods needed to access other endpoints. After working this out on Wednesday night, I’m now making good progress with this script. I may try this out as a web application later in the year. I’m not sure yet.

That’s the plan anyway for my GitHub profile. 

I'm trying to improve my Twitter lists by making the list header more useful.

I’ve been trying to re-organise my Twitter following into a few different lists, but I wanted to see at a glance who’s on that list, so I put together a Ruby script that gets the profile pic for each user on a list and creates an image from it.

I finally got something working that offers a little bit of flexibility when putting the profile pics on the image. It looks pretty good, but it could still do with some improvements. At the moment, I have to pass in an array of the list member’s usernames for it to work.

Ideally, you would supply the list id on Twitter, and the script would look up the list members on its own. Still, I’m happy with the end result from tonight’s coding session.

You can see the end result on my All things analog Twitter list.

Upgrading my development environment to use the latest stable versions of Ruby and Rails. It’s been a while since I have last done this.

I created up a Rails 7 app last night using the esbuild and Tailwind options. This is definitely a step in the right direction for Rails. Modern tooling for a stable framework. Love it!

Ordered a couple of books from Derek Sivers this morning. I’ve opted for the hardbacks for durability. Nice to have the digital versions included in the price of the physical copies as well.

Build paths first

Michael Wade explains the sidewalk rule and why we should build paths first.
Keeping things simple and action-oriented is difficult and yet if that orientation is not present from the start, it may be too late. Territory may already have been seized and boundaries drawn.

The Sidewalk Rule 
In a recent project, I took the advice of another team when setting up a new project and categorising the work involved based on a template this team used. In doing so, I complicated the project before it even began. I should have built paths first before building sidewalks.

Amazed by GitHub Copilot

I must admit, I am blown away by GitHub's latest technical preview, Copilot, despite not having access to it yet. It's almost like having Stack Overflow, your favourite snippets collection, and a pair programming buddy rolled into one.

There are some concerns being voiced about how this will impact the value of a developer's role.

While GitHub's Copilot will in time automate a fair amount of time in a developer's typical day, it can't account for the complexity involved in solving real-world problems using code. While the snippets generated by Copilot look to solve simple tasks, it's piecing these tasks together by the developer that counts. A developer's role is not just to write code but to understand the code being written. GitHub's Copilot looks to do both by providing generic suggestions that the developer can change to solve the problem they face. 

Given that my brain is not quite as sharp as it once was, I welcome any tool or product that helps me write and understand better code. GitHub's Copilot will definitely help me do both. While it won't make me a 10x developer in the future, it will definitely make me understand and be more proficient with more programming languages. 
 
As nice as the Jumpstart Rails application is and all the feature it includes, I'm finding the new annual pricing a little on the expensive side. I think I may start building my own template and use that for new applications.

Apple back in court in the UK

On top of the court case against Epic, Apple is now facing another court case, this time in the UK. Apple is accused of over-charging people for the apps in their App Store.
The tech company has been accused of deliberately shutting out the competition in the store and forcing people to use its own payment processing system, generating “excessive” profits for itself in the process.

The claim, which is being brought on behalf of potentially millions of Apple users in the UK, has been filed in the competition appeal tribunal and calls for Apple to repay UK customers it says have been overcharged because of the company’s practices, with damages of up to £1.5bn being sought.

It says as many as 19.6 million UK users could be eligible for compensation.

Apple accused of breaking UK competition law by overcharging for apps
As an Apple user of some years now, it's only recently that I've seen the argument against the use of a single App Store that is controlled by Apple.

Is it safer? Undoubtedly. Sometimes though, it might be too safe given the fickle approval process that apps must go through when developers submit new or updated apps to the App Store. Also the 

What would happen though if developers could submit to stores other than Apple's own App Store? Maybe they could even run their own stores. I would definitely think twice before buying an app through an alternative store though.

Master & Commander, a masterpiece

I completely agree with Michael Wade. Master & Commander is a masterpiece.

I never got round to seeing Master & Commander at the cinema. If I'm honest, I don't even remember much of seeing Master & Commander being advertised at all at the time. I do regret not seeing it on the big screen, but at home, maybe with a good set of headphones, it is as close to the cinema experience as I'll ever get.

It's definitely one of my favourite movies of all time.

The not so fun weekend of debugging code problems

It's been a while since I last posted here. I've been getting my head down and working on my CMS product, which has left not much time for blogging.

Over the last few weeks, I've been putting in place a feature that should allow for more flexible page designs so that customers can use a series of widgets to build up pages. It's a three-level form with a page with many sections on it, and each section has a single widget. The thinking is that the sections can be re-ordered regardless of what type of widget it holds. It hasn't been without its issues, though. It took several attempts to get this overall widget design with the page in place.

Thankfully, that part of the feature is done, but I'm still working out some issues with this.

The main issue is when I add a new section and widget to the page, it clears any input elements that I have changed on any other sections widgets on that same page. The merry-go-round of possible sources of the problem includes the usual areas when things like this go wrong on the front-end—namely Turbolinks and Javascript.

The biggest problem just now is that of time, though. I don't get much more than a couple of hours at a time working on this, and when I do, I feel that I am problem-solving the same things over and over again. It's just as well that we're still in a national lockdown here in Scotland because it does afford me some extra time to work on this.

Hopefully, I can make progress with it this week.

Reminiscing of days with Sublime Text

Over the weekend, I decided to re-install Sublime Text to see If there have been any substantial updates to it. I haven't used it in a few years now since moving to VS Code.

The text editor remains snappy and fast as I navigated through a large codebase and made a few changes. Sublime Text was never a slouch when it comes to performance. It was always fast for me, even on larger codebases.

Intrigued, I turned to Sublime Text's package control to see if there were packages there for Ruby and Rails and general web development. While I don't really need these, there are nice to have in the text editor. What I found was quite disappointing.

Most of the packages that I have used in the past on Sublime Text have not seen much in terms of updates, with a few packages listed as missing. Clearly, VS Code has impacted the number of actively maintained packages as developers migrated from Sublime Text to VS Code when it first hit the scenes.

Although I'm pretty much baked into the VS Code ecosystem thanks to its huge library of extensions, I wouldn't be against going back to Sublime Text. Maybe one day I will. For the moment, I'll leave it on my Macbook and see what I get from it as a wee change to VS Code.

First hit of the year

First hit of the year for me and Drew at Paisley Golf Club today!

A glorious afternoon of weather and a welcome change to the snow and rain we’ve had the last few weeks. I was a bit rusty but Drew has managed to find some extra yardage to his drives over the winter. I’ve got some catching up to do!

Don't forget that text is everything

Graydon Hoare suggests we always bet on text.
Text is the most socially useful communication technology. It works well in 1:1, 1:N, and M:N modes. It can be indexed and searched efficiently, even by hand. It can be translated. It can be produced and consumed at variable speeds. It is asynchronous. It can be compared, diffed, clustered, corrected, summarized and filtered algorithmically. It permits multiparty editing. It permits branching conversations, lurking, annotation, quoting, reviewing, summarizing, structured responses, exegesis, even fan fic. The breadth, scale and depth of ways people use text is unmatched by anything. There is no equivalent in any other communication technology for the social, communicative, cognitive and reflective complexity of a library full of books or an internet full of postings. Nothing else comes close.

Always bet on text
I wholeheartedly agree. You can keep video clips, online meetings, voice memos and all the stuff. Text is the ultimate form of communication.

In a change from my regular Leuchttrum notebooks that I use, I wanted to try something different. Last week I ordered a Dingbats Wildlife notebook.

It’s a bit bigger than the Leuchttrum notebook which I don’t mind. It also includes a single bookmark as opposed to the Leuchttrum’s three. Hardly a deal-breaker as I can add my own bookmarks.

Aside from being eco-friendly, the notebooks come in many colours. 

It's been a code and coffee morning

I'm trying to build a bit more flexibility into a Rails application by adding the ability to have multiple widgets on the one page.

From a presentation perspective, the problem looks easy. Any number of widgets for a page can be modelled to be presented as a complete web page. It doesn't matter how the data is put together, e.g. flat files, canned models, hard-coded HTML.

What complicates the problem is how the user creates and manipulates these widgets to their needs. I've seen enough back-end interfaces for various products to know it can be done. The Mailbrew interface, which has similar functionality, is how I want this feature to work.

Instead of sitting at the text editor and blindly coding my way out of this, I've been using my iPad to sketch out a few ideas of how widgets of different shapes will relate to the page, and how a page will assemble these widgets. The problem is starting to unravel now.

Might be time for another coffee.

Can SAAS build a better vaccination system?

Deloitte's system to manage the management of vaccination has come under fire for being unusable and in some cases, even abandoned for paper-based solutions.
Clinic workers in Connecticut, Virginia, and other states say the system is notorious for randomly canceled appointments, unreliable registration, and problems that lock staff out of the dashboard they’re supposed to use to log records. The CDC acknowledges there are multiple flaws it’s working to fix, although it attributes some of the problems to user error.

What went wrong with America’s $44 million vaccine data system?
This isn't great for any system that is rolled out for the public to use. But the staggering thing for me is that they were awarded the contract on a no-bid basis as they were the only responsible source to build the system. Also, $44 million should get you a website that doesn't get trumped by a paper-based solution.

Imagine for a second if GitHub had the resources to build this, or even Basecamp or Shopify. Not only do they have the experience of websites that are heavily used every day by millions of users, but they also have the knowledge of building for the public. Their websites are used by millions of people every day, and they have to ensure that design changes need to be clear to the people using it.

Could these companies build a better vaccination system?
Spent a couple of hours tonight swapping in a TailwindUI component into a Rails app of mine. I can see me swapping more of the TailwindUI components to replace my own over the next few weeks.

Plans for the blog

With the basics of my blog now in place, I can focus on other parts of the blog that I would like to build.

I've been writing notes for an aggregator of sorts that would subscribe to content streams. These content streams can then be shown on my blog. RSS would be the initial type of stream that I would offer as these are open and simple to integrate into the blog. Other types of content streams may follow if I decided to incorporate them into my blog. This aggregator will then be displayed on its own page or on my blog's sidebar if I choose to put it there.

One of the great blogging platforms that I miss the most is Posterous. The idea of this blogging platform was simple yet highly effective. Instead of writing your posts in a password-protected section of your blog, you write your posts with email and mail them to your blog. Starting small by being able to email posts without titles would be a good start. Posts with titles and attachments would then follow.

Cross-posting to Twitter is definitely something that I want to include in the blog. It's more the shorter posts that I would post on Twitter, but not all of them. I think for this a simple checkbox would be sufficient.

Building my blog using Rails has been a great way of making something that I can experiment with more. It's also something that I can create at my own pace. The blog is still using the CDN version of TailwindCSS, WebPacker hasn't been set up, and no there aren't any tests.

This isn't a business system or a product, though, so I can afford to do these things in my own time. It just feels good to be writing code in Rails that I don't need to worry about too much and can do in my own time.

A new blog, of sorts

In the last few months, I've been fairly quiet on the blog front. Just like everything else that went wrong in 2020, I could blame it on the global pandemic, but that's not why I stopped blogging.

I started blogging on Micro.blog while it was in the Kickstarter phase. I liked the idea of not only having a new blogging platform, but one that focused back on RSS feeds. Now though, I feel like I have outgrown Micro.blog. It's has a nice collection of features and themes, but I'm looking for more from my blog. I want it to do more than just display posts and pages. I'd like it to handle long-form articles that fall outside of the chronological order of the blog, handle bookmarks, and track other places where I am active on the web.

To get started, I decided to start moving some content over from my Micro.blog so that it's now hosted here on my main domain. I've been putting everything together using my own blogging engine, which does just enough to display posts in chronological order, supports an RSS feed, and has an admin section to manage posts.

I've still got a lot to do in terms of development, but the main thing I'm taking from this is that I am working with Ruby on Rails again. It's been a long time since I worked with Rails in a full-time capacity, and I do miss it. Rolling my own blog engine gives me the chance to get myself familiar with Ruby on Rails and try out a few different ideas.

I’ve been trying to get some traction going on a few web applications over the last couple of months. It’s just not been happening. Countless distractions and lack of motivation has been difficult to get past. Going to give it another go though over the next six weeks.

The last double shot from Mike

Sad to see that Mike Gunderloy is bowing out from software development and the Internet. He was one of the first Ruby developers that I followed on Twitter and through there I subscribed to his blog, A Fresh Cup, where he posted his Double Shot posts.

Looking back, I’m also not super-happy with how the industry has evolved. There was a time when I could believe and hope that software was making the world a better place. Looking around, I’m not so sure any more. Money and power have seized pretty much everything related to software, and the rising tide of surveillance, manipulation, and generally rapacious behavior appears to be getting worse all the time. It’s become harder and harder to find any industry niche that I feel comfortable in working any longer. My sincere blessings to those of you who are still fighting the good fight, but as I said, I’m tired.

End of the road

I can understand his reasons for bowing out from the world of software development. I’ve been feeling the itch to leave as well, but I still think I have a few years left before I completely think about trying something else for a career.

Of course the tech companies passed on the new digital services tax to consumers

Oh look. The big tech companies are now all just passing on the new digital services tax straight to their customers. Who could have predicted that? All in a sarcastic tone of course.

Many small businesses and entrepreneurs will have received an email the other day from Google which informed them that from the 1st November 2020 Google will be passing the UK’s new 2% digital services tax straight onto their customers.

They are even adding a line item on their invoices for DST (Digital Services Tax) alongside VAT.

That means they are joining the likes of Amazon and others who are simply passing this tax straight onto small and medium businesses and consumers in the UK. Exactly what every online business owner knew they would do.

UK scores an own goal with its Digital Services Tax

Two things I’m taking from this.

  1. The UK goverment are fools if they thought that the big tech companies weren’t going to do this. It’s decisions like this that make me wonder if I should change my vote. I didn’t vote for an independent Scotland the first time, but I’m considering it now.
  2. I’m of the mind that the big tech companies exist now only to serve themselves. And yes, I’m including Apple in this one. The big tech companies face no competition and can call the shots in most countries. Of course they’ll just pass a tax onto their customers. With the amounts of money they are commanding, they can afford to do so.

My Soundcore Life 2 headphones were a great buy. They produce good sound and have noise cancelling.

They also work nicely for online gaming, although I never thought about using them when I bought them. #mbaug

The 3 x 5 card

Nicholas Bate gives us a productivity system so simple it can fit on a single index card.

A fresh 3 by 5 card taken from the stack. One side is work. One side is home. Each side is divided in half with a vertical line. On the LHS side are things you need/have to do. E.g. at work return a client’s call; at home buy some pasta. On the RHS are things you don’t have to do but you will do because they will make your future life easier by reducing the things you have to do on the LHS.

The Tools of Excellence for a Brave New World, 8: The 3 x 5 card

Friday night fun.

Pizzas from our favourite local Italian restaurant, a couple of cocktails for me and Jen, and a few board games, including the family favourite, King of Tokyo.

A great way to start the weekend.

Despite switching to TailwindCSS, I still style components similar to Bootstrap. I’m still starting out on the journey of TailwindCSS, though, and I think in time, I’ll start to find ways to get away from this styling.

The over due pull request

I have a pull request that’s been sitting in Github for about two weeks now. It’s for a Rails app and the pull request includes some breaking changes. I’ve done my best to limit these breaking changes but there are some parts of the application that I need to update after the deploy.

I haven’t scheduled this into my day as I know it’s going to take a chunk out of my day so I’ve just let it lie there for the last two weeks.

I can’t put it off any longer. I’ve scheduled it in for this afternoon. I just need to get it done.

The Tantive IV set is complete! It took a wee bit longer than we planned, but it’s finally finished. Now, we just need to find a place to put it.

I’ve been trying to build a series of themes using the Tailwind CSS framework. Creating the different components of each theme is simple to do, but bring these components together has been more challenging. My design eye for these things isn’t great.

Goodbye mattisms.dev

After a few weeks of not posting to my dev blog, I’ve decided that over the weekend I will delete this blog.

I don’t see the long term value in having this resource on a seperate domain or in collating the links for this blog. Instead of posting to a blog, I’m going to start collecting web development and Rails guides and resources on a number of pages on my personal website.

Don’t worry folks, I’ll keep posting here and any major changes in this web development content will be shared here as well.

In an effort to break the boredom, I opened a few Lego sets that we had initially put aside.

Drew’s been desperate to build the Tantive IV set, so we’re starting with this one and just doing a couple of bags a day. When it’s done, it’s definitely going to be quite big.

The good and bad of Apple acquiring Dark Sky

It was announced yesterday that Apple has acquired the weather app Dark Sky. As part of the acquisition, the iOS app will continue to function as it is. In contrast, the Android app will no longer be available for download. Like many others, I use the Dark Sky app daily. The API service that provides forecast and historical data for other apps and services will continue to function until the end of 2021.

Like so many other people, Dark Sky was one of those apps that have been on my phone for years. In my opinion, there was no contender. Now though, it looks like we’ll hopefully get a revamped iOS weather app with many of the features of Dark Sky in it. I hope. This is still the early days of the acquisition. Like so many software takeovers in the past, I’m sceptical of what lies ahead for both parties.

The bad news.

It’s another excellent service swallowed up by big tech. The Dark Sky team finished their update on this by saying they are looking forward to building great products. When a smaller independent company gets bought over by big tech though, there’s usually no light at the end of the tunnel.

With no app available for download, Android users not only need to find an alternative to Dark Sky, but also a weather app that doesn’t use the Dark Sky API. The Dark Sky API has been seen for a long time as the best and most accessible API for weather information. With the API closing down, developers will need to find an alternative.

I’ve been using the Dark Sky API for a product of my own. I’ll now need to spend some time finding an alternative to the Dark Sky API and make the necessary changes for my product. I have the time to do this, but it’s time that I would have earmarked for other prioritised work. I’ll need to re-jig things in the meantime.

The good news.

There is good news about this. Apple will finally get a better weather app. I’ve not been a fan of the weather app for a few years, and when Apple allowed their core apps to be deleted, it was one of the first ones to go from my home screens.

With Dark Sky closing their doors, there is space in the market now for an alternative to Dark Sky. A developer-friendly forecasting API that also provides alerts for changing weather conditions. I’m not saying that it will be easy to do, but there will be many app developers looking for such an alternative. It could be an opportunity.

Is Apple going to do the same for weather data as they did for maps? Apple’s MapKit JS service is a good alternative to Google’s own map service. It would be nice to see a WeatherKit service for both native and web applications. Like maps, weather information can be included in all manner of apps. Having a reliable source of weather information would likely attract more developers to building apps for the iOS platform.

It’s always good to have an alternative

At the end of the day, Apple’s acquisition of Dark Sky should be a cautious reminder. No matter how excellent the service is, there’s always a chance that it can be pulled. The best way to plan for such disruptions is to have at least one other alternative in place.

With another service already earmarked, you can make the switch from one service to the other easily. This doesn’t just go for the apps you use, it goes for your personal data as well. It’s also should be considered if a service is fundamental to your business.

I’ve been really enjoying using Tailwind CSS over the last few days. I’m finally getting my head around it. The thing about it I like the most though is the ability to go from basic HTML to styled components in a relative short period of time.

Useful writing

I’ve been trying to find a way to reboot my writing habit for a couple of years now. The trouble is, most things I have written are on too wide a range of topics. When you’re covering a wide range of topics, it feels like you’re jumping from one subject to the next. I need to narrow these topics down.

Paul Graham’s latest essay on how to write usefully got me thinking about this again.

If you narrow the topic sufficiently, you can probably find something you’re an expert on. Write about that to start with. If you only have ten readers who care, that’s fine. You’re helping them, and you’re writing. Later you can expand the breadth of topics you write about.

How to Write Usefully

I need to focus on one or two topics and start from there.

Despite the many things that Visual Studio can do, I find it very uncomfortable to use when writing code. My preferred coding font just doesn’t render as nicely as it does in Microsoft’s open source text editor, Visual Studio Code.

I wonder if there will come a time when Microsoft recommend their open source text editor over their proprietary IDE?

Looking more into app subscriptions and Fantastical alternatives

There was much debate this week about Fantastical’s move to a subscription app and subscriptions in general. Now, I’m not against developer’s adding subscriptions to their apps, they have to make a living somehow from the software that they produce.

My concern with Fantastical is the price. I find the subscription price quite high in terms of how much I use the app and what Fantastical are offering in their premium subscription.

Is Fantastical worth it?

Just as a comparison, I decided to look at the apps on my home screen and their subscription amounts. In total, I have 12 apps on my first home screen. Given these are the apps that I use daily, then it’s apparent that I do place a lot of value on these I have subscriptions for apps on other screens, but these are used less regularly.

Here are the apps that I pay an annual subscription for that are on this first home screen:

  • Micro.blog ($50)
  • 1Password (~$60)
  • Todoist ($35.99)
  • Bear ($14.99)
  • Day One ($31.99)
  • Feedbin ($24.99)
  • Instapaper ($29.99)

Now taking these annual subscriptions into account, there is one that I can’t do without and that’s 1Password. Being able to save my logins securely and across multiple devices is such a time-saver. I’m not saying that price isn’t an issue on this one, but this app is essential.

The rest of the apps that I pay annual subscriptions for aren’t essential, but I do use them daily and usually on multiple devices. There, I do find them valuable. At the top end of the scale in terms of price are Micro.blog, Todoist, Day One, Instapaper and Feedbin. At the bottom end of the scale is Bear.

If I were to pay for Fantastical’s pricing, it would put it at the top end of the subscriptions that I have. It’s not going to break the bank, but I do find it a bit steep. And that’s why I’m not 100% convinced that Fantastical’s new subscription app is for me. Despite using Fantastical most days to manage my schedule, I would not consider it to be worth its subscription price.

It isn’t straightforward to compare apps and their usefulness as there are used differently by everyone. For example, I use Bear and Feedbin daily, and I find them both very useful, but over the year the price difference in the annual subscription is $10. It doesn’t sound like a lot, but when you consider that you might have other app subscriptions, they can quickly rack up. So while I accept that it’s hard to compare apps and their subscriptions, I still think that the price for the Fantastical subscription is quite high.

The Fantastical alternatives

Right, so we’ve established that I find the Fantastical price a bit high, so what are the alternatives?

As for alternatives, I tried Apple’s own Calendar app this week and found it sadly lacking in features. I didn’t expect a whole lot from the app as I know it’s free, but it doesn’t appear to have been updated very often.

There are other calendar apps on the App Store, but some that I have seen are free and have ads in them. You then have to pay to remove the ads. This style of pricing isn’t necessarily a bad thing in a calendar app or any app for that matter, but I’m personally not a fan of this style of pricing. I would instead prefer developers to charge a price for their apps or be free with an option to unlock features with a reasonably-priced subscription. For me, ads have no places in apps, so anything that has ads is out.

I also gave Calendars 5 a try from the app store. Sticking to the pricing argument I made earlier, I bought the app for full-price, which is $6.99. It does everything that a calendar app should do. Natural language input, different views and light and dark themes are all there. You can sync your iCloud calendars across multiple devices, and there’s an iPad version of the app too. I didn’t install this though, as I find that having a calendar app on my phone and my desktop is enough for me.

I’m also giving Timepage a run again, but the lack of calendar views does limit it a bit, and there is no equivalent app for macOS. There are however a number of things going for it that I do like. It includes weather forecasts for events, travel times and a daily briefing notification to see what’s coming up for the day. It’s also very customisable and includes several options to adjust the app including themes, font size calendar and timeline. It’s also significantly cheaper than Fantastical at just $11.99.

Making a decision

Having tried these apps out this week, I’m going to ditch Calendars 5. It’s okay as a scheduling app. However, I do like the extra effort that has gone into the user interfaces of both Fantastical and Timepage.

I’m still torn between Timepage and Fantastical though. Fantastical’s calendar group syncing is a feature I would like to have, but it’s not essential. To be able to have calendar groups sync between phones would be great, but it’s not a deal-breaker and certainly not worth the price of the app subscription as it stands at the moment. It’s more of a nice to have.

I haven’t deleted Fantastical from my phone yet. I can still use it without the annual subscription, but I know I’m going to get frustrated with the number of features that are locked out. It’s at this point where I will either cave and go for the subscription or I will delete the app. Fantastical hasn’t been too aggressive in reminding me to upgrade. Still, it feels like over time I might be nagged into upgrading.

There’s also the question of changing my subscription. If I take the Timepage subscription now, I could still change my mind and then use Fantastical. However, it will always feel like I wasted some money on a subscription that I’m not going to use. Sure, I bought the Calendars 5 app, I’m prepared to do that to find the right app to use. What I don’t want to do though is take a subscription for an app that I won’t fully use.

I can see me sticking with Fantastical in the short term. It will be interesting to see if Flexibits make any changes in the short-term based on user feedback of the jump from 2.0 to 3.0. Still, I suspect that they will leave the app subscription price as is. Most users will come round to paying the subscription. For me, though, it’s still too high a price to pay at the moment.

Blogs, blogs, blogs

Over the holidays I mentioned that I was writing a blog post that I would publish this week. Well, after a delay thanks to the flu, I finally hit the publish button on my return to using my main domain. My first post, about my focus for 2020, is a return to building up some long form content that I want to reside on that domain.

Is this the end of my time on Micro.blog?

Definitely not. Micro.blog is a wonderful blogging platform that I will keep on using. This blog on Micro.blog will be my social feed to the net. It’s the one place that I will post to daily. Short posts, photos and links will continue to pour out from here.

So what’s the point of the new site?

For a while I’ve been trying to find a way of supporting short and long content. I’ve tried mixing these two lengths of posts over the years and it’s never sat well with me each time I have tried it.

Now that Micro.blog is my daily social feed, I can now focus on pushing longer posts through my main site again.

Mind mapping again

It’s been a while since I last did any mind mapping—a few years, in fact. I’ve probably doodled a few smaller mind maps in that time, but this is the first time that I have done anything more than a doodle.

The two-page spread of my notebook works quite well for it, and the paper is thick enough to cope with most of my markers, so there’s little chance of it bleeding through.

I can see myself doing more of this in the months ahead.

Mind map to curated list to final plan.

It took an hour to do but I’ve managed to outline 12 blog posts for 2020 that I’ll publish at my main home page. These will be longer posts than I publish here at Micro.blog.

Merry Christmas!

Well, Christmas Day is almost over in the Lang household. My parents have just left for the night, and I have to say they loved their Christmas lunch and the evening’s entertainment.

It’s not over, so I can still send season greetings to my little blog’s readers.

So, Merry Christmas to you all, and I wish you all a great day.

You are most welcome Nicholas

A thank you note from fellow blogger, Nicholas Bate.

I forget how I came across Nicholas Bate’s blog. I discovered him, and a few other great blogs, while I was a heavy user of Google Reader.

Today, I’m still a daily reader of his blog and a select number of other blogs that I find are essential to my daily reading.

I’ve been a bit quiet this year in terms of blogging, but it’s starting to pick up again. Without the daily posts from Nicholas, Michael, Kurt and Curtis, I’m sure I would have packed in blogging years ago. So, thank you guys for your time.

It’s these fine blogs and many more that keep me writing and ultimately posting to the Internet. Long may it continue.

The Ruby cost at Basecamp

David Heinemeier Hansson breaks down the cost of the operations at Basecamp with a spotlight on the cost of running a Ruby on Rails product.

Working with Ruby and Rails is a luxury, yes. Not every company pay their developers as well as we do at Basecamp, so maybe the rates would look a little different there. Maybe some companies are far more compute intensive to run their apps. But for most SaaS companies, they’re in exactly the same ballpark as we are. The slice of the total operations budget spent running the programming language and web framework that powers the app is a small minority of the overall cost.

Only 15% of the Basecamp operations budget is spent on Ruby

For years I’ve heard arguments that Ruby on Rails is too expensive to run, but I’ve never seen costs for anything as big as this. And to be honest, I was surprised that this was all it was.

Sure, every SAAS product is different in what it does, how it’s built and how it’s run. But, the fact is that Ruby on Rails is an ideal web framework for most SAAS products and has been for years.

I’ve watched the JavaScript hype train trundle on now for a couple of years and I can’t see any clear advantage of it over Ruby on Rails or any other non-JavaScript framework for that fact. And I think developers are starting to realise this.

Given the choice between Rails and any other framework for an application, I will keep going with Rails. It doesn’t have the big hype around it that it did ten years ago, but it’s still proving to be a developer-friendly and therefore business-friendly framework to build your SAAS product with.

Lightsabers done right

A look at the different techniques used to make the lightsaber work on screen through the different Star Wars movies.

Enter the sequel trilogies, which would achieve the pinnacle of lightsaber effects by merging the various techniques from over the years. Like the prequels, the blades of the lightsabers on-screen would be added digitally, with the on-camera fights taking place with plastic prop stand-ins. Also like the original trilogy, the battles were still fought on actual sets as part of the Star Wars sequels’ commitment to trying to embrace more practical effects.

The Star Wars sequels finally got lightsabers right

Of course, you’re bound to hit on the right combination after numerous attempts. The sequel trilogy does get it right though with the lighting effect from the lightsabers.

It’s just a shame though, that we haven’t yet seen any other colour of lightsaber than the blue and red done with this effect.

Action versus motion

Standing on the platform waiting for the train this morning l, I opened up my Kindle app and started reading through another chapter of James Clear’s Atomic Habits.

In the chapter that I was reading James clarifies the difference in behaviour that leads to habits. There’s motion which is a behaviour that doesn’t yield a result and an action that does produce a result.

Outlining a handful of articles I want to write is motion but writing a single piece is an action. Actions are steps towards a defined outcome. Not only did I find this insightful for building habits but also how I categorise tasks.

Much of the coding work I am doing just now can be put in the action category. I implement a feature or a bug fix, and I deploy it. Deploying the change is the result of the action.

Then there’s the marketing work that I am preparing. I say preparing because that is all I seem to be doing right now, preparing. This is motion. While I am planning out something, I’m not getting any closer to the desired outcome.

The difference between the two is clear now, and it sheds new light on what I need to do to move forward.

I sat down last night and managed to get three-quarters of the way through a feature for a Rails app.

This morning I realised there was an easier way to delivering the feature. I trashed my original idea and wrote the full feature on the train in ten minutes.

This happens so many times in programming.

Pretty productive morning already.

Read a chapter from my book using the Kindle app and pushed a code change up to a Rails application using Textastic and Working Copy.

All from my iPhone.

Where does the open source community go after GitHub?

The decision by GitHub to renew their contract with the Immigration and Customers Enforcement agency is still a significant point amongst developers. Despite several GitHub staff who have quit over the decision, it still looks like the company will not back down.

There is now an open letter and petition from many of the open-source contributors and maintainers who chose to host their projects on GitHub. In it, they are asking GitHub to cancel the contract and commit to a higher standard when it comes to making business decisions that have an ethical impact.

I think it’s excellent that organisations are being called into question about their business dealings. However, what happens if a company doesn’t change its position on an ethical stance.

If GitHub doesn’t cancel the contract, will we see a mass migration of projects away from GitHub? That’s an option. That is until the next source code hosting is called into question about a business deal.

Is gaming helping destroy the environment?

With the help of Claire Barlow from the University of Cambridge and John Durrell, a specialist in superconductor engineering, The Verge’s Lewis Gordon goes through the components and materials that go into the Playstation 4 and go over their impact on the environment.

They start with the console’s top lid, which is made from acrylonitrile butadiene styrene (ABS). This is, in fact, virgin plastic and isn’t made from already recycled plastic. From the lid alone, there is a huge cost in terms of the amount of carbon dioxide that is produced from only manufacturing the lid of the console alone.

Let’s hypothesize that the 511 grams of ABS spread throughout the machine are actually virgin plastic. How might it have been produced? This is where things get trippy. Like almost every form of plastic on the planet, ABS is made from petrochemicals that are derived from petroleum, the fossil fuel we commonly refer to as crude oil. The substance materialized over millions of years as fossilized organisms like zooplankton and algae were covered by stagnant water and further layers of these dead animals and plants. Try to imagine not only how slow that process is (geologists call this “deep time”) but also the near-instantaneous speed at which the oil was extracted from the earth. Now consider its carbon residue just sitting in the atmosphere, slowly helping make the planet hotter. As I stared at the plastic, these head-spinning thoughts flashed through my mind.

The environmental impact of a PlayStation 4

Materials such as gold and tin are used on the circuit board of the console. While only a small amount of of these materials are used, the mining process means that vast amounts of water are needed to mine the gold as well as the use of chemicals to make the gold easier to mine. If you think your console only contains a small amount of these materials, then consider the fact that Sony has sold over 100 millions units of the PS4 since it’s launch. Now you start to realize just how much goes into mining the gold for these consoles.

Low-cost thinking extends to the limited use of more expensive metals. Occasional pieces of gold materialize on the main circuit board where various components are held in place by a tin-based solder. When it comes to the open pit and hard rock mining, the extraction methods responsible for some of the world’s gold (as well as the copper and neodymium found in the machine), there’s the actual blowing up of the earth. But enormous quantities of water are also required for mineral processing, dust suppression, slurry pipelines (to transport minerals in remote areas), and, last but by no means least, employees’ needs. Another extraction process called cyanide leaching sprays the toxic chemical over mined ore to dissolve the gold, thereby making it easier to extract. This comes with its own ecological and health risks if the cyanide leaks into the local area. Each method is grim for the environment where metals are often scattered diffusely throughout the rock.

The environmental impact of a PlayStation 4

Finally, there’s the lithium-ion battery in the console’s controllers. It too has a damaging impact on the environment.

The PlayStation 4’s 8.9 billion kilogram carbon footprint leaves out other environmental impacts like pollutants that don’t end up in our carbon-soaked atmosphere. Take the controller’s lithium-ion battery, the same kind of chargeable technology powering electric cars. Lithium is produced by drilling holes into salt flats — usually found in massive crater-like lakes — and pumping brine to the surface. The important bit, lithium carbonate, is subsequently extracted through a chemical process. In recent years, pollution from the extraction process has led to the death of animals and crops, severely impacting local communities in countries like Argentina and China. The lithium that makes our controllers wireless is just another material that scars not only the landscape but the lives of those who call it home.

The environmental impact of a PlayStation 4

This piece by Lewis Gordon really hits home the cost of technology on the environment. The manufacturing impact of technology devices isn’t going to change overnight. With such a huge market, I wonder if it would take pressure from consumers to make any kind of difference. I certainly would consider other environmentally friendly options if they become available.

As for running costs, we have two PS4s at home. I play for a few hours a week, and my eldest son probably plays for longer, but my wife and I encourage him to take breaks. We have a smart meter at home where we can monitor just how much energy we are using, and we always try to reduce our demand for energy, but it’s not easy. Especially during the darker months of the year where we don’t really go out that often.

Can we ever get to a point where we can balance the demands for technology so that they don’t impact on the environment?

Does the world need more search engines?

It’s a question posed by the tech team behind the seach engine Cliqz. Sure, they might have a vested interest in seeing more traffic going to their own search engine, but I think they’re onto something.

We need more search engines.

Google has a huge share of the search market but it has hardly lived up to it’s long running ethos of don’t be evil. What started as a great search engine with a range of good products around it, has turned into an ad platform that hoovers up data on every Google service you use.

I’m starting to wonder though if it’s not so much more generalist search engines we need, but more specialist search engines instead.

We’re at the point where we have billions of web pages, but depending on the search we want to do, even filtering through the search results can be difficult. We will always need generalist search engines, but what about search engines that focus on a particular type of search or information?

We already have a number of these specialist search engines. I’ve used job search engines over the last few month to look for specific roles in the contract market. I’ve had some success with my results on these specialist search engines but not much more than using a generalist search engine like DuckDuckgo. That’s only one example though.

There has to be more examples and matching specialist search engines to match them. And if they don’t exist, why can’t we build them?

Last day of my two month focus on basic functionality for my Rails product. For December and January the goal is to refine these basic features and also integrate social media into the application.

The themes I’m building for my Rails product are hardly fantastic to begin with, but they are improving with each iteration. The goal isn’t to have themes with the best design, it’s to simply be better than what’s already out there for my target market. I’m close to doing that.

Even though the Ruby programming language is no longer flying high as the most popular language for web applications, it’s rich community of people and gems remains strong.

Going to mix up my learning goals for 2020 by focusing on Go and React. Picking a couple of technologies that are popular and quite different. Hopefully Go will provide an alternative as Ruby for the command line and who can argue with React’s popularity.

NYT subscription

I’ve been toying with the idea of taking a New York Times subscription. I find myself on their website quite a lot, so I thought it would be worth removing the limit on the number of free articles that I can read.

At £10 per month though, I’m not sure it’s something that I really need. There’s also the annual subscription that I can find through their iOS app but not on the website. If I take this, then I find myself taking a bigger initial hit of £99, but I end up saving over the 12 months.

I think what’s putting me off is the fact that the monthly subscription is double digits. It’s £10. I usually don’t hesitate are subscribing to services under the £10 mark as they are only a few quid for the first few months and then I can decide if it’s worth the cost.

The New York Times subscription though starts above that single-digit level. And that’s got me thinking that I would rather not have it at all, instead of giving it a try for a few months.

I get why subscriptions are great for journalists and news sites. I’d rather pay a subscription for a high-quality source of news and be able to read it while not being hit with adverts everywhere, but I find both the monthly and annual options just a little bit too high.

I’ve been giving a second look at React over the last few weeks.

What I like about React is that it’s widely adopted and has a large community. I still need to find some time to build something with it though. I have enough tutorials to get me started which is good.

Sleep deprivation on the rise

It seems we now need naps at work.

A recently published study from Indiana’s Ball State University, which examined self-reported sleep duration of 150,000 people, found the numbers of respondents who got seven hours of sleep per night or less rose to 35.6% in 2018 from 30.9% in 2010. About half of the respondents who were police officers and healthcare workers reported not getting enough sleep.

Should workers be allowed to nap at work?

Is there more to this story?

Are there any other causes of sleep deprivation? Perhaps mobile phone use? The rise in sleep deprivation since 2010 is eerily close to the rise in mobile phone use, especially with the increased use of social media.

How many times do you find yourself surfing on your phone in bed?

It’s a terrible habit that I’ve been trying to break to give myself more sleep. Not only that, but I’m trying to set a good example for my kids. They need their sleep even more than I do.

Even so, if sleep deprivation is not related to this, there’s another argument. If you are allowed to nap at work, then why not offer employees a small reduction in hours so that they can get the right amount of sleep?

We all have to take responsibility for getting the right amount of sleep. However, in this age of always on technology, there has to be a way in which we can get the work-life balance right so that people shouldn’t need to nap at work.

Tonight’s goal is to build a better image upload experience in my Rails application. I’ve never really bothered too much about adding drag and drop to my applications, but for image uploads is a much better experience than using a file picker.

I always love the superb view at my parent’s garden in the winter.

Over the years, I’ve taken a few pictures like this, some with leaves everywhere, some with frost, and even a couple with snow. I’ve yet to capture the deer that sometimes wander into the garden, though.

I don’t know why I took so long to do it, but I’ve just activated the ActivityPub API on my Micro.blog account. I’m now free to follow and be followed by Mastodon accounts.

Being able to follow others across different communities is such a great option to have!

I’m resurrecting PenMuse, or something like it

A while back, I started a little Rails app that would generate random writing prompts. After a few months, I decided to kill it. To be honest, I’m not entirely sure why I killed it. I just remember one day deciding that it wasn’t gaining any traction, so I decided to pull the plug on it. Now though I’m not so sure that killing it was such a good idea.

If I was making the application all over again, then there are a few things that I would do differently.

I would open-source it

The main reason I would be open-sourcing the application is so that I can provide a working Rails application on my Github profile. That old chestnut about your Github being your profile isn’t something that I put a lot of stock into. Still, it would be helpful if I have something on there that is working, live and provides a small sample of my work.

I would enforce some constraints

The last time I did PenMuse it ran away from me. I got hung up about too many things about the application that I ended up overthinking what should be a simple application. This time I would keep it simple.

There won’t be an admin section for it, and I would simply connect directly to the database to add new prompts. I would keep the application as minimal as possible, to begin with. One model, one controller, one page. At least I’ll do it this way, to start with.

I would track interest in it

I’m not a big fan of using analytics, but that was back in the day when Google Analytics was the only real option. Now though, there are plenty of great options out there, and a few are even GDPR friendly.

One such analytics service that I have been wanting to try is Fathom. I have earmarked for another application, but I thought PenMuse would be a good starting point to get myself familiar with Fathom.

So there we have it. PenMuse is back! Although not right now, I still need to build it! And it’s not going to have the same name, but more on that later.

I want to stick with Ruby on Rails as my goto web development tool for the foreseeable future. It’s open source, frequently updated, and has a great community. Job opportunities have definitely tailed off though.

Building the reading list again

Last week I finished my first book in a long time. It felt good to get to the last page and actually enjoy the book for a change.

For a long time, I have struggled with books to read. As books have piled up, the want to read them hasn’t been there. And in some cases, when I do read them, I don’t end up enjoying the book and give up on it.

Here are a few more books that I am hoping to read over the next few months:

  • Shiang: Empire of Salt by C. F. Iggulden
  • The Falcon of Sparta by Conn Iggulden
  • The Book of Dust volume I by Phillip Pullman
  • Spitfire by John Nichol
  • Super Thinking by Gabriel Weinberg and Lauren McCann
  • Digital Minimalism by Cal Newport

Gathering Ruby and Rails coding ideas

I’ve been collecting a few ideas for Ruby and Rails apps to try a few things out.

In the past I’ve ended up simply building some form of task manager or blog engine. In order to explore some of the other parts of Rails though, I’m need to try and build something a bit different.

Here’s what I have so far.

  • A live updating leaderboard for an event. The idea behind this is to explore ActionCable again. I haven’t used this in a project for a couple of years. It would be good to get familiar with it again.
  • A command line tool for generating images with text. I had a template I used last year for creating images for the golf club’s junior section for competition announcements. Rather than using the existing template I have with Pixelmator, it would be good if I could generate the same image using the command line. A nice way of exploring what Ruby can do with a good image library.
  • A Microblogging client. This would simply be a client for posting message instead of being able to read posts. The idea here is to see if I can deploy a Rails app with something like Vue.js or React built in.

The idea is to build out each of these over the next few months to understand a bit more about the different parts of Ruby, Ruby on Rails and JavaScript frameworks that I can use with them.

Started job hunting again. Key requirement for future roles is finding a role in which I can work with Ruby. Remote would be a bonus, but yeah, it definitely has to be Ruby.

Rebooting ... again

It seems that every once in a while I need to do a personal reboot. A chance to start over again with a few things and correct the mistakes I’ve made in the past.

Over the next couple of weeks, I’m hoping to start over on a few projects and try to build up some good habits again.

This morning started well with some early morning exercises, making a list of tasks for the day and reading a new book on the train to work.

I’ve got a half-hour set aside tonight for a spot of coding and writing as well.

A good start.

Keeping it simple

In my development work I usually find that the simple way works best and is also easier to maintain. However, the web development industry is still insistent on progress and not always for the better.

This comparison between AirPods and the headphone jack by Bastian Allgeier is a great way to describe the issue.

Modern web dev tools and services are like AirPods. It’s fantastic to get rid of the cable. The experience is far better 95% of the times. But they also have connection issues from time to time, they are massively over-engineered, expensive and you can easily loose them.

Bluetooth headphones are likely the future. But I still have more love for a set of standard headphone with a regular cable and headphone jack that has been working reliably for decades.

Simplicity (II) by Bastian Allgeier

It’s why I use Rails as my go to framework for new projects. Sure it’s not as simple as editing files on a server but it’s as simple as a tool you can get for building web apps.

I’ve started using Bear to write up features for a product.

Instead of going straight a user story and coding, I’m spending a bit more time writing about the feature, and it’s risks and benefits.

It’s working well so far.

Personal projects do make you a better developer.

My focus just now is on a larger project though. It still affords me much of the same benefits, just less of an opportunity to try new things. I’m okay with that though for the sake of getting it off the ground.

Playing with the Dark Sky API and the Bootstrap card component

As part of a side-project I’m working on, I’ve been trying to build an informative weather widget that gives current and forecasted stats for the next few hours.

I’m using the card component from Bootstrap to structure the widget. The card component is excellent for this, as it allows me to structure the widget but will enable it to have different styles for different websites. I’m surprised by just how much I’ve been using the card component, as it’s quite versatile.

Dark Sky provides all the weather stats that I need. I have a background worker that fetches the stats from the Dark Sky API and saves it to the database. I can then query the database for the stats as well as cache the widget for a short period.

The Dark Sky API is excellent as the forecast request gives you minute by minute forecasted weather for the hour, as well as hourly and daily forecasts for the next seven days.

The Dark Sky API also includes descriptions for icons that you can use. These standard descriptions can then be used to map to whatever icon you want. I’m using Font Awesome for my weather widget’s icons. I have a helper method in my application that maps the icon description from the Dark Sky API to the correct Font Awesome icon.

So far I’m pretty happy with the results.

We spent the day exploring the beaches and grounds around Culzean Castle today. It was such a great place to spend the day, and we also got lucky with the weather!

Coffee on my desk, pen and paper ready, text editor open.

This morning’s goal is to get my head round Webpacker in Rails 6.0 and Font Awesome installed through Yarn/Webpacker.

iTerm’s new status bar with configurable Python components should mean no more faffing about with Powerline in Vim.

Powerline is useful, but it can be a pain to configure and it takes up too much screen space as well.

Where have all the good programming and development blogs gone? Maybe I’m not looking hard enough, but I struggle to find good programming blogs to follow that post on a regular basis.

I think I’ve arrived as a Javascript developer. I wrote this Ruby code last night.

this.latitidue.present? && this.longitude.present?

🤦‍♂️

Respectful communication

This weekend the Roman Catholic church celebrates World Communications Day. This is a day that the church uses to identify how it’s message is distributed across the world and how the media impacts on the world.

During today’s sermon our parish priest touched on a number of points in the Archbishop’s letter to the diocese. However, it was one particular paragraph that really stuck out for me.

The positive use of the internet and social media depends on respectful communication. Respectful communication speaks the truth in charity. If every user of social media spoke the truth in charity, many people, including young people and children, would be happier, safer and better informed.

53rd World Communications Day Message

In a time when we’re frequently reminded that social media has so much going against it, we should also note that it’s not social media that is the problem, it’s just how we use it. Using it in a more positive and respectful way would certainly be a good way to start improve online communities.

Found the perfect accompanying domain to go with this one, mattisms.dev. Expect web development posts on Ruby on Rails and other programming languages to start appearing soon.

Service outages can be a good thing

Feedbin was down again this morning, but thankfully it’s back up and running now. This is the first time that I remember Feedbin having a prolonged service outage ever since I started using it when it was first launched.

The thing about service outages though, is that despite their interruption to your day, they can be an indicator of how effective the service provider is at dealing with it. For a service like Feedbin, it shouldn’t cause too much of an impact on a person’s day. It’s a consumer product, but what if you are a service provider for other businesses and organisations?

I remember Gitlab’s database outage a couple of years ago. They had a severe disruption to their service, but they dealt with it in the best way possible. By being transparent with the world and letting everyone know what went wrong, what they’re doing to fix it and finally a retrospective of what they have learnt from it.

Basecamp also had a severe outage not that long ago. Again, they handled it in the same way Gitlab did. By being transparent and learning from the disruption so that it doesn’t happen again. If you really want a deep dive in Basecamp’s service interruption they did a whole podcast episode on it.

Platform interruptions are mostly just a nuisance. As a consumer of both free and paid for platforms, I know that these outages are not that important and eventually, the platform in question will be up and running again. But for the service provider, they’re a great indicator of how good they are at getting back on their feet, and more importantly, how informed they’ll keep everyone during the process.

So even if a service provider does have a significant outage, it’s how they handle it that will be a factor on whether I sign up for it or not.

Interesting programming problem I solved this morning. Rewrite a regex expression so that it doesn’t use any escape characters that would break the Yaml file it is being saved in.

Also, added Regex101 to my list of great online tools for web development.

Essential career advice for software developers

Scott Hanselman nails it with his advice for a young university student attending the Microsoft BUILD conference.

For the young person I spoke to, yes .NET Core may be a little different from .NET Framework, and they might both be different from Ruby or JavaScript, but strings are strings, loops are loops, memory is memory, disk I/O is what it is, and we all share the same networks. Processes and threads, ports, TCP/IP, and DNS - understanding the basic building blocks are important.

Systems Thinking as important as ever for new coders

It’s all just building blocks. Whatever the language or framework is, the building blocks are still the same. Great advice for those just starting their careers in software development, but also a reminder for the older or more experienced software developers who are struggling with the ever changing landscape of programming.

The death of lootboxes in gaming?

American government officials have finally taken their shot at video game lootboxes. Specifically, Senator Josh Hawley of Missouri announced his intention to introduce the “The Protecting Children from Abusive Games Act” to the US Senate.

This is the culmination of slow-burning anti-lootbox sentiment that’s bubbled up from the gaming community over the course of the last year-and-a-half. Ever since games like Battlefront II and Middle Earth: Shadow of War took lootboxes and in-game purchases from just “occasionally-overpriced bling” to “pay-to-win garbage,” those who regulate fair trade have begun to sit up and take notice.

American senator pleads for children’s protection in anti-lootbox bill

Pay to win games on games consoles received a massive backlash from gamers and I think that games developers have taken notice of this.

Overwatch gets it right, with its loot boxes that can only reward you with cosmetic changes. I hope games like Overwatch can get to keep their lootbox system.

Pay to win games on mobile devices is an entirely different beast though. Games on mobile devices frequently use pay-to-win tactics through in-app purchases as a way of making money on free games. It’s these games that I hope to get targeted through this bill.

There’s one other consideration as well. Games are sold with ratings on them which indicates the age with which the content of the game is aimed at. If you decide that your kids are okay to play games that have a much higher age rating on them, then, in my eyes, you are also responsible for ensuring that your kids know the do’s and don’ts of that games lootbox system.

Fastmail’s aliases are a great way of protecting your main email address.

I had to contact a website to remove a business incorrectly listed under my home address.

The site was riddled with ads so I used an alias to protect my email address.

Great day down at Troon today with Jennifer and the boys.

Spent most of the day walking along the beach searching for shells for Drew’s school project. The water was nice and cool for a refreshing dip at the end of the walk as well.

Last night I shipped a little search improvement to Markcase and tonight a change to another Rails app.

Feels good to be working with Rails, even if it is for a couple of side-projects.

Back to Vim

In the last couple of weeks, I’ve been slowly getting back into using Vim as my default text editor.

Even though VS Code is really popular with developers at the moment, I’m not a big fan of using Electron-based apps. Also, VS Code’s popularity has been killing off some packages that I use on Sublime Text, which effectively kills that off as well. I did try to move back to Sublime Text, but I’m not finding it anymore productive than VS Code. Which brings me to Vim.

After many attempts at moving to Vim, I can still remember the keyboard shortcuts for many commands on Vim, so I haven’t been at a total loss in getting started again.

After a few hours of wrestling with Vue, I finally have unit tests in place for a few components. A win for today, but I am still not convinced of JavaScript as a one stop shop programming language for web applications.

Monoliths make getting started easier

An advantage of a monolith code base that can go overlooked is the minimal entry barrier to getting up and running for junior developers or new members of the team.

Setting up a basic database and my application with a background process was a pretty defined process. I’d have the readme on Github, and often in an hour or maybe a few I’d be up and running when I started on a new project. Onboarding a new engineering, at least for an initial environment would be done in the first day. As we ventured into micro-services onboarding time skyrocketed. Yes, we have docker and orchestration such as K8s these days to help, but the time from start to up and running a K8s cluster just to onboard a new engineer is orders of magnitude larger than we saw a few years ago. For many junior engineers this is a burden that really is unnecessary complexity.

Give me back my monolith by Craig Kerstiens

Even those in senior roles may struggle to hold in their head an entire stack composed of micro-services. Sure it becomes familiar over time, but it’s another learning curve that can be unnecessary. It’s why I love working in monoliths.

They are a one-stop stack that contains everything or at least most of the components that we need to know about. An engineer can get up and running in a matter of hours. Why make it more difficult to onboard engineers?

Maybe the hype-cycle for micro-services is finally passing.

What next for the web?

As the World Wide Web celebrates it’s 30th birthday, Sir Tim Berners-Lee reminds us that a better web for all can be achieved.

The fight for the web is one of the most important causes of our time. Today, half of the world is online. It is more urgent than ever to ensure the other half are not left behind offline, and that everyone contributes to a web that drives equality, opportunity and creativity.

The Contract for the Web must not be a list of quick fixes but a process that signals a shift in how we understand our relationship with our online community. It must be clear enough to act as a guiding star for the way forward but flexible enough to adapt to the rapid pace of change in technology. It’s our journey from digital adolescence to a more mature, responsible and inclusive future.

30 years on, what’s next #ForTheWeb?

Say hello to Markcase

I’ve been working on a little side-project for the last few weeks, and now I’m ready to reveal it in a soft opening kind of way. Say hi to my bookmarking app, Markcase.

I’ve been an ardent user of bookmarking apps right from the early days of Delicious. Since then I’ve been back and forward to Pinboard a few times and tried Pocket a couple of times. They’re all excellent apps for bookmarking, and they all have their pros and cons.

Delicious is now under the control of Pinboard, and Pinboard itself has been very quiet on the development front. It does what it promises, but after I struggled for a few weeks with bundle issues, I decided to close my account.

I like Pocket for its visual appearance, and it negates the need for a read-it-later service as well, but the last time I tried it, I found it challenging to organise all 1800 of my bookmarks.

I decided to roll my own bookmarking app. After a few weeks, I had a single-user version of Markcase up and running. A few weeks on and now I have Markcase running as a multi-user service. It’s still very early days for it, but I’m definitely keen to take it forward. There’s still lots of work to do, but it’s ready to go as a service for saving bookmarks and organising them.

It’s still in a state of beta though, but I would be interested in hearing from anyone who wants to give it a try. While in this beta phase, accounts will be given out as free, but once we leave the beta stage, accounts will be charged an annual fee for using Markcase. If you don’t feel like using Markcase beyond this point, then you can delete your account.

At the moment, you can log in, change some of your account details, save bookmarks with tags, organise them with tag bundles and use a private RSS feed for your bookmarks. I expect to add many features over the coming months including importing and exporting of bookmarks and integration with other apps and services.

As for native applications, Markcase is a web app first. It will work on mobile devices, without having to install an app. I will be providing an API in the future for those who want to build their own native app for Markcase, but it’s not something that I will be interested in doing for at least a year, maybe longer.

If you’re interested in taking Markcase for a spin, then please reply to this post on Micro.blog or email me at matthew [at] matthewlang [dot] net. I’ll be setting up account requests as and when they come in. It might not be right away as this step is manual at the moment. I will be adding a sign-up page after the beta has finished.

Markcase was previously called Commonmarks, but that was far too similar to Markdown specification of a same name. A name change was definitely needed.

Is Chrome suffocating the web?

Chrome’s continued dominance of the web now puts it in the same position as Internet Explorer all those years ago. “It works on Chrome” is the new “It work on IE”. I’d like to think though that most web developers out there don’t just build for the one browser.

Reda Lemeden’s post, “We Need Chrome No More”, sums up this change.

The dominance of Chrome has a major detrimental effect on the Web as an open platform: developers are increasingly shunning other browsers in their testing and bug-fixing routines. If it works as intended on Chrome, it’s ready to ship. This in turn results in more users flocking to the browser as their favorite Web sites and apps no longer work elsewhere, making developers less likely to spend time testing on other browsers. A vicious cycle that, if not broken, will result in most other browsers disappearing in the oblivion of irrelevance. And that’s exactly how you suffocate the open Web.

We need Chrome no more

While I can see Reda’s point, I don’t think that the developer’s building for the one browser is as big a problem. I’ll be honest, it’s been a while since I visited a website that only worked in Chrome.

For me, the problem isn’t so much that Chrome is the most popular browser, it’s the organisation behind the browser and how they integrate features into that browser that support how they use data and ads to make profits.

Switching to another browser is one answer to this problem, but perhaps there’s also another answer.

For Google to change as an organisation.

That sounds like a pipedream, and even looking back at that sentence, it just seems ridiculous. I’ll leave it though because even the most ridiculous of ideas can still happen.

80 characters per line is still worth sticking to

Even though we have bigger screens with more pixels available to use to view, Nick Janetakis makes a strong point for sticking to 80 characters per line when coding. And he even supported his argument up with a few screenshots as well.

1080p is still one of the most popular resolutions for monitors and it just so happens that with most code editors you can comfortably fit 2 code windows at 80 characters side by side, and even have room for a sidebar if you like that sort of thing.

80 Characters per Line Is a Standard Worth Sticking to Even Today

Well worth a read if coding is your thing.

I mostly stick to 80 characters per line when programming. I say mostly as it’s more a guideline than a rule for me. I find it easy to adhere to this guideline when working with Ruby and other programming languages, but where it falls apart for me is when I am writing HTML. In some cases, I just can’t get a line under the 80 characters.

There are things I can do get around this. I can extract segments of HTML into partials (I am using Rails anyway), but is this valid reason for doing so?

I’m not sure, but in most cases, separating out this HTML would definitely help project organisation, allowing me to work in a more component-based way with my HTML. I might just have to give this a try tonight.

Code and coffee combo this morning. Working on some changes to my bookmarking app to allow for a multi-account deploy. Almost there with it. Also there’s been another name change. Last one I promise!

I'll keep building for the web

When it comes to building ideas for applications, I will always choose the web first. It’s what I can I do best and it is where I can ship those ideas more efficiently. I can go from that first line of code to a shippable idea in hours. After that, I can just iterate on that idea when I want to.

There’s another benefit to building for the web though. You have access to a bigger market.

At a startup, engineering resources are scarce. It’s expensive to spread your engineering expertise across different platforms, so it’s better to focus on one in the beginning. Building for the web means that users on mobile, desktop, Chromebooks (which have become the most popular EDU hardware in the US), and any other internet-connected device can use your service, whereas a native app is specific to iOS or Android.

Considering App vs. Website? It’s 2019: Build a Website.

I’ve toyed with learning Apple’s programming language, Swift. My goal is to learn how to build iOS apps. It’s not that I have some Candy Crush busting idea that will net me millions, it’s just something I would like to learn.

Even if I had the knowledge to build a native app in the same time that it would take build a web app, I think I would still go with making a web app. Native apps serve their purpose, but I think we’re seeing more viable alternatives through web apps.

Dark to light

After years of using Solarized Dark as my preferred colour theme for coding, I’m starting to find that I’m now preferring a lighter themes for when I’m writing code. Solarized Light for Sublime Text and Bluloco Light for VS Code.

Solarized Dark is still my preferred color theme for the terminal though.

The web industry debate rages on

The debate about the use of Javascript in the web industry and the role of the front-end developer continues after Chris Coyier’s post, The Great Divide and now a follow-up from Rachel Andrews.

There is something remarkable about the fact that, with everything we have created in the past 20 years or so, I can still take a complete beginner and teach them to build a simple webpage with HTML and CSS, in a day. We don’t need to talk about tools or frameworks, learn how to make a pull request or drag vast amounts of code onto our computer via npm to make that start. We just need a text editor and a few hours. This is how we make things show up on a webpage.

HTML, CSS and our vanishing industry entry points by Rachel Andrews

Rachel’s post reminds us though that while Javascript frameworks might be all the rage at the moment, we’re neglecting the foundations of the web, HTML and CSS. And how they can still be used to educate those new to the process of creating websites.

Maybe as an industry, we should still be focusing on these fundamentals. Not just for those new to the industry, but for everyone in the industry.

Commonmarks now deployable to Heroku

Over the last couple of days, I put the finishing touches to the Commonmarks application so that others can deploy it easily to Heroku. The reason I went down this route is that self-hosting Commonmarks is a something I want people to be able to do, but I’m not at the stage yet where Commonmarks can be quickly deployed to any SAAS platform or even your own server. Going down the Heroku route was a short term solution.

If you take a look at the top of the README file on the Commonmarks Github repository you’ll see a Deploy To Heroku button that you can use to deploy. You’ll need a Heroku account to do this. The add-ons needed for the application to run are free including the dynos required to run the application. I’ve been running Commonmarks on a free dyno for over a month now without any problem.

This brings me to the next step. I’m now working on Commonmarks as a hosted bookmarking product that anyone can sign up for if they don’t want to run their own version of Commonmarks. I appreciate there are people on both sides of the fences, but there are probably more people who want to go with the hosted option than the self-hosted option. I’m not looking to have this running for another couple of weeks, and I’ll be initially opening up with a small beta to get feedback.

Updates will follow.

Commonmarks update

Just a little Commonmarks update for those interested. I’m working on the password reset over the next few days. By then I should have a working single-account version that people can deploy with a Heroku button.

After that I am going to then focus on a multi-account option for those who don’t want to host it themselves. The timeline for this is a couple of weeks, but I will have a limited set of invites for those interested. I’ll make the announcement on Micro.blog first.

With my day job taking me down the JavaScript route on a daily basis, it’s good to break out the text editor at night and write some Ruby code for Commonmarks. It might just be a simple Ruby on Rails bookmarking app but hopefully in time I can build a few more interesting features for it.

For those interested, I’m still working on a startup screen and Heroku deploy button for Commonmarks. I’ll post an update when I’ve finished these additions.

Considering Commonmarks as a SAAS product

Over the last few days there has been some interest in my bookmarking web app that I’ve been working on.

Why another bookmarking solution though?

I used Pinboard and Pocket for a while, but I was never comfortable with either of them. Pinboard hasn’t seen much change in the last two years and Pocket is more akin to Instapaper (which I already use) than it is to Pinboard. I also wanted to work on something that I could pin to my GitHub repo as an example of work.

Features are light at the moment, with just the ability to add, edit and delete bookmarks as well as the ability to group tags into bundles. A basic web application, but it works. I’m using it on a subdomain of my own site .

I’ve had replies from people who are interested in a hosted solution rather than having to roll their own. I initially pushed back against the idea of starting a SAAS product. There’s a lot to do to make this happen as the open source version is for a single account only. There’s also all the other parts of a SAAS product to consider such as billing and privacy now that GDPR is a requirement. Also, my first attempt at a SAAS product is still ticking over but hardly a success in terms of revenue.

However, with growing interest, I am going to entertain the idea of making Commonmarks into a SAAS product. I won’t be abandoning the open source version, but the way ahead might lie in using the same model as Feedbin. They are an RSS reader service, but the source code is open source. I’m wondering if this would work for Commonmarks as a product as well?

There is a lot of other things to consider as well for this such as hosting, pricing and support. I won’t be entirely excluding the idea though until I can at least gauge some interest in the product.

The next step looks like it might be to set up a page to allow people to register their interest.

The new world order of JavaScript

There’s no denying that JavaScript is an excellent language for the web, especially the front-end of any web application. Without it, we can’t enjoy a user experience that challenges native applications.

However, I am not convinced that JavaScript is a language that is suitable for all parts of an application’s stack, all the time. There are benefits to using JavaScript depending on the requirements, but it feels like JavaScript is becoming the go-to language for everything.

Heydon Pickering’s post is an excellent read about this issue and full stack development and how this role is changing with the larger set of JavaScript tools and frameworks available, but it’s his point about separation of concerns that resonated with me:

We need to revisit the separation of concerns principle. We simple can’t afford for people to have to know everything just to do something. It’s good that we conceptualize designs in terms of self-contained components now, but that can be a mental model without being a technology-specific land-grab.

Reluctant Gatekeeping: The Problem With Full Stack by Heydon Pickering

It wasn’t that long ago when front-end developers and designers worked with back-end developers on applications. There was a separation of the two roles and their focus, and each side had the knowledge to carry out their role. Front-end developers would work on HTML, CSS and JavaScript, crafting functional yet beautiful user-interfaces. Back-end developers would work on business logic and background processing.

With the rise of JavaScript though, we’re seeing a convergence of tooling onto a single language, and the roles of front-end, back-end and full stack developers becoming less about knowing the respective field and more about knowing JavaScript.

The new world of web applications is moving to JavaScript, and that’s great for the web as a platform. We can now build applications that rival that of native apps using a single language.

However, when faced with programming language choices in the stack, should developers be quick to default to JavaScript?

I am hoping to add RSS feeds to Commonmarks today so that I can hook up my bookmarks to Micro.blog. The plan is to have a public feed that the owner can control as well as a private feed that the owner can use themselves.

Say hi to Commonmarks

My own bookmarking app is up and running.

It’s nothing fancy in terms of how bookmarking apps usually work, but I wanted this to look and act more like a blog than a collection of bookmarks. I opted for paginating results on the right with a sidebar on the left. In time the sidebar will include more filtering options.

I’ve had a couple of stabs at my own bookmarking apps over the years, but this one feels more right than wrong. The code is still rough around the edges, but I’m happy to open source it now on Github.

And the name? Well, think of it as a commonplace book for your bookmarks.

Update: Commonmarks has been renamed to Markcase and is still under active development. I’m hoping to open it up for registrations in spring 2020. Source code is available on Github.

Plugging the web development knowledge gaps

Dan Abromov’s Things I don’t know as of 2018, is a refreshing take on the knowledge gaps of software developers. Even though Dan is the creator and maintainer of a widely used package used with React, his list of knowledge gaps in web development is quite an eye-opener. And he made them public too!

I’ve worked alongside a lot of great developers, and I’ve been amazed at both their spread of knowledge on web development but also their gaps. I rarely pay attention to the knowledge gaps though. It’s easy to be amazed at the breadth of one person’s knowledge and not focus on a person’s knowledge gaps. Perhaps they just didn’t get round to that gap, and focusing on their knowledge gaps feels wrong, but should that be the case?

As I’m approaching 20 years working in software development, I’m starting to know the excellent job descriptions from the bad ones. Merely listing a long list of tech experience that you would like in a candidate is a poor way of getting the right one. In my view, the best candidate can come in and use their soft skills to learn and get up to speed in a few months regardless of their experience. I think it comes down to the fact that more organisations want their candidates to hit the ground running from day one. No training or onboarding, just another cog in the big development machine.

Given the number of languages, frameworks and other techs in web development, it’s a near impossible task to keep up with everything, but I’m taking two things away from Dan’s post.

  1. There’s no harm in not being up to speed with everything that a full stack web developer should do. Sure, I can deploy an app using Cloud66, Heroku and Dokku, but I can’t say the same for Docker and Kubernetes. I can deploy web applications, but only on the technology that I have chosen to learn.
  2. I’m considering changing my job description to be more specific. Sure I can be a jack of all trades, and know a bit of everything in the web development stack, but I’m sure I would be better off describing myself as a backend web developer instead and focusing on the technologies around that.

With these points in mind, I’m renewing my focus on Ruby on Rails as well as adding to this the knowledge that I need for the gaps around it.

It’s good to know though that I am not alone in not understanding a few topics that have been popular in the last couple of years.

Trying to keep pace with most of the topics in the web development world is a task in itself, but there’s enough work to keep me marketable as a backend web developer even if I do focus on a single core skill.

Got my own bookmarking app up and running on Heroku last night using Rails. It’s a simple affair with just the ability to add and edit bookmarks and navigate bookmarks by tags. I’ll be looking to open source it on Github over the holidays, once I’ve tidied up a few things.

Spinning up another little greenfield Rails project. I was tempted to try another framework/language out for this, but I just want to get it done. So Rails it is then!

Trying to escape the Google monopoly on the web

I read today that Microsoft is reportedly throwing in the towel with their EdgeHTML browser engine and starting work on a new browser based on the Chromium engine.

My immediate thought was down-heartened. Another Google-backed browser to reinforce the popularity of Google’s own Chrome browser, but the problem may actually be worse than that (depending on your point of view of course).

Andre Alves Garzia explains more in his post:

We already lost the mobile world for a duopoly of Apple and Google, now we’re losing the desktop most used application, the Web Browser, to a monopoly from Google again, how much control do you want that company to have over the future of the Web? All this not counting the many Electron based apps we use in our daily lives such as VS Code, Atom, Slack, etc, which are all Chrome engine again.

While we Blink, we lose the Web by Andre Alves Garzia

Even though I’m against any one company having too much control over any part of the technology stack, I’m supporting the use of Google, by using some tools that include the Chrome engine. I use VS Code daily as a web developer and of course the company I work for uses Slack as a communication tool between teams. Is there any getting away from the Chrome engine? Perhaps not at work, but I can make a concise decision to use other applications when I’m not at work.

I’ve been using Firefox and Safari as my preferred browsers for the last few years. In fact, I haven’t looked at Chrome since I decided to go Google-free a few years ago. As for the Chrome-based tools, I don’t use Slack outside of work, but I do use VS Code as my preferred text editor.

Perhaps it’s time to look at Vim again?

Programming win?

Bloody typical.

I just spent a couple of hours adding a new field to a Rails application, built up the logic to use the new application, did a refactoring to clean it up and now realise that I don’t need the new field. I just need a small change in the application with an already existing field.

I don’t know whether to be happy that I don’t need the new field or annoyed in that I didn’t see how I could have done this without having to add the new field.

Either way, it’s a win, right?

Just write the damn code

One of my big downfalls, when I start work on something, is wondering if I am going in the right direction with it technically.

Web development is always changing. It is getting better though. Javascript frameworks are starting to settle down, and fall in line with the regular releases of non-Javascript frameworks like Ruby on Rails and Django.

For the last few weeks, I’ve been reading about Javascript frameworks like Vue and React and what they can offer for web applications. I’ll be honest and say that I’m still not sold on the idea of creating single-page applications with these frameworks, but I can see where they become a benefit for complex web pages.

Then there are things like CSS frameworks, deployment options, containers and a whole ream of other things to consider for the right stack for the application. It’s then that I find myself in a state of “decision limbo”.

Ideally, I would use Rails and a CSS framework and start from there, however, I’m always questioning what should be considered as an alternative.

While reading Nick Janetakis’ article on growing into microservices, I happened across this little nugget of wisdom.

You get better by writing a lot of code with absolute and total intent to replace almost everything you write with better code once you start experiencing real problems first hand.

Microservices Are Something You Grow Into, Not Begin With by Nick Janetakis

I needn’t worry about the implications of my technical decisions until I come across some real technical problems. When I do come across those problems, I should only look at the options available to me then.

In other words, just write damn code Matthew.

On a final note, Nick Janetakis’ article is an excellent guide to those starting new development projects and looking to use microservices. In a nutshell, don’t.

Weighing up single-page applications

With a new full-time role, I’m in the process of getting my head around some of the technology choices I’ll be working with and the benefits and drawbacks of each option.

One of those choices is building single-page applications (SPA) with a JavaScript framework for the front-end. I can see why this choice was made, but I’m now weighing up whether it is worth considering for my own projects. With that in mind, I’ve been doing a lot of reading about single-page applications.

I liked Jim Newbury’s article on single-page applications and his point about understanding what you are building.

We ask “What framework should we use for this whole app?” for new products up front, when we don’t even understand what we’re building yet. It’s far less wasteful to ask “What technical approach best supports this user need?” on a case-by-case basis as we learn more about those user needs during incremental product design and development.

Create your own dysfunctional single-page app in five easy steps by Jim Newbury

Sure your team might be well versed in building single-page applications, but it’s not the best fit for all types of applications. It’s all about finding the right tool for the job.

Ruby on Rails is a good starting point for most of the projects that I work on, but I know it’s not a good fit for other types of projects. For other projects I know I would need to use another set of development tools.

I understand the benefits of using single-page applications, but it’s not a style of application that will yield immediate benefits in my own, smaller projects. I’ll stick with the tried and tested multiple-page application monoliths for now.

The predictable Apple product update

Is it just me or has the Apple product update become something of a formality now when it comes to the tech sites that report on it?

Apple unvelied a number of updated products yesterday. The tech sites, as always, responded with a range of predictable posts. Insert an Apple product for x where you can.

  • What a maxed out x will cost you
  • Why the x blows away its predecessors
  • Which x should you buy
  • What Apple didn’t announce

Despite rising prices of Apple products and now steady release cycles of products, the tech sites are always favourable to Apple when they do a product update or launch.

Don’t get me wrong, I like using Apple products and I will continue to buy them as they are dependable and last. However, I’m still using a MacBook Pro from 2013 and my iPhone 5S continues to just work. I don’t see me replacing my MBP until at least next year.

As for my iPhone though, I am considering an upgrade to an XR. I’m not a huge fan of the 5S camera and I don’t use a seperate camera, so an upgraded phone serves a dual-purpose. A bigger screen and a better camera.

Maybe can Apple can do no wrong, but it would be nice if the tech sites didn’t just roll over when it comes to an Apple event.

Another notebook recommendation from one of my blog buddies. This time, it’s Michael Wade recommending the Dingbat journals.

I must resist ordering one now. Although, I will definitely consider one of these when my current bullet journal runs out.

Ruby falling out of fashion?

Ruby is falling again on the TIOBE index.

It’s not a cause for alarm, but I will continue to look at alternatives to Ruby for the long term. Microsoft’s .NET is still something I would like to come back to and there are more opportunities for it as well.

While not directly related, I also did notice that Thoughtbot have made their learning platform, Upcase, free for all. An attempt to get more developers to use Ruby?

After some thought, I’ve decided to skip setting up another Micro.blog account for coding. It’s another domain, another channel, another potential headache.

Any suggestions on a name for my new programming blog? I’m setting one up just to catch notes and findings as I work. Nothing language specific, trying to keep it general so I switch between languages.

Back to Feedbin and the web

For the last few weeks, I’ve been using the lire app on iOS for reading through my RSS subscriptions.

There’s a number of great little features in lire, but the pull to a different RSS client didn’t last long. In the last few days, I’ve deleted the app and started using Feedbin again on iOS. As a client, Feedbin has everything I need and it doesn’t need to have space on my home screen in order to access it. Just a bookmark in my browser is enough to find it.

In the last couple of days I also noticed an article that was doing the rounds about the state of RSS apps on the macOS platform. Before I was using the lire app, I was still using Feedbin in my browser to read my RSS subscriptions when working through the day. A pinned tab in the browser is enough for my needs.

There’s only two cases where I’ll use a native app.

  1. When the app’s core functionality isn’t available on the web like a text editor or source code control.
  2. When I prefer to use a native app over a web based app for cases like email and chat.

Native apps do offer a number of great benefits over web based apps, but in most cases I prefer the flexibility of web based apps. Easy to access for users on multiple platforms and easy for the app’s developers to maintain.

So it’s back to using Feedbin on the web again, but more importantly back to using another web app again.

Is 120 the new 80?

Did I miss the heated and crazy developer debate that the new accepted line length is 120 characters?

Joking aside, I’d like to know if anyone else has changed their coding standards to allow for a bigger line length because of changes in source code management tools.

For a long time I’ve used 80 characters as a guideline as opposed to a set rule. Sometimes I’ll go over this but most of the time I don’t.

With bigger displays everywhere though, it appears that developers are switching to a larger line length when it comes to their coding standards.

Have I lost my tech touch?

It’s been a frustrating couple of days getting my laptop into some kind of order. I can’t get the following things to work:

  • Connect the new Tower v3 app to my GitLab or GitHub accounts
  • Connect my Fastmail account to Spark
  • Sign in to Micro.blog desktop client

The list was longer yesterday but I managed to resolve a bunch of issues with a single action. These remaining items have been vexing me since.

The Micro.blog issue is out of my hands and has been reported, but the Tower and Spark issues are things I expect to just work, but I can’t explain why they don’t.

It begs the question, have I lost my tech touch?

Update: Turns out I had a keychain issue that required me to reboot my laptop to get everything working again. Thanks to @manton and Tower support for pointing me in the right direction. 👍

Anyone have any recommendations on a Jekyll theme that would serve a similar purpose as an About.me page?

I’m looking for something like a portfolio site, but more of an emphasis on who I am, what I’m working on and where people can find me.

Took a few attempts but just managed to get GitLab’s CI and automated deployment working for a Rails app. Now to apply it to my other projects. 🙌

The Micro.blog site is the only place where I can compose a reply and see what I’m replying too at the same time.

I wish more Micro.blog clients did this for replies.

I’ve been trialling Things on my iPhone and iPad for the last few weeks. This morning though, I deleted the app from both devices.

It is a great task manager and it does do lots of things (sorry 🤭) really well, I just can’t get on board with a dedicated task manager app anymore.

I’ve been bullet journalling now for well over a year and I find it a much more effective way of managing my day to day work.

Also I tend to write a lot of software, so I’ve been sticking with task management tools that tie in with my software development process. This means using issue tracking on GitLab or GitHub and using Trello for bigger client projects.

I think it’s fair to say that I’m well and truly done with task management apps.

Curious to know if the Ruby on Rails framework and any other frameworks and languages are considering moving away from GitHub.

Wondering now if the Microsoft acquisition of GitHub is just a ploy to keep devs busy on Monday and distracted from the WWDC announcements.

Microsoft to acquire GitHub?

My first impressions of this are nervousness.

I always liked that GitHub were a separate business from Google, Facebook, Apple and Microsoft.

My working day is often plagued by those little decisions that I never get round to resolving. This morning’s decision is one that I never seem to find the answer to:

Hyphens or underscores for CSS id and class selectors?

I'm all in with Micro.blog

I think I’m getting to that stage now where I am all in with Micro.blog.

I’ve been bouncing between platforms over the last few years. Posterous, Square, Jekyll and Ghost. I’ve had issues with them all. Some have a lack of or bad native clients to post from. Others suffer from bad integration with social media platforms. And finally some have hosting issues or just too high hosting costs.

Then Micro.blog came along and made things easier. It’s easy to create an account there, it’s easy to run a blog, it’s easy to share posts with Twitter and Facebook. It’s easy.

The one thing that really sets Micro.blog apart from the restof the blogging solutions I have tried though is the ability to have both a blogging platform and a social media platform rolled into one. I can write short social posts or longer titled posts, and in both cases, I can get replies back to those posts from fellow Micro.bloggers.

It’s taken a while for to get to this stage, but the reality is that I don’t want to maintain multiple blogs for myself. I want to simply write to my blog and Micro.blog allows me to do that.

After a couple of weeks of heads down work for a client, I decided last night to find some solace in some simple work and clean up the @penmuse website.

I’ve removed the fixed sidebar and opted for a centred two-column design that keeps the site simple to use.

I would love to make use of the micro-casting plan on Micro.blog, but I’d be too concerned about speaking clearly. Public speaking isn’t one of my strong points.

Micro.blog has added another great way of creating content, a micro-casting app.

Micro.blog now supports hosting short-form podcasts, also known as microcasts, with a companion iPhone app called Wavelength for recording, editing, and publishing episodes.

I don’t know that I’ll ever start my own podcast. To have the option to create microcasts from a single app and have the platform to host it is a great feature for Micro.blog.

Micro.blog is growing and now with apps for photo-stories and microcasts, the platform is offering a one stop shop for those who want to consolidate a few different services into one.

I'm ditching Day One

For the last few years, I’ve been using Day One as a digital journal. However, over the previous few months, I’ve been using it less and less. To the point really where I want to stop using it altogether.

Too much meta

The thing about Day One is that while it is a great journaling app, I’ve noticed that I am becoming more and more distracted with the meta-data for each post. Weather, tags, location, starred. It’s all just a little bit too much.

All I want to do write an entry, attach a picture or two and then move on. Day One does let you do this but it’s the meta-data that I find to be too distracting.

The alternatives

Bear is a great note-taking app. I love it.

I use it for many different things, but the one thing that I would like to do is use it more as a digital journal.

I’ve tried to do this before however, I ended up importing all of Day One’s tags when I did this, so I ended up with more tags than I needed. This time I hope to opt out of importing the tags (or try and remove them before the import) and then start from there.

Sunlit is also on the cards as a digital journal, but I would use this for day trips, weekends away and holidays. I’ll be honest and say that I haven’t tried this yet with Sunlit so it might not meet my expectations.

We’ll see over the next few weeks as I gradually move my journal entries out from Day One.

A few observations on the Apple education announcement

I missed the Apple education themed announcement yesterday. The time difference means that I’m always in the middle of something else when these things are announced.

A few observations.

A cheaper iPad?

Judging from the reviews on various tech sites though, it seems people were expecting a much cheaper iPad to be released. Something that competes with Google and Chrome OS.

Well they released a cheaper iPad, at least here in the UK they did, however I’m sure it’s not what the tech sites and consumers were hoping for.

It’s not the first time that Apple haven’t met expectations. In fact, they rarely meet perceived expectations, especially when it comes to price.

I’m always amazed at how well Apple does with a range of products that are always priced much higher than their competitors.

I think the day that Apple drops their prices to that of their competitors is the day that Apple is in real trouble.

Schoolwork app

The biggest benefit I seen from yesterday was Apple’s Schoolwork app. A step in the right direction when it comes to digitising education.

However, given the time it takes for school’s to adapt to new digital practices, I don’t see my oldest son, who starts high school this year, being able to take advantage of this for at least a couple of years.

Space gray accessories

One thing that caught my eye was the new space gray accessories that are now available. Sure it doesn’t go with the silver MacBookPro but the black and gray accessories do look nice. I’m not saying I’ll be buying them anytime soon, but if I’m in the market for a replacement keyboard or mouse then I may give them a look.

I wonder if a space gray iMac is on the cards?

Features for PenMuse for April

The automated delivery of daily writing prompts from my PenMuse website is stable enough now that I want to consider expanding on it.

Cross-posting to Twitter

I’d like to start cross-posting now from PenMuse’s Micro.blog account to a PenMuse Twitter account.

Cross-posting from Micro.blog to Twitter is the most straightforward and easy way of doing it. It’s nothing more than another way for people to get a daily writing prompt.

The drawback to this is that I’m not exactly the greatest Twitter fan although I do think it’s the lesser evil of the social media platforms.

While I am moving away from Twitter, it doesn’t seem right to set up an account there when I won’t be really using.

The benefit though is that I’m not doing this for myself, I’m doing it for others. Others who don’t use RSS feeds, Micro.blog or visit websites that often. Maybe they just want to use Twitter.

A random afternoon prompt

Each morning the newest writing prompt is published through the site’s main RSS and JSON feeds. I’d like to add another feed that publishes a random feed for the afternoon.

There is one problem with this though. Some of the writing prompts in the collection are seasonal, so I would need to exclude these off until at some point they could be considered based on the time of year.

Staying within the constraints

PenMuse is just a playground app. It’s place where I can experiment with a few coding ideas and techniques and see them working in a product environment. I also don’t spend more than a couple of hours a week on such a app.

To do this the playground app has a few constraints on it.

  1. It needs to be free.
  2. It needs to be something people will use.
  3. It needs to only take up a couple of hours of my time a week.

These constraints take out of my hands decisions that would stop me using PenMuse what it is for. A place to experiment with some Rails code.

These two new features aren’t going to give me any problems coding wise, but it’s going to put PenMuse in more places.

Also these features are still small enough that I can do them within the confines of a couple of hours a week.

A Ruby on Rails ERP book?

I’ve been re-reading this post on how to build an ERP sytem from scratch.

I’ll be honest and say that a 250 word post on the topic doesn’t even begin to scratch the surface. Such a topic is worthy of at least 5,000 words in order for the reader to actually takeaway something of substance about building their own ERP system from nothing.

Off the top of my head there’s the following:

  • Methodology - Do you go with agile or a big upfront design? You might think I would advocate an agile approach but there are benefits and drawbacks to both.
  • Architecture - How should the application be laid out? A brief outline of the system can save months of moving code about later on down the line.
  • Application and database hosting - Should we host the application ourselves or use IAAS or PAAS? Self-hosting is big cost but IAAS and PAAS mean you have to sacrifice some control of the application.
  • Performance - How do we scale such an application from a handful of customers to hundreds of customers? Performance is critical in an ERP application. Handling vast amounts of data between transactions mean you have to ensure that users aren’t kept waiting.
  • Error handling - How do we handle errors to allow support staff to diagnose bugs efficiently? It’s not enough to report the errors, support staff of the system need tools to replicate and report errors.
  • Code libraries - Should we use external code libraries or write our own? I’ve learned the hard way that some features are better implemented without an external code dependency.
  • User-interface - Do we use a pre-built theme for the application or build our own? A pre-built theme will add the final polish but there will be constraints in what you can do with it.

This is just an outline but I think even just one of these items is a post in itself. Looking at this list, there could be at least 10,000 words here across seven different posts.

I may outline more of these over the course of the next few weeks.

I think I have gathered enough knowledge on this topic to put at least a few posts together.

I used to work for a company that specialised in installation and configuration of Microsoft’s own ERP software, Dynamics NAV and I’m currently working with a client to build a cash management and stock control system.

With this experience I think there’s definitely more to say on the topic of ERP systems and modern technology stacks, especially when it comes to how they can be built with Ruby on Rails.

At the moment I’m just thinking out loud about this but my micro-blog seemed like a good place to put this down / out.

Nicholas Bate’s tools of excellence series continues.

Sometimes an idea is bubbling. A plan, a product, a solution, a breakthrough. You need somewhere to articulate and develop that seed of an idea. That’s when you grab the back of an envelope from the small stack on the corner of your desk.

Still considering Toronto

Following a raft of measures to cool off the property market, sales have plunged, down 35% overall in Feb 2017 relative to Feb 2016; prices are down an average of CAD110,000, and listings are up (which will drive the prices down further).

Toronto’s real estate market is imploding via Boing Boing

Imploding might be a strong word in this case as it’s only based on one month’s sales, but I wouldn’t be surprised if this was the start of a decline in house prices in Toronto and the surrounding areas.

With my in-laws in Ontario and annual trips out there with the family, we’ve see vast amounts of land swallowed up by builders over the last two decades. The rate of building and development has been staggering.

In the last ten years though house prices have sky rocketed.

My wife and I have toyed with emigrating to Canada in the past few years. The always increasing house prices mean that we would have to look at smaller properties near Toronto or larger properties away from Toronto for the move to be worth it.

With a dip in house prices though, maybe a move is still possible?

Ask Micro.blog

I’m wondering if this is something that might interest the users of Micro.blog.

I want to ask a question to Micro.blog users, but I don’t want the question to appear on my blog. Much like my replies don’t appear on my hosted blog, I would like to ask a question to the community and for everyone to see it on their timeline. Just not on my blog.

I know there are Slack groups for this type of thing, but perhaps Micro.blog is just as great a place for this type of thing.

Does that make sense?

Just what we need, more guns

I’m not surprised it’s being suggested by Trump that they need to arm teachers in schools.

Rather than making schools safe areas to learn, aren’t they just going to be turned into places where kids fear for their lives? Arming teachers is one thing, but in the heat of the moment, can armed teachers react in the same way that the police should?

John Gruber also linked to an article describing the devasting effect of AR-15 bullets on the organs.

More guns is not the answer.

Using Stimulus in PenMuse

It’s been a while since I dabbled in a bit of JavaScript. It’s not that I don’t like programming in JavaScript, it is growing on me, it’s just I’ve never found a real use case for it in a web application. The thing about JavaScript though is that there are so many great frameworks available that mean you often don’t have to write any of the curly bracket stuff.

Vue.js has been on my radar for a while but what has really grabbed my interest has been the release of Stimulus.

For a lot of web applications I work on, I don’t want to re-write a whole view for a particular framework, I just want to enhance a part of that view. Both the above mentioned frameworks do this, but I decided to try and use Stimulus with a web application of my own just for fun.

The copy to clipboard is a nice example to start from in the Stimulus handbook and so I started with this basic example by adding a copy to clipboard button when displaying a writing prompt in PenMuse. Not only was it good to broaden my reach beyond the Rails code that I am used to writing, I also got to experiment with WebPacker as well.

The final results are good and there was a few hiccups along the way in trying to copy the prompt from an input element that didn’t interfere with the user interface.

I did at one point create an input elemement on the fly to copy the prompt from when the button was pressed, but it jerked the screen up and down on tablet devices as it was copying the prompt. Horrible.

I decided to settle on using an input group so that you can partially see the prompt being copied. It’s not ideal, but it’s working and it doesn’t mess with the screen in anyway on different devices.

I’ve still got some adjustments to make for smaller devices like stacking the buttons on the home page so that they appear as a column but that will come later in the week.

Feels good to be starting another Rails project. I’m hoping this one runs for a while, but I really need to spend more time on throwaway Rails projects and learning more about things like ActionCable and Turbolinks.

Important things

Michael Wade provides another gem of being productive.

One important thing today, that will put this day far ahead of days when you hoped to achieve much but scattered your focus on trivial matters.

If You Do … by Michael Wade

Me? I’m just looking to complete that one important thing a day.

A Wishlist for Micro.blog

Micro.blog has been getting some great updates over the last couple of weeks and I’m looking forward to seeing more improvements to come. In using Micro.blog to migrate some content from another blog, I’ve been compiling a list of features I would like to see added.

Optional cross-posting to social media

One thing that puts me off post to Micro.blog more frequently is that I have my account linked to Twitter so that it syndicates my posts to Twitter. Lately though I’ve felt that I don’t want everything to be published to Twitter, but at the same time I don’t want to turn off the cross-posting to Twitter as every dollar helps keep Micro.blog going.

In the interests of being able to comfortably post more often though, I’ve disabled cross-posting to my Twitter account. If I want something to show on Twitter, I’ll post it there myself.

All this though leads to one thing I would love to see in Micro.blog and that’s the ability to opt-out (or in) to cross-posting with each post that I write. This is perhaps the biggest feature request of the three as it involves changes on the web client and the two native clients.

Posts searching

A couple of weeks I decided to import over 1700 posts from my Ghost blog to Micro.blog. The import went fine and after seeing the posts on my blog I was quite happy for everything to sit there. The only problem though is that the archive is difficult to navigate with such a large volume of posts. Most people might not have this amount of posts, but it would be nice to have a search feature on the posts page in the web client to allow people to find specific posts that they want to update.

Post length separation

Micro.blog allows two types of posts. Short posts that are 280 characters or less and longer posts that can have an optional title.

It would be great if these types of posts could be separated in the generated micro-blog site with class names in the CSS for each type of post. These same class names could be used in the custom CSS section of Micro.blog to to override the styling of posts depending on their length.

You don’t ask, you don’t get

Maybe these things are already being considered and maybe they’re not. I know Manton is always chiming in on his timeline and is very active on Micro.blog’s Slack channels as well. So this is me asking. So how about it @manton?

Considering some blog changes

I’m considering a few changes in the way I blog.

Micro.blog for personal stuff, quotes, snippets, links and the like.

Ghost for longer posts on working, ideas, products and writing.

It should be noted that Micro.blog was the trigger for this whole thing. A streamlined way of publishing small or large updates and then syndicating them through to other social networks and blogs. Damn it’s good at that.

I’ve started to think that my Ghost blog should be more of a professional site than anything else. I think that’s what it’s lacking. Longer posts that I’ve taken the time to write.

Curtis McHale’s blog is a great example of a professional site used for such a purpose.

My blogging habits have changed. From posts that are a mix of personal and work on the one blog, to using two blogs for a mix of both. Now I’m seeing that one blog is more for personal stuff and the other is for things I’m working on and working towards. The work stuff, the professional stuff. The boundaries aren’t clear on this at the moment though, but I think they should be.

@patrickrhone has a similar setup. A professional site and a personal micro-blog.

I’m 90% sold on the idea. The thought of moving more content around isn’t appealing though. It would be worth it in the end though. Right?

This bug on Ghost is driving me round the bend. Every character you type in is registered as two keystrokes so ‘t’ becomes ‘tt’ and pasting from the clipboard doesn’t work either. Why am I using Ghost again? 🤔

I'm Starting a Newsletter Again, With a Difference​

With a rising interest in newsletters, I started one last year. I tried to publish one long-form post a month as well as a collection of links at the end.

I intended to keep this newsletter going through the year, but after a few months, I decided that a newsletter of this kind wouldn’t be of any additional value that my blog couldn’t already provide.

Now I’m also blogging on a daily basis, so there’s no need for such a newsletter, and most likely I’ll never publish a newsletter of this kind again.

The newsletter experiment did not succeed in the way I thought it would, but although I closed the newsletter down, I learned something valuable from the newsletter.

Newsletters themselves are great, but the real value of a newsletter is the niche the newsletter caters to. This niche could be an interest, a topic, a market or anything like that.

This year I’m starting a small side project to build a newsletter aimed at a specific type of organisation who are looking to make more effective use of their digital presence and other tools to help those organisations.

I’m sending out a few invites to sign up for some local organisations that meet this criterion. I’ll then run the newsletter for a few months, collecting feedback on the first few editions. If the feedback is positive, I’ll keep going. If it's terrible, I’ll adjust the content to either suit the feedback or close the newsletter down.

I’ve already got a landing page up and running and I just need to dig into how to send a welcome email to each new sign up. Once done, I’ll be ready to accept sign-ups as they come. I’m not going to market this though until I decide that it has any lasting value as a product.

There are a few added benefits from this experiment.

I get some hands-on experience with running a newsletter using MailChimp. TinyLetter was an ideal service for my previous newsletter, but for this newsletter, I need a few more features like more options for formatting emails and their content.

I can spend a bit of time researching and writing content for the newsletter. I’m budgeting a fixed number of hours a month for this, and in that time I need to have the material ready to send and handle any replies or feedback. A test of time management and improving my writing.

The final benefit is that this is a testbed to a more significant opportunity. I’m using the newsletter to gauge the interest in a range of services that could help a particular market. This newsletter will be the on-ramp to that range of products and services and will determine if there’s any value in them.

I think I’ve found a niche market with this newsletter but only time will tell. I do believe that this will have a better chance of success than my previous attempt at a newsletter, but the only indication of this is whether organisations that sign up for this and find it useful.

RSS Update

It’s been a while since I’ve posted any updates on my blogging habits and where you can find me. Now is as good a time as any to update these.

Here’s the short version for those who just want the links.

Here’s the extended version if you’re interested.

Main blog

This blog continues to run but will focus solely on long-form posts now. It will also remain my central site where people can find me and get in touch.

There have been many changes over the years on this blog. I started doing smaller micro-posts a while back, but lately, I felt that perhaps this blog was not the right place for these posts. More on where you can find the new home for these posts later.

This blog will now only feature daily posts that sit around the 500-word mark and will become more of a regular logging blog. Expect posts on the topics of bootstrapping products, productivity, writing and a few other minor topics. The goal isn’t to be a blog only on a single subject, but instead, focus on topics that I enjoy writing about and am interested in. A public journal might be the aptest description for the blog now.

Microblog

Last year I started using another blog for shorter posts. I mostly use it for links, quotes, thoughts and the like.

I’m using a new blogging platform for this called Micro.blog. It’s a micro-blogging platform that allows you to not only easily run your own blog, but also has timelines where you can follow other Micro-bloggers and converse with them using replies, much like Twitter does.

As painful as Twitter is with it’s muddled timelines, I do still find it of some value. Micro.blog allows me to syndicate my content to Twitter without the added pain of having to post the content myself or get sucked into continually checking my timeline.

Another great feature of Micro.blog is that it posts your whole post as a tweet if it fits within Twitter’s 280 character limit. Otherwise it will post a link to your blog post on Twitter. You get the best of both worlds.

I’ll continue to post to my micro-blog at least a few times a day over the course of 2018.

Programming blog

My programming blog is seeing some changes over the next few weeks. The focus is on more content and I’m gradually getting there.

The DigitalBothy blog was largely ignored last year, but I’ve got plans for groups of content over the next six months and I’ve got a few posts lined up already for January. With a bit of work I hope to keep a head of my scheduled posts on this by a couple of months to give myself some breathing space.


So there you have it. A complete RSS update for all my digital homes on the Internet. Subscribe to whatever takes your fancy.

The Facebook Pages Organisation

This morning I got a text message from my kids' primary school. It was a reminder that this week was book week for the kids. Good stuff, I thought. I wonder where I can find more information on this? Reading on the message rounded off with 'check out the Facebook page for more info’.

Well, I did check out the Facebook page, but I couldn’t see anything. I don’t have a Facebook account (anymore), so I don’t even know if it’s a private post and only intended for those that follow the school’s Facebook page.

The school does have its own website, but it is rarely updated and close to being unreadable as it’s running on a stock Wordpress theme with a few slightly choice changes.

Did I find the information in book week?

I didn’t. I gave up. However, the lack of content isn't the issue here. The problem is the school's reliance on a single platform for communicating with parents. The school is just one of many organisations and businesses that choose to be more active on a Facebook Page than any other websites and social media accounts they might own.

The sad truth of the Internet today is that for many, it begins and ends with Facebook. There’s nothing else on the Internet that matters. If you don’t have a Facebook account, it doesn’t matter. It’s an appeal to the masses, and with most parents having a Facebook account the school has chosen to focus on updating its Facebook page.

The problem of the school using Facebook isn’t the problem though, it’s how they are using Facebook that’s the problem.

When an organisation chooses a single place to publish content they make it difficult for others to find that information. So how can organisations rectify this?

The answer is quite simple.

  1. Update their website frequently with relevant content.
  2. Share the content of the website to social media platforms.

That’s it. Sounds easy right? Well for the school it might not be so easy.

Schools are busy. Education of the kids come first and rightly so. If the teaching staff are working with the kids, then who’s going to ensure that the website is updated?

The headmistress? Office staff? The janitor? Classroom assistants?

All these people have other duties as well, not to mention the fact that they might not have the confidence to update the website. We know that the school can update the Facebook page when it needs too, but Facebook has teams of engineers and designers who have made publishing content one of the most natural things to do on the web.

When it comes to CMS like Wordpress however, it’s a whole different matter, and that may be the reason why websites, like the school’s website, are rarely updated.

When I look at other school websites in the area, my kid's school website isn’t alone.

Schools are a hive of activity. Not a week goes by when there isn’t something on for pupils and parents to get involved in. With all this action you would think that the school websites would frequently be updated.

Sadly not.

Facebook Pages is an easy way for many organisations and businesses to publish content, but like the school, they could be missing out the very people that want that information.

Whether you’re a school, business, a sporting club or any other organisation has a group of people following you, you’re content should start it’s publishing cycle on your own website. That’s the centre of your web presence, and as long as you invest in an excellent hosting platform and use a hosted solution or manage to keep the website up to date and in working order on your own, then you’re always going to have that space for people to turn to.

When you want to tell the world about something, put it up on your website and then share it to your social media accounts for others to see.

If you don’t like the idea of sharing to social media platforms, then start a digital newsletter that people can subscribe too. This is something that I would like to see the school implement as we’re still getting bulletins printed on paper and jammed into the kid’s school bags.

A weekly newsletter of the following week’s activities would be a great way of letting parents know what is happening at the school. And of course who doesn’t have email?

My kid's school isn’t alone in their dependency on a single social media platform. Many other organisations like it choose to focus their time and effort on a Facebook page and end up siloing their content away from others.

Don’t be a Facebook Page organisation. Invest in your own website and let that be the starting point where people come to look for updates.

Independent feeds

Tom Critchlow is re-discovering the glory days of blogging. The tags, the blogrolls and much more. The simpleness of it all.

There’s something about the humble hyperlink that gets subsumed by hyperfeeds. The archive. The curation of tags and categories. Blog series.

A few notes on blogging and independent feeds by Tom Critchlow

This is why I’m doting on Micro.blog so much. It’s blogging and syndication made simple. And RSS is much easier to follow than any hyperfeed.

Deep work vs distractions

Curtis McHale breaks down the process of getting work done in a world of distractions. I particularly like his argument for analog task managers over digital ones.

One of the big principles of Bullet Journalling, is that paper creates friction and this is a good thing. If it feels like a significant pain to move your tasks forward, then they likely weren’t worth doing anyway. You didn’t get to them the first time, so apparently, they weren’t important.

Just drop them.

Digital task managers make it far too easy to move things forward that we’re never going to do. You push the date forward and make the task a problem for future you. Maybe you take the date off and then continually have to decide during your review if the task is worth doing.

How Do I get Deep Work Done in the Midst of Random Priority Distractions by Curtis McHale

Back to GitHub

A few months ago I started a GitLab account out of curiosity. I wanted to see if there was anything that GitLab offered that GitHub didn’t.

In the last two weeks though, I’ve been moving my repositories back over to GitHub from GitLab.

There’s nothing wrong with GitLab, it’s an excellent source code management platform, and it has many great features. However, GitLab just didn’t make the grade that GitHub has set when it comes to source code management and hosting.

Heroku integration

Heroku’s pipeline integration is an excellent feature for managing the deployment process, but the only dependency for this to work is that you need to use GitHub for your source code management.

GitLab does offer their continuous integration tool, but it’s highly dependent on some different configurations and settings, all of which I don’t have the inclination to read up about or even research. To be honest, I would love to use GitLab’s tools, but the problem with them is that they require too much fussing.

GitHub, on the other hand, does one thing well and that’s host your source code for you. Sure you can also do pull requests, code reviews and many other great things but this is all nice to have besides being able to have one place to manage and host your source code.

Issue management

I have to say that GitLab’s issue management tools are very much on par with GitHub but where GitHub excels is their project, milestone and issue integration with pull requests. I find GitLab’s way of handling pull requests complex. I tried using them for a few months, but the whole process just didn’t feel as straightforward as GitHub’s.

Maybe it’s a familiarity with GitHub that stopped me from getting on with GitLab’s issue management tools. I’ve been using GitHub with some clients, and I have to say that managing their pull requests is a simple process.

A bigger community

There’s no doubt that GitHub has the more prominent community and despite attempts by others to create communities elsewhere it just isn’t possible to do so. It’s a bit like building another Twitter. There has been plenty of attempts, but nothing compare’s to Twitter when it comes to micro-blogging.

It would be nice if all GitHub, GitLab and Bitbucket could integrate with each other seeing as they all support using Git, but then what would be the incentive to pick one?

I’ve been hesitant about the number of businesses and organisations the use GitHub for their source code management, but as long as GitHub continues to support them and the rest of the GitHub community with great features and integration with others tools, then I don’t see a problem in sticking with GitHub.

More features for GitHub please

There’s no doubt that GitHub is a much bigger and better-suited source code management tool for me. I’ve used Bitbucket in the past, but even it can’t compare to the ease with which I can use GitHub. It’s time to hang up my projects on the GitHub website and start creating more projects there for people to see.

That doesn't mean though that GitHub has all the features that I need. I would like to see a few more options and features on GitHub though.

A repository template for labels and project columns would be a good thing. I’ve managed to replicate the labels I used for my Trello boards in GitHub issues as labels.

Another thing I would like to see is the assignment of labels to issues as I move them across project columns.

I would like to see the addition of an avatar for repositories. GitLab is on to a winner with their avatars for repositories.

I would also love to see greater management of repositories. Being able to group repositories into folders would make my job a lot easier and would also let me create a showcase folder where I could highlight all my best work.

Between GitHub, GitLab and Bitbucket there’s plenty of options for developers of all types for their source code management and hosting. For me though, GitHub ticks all the rights boxes.

Hyper terminal emulator, good but not great

A week running Hyper as my terminal has been mostly without incident, but I’ll be switching back to Terminal.

Hyper is a good replacement for Terminal or iTerm but it’s not a great replacement and doesn’t bring anything extra that I didn’t already have.

Also, I would rather rely on scripts and dot files for my terminal configuration rather than relying on Hyper’s plugins.

The value of silence

There’s value to be had in silence you know.

Late at night. A quiet office. No phone calls. No interruptions. The work can be broken down into small tasks and each task approached with an attention that respects its value. The big picture can be pushed into the distance and scrutinized later. This is the time for craftsmanship.

The Quiet Times by Michael Wade

A bleak future for the web?

The Trinet (Amazon, Facebook, Google) is a depressing prospect for the future of the web.

The War for Net Neutrality in the USA won a battle in 2014, but in 2017 we are seeing a second battle which is more likely to be lost. Internet Service Providers (ISPs) are probably soon going to dictate what traffic can or cannot arrive at people’s end devices. GOOG-FB-AMZN traffic would be the most common, due to their popularity among internet users. Because of this market demand, ISPs will likely provide cheap plans with access to GOOG-FB-AMZN, while offering more expensive plans with full internet access.

The web begain dying in 2014, here’s how by André Staltz

There’s still one thing that the web has in it’s favour. People are still willing to make it the best open platform it can be.

Google might have shut down their RSS reader but there’s been a number of replacements sprung up that people are willing to pay for like Feedbin.

Facebook might have the social internet sewn up just now, but people are continually challenging that with alternatives like Mastodon and Micro.blog.

Amazon might have the shopping internet market share, but how long can they continue that success? Retail is a never-ending cycle of new companies and stores trying to sell products. Can Amazon remain on top?

I’m optimistic that the web can still be and open platform for all. It comes from educating people about the sacrifices they’re making in using the Trinet’s applications and services and what the trade-off is. I suspect most people are not too bothered though, but there are people who are willing to support and work towards an open web.

Levelling up advice for programmers

One of many nuggets of advice for programmers who feel they are lagging behind.

The goal is become aware of the range of technologies available, and get a superficial understanding of theirs strengths (“React has a bigger community, but skimming the Vue tutorial was easier”, for example). This process can therefore be done over the course of a few hours, at most a day or two, during your work day in-between scheduled tasks.

Your technical skills are obsolete: now what? by Itamar Turner-Trauring

Last night I started down-sizing my Twitter account. Here’s a few things I did.

  • Deleted all lists from my account - I had a few lists for different things which are now all part of my timeline.
  • Switched to RSS feeds for organisations - Any accounts like Github are now in my Feedbin account. It has better control over the order and filtering of feeds than Twitter.
  • Purged who I was following - If unfollowed you don’t be offended. If I’m still following you don’t get too excited. I’m expecting to cull this list again.

I suspect that I’ll always have a Twitter account, but I’ll be interacting with only a couple of times a day. My main source of news and updates will be through other places like Instagram, Feedbin and of course Micro.blog

Taking stronger action

Gregory Brown is closing his Twitter account (@practicingdev).

In 24 hours I’ll be shutting down this Twitter account for good. I am OK, and will resume blogging at practicingdeveloper.com. A few months ago I tried to take a break from Twitter and (once again) failed. I don’t like that feeling, so need to take stronger action.

I’ve been following Gregory for a few years now. I like what he writes about and subscribe to his blog.

I have mixed reactions on his decision to leave Twitter. I’m sad for others that follow Gregory on Twitter but happy that he’s taken this step and will continue blogging.

I’ve often thought about deleting my Twitter account but I’m not quite ready to do it. I’m quite happy to let Micro.blog cross post what I need from here to Twitter for the time being. I think the time is coming though. The day when I say goodbye to Twitter.

25 smarter blogs

One again I’ve made Kurt’s list and he now he’s planning a surprise visit!

Family guy and freelance web developer, Matthew Lang publishes regularly from Paisley, Scotland on apps, life, and business.  Some day, I plan to meet him in person.  I just don’t plan on telling him when.  Want it to be a surprise.

25 Blogs Guaranteed to Make you Smarter

It would be great to meet up with Kurt. One of those few blogs I have followed for years.

My web development setup for the iPad Pro

While it was my intention to write about my web development workflow on my iPad Pro at a later date, one of my readers got in touch asking about how I use the iPad Pro in this capacity. Rather than hold off I thought it would be a good time to elaborate a bit on my workflow when using the iPad Pro for web development. What follows is still under review and isn’t my first attempt at using an iPad Pro for web development.

My first iteration on using the iPad Pro involved the Blink app and setting up a remote development environment on a DigitalOcean server. This took a while to setup but even then I found that using Vim as my text editor on a touch device didn’t work for me. So it was back to the drawing board and what follows is a second pass at putting together a web development environment for the iPad Pro. It certainly isn't final but it’s working for me now.

Another point to consider is that this web development environment is tailored towards Ruby on Rails development. A similar setup will work for other languages and frameworks providing you can run your development environment locally in iOS or on a platform like Heroku or Engine Yard.

Remote services

I'm using a number of remote services not because I need too just to be able to work on an iPad Pro, but because they're already part of my workflow on the desktop and I can use them on the iPad Pro as well.

Github

I’m using Github for source code management for a number of reasons like client familiarity, Heroku integration and a few other reasons. The main reason I'm using Github though is that it's tried and tested. You can't argue with that.

I've tried a number of source code management services like Gitlab and Bitbucket. While there are benefits and drawbacks to each service, Github is my preferred source code management service.

Heroku

Heroku has been my go to hosting platform for Rails applications for a long time now. I’ve tried other platforms and while they might be good fits for particular clients with specific needs I’ve found that Heroku has everything that I need for hosting most Rails applications.

I’ve already mentioned that github is good for Heroku in that it’s baked into the pipeline service that Heroku offers. Automated deploys are a great thing and using this in conjunction with Heroku’s CI tool is one less thing for me to configure.

Client side apps

With our remote services in place it's time to focus on the client side apps. Apps that focus on developer productivity have largely revolved around other things that developers do like project management, issue tracking and documentation but there are more text editor apps becoming available on iOS and I’m confident that there will be even more apps like this overtime.

Working Copy

I’m using Working Copy as my local Git client. I’ve been using this for a few months now. It's easy to setup and it works well in iOS 11 with split view and the drag and drop functionality. Working Copy also integrates well with GitHub, Bitbucket and Gitlab. So I’m not tied to using one particular Git source code hosting service.

Text Editors

And now the essential bit of kit for any developers toolbox, the text editor. I’m running two text editors at the moment with the hope of selecting just one of these when I’ve given each of them a thorough test.

Textastic

I’ve used Textastic in the past but only as a means to edit text files remotely. Using it now as a text editor means that it needs to tie in with Git, have the essential settings I need for editing source code and perhaps the most important feature of all, a nice colour scheme!

Textastic-and-Working-Copy-together

So far I’m pleased with its feature set and there’s been little in the way of blocks when it comes to workflow. Once I had Working Copy setup to track my Github repos, I was able to drag a branch into Textastic and start working. Changes to files are marked in Working Copy so that you can commit your changes as you normally would.

Textastic doesn't have all the preferences of a desktop text editor like Sublime Text but the essentials are there. Editor themes, font selection and size, and tab size and type. There's also find and replace and symbol listing which is handy for larger source code files.

Textastic is working well for me but the one thing that I would like to see a easier management of the files I'm working with. A command pallete like Sublime Text would be a nice addition.

GoCoEdit

GoCoEdit is a new addition to the test. While Textastic I have history with, GoCoEdit is fairly new and I’m still finding my feet with it. It shares many of the same features as Textastic though, so it's easy to get started.

GoCoEdit-and-Working-Copy-together

Like Textastic, you can drag and drop a repository from Working Copy into the app to get started working. Changes to files are marked in Working Copy for you to commit.

Editor themes, font selection and size and tab size and type are supported as well. There's also find and replace functionality as well. I've also found that in GoCoEdit there is a command pallete with limited functionality. You can manipulate text, find and replace text and save a file using this but there's not much else you can do with it.

I must admit, I do prefer working with GoCoEdit over Textastic. Saying that though there isn't much between them and both are more than capable of being all-day text editors if you find you have to work on your iPad Pro for the full day.

There are many things missing from these editors that would be taken for granted in a desktop text editor like Sublime Text but apps like this are still relatively limited in what they can do on a iPad. The most essential features are there though.

Adapting

If there’s one thing I’ve learned from all this is that if you’re going to use an iPad Pro for web development or any other form of work then expect to adapt to a new range of apps. Sure you’re preferred apps might be available on iOS but the interface does require you to adapt to the new environment.

Thankfully iOS is getting there with better features like the split view and drag and drop. Features that we’ve taken for granted in desktop operating systems for years but are only starting to see in operating systems like iOS.

My web development workflow has required some changes for the iPad Pro but it’s nothing drastic and a bit of learning on a new device isn’t a bad thing.

Thanks to Curtis McHale for reaching out to ask about this and giving me that much needed nudge to write.

I often struggle with content ideas for my freelancing blog. I should look towards my expertise more than anything else.

It doesn’t matter how narrow your expertise is. If you know better than anyone how to parse New York City subway schedules, I want you to write about it. If you’ve taught your cat to care for a Tamagotchi, I definitely want you to write about it.

Write an excellent programming blog by A. Jesse Jiryu Davis

Been a while since I did this.

One more technique I found helpful is keeping a “content ideas” file on my phone. Whenever a random idea pops into my head when I’m at the gym or about to go to bed, I go and add it to the file.

I think it’s time to keep a list of content ideas again.

I have to say. The unique way in which micro.blog allows posts and conversation in the form of replies is a brilliant idea. I was unsure of it at first, but having spent some time with it over the last few months, it’s clear to see it’s a great feature.

No newsletter and micro me

Yesterday was the last edition of my newsletter.

I won't go into all the reasons why I've stopped the newsletter but it really boils down to one thing that Patrick Rhone kindly reminded me of last night.

Saying no is saying yes to other things...

On other news I've embraced Micro.blog a bit more and have been posting frequently there. If I'm sharing any links or smaller posts they'll be found on my micro-blog which you can subscribe to through RSS or even follow me on there as well.

What about here then? I'll be reserving longer posts for here and they're going to be coming over time.

Learned my lesson today from buying cheap hardware. Bought a Bluetooth keyboard as a short term replacement for my Logitech K811. I thought it would do me at least six months. Only got a couple of weeks out of it.

Ordered an Apple keyboard this morning as another replacement. I should have just done this to begin with.

Started composing a support email to @manton about the custom CSS changes for my micro-blog site as it was taking a while. I was just about to hit send and then I noticed the changes finally went through. Disaster avoided!

Pro colour schemes

If you see me bashing away at text editor then you'll know that I'm a die hard Solarized fan. In the last few weeks though I've been using the Dracula colour scheme as well just for a little change.

Colour schemes for text editors and other software tools are a personal choice. There are benefits to the carefully thought out schemes like Solarized where you get a balanced set of colours that works in most conditions. That works for me. For other people though, they might just use a set of colours because they like the colours in the scheme. Everyone is different and has their owns reasons for what they like working with.

Over the weekend I read about a new colour scheme called Monokai Pro, which is based on the popular Monokai colours and it's availability as a colour scheme for Sublime Text 3. I installed the package and spent some time with it over the weekend. What's interesting about this colour scheme is that while the package is freely available for Sublime Text 3 to evaluate, it does require a license to use. The license is 10 euros to buy.

I debated with paying the license fee for what is essentially a list of colours, but when you look beyond that you see that the Monokai Pro colour scheme has a lot more to it than a colour scheme for your code.

An example of the Monokai Pro colour scheme

The colour scheme changes the interface of Sublime Text as well and there are a number of settings that allow you to customise how different parts of the Sublime Text user-interface look. A very professional finish.

In the end I decided that it was worth the money to buy a license for the package and bought one on Monday.

The most interesting part of this though is not the colour scheme itself but what it is. Yes it's a package for Sublime Text that people can install, yes it's a list of colours that you can change your interface too but other than that it's also a product, a micro-product if you like. And it's not the first product that I have seen that is marketed towards text editors like Sublime Text 3. A few years back I bought a license for the GitGutter package for Sublime Text and I've been using it ever since.

Just goes to show that products come in all shapes and sizes and shouldn't be discounted because of their feature-set or size when compared with similar "free offerings".

​Where I don’t publish

Last week I linked to Manton Reece’s dedication to staying the course for Micro.blog and the potential of blog-focused technologies when it comes to going up against the likes of Facebook.

There’s simply too many places to publish to these days and unless you have it automated or other people doing it for you (chance would be a fine thing), it can become overwhelming trying to post everywhere.

Here’s a few places where I don’t publish and why.

LinkedIn

I’ve have a chequered past with LinkedIn in much the same way as I have had with Twitter. It’s one of those things that is necessary to have but not always an enjoyable experience.

LinkedIn is a social network for the work-place but in truth it’s more akin to a hunting ground for recruitment agencies keen to place anyone they deem to be suitable for one of their roles. Okay, that might be slightly biased by my experience of LinkedIn but it’s the experience that I have had and I’m sure many others have to.

I’m sure it’s a great place for building your career’s network but I’ve yet to see the value in LinkedIn as instead of an introduction in person, through a phone call or even by email.

Anyway, the reason that I don’t post to LinkedIn or promote my content there is because I don’t have the time to read what other people are posting there. So if I don’t have the time to read what others are posting then why would others read what I am posting?

My usual routine with LinkedIn is that I log in, check my messages, check the notifications and then log back out again. I don’t read my timeline, look for others to connect with or anything else that LinkedIn has to offer.

It’s just not the place where I want to publish to. I could but I’m of the opinion that there’s many more people who use LinkedIn in the same way as I do and therefore it’s not the ideal place to share content.

Google+

This one’s easy. I don’t have a Google account.

There’s another reason though. I can’t remember the last time that I clicked a link that took me to a Google+ account or post. In fact I couldn’t even tell you what Google+ looks like as an interface. Is it even still a Google product?

When a social network like this doesn’t even trigger a visual representation of what it looks like then it’s clear that it’s no longer worth publishing to.

Facebook

Want to hear a secret?

I had a Facebook account for a few months there. Shocking I know. Mr “I don’t have a Facebook account” finally succumbed. Well, for a few months anyway.

I used it so that Ethan could get news and updates from his club’s junior section through their Facebook group. Now though my account has been de-activated and Ethan has his own account and manages this for himself while adhering to a few house rules on using Facebook.

The reason that I don’t share on Facebook is that I see Facebook as a time sink that I don’t want to cater to. Yes I’ve had an for few months but it came with a few restrictions. I didn’t hand over my phone number, I used a different email address for it and I didn’t install it on my phone, I put it on an iPad where it doesn’t ask for your phone number.

Once the usual email address and phone number goes in then the floodgates open. Notifications for friend suggestions, friend requests and who knows what else. I can do without that kind of hassle.

Medium

I’ve added Medium to the list of places that I don’t share content to as it has become something similar to Facebook. While Facebook is the place for sharing updates with family and friends, Medium has become the place to share your writing.

I’ve toyed with publishing content to Medium a few times, but while I have my own web site that I write for, I don’t see the point in having a separate channel on another network for something that I already do on my own.


What it boils down to though for me is time and energy. Where can I share content without spending too much time and energy sharing that content?

I share my thoughts and other junk here on the blog because I can control it and I also own the domain.

It’s also easy to manage the performance of what I post. I use Gauges to track traffic to the blog and it gives two metrics that are all I need. Page views and visitors.

Micro.blog and Twitter are two other places where I like to share content as it’s easy to share the content to them and I can automate the posting between the two.

Stay the course

I'm still grappling with Micro.blog but what's reassuring is Manton dedication to staying the course for the platform with an eye to the long term.

I plan to stay the course. I’m inspired by the work of the IndieWeb, which was founded 6 years ago and is still gaining momentum today. I hope that the solar eclipse photos posted to indie microblogs today will last through the next North American eclipse 7 years from now, and longer.

Flip the Iceberg by Manton Reece

Manton also includes a link to an article on AltPlatform that suggests blog-focused platforms could eventually become bigger than any of the existing social networks.

Open source tools like WordPress, 1999.io and Mastodon.social are creating many small networks of publishers, and popular tools like Twitter and Micro.blog could peer with them. If all of the social networks outside of Facebook interoperated at some level, they might eventually “flip the iceberg” and become the dominant form of social networking.

How Twitter, Micro.blog & Mastodon could team up to compete with Facebook by AltPlatform

With so many different outlets and tools out there it can become difficult to decide on where to focus your energy.

I'll cover my reasons for not publishing on the different social networks later on in the week.

Hello Ghost 1.0

It's been a long time coming, but it's finally here. A couple of weeks ago the first major update to the publishing platform Ghost was released.

I was on holiday at the time so I decided to leave upgrading until I got home. It's been a few days now since I got back but this morning I decided to upgrade the two sites I have running on Ghost, this one and my DigitalBothy website. The upgrade process itself was straight-forward. Warnings were provided to indicate deprecated helpers in the themes for each site, but aside from that I didn't have any trouble upgrading.

The new UI is a welcome change and includes a number of beneficial changes but perhaps the most important change is the editor itself. Gone is the side by side editing and preview panes (although you can still use this if you need to) and instead there's a single pane for writing that is editable and displays your writing in a better format. Bigger, bold text for headings, links highlighted and many other improvements.

This is a welcome update to the publishing platform and I look forward to spending more time writing for my blog than I have done recently.

The least loved great sportsman?

On a day where a Brit has won his fourth Tour de France, the focus seems to be more on Jordan Spieth's win at The Open. Why isn't Froome's success more of a talking point then?

There is no fluking a yellow jersey. Three weeks of physical attrition, of relentless mental calculations and stress, of staying ahead of a shifting mass of rivals ganging up to unseat you, of managing egos and efforts within your own team, of high mountains and cruel cross-winds.

And yet when Chris Froome won his third Tour last year, having run up Mont Ventoux in his cleats on his way to victory, he failed to even make the 16-strong shortlist for the BBC's Sports Personality of the Year.

Tour de France 2017: Is Chris Froome Britain's least loved great sportsman? by Tom Fordyce for BBC Sport

I was a long time fan of cycling. Ever since I first seen Miguel Indurain capture his Tour wins, I was hooked. Every year I would watch the Tour. Then I started watching the Giro and the Vuelta too. I love watching the big cycling tours. It was the highlight of my sporting calendar. Only the Super Bowl rivalled it in terms of how much I looked forward to it.

Then there was the Armstrong period, and then after that a number of incidents involving other riders. That's when I started losing interest in the sport. Despite those many years of following it, I just couldn't watch it anymore.

I tried watching a stage of the Tour this year but I couldn't keep my focus on it.

I admire Froome's success, I can't help but think though that perhaps there are other factors in this. Is the UK is falling out of love with cycling? Do we have success fatigue with cycling? It's a terrible thought considering a British rider has achieved his fourth win of the Tour, but with all the recent success that Great Britain has had with cycling, perhaps it just doesn't have the same appeal it used to have.

Perhaps the Tour de France needs a change of format to make it more interesting? One thing that usually happens in the tour is that the winner of the yellow jersey holds onto the jersey for a number of days before the last stage of the race. The last stage of the tour is frequently a foregone conclusion. Does it need to be changed up a bit to make it more difficult for riders to hang onto the yellow jersey?

I don't know why Froome isn't getting more spotlight in the media for his success.

All I know is that my preferred sport to watch on the day is golf rather than cycling. So I settled down today to watch what I could of the golf and enjoyed every minute of it.

It's a tribal thing. I used to be part of the cycling tribe, but recently I started enjoying golf more. I still cycle every now and again but it just no longer has the pull that it had in the past.

Open source Medium

Dave Winer ponders on the possibility of an open source version of the popular blogging platform Medium.

What if Medium had been designed from the start to be the Mother Node of a network of clones. The basic software would be available for installing on your own server, but if you want, there's a place you can put your document today, now, quickly, where everyone will be able to read it, now and for the foreseeable future.

What if Medium were open source by Dave Winder

This is the kind of thing that I can get behind. I like Medium's approach to easy publishing but I dislike the fact that everything is on their network.

Exploring alternatives to GitHub

I've been a user of GitHub for a long time now. Ever since I started my career in Ruby on Rails I've had a GitHub account.

I'm looking again at alternatives to GitHub mainly out of curiosity. There's been some improvements to GitHub over the last few years and new features are gradually coming out but there are other options out there.

I did move some private repos to BitBucket a few years ago, but due to the lack of any extra features I moved these repos back. BitBucket just didn't have anything of added value that would keep me using it.

I tried GitLab a few months ago but I didn't really give it a fair go. I spent a couple of weeks using but I didn't really dig into it too much. I created my account there again to give it a try. I've been using it now for a week and I've moved a number of private repos over from GitHub. The nice thing is that as well as my repo GitLab has moved over my issue list for each repo. Another thing I don't have to worry about moving it across.

It's still early days to make a final decision on this but I've been impressed with not only what GitLab does at the moment, but the pace in which they are releasing new features.

The best thing and worst thing about GitHub is its community size. A lot of developers use only GitHub for source code hosting and although some people might see this as a good thing, it's like saying that Facebook is the only social network platform out there. Yes, there are a lot of people using GitHub but there are alternatives to it and I'm always willing to explore the alternatives to any development tool that I use.

Once I've spent another few months using GitLab I'll probably have a final decision on where I'll be hosting the bulk of source code. I won't be closing down my GitHub account if I do decide to use GitLab for hosting my source code. I still need a GitHub account for client work, but that's all it will be used for.

Time to read

Just as it is important to set aside time to think, it is important to block out time for reading. If you believe that such time will be available later in the day, it is likely that you are mistaken.

Reading Time by Michael Wade

I'm slowly getting back into a lot of things in the last couple of weeks. Blogging, writing and even reading. Churning through a few books at the moment, but plans are in place to make reading a bigger habit of mine in the future.

Subscription pricing for Day One

Day One's change to subscription pricing model is taking some flak but I think it's a good move for them and ensures that it will be around for a long time to come.

Subscription pricing isn't new to apps, but it's on the rise and this is largely in part because upgrade prices alone for apps are not sustainable.

A great example of app pricing in my book is the Todoist app. While the Todoist app itself is free, they also have a premium subscription which really adds value what you get from using Todoist. It's subscription models like this that are the way forward. Paying for the software you use on a regular basis. In a lot of cases the pricing is very reasonable and I certainly wouldn't argue over paying between $20 and $50 per year for software that I value and use on a daily basis.

David Sparks rounds up the changing landscape of app pricing nicely.

The traditional model for productivity apps was the upgrade price, where developers released a new version every year or so and everyone paid a reduced fee upgrade price. I know the App Store has made improvements over the last few years but, having zero inside knowledge, I can’t help but feel we will never see upgrade pricing in the App Store. In the meantime expect more quality apps to go to the subscription model and, if they are apps you love (or even like), I’d encourage you to support them through the transition.

Productivity Apps and Subscription Pricing by David Sparks

Deep vs shallow

It seems that a lot of the things I'm reading online point towards long-form blogging again.

Gregory Brown sums up the change nicely in way I didn't think of.

Instead, I thought about how it might be nice to have a couple hundred blog posts rather than thousands of tweets. How it might be nice to build a few dozen deep relationships with people who read my stuff here, rather than hundreds of shallow relationships in 140 character bursts.

Bye Twitter, Hello Blogging! by Gregory Brown

Deep relationships through blogging. I've already met a number of great people through my blog. It's about time I started writing here again to keep those ties going.

Cracking open Vim again

It's been a while since I took another stab at learning Vim. If you don't know what Vim is then all you need to know is that it's a major geek out text editor. Savvy?

Each time I've tried to learn Vim though I've started with an existing Vim configuration file. Getting up and running from a blank file just never appealed to me. The problem starting with another person's configuration though is that while everything is there that you need, there's a huge number of commands and shortcuts configured that in the beginning seems a rather daunting task to remember.

This time I've started with a blank slate so that every time I need to customise something in Vim I make the change in my configuration file to fix the problem and move on. Needless to say it's taken me a while to get the configuration file to a point where I would be happy doing client work with Vim as opposed to Sublime Text.

The surprising result though is that while I might be working a little slower than if I had been using Sublime Text, I'm actually learning more about Vim than I ever did before.

I'll report back in 3 months with an update to see if using Vim has stuck this time. I'm optimistic that it will this time, although I have been caved in the past.

iPad Pro for software development?

Apple's App Store Guidelines now allow executable code in educational apps and developer tools.

Might not be a deal breaker for many, but I've longed to replace my raging MacBook Pro with a combo of an iMac and an iPad Pro. With the recent updates to the iMac line I can finally purchase one with updated specs, but the news at WWDC didn't make me think that I was going to see better development tools on an iPad Pro anytime soon.

The new guidelines in the App Store though mean that better software development tools for the iPad might be just around the corner.

Never under-estimate the simplicity of a problem. Fixed a Rails 5 upgrade by updating the web-console gem to the latest version.

Slow down

Execupundit reminds us to slow down.

I find that I get more work done by slowing down. "Mindfulness" becomes a signpost. Taking pleasure in small achievements provides a flow of motivation.

Slow Down by Execupundit

Weekend Report #10

Just when I think we're out of the woods with winter, Drew gets a nasty cold. We skipped his Taekwondo this weekend as he was loaded. Thankfully he started to get better on Monday and he's back to his usual cheeky self.

The weather is finally taking a turn for the better which means there's normally plenty of work to do in the garden. This year its less work than usual to thanks to Victory Gardens & Landscaping who came out last week and did a big chunk of work to tidy the place up. Just got the new BBQ to assemble and we should be ready for plenty of outdoor grilling.

Sunday was another day on the road for me and Ethan as he was playing in the second round of his junior flag challenge at East Kilbride Golf Club. Conditions were great and he really looked a lot more settled than he did last week. Highlight of the day was his eagle on the 7th. He finished the nine hold round with a score of 44 which he was delighted with despite a couple of putts that just lipped out. Next round is in a couple of weeks, so Ethan gets to play in the medal next Sunday at his local club which means I can put my feet up for the day!

The integration of RSS feeds means that Micro.blog might just be the perfect place to host an account for your blog roll. A curated list of RSS feeds presented as your own personal magazine.

Coffee & Code

The blogroll has been chirping about coffee shops. First it was Future Lawyer:

First, some of us refuse to pay 3 to 5 dollars for a cup of coffee, so we don't spend a lot of time in Starbucks. But, we do have lunch at Panera Bread, and we don't use the public WiFi there either. At least, we don't use it without first tunneling through a VPN.

Why Lawyers Should Never Use Starbucks WiFi by Future Lawyer

Then Cultural Offering.

I freely admit that I dislike Starbucks. On the few of occasions I have been in the chain - airports, a meeting or two, and when an employee needed to throw up (seemed the perfect spot) - I found myself wanting to tell the students to try the library and the adults to try a tie and a home office.

The shoes bother me the most by Cultural Offering

Then Execupundit.

I like Starbucks. It is a convenient and comfortable meeting spot. I ignore the computer users who are tapping away at, no doubt, the next War and Peace. The Americano is a nice watered-down version of their strong coffee. When ordering I still use small, medium, and large rather than their menu lingo. That immediately signals "out of touch" to the staff and thus is desirable.

The Starbucks Experience: In But Not Of by Execupundit

I'm fortunate enough to have a coffee shop in town that isn't Starbucks, has plenty of seating and has some damn good coffee for those mornings when I need it to make the code flow.

And yes I also say small, medium or large.

Weekend Report #9

Is it April already? Where did March go? Yip, it's been one of them months where it's over before it's even began.

The last three weeks have definitely been like this. I've been busy working and we've been out and about a bit more now that the good weather is with us and getting the boys outdoors isn't such a problem.

Saturday was errands day. Heading to a few places to get some ideas for the garden. We invested some time and money into the garden last year and this year we're ready to finish most of the heavier work in the garden. I can't wait for the day that I can just put me feet up in the garden, fire up the grill and start on a couple of cold beers.

Sunday was Ethan's return to weekly medals at Paisley Golf Club. He's spent a fair amount of time over winter putting in extra practice and it's starting to pay off. Once the course dries out a bit more though and he's had a few more practice rounds he should start to see his handicap fall.

Easter holidays have started for the school kids. I took Ethan up to Paisley for a round of golf. Weather was favourable (it wasn't raining) and the course was in great condition. Ethan played very well as always. I was a little slower to get started and couldn't hack the pace at the turn. By that point my back and arms were tired. We're heading back out on Wednesday again, so hopefully I'll be a better playing partner!

Weekend Report #8

Again, this was sitting in my drafts. Doh!

The weekend was something of a blur. After a trip down to see a client and a few days back at my desk catching up, I was glad to have some downtime with the family.

Saturday started as it always does with Drew's Little Tiger Cubs class. As always he's slow to start with the warm ups but as soon as they get to the kicking and punching he's front and centre! After that it time to head home as Jen was going for the day so it was just me and the boys. Drew was invited to a birthday party next door so I took him through for that will Ethan entertained himself on the Playstation.

Sunday was Ethan's first group lesson with the rest of the Juniors at Paisley Golf Club. Even though he's hardly had a chance to play on the course over the winter, Ethan's been improving his swing over the winter and this will be a big year for him. His lesson went well and he learned a few things the hard way but it's sometimes the only way you learn.

Sunday morning was also my first jaunt back out on the mountain bike. The first bike ride of the year is always rubbish. You find out it now that your bike needs a service or new parts and you're also getting back on the bike after a number of months since the last time you were on it. This year was no exception.

With a slow puncture at the rear I decided to top up the wheel with air to see how slow it was. Unfortunately my pump split in two and couldn't get any air into the wheel. I had enough air to get back to the card, but it did cut my ride significantly short. Added a new pump and a new rear tyre (it is blading) to the bike shopping list.

Sunday afternoon saw Drew heading out for a Little Tiger Cubs assessment. He's been attending the classes for a few months now and he's earned the stripes for his belt. At his assessment he earned his next belt up and walked away with a certificate.

My kind of blogging

The no-pressure kind. Manton Reece explains.

I love that blogs can scale from the trivial to the important. The microblog post about what you had for breakfast. The half-baked rant about something you’re passionate about. And sometimes, the rare essay that really hits the mark and makes people think.

No-pressure blogging by Manton Reece

I've been struggling to blog more in the last couple of years. Partly that's down to me trying to produce too high a level of content. I should just blog what comes to mind. It won't all be great, but every now and again there will be a post that really stands outs.

Observations ...

... from our man in Arizona, Michael Wade.

  1. The best way to create magic is never to rely upon it.
  2. Be wary of those who think everything is driven by money.
  3. The most important conversations are those that are never held.
  4. Think more of your habits than of your plans.

A Few Observations by Michael Wade

Click through the rest of the list.

For a long time I've wrestled with a number of different terminal apps and tools in the hope of improving my productivity at the command line. Initially I used iTerm2, a terminal emulator for macOS, as my preferred terminal app. Then I also started using tmux, a terminal multiplexer, on top of that. Then came along Vim, the open source text editor, and I started using that as well.

This was the first time in a long time that I had started using all three again. The benefit of using this combination of tools is that I could run both my command line and text editor within a single app and very rarely have to switch away from it.

One huge pain point I couldn't get round though was the simple act of copying and pasting text between Vim and other apps. Despite a number of attempts to get it working I've decided to call it a day on this trio of tools.

  • Vim is a great text editor, but to be honest I'm faster coding with Sublime Text or even Atom for that fact. Yes, I use the mouse and yes I want to have features and plugins that don't require me to mess about with command line.
  • tmux is great for managing different command line sessions within a single terminal emulator but I don't think it's a necessity. Lately I've been doing away with split panes and using multiple tabs.
  • Which brings me to iTerm2. As great an application as it is, there's nothing that it offers that I can't get from Apple's own terminal emulator, Terminal.

So I stopped using Vim, tmux and iTerm2 and fell back to using Terminal and Sublime Text.

I've went full circle from starting with the basics, adding more tools to the stack, before reducing the tools I need for the terminal right down to the absolute basics. One app for the terminal and one app for editing source code.

I can see the case for using tools like tmux and Vim. Maybe you spend most of your day in a terminal as a system administrator and you're faster with Vim. Maybe you need to manage multiple servers on a daily basis so splitting panes in tmux suits your line of work. I get it. I understand why these tools exist and why you would use them.

Sometimes though scaling back is just as much a benefit.

The Weekend Report #6

Apologies. Missed a couple of these in November and December!

After the feasting and festivities over Christmas, the New Year weekend was a chance to get some sense of normality back.

Me and Jen took the boys to the ten pin bowling on the Friday morning just to do something different. Poor performances by all except from Drew who won both games!

New Years Eve was a quiet day and a chance for the boys to mess about with their presents.

New Years Day involved dinner at my parents house. While most people might have ordered their steak pie from their local butchers (not a bad option by the way), my mum opted to make hers from scratch. It went down a storm, especially with the boys who love their steak pie.

To round off the long weekend I took Ethan up to the golf club for a few holes. The weather wasn't great but it didn't stop him putting in a solid nine holes. I'm starting to find some consistency as well which is good.

Clearing the decks

With the new year just around the corner, it's always a good time to clear the decks and start afresh. A few things I'll be doing today:

  • Organising my desk
  • Preparing my new Hobonichi Techo
  • Planning out January in my bullet journal
  • Reviewing clients and their products
  • Reviewing my digital footprint
  • Reviewing my now page

If you're at a loose end today, clear the decks. It's as good a time as any to start getting ready for a fresh start.

The future adds a zero

Except that messages now travel 50 times faster than they used to, sent to us by 100 times as many people as we grew up expecting. Except that we're spending ten times as much time with a device, and one-tenth as much time reading a book.

Here it comes. The future adds a zero.

Times 10 by Seth Godin

Evernote - Time to move on?

So apparently Evernote employees now have the ability to read the notes in your Evernote account. There is an opt-out feature in the settings but I wonder how many people will do this?

I started using Evernote when it first came out. Since then I've closed and re-opened my account a number of times. To me Evernote feels bulky and awkward. I've tried to use it a number of times, but each time I find the product too difficult to use. I last tried Evernote just over a year ago. I went for a couple of days before I closed my account again.

Evernote started it's life well as a product but in recent years it has taken a lot of criticism for it's usability, support, pricing and now it's stance on privacy. With the growing criticism you have to wonder if there's life left in the Evernote product and whether it will stand the test of time.

It's starting to look like Evernote has lost its lustre, which is a shame. I know a few people that use it daily to help them run their business.

If I was still an Evernote user today then I would be considering looking at alternatives. I use Simplenote myself for notes and there's also Bear which was named one of Apple's best apps of the year in their App Store.

Whether you're an Evernote user or not, you always have to consider the lifetime of the products you use. It's a small percentage of products that stand the test of time and maintain their status as a wonderful product.

For everything else you have to ensure that if your product of choice folds, you can take your data elsewhere with minimum fuss.

Paper Is Not Broken

Patrick Rhone imparts some much needed opinions on the argument that paper is broken.

But I’m here to tell you that paper is not broken. I refuse to accept that premise because it can’t be proven. In fact, the opposite is far more likely. I don’t have to back it up, charge it’s battery, change it’s format to be opened by something else once the app maker goes out of business, or let it co-exist on a device with a hundred other things competing for my time and attention. It’s a technology that’s a couple of thousand years old and has worked reliably, virtually unchanged, in that time. It’s better than any digital solution in fundamental ways. Not the least of which is the fact that it has been proven to last for a thousand or more years given the right care.

Paper is not broken by Patrick Rhone

Another argument against digital devices is the fact that many digital devices like this pride themselves on being thin but then provide inferior ways of organising pages within this thin device. They might offer search facilities which usually takes longer than I can find a page in my own notebooks.

Notebooks on the other hand have depth and visibility. Although closed I can see at a glance all the pages in my notebooks. If marked right I know right away where everything is without even opening it.

The MacBook Pro - Great for Hackers

It struck me odd how so many people took to the Internet announcing their disgust that the new MacBook Pro isn't made for developers. One particular blog post stood out amongst the rest as just being laughable. The glaring fact is that no-one had used it yet and were basing their opinions on a suggested outcome.

Glad to see that Adam Geitgey reserved his opinions until after he used it.

I’m not here to change your mind about the MacBook Pro. Yes, it’s probably too expensive and more RAM is better than less RAM. But everyone posting complaints without actually using a MBP for a few weeks is missing out on all the clever things you can do because it is built on USB-C. Over the past week or two with a new MacBook Pro (15in, 2.9ghz, TouchBar), I’ve been constantly surprised with how USB-C makes new things possible. It’s a kind of a hacker’s dream.

The new MacBook Pro is kind of great for hackers by Adam Geitgey

Nicholas Bate reminds us that Mondays are for those who take action.

Are simply there to sort the leaders from the followers, the serious from the not-so-serious and those who are taking action from those who are waiting. Love your local Monday.

Why Notebooks Work For Me

This week I've highlighted the three notebooks I am using to replace my task manager app.

The reason that I find that notebooks work so well is because while notebooks are more versatile, they also need input and I don't mean of the mouse and keyboard kind.

Digital task managers have a number of features that allow you to take shortcuts. I took these shortcuts as a way of avoiding planning and reviewing my next block of work. I simply let my task manager do it for me using features like lists and tags.

I can't take shortcuts with a notebook. I can't quickly filter out a subset of tasks. I can't move a group of tasks in a few seconds. Given time I could do these but just not quickly. And that's the reason I find that notebooks work so well.

Managing your tasks using notebooks means that you need to spend more time planning, reviewing and making decisions about what's important.

They need that little bit of extra work. Work that I think is worth putting in.

So far, everything is going well. The only significant change was the introduction of the bullet journal, but I've already have plenty of use through my other notebooks to make the switch to the bullet journal easy.

To find out more follow Patrick Rhone and Belle Beth Cooper who are real notebook aficionados. Both update their blogs on a regular basis and feature posts around notebooks and how to use them. Patrick also has a website called The Cramped that you might revolves around analog writing.

When it comes to getting things done the focus is always on what needs done and when you can do it. Without these two you would end up with the wrong task getting done at the wrong time. You'll eventually find yourself just getting nowhere fast.

These two task variables are important but just as important is the time you spend looking at the progress you have made. In order to do that you need look past more than just the tasks you done.

I look to the tasks that fall into two categories:

  1. The difficult tasks that presented problems but were eventually done.
  2. The tasks that I enjoyed doing and that made a significant impact.

It's these groups of tasks that make up the bulk of my final notebook in the process, the logging notebook. When it comes to looking back what you've done, you need to filter out the important tasks so that you know you are making progress. This is what I use the logging notebook for.

I'm using a Hobonichi Techo planner as my logging notebook. Persuaded by Patrick Rhone and Mike Rohde I bought one at the end of last year.

The notebook itself is fairly small and the paper although thin, is of superb quality. This makes it ideal for a broad range of writing instruments. I mostly use a Lamy Safari for this notebook, although I have done a few sketches with other pens.

Rather than using it as a planner, I record the big wins for the day and the tasks that I finished that made a real difference. Those "Yay me!" moments when it's more than just another task done, it's a significant amount of progress made.

The year is drawing to a close and I'm glad to say that the Hobonichi Techno planner has been a great investment as I use it daily. Next year's is already sitting on my desk waiting to log the next set of wins .

You can use any notebook as your logging book. The most important thing is to log the wins. It adds a much clearer view of the progress you've made and also has the benefit of providing a much needed boost when you feel you have been slacking.

Great to see the city officials in San Francisco and Seattle responding positively to the need for more bike lines.

When two cyclists were tragically killed in hit-and-run accidents this past summer, a group of anonymous urban activists known as the San Francisco Transformation Agency erected a set of protected bike lanes using traffic cones. Usually such guerrilla interventions are temporary. They raise awareness but ultimately get taken down by municipal authorities. But when the same group recently (and illegally) installed a set of soft-hit posts alongside Golden Gate Park, the city reacted by moving to make the change official.

Guerrilla Bike Lanes: San Francisco Makes Illicit Infrastructure Permanent by Kurt Kohlstedt

Time to Ditch Time Zones?

A fair argument about abolishing timezones and the whole planet using Coordinated Universal Time. I like this reason the most though for ditching timezones.

Perhaps you’re asking why the Greenwich meridian gets to define earth time. Why should only England keep the traditional hours? Yes, it’s unfair, but that ship has sailed. The French don’t like it either. “The U.K. would turn into a time theme park,” suggested an English Twitter user, John Powers, “where you could experience 9 o’clock as your grandparents knew it.”

Time to Dump Time Zones by James Gleick for The New York Times

The dust has finally settled from Apple's announcements. The world has returned to what it once was, but for a moment there it seemed that the drama was world-ending. Almost apocalyptic in nature. Only the release of an Apple product could have sparked such hype and drama.

So what was all the drama about then?

It was about Apple's new addition to the MacBook Pro, the Touch Bar. In case you don't know Apple have replaced the top row of keys on their keyboard with a touch bar. Kind of like a long and thin touch screen.

Looks good doesn't it? I thought so. And while I wasn't blown away from Apple's announcements I wondered how long it would be before I needed to replace my own MacBook Pro. Would the Touch Bar affect my decision to buy? That's a post for another day though. As a rule I don't buy brand new tech within a few months of it's release date. I do make exceptions, but not that often.

Anyway back to the point of this post. The Touch Bar and the lack of escape and function keys.

Most people will have looked at the new Touch Bar and thought, "Cool, I can see which emoji to use" or "My photo and video editing might become easier". Me, I just seen a new form of touch interface that may in time become useful. In fact, 1Password have already announced they'll be using the Touch Bar to enhance their password management product. Great stuff.

Not everyone was happy though. We developers are a fickle lot. If we're not jumping from one Javascript framework to the next we're arguing about which text editor is best. The world might be ending but by God we'll get our argument across as to why our text editor is the best before it happens.

And that was the start of the drama. The escape key is missing. Well not gone, just not always there. And that didn't go down well with a lot of people. Mostly people who are users of Vim and Emacs from what I could see. I say a lot of people, it's probably a small minority but on the Internet those that shout the loudest often get the stage for a longer than normal period of time. First it started with the tweets, then the blog posts followed. It was car crash television. You couldn't help but watch.

I honestly can't see what the problem is and here are two reasons why.

1. I rarely use the keyboard on my MacBook Pro

I have a laptop as it suits my needs to be mobile if I need to visit a client but that's not often. Most of the time my laptop sits on my Griffin Elevator Desktop Stand. I use a Logitech K811 keyboard and an Apple Magic Mouse for all my input needs. And yes my keyboard has an escape key. Here it is.

In fact I'm pretty sure that any developer who values their long time health will have a similar set up. If you're using a laptop all day to do your work then I would seriously question how comfortable that is.

2. I haven't used my text editor on the new MacBook Pro

When Apple were handing out the new MacBook Pro for field testing they must have missed my name on the list. Well, not really. They don't do that. In all honesty though I haven't used the new MacBook Pro with the new Touch Bar yet so I haven't the faintest idea how my preferred text editor will work with it. It might work straight out the box, it might not. I just don't know. And neither do the band of dis-gruntled developers who are doing the complaining. Ask any of them if they've used it yet. I doubt it.


The Internet has become the platform of choice to vent your anger, your frustration even your hate if you're that way inclined. Like a tabloid newspaper, the Internet loves drama and it thrives on it like a virus. It spreads quickly. Even the tiniest of arguments can blow up into a full on international shit storm. And with it comes the drama. People making assumptions that this company is doomed or that product is evil.

If I had a filter to block this shit I would. I would love too. I'm sure most of you would as well. But we can't. And it's getting worse. To the point where I'm considering scaling my back my time spent on social media. It's become counter-productive to use.

I can forgive the tech journalists for their sensational click grabbing headlines but even they didn't get all dramatic about Apple's announcements. They reported it, analysed it and made some conclusions. They might be right, they might be wrong, but they did their job. They provided some short form coverage of the announcement.

As for the rest of the Internet. Enough. Enough fucking drama. Unless you've used said product prior to it's release then save your attention grabbing, whining post until you have used the product.

Upon a friend's recommendation we took a break last year to Aviemore. We had such a great time last year we decided to head back again this year. We managed to do a few things different this year and the scenery was wonderful as always.

My first ride round Loch an Eilein on a murky and gloomy afternoon.


A walk through the elevated trails of Landmark Adventure park.


The boys trying to spot a few red squirrels.


Another ride round Loch an Eilein. This time before the sunrise on Thursday.


Attempted a panorama shot during a ride. Turned out quite well.

What started as an ordering application for a client is slowly turning into a full-blown ERP Rails application. Quite a challenge.

Dictators beware!

Good to see technology being put to good use.

A Swiss journalist has created a Twitter bot that tracks dictators’ flights to and from Geneva, as part of a crowdsourced effort to shed light on potentially shady dealings. The bot, called GVA Dictator Alert, tracks planes registered to authoritarian governments and automatically posts their arrivals and departures to Twitter.

This Twitter bot is tracking dictators' flights in and out of Geneva by The Verge

Naughty dictators!

Share Your OPML?

Dave Winer may be kick-starting an old service. Share Your OPML.

In 2006 I had a web service called Share Your OPML. It was fun. It was a way to see what other people were subscribed to, for news and podcasts. But we hit scaling walls, and the project fell into disuse, and eventually I took it down.

Now we know how to scale much better than we did then, and the community is growing more slowly. So I thought it would be interesting to try it again and see what happens.

So here's the question -- if I put up a web app that asked for your OPML would you upload it?

Would you share your OPML, again? by Dave Winer

I'd love to see this happen.

Gap in the Themes Market?

Over the last few weeks I've been looking at themes for Wordpress and Ghost.

Now it's easy to say that Wordpress has a clear advantage over Ghost. It's a CMS that's used by millions of people all over the world. Wordpress has been around since the early days of the Internet and it's still the goto CMS for many people and rightly so. It's extensible, stable and has thousands of themes available for it.

The Wordpress marketplace for themes is huge. There are thousands of themes available for all different types of sites. From minimal themes for bloggers to highly customisable themes for organisation sites. There's something for everyone.

Ghost is still relatively new when compared to Wordpress and while it is more specifically a blogging platform as opposed to a CMS like Wordpress, it's still gathering a steady number of fans.

The Ghost marketplace for themes isn't so big but that doesn't mean there should be a shortage of themes.

There are a number of themes available but there's two problems I see with most of the themes available for Ghost:

  1. Image heavy themes - It seems that most themes for Ghost see having images as a neccessity in their theme. While looking for a theme for my own blog I found it difficult to find a theme that didn't feature a full width banner and images for every post. Their themes probably do allow imageless posts but they never show that in their previews.

  2. Out of date themes - Ghost is on version 0.11 but many of themes available are falling behind in terms of compatibility.

It seems there's a gap in the market for Ghost themes that don't need images everywhere and stay compatible with the latest versions of Ghost.

The number of people using Ghost isn't in the same realms as Wordpress but I do find it much easier to use as a blogging platform. Ghost as a product is generating revenue and with an open source option available, there's definitely a growing number of people using it.

With the right marketing a designer/developer could do well with a number of themes that focus on minimal blogging rather than images.

New Daring release

I released a new version of the Ghost theme I use for this blog last night.

In an effort to kickstart the blogging habit again, I looked at my blog and ways that I think it could be improved in terms of readability.

Improved readability

The previous version of Daring had a default font size that was far too small. Even on my MacBook Pro at 1280px wide the font size difficult to read. I've bumped the default size up to help.

I've also made the width of the content area slightly wider and reduced the padding of the content area. I'm trying to use as much width as I can without pushing the sidebar column and the content column too close together.

More themed elements

I've also included a number of themed elements for the blog. The bar at the top is nothing more than a bit of decoration on the page and there is additional styling for submit buttons you might have on a contact form.

This is just another step towards producing a quality Ghost theme for people that don't want to use huge banners and images for their blogs.


After a week of considering closing this blog and starting afresh elsewhere I've decided against this move. I'm trying to kick-start the blogging habit for October and so this week is a spell of light blogging to get me started. Expect more frequent writing here from now on!

Building a page of local and remote freelance designers and developers. I would rather refer work to someone else than just turning it down.

Time to breathe

A little reminder that we all need time to breathe.

One of my favourite words has always been ‘desultory’ as coupled with the idea of pottering about and doing things for pleasure.

Breathing Space by Steve Hodgson

When was the last time you gave yourself some breathing space?

And yes it's on the playlist too.

The Weekend Report #4

Still taking it easy from my back spasming out last month. It's put a lot of things on hold but I'm getting back to normal. As a result there wasn't much to report from this past weekend. It wasn't completely uneventful though.

My mum and dad celebrated their Ruby wedding anniversary with a meal at our favourite Italian restaurant in Paisley.

Jennifer and Drew nose to nose

Little Drew had been suffering from a cold and cough in the last few days but he rallied round for the meal. He'll do anything to get some chips and ketchup!

Second thing I noticed is how I would have written the poor code now with all the experience I’ve picked up. #learningdeveloper

Nothing marks your learning progression with a programming language than reviewing older code you wrote. #learningdeveloper #end

First thing I noticed was all the instances of poor code I had written. Bad design, object naming, syntax use etc. #learningdeveloper

My Web Development Tools - 2016 Edition

The world is going gaga for mobile apps. They are seen as the most accessible form of software and the market for them has moved at a considerable pace. The only problem with mobile applications is that only the bigger companies can usually afford to have their apps available on each of the different mobile platforms. This isn’t a problem for the web though.

For me the web is still the most accessible and reliable platform for applications there is. Using just a single interface (your browser) you can access millions of products and services. Here are a few I use every day to help with my web development work.

Github

Despite a flutter with BitBucket it’s hard to move away from Github. Their product is delivering features on a steady basis and just about every developer has a profile there. The Github community is growing and with more organisations making Github the home for their projects it has become the goto place for sharing code and projects.

Trello

For project management with clients, I like to use accessible and visual tools. Trello fits the bill in both respects. Their Kanban style boards are great for getting an over view of a project and the ability to include checklists, attachments and comments makes it a great collaboration platform for myself and my clients.

Heroku

In the last year I’ve reduced the number of SAAS platforms I’m using down to just Heroku. Gone is my Linode and Cloud66 accounts and replaced with Heroku. For my own projects it’s the ideal platform. I always recommend it to clients who are just starting out with a new project. I’ve moved a number of my own Rails applications to here and now use it exclusively for all my web app hosting needs.

Highrise

My CRM of choice. For a long time I got by on just using an address book, but in time I started to see the need for something more sophisticated than an address book. I needed a tool to record emails with clients, their details and important projects.

I use Highrise on a daily basis and find that it’s ability to send emails to Highrise means that I’m not only collecting my clients information there but also important emails communicating between myself and my clients.

Freeagent

Finally there’s FreeAgent. Still the best invoicing and time tracking solution for freelancers and although I’ve been using it for over three years now, I’m still learning more about it everyday. I’m not using it to it’s full potential at the moment but I am hoping to make better use of it as the year goes on.

My Desktop Development Tools - 2016 Edition

Desktop apps are my main tools when it comes to web development. A browser, a terminal and an editor. That’s the absolute minimum applications that I would need to do a days work but there are a few more desktop apps that I also use to help get a good days work done.

iTerm2

My terminal of choice hasn’t changed but what has changed is that I’m now back to using iTerm built-in pane management rather than using tmux. Most days I tend to just have two terminals open side-by-side and that’s all I need. Tmux is a great option if you need more control over your terminals AND you run an editor like Vim but for me it was overkill.

Sublime Text 3

The last time I wrote a post like this Vim was my goto editor for coding. Despite sticking with it for over a year and I eventually switched back to using Sublime Text. I also had a brief spell as well with Atom but I prefer using Sublime Text. It’s what I’m most comfortable with.

Safari

I also switched browsers and moved back to using Safari for browsing and as my preferred browser for building and testing Rails applications. Open source it isn’t, but it’s a solid browser and the ability to sync tabs between different devices is a feature I use frequently. I still use Firefox but more as a secondary browser.

Dash

Not an essential tool but something I’ve come to rely on heavily over the last year. Dash is a document browser and code snippet manager. I don’t use the code snipper manager but the ability to lookup the docs for the different frameworks and programming languages I use makes my day a lot easier. It also negates the need to do frequent searches online.

1Password

Probably my most valuable piece of software. Secure, easy to use and makes handling your passwords a lot easier. I'm also using 1Password for families to allow my wife and son to handle their own passwords. So far it's working well.

Slack

Last year I was a big HipChat user, but the pull to Slack and it's growing set of features was difficult to ignore. Starting with a couple of clients, I gradually made the migration across and now use Slack exclusively as my online meeting point with clients.

The Weekend Report #3

Ethan had a fun night at Paisley Golf Club with the rest of the kids that get coaching there on the Friday night. Hats off to Andy Carlton and Claire-Maire Macauley for putting on a great event and bringing all the kids together. No prizes for Ethan but he did score quite well in the putting.

Twinged my back early on Saturday morning which ruled out any work I was going to do in the garden that day. That was nothing though compared to Sunday morning when I completely put my back out and put out any plans we had for the day. A visit to the out-of-hours GP got me some pain killers. My back is on the mend today after a treatment of physio this morning and I'm going back on Wednesday for more treatment.

My Hardware Development Tools - 2016 Edition

For this week I’m going to focus on the different development tools I use and why I chose them. Today we're going to look ay my hardware line up. It hasn’t changed since the last time I wrote about this in 2015.

MacBook Pro

I’m using the same MacBook Pro I bought in 2014. The only issue I’ve had in the last year is that I stupidly left it plugged in all the time. Over time the battery gradually degraded in performance and got to the point where I was only getting an hour or two out of it. An appointment at the Genius Bar and was able to get a replacement battery for my MacBook. Now my battery performance is back to a level where I can safely work away from my desk for longer.

The MacBook itself is still fast and responsive. The screen is probably the feature I like the most about it. The crystal-clear Retina screen is easy on the eye and makes reading articles and code easier with no blurring of pixels.

Dell U2414H Monitor

My Dell monitor is still clear and crisp and is my main screen for the day when I’m working. It’s not as clear as the Retina screen on my MacBook but it’s close enough that I can use it all day for coding.

Logitech K811

I love this keyboard. With it’s backlit keys and ability to switch to multiple devices I’m happy to keep this going for the foreseeable future.

If you’re thinking of buying one or are having problems with battery life then I suggest you turn off the backlit keys during the hours of the day where you can see the keys using natural light. I used to have the backlit keys on all day, and it drains the battery on the keyboard quickly.

I don’t see this version of the keyboard on the British Logitech website but it is still available on Amazon. There’s a new model, the K870 that has rounded keys. Not sure if it’s any better than the K811 but the multiple device support is there with a docking bay for your phone and tablet. Not sure I'm sold on the rounded keys though.

Mighty Mouse

Finally there’s the Mighty Mouse. I’ve persevered with this for over two years now and the problem of frequently disconnecting from my MacBook is still there. If anyone has any recommendations for alternatives to the Mighty Mouse then I would love to hear from you.

Seagate Backup Drive

I’m still using this Seagate drive for Time Machine backups. I haven’t had to do a restore from it for sometime so I think it might be due for replacement. I’m not sure on the lifespan of hard drives but I would like to move to something a little less bulky and faster. Perhaps an SSD drive would be a nice addition to my backup process.

Anymore Changes?

My hardware selection doesn’t get changed that often. I know developers that change their equipment on a yearly basis but if it works, why change it? I did consider the move to a MacBook Air in the past but the MacBook models have changed again and I don’t see me making the move to a MacBook or MacBook Air. It might be another year or two before I consider changing my laptop again for another MacBook Pro, but until that day I'm happy with what I have.

Facebook Blogging?

Blogging on Facebook. A chance for the masses to have more of a say online or just another way to keep people in the walled garden of Zuckerberg?

I want to bring blogging to Facebook. I think it's the only way we can get back on track, by giving the sources great tools to communicate with people who are thirsty for ideas and information. But we can't do it without linking, styles, titles and links to rich media. We can't boot up a culture of free thinking inside a silo without these basic features of the web. We need to be able to get our ideas into this space so they can engage with the people here and connect with ideas that live outside of Facebook.

I still want to bring blogging to Facebook by Dave Winer

I might have been set against this in the past, but Dave's arguments for blogging on Facebook make sense. It's another way for people to connect.

Is Your Product Easy to Duplicate?

For many software developers, rolling your own version of a product is a tempting thing to do. You might want to add your own feature to the product or you might think that having more control over your data is important.

I recently questioned the value of FormKeep, a product that I was using. FormKeep allows you to create forms for any website and persist the information from the form without the need for your own database.

This isn’t a problem for a CMS like Wordpress as it already uses a database for persisting data. In the last few years though static websites have become popular. The simple action of generating the website for each change makes them ideal for people that have websites that require little maintenance. There is one drawback though. With the website being static, it can’t process information and store it anywhere. Static websites are a collection of files served by a web server with no backend database. So how do you add a form to your website?

For a while there’s been a number of products that allow you to embed a contact form in any page on your website, but the problem with this is that the embedded form is typically different in terms of style to the rest of your website and it can look out of place.

FormKeep does away with this drawback by providing just the endpoint that a form will submit too. The obvious benefit is that your form will still share the same look and feel as the rest of your website. Given the popularity of static websites, FormKeep definitely fills a need.

The trouble with FormKeep though is that while I do have a number of contact forms on different websites, there was always a niggle at the back of my mind that I was paying significantly more for a product that I could build on my own.

I’ve tried this in the past with a number of products and it doesn’t always work out. I created my own bookmarking site that included many of the feature that Pinboard offers, but there was still a number of features that I didn’t build. For the money though, it’s hard to argue with Pinboard’s pricing. $11 per year for hosting your bookmarks with a further $25 per year to keep copies of the original URL for each bookmark in your account. I could blow through twice that in a year for similar hosting on Heroku. Eventually I learned my lesson and gave up. I re-opened my Pinboard account the following day.

Building my own FormKeep was simpler than building my own Pinboard though. All I needed was an endpoint that accepted form parameters and saved them to a database. I set aside a few hours one day and quickly had my own version of FormKeep up and running. It’s running on Heroku at a cost of $7 per month. Compare that to FormKeep’s $29 per month and already there’s a significant saving. I might not have the clean UI that FormKeep has but the UI I have works for me.

In this case rolling my own solution worked to my advantage. I still have the same functionality that I had in the past with FormKeep and I’ve made a significant reduction in my expenses for the year now with my own solution now requiring just $7 per month.

Rolling your own solution doesn’t always work. Products might have years of features behind them that you just can’t replicate with a few hours of work. Sure you could have the most important feature up and running but what else needs to be added before you can safely say that your own solution will fit all your needs?

In the case of FormKeep it’s still a fairly small product and can be duplicated. And that’s where I think products need to be wary.

I was a long time user of FormKeep and in that time it’s feature set didn’t change much. Don’t get me wrong though, FormKeep definitely is valuable to people that don’t have the knowledge to run their own endpoint for capturing forms. For a user like myself though, FormKeep doesn’t offer anything that can’t be duplicated in a few hours of coding and that’s something you should consider if your building your own product.

If your product has a small feature-set that can be easily duplicated in a few hours then is it providing value?

All the Same

Today, right now, anyone with a $300 laptop can use the very same tools as the people at the top of just about any industry.

The very same software by Seth Godin

I wonder though how many of those at the top have stayed away from modern technology?

Writers are a great example of this. While many of us might be falling over the latest apps and technology for writing, how many writers have produced their best work on older technology? There are many great stories of authors using old typerighters, old disconnected computers and even pen and paper.

Installed Elixir and Phoenix, created an application (does nothing atm) and deployed to Heroku. Think I’ve found myself a new web framework.

Say Hi to Daring

Back when my blog was running on Jekyll, I found solace in the amazing Hyde theme by Mark Otto. Simple, flexible and with a strong focus on the content of your blog.

Due to limitations with Jekyll I switched to Ghost a few months ago. So far everything is going great. The only problem is that many of the themes for Ghost focus on banner sized header and post images.

I ran with the Casper theme from Ghost for a few months. I like the typographical elements of the theme but I dislike the massive banner images for it. I needed a change.

Using Mark Otto's Poole base theme for Jekyll as a starting point, I started building a theme for my blog. The one constraint to the theme I wanted is that it shouldn't use any banner images for any part of the theme.

A few hours later and I have the beginning of a new theme for Ghost.

It's been a while since I flexed my creative cogs. Even though this was just a few hours work, it's still a great feeling being able to ship something. Even if it is just aa theme for my own blog.

The Daring theme for Ghost is available on Github.

What is Worth Communicating?

A question prompted by Nicholas Bate in his Jagged Thoughts for Jagged Times series.

In the New World of Work the relentless quest to get us to communicate and communicate now, most forcefully illustrated with the increasing provision and use of so-called productivity tools such as instant messanging means there is no time to think.

And therefore there is little of worth to communicate.

I've highlighted that last section as it's got me thinking again about the value of Twitter.

I'm finding it difficult to warrant my time spent on Twitter. I rarely do anything on Twitter these days. My biggest gripe is that to gain any kind of audience you need to take part more. Which in turn means tweeting on a more frequent basis. Yet I don't like just throwing anything out there unless it has some thought to it. I could tweet more often but is it worth it? Am I just adding more noise?

300 issues of Ruby Weekly. Well done @peterc and the @cooperpress team in reaching this milestone. Here’s to another 300!

Set Godin has a great reminder of why blogs are the best free source of valuable content on the Internet.

RSS still works. It's still free. It's still unfiltered, uncensored and spam-free.

Read more blogs by Seth Godin

Are You Curious?

I love this view on how people are split when it comes to technology.

We can make lists about how "there's two kinds of people in the world" and split them up into techie and non-techie, or computer literate or non-computer literate...but I'm thinking it's simpler. There's the curious and the not-curious.

Is technology killing curiosity? by Scott Hanselman

I've tried a number of times to get Ethan interested in programming as I thought he would be curious about how his favourite console games are made. So far he's definitely in the non-curious group. Maybe it will come in time.

Grass Roots Productivty - Always Be Capturing

Everyone has their own preferred system for getting things done. Whether it's GTD, maintaining chains, the pomodoro technique or some other method there’s something out there for everyone.

Having tried just about every technique possible and a few hybrids of I’ve come to rely on four basic actions that help me get things done. I've come to call this Grass Roots Productivity.

The first step in this system is ensuring you know what you want to get done. This starts with the process of capturing.

Most productivity systems have the idea of an inbox. A place to collect the stuff you want to do. Without this inbox you would be as well just plucking stuff to do out of thin air. Capturing is an essential habit to get into because without it, there's second step to getting stuff done.

The capture process is something I go through numerous times a day. Links, actions, documents, text and other bits of data. Each of these types of data have their own respective inbox. On the digital side there is Pinboard, Instapaper, Todoist and a few other places. On the analog side I've got a notebook and a planner. While the digital inboxes have very focused types of data being captured, the notebook and planner act as loose fitting items that don't quite fit anywhere else.

The way I do this is to have easy access to each of those inboxes. For the digital inboxes I have either email addresses or keyboard shortcuts setup to quickly save to the respective inbox.

For the analog inboxes, I simply leave my notebook and planner left open on my desk, ready to record whatever I need to. I use the notebook for capturing items on the go. The benefit of this is that it's a simple action of recording the task and moving on. No distraction by other apps or notifications or any other distraction that digital devices are famous for.

Capturing is an essential but often overlooked step in any productivity system. Without capturing we don't have any sensible place to start and we always need a place to start.

Why I Stopped Using TextExpander

Text replacement utilities like TextExpander can make a big difference in the amount of time you spend typing. From email signatures to emails for clients, I used TextExpander for all of sorts of things. TextExpander's licence meant that I was only paying a minimum amount for the desktop tool, but it's where I used it the most.

When I first heard about TextExpander's price change to a subscription model I was hesitant to make any fast reactions. Over the days that followed though I was increasingly convinced that the new pricing model was not for me.

I don't have any problems paying for the software I use. If it has value and is reasonably priced then I'll keep paying. Regardless of whether it's a monthly subscription or intermediate upgrades. It's the only way that you can support the makers of the software that you find valuable.

A big change to the TextExpander app was that your snippets are sent to TextExpander servers so that they could be pushed to your other devices with TextExpander on it. I didn’t find the need to use that particular feature so I started to think that maybe TextExpander wasn’t a good fit for me anymore.

TextExpander's change to a subscription model might be okay for others, but for me it was a step in the wrong direction. I understand that they have a business to run and that relies on a steady revenue but what was wrong with more frequent releases of their desktop app? I would gladly have paid for a single license for the cost of a year as long as it came with frequent updates.

At the end of the day I just didn’t find the value in paying for the features of a software product that I would rarely use.

Why I Stopped Using Atom

Some months ago I'd decided to use Atom as my go to text editor for day to day programming. I had been hearing good things about Atom for a while and the popularity of its packages means that I could easily switch to Atom with no major interruption in my workflow. There was one thing I wasn't counting on though.

Atom is slow. Not slow that it makes a huge impact on my day but slow enough that it leaves me hanging for a few seconds after certain operations. Even opening a project can have a lag of a few seconds.

Coming from Sublime Text this was a huge disappointment. Sublime Text has always been a fast text editor. Even the indexing of files within the project you are working on is fast. Opening files, creating panes, finding and replacing, all lightning quick. And much faster than Atom.

Speed isn't a major factor when you've done a single days coding but adding all those little seconds up over a period of a year and you'll have a significant amount of time.

Why I Stopped Using Zapier

Zapier is an automation tool that integrated with hundreds of products and services on the Internet. It makes integrating tools together simple and also has multiple step workflows.

The problem with Zapier is that while all this automation is handy for repetitive workflows, I started to question the need for such automation and whether I truly needed it.

Let's take FormKeep as an example. I use FormKeep as a way of allowing people to contact me regardless of the blog platform I am using. I have a contact form on this blog and one on my web development blog. If I receive a contact form submission from someone, FormKeep will send me an email to let me know.

Using Zapier I could do the following with the submission:

  1. Send the clients details to my CRM
  2. Create a task to review the client's request
  3. Create a task to reply back to them within two days

I would do all this anyway, so is there any need for me to automate these steps? Probably not.

Also not all form submissions I get are potential clients looking for me to work with them. Some submissions are general questions about Ruby on Rails, some are offers of full-time work and some are questions about previous topics I have written about. So automating this can result in a false positive and mean that I have to remove tasks from my task manager and contact details from my CRM.

The false positive of automation means that it only works if the intended result of the automation is always going to be the same. If there's a shadow of a doubt that there could be a wrong end result then automation isn't a good fit.

Automation isn't all bad and I still need an automation tool so I have created an account at IFTTT as it offers the simple automation I need but without the cost. I'm not worried if IFTTT disappear over night as it's a form of automation that I can happily live without but I use it just because it helps.

I've been scaling back on a few tools that I use regularly and it's made working a lot easier and removed the need for automation. Zapier is great for multi-step workflows that will always deliver the intended result, but for me it's become a tool I can do without.

Why I Stopped Using Buffer

Many people use Buffer as a tool to automate the process of sharing links to social networks. I even used it for a while to do this. I have no complaints with the Buffer product. It's reliable and user friendly. A couple of weeks ago though I decided to cancel my subscription with them. There's a number of reasons why I did this.

Limited value in sharing

One of Buffer's unique selling points is that it automates the step of sharing a link at a specific date and time. This allows you to queue links to your social media accounts so that you gradually share these links over a period of time. Recently though I've started to question the value in regularly sharing other people's links on social media.

My preferred programming language is Ruby. I already subscribe to a number of blogs, podcasts and newsletters about this language and the Ruby on Rails web framework. As a web developer I see the value in consuming these links for myself but I don't see the value in sharing these links on social media. There's already a good content funnel for digesting these links, other developers just need to find it.

I do share the odd link every now and again but not at the volume that warrants my use of Buffer.

Better analytics with Twitter

When Buffer first started one of its unique selling points is that it has analytics on the links that you shared to your social networks. I can't say how good these are for other social networks, but the analytics on Twitter links are good.

Recently though I've added the analytics on both of these accounts and I've found them to be more informative than what Buffer has to offer as Twitter's analytics cover more than just clicks. I'm not religious about my analytics but once a month I'll check them to see if there was anything that received significantly more clicks.

Minimal social media footprint

I've got two accounts on Twitter that I use. One is my own account and the other is for my freelancing business. With just two accounts to manage and the fact I only use one account for sharing links on a frequent basis, I can't see the point in using Buffer for queuing up links when I can easily do it on my own.


Buffer is a useful tool if you have a content sharing funnel that needs regular updates to your social media accounts, but as I'm running just a freelancing business and regularly post in my own links to my blog, I don't see the value in having a Buffer account, even if it is just the free account. The benefit to this is that I've got one less account to worry about.

Slow and Steady

Wins the race.

This morning, just as a test, move very slowly. Avoid scanning material. Read it carefully. Sense the rhythm of the words. Make all of your actions as precise as possible. Be in the moment, whether you are sipping coffee, writing a note or talking to a customer.

Slow and Precise by Michael Wade

Finding Value Outside of Social Media

A lot of people use social media as their means of keeping up with news, topics and communities. I’ve always struggled with this aspect of social media, as the number of accounts I end up having to follow results in a constantly updating timeline that often just makes me turn away. It’s too much.

It’s just an observation on my part, but I think more and more people are looking elsewhere for their fix of valuable content. Social media is a firehose of data and digesting it at a sustainable pace is close to impossible unless you keep a tight reign on how many people you are following. Thankfully there are other means of finding valuable content.

Newsletters

The humble email is still the most reliable and manageable form of content that you can get. Which is why newsletters are probably more popular than ever. Subscribe to the topics that interest you and digest them in your own time. It’s that simple.

Newsletters are more valuable than social media in this respect because they are curated so that you can read the entire thing in a few minutes and get all the relevant information.

You also know when it will arrive. Newsletters are delivered on a regular interval and that consistency means that you always know when you’ll get the next edition of that newsletter.

RSS

Social media networks might not be keen on including RSS feeds in their own websites or even for individual users, but the RSS is still as popular as ever.

Although Google retired their Reader app, there’s now an abundance of RSS reader apps available and almost all websites include an RSS feed to subscribe too.

This openness on the web means that you can pick and choose the content that you want to follow, including the most valuable of content.

Subscriptions

A newcomer to the digital world but certainly not to the old paper-based world of publishing is magazine subscriptions. I’m surprised that these are now offered on an increasing number of sites, but when you think about it, they’re a great way of digesting your topic of choice.

I’ve got a subscription going at the moment with [99U] and I must say I have enjoyed having the magazine sent out to my home so that I can enjoy it in a more offline environment.

Podcasts

Podcasts have also risen in popularity over the few years. The audio version the blog offers a much more personal experience when you listen to the host and possible guests discussing a particular topic.

I like to listen to podcasts while I’m coding. I probably shouldn’t, as I do notice that I miss half the things mentioned on the podcast, but it’s the only way that I can listen to them on a regular interval.

If I was being honest then I would say that this is my least preferred way of digesting content from the web. I like podcast shows that keep their episodes short, but many of the shows I listen to a close to an hour in length. Even with the speed boost on Overcast, it can still take a fair amount of time.

Social media is a great tool and it does have value but relying on it as the means of consuming information will have you checking that timeline more often than you need to. For the content that matters you should consider exploring some of the options above. They're easier to manage and you'll know exactly what you'll be getting rather than the mixed bag of emotions, rants and knee-jerk reactions that social media provides.

Finding Value in Twitter as a Freelancer

Yesterday I wrote about the value of Twitter on a personal level. While I don't place much value on my personal Twitter account, I have found that having a seperate social media presence can let me split my time online and have that time spent in a more focused way.

I operate as a sole trader in the UK which means I trade as a business under my own name. It also means that I can use a trading name for my freelancing work. The added benefit to this is that I can give myself a corner of the web dedicated to that aspect of my life. I could publish technical articles under my own name and on my own personal blog but as I already blog on a frequent basis on other topics then I would end up two different audiences on the one blog. To keep them separate I decided to start a separate blog for my web development writing.

This year I decided to apply the same tactic on Twitter and so I created a new account (@digitalbothy) for my freelancing business. The idea behind this is to act as a social media funnel for the web development blog I mentioned above to be able to found on at least one social media network. As I’m already on Twitter it made sense to start there.

There’s another benefit to this. Lately I’ve been trying to limit the amount of people I follow on Twitter, but it seems that no matter what I do I end up with more people on the list that I would like. Fear of missing out syndrome is hard though, and even though I unfollowed most of the occasional tweeters there’s too many people to follow.

Instead of cramming all these people under one account, why not bump the web developers, freelancers and other people that mainly tweet about this topic over to my Digitalbothy account? So that’s what I did. I started following most people related to web development and programming from my freelancing account and unfollowed them on my personal account.

Having two accounts running side by side isn’t much harder to manage than having two lists under the same account. In fact I would say that it’s probably easier.

Tweetbot’s multi-column feature on OS X means that I can see both timelines through the day when I’m working. As a rule I don’t check my freelancing account out with my usual business hours. If I’m checking Tweetbot on my phone it only has my personal account on it which removes the temptation to check on work related topics when I’m not at home.

I might not place much value on my own personal account, but at least now I have a place for the work aspect of my life online and it's another way that I can be found by prospective clients.

Playing with Firefox and Test Pilot

I have been a Safari user for a while now. Safari’s built-in sharing on OS X and iOS and the ability to store tabs in iCloud means I could easily move between my phone and my latop. Aside from this, there isn’t much else that would make me choose another web browser. As long as I have the right addons for my browser then I’m happy with Safari.

Mozilla recently announced a new way of testing new features in Firefox without having to run the bleeding edge version of Firefox. Their Test Pilot program allows you to run new features in your stable version of Firefox. Not one to shy from trying something new, I decided to start using Firefox again and turn on all the experiments in the Test Pilot program.

So far the biggest impact has been the Tab Center. This moves the tabs from the top of the browser to the left. It’s running for a few days now and I’m still getting used to the column of icons in my browser down the left hand side. Naturally my reaction is to always move my mouse to the top of the screen but with the icons on the left it’s usually a case of “Doh! There they are!”.

So rather than using the mouse I’ve started using the shortcut keys for switching tabs. I do find it alot easier to switch tabs using the “cmd + number” shortcut for my pinned tabs and anything further down I end up just using “ctrl + tab” to open the right tab.

Also with Firefox now available on iOS, I can now share my tabs and bookmarks on my iPhone using Firefox Sync. It’s early days for this as well, as I’ve been using Safari for about three years on my iPhone.

I’ll give it a month and see if I’m still happy with the setup in June.

The Feed is Dying

The feed is dying. The reverse-chronological social media feed — the way you’ve read Instagram, Twitter, Facebook, and blogs (which is to say, the internet) at various points over the last decade, updates organized according to the time they were posted, refreshed at the top of the screen — no longer really makes sense. The unfiltered informational cascade that defined the internet of the 2010s is going the way of the front-page-style web portal: It’s an outdated way of processing online information. The way we consume social media is being transformed and tinkered with as Silicon Valley tries to wring as much engagement, attention, and money out of it as possible. The feed is dying, and we feel shocked by its death — but we shouldn’t.

The Feed is Dying by Select All

RSS is the winner in all this. A chronological feed that you have complete control over.

It's sad to see so social media feeds switching to curated feeds that promote content we might be interested in.

I can't help but wonder though that if all these social media feeds were a paid for subscription service to begin with, would we even need customised social feeds?

The Benefit of Ownership when Blogging

In a quest to get back on the blogging bandwagon, I thought I would take a look this week at the different benefits that blogging offers.

Ownership might not be the most obvious answer but for me it’s the most important reason why I blog. I’m not just talking about the blog itself, but the words and the content and how my writing acts as my soapbox in the world today.

Owning Your Words

The most important reason why I blog is because it allows me the opportunity to put something out there that’s mine. They are my words, my opinions, my stories, my views. It might not always be gold, but that’s okay. They are my words.

It can be a short post, an article, some long form writing or even a short story. It might be a quote a link or even just a word. Just a single word is enough to convey some message across about where you are.

Owning Your Space

Another reason why I blog is the fact that I want to own my words. Lately there’s a lot of chatter about the pros and cons of hosting your blog in Medium and whether it’s a good or a bad thing. I can see why people would choose Medium as a blogging platform. It’s a great entry into writing online.

However I do prefer having more control over my blog and where it gets published too. Medium is snowballing as more and more people make the switch from their own hosted blog to becoming part of the Medium network, but the problem with this is that it becomes difficult for anyone but people on Medium to see your and follow your blog.

The other great benefit of owning your words is that you can take your blog with you to other blogging platforms if you find that you have outgrown your blogging platform. I started blogging on Tumblr years ago. I then moved to Posterous (now Posthaven), then to Jekyll and now I’m using Ghost. Throughout this time I’ve been able to take my posts with me so that nothing gets left behind.

Own It

The ability to own your little corner of the Internet and carve a niche out for yourself is why many people blog, but being accessible means owning your words and the space you blog form. You don’t have to run a fully configured server with a custom Wordpress install on it. There’s plenty of great blogging platforms out there that allow the world to read what you have to say.

Write it, publish it, own it. It’s as easy as that.

Still Freelancing at 60?

I love this post from Adrian about what he's learnt from his time as a developer and where he sees himself going next.

Take conscious decisions in your life. Be aware of your actions and their effect. Do not blush or be embarrased for changing your opinions. Say “I’m sorry” when required. Listen. Do not be a hotshot. Have integrity and self-respect.

Being a Developer After 40 by Adrian Kosmaczewski

The big four-o for me is just around the corner. I can't freelance for another twenty years, or can I?

It Can't Be Rushed

The project is vaguely on your mind. You sip coffee and read a book. You scan the news but with faint attention because you are still sorting out the project. As much as you might like to do so, the process can't be rushed.

Nothing But Thinking by Michael Wade

I'm coming off the back of a frantic couple of months of client work and looking forward to a little bit more time spent like this.

20 Years Since Moseley Shoals

Today marks 20 years since Ocean Colour Scene’s Moseley Shoals entered the British charts. It was the band’s second stab at success: their self-titled 1992 debut sunk without trace and they’d been honing the follow-up for four penniless years. “We knew it was good,” said guitarist Steve Cradock. “We spent a lot of time working on it.” Championed by Radio 1’s Chris Evans – who loved The Riverboat Song so much he made it the theme tune to TFI Friday – it screamed in at No 2 and stayed in the top 10 all summer, buoyed by support from Paul Weller and Noel Gallagher. The real reason for its success, though, was simpler: it was an absolute gem of a record, by a brilliant group of musicians.

Ocean Colour Scene: the band whose chief crime was being too normal by The Guardian

I can't believe it's 20 years since Moseley Shoals was released. I'm still an avid listener of Ocean Colour Scene today. Can't fault them at all. Recommended.

Sony PlayStation Neo

I can't say that I'm exactly thrilled to see Sony releasing a console so soon after the release of the PS4. It is good to see though that all future games for the PS4 and PS Neo will be compatible and you will be able to play on the PlayStation Network regardless of which console you will own.

That move is one of several that Sony is reportedly making to keep PS4 and PS4 Neo owners on an even keel. The company's documentation reportedly states that there will be no Neo-only games, owners of both versions of the console will continue to use the same PlayStation Store, and publishers are barred from offering special features or downloadable content to owners of one type of console. Crucially, players of both the original PS4 and PS4 Neo and will be able to play alongside each other on PlayStation Network.

Sony’s upgraded 'Neo' PS4 will reportedly have smoother games and better graphics by The Verge

Business Advice by Derek Sivers

Derek Siver's latest post is the best business advice anyone needs before they start.

First you find real people whose problem you can solve. You listen deeply to find their dream scenario. You make sure they're happy to pay you enough.

Don't announce anything. Don't choose a name. Don't make a website. Don't build a system. You need to be free to completely change or ditch your idea.

Then you get your first paying customer. Provide a one-on-one personal service.

Then you get another paying customer. Prove a real demand.

Then, as late as possible, you officially start your business.

Don’t start a business until people are asking you to by Derek Sivers

For a moment there I thought I was reading the blog of Nicholas Bate. Similar styles of writing. Straight to the point.

A tablet that runs Ubuntu is now available for pre-order.

I've toyed with the idea of adding a tablet to my list of development tools for when I'm out and about, but the lack of a terminal app and web development tools for iOS means that the iPad isn't an option for me.

I've also considered a Chromebook, but the inability to completely remove the ChromeOS has put me off it.

I'm definitely curious from a developer's perspective about this new Ubuntu tablet. It could fill the niche of a portable web development tool.

For six months now I've been writing my morning pages every weekday morning. The idea of morning pages is to write three pages of longhand writing every day. Weekends are precious in our house, so until the boys are more independent in the morning I chose to just write during the week.

So far I've been mostly consistent. There has been the odd weekly break every month, and there's some days I've been too rushed to do it. I have written morning pages on more days than not over the past six months though, so I think that's quiet an accomplishment.

The tools of the exercise are a pen and notebook.

Right now I'm using a Lamy Safari fountain pen and Volant Moleskine notebooks. The Lamy is great for this exercise as I find it comfortable to hold. I choose the Volant notebooks as I wanted a notebook that would last me more than a month but still be comfortable to write in. It does the job well.

Today marks the start of the fourth notebook. I'll be reviewing my writing over the last few months to see what's fit for publishing. It's not all gold, but there's the odd gem in there, and that's exactly the whole point of this exercise for me. To get some writing in and find the stuff that's worth telling the world about.

With current trends towards front end frameworks and micro-services, it's refreshing to see advice that goes against these trends in software development. Applies to more than just software development as well you know.

When starting an application your goal should be to ship a MVP (minimum viable product) as fast as reasonably possible while still maintaining quality. To help make that successful you need to be minimal. Evaluate if you really need to start with a front-end framework or if you can get by with static HTML and JavaScript where needed. Build a monolith instead of starting with microservices to avoid the unnecessary overhead that affects development, infrastructure, and team productivity. In every situation you encounter, ask yourself if what you’re trying to do is really necessary.

Start Simple by Thoughtbot

More Raspberry Pi Goodies

The recent release of the Raspberry Pi 3 and now Western Digital's new dedicated PiDrive makes the argument for buying a couple of Pi 3s even more compelling.

The 314GB drive, which will normally cost $45.81 but is currently available for $31.42, is a 7mm-high drive based on the basic Western Digital Blue drives that still ship in many budget and mid-end laptops and PCs. The difference is the interface, which has been changed from SATA to USB and is designed to connect to the Pi directly without drastically increasing the footprint of the device. WD says it has customized the drive in order to "reduce the electrical power load of the hard drive on Raspberry Pi while still maintaining sufficient performance to deliver maximum USB data transfer rate." It's also a cheaper solution than the 1TB PiDrive kit the company already sells for $79.99.

Western Digital makes a $46, 314GB hard drive just for the Raspberry Pi by arstechnica

These are the actions that could change your world.

Forget the bold gesture. Don't bank on the big project. Focus instead on the little daily actions, the ones that are so small and routine that they are barely noticed.

Those are the actions that are more likely to shape, for good or ill, your future.

Little Things by Michael Wade

The Concentration of Power in Journalism

A great post about how the concentration of power in journalism now lies with technology providers and social media platforms.

Social media and platform companies took over what publishers couldn’t have built even if they wanted to. Now the news is filtered through algorithms and platforms which are opaque and unpredictable. The news business is embracing this trend, and digital native entrants like BuzzFeed, Vox and Fusion have built their presence on the premise that they are working within this system, not against it.

Facebook is eating the world by Columbia Journalism Review

Reviewed: On Writing Well

I finally finished William Zinsser's On Writing Well last night.

Cover of On Writing Well

I've been making slow progress through it due to the fact I read it last thing at night and only managed a few pages at a time.

I've been chewing through a number of books on writing ever since I read Stephen King's book, On Writing. Educating myself on writing is just as important as my continual learning of software development, which is why I spend the time I do reading books like this.

I didn't take as many notes as I probably should have done, but I've queued the book up again on my reading list so that I do take notes on it the second time around. The main reason I enjoyed the book is that it doesn't focus on non-fiction writing.

I was glad to see there was even a section on writing about science and technology including this gem of advice:

Describing how a process works is valuable for two reasons. It forces you to make sure you know how it works. Then it forces you to take the reader through the same sequence of ideas and deductions that made the process clear to you.

On Writing Well by William Zinsser

I recommend this book for anyone interested in improving their writing regardless of the form it takes. This book won't make you a successful published author but it will make look at your writing in a more critical way and that's not a bad thing if you want to improve.

To watch a demo of a reporting server tool being used to embed a report I have to sign in to the website to watch the video. Why?

Where is Everybody?

Last week my wife Jennifer was looking for something to read during her lunch break. She stumbled across this piece on reasons why we appear to be so alone in the universe. Read at your peril. The numbers are mind boggling.

As many stars as there are in our galaxy (100 – 400 billion), there are roughly an equal number of galaxies in the observable universe—so for every star in the colossal Milky Way, there’s a whole galaxy out there. All together, that comes out to the typically quoted range of between 1022 and 1024 total stars, which means that for every grain of sand on every beach on Earth, there are 10,000 stars out there.

The Fermi Paradox by Wait But Why

Jeb Bush has ended his 2016 presidential campaign.

Bush, the son and brother of US presidents, made the announcement in a somber speech before supporters in Columbia after earning just 8.3% of the vote with 67% reporting in the third primary contest of 2016.

Jeb Bush ends presidential bid after Donald Trump wins in South Carolina The Guardian

What I find strange about US presidential campaigns is the amount of money that that candidates use in their campaigns despite being rank outsiders. Jeb Bush is reported to have accumulated $100m for his campaign. A vast amount of money but I have to wonder who even thought Jeb Bush would succeed in being a successful candidate for the Republican party?

Sounds like a gamble to me.

I've been reading George Leonard's book, Mastery after seeing it recommended by fellow blogger Nicholas Bate. The book has been a real eye-opener in terms of the difference between what I perceived mastery to be and what mastery is.

I like this highlight from the book explains what mastery is:

The people we know as masters don't devote themselves to their skill just to get better at it. The truth is, they love to practice — and because of this they do get better at it.

Take my own career for example, the web developer. I've tried so many times in the past to pick up different languages and experiment with other frameworks, but each time I've rarely got passed the basic steps of a simple application. It's all well and good learning something new, but have I gained the level of knowledge and experience that I should have as a web developer before moving onto mastering other languages and frameworks?

I'll be honest, no. In no area of the stack of tools and technology that a typical web developer uses have I amassed a level of familiarity and knowledge that a master of web developer would have. Am I knowledgable and confident with these tools? Yes, but there's still places where I can improve.

So I'm changing focus. Gone are the plans to try out different languages and frameworks and in are the day to day practicing of the tools that I need to make a living. A relational database (PostgreSQL), a dynamic language (Ruby), a web framework (Ruby on Rails), and there's JavaScript, HTML and CSS. Not only that but there are also skills that I use daily like agile practices and writing that need work. I don't need to master all of these but I am going to focus on a handful over the rest of the year.

I love writing software, but rather than focusing on practicing other languages and frameworks as possibilities for future work, I should focus on practicing with the development tools I enjoy using now. Ruby on Rails has been around for ten years, who's to say it won't be around for another ten years.

And thanks for the book recommendation NB!

Social Media: The Best Of, The Worst Of

As I'm writing this in my editor in Ghost, the title reads "Social Media Sucks". Yeah, I know. Strong words in that title. I don't like them either, but having them at the top of my editor as I write this actually reminds me of all the great things that social media brings. Here's a few of the positive things I get from Twitter:

There's so much more as well and from the 300+ accounts I now follow there are so many more that I could list. It's a tailored timeline that I curate to my own needs.

If I don't like something that someone says, then I unfollow.

Disagreeing with someone though is a different thing, and while I might disagree on certain topics with people I follow, it doesn't mean they're wrong and I'm right or vice versa. It's a difference of opinion and that keeps my timeline interesting. I enjoy that.

The worst of Twitter is something that I haven't been personally experienced but I see time and time again. People with a large number of followers become easy targets for the Twitter mob and their flaming torches and pitchforks. The mob that prides itself on correcting every wrong done. The mob that stands for justice and equality. What they actually stand for is easy pickings. They find the easiest wrong to correct and pounce. This is the worst of Twitter and is going to drive people away from the platform.

Stephen Fry was the latest victim of the Twitter mob. I don't blame Stephen Fry for leaving Twitter. I also don't think he overreacted in leaving. He made his decision based on not one past experience but several. It's sad that people are driven to such measures. It makes Twitter a less entertaining place.

I've update the title of this post, to reflect the changing tide of Twitter. I just wish it was more like it was in the beginning.

Ghost are Moving

Ghost's plan to relocate their business to Singapore is a blow to innovative internet businesses in the UK.

Why locate your business in the UK if it's going to suffer EU under a tax regulation that was designed to catch out the giant technology companies?

Nor do the numbers lie. According to the EU VAT Action campaign, HMRC has admitted that 78% of the VATMOSS returns being processed in the UK only bring in 1% of the total revenue they get from this scheme. HMRC have gone so far as to eject 3000 of those small digital businesses out of the MOSS system because their tax revenues are so tiny that they are essentially not worth processing. Yet the scariest number in this whole drama was the Campaign’s finding that only 1% of impacted businesses are even aware of the MOSS requirements. That 1% is fed up struggling under the burdens of a regulation designed to go after multinational corporations whose sweetheart tax deals were brokered by EU politicians in the first place.

Digital platform Ghost leaves the EU thanks to #VATMOSS by WebDevLaw

Ghost made the right decision in relocating and I wish them all the best in their new digs.

4/ If you’re threatening to leave Twitter over it then I do think you’re overreacting. Twitter isn’t a necessity in life. #twittertimeline

Chicken Nuggets and Twitter

The perfect analogy of the relationship between Twitter and the user's of Twitter.

I don't think it's terrible or the end of the world. Life in a silo where you and I are the product. McDonald's doesn't ask the chickens whether they like the options for Chicken McNuggets. A similar thing. The main difference is the chicken probably couldn't say. Humans have opinions, feel disempowered, not heard, not loved, bored, and we like to be consulted. A good shitstorm provides temporary relief for all these ills. So for a while, venting, then life goes back to the normal humdrum.

Twitter's new timeline? by Dave Winer

Facebook at Work

I'll be surprised if this is as big a thing as Facebook.

I can thing of a few things off the bat that I would take issue with:

  • Does the app silence notifications when I'm not supposed to be working?
  • Does it do something better than any other business communication platform?
  • If the company I worked for did use it, do I get a company phone to install it on?

At DigitalBothy the choice of communication is primarily the phone, then email and finally Slack.

Facebook at Work? No thanks.

A few weeks ago I wrote about how I was still using Feedbin as my goto RSS Reader. Well it seems that's not the only product I'm still using after three years.

Gauges is my choice of analytics tool since moving away from Google. It might not be as feature rich as Google Analytics has but it definitely suits my needs and is probably a better fit for most people that want to measure traffic on their sites.

Why the move to Gauges?

When I wanted to go Google-free I tried to find feasible alternatives to all the Google products I was using. At the time I needed an analytics tool to replace Google Analytics. To be honest I only used it for the pageview count for my blog. I had no interest in using the search, e-commerce or other advanced features. I just wanted to track page views and visitors. One service that caught my eye was Github's Gauges service.

What has changed since moving?

I've been using Gauges ever since that day. Gauges itself has changed hands and is now owned by Expected Behaviour, but the service itself still remains fault-less and reliable. I don't think Gauges received any updates during its time owned by Github but since changing hands, the service has received a steady stream of improvements. The latest being the mobile and tablet support. The is a stand out feature for me. I like having apps on my phone but for things that I check on a less than frequent basis when I'm away from my desk I'd rather use the browser.

Another plus for me is the Gauges API. When I used Jekyll for blogging, I used a script and Gauges API to pull the top content for the month and add it to my blog during the generation process. The API is easy to use and well documented. Even though Gauges has a limited set of data for views and visitors across different time periods in their web client, you can quickly get the API to return the data you need.

I'm also using a Slack bot that can fetch the stats for my websites. I had been using the Gauges daily summary email for this but I've been trying to curb the amount of email I get on a daily basis and instead I'm funnelling content like this through a private Slack channel. I just put the Gauges bot command in and the bot returns the views and visitors for each of my sites for today or yesterday. Handy for when I want a basic overview of the past day's activity.

Would I recommend Gauges? Definitely.

Not only do I get all the essentials like page views, visitors and referring links but there's also development tools that allow you to analyse what percentage of browsers using your site support different features.

Sure Gauges doesn't have all the bells and whistles that Google Analytics has, but for me Gauges has just the right amount of feature for tracking visitors to my websites without making it too difficult. Right now I'm running four websites with Gauges, two blogs and two products, and it more than covers all my needs.

Dave Winer on the drawbacks to hosting your writing in the newest walled garden, Medium.

Medium is on its way to becoming the consensus platform for writing on the web. if you're not sure you're going to be blogging regularly, the default place to put your writing is Medium, rather than starting a blog on Tumblr or WordPress.com, for example. I guess the thought is that it's wasteful to start a blog if you're not sure you're going to post that often. It's something of a paradox, because blogs are not large things on the storage devices of the hosting companies. If they're doing it right, a blog is smaller than the PNG image in the right margin of this post. They're tiny little things in a world filled with videos and podcasts and even humble images. Text is very very very small in comparison.

Anywhere But Medium by Dave Winer

Medium's walls are actually not that high at the moment. Access to the network is easy but I can't help but wonder if in the future they'll get it wrong and piss off a good chunk of their user base. I'd rather not take that chance.

Given the option between Medium and a hosted blog at Ghost, Tumblr, Wordpress or Blogger, I would definitely go with a hosted blog.

A Canvas Made of Pixels

Clay Bavor's large scale digital canvas is a fantastic use of technology.

Photograph of the digital canvas in a home

Even the frame is made to make it indistinguishable from other framed canvases in the room.

Next I turned to the frame material. I wanted something that looked totally unlike anything you’ve seen around a computer monitor or television – a sort of “anti black plastic”. And that led me to a handmade, gilded wood frame, with a classic profile and a good amount of patina.

A Canvas Made of Pixels by Clay Bavor

Making the screen blend in with it's environment and adjusting to that environment is how technology should be used.

Has Web Development Gone To Shit?

There was me thinking I was absolutely bonkers for not falling head over heels in love with the current trend towards towards JS web frameworks.

The web (specifically the Javascript/Node community) has created some of the most complicated, convoluted, over engineered tools ever conceived.

The Sad State of Web Development by Drew Hamlett

I do like Drew's advice for web applications that have one or two pages with a complex user-interface.

So my advice is to use Rails Django, Play Framework, or Phoenix to develop most of the app, because they help you with most of the boilerplate stuff, and bring in the flavor of the month on a page that needs it. So when the next flavor of the month comes out you’re entire app is not knee deep in the last flavor of the month. You can just re write that one page.

The Sad State of Web Development by Drew Hamlett

Photograph of handwritten notes

Today's commonplace entry courtesy of Nicholas Bate's learning tips.

My Kaweco fountain pen was quite nice to write with but I might downsize the nib in the future.

And yes, the cramped refers to my hand. Definitely not use to writing notes like this.

A while a go I wrote about my move to Feedbin from Feedly and my reasons for the move. At the time I was still getting used to something other than Google's great RSS reader. Feedly in itself was fine but it didn't have the staying power I wanted. I had to login back in on different devices and there wasn't much in the way of new features. So I moved to Feedbin and over two years later I'm still using it. Here's why.

Features, Features, Features

Feedbin is under continual development and every few of months there's a new feature released or small improvements made to the user-interface. It might seem like a lot of time in between releases, but from the start Feedbin already did everything that was essential. You could subscribe to RSS feeds and read them when you wanted too. Everything that has followed has been "nice to haves" and each one of them makes the experience of using Feedbin even better.

A Great Web Interface

From the start the Feedbin web interface was good. Overtime it's been gradually tweaked and made better. Add to the mix a customisable interface with settings for fonts, text size and themes and you have a web interface that negates the need for any desktop RSS reader. Just use it in your browser.

Also the keyboard shortcuts allow you to move about your feeds without having to reach for the mouse. Even sharing articles to your favourite services like Instapaper and Pinboard is easy because you assign keyboard shortcuts to each of your share locations.

The Notifier App

Finally there's the notifier app. Now maybe I'm alone in this but RSS feeds are a great way of monitoring and tracking services. Funneling these notifications into a single device means that you can stay on top of essential services for clients. As a freelance web developer I have clients that need to know when their websites are likely to face downtime.

To do this I keep a track of the different service they use by subscribing to their status page's RSS feed. In the Feedbin notifier app I can then get notifications of these updates as and when they happen. If a client is likely to see downtime on their website I can give them a heads up on it and we can arrange suitable changes for them if needed.

Feedbin is still one of my essential tools as a web developer, both for consuming content and for keeping up to date with any urgent news. I highly recommend Feedbin if you're in the market for a versatile RSS reader.

Culling the Email Subscriptions

I've been a fan of email subscriptions for a long time. The direct delivery to your inbox might not be everyone's idea of digital heaven but for the content that matters the most, it's the best way of receiving it. I used to use RSS for everything but even RSS has its limits. I've got a large number of feeds in my list which makes it hard to filter out the great content you want to read every day from the good content that you will get to at a later time.

And while email subscriptions are nice (when managed with rules in your inbox), there comes a point where you just end up getting too much email. That my friends was today.

I flicked through my newsletters folder in my email client and was astonished to find a number of high quality subscriptions still lying there unread. Were they simply not worth reading? No, I subscribed to these for a reason. Some I even pay for, but when you don't get round to reading them then what's the point?

Everything in moderation. That's the famous quote right? While I don't stick with it for a lot of things (you can never spend too much time on a bike!), it does make sense when it comes to managing your digital inboxes and my newsletter inbox was running over.

So if you're reading this and I've unsubscribed from your list today, don't be offended. The quality of the email subscriptions I removed myself from today are high but when these gems of content end up just lying unread in my inbox then I'm afraid there is little point in still continuing to subscribe to them. In the unsubscribe comments I did leave as nice a reason as possible indicating my reason for unsubscribing though. That has to count for something.

Almost there with getting a client setup on @heroku’s pipeline feature. Review apps are set up. Just to decide on automatic deploys or not.

Another great post by Curtis McHale. This time on what your ideal life would be.

Here's a hint. It's not lounging on a beach every day.

There is a problem with that question of how you’d spend your time, even though it’s a good starting point. Money isn’t really a predictor of happiness and an awesome life.

What is the "ideal life" anyway? by Curtis McHale.

Nicholas Bate sums it up another way which I rather like.

Chase quality of life, not standard of living. The former is what most of us actually want.

7x7 Money Management by Nicholas Bate

Write Like You Talk

I try to write in this style for longer posts. People have commented on this in the past but I never figured it to be a big thing.

It seems to be hard for most people to write in spoken language. So perhaps the best solution is to write your first draft the way you usually would, then afterward look at each sentence and ask “Is this the way I’d say this if I were talking to a friend?” If it isn’t, imagine what you would say, and use that instead. After a while this filter will start to operate as you write. When you write something you wouldn’t say, you’ll hear the clank as it hits the page.

Write Like You Talk by Paul Graham

Four reasons in fact. Here's an excerpt from the first reason, validate your expertise:

Someone once said to me that most of the value created in the new economy is through writing. I’m not sure that I entirely believe this but I believe the sentiment that in a knowledge-based business the outcomes of writing are product and value.

Four Reasons to Write by Win Without Pitching

I've quietly relaunched my software development blog and plan on writing a couple of articles a month. I'm doing it not only because I like writing but to also test my knowledge and experience with my others in the software development industry.

For about two years now I’ve been a user of the static blogging engine Jekyll. In that time I’ve enjoyed the simplicity of it. You generate your site offline and upload it when you’re ready to publish. For developers this is straight forward to do and but it also provides lots of possibilities for tweaking the publishing workflow. Jekyll has a library of supporting plugins that provide different behaviours and tweaks and allow content to be embedded more easily.

For all that Jekyll has though in terms of features, I’m struggling with it as a publishing tool and lately I’ve found it to be more of a block in the publishing process rather than a benefit. So, what to do?

For a while now I’ve been considering switching to a less developer focused blogging platform. A static web site generator like Jekyll is great performance wise but switching to a blogging engine that included a back-end CMS would provide more in terms of benefits.

Drafting and scheduling posts are two features that immediately spring to mind. I suppose there’s also the built-in editing of live posts that platforms like Wordpress and Ghost provide.

After trying out a number of blogging platforms over the last two weeks I’ve decided to switch to Ghost. Built-in Markdown support is a big factor in my decision to switch. With all of my posts in Markdown, porting everything over to Ghost should be fairly easy to do. Also it has just enough other features to cater to my other requirements. Tagging, code injection for JavaScript, themes and the ability to export my content should I ever decide to move again.

Lastly there’s the whole argument about your presence on the internet and the breaking of urls by moving to a new blogging platform. Well the solution is simple. The old site will continue to remain up and running for the foreseeable future while I port the content I need to the new site. This also allows me to start blogging again from a new domain. This site will now be my corner of the Internet from here on in. If you’re an RSS subscriber you start subscribing from here.

The new site also gives me another benefit. The chance to review a few of my previous post types. Fixie Friday will return to its weekly slot rather than being fortnightly. Link posts will also remain and will be limited to one or two per day. I’ve decided to discontinue the Snippet posts for the moment. If you’re looking to find out what I’m doing on a day to day basis then you can follow me on Twitter. Lastly my daily posts will become a weekly post rather than a daily post. Posting on a daily schedule was a challenge but it also forced me to sometimes publish less than ideal content.

I’m looking forward to moving my content over to Ghost and blogging again. I hope you’ve updated your RSS feeds to follow me at my new digs. Should be fun.

Patrick Rhone is back from his personal retreat.

Like Thoreau’s Walden Pond cabin, each hermitage is a small, single room cabin with an attached screen porch. Each one is sparely appointed with just the essentials — a bed, a rocking chair, a small table, a couple of stations for washing and cooking, and a small altar for those who wish to pray. A delicious basket a food is supplied and refreshed daily — a couple of loaves of (oh-my-goodness-so-delicious!) homemade bread, some fruit, some local cheese, and some jugs of water. They have been doing this for years so every amenity is well thought out and centered around reducing any stress or desire.

Some Thoughts on Solitude by Patrick Rhone

Sounds like the perfect place to disconnect from the digital world.

Is paper making a comeback or did it simply refuse to budge from the digital invaders?

When reports came out last month about declining ebook sales, many reasons were offered up, from higher pricing to the resurgence of bookstores to more efficient distribution of paper books to increased competition from TV's continued renaissance, Facebook, Snapchat, and an embarrassment of #longread riches. What I didn't hear a whole lot about was how the experience of reading ebooks and paper books compared, particularly in regard to the Kindle's frustrating reading experience not living up to its promise. What if people are reading fewer ebooks because the user experience of ebook reading isn't great?

On the declining ebook reading experience by Kottke

Whatever the reasons, ebooks will never be able to fully replicate the experience of reading a book.

My Opinion on Medium is Changing

Ever since Medium opened its doors to the world it has attracted fans and critics. People that use it rave about its simplicity. Critics of the publishing platform (including myself) have voiced their opinions on why Medium is not for them. Its magazine format, “one for all” style and lack of custom domains was why it didn’t make everyone a fan. After its release, my opinion of Medium was that it wasn’t my idea of a good publishing platform.

Over the last few months though, Medium has in fact become a good source of content for me. Falling just behind my curated list of RSS feeds and my Twitter stream, Medium’s daily newsletter offers a daily list of curated stories from its users. I don’t see Medium taking the top spot any time soon but being a source of good content makes it hard to ignore. These stories are then added to my reading list. The lucky ones get quoted on my blog. I’m not a big enough sample set to say this is a sign of Medium’s impact on the world, but I’m surely not the only person who thinks that the Medium platform is a good source of content?

So what made Medium the next big thing in blogging?

Traditionally blogs were the primary means of publishing content. You could go down two roads.

The first was by using a hosted service such as Tumblr, Wordpress or Blogger. Through a simple sign up process, anyone could have their own little space on the Internet.

The second is to host your own blog. Thankfully things have gotten a little easier over the years to do this but it can still be a challenge if you’re not confident with the tools and services needed to make it happen. It’s not rocket science but it’s still a hurdle that many are willing to walk away from in favour of something a little easier to manage.

Over the years the hosted services have grown and matured, some have closed down, others have started up in the quest to be the hot spot for publishing content for the masses. No service has captured this idea like Medium has. Its basic process of writing and publishing makes it simple to put your stories out there for the world to read. The minimal floating toolbar for changing styles, the lack of distracting settings and the ease with which you can add supporting content like images to your story makes Medium an attractive choice for those looking for a hosted service. And that’s why it has taken off in the way it has. Its simplicity has captured many and offered the path of least resistance to publishing a story.

The benefits of Medium are clear but what about the drawbacks? Sure its look and feel is the same for all of its users and the choice of adding your own custom domain isn’t available for all. It will come soon though. These drawbacks are minimal if I’m being honest. When I look at Medium now I see that I’m nit picking at the platform which has become the killer app for publishing.

Which brings me onto my last point. Even though I’m not a user of Medium for publishing content, should I be that critical of it when it does allow people to share their content more easily than most other platforms? No, I shouldn’t. Any product or service that allows people to connect and share their experiences in a easy to do fashion should never be dismissed. It’s just not for everyone, but for most it is the ideal tool to use.

I used to be critical of Medium but my view on their service has changed over the last couple of months. Medium isn’t for me but I would recommend it for others that weren’t comfortable with hosting their own blog. Sure it has its drawbacks but so does every other publishing tool on the Internet including my own preference of Jekyll and Heroku. The reason I’m sticking with it for the moment is that it works for me.

Will I switch to Medium? Maybe. I don’t know. Probably not, but I am curious about using it for a short term period to see what it can offer, I just haven’t found that particular reason to use it yet.

Every now and again the conventional way of doing things is challenged with something a little bit different. Medium done that when they started and they’re still here today, daring people to change how they publish. Many have changed and even people like Jason Fried are giving it a try. Is this the end of the Signals vs. Noise blog? Probably not but the fact that the owners and employees of Basecamp are giving it a try is a testament to what Medium offers.

A bloody good publishing platform for the masses.

Drowning in Digital

I regularly go through the feeling of drowning in digital. I like being online and everything that comes with it, but when you’re working with software and development tools all day, the last thing I want to see at the end of my work day is a tablet, my phone or even my television.

This week I’ve spent a fair bit of time looking at my various digital outlets and wondering if they are in fact worth the effort to maintain. Here’s my list so far:

App.net is definitely going. I’ve no interest in keeping an account alive for the sake of having the name of the handle I would prefer. If someone else grabs it, fine. I’m not going to lose any sleep over it.

I have a love/hate thing going with Twitter. I love being able to have one presence on the social network scene. I’m not on Google+ or Facebook, so having an account on Twitter isn’t a bad thing. I hate what Twitter is though. It’s a distracting and destructive time consumer if it isn’t managed properly and lately it seems to be hoarding all my time. The worst part is I’m not tweeting that often to warrant spending the amount of time I do on it. There’s also the problem of activity. The people that I follow just aren’t as active as they used to be. Maybe that’s a good thing, but sometimes it feels like there’s nothing going on in the timeline. Am I missing the point of Twitter?

Finally, the blog. I had my finger over my mouse for a few seconds ready to trash the whole thing. Years of posts and stuff gone a in a few seconds. I didn’t though as you can see as it’s still here. I like my blog, I like the outlet it gives but lately it’s become a burden and it shouldn’t be. I’m faced with two choices for this. The first choice is I keep going with this blog and change my posting routine to be less intensive. One blog post a week is enough with a weekly link post to round up things. The second choice is to start a new blog elsewhere. I’ve got a couple of other domains at hand that I could start from. This site would stay up and running for the foreseeable future, but at some point it would be put out to pasture.

Decisions, decisions.

I've been struggling to find the motivation to write here. I've had my finger on the digital implode button for a couple of times. I don't think that's the answer though.

Dustin Curtis weighs in with some areas where Twitter needs to do better. I completely agree.

And that leads to me to the final thing I want to talk about, which is also the most important: Twitter has fucked up its platform. Twitter has turned into a place where famous people and news organizations broadcast text. That’s it. Nothing great is Built On Twitter, even though it should be the most powerful realtime communications platform on Earth. There are simply no developer integration features for building stuff on top of Twitter as a platform, and that is absurd and disappointing.

Fixing Twitter by Dustin Curtis

To be honest if Twitter was to disappear overnight then I wouldn't miss it. There was a time when I would but those days have long gone.

Started using Heroku’s new pipelines feature. No complaints so far with it. Also a much easier process of deploying between environments.

How to Ship Great Software

Pearls of wisdom from JavaScript laureate, Thomas Fuchs.

Don't follow the hype

Use what works for you. If you’re productive in PHP, by all means, use PHP. Of course, sometimes technologies come along that actually measurably increase productivity or have other huge advantages, but it can’t be overstated how few and far between those are — perhaps one or two happen in a decade.

How to actually ship software that actually works
by Thomas Fuchs

I'm not adverse to trying out different programming languages, but the steady stream of new languages and frameworks that appear along with their evangelical users about why theirs is the next big thing is wearing.

I like Adam Keys advice on this.

Everyone Needs a Personal Website

I couldn't agree with Matthew on this topic more.

Having a personal website is something most people my age don’t do. However, most millennials have a web presence via social networks like Instagram, Facebook and Twitter. Having a web presence is very important, and is almost a requirement in this digital world. Using social media for your web presence works wonderfully, but you don’t own and control your content. At any time your social media account could be deleted, and then your long time web presence is gone.

Everyone Needs a Personal Website
by Matthew Dilulio

Is Ruby on Rails Still Relevant?

It’s a question that I’m seeing on an increasing basis as I venture through the Internet. I’ve seen it appear on a few forum sites and it has appeared in a couple of newsletters that I subscribe to.

Before we answer the question, let’s take a brief look at the history of Rails. 10 years ago the first version of Ruby on Rails dropped. It caused a stir due to the ease with which web applications could be made. In that time it’s moved on through four major versions, had hundreds of releases and has been the collective work of hundreds of software developers who have devoted their free time to making Ruby on Rails what it is today.

Since then there’s been a search for the next killer web framework that will replace Ruby on Rails. 10 years on I’d say we’re still waiting. No other web framework has had the impact that Ruby on Rails has.

So is Ruby on Rails still relevant?

Definitely yes. While a lot of developers have adopted and then moved onto other languages and frameworks, there is still a large amount of developers that specialise in Ruby on Rails. The market for Ruby on Rails developers for full-time and contract work is still healthy. There’s also still a large amount of companies and organisations that need Ruby on Rails developers to maintain web applications and there’s still a demand for these developers with Greenfield projects as well.

It’s not as highly a sought after as it was maybe five years ago, but it’s still a relevant technology as well as a mature technology. It’s been tried and tested by many developers and it’s benefits for building web applications is well known now. Given that companies would rather not risk building an application in a new and unfamiliar technology, Ruby on Rails is now seen as a mature web framework that has grown up over the years.

Ruby on Rails will be relevant for at least the next five years and possibly the next ten years. From there, who knows. As long as it is a low-risk technology for clients, I’ll keep recommending Rails for projects that it is a good fit for.

Recruitment agency has sent me a role for a rail engineer. Nice to know that Ruby on Rails attracts roles outside of programming.

Need a Boost?

Execupundit has you covered.

It can be difficult to predict the popularity of topics. Supervision may become a mainstay subject since new supervisors are always in the pipeline and even the senior ones need refreshers. I've had people in class who last attended a workshop on supervision around 30 years ago. Many, of course, were never formally trained. One day they were told, "Congratulations! You're a supervisor."

That's why it is not rare to hear a senior supervisor exclaim, "I wish I'd had this class when I started in this job."

Booster Shot
by Execupundit

Hello Atom!

About a year ago I made the jump to Vim. Having finally mastered enough of the keystrokes to muster through a single coding session, I made it my default text editor for programming. In the last couple of months though I've been using Atom for most of my programming. The reason for the move? Just for a change. Atom does have a number of niceties that encouraged the switch.

Good Looking

Vim is simple and productive but let's be honest, it's not exactly an eye-opener as development tools go. Sure you can cut and splice code like a keyboard armed ninja, but its look begins to get a little dull when you're using the same development environment for most days of the week.

Atom, like Sublime Text is it's own application and doesn't run within your terminal. The plus side to this is that it isn't restricted in the way the user-interface can give feedback to me through elements like auto-complete suggestions and notifications.

Atom is easier on the eye and maybe that's a cop-out reason for making a change in your development tools, but my eyes start to strain staring at a two-pane terminal session for most of the day. Maybe it's an age thing, but coding with Atom is much easier on the eyes than writing code within my terminal app.

Keyboard Friendly

Atom, just like every other development tool on the planet has a list of keyboard shortcuts that eliminate the need for a mouse. Not only that but there are some keyboard shortcuts from Vim that I can take with me to Atom. Also, like Sublime Text it includes a command palette to allow you to lookup and select the right command for the job.

Atom is keyboard friendly but more importantly for me, it's familiar in that most of the keyboard shortcuts I use are either from Vim or similar to shortcuts that I previously used in Sublime Text.

Switching to Atom wasn't prompted by it being a more productive editor, its growing community of packages or the fact that it's made by Github. The reason for the switch was just for a change. Sure I'm just as productive with Atom as I was with Vim or Sublime Text but sometimes you just need a change of tools to keep things interesting. A simple change like this can stir things up for the next few months or even years. At least until they perfect a text editor in the browser.

Repeating the Basics

A tweet by Brian P. Hogan sums up brilliantly what I've been doing in the last two weeks to stay sharp.

Whether you’re playing scales, shooting free-throws, or writing a web page, repeating the basics keeps you ready to perform.

Twitter by Brian P. Hogan
I've started using this practice in the last two weeks to help me stay sharp both mentally and physcially.

Mental Practice

In the last couple of weeks I've started learning Python. To do this effectively I needed a list of problems and solutions in Ruby that I could compare with Python. I didn't have anything so I started building Ruby implementations of basic data structures like lists, queues and stacks.

The solutions themselves are not complicated but that practice of writing simple classes and tests is something I've been doing almost every day for the last two weeks. What I'm hoping to do is to have a repository of code examples that are easy enough to do in thirty minutes, but can be used a starting point for other programming languages.

So far, I've been implementing similar data structures in Python and so far I've found the learning process to be much easier than if I had simply just started reading a book in Python.

Physical Practice

They say you never forget how to ride a bike, what they do forget to tell you though is that your body usually forgets rather quickly how much effort is needed to ride a bike.

Over the last twenty years I've had gaps in my riding that has sometimes amounted to months. Technically, I'm good on the bike. Shifting weight between the wheels, getting the right gear in place for tricky climbs and maintaining balance on the bike for when things almost grind to a complete halt. These little tips and tricks have been amassed over years of riding bikes. They never leave you. What does leave you though is the rest time that your body needs in between intervals of high intensity cycling.

To combat this physical forgetfulness, I've started doing intervals at my local trails to help get my recovery time down. The basics of bike riding are often seen as having the technical chops to guide the bike fast through obstacles on the trail, but you need more than this to keep the momentum of the ride going. The intervals help by reducing the rest time your body needs through periods of high and low intensity riding. After a couple of interval sessions I'm already starting to see improvements.

Repeating the basics can be applied to any profession or activity. Taking the basics of the activity and practicing them regularly help ensure you never go rusty or get out of shape. It's a small investment in time and effort to stay sharp but it's an investment I'm willing to make for the benefits in the long term.

When we talk about tools that make us productive, we often refer to products and services that automate things for us. They do the leg work for a specific task while we move on with something else. While this is a nice idea in theory, too often than not, we find ourselves swept up by emails, messages, phone calls, social networks and other digital interruptions rather than moving on with that other task.

The best tools aren't just tools that automate work for us (although they do help), they also let us do with the work without interruptions. These tools don't rely on network connections, the Internet or any other digital highway to work. They just work, with or without an Internet connection. A few examples of tools spring to mind. For me tools like, Byword, Marked 2, Vim and Sublime Text are great tools for working offline, but being able to work offline aren't the biggest selling feature.

As a software engineer I do a lot of reading of manuals, technical and programmming books. I also read a lot of programming language and framework documentation through the day. My memory isn't as sharp as it used to be, so I might refer to the docs for a programming language or framework when I'm writing code. Most of these docs are available online. I'm not always online though. Which is why I love using Dash. It's a document browser that allows to the documentation of various programming languages and frameworks offline. So whether I'm online or not, I can always be sure to get access to the documentation I need when I'm working.

There's a huge number of apps now that try to keep us in a state of being permanently connected to the Internet, but it comes at a cost. Being online means being connected, being connected means being distracted and being distracted is how we fail do the work we intended to do. When it comes to being productive, look for tools that work offline. Turn off your wi-fi and get working. It's surprising how much work you get done.

Does Your Organisation Pass the NB Audit?

Be honest.

I'd be surprised if most organisations managed to even get three out of seven on Nicholas Bate's seven point audit.

From my experience the best company I've worked in managed five of these points. However, each company has failed on the parking. For some reason the director had to be the nearest parking space to the door. Maybe he/she just wanted to be first out the door.

Obama's Stealth Startup

Great to see the US government using leading engineers from Silicon Valley to work on their digital infrastructure.

Lisa had just spent time on the upper management teams at Hulu and BET. She decides, reluctantly, that she’ll go take the meeting, which includes this guy named Mikey as well as this other guy named Todd, and turns out to be in the Roosevelt Room in the West Wing. Then President Obama opens the door and surprises everyone, and over the course of 45 minutes gives the sales pitch to beat all sales pitches. They need to come work for him. They will need to take a pay cut, the president announces. But he doesn’t care what it takes—he will personally call their bosses, their spouses, their kids to convince them. The crowd laughs. But he gravely responds: I am completely serious. He needs them to overhaul the government’s digital infrastructure now.

Inside Obama's Stealth Startup by Fast Company

You think the best coaches and players sit near the field of play? Think again.

You always find the best players and coaches in the bleachers. They know all of the right plays and the sharpest moves. They can tell you who should have been traded or kept and can rapidly recite a litany of blunders going back to the Twenties and beyond. They're especially ready to recall maddening mistakes they've been forced to endure while watching games or listening to sports radio.

In the Bleachers
by Michael Wade

Ever since I took delivery of my Nock Hightower a few weeks ago, my notebook has been with me every where I go. Even when I'm at home it sits on my desk just behind my keyboard, always within reach.

Yesterday and today I took advantage of some downtime and sketchnoted a few blog posts I was reading in the morning.

Creating Great Content

Taken from The Next Web - "How to create consistently great content"

Sketchnote of creating great content

Writing for Your Clients

Taken from Curtis McHale - "Are you writing for your ideal client?"

Sketchnote of writing for your clients

Strategic IT Agility

Taken from Thoughtworks - "Reworking IT for Digital Success"

Sketchnote of strategic IT agility

Each of these posts had value to them. Sure, I liked them on Instapaper after reading them which in turn added them to my Pinboard, but the chances of me revisiting these bookmarks in the next few days is slim. However, with the sketchnotes in my notebook, they are more accessible for review. Going to stick with this over the next few weeks.

My Favourite Feature in Firefox

I think it's fair to say that I've finally settled on a browser that I enjoy using. For well over a year now, Firefox has been my browser of choice. Over the years I've used Internet Explorer (long story), Safari, Chrome and even Opera for a while. In between those I've used Firefox as well. Ditching all Google tools meant that I wanted something that had good development tools, an extensive library of add ons and a few other features that I just like as an individual. Firefox fitted the bill and I've been using it for two years straight now.

Firefox has added a number of great features of the years. Cross-platform support, continually improving security and even pinned tabs. They're all great features, but the single best feature I love about Firefox is this.

Opening tabs in the sidebar.

Expecting something else? Okay, it's not the ground breaking feature that everyone might rave about, but it's a feature that I like the most and here's why.

Ever since I seen split views in Vim, iTerm 2 and Tmux, I've seen the benefits of having multiple views open at once. Being able to switch at a glance from one file to another is a major productivity win. You can work on the part of the application that matters while having other parts of the application that you need to know in other views. You can even have your command line open in one view and your code in the other.

In Firefox a similar view can be achieved using Firefox's open in sidebar property in your bookmarks. What happens is that a second browser window will open to the left of your main window.

I spend most of my day on the web. Feedbin, Trello, Todoist and GitHub are where I spend most of my time. Siwtching between these tabs can be a pain if you require two of them open at once. Using the sidebar in Firefox though means that I can have one site open in the sidebar for taking notes or collecting information as well as allowing me to still focus on the immediate task at hand in my browser.

An understated feature of Firefox, but one that makes a productive difference to my day.

My Alternatives to Google

Ever since going Google free, I've tried a number of different services to cover my needs. In this post I'll highlight seven alternatives to Google's own products.

Search Engine - DuckDuckGo

It's been two years now since I stopped using Google for searching needs and started using DuckDuckGo. Overtime I used DuckDuckGo's bang methods to redirect search queries to Google if DuckDuckGo didn't have what I was looking for, but overtime I've had to do that less and less. I'm not sure if DuckDuckGo's search results are improving or my searching needs have lessened over time. Either way, I'll be sticking with DuckDuckGo for the foreseeable future.

Email - FastMail

This is another service that I started using two years ago and I continue to use today. FastMail's email service isn't free for those with a moderate sized email archive, but paying for a service helps ensure that it stays around for a long time. Gmail is free, but with an email client that integrated a whole bunch of other Google services, it started to feel less like an email client and more like a communication centre. Gmail's spam filtering was also once the best spam filter in the field, but I'm glad to say that FastMail's own spam filtering is great and I've no complaints.

Cloud Storage - Dropbox

I never used Google's own cloud storage product, Google Drive. I've been a user of Dropbox since it first came out. What I like the most about Dropbox though isn't its pricing, or it's synchronisation across devices. I like the fact it isn't part of something bigger. I think if Google or Microsoft were to buy Dropbox then I would have to look at another cloud storage solution. I don't like the idea of having all my Internet eggs in the one company basket.

Document Management - Pages, Numbers & Keynote

Desktop apps can be just as efficient as cloud solutions like Google Docs. In fact maybe even more. I use Pages, Numbers & Keynote for all my document needs. I usually have my MacBook with me most days when I am working so using these native apps is a no brainer. If I needed remote access to my documents to edit them I would maybe consider using something else, but for my needs this is sufficient.

Analytics - Gauges

I was a long term user of Google Analytics for various websites over the years, but after a while I simply got overwhelmed by all the metrics and stats that Google provided. My needs were simple. I wanted to see how much activity my website was getting in terms of clicks and people. At the time Gaug.es was a product of GitHub, but the service has changed hands. It's still the same service that GitHub made and nothing has changed much over the time since the handover. Gauges isn't the only alternative though, there are a number of alternatives that serve different needs.

Blogging - Heroku & Jekyll

Who says you need to replace one service with another. What about combining products? My blog has been through lots of different iterations but since 2013 I've been using Octopress which is just a nice layer over Jekyll. Recently I switched to just using Jekyll. I didn't need the extra layer of functionality that Octopress provided.

With my blog catered for I needed a host as well for it. Given my website is static, I could use Amazon's S3 storage, but I wanted to be able to extend my site with Sinatra if needed. In the past I've used Linode to host my blog, but with Heroku's recent pricing change towards cheaper dynos, I'm now hosting my blog there. It also means that when I commit my changes to GitHub, my blog is automatically deployed to Heroku.

Rolling your own blog isn't difficult to do but for those that want a simpler way to publish, there's a number of good alternatives.

Calendar - iCloud & Fantastical

Lastly it's the turn of the calendar. I used Google's calendar service a lot. Probably second in line in terms of daily use to Gmail. I use Apple's Calendar app to keep my calendar synced between my laptop and my phone, but I also use Fantastical to manage my calendar on a day to day basis.

Going Googe free is a big move if you have heavily invested your time and needs in Google's own line or products and tools. I was fortunate in that I used mostly Gmail and Google Calendar and they required minimal effort to move across. Two years later, I'm still happy with my own chosen stack of apps that are outside of Google's borders.

Batteriser Extends Your Battery Life

This is the kind of technology innovation I like to see. "Killer apps" are common as muck these days. Technology like this extends the life of your gadgets (good for people in remote areas) and reduces the amount of batteries being dumped in landfill sites.

This is where Batteriser comes in. It’s essentially a voltage booster that sucks every last drop of useable energy from ostensibly spent batteries. So, instead of using just 20 percent of all the power hidden inside of your Duracells and Energizers, Batteriser makes effective use of the remaining 80 percent.

Batteriser is a $2.50 gadget that extends disposable battery life by 800 percent
by MacWorld

The Learning Benefit of a Side Project

As I move towards building up my GitHub profile with examples of work, I realised something about my side projects. They provided the perfect place to try new things and familiarise myself with new programming languages and frameworks.

Most web developers have probably at one time or another had a side project running alongside their day job. It could be an open source web application, a framework, a library or even a product or service that provides an extra bit of income. Regardless of what it is, having a side project is one of those things that web developers usually end up doing. It's almost like a rite of passage.

Most developers are working on large applications in their day jobs. Some are more fortunate than others on the choice of technology they're working with, but there will always be developers that are not using emerging technologies or languages at their day job. It just isn't always feasible to do.

So what's a developer to do?

Well, like most developers I usually turn to a book to pick up something new. I might read five or six development books in a year. Most of the time I won't go beyond reading the book to exercise the knowledge that I've picked up. When I do though, I usually put together little scripts or programs to get familiar with the language that I've just read about. Beyond that I rarely do anything else.

The best place to exercise your new found knowledge thought is on a side project. When I hit on an idea for a side project, I'll write a little spike for idea in Sinatra or Rails and see if it's worth having around. If it is, I'll keep it and use it for my own purposes. Rarely has anything made it past this point though.

With what I have been using on a daily basis though, I'm starting to tidy these bits of code up and put them on GitHub profile. I have one little side project called ClipPress that I run on a free Heroku instance. It's just a single form that I can fill in a few details and it will create a post in my Jekyll blog on Dropbox. It then syncs back down to my MacBook where I can fix up the post and publish it.

A number of Javascript libraries like Ember, React and Backbone have recently caught my eye. In the past I haven't gone beyond the basic demos with these, but having a side project like ClipPress means that I have a working environment to try out new things. I can plug in different JavaScript frameworks to see how they work. I can write the ClipPress application in a different language or framework just to see how they compare.

The benefit of a side project is that you have a working base to build upon. Building applications from scratch can be tedious work, and making something new for the sake of learning something else means that we might not see the end result in action. With a side project though you can build on the code base you have to see the results in a working environment.

Side projects are often cited as a way of generating extra revenue and they can be that if someone is willing to pay for it, but for most of us we just want to hack something together that removes a manual step we've had to do in the past. These side projects are a great place to try something new and learn from it.

FIFA Officials Face Corruption Charges

FIFA officials are now facing corruption charges for bribery that occurred in the US and was paid through US bank accounts.

As leaders of FIFA, soccer’s global governing body, gathered for their annual meeting, more than a dozen plain-clothed Swiss law enforcement officials arrived unannounced at the Baur au Lac hotel, an elegant five-star property with views of the Alps and Lake Zurich. They went to the front desk to get keys and proceeded upstairs to the rooms.

FIFA Officials Arrested on Corruption Charges; Blatter Isn’t Among Them by The New York Times

I'm not a big football fan, but it's not good to see one of the worlds biggest sports tainted in the last few years by allegations of corruption.

I wonder if Sepp will get through this scandal unscathed?

Is the Web Defeated?

I hope not.

Technically, it’s simple. The web cannot emulate native perfectly, and it never will. Native apps talk directly to the operating system, while web apps talk to the browser, which talks to the OS. Thus there’s an extra layer web apps have to pass, and that makes them slightly slower and coarser than native apps. This problem is unsolvable.

Web vs Native: Let's Concede Defeat by Peter-Paul Koch

It's not all bad though. Peter-Paul does go on to say how web apps can still compete against native apps.

Building a Universe

No Man's Sky has high expectations. With a game universe composing of billions of planets, it is set to change the world of gaming. I for one can't wait for its release.

The universe is being built in an old two-story building, in the town of Guildford, half an hour by train from London. About a dozen people are working on it. They sit at computer terminals in three rows on the building’s first floor and, primarily by manipulating lines of code, they make mathematical rules that will determine the age and arrangement of virtual stars, the clustering of asteroid belts and moons and planets, the physics of gravity, the arc of orbits, the density and composition of atmospheres—rain, clear skies, overcast. Planets in the universe will be the size of real planets, and they will be separated from one another by light-years of digital space. A small fraction of them will support complex life.

World Without End
by The New Yorker

Switching Off CCTV

I'm on the fence about whether switching off CCTV cameras to save money is a good or a bad thing for the public. What sent alarm bells off for me though is the mention of CCTV camera being classed a counter-terrorism tool.

Last night the Police Federation said the deactivation of CCTV cameras would introduce “vulnerabilities” to counter-terrorism operations and “deny justice” to the victims of sexual offences and street violence. But civil liberties groups said there was little evidence of the cameras’ effectiveness and that councils were right to keep them under constant review.

CCTV cameras secretly being switched off by cash-strapped councils by The Independent

The use of 'terrorism' as a reason for keeping CCTV cameras switched on was a step too far though.

Wrote my first bit of Rack middleware yesterday for a Rails application. Not so hard to do once you know how it passes requests through.

Why You Turn Up

I love this.

You turn up because of the people around you.

You know, the ones with common interests and sense of ambition.

The ones who want to invent new things and do old things better.

The ones whose distortion of reality present challenges that stretch you.

The ones who give you freedom to do things differently.

The ones you trust not to drop the ball (there are no ball droppers here).

You even turn up for the ones who grate on you (they’re also brilliant).

You turn up because the people around you value what you do.

They believe in you and give you what you need.

Together you create something more than a job.

Don’t settle for anything less.

Why You Turn Up by Dom Goodrum

via swissmiss

I cleaned out my RSS feeds over the weekend. The following feeds have been removed for different reasons:

I've also found a few blogs that have been added to my feeds list:

  • Engine Yard Blog - I don't have anything deployed to Engine Yard, but they're always producing good content from a developers perspective.
  • Iand.net - Ian Dick is a fellow dev from Scotland with a blog that has a good mix of content.
  • Scribbling.net - I have always been a fan of Gina Trapani's work. Even though she's not part of the Lifehacker team anymore, it's good to see she's still writing
  • The Art of Manliness - There we were, me and the boys trying to entertain ourselves when we hit upon the idea of making paper airplanes. Took it to the next level though and made some paper airplanes using the designs from this blog. What more reason would I need to subscribe?

Re-reading

I have old favorites I return to again and again. Stories like Watership Down, The Wind and the Willows, Winnie-the-Pooh, and Washington Irving’s Sketch Book are wonderful re-reads. I’ve read many of Jim Harrison’s works over and over; the same with books by William F. Buckley, Jr., Paul Johnson, Charles Murray, Ray Bradbury, Stephen King, and H.L. Mencken. I recently added Elmore Leonard to my re-read stable.

Reading and re-reading by Kurt Harden

I have been re-reading a few books from my programming stack. I haven't re-read any fiction for a while though. Might be time correct that.

A brilliant post about the increasing world of digital distractions.

Still, I am an optimist. Most nights last year, I got into bed with a book — paper or e — and started. Reading. Read. Ing. One word after the next. A sentence. Two sentences.

Maybe three.

And then … I needed just a little something else. Something to tide me over. Something to scratch that little itch at the back of my mind— just a quick look at email on my iPhone; to write, and erase, a response to a funny Tweet from William Gibson; to find, and follow, a link to a good, really good, article in the New Yorker, or, better, the New York Review of Books (which I might even read most of, if it is that good). Email again, just to be sure.

Why can't we read anymore by Hugh McGuire

Remember that the decision to reduce your increasing inbox of digital goodies is down to you. It can be done, it just requires a bit of action and some discipline.

Might start calling my smartphone a dumbphone. It certainly makes me more dumb than smart.

Just a heads up that I’ll be available for freelance/contract Rails work from the 1st of June onwards. DM your details if you’re interested.

Moleskine are adapting to the digital world around them, but the big plus from this article is that despite the prevalence of technology, Moleskine's little black books are still their top seller.

The number of Moleskine paper products, including variations on the notebooks, has ballooned to about 500. But the top sellers are still the blank black notebooks in the original pocket size and a larger version.

Moleskine Notebooks Adapt to the Digital World by New York Times

via The Cramped

“We’ve always spoken about the principle of association since he was young and playing in bigger stage events,” McCormick said. This means paying attention to the good shots of others to increase the likelihood you’ll hit a good shot. “We’ve also worked on building an ‘imagery reel’ of his past successes to draw back on to amplify his confidence.” Again, the idea is the act of remembering a good shot can actually trigger your motor skills to fire the same way.

Spieth's instructor since age 12 knew he had something special by Golf Digest

Michael Wade, our resident pathfinder, knows the way forward.

Take your time and as you move down the path, be open to new thoughts. They frequently visit when we're otherwise engaged.

Watch the Trail by Execupundit

Being Boring With Technology Choices

The nice thing about boringness (so constrained) is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood.

Choose Boring Technology by Dan McKinley

I'm always keeping an eye on the future for the next "best thing" in programming, but to be honest I'm finding it hard to justify picking up a new language on the basis that it might take off. Rails is seen as old hat now but it's also tried and tested and perfectly suitable for building web applications and services. Yeah it's not on the edge anymore but then I know what to do when something goes wrong.

Why I Paid for Fantastical 2

During the week I found out that Flexibits were releasing a major upgrade to their OS X calender app, Fantastical. When Fantastical first came out, I bought a copy from the App Store and since then I've used it on a daily basis. I can't remember how much I paid for it, but it was money well spent. For close to two years, I got an excellent calendar app that sat in my menu bar and did the job it was intended to do. It came with a number of minor upgrades to the application over the time that I used it. Not bad value for money.

Today I opened the App Store, found Fantastical 2, bought it and installed it. No hesitation, no pondering if the application is in fact worth the purchase or even deciding whether Flexibits deserve my hard-earned cash for the new version of Fantastical (they do btw).

I don't mind paying for major upgrades to software that I use. Not only am I supporting the future of the software product that I am using by ensuring money goes back into the company that produced it, but I'm also supporting the developers who make the software. For developers, writing code is a way of making an income to support themselves and in some cases also supporting their families. Some developers work for clients, some provide consulting services, but for indie developers and small software houses like Flexibits, they work on a business model that requires income from people buying their software. Nothing wrong with that. It's how many businesses work.

Here's the problem though. Some people expect the software they buy to be supported for life. That's a ridiculous idea and here's why.

Software doesn't last for ever.

Changing operating systems and technology as well changes in the way we work means that software will always change. It's just the way things are, and it's not restricted to the world of technology and software either. Lots of products we buy can last for years, but they'll rarely last us a lifetime. Software isn't any different. When I buy a software product, I'll expect a couple of years worth of updates before having to buy the next version up of the product. It just makes sense.

When apps first appeared on the App Store as different versions, there was an initial push back against the idea. People were complaining about having to buy the app again that they had already forked out a few dollars for in the past. I'm glad to see though that there's less resistance to the idea of new major versions of software and apps coming with a price tag.

If the app you use makes a positive difference to your day, then why wouldn't you fork out the money for a new major version of it? If the developer of the app is releasing a new major version every year then I might see the point against paying for that app, but most app developers are giving their apps a couple of years at least before releasing a completely new version of their app.

Software doesn't last for ever, but with the support of you as a paying customer, it can keep going for as long as the developer has the financial support they need to keep working on it. That's a small price to pay for an app that makes a big difference to your day.

Are Trolls Attracted To Videos?

No spot comes close to YouTube when it comes to the number of dumb and vicious remarks in its comments section. Even bland videos, ones without an ounce of controversy, are ripped.

Mean Magnet by Michael Wade

I'm just wondering if video is easier to consume than actually spending the time to read something and let it sink in. I suspect many of the comments on YouTube are simple knee-jerk reactions to each video.

Search for deeper understanding of approaches to programming that seem strange or incorrect to you. Don’t look for wrongness in what someone else is doing or what you’re thinking.
Programming Advice for a Younger Me by Adam Keys

One of my biggest problems in my career has definitely been a lack of confidence in the code that I wrote.

A fantastic piece on the drawbacks of using publishing platforms such as Medium.

In truth, Medium’s main prod­uct is not a pub­lish­ing plat­form, but the pro­mo­tion of a pub­lish­ing plat­form. This pro­mo­tion brings read­ers and writ­ers onto the site. This, in turn, gen­er­ates the us­age data that’s valu­able to ad­ver­tis­ers. Boiled down, Medium is sim­ply mar­ket­ing in the ser­vice of more mar­ket­ing. It is not a “place for ideas.” It is a place for ad­ver­tis­ers. It is, there­fore, ut­terly superfluous.

The billionaire's typewriter by Matthew Butterick

What is The Rails Way?

It's a question I've been asking myself as I switch between different Rails applications for different clients. In my early days of working with Rails, I had a preferred selection of gems that I liked to use and that I stuck with for many Rails applications. After a few upgrade issues on a couple of applications I started to pay more attention to how I build applications with Rails. I questioned the gems that I was using and my testing practices. As I've gained more experience I've started to see that working closely to the Rails framework when building applications has some benefits that I previously overlooked.

What you're about to read isn't a silver bullet approach to building Rails applications. This is simply a guide to what I've find works for me.

Application Architecture

In the past most applications I worked on followed the old favourite of "fat model, skinny controller". Most applications tightly followed the MVC pattern and very few classes or objects were located outside of these three folders of the application. It does work, otherwise Rails wouldn't be as popular as it is, but following the MVC pattern did present one problem. Models became huge wells of code as they tried to contain the bulk of the application's code. Now I try to follow some best practices when coding but I don't strictly adhere to them, but you have to admit that a model with a 1000+ lines of code could probably be trimmed down a bit.

Since reading and watching a number of different ways in organising your Rails application, I've started to see the argument for extracting business logic into individual classes. You might be thinking of service objects or Hexagonal Rails when I say this. It's the same idea. I've started to keep classes that contain business logic in the app folder, alongside the rest of the application's objects. The reason for this is that I see the business logic as being part of the application, not a seperate layer or component of the application. I'm using Rails for my application, so I want to keep the business logic close to the rest of the application.

Gem Dependencies

Gems sure are handy. Just add to the Gemfile, install and your application has access to new functionality when it needs it. While adding gems is the easy way to add functionality to your application, you then have a dependency on that gem to stay maintained.

Before you even begin adding the gem to your Gemfile, ask yourself if it is truly necessary for your application?

In the past I would happily add a gem that I thought I needed, but now I take a different stance on it. If a gem provides just a small bit of functionality to the application, I take the time to spike a similar or better solution for the application on my own. The reason for this is that sometimes a gem won't do everything you need it too. If it can provide everything you need then great, but if it only provide most of your needs, could you add the complete functionality that you need by yourself?

Building this functionality on your own isn't always the best way to go, but if your application has specific requirements, then I say it's definitely worth looking at. Rolling your own solution to your application's requirements means that your solution could be a better fit for your application than anything else that's out there. It also means that with your own solution, you are responsible for keeping it maintained. Lastly, it keeps your Gemfile lean and the dependencies for your Rails application lean. I don't suggest you do this for everything, just the gems that you might question over their suitability for your application.

Testing

In the past I was a keen advocate of Cucumber and RSpec. That has changed over the last year. I'm finding that the testing tools that Rails provides are more than adequate for new Rails projects and sometimes better suited for smaller Rails projects.

Out of the box Rails provides Minitest through Ruby to write your tests and fixtures to organise the data you want to test against. Minitest is flexible in that you can write tests or specs depending on your preference, so I don't have any issues there. Minitest in a new Rails application is straightforward and it doesn't require any changes to your application's setup to get it working. Why even bother changing?

The real benefit I've seen though is in doing testing the Rails way is by using fixtures. They do require some initial effort to put together, but they're always there for subsequent tests runs and soon you'll start re-using fixtures for different tests and rarely have to touch them.

Rails is a database backed web application framework. Now I've seen the arguments for isolating the database from your tests, but for a framework that persists its data to the database, I think it's overkill to start stubbing out calls to the database and canning data using factories. This is why I like using fixtures. It's real data you're working with. A complete working set of test data.

Finally, an argument against using fixtures in the past was that tests took too long to run. I have to say that this is not a concern now. I have worked on a number of Rails projects using Minitest and fixtures and while their test and assertion counts run into the hundreds, I've yet to see a test suite take longer than 30 seconds. And even if your test suite is on the large side, it shouldn't be a major concern as you should have your tests automated to run as you edit your code by using something like Guard or Spork.

So What is The Rails Way?

Since I've made a few changes in how I build Rails applications, I'm definitely a more productive developer and I'm able to build new features with minimal fuss. The Rails way for me is working with the tools that Rails provides and building an application as close to the application's own models, controllers and views as you can. Simple patterns and designs are available to reduce complexity but aren't always necessary. I don't suggest you immediately think about re-writing your whole application to fit around these three suggestions, but bear them in mind for any future Rails projects that you have.

Short Term Contractor, Long Term Freelancer

Even before I started freelancing, I always got confused by the almost interchangeable career titles of freelancers and the jobs that were available to them. Contractor, consultant and freelancer. Are they specific to the type of work freelancers do?

When I started freelancing, I decided to market myself as a "Freelance Web Developer". I had thought about the different titles I could use but I paid more attention to the technology field rather than the type of work I would be doing. I stuck with the title of freelancer as I simply thought it best described who I was. This was almost right, I wanted to freelance but what I wanted to start work on was contract work.

Starting Out As A Contractor

To begin with I was keen to look for roles where I could gain a bit more experience working as part of a remote development team. I wanted to work in remote teams to see how they continue to progress with projects. In the past I worked in teams that shared the same physical space and therefore communication with other team members was easy. How does this affect remote teams?

I also wanted to gain more experience in my preferred choice of technology stack. I had a number of roles working with Ruby on Rails, but I was definitely far from being an expert on the framework. A few gigs working in different teams would quickly identify areas where I might be short on knowledge. Thankfully this wasn't a problem.

Armed with these two goals, I found out that contracting would be the best work for me. As a contractor I can market myself as a development resource to clients. They might be looking for that extra programmer needed to finish a project or they might need a developer with experience in a technology stack that they are lacking in. Whatever the reason, my primary role as a freelancer so far is as a contractor.

Long Term Focus As A Freelancer

I don't want to be a contractor forever though. In time I would like to gradually move across to being more than just another "butt in a seat".

Contracting is good because it means the decisions are largely removed from your hands. Your clients decide the work for you and you as the contractor fulfil your client's needs. While this type of work does pay the bills and keeps my career going, I don't believe that this should be my long term goal.

Doing the work is one thing, but advising the client in the way in which they can best achieve their aims is the work of the consultant. While I could market myself exclusively as a contractor, I would in fact like to be more than just another programmer in the team. I would like to be more of mix between contractor and consultant.

What's The Next Step?

This is where I believe the term freelancer applies to the type of business I want to have. I love programming, and being able to work with a client's team and help fill a gap is where I'm comfortable and productive. It shouldn't be my only selling point though. To do this, I'm going to need a web site that focuses on business and freelancing and nothing more. It's going to need material such as test cases and examples of work that back up my abilities as both a contractor and a consultant. I'll see what I can come up with.

3 Reasons for Sharing Content

I've been keeping this site going for a few years now, and while my main form of sharing content is through the RSS feed for this site, I do also share content through Buffer. It's ability to schedule posts for the networks I'm on is what made me sign up. I also use a separate domain for all my shortened links for each post and it starts to look a little more branded.

Why do we share our content in this way though? I can't speak for the mass collective of netizens, but here's why I share links through Buffer.

1. To Be Seen

People share their content in this way as a marketing tool, they want to be seen. And so do I. Being self-employed means that I need to keep my name out there.

While my recently published content doesn't strongly tie in with my freelance career, I do like to think that what I publish is valuable to others and may lead to new clients and contacts.

2. To Suit The Reader

Not everyone uses RSS to subscribe to content. For many, social networks are their first point of call when it comes to finding new content. This is the main reason why I share my content in this way. RSS is often seen as a more techie solution for subscribing to content which is why some people prefer to get their news from their preferred social network.

3. To Pay It Forward

Some things are just too good to keep to yourself and that's why I'm starting to share more links on Buffer. For the content that I find valuable and worth reading, I'm going to start sharing on Buffer. They might not make my blog in the form of a link post, but sharing these links in other places means that the original authors of the content get noticed.

That's the main reasons why I share the content that I do. Largely it's about having an active presence on the Internet and letting potential new clients and contacts know that, "I'm here!".

This is a personal site though and unsuitable for the kind of content that would get me noticed by new clients. For that I need a separate site with more focused content on Rails, Ruby and other web development topics. This is in the pipeline and I'm hoping to have something up and running by the summer.

Store Bought Bike or Online Bought Bike?

For the last month I've been pouring over mountain bike websites and magazines in the hope that I can pick up a decent bike at a reasonable price.

In the distant past this was a no-brainer. I would head to my local bike shop and ask about some recommendations. The advice was always balanced towards the models they had in the store or could order in. To be fair most local bike shops carry a fair range of mountain bikes, and if these were the only ones on offer then you can always find something that will suit your needs. Things are changing though with the introduction of Internet based bike companies. These small companies offer better specced bikes for less than the majority of bikes that are available in your local bike shop. They do this by selling directly to the customer, cutting out both the distributor and the local bike shop.

On-one have been a favourite of mine for a while. Their initial line of singlespeed steel hardtails were sold direct to customers from their website. Within a few months they were a success. Today they now carry a bigger range of bikes and frames for all different types of riders.

Bird are another mountain bike company that have recently surfaced using the same business model. With just one hardtail frame and full-suspension frame in their product line, they offer a number of build options for each frame according to the customer's budget.

Both of these companies aim to do one thing. Save money on the amount you pay for the bike by selling to you directly.

The business model is great for customers. They end up saving money on a similarly built bike offered in their local bike shop or they can get more bang for their buck by spending the same amount at the online retailer than they would at their local bike shop. Ask most people where they would probably buy their bike and I'm willing to bet that most would pick the online retailer. This is bad news for local bike shops though. Bikes are big ticket items, and if the trend towards buying from online retailers gains momentum, it would

I'm still on the fence about it. The Bird Zero is great value for money in terms of its specification. The other bike I'm considering, a Whyte 901, is distributed through bike stores and while it carries a higher price tag than the Bird Zero, it's not too far off my budget for a new bike. Both bikes match my preferred riding style, so there's no problem there. At this price level, £200 more for a bike isn't going to break the bank, but it does mean that I'm supporting a local bike shop. On the other hand, buying from an online retailer means saving a bit more money. I am swaying towards buying a store bought bike, but the decision isn't final yet.

Hosted Service or Custom Solution?

In the early days of the Internet, hosting your own website was reserved for those in the know, but over time it's become easy for anyone to build and host a website. With it though, comes that initial question. Do you use a hosted service or roll your own solution?

Over the years I tried lots of different hosted services. When I first started blogging a few years ago, I jumped from Tumblr to Posterous to Github Pages and then finally settled on Octopress. In recent weeks I've once again been assessing if Octopress is sufficient for my needs. It's got me thinking about the decision to use a hosted service like Wordpress or to use my own version of Octopress that has served me well over the last year.

The Hosted Service

The benefits of using a hosted service are immediately clear. Sign up and your done. As soon as that form is submitted you're ready to go. It's hard not to argue with this instant benefit. For most people this is the only way. Maybe they're not willing to delve into servers and software or perhaps it's a time issue.

For a smaller group of people though, they have the knowledge to roll their own solution, so what makes them chose a service?

I choose services based on a number of factors but mostly it's the benefit I can get from being able to use them on a day to day basis.

Services like Todoist and Trello take the pain out of my task and project management by allowing me to move between devices without having to synchronise data between them. There's a number of other minor benefits but the big benefits is accessibility.

I don't run my own servers as I know it would take up too much of my time to learn how to configure these correctly and ensure they are secure and running smoothly so I look towards services like Cloud 66 and Heroku to ensure my clients sites run without any major impact.

These are just a couple of examples of how hosted services are beneficial but there are drawbacks.

One of the big issues I have with hosted services is my ability to get my data in and out of that service. It's probably the one single feature of any hosted service that ultimately makea me sign up or not. As a hosted service I respect that my data must be located elsewhere for that service to be effective, but I must be able to import my data and extract it in a simple way. This is still a issue with some services, but it is getting better. Sadly though, the services themselves decide on the format of the data and with so many out there, getting them to all agree on the one format is never going to happen.

The Custom Solution

The benefit of a custom solution is just that. It's your own solution.

Hosted services offer a product or service pre-boxed and used by hundreds of people, but they can only be made to fit your needs to a certain point. What usually happens then is you have a service that fits your needs most of the time, just not all of the time.

This is where custom solutions excel. They are solutions tailored specificically to your own requirements. The drawback though is that such solutions need maintanance, and in my experience, a little more effort to ensure they run smoothly.

So what about my blog then? Well as nice as a hosted service would be, I do prefer to have that element of control over how it looks and what it does. Yes, I might have to jump through a few more hoops to publish content, but it gives me more control in that process. I think I'll be staying with the custom solution for the moment.

It's close to a couple of months now since I stopped being an active user on App.net. The only time I'm posting updates now is when I want to reply to any mentions I get about my blog posts and shared links. That's as active as my timeline gets these days. I'm still getting notifications of people unfollowing me as they realise that I'm not that active there anymore. In the past that might have been a big deal but not anymore. I'm just not spending as much time on social networks anymore.

App.net isn't the only social network I've chosen to distance myself from. I got fed up with the Twitter service over a year ago and decided to stop tweeting. At the time I was questioning the value I was getting from Twitter and whether I could afford the time to participate as often as I could.

The problem I have with any social network is the incessant checking of your timeline that becomes an hourly ritual. With every spare few minutes I had I was checking timelines, replying to people, favouriting posts, posting pictures and everything else that social networks bring.

Being active on any social network and getting work done requires discipline. I just don't have that discipline and rather than fight a continual battle against getting stuff done, I've opted to simply stand by and observe. I still have my App.net and Twitter accounts that I share links to, but that's all they are for.

I guess being a software developer I already spend enough time with my head buried in technology and being online during the day that when it comes to outside of the work day, I prefer to distance myself a bit from things like social media.

It hasn't been all bad though. In the last few weeks I've managed to read a lot more, both online and offline. I spend more time with the kids and I've even had time to build an idea for a daily email service. It's still under wraps, but progress on it is going well.

If I don't "socialise online", then where am I getting my daily dose of interaction? Well, I share content daily on my blog, writing for it as often as I can and have even become part of a small circle of bloggers that frequently refer to each other with links. You know who you are gents!

So being a distant observer of social media has its benefits. I might not have my finger on the pulse of what's trending, but I'll happily trade that to get the time do other things.

Learning with Rust

I'm always reading about other topics in software development. Over the last few years I've read about web design, JavaScript, Ruby, agile methodologies and practices, Go and even Objective-C. Reading books on these topics has provided some insight into their respective topics but with the exception of Ruby and agile methodologies I haven't been able to take what I've read and use it in a practical exercise.

A couple of years ago I read about the Go language from Google. So I started reading a couple of books about it. Since then I haven't written more than one hundred lines of code in Go. Was that time spent reading about Go a waste? I think so.

More recently the Rust language has peaked my interest but I haven't started reading about it yet. I've been asking myself if there's something I can work towards using Rust that will let me learn the language. Using Rust in a practical use hasn't been something I've been able to come up with until a couple of days ago. There I was reading Hacker News over the weekend when I seen an article about writing a shell in C. Well, why not write it in Rust?

Building a shell in Rust should give me the chance to explore and learn the language but also give me the chance to try out something other than web development. I've been working with Ruby on Rails for over four years now and while I enjoy the work, I have been looking at a systems programming language to learn. We'll see how it goes.

Paying For Software Is Smart

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

Five Thoughts on Software by Seth Godin

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

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

The De-cluttered Desk

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

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

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

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

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

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

My Development Tools - 2015 Edition

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

Hardware

Not much has changed since I last wrote about this.

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

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

Software

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

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

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

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

The Web

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

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

Backups

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

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

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

To TDD Or Not To TDD

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

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

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

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

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

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

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

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

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

The Developer's Sketchbook

I've been thinking for a couple of week now about learning Rust, but something that's been bugging me has been what to build with it. Rather than focusing on what to build first, I should really be focusing on learning Rust first.

This sketchbook of implemented ideas isn’t a paper book, but a collection of small programs. It could be as simple as a folder full of Python scripts or Erlang modules. It’s not about being right or wrong; many ideas won’t work out, and you’ll learn from them. It’s about exploring your interests on a smaller scale. It’s about playing with code. It’s about having fun. And you might just become an expert in the process.

A Developer's Sketchbook for the Twenty-First Century by James Hague

Love Mondays ...

... with NB.

Surprise them. Shock them even. Don't even complain once. About having eaten too much, the vacation being too short, the ridiculous queues at Starbucks on New Year's Eve afternoon. Don't let that stuff get to you. It's a little friction in the wheels of life. It may be the first week back. Heck it's the first Monday of the new year.

Back to Work? by Nicholas Bate

Click through for the reason why you do this.

In this roadmap are many questions. In your journal — whether digital or by hand — you can simply write out the question at the top of the page, and answer as if having a conversation. Don’t worry about formality, how it may sound out loud, grammar, etc. Just write your thoughts. It may seem mundane, but there is a magical quality in writing something down that cannot be fully explained. You just have to trust me and try it out.

Jumpstart Your Journaling: A 31-Day Challenge by The Art of Manliness

What a terrific idea. A roadmap of journal prompts to build up a journaling habit.

I Should Write More

I was on a roll there for a while, but it's been difficult to get that consistentcy back again. I am working on it, it's just the hovering over the publish button that has frequently held me back.

Software engineers should write because it promotes many of the same skills required in programming. A core skill in both disciplines is an ability to think clearly. The best software engineers are great writers because their prose is as logical and elegant as their code.
Software engineers should write by Shubhro Saha

Custom Assertions with Minitest

In the last few weeks I've been working on a Rails 3 application for a client. The test suite doesn't cover the whole application, so along with features being added for the client, I've been gradually expanding the test suite to cover the entire application.

The test suite itself uses Minitest and the test syntax. So far I've had an enjoyable experience in adding tests for each part of the application. This week though I faced an issue of duplication in my tests. The application includes a number of mailers. Each mailer has an erb and plain text template. In my first pass at testing this mailer I had some duplication going on with the different templates for each mailer.

assert_match(/Hi there #{person.first_name}/, mail.text_part.to_s)
assert_match(/Hi there #{person.first_name}/, mail.html_part.to_s)

This is just one of many lines in the tests that assert that the two mailer types include the right content. Wouldn't it be nice to wrap these two assertions into one?

Minitest allows you to define your own assertions but up until this time I made do with Minitest and Rails' own assertions. Turns out that adding your own assertions to Minitest is easily done. I included the following assertion in my test_helper file but you can include your own assertions in a seperate file if you want to and then include that in your test_helper file using require.

module Minitest::Assertions
  def assert_mail_match(expected, actual)
    ["text","html"].each do |mail_part|
      assert_match(expected, actual.send("#{mail_part}_part").to_s)
    end
  end
end

What we're doing is adding a wrapper around Mintest's assert_match method and pass in our expected value and the actual value. The method will iterate over the two mail parts in the mailer and assert that each format has the correct corresponding content.

We can now call the new assertion in our tests:

assert_mail_match(/Hi there #{person.first_name}/, mail)

Wrapping these two assertions into one makes sense. The template formats for the mailers is unlikely to change and the two different formats have the same content albeit with different formatting.

After a couple of years of using RSpec, Minitest has been a nice change to how I test the Rails applications I'm working on. Its syntax and single way of doing things means that I find it easier to write tests. Hopefully, I'll be able to share more insights into using Minitest in the future.

Bootstrapped: Under Armour

From small beginnings to billion-dollar sports apparel giant, the story of Kevin Plank and Under Armour is proof that bootstrapping your business can succeed.

If it doesn’t sell, there’s probably something wrong with your business. If it does sell, then you don’t have to give half your company away and you can be the one making the decisions for the long term. We did that, we bootstrapped, and my first year in business, we did $17,000 in sales out of a little townhouse on the corner of 35th and O Street in Georgetown.

When we were small: Under Armour by The Washington Post

My iPhone 6 Setup

For a long time now I've kept my iPhone setup largely the same. Just two rows of apps on the home screen with other apps on the following screens. I've had it this way for over a year now, but recently I've changed this setup.

More Screen, More Apps

With a larger screen on my iPhone 6, I've started adding more apps to the home screen. I started adding a third row of apps. Then a week later I added another row of apps. The following week after that I added another row.

Screenshot of my home screen

There was two reasons I kept just eight apps on my screen in the past.

  1. I like using photos of my family on my phone and so keeping the number of apps to eight means I have more screen to use a nice photo.
  2. I kept the number of apps down to the ones I used on a daily basis. At the time I also had an iPad, so I didn't need as many apps on my phone.

Things have changed though. I no longer use an iPad. The iPhone 6 screen is big enough to do most tasks I throw at it with the sole exception being programming. This means I do use my phone alot more. The tade-off of using my phone alot more rather than using two seperate devices is well worth it.

Also, I just set a nice picture of the family on the lock screen and reserve the wallpaper on the home screen for a different image from Unsplash. These two changes mean that I am free to use more apps on my home screen.

No More Folders

Another change to my previous setup is the abolishment of folders to group apps. In the past I used a verb based grouping for apps to keep related tasks together. It was fine for a while but I found that even by using the verb based folders, I wasn't gaining anything other than keeping the screen organised. I was also allowing myself to hoard apps. Even the apps that I used infrequently I kept on my phone in a folder. I didn't have a need for these apps, I simply kept them there, "just in case".

Now I simply keep a couple of subsequent screens with apps on them. My second home screen is largely apps I've installed for use every other day like banking, health tracking, server management and games for the kids (and me!).The third home screen is all Apple's own apps that I don't use often or at all. It's still annoying that you can't delete apps like Notes, Voice Memos and Tips, but with them being on the last screen I rarely see them.

One Last Thing

One last change that I have been making in terms of app usage is I've started to use web based services instead of apps which is why I have a Feedbin icon on my home screen. Previously I've used Reeder and Unread for scanning through my RSS feeds, but Feedbin has such a great user-interface for the phone that it makes more sense to use Feedbin with it's sharing feature available on my iPhone rather than adding another app layer between myself and the Feedbin service. This doesn't work for all services, but where a web based client has been designed with a phone in mind, it can be just as easy to use the web based client rather than an app to connect to your service in question.

That just about covers my iPhone setup. Tools have definitely changed since the last time I wrote about this. I might delve into these apps more in the future and my reasons for choosing them but for the foreseeable future this is what I'm sticking with.

A Recipe for Killer Apps?

While I do believe that killer apps have had their day for the foreseeable future, I can't deny that the unbundling technique can be used to create some great apps.

Ed Rex reckons there are three reasons why unbundling works. Couldn't agree more with his reason for simplicity.

When your app only needs to do one thing, it can do it really well. You can have big, clear buttons for the things people use it for — because there’s no need to clutter up the screen with all those other options you’ve got rid of. This makes your app unbelievably easy to use — and that’s what smartphone users want.

The Formula For Creating The Next Killer App by Ed Rex

Read on for the full recipe.

from Nicholas Bate.

The digital interrupt is relentless, often trivial, sometimes insufferable, cunningly finding new channels, often repetitive, poorly constructed and lacks sufficient courtesy to recognise that you are busy.

Jagged Thoughts for Jagged Times by Nicholas Bate

This will be my first week without any social network interaction. It will be interesting to see what the lack of digital interruptions will do for me.

App.net No More

I'm stepping away from App.net. It was a hard decision but I think I made the right move.

When I first read about App.net I was already in the Twitter doldrums. I was annoyed with the lack of post length, the lack of a business model and the growing number of spam accounts that automatically followed you. I was disliking Twitter more and more by the day.

The 22nd of August 2012. That was the day I signed up for App.net. It was heralded as the social network for those that want more control over their data, a service that isn't afraid to charge it's customers for the privilage of using their service. At first it was seen as a great move. A sustainable social network. It sounded so great. I promptly signed up.

It started out so promising. There was already a micro-blogging client, an API and the promise of more to come. More did come. With a better API, developers shipped clients for all the major mobile platforms. There was a number of nice services that were born off the back of the App.net API. After the initial launch hype, subscriptions tailed off and the App.net community carried on. For the first year things looked so great. It was all going so well.

Over the course of the second year there were a number of new features including a notifications system for everyone as well as a crowdfunding platform for people to validate their product ideas. In the community there was a lot of discussion about the future of App.net. So many people were interested and cared for the future of it.

Ever since the App.net State of the Union post from the App.net blog though, the future of the social network has looked uncertain. Prominent subscribers to App.net have stopped posting or in some cases just completely deleted their accounts. For the last few months my timeline has appeared to be less and less active. While most days you might get a conversation on a particular topic, some days it feels like you're just talking to yourself. The buzz around App.net has died and what's been left behind is the remnants of a what could have been a great service.

For the last couple of weeks I've been weighing up whether I should continue to dedicate my time to using App.net. "You get what you put in" is a popular opinion of why you should continue to use any social network and it does hold true, but sometimes you just have to quit regardless of how much you want to participate. For me it was just a lack of interaction that made me decide to leave. People did participate in conversations but it just wasn't as frequent as it previously had been on App.net.

Over the last two years, App.net has been home from home. A stream of people I've connected with on a daily basis. Posts, links, images, polls and stories all shared in a little corner of the Internet. I don't regret the time that I have spent there. It's been a great experience and I've connected with some great people but it's time to move on.

Broadcasting to Twitter Again

I'm going to give Twitter another go but this time just as a broadcasting tool.

In the past I've been against using Twitter. For me it became too much noise and watching my stream day in and out was becoming difficult to manage. I could have scaled back the number of people I followed but after choosing to stop using Twitter, it was clear I wasn't missing out on much.

The people who I like to follow already keep their own sites and blogs updated on a regular schedule. I already follow these people using RSS feeds from their sites and blogs. It doesn't make much sense to 'subscribe' again to these people through a different medium.

And yet, I do think there is a use for Twitter. Ever since I read a post about the use of Twitter as a broadcast medium (sorry, can't find the link!), I've wondered if that's how I should be using Twitter?

So far a month, I'm going to activate my Twitter account again and point my site's RSS feed to Twitter. I've set myself a number of limits though.

  • My Twitter account will be a broadcast only account. No tweets, favourites or reposts will come from me personally. The only tweets I will be making will be fed from my RSS feed.
  • I won't be interacting with others on Twitter. If a tweet receives a reply in the form of constructive criticism then I'll endeavour to contact that person through email.
  • My account will remain private. Strange I know, but I want to get a handle on the number of people that follow me. In the past I've had to continually block unwanted followers on Twitter. I've no idea what their engineers have done, if anything, to clamp down on spam accounts. The best way I see to get control is to accept each follow request as they come in. With my account only posting links from my blog, I don't expect to see many follow requests and the bulk of them that request to follow me should be genuine enough.

We'll see how it goes.

Business Tools are the Exception to Simplifying

Despite my efforts to simplify my tools, there are some that I just need to keep using. They're just too important.

Yesterday I wrote about simplifying the tools I use in an effort to minimize the amount of data that I push around. I was all of sudden concious of having data spread across different services and the number of tools I was using to do this. Some things though require specialist software, like your accounting and invoicing aspect of your business. You can't simplify book-keeping and accounting without it having an impact on your business and career. Which is why the business critical software is the exception to simplifying the data and tools I use.

For a number of years I worked as an ERP developer for a company that provided development and consultancy services on a Microsoft ERP solution for small to medium size businesses. This one solution could meet most of the software requirements for your business. It has modules for accounting, inventory, customers, invoicing, purchasing and much more. That all encompassing ability run multiple aspects of a single business came at a cost though. It is a fairly complicated solution to run and maintain correctly. When used correctly though it becomes a critical part of the business.

My needs aren't so great that I need a solution like this, but I still need software to help me run my business. I require help with invoicing, accounting, time-tracking and expenses. Tracking all of these on my own just wouldn't make any sense. I have customers to invoice, projects to track, taxes to pay and more. I could do this on my own with a number of spreadsheets, an address book and some software cobbled together by myself, but that would require time to implement and it's not a valuable use of my time.

I use FreeAgent for all the requirements I just mentioned. It works, it's affordable and it doesn't require a steep learning curve to use. It does require some time to find out how to use effectively as a business tool, but that's why it's so great. I can use the parts of FreeAgent that I need to begin with and then gradually start looking into other features it offers to help me run my business. It then becomes a business critical tool. I need it to run my business. It's not complicated to use, but then it's not also so simple that I can switch over to something else if I wanted too.

Business critical tools are the exception to the rule when it came to cutting back on the tools I use. The trade off between using something simpler would have a negative impact on my time. I would end up spending more time managing my business data than I would delivering value to clients. It's not wise to cut corners when it comes to business critical tools.

You sip coffee and make your list. At a nearby table someone is writing The Great American Novel but you are simply identifying your projects and actions. The list grows every time you pause for a sip. What is surprising is how items which once dominated your attention now require a reminder.

Your List by Michael Wade

A little reminder from Michael Wade that lists are a great place to start.

Reading Redmine: Multiple Assertions Per Test

In an effort to brush up my development skills I've been reading the Redmine source code this week. I've been curious to find out about examples of Rails applications that use Minitest.

Ever since I suggested a move away from RSpec for projects with my clients, I've been curious about real world examples of using Test::Unit/Minitest to test a Rails application. It was clear from a search of Rails applications on Github that RSpec was the preferred choice for many applications. However, after reading an email newsletter from developer Eric Davis, the RedMine project sprung to mind so I decided to check it out. Sure enough, it was the sort of application I was looking for. A mature code base using Minitest as the test framework. A few interesting points stood out which I'll cover over the next few weeks, but for today I'll talk about Redmine's multiple assertions per test.

I was always led to believe that tests ahould only contain one assertion per test. It was ingrained into me from reading countless books on TDD and hundreds of blog posts on the topic. The thing is I never questioned why this was so. It was clear from seeing the RSpec syntax why it was a benefit.

before do
  get :index
end

it "must respond with a success code" do
  assert_response :success
end

it "must render the index view" do
  assert_template :index
end

it "must assign the users journal" do
  assert_not_nil assigns(:journal)
end

If your test (or 'spec' in this case) has one assertion and it fails then you know exactly what went wrong. Multiple assertions in a single test have always been frowned upon.

When I started using MiniTest as the test framework for a couple of Rails applications of my own, I started to write multiple asserts per test.

def test_index
  get :index

  assert_response :success
  assert_template 'index'
  assert_not_nil assigns(:journal)
end

It was discomforting to do but only from the view point that I had believed for so long that multiple assertions per test was wrong. However when I read the Redmine source code I was pleased to see that not only was the application not using the RSpec, it was also using multiple assertions in a single test. After an hour of reading through other tests in the code base I could see why it was done. The layout of the tests in Redmine are flat. Often there's just a single setup and teardown method and a list of tests. It makes it much easier to read.

RSpec has a number of advantages in that tests can be nested in different contexts and within each context you can define a before block to setup anything needed for the tests that follow. This can result in heavily indented code and with the practice of one assertion per test it can lead to a lot of tests relying on a number of different setup methods higher up in the test file. This can be difficult to read if a test file has a number of contexts within it.

It's re-assuring to see that while many developers might point out the benefits or reasons why we do one assertion per test, it's not a rule that is set in stone. You can include more than one assertion in a test, as long as it's a reasonable number of assertions.

Is it worth writing seperate tests for each of these or is it better to simply bundle them into a single test?

I'll leave that for you to decide. There's no right or wrong answer in my eyes. If I was still using RSpec I probably would still write one assertion per test out of habit, but having a flat layout using Minitest does make it easier to read and having multiple assertions isn't going to make it any harder for me to test my code and debug any problems.

The App.net Daily Post Experiment

For the month of September I committed to posting a 256 character post to my App.net account every day. It turned out to be more beneficial than being a simple daily nudge.

The Experiment

It was initially an idea by Matt McCabe (@mttmccb) on App.net who was committing to posting a 256 characters post with the hash tag #adn256month included in the post somewhere. It sounded like an interesting challenge, and so I also joined in for the month of September.

I set myself a couple of guidelines at the start of the month for this. A rules of engagement sort of idea.

I didn't include a task in my to-do list for this or even set a reminder. It was the one thing each day that I had to remember to do. I like to think of it as a little mental exercise for the day. Settings reminders and scheduling appointments is great for the really important things, but for little tasks like this, I wanted the responsibility to remember to fall on me.

I limited myself by excluding any tools that would automate any part of the process. Most days I opened Kiwi on my MacBook and composed a post for a few minutes, editing it down to what I needed and then posted it. At the start of the month I did manage to write three posts ahead of their intended days but I stopped doing this as it meant on those days I didn't have too much to do and that seemed to go against the whole reason why I wanted to do this. I wanted to build up a daily habit using only me. No apps, tools, or other medium to remind me or to pull posts from.

My Findings

The month went well. I only missed a single day out of the whole month. I was surprised by this as I thought I would miss at least one a week, and not having an iPhone for the last two weeks I thought I was going to miss even more days. As it turns out I was able to keep the habit going missing just a single day.

The posts themselves started out as mainly random snippets for the first week and then for the remaining three weeks I themed the weekday posts to follow a specific topic. Weeks two and three were about productivity and week four was about Rails development. The weekend posts were usually kept light hearted and not too serious.

The posts also turned out to be great for expanding on ideas for essay posts I have considered but haven't drafted anything for. The chance to write something small on an idea kept me focused on the core idea for the post and also let me test how each post was received by my followers. A favourite or a repost signified that a post might be worth expanding on.

What Next?

The experiment has finished but the idea of the daily post of 256 characters lives on. I've committed to posting a single snippet of 256 characters to App.net on a daily basis using the hash tag #team256.

It's simply too good an exercise not to do on a daily basis. My only concern is that the audience for it is rather small at the moment. I have just over a 100 followers on App.net but I suppose it's better to start somewhere.

How to Build a Popular Content Section for Octopress using Gauges

In this post I'm going to try and briefly describe how I built the popular content section working on my Octopress blog using data from Gauges.

I'm using Gauges as the traffic and analytics service for my blog. I have done for over a year now. It's simple and very easy to use which is why I like it so much. One of the great things about it though is that it also provides an API for people who want to do more with the data that they have accumulated. One feature I wanted to include on my blog has been a link to what most people have been reading in the last few days. I thought that this would be extremely easy to add given that Gauges already has all the data that I need for it.

The Leaderboard

What we essentially want to build is a leaderboard comprising of the most popular articles sorted by the number of page views they have with the most popular article at the top. With this analogy in mind I just needed to populate the leaderboard with page titles, URLs and views for popular articles from my Gauges data.

In adding this feature to my Octopress blog, I started thinking about how I would interact with this feature. That was easy. A Rake task. Adding this as a Rake task means that I can add this to another Rake task that could pull in the popular content during the generate stage. For now though I run it as a separate Rake task on its own as I might generate the site a couple of times before publishing it.

Here's how I envisioned this popular content section to run:

PopularContent.top_content(3)

So, all we're doing here is passing in the number of days that we want to look back on but there's a number of things that need to happen here:

  1. We need to connect to the Gauges API.
  2. We need to ask for the content stats we need.
  3. We need to calculate the most popular article over the time period that we pass in.
  4. We need to return the most popular article as an object with a title and a URL.

Get Connected

When we initialise this object we need to do two things:

  1. Connect to the Gauges API
  2. Create our leaderboard

This is done quite easily. When we initialise the TopContent class we pass in our Gauges ID and API key so that we can connect to our own data. In order to make this process even easier, we're going to use the Gauges gem rather than working directly with the Gauges API.

Once this is done we create a blank array that will serve as our leaderboard for compiling the top viewed articles over the last few days.

def initialize(gauges_id, api_key, days = 3)
  @gauges_id = gauges_id
  @api_key = api_key
  @client = Gauges.new(token: api_key)
  @leaderboard = []
end

Building the Leaderboard

Gauges doesn't group popular content data. Instead it serves the data you need on a date basis. So we need to ask for each date that falls in the date range we specified:

def build_popular_posts(days)
  end_date = Date.today
  start_date = end_date - days

  while start_date <= end_date do
    content = @client.content(@gauges_id, date: start_date)
    content["content"].each { |c| update_leaderboard(c["title"], c["views"], c["url"]) if valid_content_page?(c) }
    start_date  = 1
  end

  @leaderboard = @leaderboard.sort! { |x,y| y[:views] <=> x[:views] }
end

There's a lot going on here, so let's take it one step at a time. First of all we initialize some variables for our start and end date using the number of days variable that pass in.

end_date = Date.today
start_date = end_date - days

Next, we iterate over these dates beginning with the start date.

while start_date <= end_date do
  # ...
end

For each date we're going to pull the data we need from Gauges. This is a list of top content for the date we are on.

content = @client.content(@gauges_id, date: start_date)

Next we update our leaderboard by iterating over the content that has been viewed for the current date.

content["content"].each { |c| update_leaderboard(c["title"], c["views"], c["url"]) if valid_content_page?(c) }

This is the point where we start accumulating page views for each page. The update_leaderboard method takes the page title, URL and number of views and uses them to create or update an existing entry on the leaderboard.

def update_leaderboard(title, views, url)
  position = @leaderboard.index { |a| a[:title] == title }
  if position
    @leaderboard[position][:views]  = views
  else
    @leaderboard << { title: title, views: views, url: url }
  end
end

Finally we sort the leaderboard according with the highest number of page views at the top.

@leaderboard = @leaderboard.sort! { |x,y| y[:views] <=> x[:views] }

Display the Results

Once this is done, it's a simple matter of writing the popular content to a config file using the Rake task so that we can use it in the generating of our Octopress blog. Accessing these from an html file is straight forward enough if you're familiar with working with Octopress layouts. I have the following code located in my post layout just after the post section:

<div class="related">
  <h2>Popular Posts</h2>
  <ul class="related-posts">
    <li>
      <h3><a href="{{ site.popular_post_first_url }}">{{ site.popular_post_first_title }}</a></h3>
    </li>
    <li>
      <h3><a href="{{ site.popular_post_second_url }}">{{ site.popular_post_second_title }}</a></h3>
    </li>
    <li>
      <h3><a href="{{ site.popular_post_third_url }}">{{ site.popular_post_third_title }}</a></h3>
    </li>
  </ul>
</div>

That's it really.

If you look at the code, you'll see a few other methods that are used to filter out data. I intentionally filter out the home page views and other pages that I don't want to include in the list. This is done just by checking page titles or paths.

I've been running this code on my blog for quite a while now. Previously it only returned a single page URL and title, but I wanted to include a list of posts so I added methods to pull the second and third most popular posts.

The code itself is quite straight forward to read and follow. It might not use all the latest Ruby idioms and tricks that many Ruby developers know and love but for me it's straight forward code that works.

The fully listed code to accompany this post can be found on Github.

Time and a Place for Client Work

There's a time and a place for client work. Rushing out the door on a Saturday morning isn't one of them.

Over the weekend I made mistake in some code I had changed for a client. After pushing the quick change to Github and then to the test environment for the client, I then realised the mistake I had made. With no time to correct the change, I decided to leave it until Monday morning. After seeing my mistake in all it's glory this morning, I admitted my mistake to my client and then proceeded to fix the code correctly.

There's no excuse for the mistake that I made but making the change on a Saturday morning when I was due to leave the house probably wasn't the best time to do it. Also I didn't read the message fully from my client that prompted the change. In my haste I missed the last sentence which would have changed the way I updated the code. A hard lesson learned.

Freelancing is definitely a learning experience and with each mistake you make you see the correct process you should be following. In this case it's client work. It should be reserved exclusively for your typical working day. In my case it's during the week at my normal office hours and only when I have at least 30 minutes to carry out the work and review it accordingly. The only exception should be for emergencies and when carrying out that work it should receive your complete focus.

It can be tempting to be the ever accommodating freelancer and provide help on your client's every request and wish, but going down that path will only degrade the quality of your work. Your clients will come to expect fully working changes when they demand them regardless of the hour of the day. Responding in this way isn't in the best interests for you or your client. Instead, defer fixes for client work for first thing the next morning or even before your main day begins if you have the time.

There's a time and a place for client work. It's during the agreed times that you already have with your client. Keep it that way to ensure your clients get the complete attention and focus they paid you for.

I Voted No to Independence

Today is a big day. Not just for us Scots but for the rest of the UK as well. From that last sentence you're probably assuming that I will be voting no in today's independence referendum and you would be right. In fact I've already gone and cast my vote this morning after dropping my oldest off at school.

I haven't been convinced by the yes campaign's argument that Scotland will be richer on its own. No one can foretell what will happen if Scotland becomes independent. The best laid plans of mice and men often go awry. What I do know however is that I've lived in a country that's been part of a union for my whole life and for over 250 years before that.

Ever since I was old enough to know about politics and the prime minister, I've seen the effects that the government's decision can have on the countries they serve. Growing up in Scotland during Margaret Thatcher's time as prime minister brings back lots of bad memories from headlines in newspapers and the televised news. The backlash against the Conservative government at the time was evident everywhere. Newspapers and conversations were the main source of information and criticism. For a while it seemed that no one in Scotland liked the Conservative government that was in power at the time.

It was during this time that many Scots started to hold a contempt for politicians, especially Conservative politicians. That contempt for Conservative politicians is still around today. A lasting scar from the days of Margaret Thatcher. It's something that many people today are clinging too as their main reason for voting. They want to secure a future for Scotland that won't have Conservative government again. That's not a reason to vote. A reason to vote yes is that you firmly believe that Scotland can make it as an independent nation. You believe that a yes vote for Scotland is the best way forward. The yes campaign for me has become a campaign against the current government rather than a campaign about what an independent Scotland could achieve. And that's not the message that I would want to hear if I was considering voting yes.

So why am I voting no then?

Today I count myself very lucky. I have a flourishing career as a freelance web developer, my family have a home to live in that we can call our own and my kids have untold opportunities ahead of them. We're doing good. I've had my fair share of bumps in the road of life including three job redundancies but each time I've managed to find a new job. Some might call it luck, others determination. Whatever you want to call it I think we're doing well under the current government and the previous governments that we have had before.

Maybe I'm being cautious about the independence vote by voting no and I know that in my heart I would love to see Scotland flourish on it's own. That's when my head clicks in with a reminder that there are so many unanswered questions about being independent. I don't have all the answers and neither do the politicians. What I do know is what I know now, what I've always known. And it's working for me and my family.

I'm proud to be Scottish, but I'm also proud to be British. And that's why I voted no.

Decision Making with Spikes

Big decisions are often fraught with risk. Sometimes though the only way to make the right decision though is to test the options first.

For the last few months I've been working on a CMS application for a client that has been steadily growing in size. We both agree that there will come a time where we will need to make some decisions about the design of the application so that it remains easy enough to maintain and develop but also scales up with the client's expected growth for the next few years.

It's something we've both been putting off for some time now, but with more projects and clients appearing in the client's pipeline, we've decided that now is the right time to start making these decisions.

The problem has always been though that if we make the wrong decision we end up too far down a path that we don't want to be. Backtracking might not be an option and working towards a different solution is something that we don't want to end up doing either.

The answer to this dilemma has been surprising simple. For each technical decision we have to make, we have a number of options that we can consider. Rather than analysing and committing to the most attractive option (in theory anyway), we have decided to take a day and implement that option in a single day to see where we get to. If by the end of the day, we're still happy that we've made the right decision, then we continue on with this option. If we're starting to have doubts, we abandon the option and try something else.

Software developers will recognise this concept as a spike. This is the idea that you carry out enough work to recognise the risks and knowledge that are associated with change in design or functionality. The spike gives the developer the chance to find out the risk and complexity involved in such a change. With the information, developers can provide better estimates for these changes or completely rule out a change.

The spike is a great way to ensure that you limit risk from a decision without committing to that decision. It will involve some time to determine if the option you are spiking is worth pursuing, there's no getting around it. However it is better to invest some time in pursuing the right decision rather than blindly committing to the wrong decision is it not?

Death of the Watch?

Apple's addition of a smart watch to their product line is a sign that smart watches are definitely here for a while but is it too early to be calling time on watches?

A few people have mentioned that smart watches will kill the watch. I think it's a little too early to be making that statement.

The smart watch is still new in terms of technology. We've had attempts at smart watches in the past, some good, some bad, and there will be a few more iterations on what makes a good smart watch. That is until companies all meet at that point where they all agree sub-consciously agree on the design template for a smart watch. There will be a few more years yet before we get to that stage where we know that the smart watch will just work for us.

Then there's the technology aspect of the smart watch. It does so much more than a regular watch does, but do you want it to do that? Despite the fact I've had smart phones for over five years now and they've all been able to tell me the time, I still wear a watch. I like wearing a watch. It means I can keep my phone in my pocket when I need to know what time it is. If I didn't wear a watch I would probably have my head buried in phone everywhere I went. As soon I would check the time on it, I would leave it out and read it until I got bored. Thankfully I don't do this thanks to single purpose of the watch. It just tells the time.

I also don't want another device in my house that requires charging on a daily basis. I wouldn't say my house is brimming with technology but we have our fair share of gadgets in the house. A couple of smart phones, a tablet, a laptop, a Kindle, a games console and a couple of televisions. Maybe slightly less than most people but it's something I've tried to keep a cap on. The Kindle is great as it only requires charging every two or three months and only needs an hour to be fully charged. Adding a smart watch to this mix is not something that appeals to my environmental side. I'd rather have a watch that required a single small battery every couple of years than having to charge my smart watch on a frequent basis.

We've seen these statements before about technology phasing out tried and tested ways of doing things in the past.

Remember when Amazon launched the Kindle? Lots of people made predictions that books would be phased out in favour the new digital books. As convenient as a Kindle is though, sometimes a book is definitely better. It requires no power to read the book, it's just as portable and there's that great feeling of scribbling notes in the sidelines. Thankfully today there are still a healthy number of book stores around and they're filled with books. The death of the book? Not yet, which makes me wonder if making statements about the death of the watch is just technology fans getting ahead of themselves.

The smart watch does herald a change in the way we can carry technology about with us. We have another small window to look at when we're out and about seeing the world, meeting people and making experiences. That can still be done with or without a smart watch. For me, I'll be casting my eye towards the traditional mechanical watches for my next timepiece purchase. They're less intrusive, more reliable and cheaper to run over time and besides, I can do everything I need with my smart phone, right?

My Sublime Text Setup for Markdown Writing

As promised to one of my App.net followers, here's a quick run down of the setup I use for writing in Markdown.

I stopped using Sublime Text as my preferred code editor a couple of months ago, but there's something that I still use it for every day and that's for writing my blog. As a result I've removed a lot of packages from Sublime Text and managed to whittle it down to just the essentials. Here's a run down of everything I use for writing in Markdown with Sublime Text.

Theme and Colour Scheme

After a number of years of trying different themes on Sublime Text, I've now resorted back to the excellent Soda theme. It's stable and easy on the eye. There are a number of great themes out there but in my experience, they're not as solid as Soda.

As for the colour scheme I'm sticking with Solarized but instead of using the dark variation for coding, I use the light variation. It's makes a nice context switch trigger when I'm moving from code to writing.

Packages

I don't use a lot of packages for writing in Markdown, but there are a few that definitely help.

  • MarkdownEditing - A Markdown plugin for Sublime Text that provides good syntax highlighting and editing features.
  • Origami - The default pane layouts and keyboards shortcuts can be infuriating. Origami solves by letting you splits panes easily.
  • WordCount - Nice way of seeing your word count. Always handy if you like keeping an eye on that sort of thing.
  • Marked App Menu - Opens Marked and Marked 2 from the document that you are working on.

External Tools

A special mention goes to Brett Terpstra's fantastic Marked app which is great for previewing and reviewing your Markdown documents. Simply open your Markdown document in Marked and watch it update your Markdown document in a theme of your choosing while you type. Not only that, but Marked also has a ton of features that allow you to review your writing. If you're a Mac owner, I strongly suggest you check this out.

Keep It Light!

My setup for Markdown writing is rather light, but it's supposed to be light. When I am writing I'm not thinking about keyboard shortcuts I could use to type faster or neat plugins to use. Most of the packages I use are there because I can just install them and that's it. There's little configuration or maintenance to do and that's the way it should be.

I've been writing for so long with Markdown that the mark up is becoming automatic as I type so I don't need to worry too much about using shortcut keys for things. I just keep typing, peppering my words with little bits of mark up as I go.

The Daily Reading Ritual

It's taken me a long time to find a habitual way of reading books that works for me. I call it the daily reading ritual.

When I first started my career in programming there was one titbit of advice that I had seen repeated over and over again.

Read a programming book every month.

I don't know how many of you have read a programming book, but for those that don't know they can be difficult to read. The trouble with programming books is that they are better used as reference books. Lookup material for when you're stuck.

I tried the one book a month goal and I failed miserably. For the next few years I kept on trying but no matter what book it was I would either give up on it or still be reading it at the end of the month.

So how do you digest a programming book without it becoming a monotonous chore?

What I've found that works really well for me is that I take five non-fiction books (programming or otherwise) that I want to read and I read a chapter of each book on a specific weekday. At the moment Monday is a freelance and marketing book, Tuesday is a sketch noting book an so on. What this gives you is variety. Every day is different. It's breaks the monotony barrier.

What about fiction books though?

Fiction books are easy to read because you usually have no idea what's going to happen and it's the authors job to send you to a place that's not your usual environment. It's a form of escapism.

I don't set a time limit for these as it takes the enjoyment away from the book. Instead I try and read these books as often as I can. It's usually at night when the kids are sleeping.

Since starting this ritual I've found it much easier to make progress on the books I've wanted to read. Not only that but I've also managed to set aside a few minutes in the morning for the non-fiction books and then at night I can plough through whatever fiction book I'm reading.

10 Tips for Todoist

Todoist has been my choice of task management app for almost a year now. In that time I've learned a thing or two about it. Here are ten tips to help you get the most from it.

It worth noting that most of these tips can only be used with a premium subscription to Todoist. At just $29 (US) per year for a subscription to Todoist Premium, that's less than the cost of a cup of coffee a month. Bargain if you ask me.

1. Archive Projects For Better Focus

While you might like to be organized by amassing a collection of tasks in a number of different projects, you probably won't be able to work on all these projects at the same time. Not a problem. Simply create your project with its tasks and then archive it to work on it later. Archiving the project keeps it out of active tasks but also keeps it out of your focus.

The archive command can be found in the menu that appears when you hover over a project with your mouse and click the ellipsis on the right hand side of the highlighted section. At the bottom of the menu that appears you'll find the archive command.

2. Create Linkable Tasks

Sometimes we would like to reference something online in a task. It might be support material for the task or a product relating to the task. How nice would it be to include that URL in your task? Well you can! Todoist uses the following syntax to include URLs in a task:

[matthewlang.co.uk](http://matthewlang.co.uk) (Must hire this guy!)

This will create a nice clickable link in your task and will also hide that nasty long URL.

Bonus tip: As well has hyperlinks you can also include bold or italic text in your task!

3. Capture Tasks With Email

Todoist is available on lots of different devices and platforms. If you have a desktop, laptop, tablet or smartphone then there's a Todoist client made for it. What if you're using a public computer to check your email and you'd rather not sign in to Todoist on it?

Tasks can easily be added to your projects and inbox by emailing the task to Todoist. For each inbox and project, there is a seperate email address that allows you to email tasks in. Simply send an email to the correct address that can be found in the tools section of the inbox or project, and use the subject as the name of your task. Hit send an it will be added to your list of tasks on Todoist.

To find out the email address for your inbox and projects, click on the tasks actions icon at the top right hand side of the list. On this menu you'll find the Email tasks to this project command where it will show you the email address you should send your tasks too.

4. Location Based Reminders

Reminders are great for when we do things at a set time or date, but what if you're running late? Instead of setting a reminder for a time or date, why not set a reminder for the general area that a task or project relates to?

Got a meeting with a client downtown at your favourite coffee place?. Set a reminder when you arrive at this location to get the coffees in before your client arrives. A nice way to start the meeting on a positive note!

Location based reminders can be found when you edit a task and hit the reminders icon. Simply flip the reminder from a date and time to a location and you'll be able to the reminder for a location.

5. Backups for Accidents

Deleted a project by accident that contained a list of tasks you entered the day before? Don't worry. Todoist's premium plan backups up your entire to do list every day. Just download the latest backup of your list from Todoist and re-import that project to save yourself the time of creating it all over again.

Backups can be found in the settings section of Todoist under the Backups tab. A list of recent backups is always kept here.

6. Group similar labels by colour

Labels in Todoist are a great way to group tasks, but Todoist only offer so many colours to choose from. What if you run out of colours? Easy, group similar labels by a single colour so that not only do they give you more choice of colours, each label has a contextual colour that is easy to recognise.

7. Recurring Tasks Save Time

At the end of every month I invoice a single client for the work I did for the month. I've been doing this for over a year. Recently though I got fed up re-creating the same task in Todoist. Using Todoist's ability to create recurring tasks, you can have the same task repeat at times that you need. No more re-creating the same task over and over again!

8. Start Projects Quickly with Templates

Starting a new project can involve setting the same tasks up as previous projects. Why bother creating the same tasks though? Templates are plain text files that contain tasks that you can import into a project as a template.

Templates can be created from existing projects or by creating them yourself in a plain text file.

9. Learn the Keyboard Shortcuts

Using the keyboard is a great time saver when you know the right keys to press. It's the reason why us developers are the most productive people on the planet. Right, that's not 100% true, but pressing keys can still be quicker than figeting with a mouse.

10. Reviews Projects and Labels with the Visualiser

When you view your Karma score there's a link to viewing all the completed tasks you have done. When you click this you can analyse how many tasks you have completed over a period of time for a project or label. This is great to use for reviewing your progress on a project.

There we have it. Ten tips for Todoist. Now go forth and be productive!

Do you vet your clients for suitablility before working with them? Maybe you should for happier freelance career.

I've started reading Book Yourself Solid as part of my daily reading. It's time I started taking my career more seriously and invest some of my time in marketing and promoting myself. At first I didn't know where to start but seeing as Curtis McHale has mentioned this book so often and his career is flying then it must be a good indication of its impact.

The first section of the book is about laying down the foundations to build upon. The first chapter is about trimming your clients down to only the clients that you want to work with. While my client list is fine at the moment, there may come a point in the future where I have a client that isn't a good fit for me. Rather than letting myself be saddled with difficult or problematic clients in the future, I need to perfect my red velvet rope policy which is mentioned in the book. Your red velvet policy is a guideline to the ideal clients you want to work with. Before accepting any work from a new client I need to decide if they are the ideal client for me.

In Book Yourself Solid, Michael suggests you identify the types of clients that you don't want. In doing this you end up with a list of traits of clients you do want. This is my ideal client in the three simplest terms that I could think of. They don't cover all aspects of a great client but it's a start.

My ideal client has interesting projects to work on

During those first few meetings between yourself and a prospective client you should get as much details on the type of work you would be doing with the client. It's here that you can get a good sense of what projects they have. As a web developer it might be tempting to always take greenfield projects on but these don't necessarily mean that they are great projects to work on. In the early days of any greenfield project there can be technical issues with untested technology such as programming languages and frameworks, dependency issues with hardware and even implementation problems if you are expected to lead a team of developers who have never used this particular technology before.

In Chad Fowler's book, The Passionate Programmer he mentions the legacy technologist who is familiar with ageing frameworks and languages and is able to work with legacy projects without a problem. These people are essential as they can nurse projects through their final years before the software is upgraded or replaced. I know many developers who would quickly sidestep projects like this but having seen the importance of technology specialists in this field from my ERP days, it's not only work that is essential but also interesting.

Legacy have their problems but what's so interesting about them is the chances that are available to refactor them or gradually migrate them over to other applications. In my days as an ERP developer I not only maintained a number of legacy ERP systems I also has the chance to provide and support and knowledge on these legacy systems to clients. It was rewarding work helping out people with their problems and fine tuning the system so that the same problem couldn't be replicated in the future or at least improved slightly.

My ideal client communicates often

Having worked on a number of projects with different clients, one of the best pieces of advice that I have had is that you should communicate with your client often. For me it's every day. Not a day goes by where I don't ask a question, drop them an IM, an email or even schedule a phone call to discuss something about the project. I used to hesistate in the past about doing this on a daily basis, but now I see it as acceptable behaviour. If I'm continually communicating with the client to clarify requirements on the project then I'm doing both of us a big favour. We're making sure that both of us don't get the end of the project and then think, "That's not what we wanted.".

However, the same goes the other way. Just like I communicate with my client frequently, I expect the same from them. If they have a question they should drop me a message or an email. If they want me to sit on a meeting, then tell me the date and time. If they want me to discuss further options then they should ask me too. I'm not a mind reader but I do try and pre-empt what the client wants. For the rest of the time I expect the client to ask questions when they need to, send me updates to the project and anything else that keeps me in the loop.

My ideal client pays on time

An obvious one for many freelancers but it's one of the key points in ensuring you enjoy your career. I've wrestled with this in the past and I've had clients that have paid on time and clients that have paid late. It's can be frustrating.

Lately though, more clients have come round to paying invoices on time. It's such a boost to your confidence and productivity knowing that your work is valued and that you will be paid for it when you expect it.

I haven't got to the stage where I have parted ways with a client over late invoices but it is something at the back of my mind that I do think about. I'm happy to report though that my client list all pay on time.

These are just three basic guidelines to the kind of clients that I want to work with. Ideally I would like to narrow this further by a specific market, but that's for another day.

We've all been there. We've made a mistake in our career that has had serious repurcusions. We might have hit the wrong key, flicked the wrong switch, cut the wrong cable, sent the wrong document or even just looked the wrong way. Despite all the damage control there's still going to be a degree of fallout from the mistake and it's a mistake can be far reaching for lots of people to see.

I remember two such mistakes in my career. The first was when I was doing work experience at a local brewery and distillery for a large drinks manufacturer. On this particular day I was working in the IT department helping to organise some cables. I mistakenly pulled the wrong plug from the wall that was providing the power for over 10 workstations. As a result a lot of people were unhappy that morning. I put my hand to the mistake. There was no getting anyone work back who hadn't saved it.

The second involved deleting data from a production database. While I was working on an application with my own local copy of the database, I was asked to connect to the production database to run a report. Forgetting that I hasn't disconnected from the production database I ran a delete command on a table thinking it was my own development environment. It wasn't. Before I released the key to execute the command, I realised my mistake. I called my team manager over right away and they arranged a back up of the production database to be made while I was still holding the key down. Once I let the keyboard go the data was deleted but promptly brough back using the backup we had taken minutes before.

These are two examples of the biggest mistakes that I have made during my career, thankfully on the scale of things it doesn't get much bigger than that. Some mistakes though end up becoming local or even national news. I've been on the end of a few wrong electricity cables being cut by builders and such but thankfully nothing more serious than that.

Having recently seen a similar mistake being made, it's easy for me to see now how people can let these mistakes worry them. However, it's not the scale of the mistake in terms of visibility that should be the main concern. It's the risk from the mistake. Will this mistake endanger anyone? Am I putting anyone's life at risk? Unless you're working in an already high risk environment then chances are your mistake won't put anyone at risk. When you make a mistake you should remember this.

We all make minor mistakes on a frequent basis. We chide ourselves for them and then move on. It's when the mistakes become grander in scale that we start to worry about their repurcusions. Over my career I've slowly learned that I'll never make a mistake that puts anyone's life at risk. At most, I'll have lost some data which is why I now have back up strategies for my own data and all the applications that I work on.

In each of these cases I unecessarily worried for a few days about the making the mistake and the effort required to get back to normal by people affected by the mistake, but after a few days the worry was gone. Worry is a wasted energy when mistakes happen. Mistakes do happen and for the majority of us, the best thing to do is to take ownership and rectify the mistake as best you can.

In what must be my longest period of habitual change, I'm still in the process of rebooting. It is changing me for the better though. Here's a few changes that have come out of this period of rebooting.

  1. I've cemented a habit of reading a chapter from a non-fiction book every weekday. By reading from a variety of books I keep things from getting stale.
  2. I'm capturing everything in Todoist, and I mean everything. I'm using it to keep a track of errands, notes and even urls to check out.
  3. I've made the jump to a new text editor and I'm learning new shortcuts about it everyday. It's taken me a few tries to make a successful transition but this I worked through the days of frustration and now I'm working quite well versed with the comamnds that I need to use daily.

I've got a few changes coming over the next few weeks that are more career orientated, but I'll report on these when the reboot process for these is complete. There's still room for improvement which is why the reboot process is still ongoing. Remember, Rome wasn't built in a day.

Three Months With Linode

My blog has been hosted with Heroku for sometime. My requirements for my blog were not complicated. It's a simple static site that is generated locally on my computer and then pushed to the server. My performance needs aren't complicated as well but one thing that irked me on Heroku was the extra cost in going from one dyno to two dynos. A dyno is a computing unit they use to allow applications to scale from their free single dyno to hundreds should you require them. At just over $35US per month for two dynos, I felt that I just wasn't getting value for money. Heroku does do a lot of the lifting for you when it comes to deploying and hosting but how much of it is necessary for what is a simple static site? After hearing good things about Linode I decided to make plans to move my blog away from Heroku.

At first I was slightly daunted by the fact that I would be setting up the server myself. I've never been a fan of system administration. If there's easier ways of setting things up I'll always opt for them but if i was going to move my blog I had to give the sysadmin part of it a chance. I spent a day setting up the server with Ubuntu 14.04 LTS and getting all the necessary dependencies installed. Thanks to some similar steps for a previous version of Ubuntu I was able to get the site up and running by the end of the day.

My blog runs on the Linode 2048 plan which is $20US per month. This isn't the cheapest plan available but it does give me a fair size of memory for my site. I am able to downgrade the server to the new Linode 1024 plan, but I'm happy with my plan for the moment. The server is probably capable of hosting a few more other sites if needed but I don't see that being necessary anytime soon although it is good to have the option there.

To this day I haven't had to do much to the server. I've setup notifications when certain thresholds are reached in terms of size and there's backups of the server taken on a daily basis. You know, just in case. It just runs. And that's the beauty of services like Linode. Yes you could argue that Heroku just runs as well but the setup I have with Linode is just as simple as it was with Heroku. I still keep my blog in a Git repository on BitBucket just as a backup but all that's needs to be done to update my site is run a Rake task. It probably could be simpler if I installed Dropbox on the server and let it continually update each hour through synchronisation, but I prefer to have a little bit of control when it comes to publishing, so the Rake task suits me fine.

After three months I couldn't be happier with Linode's service. Having a hosting solution that just works, requires little maintenance and is relatively cheap are all good benefits. I might even start hosting some Rails applications on them soon!

Mastery takes time

Yesterday I mentioned I was embarking on a last attempt to master a different text editor. If I'm to succeed at this, then one truth I must face is that this will take time, just like mastering any new skill does.

I always find that learning something new starts out to be fun. I have a clear goal in mind of what I want the end goal to be and with that in mind I start. Whether it's a new programming language or an application, those first few days are where my positiveness is at a high. After a few days though, the stumbling blocks kick in. I don't feel as productive as I did before. Even though I know I'm in unfamilair terroritory, I start to wonder if this is in fact the right time to be learning something new. A few days further on and I've only mastered a small subset of this new topic or skill. Questioning myself again, I throw in the towel and abandon the learning process. I've done this so many times in the past.

The recurring mistake I've made in the past is forgetting that learning takes time. Mastery takes even longer.

For the moment I'm content to simply learn Vim. This means getting to a stage where for most of my day I can write and manipulate code without resorting to looking up keyboard shortcuts. Finding files, finding text in files, managing files in different panes, navigating a file, search and replacing within a file and basic text manipulation represent groups of keyboard shortcuts that I need to learn in order to use Vim effectively. I've given myself a month to learn most of these shortcuts. After a month I should be able to assess what I can and can't do in Vim. For all the things I can't do, these will become the focus for the next month of using Vim. Repeating this process for six months will evenutally get me to the place where I want to be. To have mastered Vim.

Learning can take hours or days, but true mastery can take weeks, months, even years depending on what you want to master. This is the key to successful learning and mastery, you need to put the time in.

Another attempt

I'm trying it again. I've made a number of these attempts over the years with my longest attempt lasting just a couple of weeks. Now though I think the time is right for a final go. You're probably wondering what the hell I'm talking about. My fellow programmers might have an idea.

I'm talking about making the transition to Vim as my preferred text editor for writing code.

For years now Sublime Text has been my only text editor. Its flexibility, plugins and stability make it such a great editor to use. It made my job easier since I first started using it and continues to do so. So why would I want to upset my workflow and change to something else? Curiosity. For a long time I've watched other developers wield Vim with such ease and fluency. I'm fluent with Sublime Text but there's something about Vim that makes me think I could be more fluent.

I've tried to make the move permanent so many times over the last few years but it's never successfully happened. The main problem with each attempt to use Vim has been the initial stumbling blocks that make an impact on your typical work day. Sublime Text has worked for me so well since I first started using it and switching to Vim will take a while but my patience always takes a battering and then I move back to Sublime Text.

This time it feels different though. After a couple of days using Vim I'm making headway with the basic actions of managing panes, buffers and basic text manipulation. I'm taking notes as I'm using it and I'm practing some of the shortcut keys that I discover each day. There's still a few teething problems with the setup I have but I'm prepared to see it out for another month at least.

We'll see how it goes.

There's a new age of celebrity available now. They offer more in the way of entertainment and you can even find celebrities who aligned with your own interests. Who are these new celebrities?

For years I've seen the activities of celebrities reported in newspapers and magazines. Every week it seems there's some fashion faux pas made, another check into rehab, or just opening their mouths to say something loud but clearly wrong. I see it as a depressing form of entertainment to follow and one that doesn't give any actual value. With reality television programmes providing an steady stream of new celebrities to add, it seems like there's no end in sight. Well actually there is.

We often class a celebrity as a well known famous person in the public media. Actors and actresses, sports people, singers and even business people are all classed as celebrities. It's been this way for years now, but where else can find celebrities that offer more in the form of entertainment and value? The Internet of course. A platform consisting of millions of celebrities. Through blogs and publications, there are millions of celebrities out there for you to follow, and they're just a click away.

A few of these celebrities I follow are Patrick Rhone, Nicholas Bate, Curtis McHale, Michael Wade, Kurt Harden and many others. You might recgonise some of the celebrities I follow, you might not. For me though they trump anything that any celebrity magazine can offer. Every day my RSS reader fills with their latest activities and drama. They publish on an open platform for the world to see and yet they are often ignored in favour of more conventional celebrities. If people choose to ignore these new celebrities then it's their loss.

This is just the tip of the iceberg though, there are millions of celebrities out there in different circles just waititng to be discovered and followed. You just have to look in the right places. Start with blogs that fall into your interests, there's always someone posting great content in any topic you can find. Search your favourite social network for interesting people in your field or look to mailing lists that offer a condensed form of entertainment straight to your inbox.

There are millions out there waiting to be discovered.

Yesterday I wrote about coasting along. Good for when you're driving and taking in the good views, but when you're coasting for everything you do, you're just ticking the boxes. Today marks the first day of a reboot to purge this nasty habit.

If only everything was as easy to fix as a reboot. Got problems with your computer? Reboot and try again. It's amazing how often this works. I'm not technical support person, but the amount of times I've given technical support to family and it was simply a matter of rebooting their PC is astounding. It's not this easy for everything though.

Rebooting yourself takes a bit more thought, a bit more time. Let's face it, we're complicated entities. Our brains have the accrued knowledge and memories of a whole lifetime. We have habits, whether good or bad, engrained in us. How we approach problems and solve them is different for others. This rebooting lark then is going to take some time then. I'm not expecting a change overnight, but I am expecting to see good results as each day comes. I'm not trying to achieve everything on day one, just making sure that for each day, I've made a positive change to how I work and what I do.

This is the first day of the reboot. So where do I begin? Well, this morning I decided to ditch the MacBook and went out for a cycle. I haven't done this as much as I would like to, as I like to use the Friday to catch up on a few things. Those things can wait though. This morning I just wanted to clear my head and start again. I put on my bike gear, grabbed the bike, walked my oldest son to school and then headed out.

The west of Scotland is having a period of sunny weather so it could not be a better time to head out. As it was the morning, the heat hadn't reached it peak and the trails were great. Dry hardpacked roads mixed with some dry grassy paths further up. The descent back down was even better.

The bike ride was good. It gives me a chance to clear my head which is something I wasn't doing often enough. Using the Friday morning for a bike ride, even if it's just 90 minutes is a good use of time. Everyone knows that exercise is important but what's also important is the chance to leave a few things behind. The feeds, the timelines, the inboxes, the emails, the messages, the tasks. They can wait. They'll still be there when we get back. The difference now is that with a clear head I might be in a better frame of mind to take a few of these on. And that's a good starting point I think for the rebooting process to begin.

Moving Swiftly on

With the release of the new Swift language for Mac developers, I am now interested in trying out app development for iOS and OS X. With thousands of apps out there though, is there room for new apps?

The App Store is five years old this year. Since it started its life as a platform for the distribution of apps to iOS devices, we've seen a few big hits in terms of well executed apps over the years. I don't think there is one true killer app that has made the App Store what it is, but over time there has definitely been a number of niche apps that have been popular with a particular group of people.

People talk about the simple ideas that took the App Store by storm like Angry Birds, Flight Control and others. Yes, they seem simple ideas, but there is still a fair amount of work involved in building and shipping an app. I'm not expecting to publish a game changing app right away, but I do want to start building my experience in the world of app development.

At the start of the week Apple unveiled a new programming language for developers who want to build apps for iOS devices or Macs. It's called Swift. As someone who has made a number of false starts on iOS development over the last couple of years, I welcome the new language. In the past I have looked at Objective-C which was the only true language to use to build iOS apps. When I seen its syntax I was always turned off by it. With time I could learn about the language, but just as I was starting out I always ended up trashing the idea. With the new Swift programming language though I think I'm ready now to start building apps for iOS and the Mac.

Now the tricky part. An idea. Are there any good ideas for apps left? I've been pondering on this for a couple of days now and it's led me to a number of sources for ideas for new apps.

Make something easier

There are many apps out there that simply try to make something easier to do. I haven't came across many that I thought did this well, but there are thousands that started out this way. The problem with starting an app from this view is that it's only easier from your angle. Yes, there will be others that will share the same view, but will there be enough people who share your view to warrant building the easier app?

Make a better shop window

The Internet is a vast source of information and services. Everyday new services are added for people to use and many of them start with basic web sites to get going. When Twitter started, a developer in the UK seen an opportunity to make interacting with Twitter easier for people. The Twitter user interface was a single timeline that everyone followed, but seeing your messages or mentions meant changing screens. TweetDeck was born and it became an instant success with it's better interface to using Twitter.

Making a better shop window to a particular service is hard work and is probably out of my reach in terms of skills. It means designing something better, and while I might be able to put together well crafted web page, the thought of trying to create a better interface for a particular service sounds like a rather daunting task.

It would also need to be a service that I use on a frequent basis, but seeing as most of the services I use already have good to excellent apps that let me interact with them, then the challenge to make a better interface is that much harder.

Scratch an itch

Perhaps the easiest source of making an app comes from scratching your own itch. If making thousands of dollars isn't your end goal when making an app, then this is where to start. Building an app that serves a purpose for yourself and gives you the experience to build better apps in the future.

An iOS/OS X client for Journalong is something I've had in mind for a year now, but there's always been obstacles in the way. Now with a growing interest in Swift, I might just have the motivation to start building something.

I'm never going to produce the next killer app, but perhaps shipping something that serves my own purpose first is enough of a step on the road to building more apps in the future.

Checklists are often skipped over as an aid to problem solving. They shouldn't be. They provide a quick step plan to narrowing down a search or criteria to identify a problem.

This week was one of those week's where I was caught out with a problem. In debugging an application, I couldn't work out why the plugin I installed and setup wasn't being called in a screen. Despite changing what I thought was the correct screen, nothing was happening. It turns out I was in fact updating the wrong screen. A simple mistake to make in most applications but here the application is slightly different.

This application I am referring to is in fact a content management system. It contains a number of different layouts depending on the type of site that you want. This means that there are hundreds of files that make up the user-interface to the application. There is a default file representing each particular screen and then there is a screen for each different type of site that can override the default screen if we need it. This means that there are hundreds of files representing the different screens in this application. Some are similar and as a result, ensuring you are updating the correct screen is important.

So where does the checklist fit in then? Well as I was debugging the application on a particular type of site, following through a number of steps would have ensured that I was in fact debugging the correct screen. Thinking of each item on the checklist as a way of narrowing down the problem allows you to eliminate easy to find problems, eventually narrowing down you scope to the actual problem you were having.

I've since started putting together a number of checklists for identifying such problems. I've done a number of debugging sessions like this where I missed a step in identifying the actual issue and instead spent a few hours going down the wrong path. It's time that I don't want to waste in the future. I'd rather identify the problem quickly, fix it and crack on with something else.

I had that 'new bike itch' again, but despite the advances in lighter materials and better suspension, I'm still a hardtail die hard at heart.

I went out on my first mountain bike ride in a few months this week. It was great fun, I'm hoping to get out a lot more often now that I have more time and family life has settled down again. Our youngest is finally sleeping a lot better thanks to his new inhalers, my freelance career is steady and my bike came out the shop with a few much needed upgrades a few months ago. My bike is an On-One Inbred steel hardtail with mid-travel suspenion at the front. Steel has been a favourite of mine since I got my first mountain bike as a kid, a Kona Fire Mountain. I love the feel you get on the trail as you're riding. I have tried a couple of aluminium frames in the past but you can feel the harshness of these frames as you're riding. Every bump on the trails is transferred through the frame to you. When it gets bumpy you can feel it.

I've also tried a couple of 'hardcore hardtails' for more aggressive riding in the last few years. These bikes are great for downhilling, jumps, and bigger drops than your typical mountain bike could handle. Those days are long past me though. Hefting such weight about on the trail can take it's toll. I'm reaching my late thirties now and I don't have the stamina I had when I was younger, so when I want to get out and ride, I just want to ride. Which is why I eventually settled on the bike I did, a plain hardtail trail bike.

After talking to a friend about his new full-suspension bike, I got that 'new bike itch' again. So last night at 2am while our youngest was demolishing a bottle of milk, I started browsing for full-suspension bikes on my iPhone.

Having never owned a full-suspension bike, I've nothing to compare a hardtail to in terms of riding, but for the purist like me I think that they're more suited to more extreme trails. They have their advantages when setup correctly, even with the extra weight they carry (which is becoming less and less of an issue), they allow for faster lines absorbing all those bumps and roots in the trails that other bikes may opt to avoid. I'm not going to get into a debate with the rest of the mountain biking community over hardtails versus full-suspension, for me I do prefer a well built hardtail.

After 30 minutes of browsing the many online bike stores, one thing was clear to me. Full-suspension bikes are more expensive than their hardtail counterparts, but even aiming at the £1000 point there are few full-suspension bikes that would win me over. I'll admit it would be hard to get a decent full-suspension bike at this price point, going higher would definitely open up more options, but I couldn't realistically pay anymore than £2000 for a mountain bike. If I had a budget of £1500 I would definitely buy a hardtail every time. The simplicity of the setup is what sells it for me. A bike that you can simply ride anywhere. Yes it might not handle the more extreme trails in the Alps, or even the black routes at the trails centres across Scotland, but it will handle the 90% of my riding needs. Also at this point you can push the boat out to getting yourself a better than average bike in terms of components.

The new bike itch is still there largely in part to the changing sizes in wheels that bikes are available in. I think the 650B size will eventually become the more popular wheel size in general with a minority number of bikes coming in the 29" size.

I'm not ready to buy anything just yet, but when the time comes, I will definitely be looking towards the hardtail market again for a new bike. It's a proven design that has lasted for decades and hopefully will last for many more to come.

Tolerance is something that many of us were able to exercise before the Internet, now though it seems that tolerance has been cast aside and replaced with knee jerk reactions.

It's amazing how much lower our tolerance levels are as citizens of the Internet. As soon as something is wrong, the stage is set for an outpouring of protest. It could be thousands, hundreds or even one person reacting to an incident that otherwise would be considered harmless. With the option to broadcast our opinions though, we have become a generation of Internet users who are quick to scorn those who we consider to have done us wrong. I've already read a couple of these type of posts this morning and it's just gone past 11am.

Take for example the post I read this morning. A person complaining they are getting spammed from the service that they pay for. There's lots of ways to interpret this. Is it spam? Did they sign up to their 'marketing' list?

The person's response was to stop using the service and encourage others to follow. Have we become so intolerant that we're happy to jump from one service to another just because we got a marketing email from a company whose product we use? Okay, I agree the email may in fact be classed as spam and unwanted, but is it so bad that we should stop using the service altogether?

I've faced a number of situations in the last few months where I questioned the actions of a service provider I use.

The first case was Github's initial handling of a delicate situation involving one of their CEO's and a now ex-employee (they eventually followed up with a better response). Rather than going into the whole story, I just thought Github initially handled the situation wrongly. I wasn't happy with the way it was going. I wanted to take some action. Did I stop using Github? No. I did however downgrade my account and it continues to run on their free account.

Could I stop using Github altogether? No I can't and the reason why is that a number of my clients use Github so I still need to be able collaborate with them on Github and that means keeping my account. From an incident that I wasn't happy with, I was able to take some action without causing disruption to my workflow and clients. Since then I've found a nice alternative to Github called BitBucket. Sure BitBucket might do something bad in the future but I haven't completely discounted Github.

The second case was the appointment of Condoleezza Rice as a new member of the board for Dropbox. Now I've been a happy customer of Dropbox for a number of years now and yes I questioned the appointment but I just simply couldn't afford the time to spend looking for alternative cloud storage service that done everything I need it to. Also I like using Dropbox. I like using it alot. Am I really going give myself disruption by moving to another cloud storage provider?

Tolerating the decision in the long term with an eye to reviewing it in the future was the best solution I had. Compared to the first case, this isn't such a bad incident. Sure the new board member has a background in American politics that many might question, but it's not like Dropbox are just handing the keys over to someone else.

In both cases I questioned the actions of the service. Yes, the first reaction of many in each case is to stop using the service entirely, but then what happens when a similar action happens down the line with another service provider? Do I stop using them and move onto the next available service I can get? Hardly ideal given that I would eventually run out of adequate service providers to use and I would eventually end up with a tools and apps that at best meet half my needs. That's not what I want.

It’s amazing what prompts people to stop using a service or app. Even the smallest amount of inconvenience now seems to make people want to switch to something else. In the Internet world this is an initially easy thing to do, but in the real world it's not so simple.

There's a supermarket chain in the UK that has become something of a superpower in the amount of land it owns. This supermarket chain bought land in the centre of our town with plans to put a store there, however it has since put the plans on hold and now there's an eyesore of derelict land sitting unused in the centre of town. Hardly a benefit to the town. I choose to largely not shop at this chain now, but it's not always ideal. If I need something urgent then I wouldn't be against using the chain to purchase the goods that I need. Most of the time though I choose to shop elsewhere.

Back to the digital landscape that is the Internet though, and while you could move from one app to another there comes a point where you look back and think that the service you got from a provider wasn't so bad. When it comes to supermarkets, I choose to shop elsewhere when I can but it's not always ideal. Could you honestly say that you will stop using a specific service forever? I don't think I could.

If your level of tolerance is so low that you're prepared to switch from one service to another then eventually you're going to run out of options and have to consider one of those services that you couldn't tolerate in the past. Rather than letting knee jerk reactions guide your decisions why not be more tolerable of the mistakes that services make. They're run by humans therefore they're prone to the same mistakes that everyone makes. You just have to decide if that mistake has consequences that affect you or others. So what, they took a feature away or they had some downtime. Big deal, as long they are not harming yourself or others then where's the problem?

Paper writing tips from ...

... Kurt Harden.

Here's the first:

  1. Grab them by the … whatever will get their attention. Memo? Invert that triangle. “Start at the last page” as a client recently told me. “Our new product line is selling very well, with penetration in existing clients of 30% after the first year. But the _____ line is failing…” A paper? Get the most interesting quotation you can find, and place it right before the start of your paper. It’s okay, the person reading your paper wants to enjoy themselves. You will be rewarded for making the experience interesting.

So you have to write a report/paper/memo by Cultural Offering

Assumptions about the Internet based services we use lead to the fact that only the more popular ones are catered to when it comes to subsequent tools being built.

Assumptions on the Internet are everywhere. It's in the networks that we can share articles to, the growing number of companies using Facebook as their sole Internet presence and in the ways that we can connect services together.

For someone like me it's pain in the backside.

There's a campaign at the moment to stop the development of greenbelt land in our town. The local council want to sell the land to developers to build a thousand more homes for our town. Trying to coordinate with other campaigners on this issue has proved difficult. The only point of contact I can find are on Facebook and even there they don't give an email address to contact them. The assumption here is that everyone has a Facebook account but that's just not the case.

Then there's the services that require you to register using an existing social network account without providing users with a chance to register with their email address. Assuming that we're all on once social network or another is a bad assumption to make and in the end it's only going to lose you potential users and money.

I make an assumption on this website with the sharing links at the bottom of each article. You can share to App.net or Twitter. I choose these because at the time I did have accounts on both, but now I only have an App.net account. Am I going to reduce the sharing options to just App.net? Definitely not, as I see that these are two of the quickest ways of sharing links now.

When compared to the assumptions that bigger companies and organisations have made about social network choice and prescence then my site doesn't seem so important, so I guess then that my assumptions are not too damaging to others. More of an inconvience really, but there are other ways of sharing my website.

Not everyone is connected in a way that we can be accessed on any of the more popular social networks. Some of us even choose to stay away from these in favour of reaching people directly through email or publishing updates to an RSS feed. The good thing about these is that they're the most open formats avaialble for the sharing and consumption of data. No one controls email or RSS feeds, they're free for everyone to use.

I'm more selective about the services and tools I use. I try to use services that provide open endpoints such as RSS so that I can connect services together. They don't depend soley on specific social networks and give me more of a choice. Choice is good, assumptions are bad.

Sticking with App.net

Many readers here will know of my support of the social platform, App.net, and how it has become a worthy alternative to other social platforms. It's a place where I hang out daily, watching conversations happening, taking part in them on the odd occasion and using the 256 character length posts to bash out my thoughts, opinions and ideas through out the day.

I wasn't particularly surprised by the news yesterday that the App.net team is having to scale back its number of employees and rely on contractors to maintain and support the App.net platform. The App.net team have been quiet of late and there hasn't been a visible enough uptake of new members for me to see that App.net platform is growing. It's not all bad news though, Dalton and Bryan have said they will continue running App.net indefinitely.

I've heard so many arguments that App.net doesn't have the user base to sustain growth and given the recent announcement from Dalton, it's hard to argue against this. The thing is though, it's still making enough money to sustain the platform, but this for me is the worrying part.

App.net started as a platform that required payment before you could create an account here. $36 per year is the cost. It's not much for many people, and there's even the option of paying monthly. It was this pay wall that guaranteed that there would be some sense of mediation of users coming onto the platform. If you were serious about joining you paid up. Dalton's recent post reads that hosting is covered by the renewal of paid accounts, but how much of the hosting costs are being used to support free accounts on the platform?

I want App.net to survive and continue to grow, but the free tier account has always been a sticking point. Accounts that don't contribute to the sustainability of the platform and their continued use of other features such as Broadcast means that they're using up part of the hosting of this platform while giving nothing in return.

I could be wrong about this and I don't have the numbers to prove my argument, but I would like to see the platform reducing the features that are on offer to free accounts and continue to add more value to paid and developer accounts. If these accounts are the ones that will sustain App.net in the future, then surely they must be the primary focus rather than building features for all in the hopes that some free tier accounts upgrade?

It's not all bad though, the App.net team have open sourced the Alpha client for the platform. It's from this point on that I hope that contributions made by the community will drive this social platform back into a more healthier state of sustainability and growth.

I love the community behind App.net. My timeline is a much more pleasant place for reading than any single day that I had when I was on Twitter. Interesting conversations and shared links provide a much better environment than being the one account in millions on Twitter.

I'll continue to post on App.net until the lights go out, which I hope is years away from now.

Daily routines

The last two months have been something of a blur. Client work has taken up most of my day now and even into the night as well when I shouldn't really be working. A pattern, or lack of pattern has emerged.

It started a couple of months when I decided to scale back on my daily writing. I thought that not writing as much would let me focus on getting other chores and such done. Truth is, it was the start of a slow decline in what I had carefully built up over the best part of a year. The daily routine.

My work day pretty much had the same format for the most of last year and it worked for me. I had the same routine in the morning for preparing for the day ahead and the same routine at night for reviewing the day. It worked for me.

Once I stopped writing on a daily basis though the routines started to be skipped, and then the calendar was running empty, the task list built up and before you know it, my daily routine consisted of nothing more than simply putting out fires. I've been in that place before and it wasn't a good place to be.

I ended up reacting to problems rather than anticipating problems and setting time aside for them. I was context switching multiple times a day and losing focus. My inboxes and lists were stradily climbing with not view of the bottom of them.

No more. The routines are back in place, the daily writing will be started again and a plan of attack has been formalised. Let's see where this goes.

Moving to Linode

I've been reluctant to explore other services for hosting web applications, but with costs for even a small application on Heroku I've been considering other options.

Last week I successfully transferred the hosting of my blog from Heroku to Linode. Performance wise Heroku was ideal for this website and it handled the traffic well enough considering that I ran the site on one dyno. So if performance and uptime is satisfactory then why make the move?

I've got a number of other Rails applications that are sitting on Heroku. One is a production application, while the rest are simply prototypes and work in progresses. For the production application I've enabled a number of addons to ensure the application responds well to traffic but these addons come at a price. By the time I've added the minimum addons needed I'm looking at close to $100 dollars a month. That's expensive for just a small application.

The beauty of Heroku is that it requires little maintenance. Need more dynos? Add them on. Need more worker processes? Add them on. Everything is easy to maintain through the Heroku web interface. That maintainability comes at a price though and it's a price that I think is becoming too expensive. This is where the move to Linode comes in.

At $20 per month for their basic server it's much more cheaper than keeping a two dynos running on Heroku. This is only half the story though. The other half to this puzzle is Cloud 66. It's a fully configured application stack that sits on your Linode server. It's geared towards Rails and other Ruby based applications so it fits my criteria nicely. The nice thing about Cloud 66 is that it handles the setup and maintenance of your application stack giving you the choice to setup servers with different cloud providers if you need to.

I'm still in the early days of using Cloud 66 and Linode but so far I'm liking what I'm seeing. The end goal is to move all my main Rails applications over to Linode and with some running using Cloud 66 and some just running on a bare server without Cloud 66. Heroku is a great service for hosting Rails applications but it's price is far too expensive for me and when there's cheaper alternatives out there that don't require as too much maintenance.

The other benefit to this move is that I'm starting to learn more about the internals of hosting Rails applications again. I'll use Cloud 66 for most applications, but I will aim to have a Linode server for small Rails applications that are just ideas. Learning how to host Rails applications without all the Heroku magic can only make me a better developer as it broadens my knowledge as a developer. That's all I'm aiming to be, a better developer. And if this hosting move help me do that then I'm happy.

Complicated software looks like hard work, but does that make simple software easier. I would say no. In fact I think it's harder to produce simpler software than complicated software.

At the weekend I got into a conversation with my Dad about complicated software. My Dad is a draughtsman. He puts together the drawings for piping installations such as refineries and oil rigs. He uses software on a daily basis for his piping designs, but it wasn't always done this way. When he started in his career nearly 40 years ago there wasn't a computer to be found near the desk of any draughtsman. Everything was done with pen and paper. Simple tools by today's new tool of choice, CAD software.

Over the last couple of decades the mouse has replaced the pencil as the draughtsman's main tool for work. In this time the market for CAD software has boomed and with it come some of the most complex software I have ever heard of. My Dad has made the gradual change to CAD over the years through a number of training programmes and plenty of on the job experience. His biggest bug bear though is the software. In his opinion it is too complicated.

For over a decade now I've heard many complaints against software being too complicated. Complicated software isn't the root of the problem though. Software starts with people and what those people want. These are the initial requirements of software, what we expect it to do. Given enough time, and no constraints, any software product can go from simple and easy to use to bloated and complicated. In the past it was thought that a software product rich in features was the way to sell it. What happens over time though is that the product continually grows and grows as it caters to more and more requests until it becomes just too big and complicated to use. Those original features that made the software a hit have become bogged down by other quick hit features that only cater to a small subset of users.

We software developers are a bit older and wiser now though and we've learned a lot from those first days of commercial software. The main thing I think many software developers have learned is that it is okay to say no to a request. This is perhaps the hardest thing to do, we want our software to be used by many, but that doesn't mean catering to every request. Saying no to nine features, but yes to one is our way of saying that we care about the software we produce. If a feature doesn't fall within the general mantra of the software then we should say no to it. Yes, we might gain a few more users, but in turn we could end up annoying half of our existing users.

The thought of complicated software has made me re-assess the projects that I am working on and how they can be simplified for the people that use them on a daily basis. It's also made me question requests from clients for changes to their products. I could simply take the money and add the new feature, but by questioning that feature I could be opening a new discussion with the client to find the exact source of the problem and deliver a solution that will simplify the software instead of complicating it.

Plain and Simple Bookmarking

I seem to have a love/hate relationship with bookmark managers. I like using them yet I find faults in each one and end up disliking them. Can I find plain and simple bookmarking service that let's me just search?

Bookmarking services. I've used a fair number of those in my time. Remember Delicious? Those were good days. I do and since then I've tried a number of different services including Google Bookmarks, Pinboard, and I even tried to roll my own bookmarking service a couple of times. Each time I tried something new though it felt like it was just over the top.

I never wanted to manage a collection of separate bookmarks, I just wanted a somewhere I could store them and find them. How they got there wasn't the problem, it was how I found them that mattered. Lots of bookmarking services tagging as a way of grouping your bookmarks, but do we need to tag our bookmarks if they can already be found with a good search facility?

You might have noticed a new addition to the blog in the last few weeks. At the top of the page beside the main navigation links there is a search box that you can use to search my blog. This isn't a feature of the blogging software I use, this is an external service called Searchpath. It indexes the content of your static site and gives you a plugin for your site that let's you search on your site's content. I've been using this for a couple of months now and the results of the searches have been good. Anytime I've needed to find something, I can using the simple JavaScript widget that sits at the too of my site.

After a couple of weeks of using this I wondered if it could also index other pages. Pages of bookmarks perhaps?

So last week I finally got my collection of bookmarks out of a database and converted them to markdown files grouped by the month they were created in. From here I then set up a page on my site that listed each months worth if bookmarks. You can find this new archive here.

How I add to this collection is simple. In my toolbar I have a couple of bookmarklets. One coverts the URL to the page to a markdown link and the other converts the entire page to markdown. I use the link bookmarklet to get the link for the page I want to bookmark and copy it to the clipboard.

I keep the this months file open on my desktop using the wonderful Marked application. If I need to add a bookmark, I simply press the edit shortcut key in Marked and my markdown file appears in my editor. Once I have my bookmark file open I simply append the new bookmark to the bottom, add any notes and save it.

The last part is the indexing of these bookmarks. Searchpath looks for links in site and follows them through to find pages to index. I'm interested to see how this change to my bookmarking routine works out. It's taken me to now to realise that I don't need things like tags, favourite bookmarks or even grouping bookmarks by a collection. I just need a place that allows me to search through them when I want to.

Logitech K811: A Review

It's been a month now since I started using the Logitech K811 keyboard. The reason I made the switch was that my old Apple keyboard was getting rather old. Five years is a long time for a keyboard, in fact it's probably the longest time I've ever owned a keyboard. As a result the keys on the keyboard were sticking and one of the keys needed a fair amount of beating before it would register the key press. I needed a new keyboard.

Two things the new keyboard had to do. Be OS X compatible and wireless. Anything else after that is a bonus. After looking at a number of different keyboards I filtered this down to a number of keyboards from Logitech. In the past I had a Logitech keyboard when I worked as an ERP developer. This was a great keyboard, so I started to look at the rest of Logitech's range. The K811 stood out for a number of reasons.

My Logitech K811

The keyboard itself is light and while it doesn't exactly match the build quality of my Apple keyboard, it has been sturdy enough for every day use. The top of the keyboard has a plastic backing while the rest of the keyboard has a nice aluminium finish. It's a shame the aluminium finish doesn't extend to the whole of the keyboard. There is also a greater degree of flex in the K811, but then that it would take a great amount of pressure to snap the keyboard this way.consists of an has a small profile. The K811 is thin and doesn't have as steep an angle as the Apple keyboard. Looks wise it's definitely up there with my old keyboard.

The keyboard can be charged using a USB cable. This is good but in the last month I've had to charge the keyboard three times. This maybe partly because I've left the keyboard on when I leave my desk. If I turned it off when I wasn't using it then it would probably extend the life of the battery between charges. I'm not going to worry too much over this though as it does mean that I don't need to replace the batteries for it.

Another nice feature of the K811 is that you switch between multiple devices at the touch of a button. With my iPad almost unusable (long story), I haven't used this feature although when it comes to getting a new iPad, it's good to know that I'll be able to switch between my iPad and my MacBook if I need to.

The last thing that I like about the keyboard is the backlit keys. My hours of work can vary from day to day and during these dark winter nights it's been good to know that my keyboard is easier to see when I'm working late with just my desk light on.

The only real gripe I have with the K811 is that the connection to my MacBook cuts out about once a day. I've searched the support forums on Logictech for a resolution to this but I've yet to find one. The connection does come back after a few seconds, so I'm not going mark this as a big drawback to the keyboard.

Other than that the K811 has been a great keyboard to use so far and is definitely a worthy replacement to my old Apple keyboard. It's more expensive than an Apple keyboard and maybe not worthy of the price difference but I was happy to fork out the money to get something that would work for me on a daily basis and offer a little bit more than other keyboards do.

On a day to day basis I'm providing a service to my clients based on the programming languages I use. In time though these programming languages will fall out of favour with clients and I'll no longer be attractive as a freelance service. What can I do to change this?

My one year old son Drew is trouble. I thought my oldest son who is now seven was trouble, but he's nothing compared to the mayhem that is his younger brother. Drew loves exploring round the house, hiding in corners and inevitably getting himself into trouble. If there's something he wants within his reach, he'll try and get it. Now I could move everything that he shouldn't be touching out of his reach but that just isn't possible in our house. We still have to live. So for the moment, we'll put up with Drew's antics until he is older to recognise right and wrong.

Watching him running around the house and raiding cupboards, drawers, my desk and anywhere else he can reach is nothing more than him exploring his environment. It's healthy for him to do this. He's a growing toddler. I wouldn't expect anything less from him.

As I watch though I realise he's doing something. In each case he'll try and grab something he wants. When we tell him no, he runs off and tries to find something else. When we say he can have what he is trying to grab, his faces lights up as he's found some new artefact that he hasn't seen before. It's exploring on a micro scale. It's his way of testing the boundaries. He doesn't know what is right and wrong and so he tries in his own way to see what he can and can't get. It's a hit and miss method for him.

As a freelancer I have a small number of services that I offer based on the trend of safe technology that is available in software development. I work with Ruby for a number of reasons. It's become a popular language with many markets and their's plenty of work out there for those looking for it. In a career where the technology landscape changes on a yearly basis , should I be banking on this safe language for the future?

Ruby was the last language that I invested anytime in. Back when I first read about it during my .NET days I was in fact reading about this new framework called Ruby on Rails. I think I first read about Rails in 2005 but it would be another three years before I decided to start learning about the Rails framework and in turn the Ruby language. Since then I've rarely invested any time in learning a new programming language other than the fringe languages and frameworks that are part of the Ruby and Rails communities.

The reason I haven't done this since then is that I don't want to waste time investing in a programming language that doesn't start to become mainstream. Why be afraid of investing some time in a new programming language though? The technology world changes on such a fast pace that it's impossible to predict when that next killer language will appear.

Just like my son though I need to start testing my own boundaries and explore the programming language world around me. It will be a hit and miss experiment for sure. Over time though, I should have invested enough time to familiarise my self with a number of different languages. It's at this point I can then decide if any of these languages are right for me to consider as an extra service that I can offer to clients.

It's been far too long a time not exploring another programming languages. It's definitely time to test my boundaries and see what is happening out there. Sticking to a safe programming language is easy to do, but there will come a point in time where I will need to pick up a new programming language out of necessity rather than choice. It's at this point where I would like to have the experience of already picking up new programming languages and reducing the friction in learning it.

Does Freelancing Offer More Flexibility?

Working as a freelancer doesn't offer the flexibility that I first thought it would, but is that a bad thing?

I've been freelancing for over a year now. It's been a great journey so far and long may it continue, but when people ask me if I have more flexibility in my hours, they react with surprise when I say no.

When I first wanted to freelance, one of the benefits that drew me to it was the fact that I would dictate my hours as I would see fit. I would work when it suited me the most. If I wanted to work in the morning then I would. I could take the afternoon off and then do more work in the evening. That's not how it has worked out for me though.

I work four days a week doing client work. Typically my day runs from 9am to 5pm with maybe an hour or two extra done at night if needed. Sounds like your typical work day right? Well that's largely in part due to the fact that is the hours that my clients work. They have typical work hours like most other people so it suits everyone if I work to the same hours as well.

The flexibility doesn't then come from the hours that I work then, it comes from the fact that I work at home. I can do the school run in the morning and the afternoon as well as be home for deliveries coming to the house, giving trades people access for repairs and decorating when the need arises and because I am already at home, I can use my work hour more productively by running a few errands during my lunch break when I need to.

To a degree freelancing does offer me more flexibility. I work the days that I want to and take time off as needed, however it isn't the flexible career that I first thought it was going to be. Yes it is flexible, but only in the fact that I can do a few more things extra in the day as I work from home. Work hours wise though, I'm not much better off than many others but that isn't a bad thing. Keeping to a working day means that I've got time for the family when it comes to the evening and the weekend.

Three pounds got me a tea and hot roll this morning from my local cafe. A pot of tea which should give me three decent cups of tea and a toasted flatbread with sausage. A little bit upmarket when you consider this is a cafe in the West of Scotland but also good value when you consider that it's not your usual greasy spoon morning roll with a slice of cheap meat thrown in. Good value I think you would agree. I get enough fuel to see me through to lunchtime and enough tea to keep me working for at least two hours.

What about value on the Internet though? What determines value in the products and services that we buy but are nothing more than bytes that exist in the Internet?

Five dollars is a common price point for many products and services. Evernote offers extra bandwidth for synchronising data for this amount, Github offers a private repository for the same amount and you can follow more people on App.net for, yes you guessed it, five dollars. It's a common price for many services but the variety of value differs from product to product.

There is a trend on the Internet when it comes to services and value. The older the service, the more value you get. It's not true in every case, but it's certainly applicable to many.

Take Evernote for example. Back when I first took an Evernote subscription the added value I got from it was mainly their offline notebooks and extra bandwidth for synchronising my data contained in Evernote. Now though, Evernote offers collaboration, extra security, presentation and even other premium features from their other apps. Good value if you use these on a monthly basis.

Let's look at App.net now. Out of the box a free account gives you great value including the ability to use their Passport application and follow up to 40 people. On top of that you get 500MB of storage on their platform. For an extra five dollars a month you can follow as many people as you like and also get an extra 500MB of storage taking you to 1GB. Right okay, not the range of extra value that Evernote offers but it is value. App.net is young though and in time they may offer more to its paying customers to encourage free customers to upgrade.

The trouble with comparing these services and more is that there's usually only a handful of great services in each market. Comparing services from different markets isn't going to work. It's not fair to say that Evernote offers more value than App.net but in terms of a basic feature count, yes it offers more, but it depends on person to person what features they use.

For many of us that use the Internet on a daily basis though, we live in a time where five dollars is nothing. It's a fancy coffee or even breakfast. I don't think five dollars to me is a lot of money to pay for a serivce online for a month. Even the most basic service is worth paying for.

If it provides value to you as a consumer then why not?

What's the minimum you would pay for extra features and value from a service?

Also does that price change depending on the important of the service you are using. Would a service critical to your business warrant a larger minimum price so that it continues to support your business?

No More Netterpress For Me

Yesterday I decided to pull the plug on the Netterpress newsletter. Saying no to your own ideas is difficult to do. You want it to grow. You want it to succeed. It doesn't always end up this way though. The journey to a successful product is hard work and needs a significant amount of effort. After working on Netterpress for over a month it was clear that it wasn't something that was worth doing given the amount of money that was coming in from initial subscribers. This wasn't the only problem though.

A Small Community

App.net is still a small community when compared to other well known social networks but it shouldn't be pushed aside for its size though. There's still a fair amount of daily interaction that goes on here and it is growing on a daily basis. It can't be compared to the millions of users that other networks can and that restricts the number of potential customers that a premium newsletter like Netterpress can have.

I was buoyant about the newsletter when I first wrote about the idea, but when I unveiled the sign up page and price, the take up for it was low. The number of interested subscribers just wasn't there. With a bigger network, there may have been more of an interest, but App.net being a small community means that there just isn't enough people there interested in the newsletter.

Sourcing News & Content

I had a plan at the start which involved finding content to put in the newsletter from a number of sources. The first was to follow a number of developer accounts for apps on App.net and a few other accounts that would give me news on app updates and changes to App.net.

The problem with this is anyone else on App.net can follow these accounts and get the same news for free. I was counting on the fact that I would do the leg work in correlating the news and updates from a number of different accounts and present them in one easy to read list.

Another plan I had for finding content was the use of hashtags that people could include in their posts if they want a post with a link to feature in a newsletter. Unfortunately this idea wasn't conveyed as well as I could have and was never used in the entire time that Netterpress ran.

The last strategy I used for finding content was the use of saved searches in the Felix app on my iPad. I setup a number of saved searches within the app and checked them on a daily basis. Some content for the newsletter came through this way but it wasn't the flood of newsletter content that I was hoping for.

Most of the content for the newsletter came from spending a few minutes each day searching links in my own timeline and the timeline for the Netterpress account. It was time consuming and certainly wasn't an efficient method.

Content Curation

One thing I took away from the experience of running the newsletter was that it is a time consuming task. I now have new found respect for those people that curate content for the benefit of others, whether they run a newsletter, a blog or even a magazine. Publishing a periodical for others to read is hard work and it needs a lot of time and thought.

You can get so far by automating the curation process but it still needs a final check to confirm that the final content is okay for the newsletter. Although I didn't get the entire process automated, the curation process for one part of the newsletter was almost fully automated but it did need a last check before publishing the newsletter.

It's Not The End

The newsletter itself is not dead however. Shortly after announcing the retirement of the newsletter, I received an email from another App.net member who wishes takeover the newsletter and publish it on a more irregular schedule for free. I'm in the process of migrating over the assets of Netterpres including the account the subscribers that have allowed their email address to be given to the new owner.

It's good that the newsletter will in fact live on, but it wasn't a viable product during it's first run. This might change with a new owner and perhaps making it free for a while will get enough subscribers so that one day it could eventually pay for itself in some way.

I'm done with this idea though. It's time to sit back for a few days and catch up on reading, writing and code. Another idea will come along soon and when it does, I will start the process of evaluating it as a product all over again.

I'm coming to the end of a project with a client. In the past I would have made sure the client was happy, closed the project off and collected the rest of my fee for the work. So would many freelancers. The work is done, you're done. Right? Maybe not.

Over the last few months a number of projects have been started and finished with the same client. This has led to a familiarity that is great for day to day communication, but as a working team we have become complacent in the work we are doing and there is clearly room for improvement in how we work together to finish each project.

In an agile team, frequent retrospectives are used to find out what's working for the team, what isn't and areas where the team can improve. It's a time of reflection. As part of a my pledge to deliver a professional service, I'm am now going to give a retrospective for each project that I finish with a client.

Essentially it's a report of three areas. Developers will recognize the questions as they are the same questions asked when an agile team gets together for their own retrospective. So why not apply the same idea to client work as well?

1. Where did we go wrong?

Admitting where a project went wrong can be difficult for all concerned. It's not a finger-pointing exercise though. If you think I'm picking at your faults, then you're probably not the type of client I want to work with. We're simply trying to isolate the problems areas so that we can change them for the better.

2. Where did we do well?

Highlighting where a project went well is important for any future work I do with a client. This is often over looked and we should never just think the work that is done on time and within budget is okay. If work is carried out within these constraints, then recognising that success is a great area to start for future projects. I want to build on a set of good practices that we both recognise so that future projects become easier to do.

3. Where could we improve?

We found out where we went wrong from the first question, but is there something we can do to fix this for future projects? If we are to continue working together, then it would benefit everyone if we could gradually improve on projects in the past. Less bumps on the road means projects can be finished to a higher quality, on schedule and with-in our agreed budget. Who doesn't want to work like that?

I have a first retrospective coming up in the next couple of weeks, and I've already collected a number of different observations from the project where both myself and the client could improve. Not all clients will be happy to read the retrospective or even take any advice from it. That's okay, it's their choice. For those clients that want to improve on future projects when working with me, I'll be more than happy to help them resolve problems from the retrospective and suggest recommendations for future projects with them.

The project doesn't end with the last commit or deploy, it ends when I've exceeded the expectations of the client and helped them get the most from our time together working on a project.

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.

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.

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.

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.

Marked 2 - An Essential Markdown Viewer

Markdown. It's become so engrained in my workflow that I barely think about the syntax now. This post is being written in Markdown, as does most other things I write. To support this markup I need tools that are not just Markdown compatible, but champions of Markdown. Marked 2 is one such tool.

Marked 2 is an OS X markdown viewer. If it sounds like Marked 2 only does one thing, you're wrong. There's more to this app than simply viewing a file.

Many Markdown viewers and editors give just the basics of viewing Markdown. The markup formatted as HTML with your choice of theme to make it all pretty to look at it. Marked 2 does this too, but it also does so much more.

More Statistics

We've all the seen the word count feature on lots of editors. In fact I would say that almost all editors have this feature included in them. Marked 2 includes a word count for your document, but it also other statistics:

  • Character count
  • Paragraph count
  • Sentence count
  • Reading time
  • Average words per sentence
  • Average syllables per work
  • Reading ease

That's not all of them as well, there's more, but you get the idea. The great thing about the statistics is that on Marked 2 you can leave this pane on the app open and it will update the statistics as you type.

Probably not a good idea to be continually looking at this as you type, but periodically I like to see how much progress I've made and whether my editing has improved my document.

Excellent Keyword Analysis

You can highlight repeated keywords from your writing, which will highlight those keywords in pink. Once you have done this you can also click those keywords to darken the rest of the document so that you can see only the keyword you clicked and where it is repeated in your document.

During this view you can also zoom out from your document and get an overall view of your document with those keywords still highlighted.

I've been using this to replace poor choices of words and replace them with better choices. The keyword analysis can also be customised so that you can include words that you want to avoid when writing.

Lots of Preferences

My blog is a static website that is regenerated each time I deploy it. However before I publish a post, I use Marked 2 to preview my post to check everything is where it should be and that it reads well enough.

Octopress posts are markdown files themselves, but they contain a section of YAML at the start that contains details like the title of the post, the published date and any categories I want the post to be assigned to. Marked 2 has a preference for striping YAML from your document before it converts it for you so that you can view the content of your post without the messy distraction of YAML.

There are tons of other peferences as well covering window behaviour, choice of Markdown library, style settings and even settings to adjust how the document will print.

Use Your Favourite Editor

I'm a Sublime Text user for both writing code and blog posts. I've tried a few other editors, but with shortcut keys that I have memorised, it's hard to use anything else but Sublime Text. Marked 2 is great in that if I am viewing a file, it has a shortcut key that you can change to switch to your preferred text editor, where it will open up your document, ready for you to edit it.

On the flip side there is also a plugin for Sublime Text that will preview your document in Marked 2.

Easy Publishing

Marked 2 also supports a number of file types that you can export too. These are the most common document formats like PDF, DOC and ODT. As nice as Markdown is to write with, sending a Markdown document to someone who isn't familiar with the markup might struggle a bit. So it's nice to have the choice to export your document to a more friendly file type for everyone.

I've yet to try this myself but Marked 2 also includes support for the Leanpub publishing platform. lets you publish your document to Leanpub. This is great as it makes the journey to self-publication that little bit easier.

A Power Tool

Marked 2 isn't just a Markdown viewer, it's a Markdown viewer on steroids. A power tool. This is why I have Marked 2 running all day long on my second screen.

I've been continually tweaking the preferences as I go along to get the right environment for me to write in. It also doubles up as a document viewer for some lookup documents that I use on a daily basis.

Marked 2 offers so much more than just being a viewer and for me it's been money well spent on a product that gets used on a daily basis.

How to Run Cheaters with Pow

Brett Terpstra released a new version of his Cheaters cheat sheet system. Brett recommends two options to get this running. The first is using the Automator application in OSX and the second is using the Fluid app.

The one change I wanted to make was to make Cheaters run as a local Rack web application with Pow rather than from the already installed Apache instance. It's easy to do.

1. Create a Gemfile

Create a Gemfile within the root of the Cheaters source and include the Rack gem:

gem 'rack'

Jump back to the command line and run the bundle command to install this gem.

2. Create the Rack App

Next create the Rack file that will serve all the pages and assets from the Cheaters source. I've used this same code for lots of Rack applications.

require 'rack'

$stdout.sync = true

use Rack::Static,
  :urls => ["/css", "/js", "/images", "/cheatsheets"],
  :root => "."

run lambda { |env|
[
  200,
  {
    'Content-Type'  => 'text/html',
    'Cache-Control' => 'public, max-age=86400'
  },
  File.open('index.html', File::RDONLY)
]}

Put this in the root of the Cheaters source.

3. Symlink Cheaters

Now I'm assuming that you have Pow installed already. With Pow installed, change to the pow directory and symlink your Cheaters directory:

cd ~/.pow && ln -s /path/to/cheaters

I also use an app called Anvil that gives me access to my running web applications in Pow from the menubar. This can also create the symlink for you if the terminal is too scary.

Done!

That's it. Now if you visit [cheaters.dev](http://cheaters.dev), you'll find the Cheaters page. The reason I prefer this is that I already have a number of application running locally that I like to use, so running it from the browser is fine with me.

Solutions with Code

As a freelance developer working for a client, I don't have the luxury of daily stand ups to get the outline for a new feature I have to work on. I also don't have the benefit of having another programmer sitting beside me or even in a remote location to talk about the feature further in a pair programming session. When you're on your own, you need to find other ways to kickstart the development process of envisioning a feature of a system.

I generally have a rough idea of the feature, but sometimes even getting a rough idea can be difficult. It pays to talk to the customer or even the product owner to get all the details you need, but sometimes even after that you might still be unsure. Where I usually falter is that I understand the feature but seeing it in code or as a set of objects can be difficult.

One technique I've been using is writing the sample code of how I would eventually interact with the feature once it is shipped. This isn't production code or code that's even going to be run. It's just me hammering out sample code on text file. The benefit of this technique is that I can identify simple objects such as classes and properties without too much code. It also lets me see if I'm starting to build dependencies on other objects. It might not be viewed as TDD friendly, but when you're working on your own, anything that helps should be considered.

The code itself consists of creating a couple of instance objects and setting the attributes needed for each one until I've satisfied the need to have a set of objects that could be read from a database. There's no fancy Rails code here, it's just plain old Ruby. I don't even bother to refactor it at all as I'm just looking to get an initial design from the code. Then I can start TDD'ing the feature with the my new found understanding.

I've no idea if this technique has a name or not, but it works well for me when I have problems envisioning the design for a feature.

Time to Grow?

I always keep my ear to the ground when it comes to local businesses starting and closing in my local town. You never when an opportunity might arise.

A couple of months ago I noticed that a hairsdessers, whom I used to be a customer of and got to know the owners well, had closed down. This morning I found out that the owners (a married couple) were still working locally, but had decided to rent chairs in another local hairdressers so that they could continue to serve the customers that they had built up in their own business.

Being a business owner with staff is a huge responsibility and one that isn't easy to depart from. Once your employing staff and delegating duties to them, it's your responsibility to steer the business in the best possible direction, whilst also ensuring that your staff contribute and are paid well for their duties.

I've been in enough small businesses over the years to see this first hand. Sometimes the business owner does a good job and sometimes they don't. The majority of the time though, I've seen the bad side of this. The business as an entity isn't doing well enough to support it's staff which usually results in the laying off of some or all of those staff.

For whatever reasons you have as a business owner for closing down your business, it can't be an easy decision to make when there is staff involved. If you've built up a loyal army of staff over the years that can be depended upon, how do explain that they no longer have a job when your business closes?

As much as I would love to expand my freelance business over the coming years into a registered company with staff, I keep having to remind myself that there's a huge responsibility to employing staff and ensuring that there is enough there for people to be paid. I've been on the receiving end of three redundancies. I'd rather not be the guy on the other side of the table giving them out.

For the moment I'm happy to plod on as a single freelance developer providing a service and value to my clients. I only have myself and my family to look after and that's enough for me.

Apps - Free Isn't Free Anymore

Well on the app stores at least.

It's been bugging me for a while now, but you may have noticed the number of games on Apple's App Store that are free. There's quite a lot of them actually, but some of them are not in fact free despite their price.

There's a growing trend now of games that are utilising the In-App Purchases (or IAPs from here on in) ability in apps to subsidise the fact that the game is free to install. It's a freemium model really. Give the game away and then charge for extras. I first noticed it on the game Kindgom Rush, but this game can easily be completed without the need to purchase any of the additional characters that the game offers.

In other games though, the list of IAPs is there as an assist to players to finish a level or the game. Candy Crush Saga and Bad Piggies are two such examples of games in the App Store that employ this model. The purchases are enough to make think they're a one off, but I suspect that this is not the case with many people. Considering that King's (creators of Candy Crush Saga) monthly revenue was allegedly once reported to be half a million dollars a day, it's easy to see how those little purchases can add up given how popular the game is.

Here's the problem I have with IAPs.

I have two sons, a one year old who is too young to talk, never mind understand the value of money, and one seven year old, whose life revolves around technology.

I limit my oldest to the number of games he can have on his iPad and the amount of time he spends playing them. Nothing wrong with that. What's troubling though is the amount of times he has asked for IAPs for games from me. I'll let him make IAPs for the games he really likes but not on a frequent basis. Also, all his IAPs come out his own pocket money. It seems that a growing number of games are adopting an IAP purchase to unlock new features or get new addons. To an adult it's easy to say no. To a kid it's not so easy.

Like all trends though, today's hot new game is always going to end up the next day's old news. Which means that the money you can spend on IAPs for games, can be wasted if that game is no longer played with. It's not a major problem in our house now, as our oldest is extremely limited to the IAPs he can make. How annoying would it be though to spend so much money on a game for it to be deleted and never played again?

Mobile game developers have no obligation to only producing one-cost games, but it would be nice to see some of these game developers move away from the IAP model.

I grew up in an era where the computer game was a one off cost. You paid for the game and then you played it as often as you like. Console games are getting more and more expensive, but they are getting better and better, and most games offer hours of entertainment for that one off cost. It's an investment, but one that I think works very well, especially when you have kids that love gaming.

Thankfully companies producing games for the Microsoft and Sony games consoles are still following this model for the next generation of console games, but how long before we start seeing even these games adopting an IAP model?

I'm not sure that will happen to the level it's happening in mobile gaming, but I know one thing. I'm more wary now of those 'free' games that are topping the charts and proving to be hits with the kids. Even though they're listed as free, I know that for most of them, they're not really free.

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.

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.

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.

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.

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.

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.

Next Year's Motto

It's the start of January and I'm already giving my motto for next year some thought. It's simply a theme that you keep true to for the next year of your life. It's a simple core goal to stick to for a year. I only started this when I was 35 so my mottos list is short for the moment.

I got the idea from Buster Benson, who does his mottos from his birthday, but I prefer the idea of starting it at the start of the year. My birthday is in February anyway, so it's not too far off.

Last year's motto was Be Independent:

My way of defining career independence is to be an independent developer. Simple. I want to ultimately pick and choose the work that I want to do in the future. I want to be independent of another company’s goals and objectives and work towards my goals.

It didn't go completely to plan on all aspects of being independent, but the key success from this was that I am steadily becoming financially independent. With my freelance work, I'm forced to consider budgets carefully, look for ways of being more productive with my time and of course accumulating a safety cushion should I get stuck for work. This mostly went well apart from building products to supplement my income.

So what about next year then? Well, one thing from this year was definitely clear. I budgeted my time poorly when it came to side projects and products. A list of ideas is still sitting on the sideline. I worked a lot this year, but I didn't take anytime to develop anything for myself.

So with this in mind, I'm thinking of setting the motto for next year as Smarter Budgeting.

This isn't just a time thing for completing products. I want to budget time for not just products, but also cycling, reading and of course spending time with my family. I just got my mountain bike back from our local bike shop and I'm itching to get back out on the trails, especially in the winter when the braes at the back of my house get a slight dusting of snow.

Over the next couple of weeks, some thought will be given to how I work towards this motto and some daily changes that will need to be made.

I'll be honest, I'm not a completely confident person. For those that know me personally this will come as no surprise. Right from when I was a kid, I struggled with answering questions in class, school debates and generally making my voice heard. Even after over 15 years of education and many different job and roles in the workplace, those confidence jitters still get to me. When it comes to public speaking, I avoid it entirely if I can.

It doesn't get any easier when I'm writing either. As I type this, my hand is itching to select all I've written and delete it.

When I am working on a post to publish, I just don't have the courage of my convictions. I've tried in the past numerous times to put my thoughts together on a number of topics but in the end I've just deleted the post and looked for something else to write.

Half the battle I face is actually articulating my thoughts into words, written or spoken, so that they present an argument or reasoning that others will not react with offence. The other half of the battle is following up those words with replies or explanations to others. If you're going to voice your opinion on a topic then you need to be able to back that opinion up and explain it.

It's only in the last couple of years that I've managed to start making progress on building up my confidence when it comes to public speaking. My stint in an agile development team done wonders for my confidence. I found that daily stand ups and retrospectives were great opportunities to voice my thoughts within a group. I'm still not there when it comes to public speaking, but I'm gradually chipping away at it and building up my confidence.

Am I ready to do a talk at a conference? Hell no.

A local meet up or user group? Maybe.

As for the writing side of voicing my thoughts, it's definitely easier than speaking. I do find it much easier to just write. Whether those words get published is down to me and whether I feel confident publishing those words. I'm happy for the moment to let just a trickle of my writing find its way here on my blog. It might only be one or two posts a month that test my confidence but with each one I'm raising the bar slightly.

Sharpening the Saw: Shortcut Keys

I managed to catch up on my queue of podcasts this morning and one of the topics on discussion on the Ruby rogues podcast was that of sharpening your saw. I know the term from Stephen Covey's 7 Habits of Highly Effective People. What it means is the continual act of making yourself better but it can also apply to other things like the tools you use.

It made me realise that of all the applications I have I have yet to learn the basic shortcut keys that make these applications easy to access from anywhere. The first thing I did after listening to the podcast was create a note in Evernote with a list of all the shortcut keys for the applications that I use.

Over the next week I'm going to familiarise myself with a few shortcut keys at a time. This little habit is only saving a few seconds at a time, but over the course of a year, all those little seconds and keystrokes add up. I'm not trying to steal time, I'm just trying to make more efficient use of my time.

For programmers, there's two tools that they will use everyday. A terminal and a text editor. For writers it might be a text editor and a knowledge management tool like Evernote. What I'm trying to say is that for everyone there's a number of tools that you will use everyday. What about those tools in the background, the ones that you will use everyday, but do the little tasks in the background?

Here's a complete list of the background tools that I use daily:

  • 1Password - The best password manager out there and also means that I don't need to remember my passwords anymore.
  • Alfred 2 - Application launcher and automator. Used daily, Alfred is my first point of interaction to all my applications and their actions. New blog posts, searching, programming docs, colour codes and more are all taken care of by Alfred.
  • Anvil - As a Rails developer, it's great to be able to manage applications I'm running locally. I use POW to get my development applications running locally, but Anvil provides a nice interface on top of this from the menu bar.
  • Broom - Disk space manager. Great for identifying large files and folders.
  • Divvy - When it comes to my desktop setup, I'm very set in my ways. I have my laptop screen split into two panes. Small area apps like Kiwi, occupy the left pane, about 30% of the screen in terms of width, and other apps sit on the right pane. I've had it set up this way for months. Using Divvy makes this super easy as I have keyboard shortcuts for putting windows in these panes as well as 50/50 splits and using the full screen.
  • Fantastical - Fantastical is my gateway to my calendar. Using a shortcut key, I can add meetings and appointments to my calendar on any day without having to reach for the mouse.
  • f.lux - Keeps my screen easy to read depending on the time of day and my location. Great for early morning coding.
  • PopClip - I'm a bit of a newcomer when it comes to PopClip, but having that popup when you copy and paste stuff is such a timesaver. When you select text PopClip appears with a number of actions depending on the application you are using. I've only added a couple of custom actions so far, but it's already proving to be very useful.
  • RSS Notifier - I already use Feedbin for my RSS subscriptions, but RSS Notifier takes a special set of RSS feeds that are related to my job. I use it to get get updates on hosting platforms, service levels and outages. Having this run with notifications means that I can see if any of my clients will have any technical problems with the hosting of their sites and applications.

That's it. All the tools that I view as background tools that support my day to day working. These apps are always lurking in the background doing something to help make my day easier. Apps like this usually have a single purpose that they do really well. They might have other features as well, but as long as they do their primary function well, I'll keep using them.

Limiting Your Social Networks

Many of you will know through my posts that I'm a big App.net fan. It's my goto place when I want to drop in on conversations, strike up news ones with others and also just as a place to post what I am doing. It's also the one public social network that I participate in.

I've never been interested in creating a Facebook account as I simply seeing as being too much of an overhead to maintain. I also deleted my Twitter account this year. It was coincidental that the timing of this action happened at the same time as Twitter were enforcing new rules on the use of their API. I just felt that I wasn't getting anything back from Twitter in terms of value.

Since switching to a single public social network, I've noticed a number of positive things that have occurred as a result of my limiting action.

No more drowning in micro-information

The first thing I immediately noticed was that I was no longer constantly checking my Twitter timeline. Looking back I wonder now why I even had an account there in the first place. It's a social network for micro-updates that only offers limited information in each post. I did find it interesting hearing what other people were working on, but Twitter's post limit of 140 characters seriously limits the amount of context you can put on a post.

Less apps and services to use

With just one social network to my name, I have less apps on all my devices. It's a minor thing but having less apps on my devices means less time updating them, searching for new ones and of course less time checking them. I also work with a 'one in, one out rule'. As much as possible I will try and keep the number of products and services I use down to a minimum. That means that more often than not, I will replace older apps with new apps rather than running two at the same time.

Less of a digital footprint

I like keeping a small digital footprint. Nothing to do with trying to stay under the radar in terms of the government spying on you, but more to do with my own data and it's safety. As soon as I stop using a product or service I try and delete the account I had with that product or service. I do this because I don't want my login details lying around on another companies database when it doesn't need to.

It's not for everyone

Limiting yourself isn't for everyone, but it was amazing to see how little I depended on Twitter after just a couple of weeks of deleting my account. I used to think of social networks as places to find more information on topics, but the truth is that I find everything I need in the form of blogs, newsletters and podcasts.

I now see social networks as more of a place for conversation. Fortunately App.net does this aspect of interaction very well and I'm happy to remain a paying subscriber to it.

My Seven Essential Daily Tools

I'm always reviewing the tools I'm using on a daily basis, and last week I wondered what tools I was using that I used the most on a daily basis. This wasn't compiled from a list of measured interactions with all my tools, but simply an informed guess at the tools that I use daily.

Safari

The web browser. Every web developers main application for running and testing their applications. For me as well though, it's a window to the Internet. Having previously ditched Chrome, I used Firefox for about six months. As web browsers go I couldn't complain about it's speed, features and developer tools.

I tried Safari for a week just as an experiment about a month ago and found that there was nothing in Safari I couldn't do in Firefox. Since then it's been Safari all the way.

One good thing to come out of it was that I also dropped my Instapaper account in favour of Safari's built in reading list that also syncs to my iPhone. Not only am I always looking for new services to use and try, I also like to keep the number of applications and services I'm using down to a minimum. By using Safari I was able to delete Firefox and also my Instapaper account.

Mail

Apple's Mail client isn't everyone's cup of tea, but the way I see it is that if it does everything for me that I need it to do then why not? It supports multiple accounts, interacts with my contacts list and works well with FastMail.

Trello

Project management tools are a rare thing for web developers that practice agile methods like stand ups. Agile methodologies like Extreme Programming and Kanban will rely on index cards and boards as the main point of interaction for a team with a project. Until Trello was launched, applications that tried to replicate this in code didn't always get it right.

Working on my own means that communicating with others on the project remotely is more important than practices such as stand ups. Every day I enjoy using Trello for the needs of my clients and for the needs of my own projects. It's flexible layout means that it can be tailored to lots of different workflows.

Evernote

I've only been using Evernote for a week now but it has become a growing part of my day to day work flow. With a tool like this I now have a place that I can put information that I might need at a later date. I've found so many uses for it in the last few days.

First there's interaction. There's just so many ways of interacting with Evernote such as the web clipper, by email and of course there are a number of other apps in the Evernote marketplace that make getting information you have from one app to Evernote easy.

Then there's accessibility. With apps for the desktop, phone and tablet, I can access my Evernote stuff from anywhere. My iPad has now become more of a day to day writing tool again thanks to the access I have to Evernote on it.

Evernote fills the gap of a knowledge management tool for me nicely now. All the information I need is now in one place and easy to access and search.

iTerm 2

iTerm2 is my terminal of choice. Having used it for a few years now, I'm familiar with most of the keyboard shortcuts and it just works.

Sublime Text

Sublime Text has worked well for me over the last few years. I'm still discovering some of the keyboard shortcuts and I'm have to admit that I am not using all of it's features on a day to day basis, but for writing code it serves me well.

Notebook

A list of daily tools wouldn't be complete without a notebook or two. I have two on the go at the moment.

The first notebook was initially used for tracking client work, but this has evolved into a task journal for all my work using the dash plus system. Where as Trello is used for mostly tracking progress on projects, my task journal is for tasks that come from features in Trello, ad-hoc client tasks or tasks from my own master list.

The second notebook is mostly for the initial capture of ideas, thoughts, posts and sketches. I use it maybe once or twice a week, but it's always sitting on my desk within easy reach. When I'm tired of sitting at my desk, I'll move to a more comfortable chair and review my capture notebook or simply do some writing straight into it.

As brilliant as technology is, sometimes you can think better with just pen and paper.

Settling for Defaults

One thing that's clear from my list is that if there's a default tool on my MacBook that is adequate for the job then I will use it. I dislike having my MacBook cluttered with different tools and applications that serve the same purpose.

The one exception here is my choice of terminal. Apple's default application Terminal still doesn't allow vertical split panes whereas iTerm2 does. A small feature, but given that I always have two panes open side by side, it makes sense to use iTerm2 over Terminal.

Skipping the Support Apps

A few of might be wondering about apps such as Alfred, PopClip or even Fantastical. Well, while I use these as well on a daily basis, I tend to view them as support applications to my seven above. They're still bloody useful tools to have but sitting in the background there's always open and frequently support the seven tools that I have listed above.

There we have it, my seven essential daily tools. I put forth the question to you now. What's your seven essential daily tools and how do they make you work better?

Trello: A Restrospective

For the last two weeks I've been using Trello instead of Taskpaper for managing projects like Journalong. It's really an experiment to see if I can get more things done with a visual system. Previously I was using lists in Taskpaper. It worked to an extent but anything that was at the bottom of list would frequently be forgotten.

So what is Trello?

Trello is a generic organisation and collaboration tool. Yes it sounds like a vague description, but Trello isn't tied to any one particular workflow. Basically Trello is a simple workflow and list manager.

A Trello board consists of several lists like so:

An example of a Trello board

You create cards that you move through the lists from left to right. The lists themselves can be called anything you want and can be modelled after any iterative workflow that you can think of.

A list on Trello

The cards are used to represent individual items of work. It could be a task, a feature for a product, an article you want to write or even part of your wild scheme to take over the world.

A card in Trello

The cards themselves contain a title and a description but can also contain a set of tasks, attachments and even comments from yourself and other users collaborating on the same board.

How I'm using Trello

I'm using Trello in two ways at the moment.

Primarily I am using it to get my finger out on moving some development projects along. Journalong was first to get the Trello treatment and work on it as picked up again since I started using it. I use it mainly to mimick the Kanban way of software development as you can see from the board below:

My Journalong Trello board

As well as using Trello as a way of managing software projects, I'm also using Trello to manage my blog. In particular, my weekday posts to the blog and the writing process involved for each post.

My writing Trello board

I have a backlog of ideas that I want to write about. It ranges from software development to personal reflective pieces. At the weekend I pick five ideas from the backlog for the coming week and assign each of them a day of the week. Then I stick them in the drafts column and start writing each one.

As they are completed they get moved on to editing and then they are ready to be published. While the Journalong board is fine, I might change the process for my blog posts. I don't want to get too bogged down in different steps for each post. I tend to write, edit and queues posts for my blog in the one sitting.

Great device support

What makes Trello great however is the support they have for different devices. It's one of the few applications that I have installed on by my iPad and iPhone. Initially I was hesitant of how Trello was going to be implemented in iOS. However since using it for the last few weeks, It's steadily becoming a favourite in my day to day apps category.

Trello on iOS

The iPhone UI is particularly nice as it lets you zoom in on a list within a board so that you can see all the cards for that list. Everything that you have available in the web UI is available here as well. Checklists, labels, attachment and comments are all there.

It's free!

One thing that you thought I may have skipped over is that Trello is a free for anyone to use. I had reservations about this until it was pointed out to me that the makers of Trello, Fog Creek Software, wanted Trello to be a free product from the start.

There is a business plan that allows organisations to use Google Apps for authentication and to get all their users across without any pain. There is also paid plan called Trello Gold that adds a number of nice touches like changeable board backgrounds and bigger file uploads. The free version of Trello is ideal for most people.

A great visual tool

I've enjoyed using Trello over the last few weeks and I've decided to stick with it for managing projects and my writing. Whether I'll use it for other things like sales leads, invoicing or anything else I can think of will be decided as and when I think I need something beyond a basic list to manage them.

I love the visual side of using a board. You get a clearer picture of where everything is and it means that you instantly know what you should be picking up next. Coming from a background of using mind mapping for a few years, I love systems that use visualisation to convey a message or intent. The nice thing about this tool is that it's visual, portable and adaptable to just about any process that you can think of. It isn't the silver bullet to everything, but if you're having problems getting projects organized and trying to determine where the bottlenecks are then Trello just might be worth checking out.

This post contains a referral link for Trello for which I receive a free month of their paid plan, Trello Gold, for each sign up. If you don't want to use the referral code, you can use this link to checkout Trello for yourself.

My Pyramid of Products and Services

Eric Davis' book on long term contracts, recommends making long term contracts the top tier of your services pyramid. "What's a service pyramid?", I hear you say. Well, basically your pyramid comprises of three tiers of products and services. Your affordable products and services for the masses are on the bottom tier, products and services for specific markets go in the middle tier with your premium service at the top tier. It got me thinking about the tiers in my pyramid of services and products. Do I have services and products in each one?

The Top Tier

Currently the only premium service I offer in the top tier is myself as a Ruby on Rails developer. This fits in with Eric's idea that only your long term contracts should reside in here and that's currently what I have in the top tier. I have a couple of long term contracts for providing myself as a development resource to teams using Ruby on Rails.

The Middle Tier

There's nothing in my middle tier, but that's okay. My top tier provides me with nearly all of my income at the moment, but I shouldn't leave this tier empty for too long. As a freelancer I can't be dependent on any one stream of income. Each product or service should be generating some income for me, but at least for the moment I have a good premium service that I can depend on until I get other products and services in place.

The Bottom Tier

At the moment, the only product or service that I have in my bottom tier is Journalong, my free journaling service for Dropbox. I don't have any other products or services here. There's definitely room for another product in here. Something simple and easy to manage. As for services I'm not too sure. I don't currently provide any short term affordable services that others would want. Well at least I haven't been asked.

There's definitely room here for more products and services.

What Next?

What I have taken away from this exercise is that I need to start thinking about other products and services in the middle and bottom tiers of my pyramid. The gaping hole in the middle of my pyramid requires a product or service or even both. It shouldn't cost more than any micro products and services in the bottom tier but should still be cheaper than my rate as a freelance developer.

As for the bottom tier, I am putting more time into Journalong with the goal of turning it around into a profitable micro-product. I've got a few ideas for other products and services in this bottom tier, but I need to be selective about those. There's only room for so much that I can do, and cramming too much into the bottom tier can take my focus away from the middle and top tiers. I will need to keep prioritising things over the next few months if I'm to have something in each tier of my pyramid.

The Best and Worst of Freelancing

When I first started freelancing, I thought I had the perfect job. Setting my own hours, working from home and no tiresome commute. These positives are what many people want from freelancing but there's a downside as well.

The downside

Working alone is hard for a number of reasons, but the main reason is that you are in fact alone. You're no longer part of a team, you're on your own trying to build a career with the resources you have available to you. It's not as dire as it sounds, but there's lots of little things you miss when you're working on your own.

The office banter is gone. I worked in a great team of developers a couple of years ago and I do miss the chatting before the stand up and pairing with other devs through the day. You can be the most connected person on Twitter, but it's no replacement for a face to face chat with people.

Then there's the resource part. Everything is on you, and I mean everything. No only do you have to deliver great work, but you also must communicate clearly with your clients, keep your skills up to date, market yourself and about a thousand other tasks that keeps your business running.

The upside

So you're working alone with big responsibilities on your shoulders, but there's an upside to working this way as well.

Having a balanced work life that doesn't eat into my time with my family is why I enjoy working from home so much. Not only do I no longer commute to and from work, but my hours are also dictated by the client work that I do. It's very rare now I work at night now. I fit all my client work in during the day, which leaves me time at night to do work on my own projects, get some reading done but best of all I actually get to spend time with my family.

The other big positive for me is I get work the way I want to work. I get to choose the hours I want to do. Having the flexibility to fit more in my day means that the weekend is left free for more important things like taking the kids to the park or getting myself out on the bike.

I also get to choose the the tools I want to use. It's very liberating to have this choice and not be confined to working with one tool or framework and be restricted by the equipment you can use. I've had my fair share of programming jobs in the past that wouldn't have been my first choice, but now I'm actually in a role where I'm enjoying what I am doing.

The verdict

I prefer this independent way of working. The positives really do outweigh the negatives for me. It's definitely not as easy or straight forward as I first thought it was going to be, but it is providing me with more opportunities to carve myself the career that I want.

Removing the Digital Deadwood

Programmers have always got old code lying around. Forgotten applications, libraries, ideas and other files and folders. Remnants of days perhaps when ideas were rife and ambitions were high. I have those days as well. I have an idea for something, I mock up a quick test with some code and then most of the time decide that it's not simply worth my time investing in it further. What remains behind is a filing system littered with dead folders and files.

Today I started cleaning up those dead end projects.

I deleted old applications that I'm not hosting anymore, deleted ideas for applications and products that I know are not going to work and also deleted a few repositories from Github account. I cleared out a few forked repositories that I had high ambitions of working on but haven't contributed to them.

From there I then started to remove a few applications from my MacBook Pro. I only deleted a few applications, but better to remove them than to have them sitting idly doing nothing. More deadwood gone.

Then I moved onto the online tools and services I subscribe to and removed a couple of them also. A few more dollars back in my pocket each month and that great feeling of removing yourself from a service or subscription that might distract you with an email each week, but you quickly delete it.

Just like clearing your desk or work environment of deadwood files, folders and other junk on your desk, it's also important to remove the digital deadwood as well. Start with your laptop or tablet and remove the applications you don't use, the old folders and files that are no longer relevant. Once your immediate work environment is clear, move on to your work environment in the cloud and trim those services that you don't use anymore.

Keeping a clean digital environment is just as important as keeping your physical work environment clear. You might just end up saving yourself some money or even getting some space back on your laptop. Even better, you might just have rid yourself of a few unwanted notifications each month.

Am I Doing This TDD Thing Right?

I've been building web applications in Ruby, on a full-time basis, for a couple of years now. During this time I've been exposed to a number of different testing strategies and approaches. Test-Unit, MiniTest, RSpec, Cucumber, Steak and many more. I've used many of these test frameworks to some extent, but despite the many choices I have in this area, I'm still befuddled by the right tools to building a web application in Ruby using test driven or behaviour driven development. The Rails framework has shipped with Test-Unit for years but the most popular testing framework is probably RSpec.

In order to quell my confusion, I thought I would expand on the three approaches that I have used most often in my time using Ruby.

1. The True Agile Approach

Perceived by some as the holy grail of testing, and in some cases with an equally preachy opinion, is the true agile approach. Being part of an agile team with a customer on hand to flesh out user stories, daily stand ups, retrospectives. Just about everything that embraces an agile approach to building software.

In this approach, test driven development and behaviour driven development tools reign supreme. If your approach is TDD, you'll most likely be using RSpec or Test::Unit for testing all aspects of your web application. If your approach is BDD, then it's Cucumber all the way. This is pretty much a no brainer really. With so many hands available for development, it makes sense to always write tests first.

2. The Solo Developer Approach

The true agile approach is fine when you're part of a team, especially when that team advocates pair programming and you have a customer on hand to flesh out user stories. What if you're a developer with your own product or service though? You understand the business domain enough to eschew the behaviour driven development approach but you still want to test your product?

I had this problem with the early iterations of Journalong. I understand the business domain, so is it really necessary to use a BDD approach? Can I simply just switch to a TDD approach with Test::Unit or MiniTest?

I'm still on the fence about this.

3. The Side Project Approach

This is simple, and I embrace this approach 100%. No testing framework or just enough tests to handle the complicated stuff. Hacking on your own ideas is a good time to really explore the frameworks and languages you are doing. Getting these setup correctly with all the proper test frameworks can be a chore though. If it's just an initial idea or throwaway solution you're working on then why bother investing the time in writing tests?

I want to be a good developer and develop solutions that are thoroughly tested but when was the last time you just hacked on a bit of software to try something out? If I know enough of the framework and language to get by then I don't bother writing tests. It might take me an hour to come up with something or half a day, but if that's all it takes then why bother getting all the correct bits in place to test it.

There's definitely a time and place for testing strategies in development, where you're part of a team building a product or building a revenue generating product or service on your own, testing strategies can give us the confidence we need to ship code on a frequent basis.

For my own ideas though I would rather roll my sleeves up and get into the parts of the code I know or even try new things with a part of the language or framework I haven't used. Kind of like code exploring, filling in the blank edges of the map if you like.

Curtis McHale has invited his readers to write about their blogging history, so here's mine.

My initial dip into blogging was about 5 years ago with the then rising star of blogging platforms, Posterous. I started a blog with the great intention of posting at least once a week. What I was going to write about I was unsure which in turn led me to actually posting to my blog very infrequently. A bit of a false start then.

MindMapSwitch

With no fixed topic in mind and a checkered past of a software career with no expert knowledge in any one programming language or framework, I looked back at the other skills and experience I earned from my career. One particular topic jumped out at me. Mind mapping. This was the moment when my mind mapping blog, MindMapSwitch, was born.

I ran the blog on Posterous and kept the blog going with frequent updates in the region of once a week. After 18 months of posts I got to the point where I simply couldn't write anymore about MindMapSwitch. Rather than struggle on with finding new content on a limited topic with a limited audience, I decided to cease writing anymore posts for MindMapSwitch. The blog itself was eventually removed from the Internet with the shutdown of Posterous but I do have a back up of MindMapSwitch's posts.

From that point I moved on to focusing my attention on my own two blogs. I kept a blog for short essay style posts and I kept another blog for link posts. Both were initially hosted on Posterous, but I did move the blogs to Octopress for a short time and then onto Squarespace for a while.

Back to Octopress

At the start of this year I decided to bring the two blogs together and migrate back to using Octopress again. The pull to writing in Markdown and having more control over my blog was what I actually wanted rather than trying to dissect the templating language of another blogging host.

Faced with the start of a career working independently, I wanted my blog to the first thing people would see when they searched for me. At the same time I committed to writing an article every week day. Since doing this I've been steadily churning out content that been increasing my audience on a monthly basis.

Time for the stats

I used Google Analytics for over four years for my blogs, but since deleting my Google account, I've had to move to a different service for collecting my web traffic stats. I settled with Github's Gauges service in April this year. Although I've lost the stats from my Google account, it hasn't been until this year that my traffic stats have started to get really interesting.

Since April I've managed to increase my visitors and page views each month and last month I broke the 1000 page views milestone in a month. I'm also using my stats to spot patterns in popular content that I should consider writing more about. Popular content over the last few months have included articles on productivity, text editors and using Octopress, but by far my most popular post is about switching to Feedbin.

Where to from here?

So where do I go from here? My posting schedule of short essay style posts on the weekdays is working well for me, so I'm not going to change that anytime soon. I also usually post short link posts on a Monday and Friday which I will continue to do. I've got plans to include popular content pages for my blog and also write more technical posts around programming and software development.

I suppose the key thing is that I have found something that works. I'm happy with my posting schedule, my content and my choice of blogging tools.

I'm just another person trying to carve out a niche on the Internet really with their blog. As long as I'm gaining more and more interested readers, I'll keep posting.

Getting to Know Projects in Sublime Text

When I started using Sublime Text 2, I didn't use Sublime's projects feature. This year though, I've started to really get to know my preferred text editor and since then I now save all my code as a project in Sublime. It really does have some great advantages and with a little time it can make working in Sublime a better experience for you.

Sublime's projects are typical of projects in other text editors and IDE's. You open the folder that contains your source code with Sublime and then you can save that source code as a project.

When you save your code as a project you end up with two files. The first is the project file which contains references to folders for your project, project based settings and build commands for your project. The second file is the workspace. This is simply a file that tracks what layout you're currently using and what files you have open in each pane. Using the workspace file means that you can switch to another project, do some work and then switchback to your original project knowing that the layout and files you had open will be restored back to the state you left them in. Handy.

Opening Projects

Let's start with opening projects. You can open a project from the command line by using the project switch from Sublime's executable.

>> subl --project deathstar.sublime-project

Nice, but a tad too much to type. Rather than keying this out when I need to open Sublime, I prefer to alias the opening of a project file into a command that I can remember.

>> sds

Typing these three letters into my terminal to open a project is much easier than trying to remember where the project is and the correct switch for opening a project in Sublime. Now that we have our project open we can start tweaking the project file itself to make suit our needs.

There are three sections to the project file:

  1. Folders - You can define a single location for your project or multiple folders that make up a project. This also include filters on files and folders you might want to apply to each folder in this section.
  2. Settings - The settings in the editor can be changed on a project basis. If a particular language for your project requires different settings, e.g. tab size, you can define these here and the changes will take affect when you open the project.
  3. Build Systems - I tend not to use this, but you can keep a number of different terminal commands here that you can tell Sublime to execute without having to switch to the terminal.

Using Folders

Let's take a look at the most important section which is folders. Although this section is only small it can make a big difference to the way you work with your project and with Sublime.

The project file is just JSON and is fairly easy to follow even if you don't have that much experience with JSON.

{
  "folders":
  [
    {
      "path": "/Users/darthvader/code/deathstar-reactor"
    }
  ]
}

The path setting points to the folder that contains the files for your project. Most of the time you might just have one instance of this in your project file, but Sublime does allow you to have more than one folder in your project file.

{
  "folders":
  [
    {
      "path": "/Users/darthvader/code/deathstar-reactor"
    },
    {
      "path": "/Users/darthvader/code/deathstar-superlaser"
    }
  ]
}

I've been using multiple folders for a couple of projects now. I'm rewriting an application just now that uses multiple folders. For that project I included the old source code and the new source code in the same project so that I can refer back to the old code to lookup any old code.

Which leads us nicely onto names. Having multiple folders in your project can be confusing, especially when projects might have similar folder names or even the same name. To get round this, you can also define a name for each path in your project that will appear in the sidebar. This makes navigating code in your sidebar much easier.

{
  "folders":
  [
    {
      "name": "DeathStar - New & Improved Reactor",
      "path": "/Users/darthvader/code/deathstar-reactor"
    },
    {
      "name": "DeathStar - Superlaser x10",
      "path": "/Users/darthvader/code/deathstar-superlaser"
    }
  ]
}

Perhaps the most useful feature of the projects file though is the ability to exclude files and folders from your project. You are not going to need to see all the files and folders in Sublime when you are coding, so these filters are a great for excluding logs, temp files and other automatically generated files that are not typically needed in Sublime.

Excluding files can be done like this:

{
  "folders":
  [
    {
      "name": "DeathStar - New & Improved Reactor",
      "path": "/Users/darthvader/code/deathstar-reactor",
      "file_exclude_patterns": [
        "*.log",
        "*.pid",
        "*.tmp"
      ]
    }
  ]
}

And excluding folders can be done like this:

{
  "folders":
  [
    {
      "name": "DeathStar - New & Improved Reactor",
      "path": "/Users/darthvader/code/deathstar-reactor",
      "folder_exclude_patterns": [
        "tmp",
        "log",
        "solr"
      ]
    }
  ]
}

Switching Projects

Now that we have our project file setup we can get on with using it.

Because I now have a projects file for each project I work on in Sublime, I find it much easier now to simply switch to the project I need to work on, do the work, and then switch to another project. Switching between projects is as easy as Cmd+Ctrl+P if you're working on a Mac or Ctrl+Alt+P if you're working in Windows or Linux. This brings up a list of projects that Sublime nows about and lets you switch projects without leaving the application or returning to the terminal.

The benefit of this is that I only have one window open for Sublime and I can stay focused on the code that I am writing for that particular project. Having multiple projects open is distracting to me and puts me off my work.

I'm not currently using the settings or build systems for a project, but I am looking into running tests from within Sublime and adding these to my project files as build systems.

Getting to know how your tools work and making them work better for you is the key to getting the most out of them. Investing a bit of time in organising your code with Sublime's project files make organsing and working with even multiple folder projects a breeze.

Say Hello to Linkalong

I mentioned previously that I was interested in building a replacement bookmarking application for my bookmark collection on Pinboard. I wanted something a little more than just lists of bookmarks, I wanted more information when viewing an individual bookmark. Here's some things I wanted to see:

  • What else have I bookmarked from this site?
  • What else have I bookmarked with similar tags?
  • What did I bookmark before and after this?

In the last few weeks, I've been putting together my own private bookmarking application. So far I have enough functionality that I can use it on a day to day basis and it also includes some end points so that I can integrate it with other apps and services. So without further ado, here's a sneak peak of the sections that make up a bookmark page in my private bookmarking application, Linkalong.

Big title

There's no getting away from the title. It's big and bold. Lately I have been building web sites and applications with bigger text in them. A lot of websites have very small text which I am finding increasingly difficult to read. For this bookmarking application I wanted a big and bold title.

Markdown based notes


I love writing notes in Markdown. Even if my notes in my notebook sometimes have the Markdown markup in them. Crazy, right? Markdown's markup is just second nature now when I am writing. It makes sense then for the notes for my bookmarks to be written in Markdown and rendered as HTML.

Bookmarks from the same site

When I used Pinboard, I had tags for bookmarks from the same site. It allowed me to view all bookmarks from the same site. Although it would be easy to do with tags in my own application, I wanted to list bookmarks from the same site without having to tag all relevant bookmarks with the same tag.

Bookmarks with the same tags

Just like seeing bookmarks from the same site, I wanted to see bookmarks with similar tags.

Nearby bookmarks

Finally I wanted to see the bookmarks that I saved before and after this one. So at the bottom of the page I added links to those respective bookmarks.

Building Linkalong has been fun and it's definitely by no means finished. It's served two purposes for me. It's my replacement for Pinboard and it is a place where I can try out new things with an application that I use everyday. If you're looking for the whole page, you can view a screenshot of that here.

Thanks to Patrick Rhone for his initial indirect nudge to building this.

Switching to Trello for Project Management

I'm halfway through Curtis McHale's book on turning your freelance career into a viable business and one thing that has become clear through reading it is my lack of progress on products and projects. Given that I only use a single list for everything, sometimes projects and ideas get skipped at the bottom of the list. It's the out of sight, out of mind thing. If I'm not reminded of something on a regular basis, I usually forget about it.

In order to make better progress, I'm going to start using Trello for managing projects and future products. I'll still stick a high level task on my master list relating to the project, but all the details for it will reside in Trello.

The reason I picked Trello for this was my familiarity with Kanban boards and some experience I picked up working in an agile team a couple of years ago. Basically the idea of Trello is that you move cards (or tasks) across the board from left to right until the card is complete. In my case my this will be features, bugs, marketing and admin tasks.

Cards move through the following lanes that are typical of Kanban boards:

  • Backlog - All cards start here. Cards are prioritised on a weekly basis with the next card to be done located at the top.
  • Analysis - We do some background work on the card. What does it involve?
  • Development - Let's implement this thing with some nice tests and code.
  • Testing - We test it out in a secure environment.
  • Deployed - Once it's tested and ready, we ship the code for the rest of the world.

Moving cards across the board is a great way to see progress being made, and also with work-in-progress limits, I can stay focused on one or two tasks at a time.

Also I'm currently using Trello with a couple of clients for project management, so the switch from their projects to my own when things are quiet is easy to do and I'll already be familiar with the Trello environment. Seamlessly moving from client work to my own work is important. I don't want to have to adjust too much to a different workflow.

My grass roots approach to work still stands with just a master list for capturing everything and scheduling actions in my calendar. I'll capture a high level description of the project in my master list and defer the details down to cards on the Trello board. Any work I do will be blocked off in my calendar as just "Project X Work" and then when it comes to actually doing that work, I can pick up where I left off on the Trello board. When time runs out, I can leave a note on the card where I left off and move on without losing my place.

It all sounds well and good in theory, but putting it into practice over the next few weeks might not yield the positive results I'm hoping for. Still, I've got to give a try though, right?

Last week I found myself once again buried under a pile of work and projects that I wanted to do. Faced with another week of not making any progress I decided to step away from the blog for a week and focus on resolving some of these commitments. Here's what happened:

Client work

My only source of income at the moment, so it's easily the priority here. I need to continue with my client work. It gives me more and more experience with clients and Rails and is the foundation of my career at the moment. I'm hoping to build on this foundation with additional income revenues next year.

Journalong re-write

Most developers object to re-writes of systems and rightly so, it can be a costly process in terms of time and cost. In this case though I wanted the to do the re-write regardless of the cost, I wanted to start building on a product with a development framework that lets me implement new features fast and easily.

Sinatra is a great little framework for building web applications and I enjoyed building Journalong with it, but I wanted something more familiar. Since most of my client work is using Ruby on Rails, that's where most of my knowledge is. In order to make maintenance of Journalong easier in the long run, I've opted to take the hit now and re-write it as a Rails application.

The re-write is almost complete and I'm at the last stages of development. With other projects shelved or completed last week, I'm now free to work on this for the rest of the month and finish it.

Private bookmarking application

When Rails 4 came out I was keen to create a small application that would give me the chance to try out Rails 4 and give me a code base that I can use to experiment with the new features and idioms. It needed to be something private and simple to get me started. Intrigued by a screenshot of a fellow App.net user's private bookmarking application, I started to build my own bookmarking application using Rails 4.

This is was a the one thing that I wanted to actually work on last week and by Wednesday I had something up and running that would work. For the rest of the week, I added a couple of features that would let me bookmark by different means from applications like Instapaper and Feedbin. With these complete at the weekend I now have a Rails 4 application that I can play with but also gain value from.

Trialing DigitalOcean

A couple of weeks ago I wrote about considering alternatives to Heroku. I did look about for alternative hosting providers for my blog and settled on trying out DigitalOcean.

The truth is though that the DigitalOcean box was left running for almost two weeks before I got round to doing anything with it. Moving my blog wasn't going to make me any better off in terms of income or knowledge. In the end I've decided that Heroku is enough for my hosting needs for the moment and I've killed the idea of moving my blog.

New product prototypes

I had plans to build two products this year, but I'm shelving this until next year. I underestimated how much work I would have this year as a freelancer. While I am welcome to be kept busy with client work, it does come at a cost. I only have so much time for other projects and products. I've shelved these for the moment and may re-visit them in 2014.

I learned a lot from last week. Priorities are important when dealing with different projects. Moving my blog, trying out a different PaaS is okay when you have the time, but it's just not that important to me right now. With the decks cleared, I'm looking forward to finishing off the Journalong re-write in the next couple of weeks and shipping it.

Planned Features for Journalong

With Journalong still fresh in my head I thought I would list a few of the features that I am planning to add to Journalong over the next three months. Development on Journalong has been slow over the last year and for that I apologise. It's no way to keep a product or service going and more importantly, making it useful for you. So if you're a user of Journalong, here's a few new goodies that you might like to see introduced to Journalong.

Viewing of journal files

This has been sitting in my list of planned features for months now. The reason for this is that I always said that I wouldn't display a substantial portion of journal entries through the interface. The reason for this was simply down to privacy. The idea was to allow the user to click on the month they wished to view in the sidebar and just display it, or display the current month's journal after you write a journal entry.

However, I have in the past thought this would be a particularly nice feature to have, especially when your journal can be easily converted to HTML to support formatting, links and images.

This feature will be optional and you will have to turn on the appropriate setting for this when it is released. If you don't fancy having your journal being displayed through Journalong, then leave the setting off. I would much rather customers opted in on their own accord than having them to opt out something they don't want or need.

Journal counts for each month

This just came to me last month. It's only a minor thing, but I envisioned a list of the last 12 months of journal entries, grouped by month, showing the number of journal entries per month in the sidebar.

In order to do this Journalong will scan your journal for the number of entries. Again, your journal is your and yours alone. I won't be scanning or retaining any information from your journal while doing this.

Journal from Draft

Draft is awesome, I love writing in Draft. All my blog posts start off in Draft. It has become my go to place to start all my writing. Why not journal from here too then?

I'll be honest, I'm no designer. The user interface to Journalong is simply what I have been able to do on my own with the help of a CSS framework and some JavaScript. I've tried to make it as pleasing an interface to use for people writing to their journals, but others might want to journal from other places.

These other places that I hope to include will start with Draft. The plan is to use Draft's WebHook URL setting so that you can write your journal entries in Draft and automatically save them to your journal.

Late to the Party

While the rest of the family were getting ready this morning, I sat at the edge of my bed and checked out the two websites I quickly look at every morning. The BBC News website and the Hacker News website. After quickly scanning today's headlines I moved on to the Hacker News website. I noticed a submission for Alfred 2 workflows. Mental note made, I must check that out later on.

Once the house was empty, I grabbed a coffee and looked at the Alfred 2 workflows. All good stuff and should help me on a day to day basis, but then I noticed a workflow for something called Dash. Another tab opened and there it was, an offline documentation manager for various languages and frameworks that web developers use. All the documentation I need to do my job without having to go near the browser and I can even work offline if needed, safe in the knowledge that most of the docs I need are accessible.

I could have done with knowing about this months ago. Late to the party again.

It's okay though, because that's what learning and experience is all about. Picking up the tools and knowledge as we go along. Sure we can get a head start by reading someone's tool list and start using all their recommendations but I've yet to read one of these lists where the person has all the tools that I need to use as a web developer. No one person has all the answers.

Okay so you're late to the party with an application or service that would have made your job easier in the past, but the past is gone. Ahead lies the future and with it plenty of chances for you to use that new tool to make your job easier.

You might be late to the party, but it least you made it.

What Is LinkedIn For?

Yesterday I read a blog post about a LinkedIn user who was unhappy with the service and had opted to delete his account. I've been here before as well.

Back in my previous job as an ERP developer, I wasn't actively using my LinkedIn account and the only emails and connections I got were from recruiting agencies.

Why am I on this network and what is it for? I simply couldn't get my head around the right way to use LinkedIn. I spoke to a few people about it and all of the said you must be on LinkedIn, even if it's just to have your details there and you never use it again.

Rather than going with the advice of many I spoke to, I deleted my LinkedIn account.

A couple of years rolled by and I changed jobs twice. It wasn't until the end of last year that I re-created my LinkedIn profile due to the fact that I had been paid off. I wanted to broaden my scope for a job so wide that I was willing to go back on LinkedIn and have my profile searchable by everyone there.

Now that I am grudgingly back on LinkedIn, I'm back to where I was previously, what is LinkedIn for? I understand that as a network, LinkedIn does require some time to be spent on it updating your profile, making new connections, sharing interesting links, taking part in LinkedIn's groups, but I tend to forget about doing this and it's only when I receive a notification that I end up spending five minutes or so reviewing my profile, maybe adding a skill to my profile that I have picked up in the last couple of months.

Faced with the prospect of deleting my LinkedIn account again or just sucking it up and trying to invest some time in my LinkedIn profile, I've decided to opt for the latter. I should be using LinkedIn to market myself as a freelance Rails developer, but how do I go about doing this? Here's one idea I had:

Sharing Rails How To Guides - In order to attract clients to my profile, I should write a number of "how to" guides on using Rails and share these on LinkedIn. These won't be small blog posts, but in fact detailed guides to some aspect of implementing a generic feature in a Rails application that will demonstrate my knowledge of Rails and what I can offer in terms of knowledge as a developer.

I'm still slightly perplexed by LinkedIn as a network and what I can do to make better use of it. Perhaps you have some idea on using LinkedIn effectively? If so, contact me with your thoughts on using LinkedIn. I'd like to get more out of LinkedIn rather than it just sitting there not doing very much.

No Tests Please, I'm Having Fun

I want to be a good developer and develop applications that are thoroughly tested but when was the last time you just hacked on a bit of code to try something out?

There's definitely a time and place for testing your code, whether you're part of a team or building a revenue generating product or service on your own, testing frameworks can give us the confidence we need to ship code on a frequent basis.

If I know enough of the framework and language to get by then I don't bother writing tests. I would rather roll my sleeves up and get into the parts of the code I know or even try new things with a part of the language or framework I haven't used. Just fiddling away with a simple script until I can get it working to validate an idea or a thought can be so rewarding. It might take me an hour to come up with something or half a day, but if that's all it takes then why bother getting all the correct bits in place to test it?

Exploring problems with just the code, trying things out, making it work as I go along. Yes it might take a few attempts to get there, but I always get there in the end. And that's the fun part of programming, getting it to work. I'm all for tested code but every now and again I like to just throw away the tests and just code and have some fun.

Dear Retailers: Customers Vote With Their Feet

A couple of weeks ago me, Jen and the kids headed to our nearest big electrical store, Currys at Braehead Shopping Centre. We were going to look at televisions for the new room we have called 'the den'. It's only a small room, it was previously a garage, so we only required a small television for it. Nothing like those enormous 50" panels you see, just a 32" would cut it.

We arrived at the store and found the televisions department. Mega expensive massive televisions at the front and at the back in the dark are the small and relatively cheap televisions. As we were only looking for a 32", we made a beeline for the back of the department.

We had a price bracket and within that bracket we had narrowed it down to a handful of television sets. Having found the television that we wanted, I tried to grab the attention of one of the store staff. Short of knocking one of them over the head with a set of speakers, I couldn't get assistance from any of the staff in this department.

While doing this I did see the television we were looking for in stock. However I did want to just check a couple of things with the staff before we purchased it. Having no success at all in trying to pin down a member of staff, we decided to cut our losses and left the store, without purchasing the television we liked.

Having stood there for close to 20 minutes, it was clear where the staff's attention was. The big purchases, the big televisions. As we left we passed two groups of staff that had suddenly congregated either side of the front row of big televisions in the department. If someone stopped to inspect one, they would be in an excellent position to help the customer and in turn, attempt to get a big sale. Beyond that row, you were doomed for assistance. It was like tiered customer service. Those that spend more get more service.

Once we got home, I purchased the same television online from another retailer for the same price. I could have bought the television online from Currys, but given the lack of assistance I got from staff, why should they get a sale from me?

Most big retailers have online stores that give you online purchasing of their goods, but when you make a big purchase like this, sometimes a trip to the physical store does help you to see what it is you're actually buying. It's at this point, that the staff should be helpful no matter what price bracket you're buying in.

Even in a world where buying online is an option, some customers will still venture to the stores to check out goods in person before committing to a sale in the store or at the online store of that retailer. During this time, retailers should ensure that customers are served well if they want an in-store sale. However with service like this, it can put off customers not just for that one purchase but for many purchases after that.

There are a couple of appliances in the house that are nearing their time for replacement. Will I be venturing back to Currys to replace these appliances? Highly unlikely.

If customers don't like a store's service, they'll go elsewhere, and not just for that one purchase but many more after that. It's the oldest lesson in the book for retailers but has an added twist for the age of online retailers, customers vote with their feet, both physical and digital.

Scheduling Time for Products

When I first started working independently at the start of the year, I had grand visions of being able to dictate my own time and allow myself more time to write, work on my own ideas and follow them through to products. It was also a chance for me to explore other skills like iOS programming and web design. Just as we're passing into the last quarter of the year though, I'm shocked to see how little actual time I have spent doing this.

Aside from a three week vacation between July and August, I have taken very little time off away from client work. It wasn't that I couldn't, it just never occurred to me actually schedule some time in for myself and tell my clients that I won't be available for a few days.

I guess I initially panicked at the start of the year and thought that money in the bank was the goal, so I simply worked as much as I could in terms of client work to get some money put by. I am now in a much better financial position now, but I still need to top it up slightly to get to my goal of having four months basic salary there to live on should I find myself in a position where I am not working.

I may have mentioned this before on the blog, but I want this post to be the call to action I need to schedule some time for myself. Once I've scheduled some time, I'll write about my plans for this time and see what can I fit in during this time.

Considering an Alternative to Heroku

I've hosted my blog on Heroku for a while now. I also have a number of other apps including Journalong that are also hosted on Heroku. I love the simplicity of deploying apps with a single command and for all the backend maintenance to be taken care of for me.

The extra maintenance comes at a cost though. Unless you're running a really small site or web application, Heroku can quickly get expensive. Extra resources are metered and charged for as well as the number of different addons that you can use with Heroku.

As a result, I've started to consider alternative hosting services for this blog and my private bookmarking application. I don't just want more control over my hosting, I want more space and resources made available to me without having to pay extra for it. Yes, Heroku does provide great addons but these can quickly tally up, especially if you need more database space and services like email or logging.

I did this morning have it narrowed down to either using Linode or Digital Ocean, but the low $5 per month tier from Digital Ocean is very tempting for just running my blog and my bookmarking application. I have spun up a droplet in Digital Ocean for my blog and I'm in the process of moving it over to see what it's like.

I'll report back my findings in a few weeks once I've let the blog settle down and I've had a chance to really explore using Digital Ocean for hosting.

UPDATE: I've since killed the idea of moving my blog to DigitalOcean. I just don't have the time at the moment.

Why Paying For App Upgrades Is Good

The excellent RSS reader client, Reeder received a welcome upgrade this week in the form of the new Reeder 2 app. A new app and a new price. Yes folks, if you paid for Reeder and expected a lifetime of free upgrades then think again. Reeder 2 is a separate app and if you want the pleasure of using it, it will cost you. And that's not a bad thing.

Apps Are Cheap

Let's face it, we've sometimes spent more money on a coffee and a bite to eat than we do on apps. We don't argue over paying a few dollars for a bite to eat to keep us going, but why do some of us complain when an app is priced in the same region? Are you seriously going to quibble over $5 for an app that you are going to use practically every day when you've just dropped the same price on a coffee and a bagel?

I've 9 non-Apple apps on my home screen that I use every day. Two of them are free and the rest are bought apps. I wouldn't hesitate to pay for new app versions of these every year. That could be in the region of $60 per year, but I have subscriptions to single services that are more than the combined total of $60 so right away an upgrade at $5 per year is still better value than many SaaS subscriptions.

Also updates to apps where a new version is released are usually in the space of 18 to 24 months, so even forking out $5 every couple of years isn't going to break the bank.

Support The Developer

Many of these apps are not made by massive software companies but by independent developers working from home or small offices. The apps they write aren't hobbies or projects, they're part of the developer's business model and their income.

No business can sustain itself on free updates. There's simply nothing there to support the future of the developer and the app you use on a daily basis if they provide free updates for an app for life.

These developers make apps so that they can generate income to support themselves and for some of them, their families too. It isn't just a sideline, it's much needed income for them. It's a living.

You Get Value

App updates like this are a good thing as you the customer gets more value. New versions of apps give the developer a chance to start with a clean slate and build a better version of their previous app.

Obviously these new features take time, but they also can't be built on the developer's time without some kind of return. Safe in the knowledge that the developer has a revenue stream from the existing app, they can then focus on spending their time exploring ways of making future versions of their apps better.

So there we go. Paying for your app upgrades is worth it. It's cheap and you're ensuring that the app you gain value from will be around for a long time.

I welcome developers that push new versions of their apps and charge for them. It gives them a chance to take a good thing and make it better. Yes, it might cost a few dollars a year for it, but I see it as money well spent.

My Sublime Text 3 Setup

The text editor. The programmer's most important tool and the center of an ongoing debate that will occupy programmers for years.

I'm not going to debate on the best editor as that would be stupid. Everyone has their own preferences and needs. Vim does offer some nice advantages for those familiar with all the necessary keystrokes, but for my needs I just want a nice, extensible text editor that I am comfortable with. I chose Sublime Text 2 a couple of years ago and more recently I have started using Sublime Text 3 for my day to day coding needs.

The Essentials

Okay they're not really essentials, but if you can't even look at your text editor then you're already hitting your first hurdle. Not only does Sublime Text allow you to change the colour scheme and fonts for the different languages you code in, but it also allows you to change the theme of the editor. A nice touch I think you'll agree.

Theme

I settled on the Flatland theme a few months ago. Its non-gradient look might be a bit bare for some, but I do like this theme. It's very dark and I prefer the dark background in my sidebar and tabs.

It also allows you to customise the height of the folders and files in your sidebar. By default Sublime does have a fair margin around these, but Flatland allows you to specify a smaller size, so that you can fit more into your sidebar.

Colour Scheme

Long before I started using Sublime Text 2, I was already using the Solarized colour scheme. I've stuck with it ever since and even use it as the colour scheme for my terminal. I prefer the dark version as the light version does have too much of a stark contrast with the Flatland theme.

Font

I've tried lots of fonts for programming with, but I find that Monaco, a font shipped with OS X, is best suited to my needs. It looks nice on my MacBook Pro and on my external monitor with just a small difference between the two screens.

Installed Packages

I do have a fair number of packages installed for specific things like Cucumber, RSpec, Rails and other language and framework specific needs so I'm going to list those packages that are independent of language and therefore get used on a frequent basis.

AllAutoComplete

Sublime Text 2 just came with autocomplete listings for the file you had currently open, so this plugin is a welcome addition as it includes all currently open files for your autocomplete listing.

SublimeGit

This package is a great package with plenty of integration with Git. It's also the first paid package that I have used with Sublime Text 3. As I use Git all the time, this plugin been worth every penny.

GitGutter

GitGutter allows you to see which lines have been inserted, deleted and modified. It's basically a diff for your editor. Little symbols appear in your editors margin to signify where code has been changed. At a glance it's nice to see where I have modified a single file.

Origami

You can't use Vim and not be impressed with being able to split panes with just a few keystrokes. It was one of the few things I have managed to remember from my many sojourns to the land of Vim. Sublime Text does have the same ability to split panes, but the keystrokes for this are difficult to remember.

Origami makes splitting panes much easier by providing easier to remember keystrokes for manipulating and navigating through panes as well as having the same commands available in the command palette.

MarkdownEditing

I handle a lot of files in Markdown. It's the default markup for the majority of files that I create and use. Brett Terpstra's MarkdownEditing package provides some sensible defaults for editing Markdown files. It also provides some handy keyboard shortcuts for manipulating Markdown files such as inserting headings, pasting links and adding footnotes.

CTags

Although Sublime Text has built in support for finding symbols in the current file, having ctags support just makes navigating between methods a lot easier. Rather than switching to a file and searching for the symbol, I can simply use ctags to pull up all symbols for the project navigate straight to the method I need.

So there we go, a quick run down of my Sublime Text 3 setup. If you're looking for preferences files then I must do an update of these on Github, but I'll provide a link here when that's done in the next couple of days, so be sure to check back.

A Thank You to All Open Source Developers

Right now all over the world, open source software is being used by millions of people. Most of these people probably don't even know it, but the services they use on a daily basis are more than likely being powered by open source software in some form. Since it's birth in the early eighties, open source software has become more and more prominent and should now be considered a mainstream topic that hopefully even non-programmers know about.

I've used open source software in my most of my career as a programmer, but it hasn't been until the last five years where open source software has comprised of the majority of tools in my tool belt. From software languages and frameworks to the tools and libraries that I used on a daily basis, open source software has given me a career that I feel very positive about and enjoy working in.

So to all the open source developers who give up their precious time to build software for others to use and enjoy, I just want to say thank you.

Your selfless acts of contributing your time and effort to the world of code for free is reflected in all the greatness that open source software has achieved.

Finding Purpose for my iPad

A while ago I wrote about my iPhone setup. I wanted to follow it up with a post on my iPad setup, but so far I've yet to find purpose for my iPad. I do most of my work at my desk on a laptop and I use my phone when I am out and about. So where does my iPad fit in?

What I initially wanted to do was to only have apps on my iPad that allow me to write. I mostly use it for reading and writing, but I haven't had much of a chance to do either of these in the last month.

Now I think that I want my iPad to do everything that I can do on my laptop. I'd much rather be working on my iPad than my laptop if was away from the house. Some tasks are a lot easier to do than others though. Reading and writing are easy to do on the iPad, but tasks like programming are not so straight forward.

Over the weekend I'll be tackling this and making sure that I can do most of what I want do from my iPad by installing any apps that I need. I'll let you know how I get on next week.

Doing More with Less

A little reminder from Michael Wade that even with ten minutes, you can do a lot.

But for small tasks - the "next actions" that David Allen writes about - 10 minutes can be a nice chunk of time. Each minute is valuable. Those portions eventually accumulate and result in the completion of the project.

The Power of Ten Minutes by Execupundit

A Web Developer's Playground

I’m ashamed to admit it, but I don’t have enough of my code for others to see. I’m not talking about finished websites and applications for clients. I’m talking about ideas, prototypes, and other stuff—things I have just hacked into or built for fun. I can’t remember adding or updating any projects on my GitHub account for a long time.

Being a web developer means all my work, or at least the bulk is visible on the web. This isn’t always going to be the case, though. Most of the work I do is for the back end of websites—the wiring and plumbing side of it—the parts you don’t see. That’s no excuse, though, for the lack of code I have published.

The web is my playground. I should use it and publish more of my ideas in code form. Writing code and fixing problems is how I earn money. Perhaps showing problems that are being fixed with my code is a better way to market myself.

Filtering the Signals from the Noise

I mentioned yesterday that the web can be a great platform for communicating and change, but is often misused. I gave an example of such a misuse, a petition that lacked worthy content. Not worthy of your time, which to you is precious. And that's another problem with the web. There's so much of it. How do we filter the signals, the content that you should be consuming, from the noise, the content that isn't worth even looking at?

Searching the web can yield some real finds like topical blogs, forums and e-books. This takes time though, and once we find an interesting source of content, we then need to spend some time validating the content. In my experience I have found that the best content is the content that is referred to you others. Two examples of this are content that is referred to you from others in your network and content from curated newsletters.

From Your Network

Over time I've built up this network of bloggers around me who put great content on their blogs. Michael Wade, Kurt Harden, Curtis McHale andNicholas Bate to name a few. I've been reading their blogs for a long time now, and when I see something interesting on their blogs that I would like to share, I link to it from my own blog.

It also works the other way. When any of these bloggers find something interesting on my blog they pass it on to their readers. This network of blogs is a great source of vetted content that I can be assured will interest me. Building a network like this can take time, but it's worth it in the end.

From Newsletters

I subscribe to a number of newsletters. Some for programming, some for writing and there's plenty of others. Email newsletters were once the crowning glory of the internet but then RSS came along. People found it easier to manage a feed reader than their burgeoning inbox. However newsletters have recently made a comeback.

The great thing about newsletters are that they are curated by someone else. Thought and time has been put into ensuring that the newsletter contains relevant content for its subscribers. And it's for this reason that I subscribe to a fair few newsletters. I don't want to invest time in searching for content when someone else can provide it for me.

These are two of the main ways in which I filter the best content for myself. There are others ways, but these two methods I find yield the best content for me.

Almost Additions to the Reading List

Just a few more e-books that I am considering purchasing or they're not released yet.

  • Everyday Rails Testing with RSpec - I'm a big fan of MiniTest but I can't simply stick to one testing framework when clients come to me with a codebase using RSpec. The two testing frameworks are quite similar in syntax but they do have their differences so it would be good if I was more faimiliar with RSpec.
  • Mastering Modern Payments Using Stripe with Rails - I've used PayPal in the past for taking payments, but it is footery to work with. I've heard nothing but good things about Stripe since they took off in US. Now that they're in the UK, now would be a good time to learn more about using Stripe with Rails.
  • Learn to Run a Viable Business - Last but definitely not least is the book that I will be purchasing as soon as it comes out on the 27th. Curtis McHale, a blog hero of mine and a very knowledgable chap when it comes to freelancing, is putting together a book with advice to help make sure you are in fact running a viable business as a freelancer.

My Ideal Bookmarking Application

I've been using Pinboard for sometime now for managing my bookmarks. I can't complain about the service. As bookmarking services go, it's the best out there. However, the other day I seen a screenshot of a private bookmarking service that someone else was using. This person will remain anonymous as they're trying to keep their own bookmarking application low key.

What I loved about the screenshot of their application though was the wealth of information available to you when you viewed a single bookmark from the collection. It contained list of bookmarks with similar tags as well as text from the link itself.

It got me thinking about Pinboard and what contextual information is offered when you are viewing a single bookmark.

A single bookmark on Pinboard

Not a lot really. This isn't a complaint against Pinboard, it's a great service and one that I recommend, but it got me wondering about the type of information I would like to see relating to a particular bookmark on the same page.

Here's some things I managed to think of:

  • What did I bookmark before and after this?
  • What bookmarks do I have that are from this site?
  • What bookmarks do I have that have one or more matching tags?

I wondered if I should be rolling my own bookmarking application. I'm a developer, and it sure wouldn't be a wasted project to do. I'm always on the look out for something to keep me practicing towards being a skilled developer.

I then wondered if there was anything else I would like my bookmarking application to do. Besides offering more information on a single bookmark, I would like to save notes, but I would like these notes to be written in Markdown and then rendered in nice HTML markup. I have a ton of notes written in Markdown that I have on my MacBook, but I would like them to be viewable on the web by only me.

I suppose my ideal is bookmarking application is more than just for bookmarking. It would be for notes, clips, images and notes. Evernote I hear some of you cry! Yes, I could do all this in Evernote, but that's not the point of this. It's about my ideal bookmarking application, and it doesn't exist ... yet.

The Fragmenting Mountain Bike

My first bike. A Kona Fire Mountain. I think it was the 1995 edition of the bike. Gold P2 forks with a dark green frame, cantilever brakes and of course a quill style stem. Those were the days. When mountain biking was still young. When bikes were all built to similar sizes and specs. It was like this for years.

Then innovation trickled through the industry in small, slow waves. Quill stems were gradually replaced with the new headsets. Cantilever brakes were slowly replaced by V-brakes and then after that disc brakes became the standard way of scrubbing down your speed on the trails. Rigid forks were replaced with suspension forks to allow for more comfort for the rider.

One component remained constant through all these innovative changes though. The 26" wheel. Since the first mountain bikes sold to the public, up until now, 26" wheels have been the standard wheel size for mountain bikes and its many disciplines. Cross country racing, downhill racing, trail riding, 4X, trials and street riding. Different disciplines and different types of riding, but they all used the same wheel size.

Then it started. The fragmentation as I like to call it. It started with a new bigger wheel size. The 29" wheel. The arguments for a bigger wheel were good. A bigger wheel would roll better over obstacles, the contact point where the wheel meets the ground is greater so there is more traction and you lose momentum slower than you would with a smaller wheel.

The downside? It's too big for your current frame and therefore you need a new frame and a new fork.

Then the 27.5" wheel came along. The old standard wheel size is too small and the 29" wheel is too big. Let's make a wheel that fits exactly in between they said. The benefits of a bigger wheel than the old standard 26" but without the much added weight of a 29".

Now, I'm not sure on the facts of this, but I have heard of riders who have in fact managed to fit 27.5" wheels onto a mountain bike frame with just a marginal change in the geometry of the frame, but if you're going to ride 27.5" wheels then I would at least think that I would only ride them on a frame that is designed to take them.

Wheels sizes are now forcing bike companies to assess what wheels they will pair with the bikes in their range. Already we're seeing bike companies with different wheel sizes in their range. You don't get the option of simply picking your preferred bike and wheel size. Certain models in the range will be tied to one of the three 'standard' wheel sizes.

And that's where I think it's sad for the mountain bike industry. Gone are the days where you can gradually over time upgrade your bike with better components as you know your bike is designed with sizes that almost every other bike uses.

Once you buy a bike that's designed for that one wheel size, you're basically stuck with the size for that particular bike. There will still be plenty of choice in components such as suspension forks, tyres and rims for those opting for one of the new wheel sizes, but nothing like the choice we had before.

I'm all for innovation and change. I'm a programmer for crying out loud. Most of my job is dealing with change and moving applications forward to use new platforms and software, but part of me wants to see a standard wheel size back for mountain bikes. I don't care what size it is, just a size that I know is going to allow me to upgrade my bike for longer.

Still though, part of me wants the 'one size fits all' wheel for mountain bikes.

My Development Tools - 2013 Edition

Here is this years list of tools that help me on a day to day basis in my role as a web developer. There are other tools I use throughout the day for social networking and other things, but I've purposefully left these off the list, as I don't deem them necessary in helping me do my job.

Hardware

My hardware selection is very minimalistic, at least I think it is. I've read about various setups from other developers that include multiple machines and usually more than two monitors. I stick with the view that I need only one machine and that I need it to powerful enough to build web applications but also portable enough that I can carry it with me.

  • MacBook Pro - I previously owned a black MacBook that I have used as my main development machine for over 4 years, but owing to it's lack of expandable memory and that it won't upgrade OS X to anything beyond Lion, I decided that I needed something new. At the start of the year I plumped for a new MacBook Pro and I've been amazed at the capabilities of it as my main development machine. Also the Retina display is rather purdy.
  • Mighty Mouse - Still trying to get my head round the gestures for this, but needless to say, it's a very comfortable mouse to use.
  • Apple Keyboard - I've had this keyboard for a number of years now but I'm starting to find it a tad small to use. It's the actual size of the keys I find too small.
  • Asus Monitor - Just a 24" external monitor. Nothing fancy.
  • External Hard Drive - At the moment I have a Seagate 250MB external hard drive. It's sole use is for my Time Machine backups.
Hardware nice to haves

These have been on the nice to haves list for a while but I think I'll consider at least one of these as a purchase before the end of the year.

  • A NAS - To help with the day to day grind I have a massive iTunes library that I code to, however it is taking a lot of space on MacBook. I would love to have extra storage at home that I connect to easily and just pick my music and photos from it.
  • A better keyboard - Not sure what I am looking for in terms of a keyboard, but one definite criteria I have is that it is slightly bigger than the standard wireless Apple keyboard.

Software

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

  • Mail - Newsflash, well at least for me it is. Mail, the default email client with OS X, is actually a great email client. I previously used the Gmail web client for email but since going Google free, I've been surprised by how much I enjoy using Mail.
  • Firefox - An open source browser that is gradually making improvements in performance, but it's mostly because it's open source software that I like using Firefox.
  • iTerm2 - This is my preferred terminal emulator as it provides more functionality over the terminal emulator provided with OS X. One particular nice feature is the splitting of terminal windows into panes.
  • Sublime Text 3 - I've used Sublime Text 2 for a couple of years and I immediately jumped to the next release when it was available.
  • Dropbox - I keep everything in Dropbox. I probably don't need to. Over the last few weeks though it's fallen into my "Do I need this service?" category of thoughts. I'll be assessing Dropbox closely over the next few weeks.
  • Skype - Everyone has Skype so it makes sense to use it for calls with clients. Very handy as well for group calls.
  • 1Password - Who wants to remember all their passwords or write them down or make them the same for all your logins and sites? Not me, but I still can't believe it took me to this year to start using 1Password.

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

  • Alfred - A very nice replacement for the default Spotlight application launcher. Also I've started to see the power behind extending Alfred to do custom searches on things like my Pinboard bookmarks.
  • Fantastical - A little application that sits in my menu bar and allows me to update my calendar easily. The great thing about Fantastical is that I can quickly add meetings and deadlines to my work calendar.
  • RSS Notifier - I use Feedbin for following blogs, but for service updates from Amazon and Heroku, I use this application.
  • Divvy - Great little application for managing your windows. I have a few shortcut keys setup to resize my windows accordingly.
  • MultiMon - Divvy doesn't let me move windows from my MacBook to my external monitor which is where MultiMon comes in. Great little application.
  • Broom - Diskspace is a premium at the moment, so while I am reviewing different external storage options I have Broom to let me know when folders get too big.

The Web

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

  • DuckDuckGo - I'm still sticking with this as my preferred search engine. Yes it does lack the comprehensive results that Google has, but I'm finding that if I don't find anything on the first page of results with DuckDuckGo, then I do have ready to roll searches for StackOverflow.
  • Github - My preferred source code management tool. Nothing to fault here. Easy to manage repositories and plenty of collaboration tools for both private and public projects.
  • Heroku - I've worked with the Heroku platform for over three years now and I love its simplicity. Might be more pricier than other options but that's the trade off when you don't want the hassle of being a sys admin.
  • LinkedIn - I closed my LinkedIn account a couple of years ago only to find that I actually needed it at the start of the year to get myself marketed as a freelancer. Jury is still out on it's usefulness but I am trying to make more use of it on a daily basis.
  • FreeAgent (Referral link) - I've only been using FreeAgent for six months now but it's already paying for itself in terms of usefulness. Having your accounts in order as an independent contractor is a necessary evil, but the FreeAgent application does such a great of job making mananging my income simple.
  • Instapaper - Reading development articles is part of development life if you want to stay up to date on the ever changing Internet.
  • Pinboard - You never know when you are going to need that article on nested resources on Rails or that article on implementing 'Remember Me' functionality in Sinatra. Good job I keep a nice archive of the articles I read and find useful with Pinboard.
  • Feedbin - My new RSS reader of choice. Check out a more complete review by myself here.
  • Gauges - Another service that I picked in the move away from Google. Okay it doesn't have the number of different metrics that Google Analytics has, but it provides all the information I need in a simple and easy to read interface.

Backups

One backup is good, two is better. I've been lucky so far, but I think I need to beef up my backup strategy.

  • Time Machine - It would be sort of crazy not to use Time Machine if you own a Mac. Background backups without the fuss. Still, it shouldn't be your only form of backup.
  • Dropbox - Which brings me to Dropbox again. I keep backups of a few folders in Dropbox so that if the worse was to happen with my MacBook Pro, I could be at least up and running on another machine regardless of which operating system it is.

There was more to this list but I had to limit it to just my essential tools. If I included all the extensions, addons, plugins and other tools I used, this post would just be too long to read. I wanted to just give an overview of a typical set of tools that web developers use.

My iPhone Setup

I wanted to share my apps setup on my iPhone for two reasons. Firstly, I wanted to see if any one had similar setups on their devices and secondly, it's something worth writing about.

So how do I have my iPhone setup?

Right from the first day I got my iPhone I had my own specific setup in mind. The setup I'm describing is very similar to the setup I had on my previous Android phone. The first screen, the home screen, on my iPhone is limited to apps I use on a daily basis.

Home screen

For a long time now I've stuck to the same types of apps on my home screen with just a few changes to the actual apps in the last six months. Here's what's on my home screen just now.

  • Fantastical - I started using this a few months ago, was previously Google Calendar synced to Calendar app.
  • TaskPaper - I've tried Wunderlist, TodoList, Things and others. I keep coming back to TaskPaper due to it's easy to use UI and use of a flat text file for my lists.
  • Reeder - I started using within the last month, I was previously using Feedly synced to Google Reader.
  • Path - I've had this on my phone since day one.
  • Forecast - Started using this year.
  • Felix - Started using this year, I was previously using Wedge but Felix has really came on in the last six months.
  • Instapaper - I've had this on my phone since day one.
  • Pop - Started using this year at the recommendation of Patrick Rhone. It's really handy as just a scratchpad or dumping ground for thoughts and ideas.

These are the apps that I use every day. I purposely keep this screen limited to just eight apps as it leaves some screen space so that I can see my wallpaper if it's a nice photo.

On the second screen is the rest of the apps that I use but instead they are categorised into folders.

Folders screen

I initially had these folders grouped by the verb that describes the action of each app after reading about the idea on Gina Trapani's Smarterware blog, but grouping them by a verb was difficult for some of the apps. Instead I just a name them to something that makes sense to me.

  • Schedule - Scheduling and timekeeping tools.
  • Network - All my App.net apps. It's the only social network I actively take part in now.
  • Words - Writing and reading apps.
  • Bytes - Apps for services that I use online like Trello, Github and Pinboard.
  • Photos - Camera apps and photo albums.
  • Listen - iTunes, Instacast and other apps related to consuming visual and audio media.
  • Shop - Finance related apps.
  • Setup - Setup and connectivity apps.
  • Games - Handy when we're out and about and I need my oldest to sit at piece for a few minutes.
  • Travel - Hardly used.

I've tried in the past to limit myself to eight folders on this screen however it just wasn't possible. I have enabled most of the notifications on this screen as a reminder that I have things that need to be done or reviewed. I very rarely switch to this screen unless I have a notification for one of these apps. Bookstand is also sitting on this screen awaiting the release of iOS 7 when I can finally put it in a folder.

I've had this setup on my phone for some time now, and I'm very unlikely to change it. I'm quite selective with my apps and I tend to stick to one app for one type of function. The only exception to this is the number of writing tools I have on my phone. I've had PlainText and Pop installed for some time, but I have been trying out Drafts recently.

Bookmarklets for Markdown Fans

Markdown has pretty much been my default markup language for the last few years. All my writing is done using Markdown as well as my journal, notes and other forms of textual data. Although using Markdown for writing is easy now that I know the syntax very well, I still need good tools around me to make the most of Markdown.

I live in my browser on an almost daily basis so I have started accumulating a number of bookmarklets that help me when it comes to using Markdown

Marky the Markdownifier

This is a bookmarklet that converts the current page you're viewing to Markdown. If you're like me and use Markdown for all your documents, then this is really handy. There's also a number of other bookmarklets from Markdownifier that provide different results.

Markdown Link Bookmarklet

Crafting Markdown links from urls is something I do a handful of times everyday. It makes senses then that I automate this little chore.

Jason Seney has a great little bookmarklet that once clicked, converts the current url and title to a Markdown link for you and pops it up in a modal box for you to copy it from.

Kiwi Bookmarklet

Although I use my browser for a lot of day to day work, I use a dedicated client called Kiwi for posting to App.net. The nice thing about Kiwi is that it now supports Markdown style links when you are writing your posts.

Much like the my previous bookmarklet, this one creates a Markdown link for a new App.net post in Kiwi. If you select any text on the page then it will also use that for your link.

This is by no means a finished list. There are probably lots of others addons and extensions and for browsers out there, but I like bookmarklets due to their flexible nature in being able to run on different browsers.

When to Use Database Constraints in Rails

Yesterday I was working on a new feature for a client when I ran into an issue. The ActiveRecord model I was working with had a number of constraints on the table that prevented me from creating a record. I removed the constraints from the table, as I decided that in this case they were unecessary. Unfortunately decisions like this aren't always as straight forward.

I tend to avoid using constraints when possible in my applications, especially when I am using Rails. I can rely on validations and associations to act as 'soft constraints' to my data and ensure that my data is valid. These are also backed up with tests for each model and its validations and associations to other models. This is by no means a perfect solution, but it has sufficed in the past.

Now, a lot of developers might think that constraints are not required as ActiveRecord provides all the necessary plumbing for validating and joining tables together with relationships. That's fair to say if your application is thoroughly tested and doesn't house critical information, but we all want to be good developers so really we should be using constraints where required.

In the past I've worked on a number of healthcare systems that required certain fields to be populated in specific tables. Domains that are directed by rules and regulations on what data you should persist are a great place to use database constraints. Enforcing the data integrity rules on your database reduces the risk for having missing information that could potentially land you in trouble. Domains such as healthcare, law and even education are all examples of domains where by database constraints could be needed.

Applications that also share their data are another good case for database constraints. While you do have validations and associations for your Rails application, can you make the same assumptions about other applications that can access your data? Using database constraints here can ensure that your data remains valid.

In Rails it's all too easy to assume your database is simply a place to hold data, but your database can provide extra validations and checks when needed. I tend to favour not using database constraints until a feature or bug requires that I absolutely need one in place. I find it's much easier to work with code that isn't restricted by countless constraints that have been placed on a table from the start merely because the developer at the time thought that field 'x' was a required field and should have a constraint on it.

The Unread eBooks

While going through my Dropbox, I came across a number of programming ebooks that I have yet to start reading. Shocking I know. I mean, who buys books and then doesn't read them?

At the time I thought the book was a necessary purchase but after buying it, I simply forgot that it was there. Over the months it seems I have built up quite a collection of unread programming ebooks.

I never had this problem with a book. You buy it, you read it. You read it because the book takes up physical space in your surroundings and therefore you are continually reminded that the book is there to be read. Most of the time I would place my book beside my bed. It's the one time of the day where I can get a quiet half hour to read. Every night the book is there as a reminder that the book needs to be read.

Wat about ebooks though? They're there somewhere in your room, you just have to look for them. And that's my problem with them. Out of sight, out of mind. There's no reminder in my space that I have a book to read. I have a Kindle yes, but there is at least eight books on there that I haven't read, but by looking at my Kindle from across the room, I just can't know that there is eight books on it that I have yet to read.

So what's the answer? Being accountable for the books you read and publish your reading list for others to see? Perhaps. Maybe people can give you a poke when you haven't updated the reading list for a while?

It's worth a try. I'll do anything to try and get my money's worth from my unread programming books.

Just a Web Page ...

... or is it more than that?

Think about all the things you could communicate with a simple page like this. If you're a businessperson, you could sell something. If you're a teacher, you could teach something. If you're an artist, you could show something you've made. And if your words are good, people will read them.

Just a Web Page by Justin Jackson

Logging a TIL a day

Every day is a school day. I love that phrase.

As a programmer and daily resident of the Internet, it really does apply to me. Not a day goes by where I don't learn something new. It might be a new method in the Ruby language, or a new trick in Rails. It might even be just learning that your favourite App.net client for the iPhone does allow you to save drafts. Really, I just discovered this last week.

The thing is though, I'm usually working at such a pace where I learn something, use it and then forget about it. No more.

You only learn from the things you write down. If you don't, trying to remember it with the million other thoughts that go through your head that day just makes it impossible. So with that in mind I am aiming to log a today I learned (or TIL) a day.

Mostly this will be programming stuff, but it should feed the my blog for potential development and programming posts. I might even post a summary of the week here if it becomes more than just programming stuff.

This afternoon I said goodbye to my Twitter handle, @matthewlang and deactivated my account there. It's been a move I've been thinking a lot about over the last few weeks. Since the start of the year my Twitter use has really declined. I just don't have the time for Twitter, and I was increasingly finding it to be more of a distraction than anything else.

In the last few weeks I've deleted my Google account and now another aspect of my on-line presence is gone. And it's no bad thing either. Having lots of networks and profiles attached to your name isn't a good thing in my book. Stretching yourself across multiple networks and services takes a lot of your time. That's time I just don't have.

There are of course accounts on networks and services I do have like LinkedIn and Github, but these are important to me and they don't require a lot of time.

I also have a personal website and blog that I post to on a daily basis. I find that writing for my blog gives me more to say on a topic than Twitter ever could. Given the choice between spending time on Twitter or writing for my blog, I'd much rather spend the time writing for my blog.

What's in a name?

What's in a name? Quite a lot actually. When I first started freelancing it was my wish to specialise in Ruby and a couple of the more popular frameworks that are built with Ruby, namely Ruby on Rails and Sinatra. Being fresh to freelancing I didn't want to narrow my field down too much either. I still have plenty of experience with the Microsoft .Net languages and frameworks. After considering this I used "Freelance Web Developer" as my title on my website and as part of my bio.

Now though I am re-considering who I am and what I do as a freelancer. I'm coming round to describing myself more as a Ruby on Rails Developer than anything else. Yes it is more focused than what I have done in the past, but it's what I have been working with for the last five months and will continue to do so in the near future.

I never thought that the Rails framework would involve so much. Every day I'm discovering something new about it and I'm really enjoying the experience. For now I'm happy to be marketing myself as a specialist rather than a generalist.

Life as a freelance developer isn't always plain sailing. I can deal with the bulk of my day to day activities including requirements gathering, designing and implementing features with code, testing and of course deployments. It's what I am paid to do by clients.

The one thing I have trouble with is rush jobs to meet a deadline. As a developer I would ideally like to write tests for all my code, re-factor it and get it to a place where I feel comfortable shipping it. In the real world though that doesn't always happen. Sometimes it's only hours you get to either rush some code changes through. A depressing experience for any developer who takes pride in their work.

In scenarios like this I like to remember that although the code I am shipping in not tested or re-factored to my preferred standard, I can always pick up the code the next day after the deadline has passed. Before I pick up any other tasks tomorrow, I'll ensure that the sub-standard code I previously shipped is correctly tested and re-factored appropriately.

Don't Strive for Perfect Code

Striving for perfect code is a goal of many developers and programmers. We want our code to be simple to read, concise using the best idioms that our programming language has to offer and of course backed by an army of tests to prove it works. You want your code to be perfect. This is achievable in our own projects and products that we have invested our own time in, but what about work for clients and employers?

Your development time is measured as a resource whether you are a full-time employee or as a gun for hire freelancer. How do you justify spending hours getting the code you have written to be the most perfectly implemented code you can achieve?

You don't.

As an agile developer, the code you have written should be testable and easy to read. With a little bit of extra time, it should also be concise to the point where you have re-factored duplicate code, extracted some methods and maintained basic programming principles but also ensured that it is still readable. So what about taking a step further and making it even better?

Hold fire. The code you have written for the feature or bug or whatever it was is now working and tested. You've spent a bit of time refactoring. Now commit your changes and move onto the next card for the application.

In your eyes you have committed sub-standard code. With a bit more time you could have taken it further and made the code better. This path can go on and on if you're not careful.

In your client's eyes or employer's eyes you have committed working code, you haven't taken too much time to do it, and it works. They will be happy with your efforts.

The perfect code you are aiming for is never going to perfect and nor will it last. In a few months, the framework you have written your code with is going to be updated. Chances are the perfect code you have written could be improved upon again. In a year or two, the programming language your application is written in is going to be updated. There goes your perfect code. Then when the programming language has been superseded by a new kid on the block, the application you invested so much of your time in is rewritten in a different programming language. Your perfect code is gone forever.

Unlike the written words of Hemingway or Tolkien that have endured decades, your code is simply a stop gap to making a product or service operational. By all means exercise some time to make improvements on the code. Remove duplications, re-factor it, but always keep an eye on the clock. Spending too much time trying to achieve perfectly written code is not a good use of your time or the time of your client or employer.

The wrong approach

The wrong approach. It's a major downfall of mine. Trying to solve a problem by approaching it wrong and looking for a difficult solution. The thing is I'm not looking for the difficult way to solve the problem on purpose, I just keep happen to be looking in that general direction.

Take the problem I had today.

For three hours I tried to find the solution to a problem I was having in a clients application. I spoke to the client at the end of the day to give them an update on my progress and five minutes after the call the solution was clear.

The client didn't provide the solution. It was just one of those moments when everything fell into place and all of a sudden the solution became clear. I wish these moments presented themselves more often.

The truth is I simply need read up more on the programming languages and frameworks I'm working with on a daily basis. The everyday knowledge only gets you so far. When you've exhausted that you need to look towards the more advanced parts. It's only when I learn these advanced parts that I will truly rid myself of looking at problems with the wrong approach.

A great idea: Weekly pricing

Dedicating yourself to a project weekly means you don't have to switch contexts. I wake up in the morning, get myself ready and then I start on the tasks for a weekly project. I don't have to decide what clients gets my priority today, I just work on the project for the week.

Weekly Pricing for Web Development by Curtis McHale

I love this idea. Basically it amounts to charging for iterations or sprints. Nice to see Curtis picked up on my task switching post as well.

I can afford to lose some time during the day as I am working with mostly one client at the moment on a number of their applications, so a little lost time is to be expected.

Tonight I took the final step in making the move away from Google. After much deliberation I made the move to migrate my Google Apps email account to FastMail. It was certainly less painful than I thought it would be and took the best part of an hour to get all three email accounts over to FastMail.

As for the other services from Google, I've found suitable replacements for many of their services over the last few weeks.

  • Switched to Pages and Numbers from Google Docs - I don't have that many documents to manage and I don't need them when I am on the move, so setup will be sufficient.
  • Switched to Feedbin from Google Reader - Feedbin is still young but it's growing and it's supported by the Reeder app for the iPhone. A no-brainer decision there.
  • Switched to Gauges from Google Analytics - Github's analytics service is ideal for my needs at the moment. It's dashboard provides all the information that I need at a glance and of course it has a greap API that's easy to use.

There are of course other Google services that I never really took too like Google+, Chat, Picasa, and their Drive service. I already use alternatives for these that I find to be much better so I never really got round to using these.

So why move from Google?

It was the all your eggs in basket argument. Google aren't going to go away anytime soon, but simply having all my information in one place was nerving. I wanted more control over my data, so I elected to find alternatives that would do just that.

I'm happy with the choice that I made in Google free. It's not for everyone, but having more control and investing more into products and apps that provide a better service certainly does give a better feeling than handing all my information over to one provider.

Have annual reviews had their day?

Yesterday I talked about annual reviews and how organisations can often get a simple process wrong, but are annual reviews immediately flawed due to their annual occurrence?

A year is a long time. A lot can happen in a year. I left a job, started a new job, got made redundant from the new job and then started freelancing all within a year. I hope you're not as unlucky me to get made redundant, but maybe you move about a lot inside an organisation? What if you're never in the same job for more than a couple of years. Does that make the annual review a redundant process?

In the UK there has been a rise in the last few years of self-employed workers and recently portfolio careers have proved to be popular with workers who want more of a variety in their career. The job for life is gone, so why are organisations still subjecting their workers to annual reviews?

Perhaps a more agile approach is needed with more frequent feedback. A year between reviews is too long, but what about quarterly reviews of your work with your line manager? How about monthly? At what point would your line manager know that you are enjoying your job and making a positive contribution to the company?

As a freelancer I have to continually look at my skill set and improve on areas that are rusty and also consider new programming languages and frameworks every few months. I have a core skill set that I am strong with but I also have to consider other skills if I want to make myself attractive to future clients. I give myself a review every month so that I know what work I have completed, whether I have completed it on time and what is in the pipeline ahead for me. I can afford to do this though as it is just me.

I'm just glad I don't need to sit through anymore annual reviews for the foreseeable future.

The Annual Review Done Right

It was my oldest son's parents night at his school tonight. We had a fair idea what his teacher was going to say about him and his progress. We weren't disappointed.

The format is simple. You get 10 minutes with the teacher in which time they will go over the your child's progress (that you have already read the week before) and then you get to ask any questions about your child and identify any area where they can try and make improvements. Fortunately our son is doing great so there was just a couple of minor areas for him to improve on.

If you think the format is familiar then you would be right. Parents night is just the kiddie version of the annual review that many permanent workers go through. However, how is it that organisations can get this wrong when the basic format seems so simple?

I've experienced the annual review first hand in a number of companies. Very few of them actually did an annual review on a regular basis and even fewer followed through from the previous annual review.

A neighbour of mine worked in a really well known international bank where annual reviews were not done by your line manager but by someone even higher up. In an organisation such as this where the number of employees runs into thousands, there was a good chance that the person doing your annual review doesn't even know you to look at. In this case our friend did indeed get their annual review done by a director who had only met him twice. Not exactly a good example of an annual review.

Twice a year my son's school give a parents night without fail. They provide a report for your child that you get a week before parents night so that you can raise any questions during parents night. They give feedback on your child's progress and give suggestions on areas where your child can improve. They do it for all the kids in the school. That's hundreds of kids.

It's not hard to do.

I just want to ship code

Today I did my first Capistrano deployment. Yes, that’s right. My first. Any experienced Ruby developers might be wondering how I haven't used Capristrano in the past. I simply chose not to use it.

When Rails was in its infancy, Capistrano emerged as the default way for Rails developers to automate their deployments, but one thing that put me off was the amount of work that would be involved in getting it up and running. Scripts, SSH, source code management, web servers and databases. It all sounded a bit much.

Then Heroku came along and I smiled. I could deploy my application with a single command. In the past I’ve always opted to use Heroku and during my brief stint in an agile team we used Engine Yard for hosting our applications. Again deployment was as easy as a click of a button.

I’ll admit it. I’m lazy. I hate having to muck about with configuration settings, command line arguments, options and other little details to get things working.

As a developer I’ve come across hundreds of tools, editors, applications, libraries and services that help me do my job. One thing that sticks for my preferred selection of tools that I continue to re-use are the ones that just work and require little work to get working. Platform services like Heroku and Engine Yard fit this criteria perfectly.

Yes I probably should have some knowledge on using Capistrano but the ease of a single click deployment is hard to beat.

At the end of the day I just want to ship code.

Make this a movie

Yet when the units of the veteran 17th Waffen-SS Panzer Grenadier Division arrived to recapture the castle and execute the prisoners, Lee’s beleaguered and outnumbered men were joined by anti-Nazi German soldiers of the Wehrmacht, as well as some of the extremely feisty wives and girlfriends of the (needless-to-say hitherto bickering) French VIPs, and together they fought off some of the best crack troops of the Third Reich.

World War II’s Strangest Battle: When Americans and Germans Fought Together by The Daily Beast

How could this not be made into a movie!

via Execupundit

A Day for Making Improvements

I’m a terrible person for saying I’ll do something, then I never do it. I’m not talking about the big important things like completing client work or picking up the kids. I’m talking about making improvements in my work flow. Adding little things here and there to save time. Well no more!

Here’s three things I did today to make my day a little easier.

Installed Instacast for Mac and Became an Instacast Member

Instacast is awesome. My buddy in British Columbia, Curtis, put me onto it at the start of the year and it’s been a great product for managing my podcast subscriptions. I think the best two features are the syncing between devices and the playback of podcasts at different speed. I’ve got my playback set at 1.5 times normal speed just to get through the podcasts that little bit quicker.

I have Instacast installed on my iPad but having that, a laptop and a monitor on my desk means I have little space for anything else. When I first read about Vemedio releasing an Instacast for Mac app, I removed the Instacast app from my iPad but didn't get round to installing the desktop app. I resolved this today.

It was about two months ago that I decided that I wanted to support the Instacast product by becoming a member. Today I took a senator membership with Instacast because I want to support a great product. Just $10 per year as well. Bargain.

Installed aText for Text Expansion

Back when I was a .NET developer I used a text expansion tool called AutoHotKey. I used it for everything. After moving to Ruby I didn't look for a replacement text expansion tool for my MacBook.

One of the things that I frequently run into problems with is using templates for Markdown files. I use a number of different tools depending on what I'm writing. Being able to generate the template for the file regardless of what tool I am using would be good.

I installed aText due to the recommendation on the Lifehacker website. This should definitely make writing posts for my Octopress blog easier as well as anything else I can think of.

Installed Broom for Disk Space Analysis

Space is a premium on my MacBook Pro at the moment. While I wait for funds to be released so that I can buy a NAS drive for the house, I have to keep and eye on how much space I use.

I installed Broom (Mac App Store) and straight away I was able to save myself over 20 GB in disk space.

I need to keep more of an eye on the tools that I use and should use to make my day easier.

Artificial deadlines

Great analogy on deadlines for engineers.

Similar to a soccer game when your opponent leads 0:1 and there are only 5 minutes left on the clock. The team will try everything to score asap. But outside of such pressured situations the team simply focuses on ball possession and making good plays. There is nobody asking the players at what time they will score the first goal. Not before the game and especially not during it.

It Ships When It Ships by Bjoern Zinssmeister

Clear your desk, clear your head

Work has been a little slow this week, a morning here, an afternoon there.

With the free time in between slots, I should be using that time to get my head round some of my side projects and turning them into products, maybe even start preparing for another NaNoWriMo, or even just fine tuning my programming skills by learning another programming language. Well the truth is I haven't started any of these things this week.

It was time to re-focus again and get my head cleared.

I took a look at my desk and noticed rising piles of paper appearing on the edges. Wireframes, contracts, invoices, tax documents and other stuff. All grouped together, but all of them encroaching my desk space. My work space. While this stuff sits on my desk, I get distracted. So I started clearing my desk. Filing documents away, throwing out old wireframes (in the recycle bin of course), leaving out only the absolutely necessary things that I need to action before the end of the week.

After half an hour I had my desk back, my work space. And I was ready to go again. I scheduled work for my side projects into my calendar for the rest of the day and got back to work on them.

I should clear my desk more often.

Buying books again

Bought myself a couple of books this morning for some light reading. Not the digital kind mind, actual hold in your hand, dead tree books. It's been ages since I done this. For the last couple of years I've bought all my books on my Kindle, but my reading has decreased in the last few months as a result of this.

I put it down to technology wear. I just can't face burying my head in another screen again when it comes to reading at night. Amazon tout the Kindle as a close experience to reading an actual book, but you can never replicate the feeling of reading a book with anything other than an actual book.

I'm not going to completely stop using my Kindle. It's still great for my programming books for quickly looking up something and I've got a ton of books on my Kindle that I read again quite often. There's lots of other reasons why I'm buying books again but the main reason is just to spark my love of reading again.

Six Steps I Should Have Taken With Journalong

It's been a year since I started Journalong. It's been a real learning experience. While it might not be the success that I envisioned it to be, the experience of building a product has taught me a few things that I would like to share.

1. If there's no market for it, don't build it

When I first hit on the idea I immediately created a small Google Docs form that asked two questions.

  • Would you be interested in using Journalong?
  • How much would you be prepared to pay to use Journalong?

Feedback was quite low. Well, really low. Looking back now it was clear that there wasn't demand for Journalong. I should have abandoned the idea and moved onto something else. I didn't though. I wanted Journalong to use for myself so I built it anyway, and added the ability for others to pay for an annual subscription to Journalong if they wanted to use it. Was I building Journalong for myself or others?

What I should have done was simply build Journalong for anyone to use for free. Interest in the product was so low anyway that it wouldn't have made much of a difference anyway. With the focus taken away from trying to market the product to customers, I could have focused on delivering a better experience in using Journalong for myself and others.

If there's no market for your product, then don't build it and put a price on it. Of course you can build it for yourself, just don't expect to profit from a personal project with low feedback.

2. Measure user interaction

The only way to know if your product is being used is to measure key activities in the product. I didn't do this, so it was difficult to see how often Journalong was being used on a daily basis other than looking at page views provided by Google Analytics.

Decide on key activities and interactions you want to measure and build the monitoring of these straight into the product.

For Journalong I should have measured one thing:

  • How often were people writing to their journal?

As Journalong writes journal entries straight to Dropbox, I didn't have any record of how often journal entries were being written for each user.

Building metrics like this into your product is just as important as the features your product has. Metrics like this can provide you with data on in-frequent users of your product. You can then survey these users to determine what's stopping them from using your product more frequently and possibly taking a higher tiered plan if you have them.

3. Gather product feedback frequently

Getting feedback using surveys on your product is critical. It let's you find out what's not working, what's attracting users and what's missing.

When I say survey I don't necessarily mean a 10 point questionnaire on the users experience with your product. Bogging users down with surveys like this can turn them away.

A couple of questions would do or you could do something as simple as a 'like' button beside a new feature. A simple button next to a feature could prompt the user when they use the new feature for the first time and ask them if they like it. Once they click it, the response is logged and the button disappears. If they don't click it for a few days then simply remove the button to stop the user getting annoyed.

Using the metrics that I mentioned earlier, you should also survey users that don't use the product very often. The feedback may turn out to reveal a missing feature or an obstacle in your product. You want to convert as many users as possible to using your product

The last place to survey your users is when they delete or cancel their account. This is your last chance to find out why your product isn't to their liking. Is it too expensive? Does it lack something?

Getting the feedback from the customer here, allows you to refine your product for the better to stop users cancelling their accounts for similar reasons.

4. Iterate often

This is important in the early days of your product. After I built Journalong I sat back for a couple of months and watched the activity on Google Analytics. Looking back it wasn't a wise move.

Metrics and surveys will point towards missing features or changes you could be implementing. Getting these in as quickly as possible will mean that less users stop using your product and will attract others. Be selective of the features you implement though. You don't want to burden your users with changes to the product every day. Common sense prevails here. If 90% of your surveyed users are asking for a specific feature that falls inline with your product, then implement it and ship it.

5. Adjust your price based on facts

I've made three pricing changes to Journalong over the last year and making it free next week (that's another blog post) will be a fourth. Pricing products is difficult. I arrived at my initial price based on the value that I thought Journalong would be offering to users and on how much people were offering to pay for the product from my initial survey.

Three pricing changes later and there's still no bite for Journalong. These pricing changes didn't come from any information I had though. I simply thought that reducing my price might spark more interest in Journalong. A stupid assumption to make and one I advise you don't do.

Adjusting your price isn't a big issue. In the early days of your product you should be continually refining the product based on the feedback from your customers. The pricing of your product is no different. Adjust your price based on feedback from customers. They use your product, they'll tell you if they are getting value for money from it.

6. Set a product trial period

Don't flog a dead horse. I've spent far too much time on thinking how to get customers for Journalong when I could have been using the time to build other products. After six months I should have called it a day for Journalong and moved onto something else but I didn't.

Setting a trial period for your product gives you the chance to review if the product is heading in the right direction. Are you getting sign ups on a daily basis? Are you converting enough users to paid accounts in order to be sustainable?

They say Rome wasn't built in a day but that doesn't mean you should continually hold out for a stampede of new users after you deploy that new fancy feature for your product.

After six months ask yourself:

Is it worth investing another six months of my time into this product?

If you have a number of paying customers using your product then it might be worth pursuing the product for another six months. If not, then I say stop working on that product and move onto something else. Six months working on a product is a lot of your free time taken up. If you're like me and have a backlog of other ideas, then it might be better to leave your product and pick something else up.

There's no secret formula

I started this product with the full realization that it could end up like this. A handful of customers and sign ups that bottomed out three months ago. Not all products end up being successful, but there's no rule to say that your product will definitely be a success. Coming to terms with this fact will make the day you give up on your idea a lot easier.

It's not the end of the road though. There's always that next product idea!

RSS is not dead

While trawling through my RSS feeds looking for blogs to unsubscribe from, I came across Andrew Chen's blog post about his decision to completely remove the RSS feed from his site.

As of today, I’ve removed the links the RSS feeds on this blog, and ultimately will phase them out completely in favor of email.

RSS I quit you.. by Andrew Chen

Not a wise decision in my eyes and here's why.

Your inbox isn't an RSS reader

Using email to subscribe to web sites only works for a handful of blogs. You could comfortably subscribe to about five blogs and you would be able to manange reading a few emails a week from these blogs if they were not to frequent. Doing this for anything in the double digits number of blogs is a bad idea.

I don't want to flood my inbox with tons of emails from different blogs. Thats why I use RSS. That's why I use a RSS reader. I subscribe to the sites that I want to follow and then I can batch my reading of those sites to a time that suits me.

It's convenient and it works.

RSS isn't dead

Many people are starting to wonder if Google Feedburner will be next for the chop from Google but even if it was to be shut down, that's no indication to say that RSS is dying or dead. All it says is that Google isn't interested in dealing with a an RSS product.

RSS is alive and well everywhere. You can still find RSS feeds for millions of blogs and websites and Feedly are doing a great job of bringing over hundreds of people from Google Reader to their feed reading service. In the last few years there have a number of great RSS feed readers released on tablets and smartphones so that you read on the go.

Completely removing the RSS feed from your blog is a bad idea. After reading Andrew's post I found another website that I can unsubscribe from.

Sorry Andrew.

To specialise or not?

My career has been quite varied when you look at the different sectors I've worked in. NHS, risk management, payroll, retail and technology repair and recycle. I've worked in a number of other different sectors as an ERP developer as well but largely these were for small periods of time where you rarely get a chance find out a lot about the domain of the business.

Since I started freelancing at the start of the year, I've been working largely on public health and information websites for NHS related organisations. Not only do I get to work with my favourite development tools and languages every day but I also get to work in my favourite domain. Health.

I don't know what the attraction is to health but I find it an interesting domain to work in. Providing tools for health organisations to share information with their patients so that they can lead healthier lives is quite rewarding in my view. Over the last couple of moths I've even found myself reading NHS related publications to broaden my knowledge of the work I am doing at the moment. I've never done that for any job that I to have had.

It's got me thinking about whether its worth specialising in health contracts or should I stick to working in different domains to keep things fresh? Working in different domains sure would broaden my experience and there might be another sector that I would be interested in. However health is already such a varied domain that could provide some diversity.

I suppose the real question is this. Which one will allow a steady income of work for the near future?

Leave us introverts alone

I find it increasingly tiresome to apologize for my need to be alone to recharge, for reasons that echo why many women are tired of educating men about equality.

If you want to get everything done, leave an introvert alone. by Pete Forde

I do my best work when I'm on my own and I'm disconnected. I'm not alone in this.

Be sure to click through for a couple of great posts that Pete mentions, especially Susan Cain's TED talk on the subject.

Google free. I hear those words a lot now. Ever since Google decided to close down the Google Reader service there's been a question I keep asking myself. What's next in the Google product list to be closed? And I don't think I'm alone. There's been a lot of discussion about how long term other Google services will be? One thing's for sure. Nothing lasts forever.

Rather than sitting waiting though, I've decided to look for alternatives to the products and services that I can. I'm not aiming to go completely Google free, but I am looking to reduce my dependency on the services and software that Google provides.

The Browser

It was a tough choice to make, but I decided to stop using Google Chrome. Yes it's fast and probably the alpha browser for many web developers, but given that I want to stop relying on Google services and products, I had to look elsewhere. Well not too far, after all Mozilla Firefox is a great alternative to Google Chrome. I was up and running within a few minutes with Firefox thanks to the ability to import all my bookmarks and browsing history from Chrome.

Analytics

Site tracking services such as Google Analytics have a bit more of a wide range of options than browsers do. In the end though I decided to use Github's Gauges service. It's simple and cheap. I don't need all the metrics that Google Analytics provides, just a general overview of traffic to my site. A couple of code changes to my own site and the Journalong site was all that was needed to start using Gauges.

Feedburner

Lastly there's Feedburner. Given that Google are no longer interested in providing a service that allows you to read RSS feeds, then I think that a service that publishes RSS feeds is going to be closed down in time as well. Already I have read of a couple of people on ADN who have stopped using their Feedburner accounts and are using the built-in RSS feed that their sites provide.

I haven't found an alternative service to Feedburner but I'm not sure that I actually want one. Subscription stats for my blog isn't something that I am interested in that much, but one thing I will miss about Google Reader is it's trends page. I just want to see how active a blog has been in the last 3 months so that I can decide if I want to unsubscribe from it. I'll be switching away from Feedburner soon.

These are the services that I have decided stop using with Google. What difference does it make? Not much, but I am happier not relying on one provider for all the products and services I use online.

Prioritizing Family, Career and Other Things

Being a parent is tough at the best of times, but being a parent, holding down a job and working on anything else that takes your fancy is hard too. As a developer I like tinkering with code and ideas, but these aren't a priority and so I only work on side projects when I can. However, even short bursts of coding can be productive as John Polacek points out:

It has happened to me over and over again. I get away from what I’m working on, then when I come back, I focus on it in a fresh way. I can accomplish in 10 minutes what may have taken me an hour or more had I just stayed ‘heads down’.

How Getting Married and Having Kids Made Me a Better Programmer by John Polacek

My focus is family first, income second and then everything else. So only when I have exhausted all my options about the house do I crack open my text editor and start coding. I might only get 10 minutes or half an hour, but it's all I need to move project forward.

The surprise for me is that I thought that with freelancing I would be able to set aside some time for side projects, but the priority for freelance work is to simply save what I can. When the work stops coming in for a short spell, then I can focus on my side projects for a period of time until I find other work. For the moment though I'm happy to only work on side projects when I can.

The return of mail

A few weeks ago I signed up to a project that involved receiving regular index cards through the post with ideas and suggestions for those ideas on them.

In the last few weeks I've spotted a few more opportunities where this idea could be used and I hope that more of these micro mail services pop up.

In a digital world it is all too easy to be overburden ourselves with content and networks. Twitter, Facebook, email, blogs, newsletters, podcasts and more. Where do we draw the line?

This why I'm loving the idea of getting mail again. A chance to stop relying on digital content and subscribe to some real hand crafted content. The kind of content that really makes you stop and think.

I really hope that more of the micro mail services take off.

Always switched on

A few weeks back I tried to improve some code I was working on, but after a couple of hours I resided myself to the fact that it just couldn't be done in that small space of time.

Yesterday I looked at the same code and within half an hour managed to make a big improvement to it. So what was the difference between yesterday and a few weeks ago?

It could have been a number of different things. What was my workload like that morning? Did I have other things on my mind? Did I start the day with tea or coffee? Who knows. Hundreds of different factors could have affected my thinking that day.

When you're working you focus as much attention and energy as you can on delivering what is expected of you. Some days though you just need that bit longer to get your head round something.

We can't always be thinking and working 100% effectively all of the time. What I do know is I can't be switched on all the time.

The long path

Test-driven development (TDD) is often seen as the long way to developing software. The misconception perceived by many is that writing tests and code is going take longer than simply writing code. While this statement is in fact true, many don't take into account the what's happens further down the development process.

Developers that practice TDD are continually writing tests to ensure that all parts of the software work. This practice reduces the chances of bugs appearing in the code in a later date. Developers that don't practice TDD are writing code that is usually handed to another team for testing. Chances of the code containing bugs at this point are quite high, and so a game of ping pong ensues with the code moving between the developers and the testers until it is working. This can ultimately take longer than the time it took a developer to produce the same code using TDD.

Selling TDD to clients is difficult because they don't see the benefit of this practice. Clients want their product and the want it now. Writing tests takes too long. It puts the developer in a difficult position. Do you take the gig and hope to squeeze in the tests as your developing and hope the client doesn't notice? Or do you take the gig and forgot about the tests knowing that future work will come back to you in the form of bugs that the client has discovered? Of course the last alternative is to not take the gig at all.

The long path that clients see when they are told about TDD isn't as long they think it is. In fact it is actually worth their while to spend the time investing in tests that ensures their code for their product or service continues to work in the future. Following the path of not writing tests might look like the short path to start with but there's no guarantee that it will stay that way.

So Google Reader is finally being killed off. The RSS reader that spurred many clones and provided a way for you to follow any number of your favourite blogs easily is to close down this summer.

With very few updates to the service in the last couple of years it is hardly surprising. It might be a bad day for Google Reader fans but there's an opportunity here for someone to earn themselves a nice fortune.

The space left my Google Reader now means that there's a place for a well designed cross platform RSS Reader.
And I'm willing to pay for it.

Over the next few days I'm going to be looking for an alternative to Google Reader. It's sad to see the service go but nothing is forever. The one good thing from this is that Google Reader already provides a way for you to export your feeds. Shouldn't be too difficult to get up and running on something else soon.

Reviewing the master list

It’s become clear to me that there’s far too much stuff on my master list. It’s things that I want to do, but I’ve started reaching too far forward into the future and starting noting stuff down that I want to do but I won’t be able to do for at least six months.

Speculating on what I should be doing in months is no good. I need to see a short term list of things that I can be working on now rather than later. My master list is also slightly unbalanced.

One thing I can do about the issue of the number of items in my master list is to adopt an idea from
Kanban boards. In a previous role in an agile team, we kept a backlog of development cards that represented application changes that were next in line to be worked on.

In order to keep my master list lean but still keep a note of stuff for the future, I'm going to keep a separate backlog file that contains actions for projects that I want to do in the future but perhaps don't have the time in the near future. Doing this and reviewing it once a month will also mean that I can just forget about my backlog until I have cleared everything from my master list.

The monthly services bill

This morning I was curious about the amout of money I was spending every month on subscriptions for products and services on the internet. It turns out that I don’t spend huge amounts of money on products and services. Here’s where my money is going on a monthly basis:

All in they come to just under £30 per month. The amount I am paying out each month is less than I thought, which means I have a few slots left for additional products and services. I’m already looking at taking out subscriptions to Treehouse to improve my iOS development skils, Instacast to sync my podcasts between devices and a Railscasts pro subscription.

What apps, services and products are you subscribed to on a monthly basis, and is there anything you are considering taking a subscription out on in the future?

There's more to programming than writing code

Another thought from episode 95 of the Ruby Rogues podcast had me thinking about just exactly what I do as a programmer. Yes, most of my time is probably spent writing code, but there’s one big aspect of being a programmer that is often over looked. Problem solving.

Most programmers write code that will end up solving a problem. Whether it’s a small web product or a large ERP platform, the code that we write as programmers usually has a single aim. To solve a problem. Solving problems doesn’t start with code though.

First you must understand the problem you are facing. You must be familiar with the domain language of the problem and understand why the problem is occuring. I like to visualise the problem I am facing. Sketching out the problem in a mind map or even as a flow chart for is always a first step to understanding the problem. With a visual aid of the problem you might recognise solutions that you have previously implemented or even gaps in the problem that require further knowledge.

With the problem now understood, you then set about providing possible solutions to the problem. One solution isn’t enough though. It’s highly unlikely that the first solution you think of will always be the best fit for the problem. I always like to try and come up with at least three solutions to a problem if I can. If I am stuck for solutions then it I like to implement the easiest solution to the problem that will work. Okay it might not be the best solution, but it is a solution. In time, a better solution will present itself, but I think it’s best to at least start with some kind of solution.

Problem solving is just one part of a programmer’s day, but it is an important one.

Being a team player

Episode 95 of the Ruby Rogues podcast got me thinking about my previous roles as a developer and how I interacted with my team.

It’s interesting that of all the roles I have had in the last 10 years, I can only count one of them as being a true eye opener in terms of team interaction. My role in an recent team, although short, was the most positive experience I have had.

At the start of each day the team would gather for a daily stand-up where we would go over yesterday’s progress and do a quick overview of what’s in store for today. There was some chat at the start about the latest designs on Qwertree and football results from the previous night. Just enough of an ice breaker for everyone to get comfortable and then commence the stand-up meeting.

At the end of it, everyone knew what they were doing for the day and what everyone else in the team was doing. There was no negative comments on anyone’s part, and if anyone one member of the team had a problem, the rest of the team tried to provide quick suggestions as solutions.

Positive team interaction didn’t stop there.

During the day, we would frequently pair up with another developer to work on a task until it was complete. During this time a high amount of interaction took place between the different pairs on the team for that day. Sharing ideas for problems, learning from one another's coding styles and of course the odd jibe at your preferred text editor.

Team interaction was always high during this time. It was great to see developers sit down together, regardless of level of experience, and move the development team’s project forward by quickly completely the task they were assigned at the start of the day.

I only worked with this team for a short period of time, but it was the most positive example I have seen of a team enforcing positive team interaction. Those readers who are aware of agile practices will immediately see that the team I am praising is in fact a team that uses agile practices.

The amazing thing is that they aren’t doing anything that isn’t achievable by many other teams who have poor interaction and communication amongst their members. All it takes is a change of attitude.

Comfortable tools

Software developers love their text editors. Those developers that invest a significant amount of time in one particular text editor are able to wield it with the proficiency a level 20 warrior. They’ll slice and dice the code with the mininal number of gestures needed. They have all the commands they need memorised right down to the last keystroke combination. Text editors are the primary weapon of software developers and so they need to know how to this tool with great effect if they want to make their day a productive one.

I chose Sublime Text 2 as my main text editor a couple of years ago. I just find it easy to work with. I know the commands that I need, I spent a fair amount of time getting the right plugins and setting them up so that they work well for me and of course I’ve tried hundreds of themes before getting the one that just feels right. So if I’m so happy with my chosen text editor, why the hell do I keep wanting to try another tool?The other tool I am referring to is Vim. It’s a text editor that is used by thousands of people and is over 20 years old. Every year, I ask myself, “Did I give Vim enough of a chance?”

I’ve tried Vim a few times as a replacement for Sublime but every time I try it, I find something that I don’t like and go back to Sublime. Fast forward a few months and I do the same thing again. For the last three years, I think I’ve tried Vim about five times. I’m not talking about a couple of days, I’m talking about a full on month of use. However, at the end of each month I simply switch back to Sublime. Is it a comfort thing? It might be.

Vim is a great text editor but I just don’t feel that comfortable using it.​

Talk to your client

One of the greatest challenges I’ve had in my career as a software developer is that of expectations. Twenty years ago when the waterfall methodology ruled, you developed in isolation for months on end, passed it to a test team and then onto the client. After months of work, it was common to get the final product passed back to you. The reason was that the client’s expectations were not the same as yours. Months of work wasted.Now though, we have agile methodologies that allow us to work closely with the client and work in much smaller chunks, delivering code weekly or even daily for the client. At this fast pace it’s easy to meet the client’s expectations as we are only working in smaller periods and only delivering smaller sections of the final product for the client.

I’ve been working this way for a couple of clients over January and February and it’s been really successful but the reason isn’t just the continual delivery of features and fixes for the client, the main reason is that I am always in communication with my client. I chat to my clients daily, often more than once a day when working with them.Foggy details are a sure fire way to miss the clients expectations, which leads to wasted time for both you and your client. You can’t assume to know what your client will want, but you can make an educated guess. However, what you should be doing is talking to your client and clarifying any details you are not sure about.

If I have a question or I’m not sure, I ask the client to clarify their expectations on what I am hoping to deliver for them. I hate to be wrong and I hate to be wasting my clients time by not meeting their expectations.​

Persistence pays off

Being a software developer means that I spend a lot of time debugging code for problems. Sometimes it's obvious where the problem is but not all bugs are that easy to find. It would be nice if we could quickly identify the problem, but the real world isn't like that. Most days debugging code requires at least a couple of hours of tracking down the problem but sometimes you find yourself spending the bulk of the day finding the problem. These days can end up being very long when you're debugging for hours on end.

Problem solving takes time and patience. Fortunately for me my client understands this and left me to my devices today. I spent the majority of today debugging some code and then once the problem had been found, the code to fix it took about a hour to put in place.For days like this, it pays to be persistent.

The late adopter

I made a small purchase last week at the Apple store. A new MacBook Pro to replace my very old Macbook. with. It's only my second laptop in 5 years yet I know of developers that change their equipment yearly.

In fact all my technology purchases are extremely sporadic for a software developer. I haven't had a new laptop since 2008 and my first iPad was a third generation iPad. It has taken me until the iPhone 5 to own an actual iPhone. Needless to say I like to wait until technology pans out before I decide to make a purchase. I'm always late to the party.

Being late in adopting technology is no bad thing though. The first version of any new piece of technology is never the finished design. It's always the second generation version that is a more complete and feature rich product. The initial bugs and chinks have been ironed out and there's always some slight improvements elsewhere in the product.

Being a late adopter means that while I might not have the latest cutting edge equipment, I am banking on getting more value for my money with a second or even third generation product. Sometimes it pays to wait a bit.

Why I love being a Netter

Netter and netizen are just a couple of the words I've heard used to describe the people on
App.net. The social network (dare I use the term) burst onto the scene in 2012 with promise of being a self sustaining ad-free social network that will be paid for by it's users by an annual subscription fee. I joined in August 2012 and now six months on, I'm still thoroughly enjoying the experience on App.net.

I still have my Twitter account and I now use it purely as a marketing tool for freelancing. I was on Twitter during the week, doing a quick poll from other developers. Within a few minutes of posting my tweet, the first in about a week, I got two follower requests from spam accounts and I also got a couple of replies to my question from spam accounts.That's what really gets me about Twitter. It's the spam. With a majority of the tweets I make, I end up with a couple of new follower requests from vague accounts that I would rather didn't follow me. On App.net though things are a little difference. The subscription fee is the perfect entry barrier to weed out spam accounts. I've never have to block a vague account on App.net.Then there's the people. Okay, I'm missing a few people on App.net that are on Twitter, but then there's people on App.net who aren't on Twitter. It's a whole different crowd. On Twitter I mainly follow other developers who work with the Ruby programming language but on App.net I'm following a wider range of people. A wider range means different content to read on a daily basis.

Finally there's the features that App.net are rolling out. In the past few months, private messaging and file storage have been two big announcements in App.net. Now these might be conceived as typical features for a social network, but where App.net is different is that these features were built to be transparent and easily managed by App.net's users. Take the file storage within App.net. With just a click, I can export all the files I have stored in App.net so that I can take them elsewhere. Yes other social networks might offer this, but App.net built this in from the start. Features are built with the user in mind, not with advertising in mind.I'm glad to be part of a social network that puts its users first. It definitely beats being another cog in an advertising platform.

Be present with Nicholas Bate

Nicholas Bate on the importance of being present.

But being where we are, that's another story. In a world of distraction, 'the future is brighter', it's sometimes difficult to just 'be'. To be where you are. In the conversation, in the game of lego, pressing out the weights with focus and concentration at the gym, baking amazing bread, crafting a paragraph, watching the flight of a rare bird and realising it's along way to another planet where you can do that.

Knowing where are you vs being where you are by Nicholas Bate

As a web developer I tend to focus on the back end of the implementation of web sites and applications. It's what I do and what I am good at, however I'm not shy to put together a basic front end design for a website if I have to. However that's where my skills start to dwindle. I understand all the concepts of front end design and I know enough best practices to get by but I lack the confidence and knowledge to really put out a professional design.

There's always the argument for professionals as to whether they should generalise or specialise. I would like to specialise in a couple of web frameworks that use my favourite programming language, however the web and the technology that is used by it and on it is increasing daily. Which is why I want to generalise on these fringe technologies.

I'm starting to consider expanding my skills by signing up to Treehouse for some online learning in web design, building iOS applications and Wordpress.

As a web developer you should be familiar with the building blocks that make up a web page and how it can be styled but this can only get you so far. I've worked on this basic knowledge for a long time now, but now I want to take my work to a higher level of quality which is why I'm looking towards learning more about web design.

Mobile applications are everywhere. There's simply no getting away from them. Most online services and products have a mobile application to connect to their service, and while I prefer the idea of using websites on my smartphone, there is a place where native applications definitely excel. As a first learning exercise I am going to start building an iOS application for my Journalong product this year. Journalong works well on my iPhone but I want less in the interface of Journalong when it's used on the go. I just want to write and save it to my journal. It will be a good initial project to start on with Jouralong.Finally there's Wordpress. Like or not, Wordpress is still the king of blogging platforms. It's been a success story on the Internet form the early years and today there is such a vibrant community of Wordpress designers and developers that have formed as a result of the success of the open source blogging platform. Why am I interested in Wordpress? Curiosity really. I want to know how difficult it is to pick up Wordpress from a developers point of view and implement a small website with it.

I would like to say that the current range of content management systems offered in the Rails community are better, but the truth is that Wordpress is so much easier to work. If a client approached me and asked what blogging platform would I recommend then I would have to say Wordpress.

At the end of the day taking care of your career is something that everyone needs to do. If I can improve my career with a few new skills then why not. After all, it should improve my appeal to clients as a web developer with a more rounded set of knowledge on not just web development but also the technology that makes use of the web.

Apps for staying in touch with family

Staying connected with family in the modern world is great. Thanks to the Internet, the only thing to stop you contacting family on a different continent is whether it's an inconvenient time. Just recently though I didn't realise how many different ways technology lets me stay in contact with family.

So there's the usual forms of communication like phone, email and video are the most common forms of keeping in touch with family but what else is there?

Apps from social networks offer a very easy way to stay in touch with family, providing their all on the same network of course.

In our family we use Path to stay in touch and share photos and updates. Path's benefit is that it's a private network. Only people that you allow to follow you get to see your updates. Path is so simple that even my parents are on Path as well. It took them a bit of persuading to sign up, but now they can see photos of all their grandchildren at the touch of a button. With my sister in Dublin and my sister-in-law in Toronto it's great having them both on Path so that we share pictures of the kids as they grow up.

At home myself and my wife Jen use an app called Avocado. Getting more smaller and private again, Avocado is a service for just two people. Not only does it let you message each other privately but it also provides a calendar and todo lists which are shared automatically with your other half.

Of course there's the big three of social networks: Google+, Twitter and Facebook. Of these three I'm only on Twitter but these days I mainly use it for just connecting with other developers and not for staying in touch with family.

There's probably many others apps and services you can use, but what's great about technology now is that there are so many more choices.

Decisions, decisions, decisions

As a software developer I'm used to making hundreds, well probably thousands of decisions a day. Deciding on variables, class names and how I implement features is just part of the many decisions I make as a software developer on a daily basis. They're all small decisions, but they add up at the end up of the day when a section of code is tested and completed. These are just micro decisions. Really small decisions that I can afford to get wrong as they are easily rectifiable in a really short period of time.As you move up through the scale though, you see that the decisions that you make become less and less frequent as their impact becomes greater and greater.

Right at the top of my tree is a decision to emigrate that will affect me and my family for a time period that can be measured in years. It's a decision that's been on my mind for the last few years, but with every passing year that the decision isn't made, the decision to emigrate becomes harder and harder. Get it right and everything will fall into place as expected. Get it wrong, well I don't really want to dwell on what would happen if we decided to emigrate and it didn't work out.

If only the decision to emigrate was as easy as one of those thousands of decisions I make on daily basis.

Microsoft: A shadow of its former self

I was a fan of Microsoft when I first started out in my career. It was everywhere. Jobs local to me were all about Microsoft technology and stacks. So I started working with Microsoft's development tools and languages more out of it being so popular than by personal choice. In those days Microsoft was a key player in technology.

Looking at Microsoft now and it's hard to believe that it's the same company that was set to take over the world.Yes they have the same set of development tools and updates languages for developers, and the market for developers using these languages is still strong. However there's other areas where they appear to be losing out.

The PC is dying. The Windows driven one that is. Tablets are the new home computer, and while Microsoft have released their own tablet, the Surface, they do have a mountain to climb in terms of opposition. Apple and Amazon both have had tablets out well before Microsoft and they both have their own apps market place to sell from. Apple's iPad is extremely popular and I've started to notice that more and more people are jumping on board with Amazon's Kindle tablets.

The PC might still be a success in the office, but I think time will reveal a new success in the workplace. As tablets become more powerful and better apps and services are written, I think they maybe the new success story in the workplace. As I said though, time will tell on that one.The other area Microsoft are fighting is open source software, which is now a serious consideration for business. It maybe wasn't so much 20 years ago, but now you can comfortably run your own e-commerce site with a suite of support applications to run the business without paying a single penny in licensing costs for the software or the operating systems it runs on.

Open source software has become so popular that there are even open source ERP systems that can help you run and manage your business. Having previously worked for a Microsoft partner, I know the licensing costs involved in such systems and they can easily run into tens of thousands for even an ERP backed e-commerce site.Microsoft was a great company back in the day, but today it seems that there isn't much to get excited about from it. Not only that, they are playing a game of catchup in other markets like tablets, software and of course the cloud.

I'm not writing off Microsoft and I know they have successes in other areas but looking at them now and you can't help but wonder where it all went wrong.

Use compass points for better goals

Goal setting. How many different methods have you tried? Lots? So have I, and every time I tried to use them I failed to reach the goal. Inevitably when I focus on one goal, everything else suffers. A few years ago I tried freelancing at night, however after month I was flat out exhausted and I the time I had to spend with my family also suffered. At the time I focused on the goal without seeing the rest of the world.

Last year though I tried something different. I used compass points.

Compass points are Nicholas Bate's strategy for making sure that goals in each aspect of life are moving forward goals in life that are based on aspects of your life. We all have different aspects in life, but when people set goals, they tend to focus on a specific set of goals and forget everything else in life.

The compass points that Nicholas Bate uses are:

  • Career
  • Mind/Body
  • Personal Finance
  • Relationships
  • Fun
  • Contribution

Now before you jump in and start assigning next actions to each of these compass points, take a step back. Each of these compass points are different and therefore require a different plan. Maintaining a healthy diet and exercise is different to advancing your career. Being healthy means regular exercise and of course eating healthily, but advancing your career might involve a training course at a local college. Also, compass points are not independent of each other. Focusing on one compass point for too long will likely have a negative affect on the other five compass points.

I used these compass points last year and had some success with them. Obviously, there's things in life that affect your plans and goals, but last year I advanced my career and I had some success with getting my finances in order and I made some open source contributions. I didn't set goals for all the compass points, but it did keep me focused on trying to maintain a balance between all of them. I'm using the compass points again this year, but with more of a focus on achieving a goal with each of them.

Nicholas has full blog post and free download on using compass points, which I highly recommend you read.

I read an interesting post by Curtis McHale today highlighting his pledge to maintain a daily contribution to open-source projects. Well done Curtis! It's developers like him that make the open source projects that many of us use possible.

While I don't currently contribute to open source projects (I really should), one thing that I looked at was the contribution streak for Github. The streak is the number of days you make a contribution to projects on Github. To maintain the streak you need to make a contribution every day. If you miss a day, the streak resets to zero. The question I have is, does it include weekends?

I was in a similar position a couple of years ago. I started using 750words.com to write daily. Every day I tried to squeeze in 750 words of writing in my day. It wasn't easy, but I managed to do it daily for a good couple of months. Then the fatigue started to set in. Finding time at the weekend was becoming difficult.

In the end I decided that maintaining this amount of writing everyday wasn't feasible. So I stopped. I can tell you that while writing every day was great, the relief of not having to write was great too. I didn't feel bad about it.

While I'm not writing everyday now, I am trying to publish a blog post every weekday. It leaves me the weekend to reflect on the last week and get some ideas in place for the following week. The same goes for an open source project I am about to start. Yes I might work on it at the weekend, but I'll mostly be working on it during the week.

Maintaining streaks like this are fun, but trying to fit them in seven days a week can be difficult too. I know for a fact that I'll never accumulate a streak of more than five on Github, but I'm happy with that. Sometimes I need the weekend to be a code-free time.

Productivity apps don't work for me

I'm not the first person to realise this, but productivity apps don't work for me. I've tried countless apps and services but none of them seem to work for me. The recurring problem I have is that all of them require me to be online or have a digital device in my hand. I like my iPhone, but using a task manager app on my phone usually ends up becoming a chore that I could do without.

My latest experiment was using Wunderlist to track some projects I've been working on. I setup the necessary lists I needed and started working with them. However after a few weeks of using it I ended up with lists of stuff that I haven't looked at for a fortnight.

Maybe it's just me, but tools like Evernote, Things, Omnifocus, and Wunderlist and other apps that aim to make you more productive, inevitably become dumping grounds for ideas, todos and other stuff that I end up never reviewing or actioning.

So what works for me then?

Pen and paper seems to be the choice that I keep coming back too. It's simple, effective and cheap, but not in terms of price. In terms of focus. I never get distracted by the latest features of pen and paper. There aren't any. I just open, write and close.

There's a place for productivity apps in my workflow and that's when you are collaborating with others as part of a team. Seeing what tasks are yours and sharing information in a group of people working on a project together is essential to making progress. I've no arguments with using productivity apps in this context. Especially when that team isn't in the same physcial office as is the case with so many people who take advantage of telecommuting to their job.

However, for personal projects and products I'm working on and day to day stuff that life throws at you, I'll stick with the lo-fi option of pen and paper. It works for me and that's what matters.

We need more simple products

The fixed gear bike. Two wheels. One gear. Brakes, optional. Simple really. And that's the reason why the fixed gear bike is loved by many cyclists. It's a simple bike. Amongst it's carbon fibre, multi-geared brethren, it looks out of place, but it has a special place in the hearts of many cyclists. It's a bike with a single function, it just lets you ride.

Now take a look at Pop, the text editor for iOS from Minimal Tools. A single page text editor that offers no settings, no file management facilities, no synchronising with Dropbox. In fact there aren't any features about it. All you can do is write something with it and then copy what you have written to the clipboard. Why the hell would you want to buy this app then when all editors for iOS do this?

Well Pop does one thing that no other editor I have does. It doesn't distract me. It doesn't have anything to distract me with. It just lets me write.

We need more products like Pop and fixed gear bikes. Simple things that do one thing really well. Simple products let you do what you really want to do without any distractions.

Matt Gemmell recently blogged about his array of writing tools. While my selection is somewhat smaller, I thought it was still worth writing about the tools that I use.

I keep a list of writing ideas in my notebook. During the weekend I pick out what I want to write about and do a quick outline of the article in my notebook.

Once I have an outline for some posts, I enter them into
Pop. This is a minimal text editor for iOS that lets you write and copy what you have written. That's it. No saving of files, sharing or syncing. It is everything that many apps dread to be: featureless. This is where Pop excels though. A minimal interface means that I can just open the app and get on with writing. I tend to use Pop when I'm out and about. For jotting ideas down or expanding on my initial outlines, it's hard to beat. You just open and write.

If I'm at home I tend to use
Plaintext on my iPad. It has a similar minimal user interface to Pop but also includes syncing to your Dropbox. At this point I liked to have a hard copy of my writing, so that I can have it available on my laptop.

Finally there's
Mou. I tend to do final edits and drafts with Mou as well as use it for composing emails and writing guides. Mou has some nice features like split views, word counts and of course it's a Markdown editor, so I can add headings, lists and hyperlinks easily.

I'm also looking at
Scrivener for longer forms of writing such as short stories and novels. I've already done Nanowrimo once and would love to do it again this year.

I initially tried to use web based writing tools for a while there, but the simplicity of native applications like the ones I have mentioned are hard to beat.

Where estimates can go wrong (and how to fix it)

Estimating. It's a word that can strike fear into people who are new to the realms of programming, project management, freelancing and other careers. The daunting prospect of estimating the length of time at which you will be able to complete a set piece of work.

I have over ten years experience in the realm of software development and sometimes I still get it wrong. I've seen developers get their estimates wrong by a couple of weeks and project managers miss their target deadline by months. So why are estimates so hard then?

The first reason is that the estimate is based on a bigger block of work, rather than multiple smaller ones. Estimating a project from just an outline of the project is a rookie mistake. When you estimate on a large single block of work, you are basically playing a guessing game. In fact your estimate is always going to be wrong when you do this.

Instead, break your big block of work down into smaller blocks of work. The more granular you get, the easier the estimate is going to be. It won't always be correct, but your estimate will be more accurate.The second reason is information. We are limited by our little brains in how much information we can retain when estimating on a project.

When it came to estimating on projects for ERP software customers, I had to remember that different customers had different workflows in their systems. No two systems were the same. I had to factor in that a customer will have specific workflows in their system that I need to either work around or work with. This job was made a lot easier by the fact that I used notes that I kept on each customer's system so that I was ready to make better estimates in the future.

Now I know this might not be easy to do for a new project where you have little information, but carrying any information that is relevant from one project to the next is going to make estimating on blocks of work a lot easier.

Estimating isn't a black art, it's simply something that requires you take the time to break blocks of work down into smaller chunks and if you can, have the right information at hand to make better estimates on those blocks of work.

Using multiple networks as a marketing tool

Having multiple social networks can be a real headache if you're trying to manage them all at once. When I created my App.net profile and made that my new home, I stopped posting to Twitter for a few months. Also I have only just re-created a LinkedIn account in the last few months. Recently I have stuck with posting only to one network, but with Twitter and LinkedIn sitting in hibernation, I thought it might be a good idea to use them. With the freelancing way of working now in full swing, I am toying with the idea of using Twitter and LinkedIn to share updates to my availability for contracts and interesting links from the web development world.

Using these networks to market myself as a freelancer is a great way of using these networks without me just abandoning them for one network. The truth is that these days people are rarely exclusive members of one single network. I know there is people who share all their updates across all networks, but I think that is counterproductive. This can take up a lot of your time, especially when you start getting replies from different people on different networks.

What I will be doing is continually posting to App.net anything that I wish, but for my Twitter and LinkedIn accounts, I'll be sharing blog posts on freelancing, web development and availability as well as sharing interesting links on web development using Ruby and hopefully other languages. I'm getting the tools in place I need to make this happen, namely a Buffer account and perhaps some triggers setup on IFTTT if needed.

Hopefully this will result in more leads for freelancing work and also increase my reputation in these networks as a web developer who is passionate about what he does. We'll see how it goes.

Aggregation of media is not journaling

The other week I read about a popular journaling app for the iPhone that allows you to populate your journal by aggregating your posts from your various social networks. I was saddened to hear that this was being touted as a selling point for journaling software. Here's why I don't see it as a benefit.

When you aggregate posts and actions from various social networks, you're effectively just pulling the random stuff that you throw out to the world on a daily basis. Often it's a spur of the moment thought or opinion. How many times have you posted publicly you were going to do something but didn't see it through? I've lost track myself. Promises of using different programming languages and frameworks have all been broken because that post that I made publicly is a spur of the moment action. Aggregating media is not a form of journaling because it pollutes your journal with whimsical statements and promises that are often written on the spur of the moment.

Journaling is the act of writing down your thoughts in private. Whether it's a digital journal or pen and paper, journaling is the act of organising your thoughts and putting them down so that you can reflect on it now and later. It's a log of your thoughts, opinions and actions. Your successes and failures. Sometimes you'll like what you write, sometimes you won't. When you start noticing trends in your journal entries, then you can start to take action.Ten journal entries in the same month about your wish to write a book say more about your passion and willingness to do this than a one off tweet on Twitter. It's these trends in your journal entries that let you identify what you want to do rather than what you would like to do.

Your journal is your life in the words that you write to yourself, not to the world.

TDD with your MVP

Should you TDD your MVP?

This question came up on the Hacker News website a few days ago. Reading through the comments there was a very mixed response as what people preferred to do.

First let me describe a couple of things for readers of a non-programming persuasion. TDD (or test-driven development as its more commonly known) is a way of writing code. Essentially it boils down to writing a test for the code that we are about to write. This test fails until we implement the correct code to make it pass. The MVP mentioned here is a minimum viable product. This is the simplest implementation of a product that will deliver value.Got the acronyms sorted? Okay, let's crack on.

I have built a couple of MVP's with test-driven development. I have to say that using TDD to drive the product worked well for me. It gave me the confidence to ship the product once I knew it working. And that really for me is what an MVP is all about. Shipping the simplest thing that can work. We know it is working as we have the tests to prove it and from working code we can then be confident in shipping a product that provides value.

An MVP without tests is simply a throwaway application in my eyes. It's code that serves a short term purpose such as learning something new or proving a simple technique.Others might argue that this is exactly the point of a lean startup. To test an idea. However in order to test that idea for a product we need to have something that the product can offer the customer, and that needs to be value that the customer can see. Value that you can certify is working correctly.

Each to their own really, but I'll keep TDD'ing my MVPs in the meantime.

This year's theme: Independence

This year's theme was all set to be something else, but due to the fact I am currently trying to make it as a freelance web developer, I thought a change in the theme for the year would help my identify my goal for the year. So this year's theme is independence, but it's not just career independence. Let me fill you in.

My way of defining career independence is to be an independent developer. Simple. I want to ultimately pick and choose the work that I want to do in the future. I want to be independent of another company's goals and objectives and work towards my goals.

This is going to be a long term goal, that will require me putting in a lot of hours at the start. I'll be building products, open source applications and libraries and doing a lot of writing.The flip side of this is that I will be hopefully more financially independent. No-one can argue that times are hard for many of us, but I don't want to simply get by month to month working my ass off and doing a dreadful commute to play office politics.

I want to build products that solve problems and generate revenue.With a suite of products on the market, I'm hoping that at least one of these can generate enough revenue that will allow me to be more flexible in the work I do day to day.

It's a dream that many want, but very few take up. I've decided to simply put this out there. Then in a year's time, you can email me and say, "So Matthew, how did the whole independence thing go?". I know what I want the reply to be, but there's a lot of work ahead to get the right reply in place.

Let's see what 2013 brings for being independent.

I'm available for work

It's taken a few weeks of job searching to make me realise that pickings are slim for the type of work I want to do on a daily basis. So I have decided to take charge of my career direction and I am now marketing myself as a freelance web developer for hire.

So without further ado, is there anything I can do for you?

Here's just a couple of things I can do for you:

Extra development resource

Do you need an extra developer on your team for a short period of time? I'm available to work in Ruby or .NET teams where an extra pair of hands is needed. I've spent over 5 years working in web development teams building backend applications and services to support businesses in retail, risk management, technology repair and e-commerce.

Prototype your product idea

Have you got an idea for a product or service on the web?Before taking the plunge and investing ten of thousands of dollars in an untested idea, why not test your idea first with customers that fall into your product's market? I can build you a working prototype of your idea that will deliver a minimal set of features that will test your intended market. Armed with a working prototype, you'll be able to test your idea with customers and get the feedback you require in order to decide if your idea is worth investing more time and money in.

Anything else?

Is there anything else I can do for you?Let me know. I'm here to help solve your problems. I look forward to hearing from you!

Don't neglect your professional network

I know and I'm sure you know that networking is important, but I didn't realise how important it was until a couple of weeks ago.

At the start of the year I made a choice to move away from what I perceived to be an in-secure job in an agile development back to my previous job in an ERP consultancy working with Dynamics NAV. Having resided myself to a career of working with Dynamics NAV, I deleted my LinkedIn account and stopped looking for work in the Ruby community.Fast forward six months and I have been paid off from the ERP consultancy due to budget constraints within the company and I have exhausted all leads in the west of Scotland for Dynamics NAV work. What to do now?

I had very few people in my network that I could turn to to ask about possible leads for freelance and permanent work.I fell back to Twitter for a couple of days to see if any of my followers were looking for a developer. It lead to one interview. The interview wasn't successful, but it was still a potential job and that's what having a good network is all about. Making sure that you are well connected to people that can help find you leads and opportunities. Even though I hadn't posted on Twitter for a while, people were still reaching out with suggestions.

I decided to create another LinkedIn account again to see if I cold improve on my search for a job. The last time I had a LinkedIn account I didn't use it to look for jobs or keep my profile updated with what I was working on. This time it will be different.Having spent the last couple of weeks looking for work I've started to see the benefits of using your professional network more regularly. In he last week alone I've had a number of messages from people I have previously worked with who have leads for potential jobs.

Don't neglect your professional network, it's important. Keep people updated with changes in your employment status and projects you are working on. You never know, it could lead to a great opportunity for you when you need it the most.

Where do you achieve more?

Michael Wade examines places where you achieve more work.

It is obvious that where we work can affect how we work. Consequently, we need to learn which settings are best. A certain oddness may come into play. I've found that my home dining room table is ideal for some projects and not for others. The reason why has not been discovered but I suspect it may have to do with its height and width as well as the nice amount of light from some French doors.

Our den at home is a place for adults only. It's really just a second sitting room and office but I always find it a great space for working. Minimal distractions and clutter.
Stacking Deck by Execupundit

Avoid the “Jack of all trades, Master of none.”-mantra, as this not only defocuses & complicates your execution, but it most definitely decreases the quality of your work / products / services.

Do One Thing by Adii Pienaar

It's something that I have to rectify. My development career has moved from one programming language to another without me taking the time to truly specialise in one specific language. I think I've just found my theme for next year.

Opportunities ahead

Bad news.

Got paid off this morning.

Good news.

I now have an opportunity to carve a career that will benefit me. A career that will interest me, let me work on the things that interest me the most.

There's freelancing, contracting, consulting, writing, coding and product building. Lots of opportunities ahead, but decisions need to be made sooner rather than later.

I have a young family to think about, so while I would like to do all the things above, I need to be realistic.

I'm going to start exploring these opportunities one at a time over the next week. No rash emotionally fuelled decisions.

This is an opportunity that can't be missed.

Last week seen a spike in traffic to my blog. Looking at the stats, I noticed that most of the traffic was coming from Hacker News (HN). It turns out that Curtis McHale submitted my Simple Tools post to the HN board. He's a braver man than I am, because I would never post my own stuff to HN.

Why? In a word, fear.

Not because of the content or opinion of my own writing, but the way in which I present that content or opinion. Fear that my writing isn't good enough or doesn't communicate my opinion clearly. I'm not a particularly confident person, but the confidence diminishes when it comes to my writing and my code. "What if it's wrong?" is always at the front of my thoughts when I'm writing or coding.I hate failing at something. Well it's actually more like fearing it. I took a step one day and said, "I'm gonna ship this for the world to see". It was the first step towards building up some confidence. Having a web product out there is a great boost to your confidence if you're a programmer, designer or wannabe entrepreneur. It has helped me to build my confidence but I don't feel that it is enough.

My next step is produce more publicly available writing and code for the world to see. I need to commit to writing more often, coding more often.For writing it means blocking out 30 minutes a day to write. Putting something on the blog every day. Allowing people read more about what you have to say. If it's garbage, they'll let you know.

For coding it means a better understanding of the code I am writing and making that code publicly available. Releasing more libraries for other developers to use and let them point out bugs and enhancements.You can only learn your craft from making mistakes along the way and learning from these mistakes. Want to be a better writer? Write more. Want to be a better programmer? Write more code. The confidence will come along the way, or so I am often told!

As for posting my blog posts to HN, I'll leave that to Curtis to do for me while I chip away at the fear with another piece of writing.

Simple tools

A week ago I finally got round to doing some little jobs around the house and one of them was taking a couple millimetres off the top of a door so that it would shut correctly. As it required only a small amount off the door, I opted against using a power tool.

When Jennifer's parents moved to Canada over a decade ago, her Dad left some tools for me that he didn't want to take with him. One of them was a plane that belonged to Jennifer's great-grandfather. For those that don't know, a plane consists of a block with a projecting steel blade. It is used to smooth wooden surfaces by gradually removing shavings away from the surface of the wood.

Intrigued as to whether it was still working I dug it out from the toolbox and started working on fixing the door. Surprisingly the blade of the plane was still sharp enough to take just enough wood off the top of the door for it to close properly again. This plane is at least 30 years old and still works. It got me thinking about the choice of tools that programmers have when it comes to working with code and how long these tools last.For some years now, the text editor has been my choice of tool when working with code. I used TextMate for Ruby coding for about four years before I switched to Sublime. Yes, the keyboard shortcuts might have changed, but essentially, these two are the same tool. Just plain old text editors.A text editor is such a simple tool to use and many of the more popular text editors have a history that goes back at least five years. Look at Notepad++, jEdit and others. They've all been around for years. Even at over 20 years old, Vim is undoubtedly the first choice of text editor for many programmers.

The other choice developers have is an integrated development environment or IDE for short. These are the power tools of the software development world. IDEs are development tools that are designed to aid developers by providing built-in shortcuts that increase programmer productivity, but where they fall short is that they are tied to the programming language or platform they were designed for.

Being tied to a few programming languages or a platform is very restricting. Inevitably IDE's get releases every couple of years to take advantage of the latest new features from the programming languages and frameworks they were designed for. Re-learning the ins and outs of these news tools every couple of years is the kind of time I'd rather not waste. These tools are too complicated in my book.

That's the beauty of simple tools like our plane, like our text editor. They last a long time. Just like the plane made fixing the door a simple task to do, the text editor makes working with code a simple task. You just have to know how that programming language works in order to make the best use of your chosen text editor.

There's a lot to be said for the simple tools we use.

I Am A Terrible Programmer

Glad to hear that I'm not alone. I don't always think that I am a terrible programmer, but some days I just can't afford to spend the extra time in making my code better with time restrictions set that can't be negotiated.

A good coder knows when something should be quick and dirty, and when something should be thorough and clean.

via Dan Shipper

Wishlist Wednesday - A portfolio career

While I would love to work with some programming languages full-time I know that it will unlikely be the case. However, being able to split my job into smaller jobs seems like a more feasible idea. My bread and butter is Dynamics NAV, but I also like working with Ruby, Go, Dart and Coffeescript.

This is where having a portfolio career would be nice.

Working a couple of days a week doing Dynamics NAV work, then a couple of days a week working with Ruby and then hopefully leaving myself the Friday to work on my own products would be a great way to balance the week out. It also means of course that I keep a broader range of skills updated rather than focusing on just the one.

The $5 SaaS

Is $5 the magical number when it comes to pricing your product in the SaaS market?

Here's my current list of subscriptions:

I have other subscriptions as well that are on an annual price that I haven't listed here, but it's safe to say that most subscriptions fall in and around the $5 mark. Don't just set a price though, do some background work on your product and market and get feedback on what your customers are prepared to pay. It might surprise you.

via Ahmet Alp Balkan

Instant Business Speak - Geeks

Nicholas Bate gets us geeks. It's a shame that others don't.

Organisations love to use the term geek in a derogatory manner. Often dismissive. Often excluding. And yet when we have a problem be it IT, medical or simply plumbing we would love to have access to a geek. A person who is so good that they understand the simplicity the far side of complexity. They look at the problem and they know what to do.

Instant Business Speak 38 - Geeks by Nicholas Bate

Building for Enterprise Solutions

So the real business opportunities are in enterprise solutions we’re told but no one is building for enterprise. Why is that you ask? Well the title gives it away, it’s not sexy.

Of Cours People Aren't Building for the Enterprise, It's not Sexy by Curtis McHale

Of course no-one finds the enterprise sexy, exciting, cutting edge or anything like that. Also the vast sums of money needed to build enterprise products is also a road block. Attracting new developers and businesses to build enterprise products is quite a challenge. I've always wondered what a ERP product built using Rails would perform like.

Anyone need an ERP product built using Rails? I've got the time, if you have the money.

Firefighting. I've been doing this for most of the last three weeks. It's the onslaught of unforeseen tasks and issues that take you away from the work you had planned to do. It's the ad-hoc requests and "emergency" problems that try to rob you of a productive day.There's nothing less motivating than firefighting most of your time at work and gradually seeing those deadlines slip again and again and again. Thing is, too much firefighting can be averted in most scenarios. Here's a few tips which I found quite good. It's mostly common sense, but I sometimes lack this human trait!

  • Identify the source of your firefighting - First of all make sure you know where all your firefighting issues are coming from. The most important step. More likely it's a single person or organisation than a random number of people or organisations.
  • Filter all incoming fires - Make sure to route all firefighting issues to the right person. As a developer, I'm often mistaken as the "go to guy" for a particular project or software. In reality, these issues should first go to someone else first, before they come to me.
  • Schedule time for firefighting issues - Once the issues have come in, block off some time later on in the day or week for dealing with these issues. It should be a maximum of two hours per day. Spending too much time on firefighting issues is counter-productive and a real motivation killer. Believe me, I've been there.
  • Think about a long term solution - Firefighting should be a short term phase. You shouldn't allow this to be come part of your daily work. When resolving issues of this natrue, ask yourself "could this happen again?". If the issue probably will, then think about a long term solution that will stop the issue continually coming back to you.

Most firefighting work is work that we can put off for a later part of the day or week.​ Don't let your day go to pot with putting out fires.

Good to see developers having success with Linux

So, far its been good; most apps I use are web apps. I spend 70% of my time in a terminal, and 30% of my time in a web browser. Honestly its the perfect computer for me right now. So, I’m waving goodbye to the ecosystem Mr. Jobs built, and moving to the world of linux full time.

Thanks Mr Jobs, but it seems I can use my Linux laptop now by Hyper Geometric

It's hard not to argue that Apple products are great. I particularly like my iPad and tomorrow I'll pick up my new iPhone. As for my main development machine at home though, I've started looking at using Ubuntu on an old PC. So far, I've only installed the minimum development tools I'll need. I'll be able to give a more fuller review on using Linux. Stay tuned!

Stop using email for internal company communication

​I have a love hate relationship with email.I love having a medium that allows me to communicate effectively with others all over the world. Being able to send some thoughts to a family member in Canada, or thanking your mentor for that little motivational book they sent you in the post. Yip, it's hard to beat email as a form of communication.

Until of course you get to your desk at work at 9am on a Monday morning and the deluge of email in your inbox makes you regret that you didn't just phone in sick that day. Yes there are ways of dealing with your email on a daily basis that let you work smarter and more effectively by implementing filters and such, but that doesn't stop people sending email to you.You see, when you work in a team, department or in a small company, email is often that go to tool that let's one person tell everyone else about something. That's great, but when email becomes the standard form of communication for ideas, discussions and projects, that's when you're going to wish you never opened that your inbox again.

From my experience, I have found that email in the work place is an invasive form of communication that tries to grab your attention from the pressing, but productive work that you are doing. It aims to break your concentration. When you have processed that 'urgent' email, you then need to reset your focus and get back to what you were working before you were interrupted. Personally I can do without that kind of distraction.

So what's the solution? Well it's easy. Non-invasive forms of communication that let you see with others want you to see without distracting them from their work. Project and task management, customer relationship management, and intranets are all greats ways of communicating with others in your company without interrupting what they are working on. They let your team see the information they need to see and they can act upon that information in their own time.

And don't be under the impression that the digital world is the only place you can communicate.

The daily stand up is a great way of communicating with your team and shouldn't be thought as being for developers only. Anyone in a team, should consider the daily stand up where you want a status update from the previous day and to quickly plan what's going to happen today.

Kanban boards are another great trick I learned to use from my days working in an agile development team. An overview of the work in progress is a great way for everyone to see what's going on. It also increases verbal communication over work rather than team members continually pinging emails back and forward.

As a rule, email should be the last form of communication in any team, department or small company. There are so many other ways of communicating that are more productive and will also let your colleagues get their work done.

So next time you want to update the team on a project or want to discuss idea, find an alternative to the evil that is email.

Edge of the universe

Another little gem that hit my inbox courtesy of Caesura Letters:

Sitting at the edge of the universe prompts me to ask the same questions I find myself contemplating as I look up into the starry night sky: How did this universe come into being in the first place? How did this mind-achingly massive void of nothingness get here first? What, precisely, is nothingness and how much of it is out there beyond our universe?

Edge of the universe by Caesura Letters

Get your daily dose of solitude with Caesura Letters. It's the one thing that makes me want to open my inbox every day.

Moving on ...

For a few months now I have been thinking about reducing my time spent on Twitter. When I first started using Twitter, I used it solely for the purpose of finding useful tips and links for Ruby on Rails and conversing with the rest of the Ruby community. Now though it seems that there's less and less interesting stuff being posted on Twitter and most people use it for day to day stuff. That's all well and good if that's what you use Twitter for, but I'm starting to find that it's not for me.

The flip side of this is that I need another avenue to post my thoughts and other nonsense, which is why I going to be publishing more and more things on my blog.

After reading Scott Hanselman's post on the subject, it's pretty much cemented my feelings on the matter and I'm going to limit my time on Twitter for the foreseeable future. I'm still going to auto-post links from my blog to my Twitter account and the odd post from Path but other than that there won't be much activity on my timeline.

So where can you contact me then? Email always works. You can get me at matthew [at] matthewlang.co.uk, and I'm also on Path as well if you're interested.

How gnarly are the cobbles at Roubaix?

Pretty gnarly if you ask me, and I'm more of a mountain biker than a roadie.I ride fast descents through rocks, twisty trails over roots and even make the odd jump here and there on my mountain bike, but riding at these speeds over cobbles with thin tyres is a true test of skill. Yip, Roubaix is pretty gnarly.

Thanks for the video Curtis!

I'm a huge fan of Markdown, yet it has been hard to show your preferred markup language or Markdown compatible services in a visual way other than a text link to something like John Gruber's Markdown page.

Hopefully now we'll start to see Dustin's proposed symbol for Markdown being used to indicate Markdown compatible services.

Is your organisation growing up?

There are those who do grow up. Discussions about coffee machines, hotel allowances and bonuses recede. The 'country club' atmosphere which has grown unhealthily in abundant times can be dropped quickly and a focused 'war room' mentality swung into action.

On Growing Up and Rites of Passage by Nicholase Bate

Another insightful snippet from the master of business, Nicholas Bate.

I know it's not always this clear-cut, but it's sad to see so many businesses taking the easy option out and cutting costs (usually at the bottom of the company ladder) rather than exploring new revenue ideas and possibilities.

Best holding back

So tonight, I deployed my first version of a plain text journalling product to Heroku. It's finally up and running! Those little hours here and there are finally paying off and now I have scratched the initial itch and provided a better way to write to my journal from anywhere.

After the excitement of deployment and seeing it work I was then tempted to power on through for another couple of hours and start the real work of implementing basic features, styling web pages and other things.

I'm going to hold back though and wait for another window of time to work on it. For the moment it's doing the most basic functional thing it needs to do, which is better than nothing. Yeah, it might be great sitting up for another couple of hours, but I'll only be robbing myself of energy from tomorrow. Also by the sounds of the weather on the window, I think it's going to be a hell of a cycle getting into work in the morning.

So until I can schedule more code time with my side-product, I'll hold back.

Turning 35

I'm 35 today!

It probably doesn't mean much to many people when they turn 35 or any other age really for that matter, but for me this year feels different and that's in a good way. Let's wind the clock back a few years first though.

When I turned 30 I was pondering on my career and what I wanted to achieve. I hadn't produced anything that I would call art (well in my case as a developer, a web application of some kind), and so I started thinking about what I wanted to achieve in my career in the next five years. I had thoughts and ideas, but no plan. Five years later I still haven't produced anything that I could put out there and say "Yip, I made that".

After a couple of years, I lost track of my ideas. I carried on with my job as a developer for a small consulting firm and tried to keep my development skills up to speed by playing with some programming languages in my spare time. I even produced a small mind mapping blog for a couple of years that let me practice some writing for a while.

Fast forward to today and I still haven't produced anything career wise that I would call mine, but it's not something that I am going to lose any sleep over.

Which brings me back to today. So why do I feel like everything is in the right place?

Well at the start of the year, my wife and I found out that we were going to be parents again. We already have a five year old son, so it's great news that he will have a younger brother or sister in August when the baby is due.

At home, we're also kicking off a project to convert our garage into a multi-purpose room. Mainly it will be sitting room, but I'm also claiming a section of the room as a more practical place to do more sideline work. I don't have what you would call a great area for working when I am at home, so it's good to know that in the future there will be a better place for turning some ideas into reality.

My career is in a good place at the moment. I'm using my preferred tools and languages on a daily basis and I'm also gaining more experience in working in agile software development teams. It's not long term though, no job ever is, but it's good being in place where I am learning new things everyday.

So what's different from today than the same day five years ago?

Well I'm more grounded in plans and expectations for the future. I know that I can't do it all, but instead I'm focusing on things that are close to my heart and really interest me.

I'm also a bit more realistic about my strengths and weaknesses. I know I've got skills in programming and I enjoy writing. Okay my strength in writing might be me being biased, but I do enjoy it and that's what counts. On the weakness side, I do find it difficult to maintain my focus on one thing. I've not seen my projects through from start to completion but I'm hoping to change that this year.

So what does the next five years hold?

Who knows. I certainly know that on the home front, I'm as content as a I'll ever be. I can't wait for the new addition to our family to arrive in August. Our son will be so pleased to have a younger brother or sister who could share in his love of golf!

On the career front though that's a different thing. I've started work on a small micro-product that I am hoping to launch in the spring. It's a helper for those who like keeping a plain text journal. The idea for the journalling product came after I wanted to continue writing everyday but on a smaller volume than doing my three pages of writing every day. Also I wanted a plain text archive that was in the easiest format to slice and dice as I needed. I've tried many note-taking applications in the past, but none offered the simplicity of plain text. More on that later though.

After that I have my eyes set on a second product that I hope will help people make with their decision making. These might never take off, who knows.

At least I know that I will have tried.

I believe there is a place for this is the world of technology. I think there is a need for a Software Tailor. For instance, you have a text editor that works well but could use just a few changes to make it work perfectly for you. You take it to the Software Tailor and they do that for you. Or perhaps you go to one to build the perfect task management app to fit your specific working style. In my mind, many who program are crafts people and I think there is a growing opportunity and need for such a service by people with these skills.

Bespoke by Patrick Rhone

Patrick Rhone's latest post on software tailoring got me thinking. Software is used by millions across the world, yet I wonder how many people are aware that some of the software they use can be tailored to their specific needs?Yes there are freelance developers out there who specialise in building plugins, extensions or custom versions of software applications, but that's the problem. These developers specialise in one application or product. They won't even think about touching anything else.Sounds to me there might be room for a number of developers who are jack of all trade developers who are prepared to dig into just about any code that is given to them and make the necessary changes.

Just a thought, that's all.

Fifty Easy Ways To Make Life Easier

At the end of the day, plan tomorrow.

Travel light. Regularly empty out the bags and wallet of the accumulated debris.

Write down their names. Nobody minds at all.

Look for the best.

Plan 'down' time as specifically as 'work'

via blog.strategicedge.co.uk

There are hundreds of books on self-help, productivity and organisation. You could spend a fortune on these or just use this list. Click through for the rest of Nicholas Bate's fantastic list for an easier life.

The Dark Side Of IF

Don't do it. Don't dabble with If only. Ban it from your vocabulary for 2012.

Play with if.

You know it makes sense.

The Dark Side of If by Nicholas Bate

Nicholas Bate's post pretty much narrows down my review of 2011. I had a couple of ideas for products but didn't act on them. I spent way too much time dabbling, trying to learn and really didn't get anywhere. With some positive news at home, I can now focus on getting these ideas off the ground.

Nicholas Bate On Fatigue

But the brain-the mind-is not a muscle. It needs distinct periods of rest, of reflection, of relaxation to be at it best. If not-like a solider in combat who has simply seen too much- it switches off in order to be able to cope. And then the deeper problems occur.

On Fatigue by Nicholas Bate

That's my goal sorted for 2012 then. It's something that I frequently do. Always putting things that need thinking in front of getting on the bike or taking my son to the park. No more putting this off. I'm going to start limiting my time on the computer so that I can actually do other things to keep myself healthy.

Some drafts flow while others need to be circled so all the weak spots can be tested. A few need to be neglected. Others deserve banishment.

Draft by Execupundit

I'm just coming to the end of NaNoWriMo, and it's fair to say that I can't write to a level that I would consider worthy of publishing, but I have persevered and I'm at the stage where I have only about 3000 words left to write with two days to go. I'll consider the novel a draft, but it definitely won't be banished.

Working on the finishing touches for a client's website

It's my second bit of freelance work of the year and my second bit of work in providing a website for a client. The experience has taught me a number of things regarding design, but perhaps the most important thing is that there are still hundreds of small companies out there still looking to make their mark on the web.

I'll never make it as a web designer, but there's plenty of business out there for developers and designers looking to earn extra experience and money.

Two reasons why you should blog

I’m pretty chuffed with my blogging habits lately. I’ve covered different topics recently and I’m getting the odd comment here and there. I’m not too bothered about getting masses of people to subscribe to my blog, because that’s not what this about.

There’s 2 main reasons why I’m blogging.

1. It’s good practice for writing

I’m a massive book reader. I’ve been reading fantasy and sci-fi books since I was a kid. When I was in school I spent a fair bit of writing short stories. Then computers became mainstream and I got sucked into programming for the next 20 years.

A couple of years ago I decided I wanted to re-ignite my writing habits and so to give myself some practice, I started blogging about mind mapping. When I exhausted my knowledge of mind mapping, I turned to general blogging about anything and everything.

The whole point of this is that when you’re blogging, you’re writing. When you blog a lot, you write a lot and eventually, well hopefully, you’ll get better at it. I’m hoping that with all this blogging, I’ll become a better writer.

2. It’s out there for everyone to see

Writing for yourself is a great way to get ideas down on paper, but if you want the instant reviews and critique from people then where better than on a blog. Now your writing is out there for all the world to see and criticise.

Don’t be put down by negative feedback though, yes there will be people who criticise the small things, but in that feedback you’ll be able to filter for the negative positive criticisms. Negative, because someone may comment on your writing in a way that you don’t like but agree on, and positive if you can take the criticism and make your writing better.

What next then?

Get a blog and get writing. Simple as that. Dedicate 30 minutes a day to writing about something and publish it. Write about something you specialise in or you’re passionate about. That’s all it takes. Writing is such an over-looked skill these days, yet it plays an important part in many people’s day to day jobs. Everytime you write an email, you’re writing. Creating reports, specifications and documentation is all part of what I do as a developer. If I want to do my job well then it makes sense that I should spend some time writing.

Part of excelling in any career involves how you communicate using any form of medium, whether it’s written or verbal. If you’re a good writer then you can convey information in a clearer way that people can understand and people will notice this. Especially those people in the hiring and promotion positions.

So go on, get writing!