CODE Keyboard – The Best Mac Keyboard

I have an addiction to keyboards.  It’s more like an addiction to the pursuit of my ultimate keyboard. I’ve tried many including:

  • Apple Keyboard, wired and wireless
  • Microsoft Ergonomic
  • Microsoft Ergonomic 4000
  • Matias Quiet Pro Keyboard for MAC

Each seemed to work well at first but after a short time their weaknesses surfaced. I was able to return the Matias but I have a pile of lackluster keyboards.

Enter The CODE Keyboard

I used to love the original IBM PC keyboard. You know the one, it was loud and had a very responsive feel. I knew when I was pressing a key, no doubt about it. The feedback is fantastic from the IBM keyboard but those are a thing of the past.

Apple once made a keyboard very similar the one from IBM, but those are also a thing of the past. I understand you can still find them from time-to-time on eBay.

I remembered a post by Jeff Atwood where he talked about his dissatisfaction with keyboards, the solution…create his own. I never thought of creating my own but since Jeff is a developer, then maybe his wants were similar to mine. The result is The Code Keyboard.

The Hardware

code keyboard

The keyboard is actually manufactured by WASD Keyboards, a company known for great keyboards with very flexible configurations.

This keyboard is HEAVY. It feels like the IBM PC keyboards of old. A solid, beefy and well-built keyboard. The CODE website says it weighs 2.42 pounds, but I don’t know which version it refers to.

The keyboard is offered in 87 and 101-key options. I chose the 87-key version because it uses less space and I don’t need a numerical keypad. The key options is what really drew me to this keyboard. Cherry keys switches are used offered in green, clear and brown. I’m using clear and picked these due to sound; of the three the clear switches have the last “click” sound but still offer the tactile feel.  Even though I have the clear switches, they aren’t silent:

Ultra-rare Cherry MX Clear mechanical key switches are the heart of the CODE keyboard. These switches are unique in the Cherry line because they combine solid actuation force with quiet, non-click activation, and a nice tactile bump on every keystroke. These hard to find switches deliver a superior typing experience over cheap rubber dome keyboards – without deafening your neighbors in the process.

The keyboard is backlit, which is really nice. It’s not a feature I required but after having it, I love it. It’s useful when I have the lights off in my office and I’m working.


There are a set of DIP switches on the underside, used to control various functions; such as turning backlighting on and off, keyboard layout (QWERTY, Dvorak or Colemak) and Mac support.


Mac support was critical for me when searching out a new keyboard. I hate having Mac support as a second-class citizen. I want the command key where it belongs, next to the space bar. This is easy with the CODE, just a DIP switch change. The only problem, now the Alt key is in the wrong spot. Thankfully WASD has take care of this for us, they include a keycap puller in the box that allowed me to easily swap the keys I needed.  Really nice touch.

WASD also offers replacement key sets in various colors and custom key sets such as the Mac command key and others. I found them to be a bit pricey so I just stuck with what came stock.


I’ve been using this keyboard for going on 3 months and could not be happier. I use this keyboard for writing software as well as my daily writing, emails and Twitter. It’s not ergonomic and I wondered if it mattered. So far, it has not mattered at all.

The key presses are smooth, no binding, just nice press with tactile response and a clean release. This is how a keyboard should be…no mushy keys. For the same reasons I use an Aeron chair, spending money on a good keyboard is as important as any piece of furniture.

IMG 2671

A nice touch is the media keys on the far right of the keyboard. These keys allow me to pause and play podcasts in Instacast and control the volume. A really nice touch with great positioning.

All the media keys are clustered together for easy reach, not spread out along the top of other keyboards.

I’m hoping this keyboard lasts a really long time because I love using it everyday.


You bet! This is a great keyboard. Considering the keyboards companies dare ship with their computers today it’s not really hard to make something better.  The CODE is great, not just better.

The price is probably what will keep people from buying it. At $171 delivered to my door it’s not exactly inexpensive but either are the other tools I use. A craftsman who has the best tools isn’t necessarily a better craftsman but at least he can’t blame his tools.

