This helped today. https://gist.github.com/benkeen/339af429dbac2c026c3d
Alright! We’re now (mostly) moved over to our new house on Bowen Island, BC. It’s beautiful, wow. Amazing house and area, super friendly neighbours. Incredibly quiet, save for a deafening Barred Owl that hoots outside our window all night.
Just settling into the patterns of island living: working around ferry schedules, planning trips to the mainland to pick up necessities. Lots of logistics, but manageable.
Tonight I think there are enough boxes unpacked that I’ll have time for some programming & responding to emails. Exciting! (I’m serious).
And loads of birds, wow. Black swift and common nighthawk seen daily, what a treat. Our feeders are overrun with a huge variety. Lovely!
A few things to report. Lately I’ve released a few small updates to d3pie and country-region-selector, and in a temporary fit of enthusiasm wrote a small script to help me start cataloguing my birding pictures. Bit delinquent of me, considering all the other work I should be doing, but hell it was fun… and it paves the way for great things down the road.
The generatedata issue mentioned in the earlier post has been fixed. I’m really not sure what happened there… re-running grunt generated a different, valid JS file. Very curious considering nothing changed.
On a personal note, my wife and I are moving to Bowen island next week – a small island just NW of Vancouver, within commuting distance. So we have a couple of hectic weeks ahead of us getting packed, purchasing stuff for the new house, and setting fire to our current house and walking away Vladimir Putin-style. We’ve been looking forward to this for… years? That probably wouldn’t be an exaggeration.
For my part, living on Bowen should mean a much more relaxed lifestyle: less driving, more time at home. I hate driving – it stresses me out – and Vancouver’s far too big a place for me. My current job lets me work from home, so it’s perfect.
The one big downside to island living will that it’s going to mean a lot less birding. That’ll be a shock to the system: I’ve ramped up a decent bird list this year (around 420) and 269 of them in BC. It’s become part of my lifestyle. But post-move, most of my spare time will be working on the house. It’s in great shape, but houses always need work – and we need to create an outdoor cat run, so our cats don’t run wild and eat all the neighbourhood birds. That’ll take a month or so.
Anyway, I have high hopes that once everything’s died down and I’m ensconced on Bowen I’ll have more time for thing. Namely: Form Tools, that old beast.
I’m going to be away for the next 10 days or so, popping down to the San Francisco area for the ReactJS conference this week. Afterwards, birding in Mexico!
Sorry if I don’t respond to anyone in good time; I’m not sure what the internet situation will be like while I’m away.
I’m very excited to say I’ll be starting a new position at IBM Cloudant next week. The position looks exactly what I was looking for: as soon as I read the job description I was hooked. A lot of my time will be devoted to open source, working on a new admin UI for couchDB called Fauxton. Working on a large open source project is something I’ve wanted to do for some time; all of my own projects are quite modest by comparison. The job will also let me work remotely, which is ideal. My wife and I have been planning to move to Bowen Island for some time, and being able to work remotely fits very well into that plan.
But boy it’s been a crazy few weeks…! My poor wife has been very sick and stuck in the hospital for weeks. She’s not out yet, but yesterday there were some signs she’s improving, thank heavens. Hopefully she’ll be up to snuff soon, but in the meantime I’m spending the majority of my time in the hospital or running errands.
So with this and the new position, I do apologize if I don’t respond to emails terribly promptly. Due to Sarah’s health I cancelled some short birding trips I had planned (California, Mexico + Tofino) and I’m very glad for it.
I posted this on formtools.org, but thought a second post here was in order. A good day. :)
As of today, I’m returning to work on Form Tools. Woo! Exciting day! In case you’ve no idea who I am, I’m not surprised – I’ve been a bit of an absentee landlord the last couple of years. My name’s Ben Keen, I’m the lead developer. I was the guy that created Form Tools 10 years ago this summer (whoah!).
Maybe I should start with a little history.
Three years ago, thanks to my business partner Joseph Lo and a grant from the British Columbia Institute of Technology (BCIT) I was able to quit my job and work full time on Form Tools, working to commercialize the script and make it into a viable business. This gave me time to work on such features as the premium Form Builder and Data Visualization modules – both of which have greatly enriched the project. A big thanks to everyone who’s purchased them!
So I’ve been working on a new open source project recently: a pie chart script and generator called d3pie. It’s coming along pretty well, but taking waaaay longer than anticipated. So I figured a screenshot might be in order.
It’s pretty wicked. It has a ton of controls for customizing the pie exactly as you’d like, from spacing to fonts, colors, sort order, load effects, mouseover effects, tooltips, label positioning, footer text, and more.
Script coming soon… I’ll post again when it’s available.
I wanted to write a technical post about a project I’ve undertaken in my job at CBC Music this last year: the refactor of their mobile site codebase. Since starting at the CBC last May (2013) my chief responsibility has been to lead this project, so it was great to see it launch last month.
Maybe I’ll start by outlining the problem I was tasked to solve.
The mobile code – which was already out in the wild when I joined – was perfectly decent, but lacked scalability both in terms of the overall code architecture and in what was doled up to the client. The JS was arranged in a simple object namespace, which was generally quite readable but had already led to a great deal of unnecessary and unfortunate coupling.
Worse, all JS was sent to the client on initial page load. Each and every sprint (we were on a weekly sprint cycle at the time) led to 10KB, 20KB, 30KB+ increases of the resource size and they knew that this problem was only going to be compounded over time.
What we needed was to update the codebase for on-demand loading, and rethink the overall JS architecture for a simpler, more formal structure to improve the overall code quality, and to make it simpler for junior developers to work with it.
So here’s the 2013 birding sum-up. I ended up with 245 BC birds (ranked 18th on the eBird list), 258 in Canada (92nd in Canada), and 390 year birds in total. Not too bad! But this year I hope to crank it up a notch.
Today I did an informal Big Day and saw 62 bird species around Vancouver, including a couple of long-eared owls (Boundary Bay) and a couple of snow bunting (Tsawwassen Ferry terminal jetty). Fun day.
Now back to work + open source. :)
I just released my very first Grunt plugin – and npm package – that searches a codebase and logs the findings.
Errr… what’s Grunt?
Grunt is the best thing since… you name it. It’s a build tool that allows web developers to run whatever “grunt” tasks they need, like minifying JS or CSS, Sass generation, file bundling, file renaming, moving, etc. etc. Basically it’s a one-stop shop for all those nagging things you need to do when deploying a site. I’ve been using it for various recent personal projects (generatedata.com, birdsearch.org) and for my day job. But one particular piece of functionality I found I couldn’t do, was a simple search-and-log.
There are a bunch of search-and-replace Grunt plugins out there, but for my job at the CBC, we needed something simpler for logging purposes only. We wanted to run various tests on our codebase to look for certain things: inline styles, inline event handlers, old, unwanted HTML tags, etc. None of these weren’t significant enough to warrant failing the build, but they do give a clue as the health of the codebase.
So basically, we run this function along with jshint in our dev environments to warn us about the accumulation of crap.
It’s fairly well documented, and can be downloaded via npm:
The source code is all found on github: