I'm just a couple of months in, and have written my first production Haskell app, a PDF parser for Oregon laws. Programming it feels different, in a good way. Looking over the list below, two themes — easy and fast — stand out. Compared to OO languages: It's easy to jump back in to previous work; easy to test my … Continue reading The Benefits (not features!) of Programming with Haskell
Wifi LAN Performance Test comparing 3 routers and 6 computers
In the past year, I noticed that my wifi had gotten too slow to smoothly ssh from one computer to another. Screen sharing was also very rocky. I began to suspect that either my Macs or my Apple router were seriously under-performing. Ping times are a great performance indicator for the apps that I use as … Continue reading Wifi LAN Performance Test comparing 3 routers and 6 computers
DigBang: Safely unsafe Ruby hash traversal
Here's Hash#dig!, a handy little piece of code I wrote for a project. It's similar to Ruby 2.3's Hash#dig, but raises an exception instead of returning nil when a key isn't found. #dig is to #[] as #dig! is to #fetch Ruby 2.3 introduces the new Hash#dig method for safe extraction of a nested value. It's … Continue reading DigBang: Safely unsafe Ruby hash traversal
Comparing Kanban apps with GitHub integration
I'm working on this for a client: Comparing Kanban project management apps that have very good GitHub integration. So far I've looked at Huboard, Waffle, Zenhub, and Blossom. Blossom.io is the strongest for our needs due to the detailed cycle time reporting, showing where cards are spending their time. It also has some very useful project … Continue reading Comparing Kanban apps with GitHub integration
Web Framework Comparison Matrix
This is how I evaluate frameworks for clients and my own projects. I'm doing my best to be: opinionated about which features matter unopinionated about the actual frameworks So you'll be most likely to find this helpful if you value the same things I do: good CRUD support, good deployment and testing support, and an open and friendly … Continue reading Web Framework Comparison Matrix
Goodbye “X for Y”: the cryptic Ruby error is becoming friendlier
Anyone who's used Ruby has seen this message: r.rb:1:in `name': wrong number of arguments (3 for 2) (ArgumentError) This particular error has been driving me nuts for years. It's just so unnecessarily difficult to interpret — especially if Ruby's not the only language you use. I never remember which number is which. Compare to Python: TypeError: … Continue reading Goodbye “X for Y”: the cryptic Ruby error is becoming friendlier
Infographic: OS X El Capitan License in Plain English
Shortly after I posted OS X El Capitan License in Plain English, I received an email from Bogdan Rauta, a Romanian infographic designer. He volunteered to create an infographic as part of a new project, Infographic Monster News. His idea is to report current news stories in the form of infographics. I'd say he's off to a … Continue reading Infographic: OS X El Capitan License in Plain English
OS X El Capitan License: in Plain English
I decided to upgrade my Mac to El Capitan, but my computer said, on one condition: I must "carefully" read and agree with something. It even provided a tiny cozy display window for viewing it: And so I did what anyone else would: I cleared my afternoon schedule and got right down to business; reading, carefully, the entire document. It … Continue reading OS X El Capitan License: in Plain English
git commit –amend: Have Your Cake and Eat it Too
For a lot of us, version control does two things which are contradictory: it keeps checkpoints as we work so we can easily roll back, and wraps up our work into a tidy package for others to use. git commit --amend is one tool that solves this. It will "open up" the previous commit, adding staged … Continue reading git commit –amend: Have Your Cake and Eat it Too
A Benefit of Rails: Surrogate Keys
Today I helped a client wrestle with a database task which concluded: . . . We'll have to watch out inventing new "fake" customers because one day there may be a real customer with our made up ID 😦 This is a problem in lots of apps, but not in Rails. Rails enforces the "best … Continue reading A Benefit of Rails: Surrogate Keys