If you’re in the market for a really well-built, durable Mac-compatible keyboard then you should at least consider this keyboard.

Website Filtering Using OpenDNS

I happen to have a 15 year old at home who insists on using websites and chat services that distract her from more important academic activities. The ability to apply some website filtering is a topic I’ve learned a bit about over the past few weeks.

I can testify first-hand that the Internet can be a giant waster of time. Services such as ooVoo, SnapChat, Instagram and others can be fun to use and share with friends but can interfere with academic pursuits. We also found an increasing number of websites not family friendly.

Having a conversation with a friend who was facing the very same issues, he suggested OpenDNS. Surprisingly, I had heard of them. I decided to take a look at their free service level.

Setup was really simple. The first step is to switch from using Google DNS to OpenDNS name servers. A quick router change and we were switched over.

OpenDNS has quite a few settings to restrict sites but nothing is turned on by default, so after switching name servers you really won’t be able to tell the difference.  Name lookups seemed to be faster but that’s hard to measure.

Visiting all the settings pages isn’t really necessary but good to see what’s available.

Security Settings

Website Filtering - Security Settings

The security settings are flexible with nice defaults. These are the defaults and I haven’t really seen a need to change these.

Dynamic IP Update

Use a cable provider and have a dynamic IP address? No problem. Simply enabling Dynamic IP Update in Settings allows update of your dynamic IP address with the DNS update client. The client runs on your Mac or Windows PC and sits up in the toolbar just waiting for your Internet provider’s DHCP address to change.

I love when I can just set it and forget it.

Default Settings for Website Filtering

Website Filtering - Custom Security Settings

It’s easy to set a variety of different levels of security. You can view and customize any level. I wanted control over the categories being filtered so I chose the custom level. It’s just as easy to pick one of the three levels (High, Moderate, Low) and just customize their defaults.

Filtering this way takes a big swing at generally offensive website categories. Since each category is a curated list of websites, this may result in some sites being blocked you don’t wish to be blocked and some not blocked that should be. There is an easy way to take care of this “Manage Individual Domains”.

Manage Individual Domains

Website Filtering - Manage Domains

The ability to add domains not on the groups of websites defined by OpenDNS is really nice. You have the ability to add a list of specific domains you want to make sure no one can visit.

You’d be surprised how many websites use doubleclick and googleleadservices. They get blocked and it feels pretty good to stop that bit of unwanted traffic.

Have a website being blocked but you need access? No problem, add to the list of sites you want to never block. Very flexible indeed.

Does it Work?

You bet it works and it works really well. Here is me trying to visit the site:

Website Filtering - Blocked Domain


What good is a service without stats?

Website Filtering - Stats

I can see the total requests on the network, which domains are being blocked and how often, as well as see the domains which are not blocked and determine which are good candidates to add to the blocked list.

Website Filtering - Blocked List


Implementing OpenDNS was really easy. Their onboarding experience was very straightforward.

Previously we had been using Google DNS and noticed slowness at times. Over the years I have felt less interested in using Google services, so moving to different DNS was a nice win.

Using OpenDNS seems to give us really fast name resolution but more importantly websites are being blocked that are not fit for young eyes. It also lets a data geek have good insight into all the domains we access daily and find more candidates to block.

Switched to DuckDuckGo


I finally made the switch to using DuckDuckGo for search, full-time, and I couldn’t be happier.

I tried switching from Google to DuckDuckGo then to Bing and back to Google within the last year. The search results didn’t seem to be a good as Google’s, but that has seemed to change.

I made the most recent switch over a month ago on my main development Mac, which I use most of the day, as well as my MacBook and iPad. Since I can’t switch search providers on the iPad running Chrome, I have to use Safari but it’s a small price to pay.

The problems I used to see with DuckDuckGo was missing search results. I would compare results to Google and the results that helped me most were coming from Google. DuckDuckGo often had irrelevant or the least relevant first. This is not the case today. I spot check the results with Google and DuckDuckGo is spot on or better. When I see poor results in DuckDuckGo, I see poor results for the same search in Google.

