Developers and “Ring Rust”

Skills are much like muscles: if you don’t use them for a while they start to atrophy. They say you never forget how to ride a bike, but there are many skills where you will forget things if you don’t do them frequently. The collection of skills needed to be a developer are no exception to the rule.

I’m somewhat speaking from experience here; my current role and workload has removed me from day-to-day development work for about a full year now. I still need to dive in to the code base every day to research issues or change requests, but actually writing something is quite rare these days. I’m aware of the skills problem, and I’ll describe below how I’m trying to address it, but never the less I’ve been self-concious enough about it I’ve recently found myself resisting taking on development tasks. I know it’ll take me a lot longer to get up to speed and complete as one of the developers who’re working on the application every day, and the time-scales involved are usually very tight. It’s a vicious circle: I’m rusty because I’m not doing development, but I’m avoiding development because I’ve been away from it for too long. In the corporate world it’s very easy to get rail-roaded into a niche – and incredibly hard to get out of it.

Time away for a developer is exacerbated by the speed in which technology and techniques moves forward in our industry. What was cutting edge a year-ago is old-hat today, and may even be something you’re encouraged not to do any more. If you haven’t been practising and keeping up developments then you may not be aware and get yourself into all sorts of bother.

So what can you do?

Read. Lots.

Subscribe to a load of developer sites and blogs in Feedly, for one source, but a more convenient way I’ve found to stay on top of things is using Flipboard:

  • Follow other developers on Twitter (actually, you don’t have to, but it’s nice to), and create/add them to a list, such as “Developers & News“.
  • Within Flipboard, add your Twitter account if you haven’t already.
  • Still within Flipboard, go to your Twitter stream. Tap your name at the top and select “Your Lists.”
  • Open the relevant list, then tap the subscribe button.

Your list will be added to your Flipboard sources and you’ll have an always-up-to-date magazine of what’s happening. The reason I suggest Flipboard is that it grabs the link in a tweet, pulls in the article, and will try to reformat it into something you can easily flip through. It makes reading on a tablet so much more enjoyable. Some of the links you get will not be relevant, but a large amount of it will be gold. I try to set aside 30 minutes a day to go through at least the headlines. If work is exceptionally busy I’ll aim for twice a week. Saving to a “Read it Later” service like Pocket is useful for storing the most interesting articles.

What about books? Yes, by all means, read plenty of technical books. They’re usually in far more depth than even the best online article. With tablets, eReaders, and eBooks, the days of thick tomes taking up lots of space are behind us, and no longer a major concern (at least for me). There is however, one major issue with books – they take a long time to write, and are often out of date quickly. The technology might have moved on by the time the book is published. Schemes such as the Pragmatic Programmer’s “Beta Book” scheme help a lot here – releasing unfinished versions of the book quickly and often, to iron out problems before publishing. Of course, you also need to be aware of the topic to be able to pick out a book about it!

Be Curious. Experiment.

Reading all the material in the world will not help you anywhere near as much as actually doing something. The absolute best thing you could do would be to develop side projects in your spare time. Admittedly, if you’re busy, time can be at a premium! Probably a good 99% of side projects I start lie unfinished or abandoned, simply for lack of time. So instead, I perform small experiments.

Curious about something? Do something small to see how it works, or “what happens if…”. Personal, recent, examples would be:

  • Looking into static site generators, and as a result, learning about Jekyll, Github pages for hosting… and as a result of trying out Jekyll templates I brushed up on Responsive Web Design, looked into Zepto, and fell in love with Less.
  • Trying out automating development workflows – installed Node.js (which then allowed me to run this), setup some basic Grunt.js tasks, Imagemagick batch processing, and some more Less.
  • Running Linux as my primary OS, and no Windows partition to fall back on – so in at the deep-end if something goes wrong… but it’s helped me brush up on my MySQL and Apache admin skills again, as well as generally working with the command-line again. The other week I fixed someone’s VPS for them via SSH  - something I would have struggled to do only a few weeks ago. In case you’re interested: the disk was filling up due to an out of control virtual host error log, which I had to first diagnose, and then reconfigure logrotate to keep the site in check.

An earlier example, from before I was entirely away from development: I wanted to see what was different in CodeIgniter 2, so I made a very small app. My curiosity then extended into “how does Heroku work?” – so I deployed to Heroku. I couldn’t pay for a database I knew how to work with, so I tried out a little bit of MongoDB. Then it was the Graph API from Facebook… so again, I extended the application, this time with the Facebook SDK.