Both search engines are good but I feel morally better supporting DuckDuckGo.


Feed Wrangler is My Go To RSS Reader Platform

Colorbanner 2x

July 1 is fast approaching and Google Reader is shutting down.  Many people in the world use this service to read and sync their RSS feeds.  When I heard it was shutting down I was a bit annoyed but not surprised, but today I am anxious for it to shut down so people will stop talking about it.  Google Reader, it’s been nice but not real nice.  Goodbye!

I have found a paid service I am happy to pay for and support, Feed Wrangler by David Smith.  Feed Wrangler costs $19 per year and it developed by someone I believe will do his best to be around tomorrow.   I have officially dumped Google Reader about a month ago and been using Feed Wrangler ever since, and I could not be more happy.

The Apps

Out of the gate Feed Wrangler has a web site that can be used to read posts, mark them read/unread and add to Instapaper.  It works very similar to Google Reader but with *much* cleaner interface.  I never used Google Reader this way, I always used some third-party apps in my Mac, iPhone or iPad.

I have used a handful of client applications for Google Reader over the years and settled on a couple that worked really well on my Mac and iPad.  When I heard about Google Reader shutting down my first concern was what I would use for applications.

Feed Wrangler has free applications for the iPhone and the iPad that work really well.  I found a few little UI bugs or inconsistencies that I needed to get used to, but nothing I was unable to live with.

Thanks to the great API, third-party apps are starting to pop-up with Feed Wrangler support.  Mr. Reeder for the iPad, and most important to me is ReadKit for the Mac.  Both of these applications are fantastic and I am using them now.

The Syncing

The main part of what I consider the syncing platform is the backend web site and API which helps keeps the applications knowing what’s read and what has yet to be read.  This is transparent and should be, I don’t need to know the details nor do I care.  I just want to be able to go from device to device and not have to miss an article or mark something read more than once.

So far, it just works.


One beautiful part of this platform is the open API for developers so they can create any number of client applications.  Did I mention this is a supported and nicely documented API?  Unlike what Google Reader had offered, this will be a pleasure to write application for.

As someone who consumes API’s for a living, the style of the documentation and examples is a lesson other developers should follow.


You have more choice popping up now that Google Reader is shutting down but David Smith has done some really nice work so far and I can only suspect he will new features all the time.

I am very happy and think Feed Wrangler is worth checking out.


Daie algorithms I came across a great book on Algorithms based on a course taught at Berkeley and U.C. San Diego and wanted to share with readers.  As a computer scientist, Algorithms are one of the most fundamental elements of our trade.

Playing on the strengths of our students (shared by most of today’s undergraduates in Computer Science), instead of dwelling on formal proofs we distilled in each case the crisp mathematical idea that makes the algorithm work. In other words, we emphasized rigor over formalism. We found that our students were much more receptive to mathematical rigor of this form. It is this progression of crisp ideas that helps weave the story. Once you think about Algorithms in this way, it makes sense to start at the historical beginning of it all, where, in addition, the characters are familiar and the contrasts dramatic: numbers, primality, and factoring. This is the subject of Part I of the book, which also includes the RSA crypto system, and divide-and conquer algorithms for integer multiplication, sorting and median nding, as well as the fast Fourier transform. There are three other parts: Part II, the most traditional section of the book, concentrates on data structures and graphs; the contrast here is between the intricate structure of the underlying problems and the short and crisp pieces of pseudocode that solve them. Instructors wishing to teach a more traditional course can simply start with Part II, which is self contained (following the prologue), and then cover Part I as required. In Parts I and II we introduced certain techniques (such as greedy and divide-and-conquer) which work for special kinds of problems; Part III deals with the “sledgehammers” of the trade, techniques that are powerful and general: dynamic programming (a novel approach helps clarify this traditional stumbling block for students) and linear programming (a clean and intuitive treatment of the simplex algorithm, duality, and reductions to the basic problem). The nap Part IV is about ways of dealing with hard problems: NP-completeness, various heuristics, as well as quantum algorithms, perhaps the most advanced and modern topic. As it happens, we end the story exactly where we started it, with Shor’s quantum algorithm for factoring.

The examples are fantastic and very inclusive, ranging from Fibonacci and sorting to graphs, NP-completeness and Quantum algorithms.  The book is 336 pages and has something for everyone. There’s a lot of math combined with some fine pseudo-code but don’t be dissuaded. Lots to learn, ponder and apply.   Enjoy!

No Love for

There has been a huge buzz around the Kickstarter project,, on the web these days.  I have no intention of supporting them, ever.

It’s a valiant effort but that’s all it really is.  I think of this project is just designed to make a statement, one against Twitter.  Sure, they raised some money but who from, folks angry with Twitter.  It raised over $500K on Kickstarter, but as we all know money does not ensure success.

I like Twitter, I don’t agree with everything they do and I certainly don’t think they care about me or what I have to say but nonetheless, they are were its happening these days in the social world I care about, way more important to me than Facebook.  It’s interesting to watch those people who backed, come over to Twitter to claim their support for……on Twitter.  It’s comical, they pay $50 to someone who is anti-Twitter, yet they come to Twitter to waive their hands in support of the “other” platform.

This should say it all.  If you want to be heard, you come to the place all the people who matter are hanging out.

MG Sieger, who is a respected journalist in our industry put in his 2 cents and it sums up what I have been thinking since the beginning of is not going to succeed because we don’t really want it to succeed. Deep down, we all know that it’s much better as an idea, rather than a reality. Because the reality of the situation is that if ever was successful, it would face many of the same hard choices that Twitter now does. Or it would fade away.

As pointed out on TechCrunch, another project to create a clone of Facebook, never quite took off:, of course, isn’t the first company trying to disrupt Twitter and/or Facebook. The most prominent recent entrant in this market is probably Diaspora, which ran a Kickstarter campaign to get started. While it’s still under active development, the project never quite took off. wants to be the next Twitter but faces all the challenges and so much more.  They also want $50/year for the privilege.   Why?  Not me, I’m happy right where I am.  Maybe Twitter is angering some developers because it effects their tool or maybe angering users because their tool of choice may face some struggles but all-in-all, Twitter is good for what it does.

Impressions of the Google Nexus 7


I watched the Google I/O keynote, suspecting the leaks were right about the Nexus 7 tablet and they turned out to be true.

I got in the queue for one of these and have been using mine since the middle of July.  The short version is; this is a fantastic device that I love to use.


I am an owner and user of all the Apple iPads.  Since the first version these have been my primary means of content consumption beyond my Mac Pro and MacBook Air.  The iPad is a great size for sitting on the coach and catching up on reading, surfing the web or responding to emails.  In general, I use the iPad more than I do my MacBook Air when sitting around at night.  The real exception, when I need to write something lengthy and I want more of a touch typing experience.

I do own a Kindle 4 and we have a Kindle Fire in the house.  These are also great devices but they tend to be Amazon content consumers and not a general device.  Honestly, not used much since the iPad has the Kindle application.

The Hardware

I would call this device the same size as the Kindle Fire.  It’s nice when you have the latest cutting-edge device, one that ships with a Quad-core Tegra 3 processor, 1 G of RAM and an amazing 12-core GPU and runs the latest Android Jelly Bean v4.1.  It’s just plain fast.

I don’t play many games but I do use some graphic intensive applications, mainly related to astronomy and rendering star charts.  Using these apps on this device, the rendering is extremely smooth.

One thing I like about my Kindle 4 is the battery life, it lasts forever.  The battery life reported on the Nexus 7 is 10 hours for most tasks but I think it is longer.  I use the device a lot, I mean a lot and I am only charging once or twice a week.  Not exactly scientific but it lasts a long time.