Little experiments can lead to a lot of learning. I would never claim to be an expert in any of the technologies I mention, but neither am I ignorant.

Shaking it Out

I’d still need a major project to focus on and really shake off the “ring rust,” to get back up to full development potential, but I’m pretty confident it wouldn’t take as long as if I hadn’t been working on the trying to keep my skills as fresh as I can.

About these ads

Smartphones, Social Interactions, and Disconnecting

No doubt by now you’ve seen the video above – “I Forgot My Phone” – a fairly sobering take on how social interactions are being affected by the rise of smartphones. Yes, it’s a little bit embellished for “shock” value, but there’s definitely some truth to it. I meant to share it last week when I first found it via Twitter, but this article on the New York Times reminded me about it, and I thought I’d share a personal anecdote along with the video:

Being “that” guy who pulls out his phone in the middle of dinner/a date/conversation is something I’ve been wary of for a a year or two now. Even though, I’m sure I’ve still been him more than once. Possibly the majority of us (certainly those of us with smartphones) have been at some point. We pull out and check our phones constantly, often ignoring the people around us in the process – sometimes for an imagined notification. And then we wonder why our batteries never last a full day…

The last 6 weeks I’ve been forcefully trained out of the habit, and I’m kind of glad. The office I’ve worked in since the end of July is a bit of a black spot for data connections. I can get a weak GPRS (2G) connection if I’m lucky – there’s also no WiFi in the office (shocking, I know!) to use as a back-up. Most apps time out on me with anything less than HSDPA it seems, so I can no longer use my phone as a distraction while I’m in the office. Slowly but surely I’ve found this lack of checking my phone has even crept into the days I’m working at home – on these days it’s not unusual for me to finish the day on 80% battery or more!

My current disconnect from Facebook has been both strengthened by, and in turn reinforced this new habit and the idea I don’t need to be checking my notifications all the time. I’m finding that even if I do hear the tell-tale “ding” of a notification I’m less likely to rush and check it immediately. I may be imagining it, but I’m feeling a little less anxious these last few days, perhaps because I’m finally at a point I’m not anticipating when my phone is going to go off next.

If you wanted to try something similar for yourself, you can fake it by going into your phone settings and turning off 3G and/or 4G connections. It won’t work for everyone, but it’s worth trying for at least a few days, right?

Another thing you can try with friends as a means to reclaim your time together is any time you are together is play a variation of the “Phone Stacking Game”. See the image at the bottom of this post for the basic rules.

These days I’m checking/using my phone during the times I’m commuting, while heading to the shop on my lunch break, or otherwise as and when I feel like it while I’m on my own. It’s quite nice to own my smartphone again, rather than it owning me.

smartphone stack

A Blog is a Bonsai. It Needs Careful Pruning and Feeding.

I’ve spent some time this weekend making doing some much-needed housekeeping here, in order to keep it tidy and in a healthy state.

I’ve always found good blogging is more than just adding post after post. It takes a bit of effort behind the scenes; tending to the older content, keeping the “static” pages fresh, and removing any crud that’s accumulated in the sidebars. Keep these things in order, while feeding in good content, and your blog will grow. At least, that’s my theory. Things are slightly different on this particular blog, because it’s a personal blog, not a topic blog – so growth isn’t a primary concern. Hence the title: it can grow and be healthy, but I don’t expect it to be big.

With all that said, what have I been up to?

Site Theme

I decided the new(ish) Twenty Thirteen WordPress theme just didn’t work for me or how I see this site. It was nice and colourful, and good to have as a change, but it wasn’t really “me.” Instead, I’ve switched back to the “Standard” theme (which has been “retired” it seems), with a few tweaks. It’s more structured, and described as a “meticulously designed, hand-crafted theme.” I like things to have a bit of craftsmanship to them, and within that show an element of “control”; Twenty Thirteen felt just a little too chaotic for my tastes. I may still adjust some small parts, but mostly I’m happy with things now.

“Elsewhere” Links

For a while now I’ve maintained a sidebar list of other places you can find me: social media, profiles on various sites, etc. I’ve tidied this up to remove services I no longer use, or don’t use frequently enough for you to bother with. The  four sites in the sidebar now represent the other places you can find me, that I care about. Apart from Google+… not many people really care about that one, and I’m no different (maybe one day). Google+ is there to maintain my authorship information in Google.

Pruning Dead Content

Last year I would cross-post a lot of my Instagram shots over here. Then I deleted my Instagram account, and all those photo posts started showing as broken images. I’ve finally got round to clearing them out. I may have missed one or two, so if you spot one, please let me know!

Consolidation

Over the last couple of years I got it into my head that my blog had to present a “professional” image. An employer (or potential employer) might read it and decide not to hire me based on something I posted. As a result I fragmented my personality across the web, using a different site or service to post content in tailor-made silos. This site was just for technical posts which would show my expertise and how “professional” I am.

It was a stupid idea. It was stressful to maintain, and not as enjoyable. As a result, each site would languish for months without any update, and anything I did post was as much out of guilt as anything. I’ve given up trying to manage these sites, or “reboot” them. From now, this site represents the one “true” me. If an employer isn’t going to hire me over, say, one of the hobbies I’ve written about on my blog, then chances are they’re not somewhere I’d be happy to work at.

I will still use some services for specific needs: Twitter for things too short to fit here, and quick conversations; Facebook or Flickr for sharing photos of the kids with family or close friends, etc. Anything else should end up here. I’ve already imported the content of some other blogs into the archives, and I’m picking through an export of my old Tumblr, to see if there’s anything there worth adding (not likely!).

Re-Injecting the Personal and the Personality

Directly related to what I’ve written above, it struck me when I was reading through the old posts I recovered from previous incarnations of this blog, was how personal I used to get on here. That has been missing for a few years now, and as a result, a lot of the personality and “voice” has gone. Somewhere along the line I became overly private and cautious about what I was posting, and I honestly don’t know or understand why any more. It can’t just have been the employer reason mentioned above. Did I think I would be seen as some sort of narcissist? This is something I will try to address going forward. I’m also thinking about addressing it going back too. There are large gaps in this blogs chronology which could easily be filled with retrospective and back-dated entries about what was going on at the time. Some of it could even be quite useful for myself, as a way to reflect.

I’m not 100% certain though. While it could end up OK, I don’t want to post something inaccurate because my memories of the events have been tinged or faded by time. Especially where there’s other people involved. It’s OK to make a mistake about something just about me, but it’s not OK when it could impact or upset someone else.

I have made a baby-step of a start though. I have added some photo galleries to the site. Most were taken in the last year, but I’ll be going back and picking out other suitable subjects/events to post up. Galleries are backdated to the event/date they were taken, to distinguish “old” ones from any I post in the future. There will be a mix of subjects, from holidays, random photo-shoots, modelling projects… whatever really!

What Next?

Going through this exercise ties-in to some thoughts I’ve been having recently about my “digital identity,” who controls it, and what it means. These thoughts inn turn, have spun out of me stepping away from Facebook for a while. I’m trying to shape these thoughts into something fully-formed so I can share them on here.

Forget Deleting: Even Deactivating Your Facebook Account Can Be Difficult

My Deactivated Facebook Profile

On Thursday night I deactivated my Facebook account. It’s something I’d been considering for a while, as I’ve found using Facebook lately to be less a useful “checking up on friends and family” thing, and more something slightly depressingly monotonous which I continue to do out of sheer force of habit. It just so happened on Thursday there was a trigger which finally led me to push the button.

I admit, for a moment, I did consider deleting the account full-stop. Deleting you Facebook account is notoriously difficult to achieve. It seems to have gotten better and easier over the last couple of years, even before you consider services such as the new JustDelete.me.

For better or worse I decided that in all likelihood I would return to using Facebook one day… that this was just a temporary hiatus to give me space to clear my head. So, as the title of the post indicates, here came the hard part.

The process of deactivating your account in itself is “reasonably” straight-forward: Go to Account Settings > Security, then click the small link under the main list of options. Facebook will first try to emotionally twist your arm into staying, by showing big profile pictures of some of your friends. It’ll ask you why you’re leaving, then ask for your password, and then, just to be sure you really, really, really do want to deactivate, present you with a CAPTCHA image for verification. So far so simple. The difficulty comes in staying deactivated.