There is a lot to be pleased with in the hardware and overall presentation.

  • Did I mention it’s fast?  Oh yes, it is fast.
  • There lots of software that run on it already and done very well.  Flipboard, Kindle and Instapaper are great examples.
  • Nice controls, consistent and non-hardware except for volume controls.
  • Great integration with Google Play.  It’s easy to get applications, videos and music.
  • Video play is really smooth.
  • Audio quality is great.
  • Text rendering is really sharp and smooth.  This one bothers me on pre-retina iPads.  The text in the Kindle app is not as nice as it could be.  
  • Size – it almost fits into a shirt pocket.  It’s a lot less bulky than the iPad


There is always a few issues with anything new and the Nexus has a few, some are probably my lack of understanding and are not even Nexus 7 specific.

  • Not all of the applications I use on the iPad are available on the device, but it will get better.
  • Not all of the applications I found for Android run on this device, will also get better.  
  • When using the browser, the fonts are often so small that their hard to read and I have to zoom in.
  • WiFi-only – I own 3G iPads and I never have to worry about having an Internet connection but with this device I do.  Not huge, but a factor.
  • Orientation is locked by default.  I lived with this until I figured out that it could easily be turned off. 
  • Headphone jack on the bottom, wish it was on the top.


I love the Nexus 7, it fits nicely into my collection of devices.  Devices I actually use.

I have been critical of the other Android tablets I played around with, too many have iPad envy.  The Nexus 7 is trying to be its own device in its own form factor, one that is a nice size.

I’m looking forward to the next version of this, maybe one with 3G so I can keep the Nexus 7 with me and use it for navigation.  I use my iPad this way today, and it’s just a bit too big.


Tweet Less, Blog More and Keep Your Content

Update your blog

Scott Hanselman had a great piece of the weekend about controlling your content destiny by blogging more and “tweeting” less.   I use “tweeting” as the generic term for putting content on social networks like Twitter, Facebook and Google+.

In the past year or so I admit to blogging less and “tweeting” more.  I spend a fair amount of time on Twitter and an increasing amount on Google+, but the truth is, Scott is right and those places don’t care about me at all. 

You are not blogging enough. You are pouring your words into increasingly closed and often walled gardens. You are giving control – and sometimes ownership – of your content to social media companies that will SURELY fail. These companies are profoundly overvalueddon’t care about permalinksdon’t make your content portable, and have terms of service that are so complex and obtuse that there are entire websites dedicate to explaining them.

I think the reason blogging is in decline is because sharing a thought is so much easier on Twitter.  In 140 characters you can get a thought out and be done.  Blogging is a craft which takes some to evolve the thought into something someone else might want to read. 

Twitter cares only about Twitter which is shown by their recent announcement of upcoming API changes which mainly stick it to developers.  Pay-for social networks like are popping up which claim to allow users to keep their content.  I’m sorry, but no way I am forking out $50 for a Twitter clone.  

Also remember, blog for yourself, not for the audience.  Say what you want to say because it’s your soapbox to do so.  Blog on.


Best Earphones Ever: Bose MIE2i Mobile Headset

I have been using an iPod or some such device for many years now.  Today I use an iPhone 4 to listen to podcasts during a daily hike and have had a hate-hate relationship with every set of earbud or earphones, whichever you prefer to call them.

It seems people use the earbuds that are shipped with every iPod and iPhone, but my personal experience with them is less than acceptable.  They often fall out of my ears at one point or another, I feel I need to be careful how I move or I risk one coming out.  Apple has some great designs, these are not one of them.

I decided to go with an in-ear earphone with the hopes seating in the ear canal would stay better, give better sound and get me away from Apple’s ear buds for good.

My requirements seemed really simple, let me listen to podcasts, stay in my ear and let me take/make calls on my iPhone.  

The first set of new earphones I tried were the Logitech Ultimate Ears.  These came as a recommendation so I figured I would give them a try.  Upon receiving them I immediately thought how great the design was and trying them for fit, they felt great.  Listening to a podcast with these was amazing, great noise-cancelling sound that was above and beyond what I expected.

The real test was using them on a hike.  At first these felt really good and I thought my problem was solved but as I started to sweat the very soft silicone earphones started to get slippery and nothing I could do would make them stay in my ears.  As I dried them off and reseated them, as I walked I could feel them slowly moving and eventually they fell out.

I did give these a fair shake over the next couple weeks, trying different things which included trying different size of the silicone adapters themselves but nothing worked, sweating eventually caused the earphones to dislodge.

I decided to ask around on Twitter again and got a single suggestion for Bose earphones.  Describing my dilemma the person said their wife used them and were very happy with them.  Unfortunately, they are pretty expensive at $130 but my frustrations seemed larger.  I ordered a pair and at first site they look pretty strange.

The model I ordered were the Bose MIE2i Mobile Headset.  You can see from the image that they are different looking.  They have a very unique way of partially going into the ear canal as well as hooking to the ear itself.  Very easy to put in and the Bose sound is incredible.  

Mie2i headset bw lg

I have had these earphones for about 2 months now and use them every day. Not once has one side come out or even remotely felt loose.   The sound is the best I have ever experienced and the controls work fantastic.  I have had several phone calls with them, both receiving calls and making them and they just work.

So, for anyone looking for a truly great set of earphones..look no further than these.  

Joining MarsEdit and Dropbox

I use MarsEdit from Red Sweater Software as my exclusive blogging tool on the Mac and have over the last couple years.  I tend to write lots of draft posts on my desktop Mac Pro that never get published or I work on them when I can before pushing out to my WordPress blog.

I also use MarsEdit on my MacBook Air when I travel or even if I am working on the couch in the evenings.  All of the drafts in MarsEdit are saved locally on the computer I am going the writing and once I want to be able to edit from the other computer I end up pushing as a draft to the blog and pulling it down via MarsEdit.  This is a tedious task and has problems.  I don’t know how many times I pushed up a draft and forgot I did a few days later only to work on an old draft locally.

I then had the idea of possibly setting up MarsEdit to save local drafts to Dropbox but there didn’t appear to be an option in MarsEdit to change the location of local storage.

But…there is usually a way to do anything.

The steps below worked great for me, you mileage may vary.  If Dropbox is installed in its default configuration then these instructions should work for you.  I configured my systems with my Mac Pro being the “main” system and my MacBook Air as the secondary.  I had local drafts on my Mac Pro but NOT on my MacBook Air.  If you follow these steps exactly and have local drafts on each system them you will lose data.

Without further ado, follow these steps.  I assume you know how to open a terminal sessions and feel comfortable typing command.

1. Make sure you quit MarsEdit from each system you are going to change the location of local drafts.

2. Find local MarsEdit drafts on your main system – A bit of spelunking reveals where they live in:

~/Library/Application Support/MarsEdit/LocalDrafts

3. Create folder for drafts in Dropbox.

mkdir ~/Dropbox/Library
mkdir ~/Dropbox/Library/MarsEdit

4. Move the local drafts from the main computer to Dropbox, enter these two commands:

cd ~/Library/Application\ Support/MarsEdit
mv LocalDrafts ~/Dropbox/Library/MarsEdit/LocalDrafts

5. Now let’s fool MarsEdit into thinking nothing has changed.  Symlink the old name to the new location.

ln -s ~/Dropbox/Library/MarsEdit/LocalDrafts ./LocalDrafts

Now, on each of the other machines start with step 6.

6. Remove the local draft folder (if it’s not empty and delete you will lose data).

rm -rf ~/Library/Application\ Support/MarsEdit/LocalDrafts

7. Time to fool MarsEdit here too. Symlink the old name to the new location.

ln -s ~/Dropbox/Library/MarsEdit/LocalDrafts ./LocalDrafts

Repeats steps 6 and 7 for each computer you need to share local drafts.

Once you start up MarsEdit on each of these machines, you should see the same local drafts.  If not, then double-check the steps above.