Deactivation only lasts so long as you stay logged out of your Facebook account. Log back in for whatever reason and it’s instantly reactivated again. Fine, just stay logged out then? OK, consider how many sites, services, even apps on your phone connect with Facebook, or even use it as their user login mechanism (the “Facebook Platform”). My iPad is logged in and connected to Facebook at the OS level, never mind using an app. Now factor in how many other computers you might be logged into Facebook using – often this could be 2 or more (say, home plus work). In my case I had to unlink iOS on my iPad from Facebook; uninstall the Facebook app from both the iPad and my phone; uninstall the Facebook Messenger app from my phone; logout from Facebook on my work laptop and some browser sessions on my iPad; change my OpenID settings on StackOverflow; and log out/change settings on a few other sites and apps… All so I could be as sure as possible my account wouldn’t spontaneously reactivate itself. There’s probably some that I’ve missed, so chances are I’ll need to deactivate again at some point.

I’m not (entirely) blaming Facebook for this though. Facebook has had to grow, and has done so by spreading itself across the web, to be more than just a profile and social stream. By wanting to opt-out of a profile for a while, I can no longer “like” an interesting blog article; I can’t try out that buzz-worthy new service or app that relies on logging in using Facebook; I can’t click that link to the apparently-hilarious cat meme my workmate just posted… OK, I’m not really going to be bothered by that last one, but you get the idea… there are now certain things – increasingly common things – I can’t do on the web any more, just by wanting out of Facebook for a while.

Rage Shake

…If they run across a problem in one of the Android (or iOS) apps, they can take advantage of a bug reporting feature Facebook builds into its internal betas.

It’s called “Rage Shake” and the name is spot-on. Employees just violently shake their phone and it automatically logs its current state and sends in details to Facebook’s mobile bug-squashers. The Google+ team apparently also has a “Rage Shake” feature and even gave access to it to end users, though it’s unclear which company had if first.

By avoiding a more complicated manual reporting process, Facebook maximizes the number of bugs it hears about from its 4,000 employee-testers. If Facebookers like the taste of Droidfood, they could make sure it’s not their actual users shaking their phones in fits of anger.

Sounds like a neat way to pick up a frustrating bug. I wonder how it works with the native iOS “shake to undo”?

Via Techcrunch

Remove Declined Facebook Events from the iOS 6 Calendar

If you’re using a device with iOS 6, and have enabled Facebook Integration, you may have noticed its annoying habit of displaying events you have said you’re not going to. I don’t know about you, but I like to keep my calendar looking as clean and concise as possible. Any invite I decline gets removed immediately to avoid any confusion.

That Facebook Events would still appear even after I had declined was an annoyance – and I hope, a bug. What exacerbates the issue is there is no way to remove the event from the calendar app manually. The straw that broke the camel’s back, however, was one particular event which instead of repeating every Thursday, showed as running every day for the next few years. Every. Damn. Day.

I needed a solution to this. In the end, I hit on two things which must have sorted it… one of them worked, I’m just not sure which. “Huzzah!” for clear documentation!

1. Remove the Event through the Facebook Website.

Hover over the event in your event list. A blue “X” icon appears in the upper-right corner. Click it.

2. Change your Event Settings to Hide Declined Events.

In the upper-right of the Events page is a small cog icon.

Click it, then click “Settings” in the drop-down menu.

In the dialog box which appears, untick the box to “show declined events”.

Everything Wrong with the Facebook Mobile App, in One Picture*

screenshot of the facebook mobile app, highlighting the wasted space and wrong priorities

I don’t know about you, but if I’m checking Facebook on my iPhone, my priorities are one of two actions: add something new, or see the latest from my friends. So it baffles me that they would devote so much space at the top of the main view to friend suggestions. That feature is not important to 99% of mobile users, 99% of the time (yes, numbers plucked out of thin air… so sue me). By all means include the friend suggestion feature, but put it in the friends view.

[*] Yes, the image is slightly contrived by showing the screen in landscape orientation, but not much. I see one extra status update if in portrait view.

Using the Facebook PHP SDK with CodeIgniter

the CodeIgniter logoMost of my small personal projects tend to get built with CodeIgniter (CI), which is a simple to use, fast, lightweight PHP5 MVC framework.

the Facebook logoFor a while now I’ve had an itch to build something fun against the Facebook API so I can start learning how Open Graph works, and as a primer to building a “proper” Facebook integrated application. I also realised I hadn’t actually tried using CodeIgniter 2.x since it was released (quite some time ago). With an abundance of free time this weekend it seemed like the perfect time to get hacking!

Before I could build anything I would need to know one thing: just how do you connect a CodeIgniter app to Facebook?

Continue reading