Posts


Leaving Their Clouds

How to take back control of your Smart Home devices, and keep your data private.

Vulvic Thoughts

Thoughts, & observations since acquiring a vagina.





2025 Reading List

Some quick thoughtsh on the books I’ve read in 2025



What You're Doing Now

What you’d have done during the holocaust is whatever you’re doing now. So, what are you doing?




The Joy Of No Batteries

A meandering post about the joys of Scheme and working harder to do simple things.

Feature Chats

A casual look a the power of discussing your side-project with like-minded friends.



Amazon Bricked My Kindle

Yesterday I discovered that Amazon had decreed that my Kindle e-ink device was too old. This post is my 🧠-dump of a intensive afternoon & evening of researching what to replace it with.



Making Great Productivity Tools

My thoughts on what it takes to make a great productivity tool that wont be abandoned, & works for everyone, not just the creator




What is 3D Printing Good For?

Who 3D & what 3D printing is good for, beyond printing simple tchotchkes, plus a list of the many useful things I’ve made.


ATMA TTRPG Review

A review of this unique card-based, beginner friendly, TTRPG

On Generic TTRPG Systems

Overview

I love the idea of generic role-playing games, but as time goes by I find myself caring less and less. Yet, there’s still something great about them. This post explores those thoughts.

Context

The basic premise of a Generic Tabletop Role-playing game is that you can learn this one system, and then play any kind of game with it. No need to learn new rules. Just throw together some new characters for whatever setting you and your friends have decided to have fun in.


Recycling 3D Prints

Overview

Despite being “plant based” there are almost no 3D printer filaments that are actually compostable or biodegradable in any meaningful way. PLA needs oxygen, a temperature of 140+°F (60°C), and a variety of organic compounds to break down. You’re not going to find these outside of an industrial composting facility and most of them won’t take PLA anyway because it’s frequently mixed with other things that make it non-compostable.


Debugging Our Ambulance

Debugging Our Ambulance

tl; dr: two developers use standard debugging techniques to fix electrical problems in their ambulance.

Setting The Stage

We had to drop our car off at the dealership last night. In order to avoid walking home in the dark, on roads without sidewalks, in 27°F (-2.7°C) - or just the last two shortly after dawn, we needed to drive the 🚑 Ambulance. Unlike most years, I actually remembered that it had a block heater1 and had turned it on at the beginning of winter.


Red-Black Initiative

Overview

This document discusses a new1 form of managing initiative order for Tabletop Role Playing Games without math. It is, like so many game things, a combination of a number of existing ideas.


Sexism in Tabletop Role Playing Games

Overview

This post uses a recent Tabletop Role Playing Game (TTRPG) as a concrete example of the problems that still remain within our community. When it comes to including women, it seems that there are many things that “shouldn’t need to be said” but apparently still do. This post will say most of them.



On Federating With Meta

tl;dr:

Meta and Google are existential threats to the continued existence of Mastodon (and friends).

An existential threat is a threat to a people’s existence or survival. - The Brittanica Dictionary (editorial)

The best way to guarantee the death of the things we love about Mastodon (and friends) is to allow Meta or Google to gain a toehold in the Fediverse.


Github Rubocop Workflow

It took me a while to figure out the correct collection of magical incantations required to make RuboCop run in a GitHub workflow, but ONLY on the files that were changed within the PR. This is a useful configuration if you have a codebase that has not yet been modified to satisfy all your “Cops”. I’ve also included a version of the same file that you can use when you’re ready to have RuboCop run on all non-excluded files.


Converting Apple's Add To Wallet Images

Apple distributes their “Add to Wallet” images as SVGs which is great, but if you want to add it to an email or anything else that has issues with SVG files you’re going to need a PNG (to maintain transparency around the rounded corners). Unfortunately there are a LOT of these images needed to support the various languages.

a screenshot of a github pr with multiple apple wallet images

apple wallet images pr

Converting these to PNGs is not as easy as you’d hope.


Rounding Things In Tinkercad

Overview

A Guide To Rounding Corners and Edges in Tinkercad.

Alternately, how I spent way too much time modeling a dice tray.

Rounding corners in Tinkercad is way more trouble than it ought to be. It’s not actually hard, it’s just really time consuming and requires a lot of steps. Once you wrap your head around the general approach you’ll be able to round anything.


Kinesis Advantage 360 Pro Review

an image of my keyboard halves connected by a copper colored bridge of 3d printed plastic

High Level Summary

The Kinesis Advantage 360 Pro feels great. The ergonomics are better than the Advantage 2. The Bluetooth is buggy. The on/off switches are terrible. The mechanism for resetting it is worse than terrible. I’m still irked that the wrist wrests weren’t included at that price, and I suspect the Mo Ergo Glove80 is going to be an equal, or even better choice.


Why Tabletop Role Playing Games Need Skills

Preface

A recent episode of the Internet Office Hours: Role-Playing Games podcast was discussing the question of Skill Checks in Tabletop Role Playing Games (TTRPGs) and if they were actually needed. In designing my game I’ve spent a lot of time thinking about this, and I thought I’d share my perspective.


Duct Tape & Baling Wire Methodology

Duct Tape & Baling Wire

A coding methodology for personal projects and proof of concepts.

Premise, and Perspective

Premise

There is a time and place for following “best practices” as a developer. It is not “always”.

Best practices should be followed when…


GraphQL Thoughts

Intro Thoughts

I’ve been mostly avoiding GraphQL and watching from the sidelines. I’d been forming an opinion but wanted to actually understand it a bit better before really deciding.


Notable Things about Pathfinder

A friend asked what was notable about Pathfinder 2nd Edition in comparison to D&D 5th Edition.


Don't Overthink Your PKM

Overview

It’s important for all knowledge workers to have a Personal Knowledge Management System (PKM). That doesn’t mean you need a fancy tool, or a complex process. Sometimes, the “stupid simple” solution is the best one.

To that end, I wanted to talk through my wife’s system. It’s an important example because her choice to specifically not use any of the fancy purpose built tools has resulted in a better solution for her needs.


Other People's Personal Knowledge Management Isn't For You

“Personal Knowledge Management” (PKM) feels like a lot of “bullshit” to many people. In this, I will speak to the idea that PKM isn’t bullshit. It’s just that other people’s ways of managing knowledge, just aren’t designed for your brain. They may sound like bullshit, but if it’s working for it’s creator, it’s totally valid.


Mastodon Ownership

Overview

A group calling itself “Mask Group” has purchased three of the largest mastodon instances.

Mastodon users, especially people on those servers, should be very concerned.

Why?

There are some things you need to consider about mastodon to understand why this is very concerning.

  1. Large Mastodon instances are expensive to run.
  2. Mastodon is not a good platform for large advertisers for a number of reasons.

This means that by buying a large mastodon instance you are signing up for a very large ongoing cost in a system whose current state is adverse to profit generation for the owners. If we assume the purchasers are not complete idiots there are 2 solutions to this problem.


Rewriting Hey

Overview

“Hey!” started as an Interruption Tracker, and now supports Time Tracking too. It has been through 3 iterations: Chicken Scheme, Crystal, and now Raku. This post is a high-level developer’s diary of what I wrote, why I rewrote it, and what I learned along the way.


How To Receive Twilio Messages In MongoDB Atlas Functions

Overview

There's plenty of documentation about how to send an SMS via Twilio, but very little about how to receive one. Receiving one in a MongoDB Atlas Function involves an extra complication. By the end of this post you'll know how to receive a text in Twilio, and have it successfully interact with your MongoDB Atlas Function. I'll also cover a couple nice-to-have's in Twilio that you'll probably want to set up anyway.


I used AI to generate products & write copy for my store

Quick Summary

I used Midjourney to generate art that I threw on t-shirts, coasters, and almost everything else RedBubble offers. Then I used OpenAI to generate copy for it, and combined that with a handful of custom scripts to generate a product site called Bed Bath & The Beyond.



A Rebuttal to Scaling Mastodon is Impossible

Armin Ronacher wrote that Scaling Mastodon is Impossible

I'd like to offer a rebuttal. As someone who's been doing professional web development since 1995, with most of that time being spent in Rails jobs, or doing Rails work on the sidelines, I think i have a pretty good perspective on the situation. For those who don't know, Mastodon is written in Ruby on Rails.

Decentralization promotes an utopian view of the world that I belief fails to address actual real problems in practice.


A Journey With Midjourney

Exploring an Idea With Midjourney

I haven’t seen anyone talk about what it’s like to try and work with Midjourney, or any of the other Image AIs. No-one has shown just how much work it takes to get from an idea, to the beautiful output we keep seeing.

This post will take you through the journey, from a spark of colorful and strong Native American imagery, depressed cyborgs, to visions of Muslim women, in a dry and trying future.


Mirroring With Gitea

Overview

Following on the heels of my last post on why you should (not) self host your git repos, I went ahead and used Gitea to set up a local mirror of all my repositories, and all the repositories I don’t want to loose access to.

The results were surprising, and after reading this, you might want to do the same. This post will be a qick overview of how I did it, some tips that’ll help, and what I learned as a result.


Do (not) Self-Host your repos

Table of Contents

  1. Why You Should Self-Host
  2. What about GitLab and other Competitors?
  3. Why You Shouldn’t Self-Host
  4. So what’s a geek to do?
  5. What am I going to do?

Once upon a time, GitHub was a successful geek enterprise. Then Microsoft bought it, and folks started arguing that you should abandon ship. You should self-host your repos they say.

I 100% agree, and 100% disagree. Let me explain.

GitHub’s been a benevolent host. When they bought NPM they went from being a de facto piece of internet infrastructure to an actual piece of critical infrastructure. At this point you may as well argue that we should sever our connection to the electric company.


Syncing Homebrew Installs

Those of us who love the command line, have a tendency to install a lot of useful utilities, and want them available on all our computers. On macOS we tend to use Homebrew. This document serves to describe three ways to generate a useful file to solve that problem.

As I see it there are 3 basic approaches to syncing your homebrew utilities across machines.

  1. I don’t care about the details, just make it work.
  2. I would like a simple installation document that
    • lists what I’ve installed
    • what each is for
    • can be used to install the same things on other machines
  3. I would like an efficient installation document that
    • lists what I’ve installed
    • what each is for
    • can be used to install the same things on other machines
    • won’t waste time trying to reinstall things already installed
    • can handle post-install tasks, and make sure they only get run once.

This pots will address each of those, in order.


On the "problem" with AI generated art

There has been a lot of uproar about the “ethics” of AI generated art from tools like MidJourney, Stable Diffusion, and Dall-E. People talking about “theft” and “copyright infringement” and how artists should be paid for “stealing” their styles.

This blog post intends to break down the ridiculousness of those claims with simple logic, and historical counterarguments. I’ll show how the uproar is ultimately just an emotional knee-jerk reaction by people ignorant of the reality of art, illustration, and these AI systems.


gh-url script to get GitHub url for a file

The Problem

For the past decade or so, I’ve noticed a trend amongst my coworkers. When they need to look at the contents of a file that they’re not currently editing, they will go to GitHub, and click their way down through the folder structure until they eventually find the file they want to see the contents of.

On a related note, I believe that most of my coworkers don’t know how to take a relative path in a repo, and tell their text editors to open it.


On GitHub Achievements

GitHub recently announced GitHub achievements. It’s a great idea, but I’m really left scratching my head by what the achievements are.

The “Pull Shark” is open pull requests that have been merged. I’ve got a “4x” version. 4x makes NO sense to me given the number of repos I’ve contributed to, but… ok. Maybe it just maxes out at 4x.

That’s it, though, except for “Arctic Code Vault Contributor” which … is more chance than anything else.


How To Register an Internationalized Domain Name

( A guide for English speakers as of May, 2022)

I’m going to assume that this isn’t terrible if you speak a language which doesn’t look anything like English. I’m going to assume that your domain name registrar’s don’t have their heads up their butts.

Over here in the English speaking world they’re too anglocentric to notice anything that goes on in languages that have non-ascii characters. Since you’re reading this, you probably use a lot of software that was written by American companies. This means that even if you do succeed in buying an Internationalized Domain Name (IDN) there’s a very good chance that anything you try and stick it in that isn’t a browser will reject it. Especially if you try and use it for email.


What you need to know about Mastodon

The goal of this post is to give you the information you’ll need to start using Mastodon before Twitter becomes even more of a dumpster fire than it currently is. It assumes that you’re familiar with Twitter and that you’d like to see if you can continue your twitter-like postings over on Mastodon.

I’m going to cover the following topics:

  • what the deal is with all the different servers / instances
  • instances as communities
  • moderation
  • choosing an instance
  • how you use Mastodon
  • what’s different

Before that, I’d like to recommend you watch this 6 minute intro to Mastodon. I’ll fill in the details afterwards.


Splitting an org-roam collection

org-roam supports multiple directories and it should work fine if you start that way, but if you’ve already got an org-roam project that you need to split up, it’s a pain in the butt.

Here’s how I managed to divide my org-roam project into multiple directories after much trial and error and googling.

A note before continuing: If you’re googling around for this you’re going to find a bunch of old commands from when people were upgrading from v1 to v2. Many of these won’t work because their names have been changed.


You've been lied to about the newline character

You’ve been lied to about the Newline Character

The humble newline character: \n.

You’ve seen it in countless code examples. Usually something like

foo\n
bar\n
\n

You look at that and probably think, it represents the end of a line. Or maybe you think it represents the start of a line. If you believe either of those things, I’m sorry to inform you that you’re wrong.

Fortunately, by the end of this post you’ll have a much better mental model of \n.


Trollphabet

Once upon a time a group of friends gathered at a restaurant. We passed the time trying to devise the worst phonetic alphabet. One that, when heard, would do the best possible job of not successfully conveying the letters you were trying to communicate. This is what we came up with.

A aye
B bdellium (the b is silent)
C cent
D djin
E eye
F fore
G gnu
H heir
I I
J jicama
K know
L like
M mnemosyne
N no
O oops
P psalm
Q quatar (pronounced kutter)
R really
S sea
T two
U umm
V varies
W why
X xenomorph
Y Yes
Z zero


Some of us need bigger text

That sounds pretty obvious. It is pretty obvious. Anyone with any familiarity with older humans knows that they generally have trouble reading small text, or making out fine details. Every drug store has a rack of magnifying glasses. Everyone’s seen an older person doing the thing where they lift up their bifocals and start moving a thing closer and farther with their arm trying to find a spot where it both large enough to be readable but far away enough to be in focus. They’re not the only ones who need bigger text, of course, but they are the ones everyone should be familiar with, and likely has in their lives.


Ubiquity Upgrade Fiasco

[⚠️ This is a blow-by-blow ranty post about what happened when Ubiquity screwed up a software upgrade ⚠️]

This morning has been… a journey.

Our Wifi coverage has been kinda 💩 at the new house because there’s way more space between us and the Access Point.

So, let’s just run some ethernet across the floor for now! Should be quick! 🤦🏻‍♀️

We run it into my wife’s iMac. No problem. All good. Fast fast. Another cable, through her office, past front door, into my office, And…. “wait… wtf do i plug this into?”


The Coin Game

The Coin Game is one of the tools I’ve come up with to help myself recognize when I do accomplish something of value. It also helps motivate me to do more.

Boring tasks are hard, especially for ADHD brains. On top of this, when we do actually manage to accomplish something, we don’t give ourselves credit for it. Sometimes it feels like it shouldn’t count because of how long it takes. Sometimes getting it done involved lots of irrelevant tangents, and we “yeah but” all the value away. At the same time, most of us do actually contribute enough value to our employers that they keep us on staff.


First Principles & Scheme

(Or, The Value of Working at Lower Levels of Abstraction.)

I’m loving working in Scheme because it forces me to work from First Principles.

There’s a huge value in the convenience functions that most languages wrap around those first principles, but it’s like buying and using a car vs. building the car you’re using.

The latter is more work but you’re going to really understand how that car works and you’re going to have the perfect car for your needs.


Scheme Is My Vim

Emacs is arguably the most powerful tool available to the modern programmer. Vim’s pretty close. Both require more effort to learn than say Atom or Sublime Text. But, the additional start-up effort pays off quickly.

Like Scheme, they both suck out-of-the-box. Unaltered they’re both horrible bare-bones skeletons of an editor. Their potential is incredible though. If you’re just going to do something quickly, and never spend the time to customize them, they are a terrible choice.


Delve RPG Review (not Ironsworn Delve)

There’s a little known RPG called “Delve” that is not to be confused with Ironsworn Delve.

Welcome to Delve You awaken on a beach surrounded by the debris from a wrecked ship, you are not alone as others seem to be also awakening from their ordeal. You had no time to pack and all you have is what is in your pockets or what you can find amongst the wreckage. This begins your adventures on the island of Cragbarren. Delve is a fantasy RPG of discovery and adventure, you are on a lost island with no way to leave. The island is filled with dungeons, ruined cities, old caves, mad mages and monsters, with a lot of opportunity for an awesome GM to create their own.


Covid Decision Flowchart

There are a number of people who want to stay safe during the COVID-19 pandemic, but have found themselves making questionable decisions, because they’ve become acclimatized to it, and because they want to believe that their friends are healthy, because they look healthy, and reason that “of course, those friends are responsible, and I’m responsible, so it should be safe to get together and do something.”

Friends and family are the big problem. We need them. We’re social creatures. The thing is, if your friends choose to get together with you in a non-socially distanced way, it proves that they aren’t being careful, and then you have to wonder about all the other not-careful people they’ve been in contact with, and the people they’ve been in contact with and on and on.


Hating Email, and Loving Hey

I… really hate email.

By the time I left my last company I had successfully trained everyone around me to stop sending me email, or at least not expect me to have seen anything they sent me. My friends are similarly trained.

The thing is, I don’t actually hate email.

I hate traditional email clients and the bullshit usage patterns the force on us, and I hate the bullshit way most employers use email.


D&D vs. The Fantasy Trip

In 1987 I was a sophomore in High School. A teacher had an after-school class where he taught us to play Melee and Wizards. Our characters battled each other with spells and weapons on a wide open hex grid. Little cardboard punch-outs with terrible drawings marked our places on the map.

I loved it.

Decades later, as an adult, I payed someone $40 US for them, because I kept thinking about them. Together Melee and Wizards made up a combat system. The Fantasy Trip was the Role playing system built around it to compete with D&D.


Software That Lasts

The Cloud Problem

When your data only exists in software that you don’t host yourself it is no longer yours. It can disappear at any moment. Its future is dependent upon a company’s continued profits and interests.

Imagine you’ve been building up a knowledge base for two years, but you fall on “hard times”. Maybe you can’t afford it. Maybe something happened and you’re literally unable to (accidents, medical issues, legal restrictions). What happens to all that data?


A personal journey through programming languages

A little while ago there was a post about Programmer Migration Patterns through programming languages. I didn’t agree with it, but it got me thinking, about my 30+ years of programming, the languages I’ve been through, and when I can take away from that.

a graph of masukomi’s journey through programming languages

When I was a wee thing my mother brought home a used Texas Instruments TI99/4A that had been velcroed into a suitcase. I had a lot of fun with that computer. With the help of the Learn To Program Basic books from the library, I made circles and squares appear and move on the screen and did other silly things.


How SSH Keys let you into servers - a metaphor

SSH Keys can be a little confusing to new developers. Here’s a quick little metaphor to help you think about how they work.

tldr; Your public key is your business card. You can give it to people so that they can add it to the list of people authorized to access a machine or service. Your private key is a tool that proves that you’re the person associated with that business card.


Go will never belong to the community until they decide its future

There was a recent post* about how Go is Google’s language, not ours. It was an opinionated post, but it provided some evidence to back up its claims.

Russ Cox (a Tech Lead for the Go language) posted a reasoned response to this which, I think basically tried to say that it wasn’t true, and they had regular meetings to discuss community proposals.

But for me, the telling bit of it was this:


oho's Backstory

I’m going tell you the tale of oho, a program which is arguably the world’s greatest ANSI text to HTML converter, and how it solved a real business problem. I’m sharing this because, as a geek, it’s important to remember that you can frequently solve work needs, while having fun creating open source tools that interest you.


Side note: ANSI escape sequences are the things that cause text to be colored, bolded, etc when displayed in a terimnal.


Quality Is Rarely Job 1

In 1981 Robert Cox came up with a slogan for Ford; “Quality is Job 1”.

It has always stuck with me.

In the software industry there are few slogans could be further from the truth. C-level’s and other customer facing types frequently proclaim the “quality” of their products, but they aren’t the ones making the product. They’re frequently not even the ones using the product.

In software there are two viable ways to release quality software. You can release it when everything you want done is done, or you can release what you happen to have done at a specific date. You can’t combine the two, although almost every software company tries to.


Your Own God(s)

I’ve had an idea buzzbuling around my head for a while, that I’d like to share with you. If you’re a devout follower of any religion, I ask that you set aside what your preconceptions for a few minutes, and listen openly to this somewhat heretical thought.

Premise

All, or at least most, gods are created by people. Maybe I’m wrong, and there is one true deity, but logically if one is true, then all the conflicting gods must be the creation of human minds. If none are true, then they’re all human fiction.


Basic Readiness

Basic readiness is a problem for most people. We assume that we’ll always have power, water, and food. We ignore the fact that this stuff goes away regularly, because it usually happens to someone else.

There was a snow storm here in Vermont (USA) last week. This was not a blizzard. As far as weather goes, this wasn’t particularly dramatic. There was just a lot of heavy snow and some high winds. Monday night the news came that towns were starting to loose power. As the weight of the snow took down more and more trees and branches, it became clear that this was going to be major.


Libraries, Fameworks, and DSLs

One of my coworkers was trying to understand the differences between libraries, frameworks, and DSLs and asked me

…how do I know what i’m using when all these things are

interacting and being used within each other, etc

To some degree, you don’t, and it doesn’t matter, but that’s not a very helpful answer. So let me step back and talk about what each of these are. 

Libraries

Libraries are the simplest. A library is just a collection of code intended to be reused. They’re typically packaged using a package manager, but it doesn’t need to be “packaged”. It could be just some file of useful code that you load into your code like any other source file.


Converting HTML to PDF on the command line

I recently needed to convert some HTML to PDF on the command line and went hunting down the options.

There numerous posts saying “X is great” “Y works great for me” but no-one gives examples that show you anything.

I’ve tried WeasyPrint, wkhtmltopdf, Pandoc and Google Chrome (yes via the command line). The test was simple. Take a simple color chart, made from pre-formatted text and render it as a pdf. This doesn’t test any fancy CSS grid layout, or sizing or … anything. Just straight pre-formatted text with some spans that only define colors.


Zed Shaw's Utu: Saving the internet with hate

A high level summary (and paraphrasing) of Zed Shaw’s talk at DEFCON 15 (in 2007) because I couldn’t find a good text version.

Utu is the Maori word for a system of revenge used by Maori society to provide social controls and retribution. Utu is also a protocol that uses cryptographic models of social interaction to allow peers to vote on their dislike of other peer’s behavior. The goal of Utu is to experiment with the effects of bringing identity, reputation, and retribution to human communications on the Internet. A secondary goal is wiping out IRC because apparently nobody really likes IRC.


The Guy Who Loved His Work

(or Why A Healthy Work-Life Balance Is Important)

During the dot com boom I worked at a company with a developer who loved his work. The problems were challenging, and we really valued the things he produced. Everyone who worked late late got dinner, and sometimes he’d work so late that he ended up sleeping by his desk. Bob (not his real name) wasn’t pushed to do this. He just really liked his job.


Getting Started With Scuttlebutt

Scuttlebutt Logo

Ok, you’ve been hearing about Scuttlebutt and decided that “Yes, I do want to join an amazing social network with lots of good people that no company can control and also happens to also work offline.

Here’s a quick overview with the basics you need to know.

First off Scuttlebutt is a protocol on which many different kinds of apps can be built.

As for the social network, there are many clients, just like there are many Twitter clients. It doesn’t really matter which one you use. They’re all talking on the same network.


Do Social Networks Need Companies?

I’ve been thinking a lot about Scuttlebutt lately (see my Why Scuttlebutt post), and Srol just wrote a great post about how Mastodon makes the internet feel like home again.

There’s a lot of good reasons for people to use tools like them for socializing online, and I don’t want these services to just wither as their users wander off. I want there to be options that aren’t controlled by large companies, but at the same time services that require servers (like Mastodon) need someone to pay for those servers. And while Scuttlebutt doesn’t need servers, the “pub” servers do play an important role. I find myself wondering what is required for a social network to succeed? Are businesses a critical part of the equation?


Why Scuttlebutt

I fell in love with the scuttleverse because of the people who are inhabiting it. Regardless of UX/UI, I continually come back because here I found people discussing practical ways of building their own airships, and what life is like doing guerilla gardening in Berlin or living in a self-reliant shack on top of a lava flow. There’s a distinct social anarchist bent to the discussion, and folks are not only discussing alternate societies at length, but also have the skills to realize them. – Zack! -> here


How to use the same Scuttlebutt identity on multiple computers.

v2.1

(Note: Manyverse / mobile users please see the warning at the end.)

Offically Scuttlebutt doesn’t support posting from the same identity on multiple computers (as of Dec 2017). Unofficially, it’s easy but requires a little bit of care. In practice this means never run the Scuttlebutt client on two computers at the same time.

The gotcha is that if you post from both computers before the changes of one have had a chance to replicate to the second via scuttlebutt one or both of your feeds will get screwed up and other people won’t see some of your own posts ever again.


100(ish) things

Many would not guess it, but I am a minimalist at heart. I don’t like looking around and seeing all the crap I’ve accumulated. So this year, I’m going to do something about it. This year, I’m working towards only owning 100(ish) things, and I’d like to encourage you to too.

The 100 is easy. The “ish” requires some explaining, but I feel it is the key to making this workable.


Dear Esperanto Beginner

Dear Esperanto Beginner:

I love Twitter, butI have not found a good place for a beginner to practice their Esperanto there. So, I made @praktiku.

Say hello to @praktiku and practice with me. You don’t need to be skillful, just willing to practice.


Kara Esperanto Komencanto:

Mi amas Twitter, sed mi ne trovis sekura placo por komencantoj praktiki sian Esperanton tie. Do, mi faris @praktiku.

Diru saluton al @praktiku, kaj praktiku kun mi. Vi ne bezonas esti lerta, nur volanta praktiki.


Keeping a great Changelog

Changelogs are an invaluable, and often neglected part of any software project. So, how do you do that?

A good changelog helps you users to understand:

  • Why they should care about your latest version
  • If any of your changes affect the problems or frustrations they’ve been having.
  • If there are any changes that might affect how they use your app / library.
  • Why your efforts are worth their continued support.

A great changelog does all that, and shows the personality of your team.


Why you can't auto-generate your Changelog

Let’s start by taking it as a given that a Changelog file is something very valuable that every product should come with. Even if your “product” is a library for other developers.

With that in mind, the question rises of “How can I make it really easy to generate one”. Many developers have had exactly that thought. There are many free and some paid solutions that will “Autogenerate your changelog from your git commits/tickets”. The simple fact is, that no matter how well they’re written, you shouldn’t use any of them.


On Being A Manager

At its core, being a manager is about power. I feel that many managers fail to understand what that power is for.

A manager is a lot like being the King or Queen of a tiny, tiny kingdom. The sovereign of a country can impose their will upon their people, but that’s not their job.

A sovereign’s job is to keep their people safe, happy, and prosperous. The more prosperous the people become, the more power they gain. The more power your people have, the more power you have. The more powerful and successful the people are the more powerful the sovereign becomes.


Weeding Wednesday

“Follow Friday” has been a longstanding tradition on Twitter. It’s a great idea. People you follow, make curated recommendations of good content. Well, the world needs balance, and I’m instituting Weeding Wednesday.

Weeding Wednesday is a day for reducing internet noise.

This Weeding Wednesday watch your Twitter feed from a different perspective. Don’t look for the great posts. Look for the “meh” posts, then unfollow anyone with a low cool to meh ratio.


Creating a Terminal Emulator from Scratch (where to start)

Where to start creating a Terminal Emulator from scratch

Before I get started I need to link you to this great answer on the Unix & Linux Stack Exchange which explains the differences between a Terminal (tty), a Console, and a Shell. That knowledge will be key to writing a terminal emulator.

VT100 (and beyond)

Setting the stage with a little background.

Most terminal emulators claim to be VT100 emulators. VT100 came out of DEC somewhere around 1977. There were a number of subsequent versions (52,102,220,330,420,510,520). The problem is, that VT100 is a rather limited subset of what people expect:


Adding Press and Hold Characters to macOS (OS X)

EDIT: As of Monterrey Apple has completely locked down the files you need to edit.

There are 2 ways I know of to do this, and neither of them is as good.

  1. use TextExpander. You can tell it that when you type cx to “expand” it to ĉ. You’ll probably have to copy the character you want from here or any other page with it. Then do the same for all the other characters that need ˆ. Here is a public snippet group with the Esperanto Diacritics that I’ve put together. Just type cx to get ĉ, and so on for all the characters that use the ˆ or ˘ diacritics.
  2. use Keyman. They specificaly have a QWERTY Esperanto keyboard layout. However it’s not what you think. It doesn’t give you press-and-hold menu, and it doesn’t actually let you type a ĉ. what it does, is exactly the same thing as Text Expander, only with +h or +x. Basically, what you get is an incredibly limited free version of Text Expander, that only works with the QWERTY keyboard layout.

In short, buy Text Expander, because you’re going to get a ton of other cool functionality and it’ll work regardless of what keyboard layout you use.


On offering up Grad School Recommendations

I was recently asked to provide a letter of recommendation to a past coworker who is trying to get in to grad school. The experience was excessively time-consuming, and left me with little belief that any of these schools are worth attending because their systems were (with one exception) all painful to use, and (with no exceptions) all looked like shit. If you can’t teach your students how to build a decent system for letting people upload recommendations, then how the @#$% can I expect you to teach anyone graduate level concepts? I know that some of the following schools are actually quite good, but they show no evidenced of it in the code they offer up for professors and professionals to use.


Software worth recommending

There are lots of great tools out there. Far too many to try. Here are the ones that I’ve tried, and found worth recommending. Mostly they’re

OS X

Developer Things

Quiver is a “Programmer’s Notebook”. I’ve recently switched to it from CodeBox which seems to have been abandoned by its developer. I’ve got some minor quibbles with Quiver, but overall it’s pretty nice and I’ll be bringing all my code snippets and reference material over to it.


Static vs. Dynamic Blogging

You’ve got a lot of software options when setting up a blog. Over the years. I’ve used or tried most of the options including, but not limited to: WordPress, Jekyll, Octopress, and at least 3 custom built systems.

What follows is my thinking on the pros and cons of each option, and why I’m switching back to a static blog system (Hugo this time).

Dynamic Blogs (WordPress, etc.)

Dynamic blogs, like WP, have a lot going for them:


Why I won't be backing Mou's crowdfunding Campaign

Mou as your Markdown loving Mac geeks know, is a split pane Markdown editor. It’s been around for years and it’s really quite good. I even donated to its creator in the past to support it. Now he’s put together an IndieGoGo campaign to pay for people to work on it full time, but I won’t be contributing.

Some background first

Mou was never open source. I’m ok with that. I use a bunch of great proprietary apps. Unfortunately, that means that when its developer (Chen Lou) was busy with his life, Mou languished, and no-one could help improve it. Eventually he decided he couldn’t give it the attention it deserved and tried to sell it. Sadly, I found out about this after the fact or damn would I have been trying to put together the money to buy it.


The Five Virtues of a Great Programmer

In Programming Perl Larry Wall (in)famously suggested that programmers had three great virtues: Laziness, Impatience and Hubris. Over the years I’ve kept coming back to those because there’s a real truth to the idea as he originally presented it, but it’s limited, and his definition of “Hubris” has no relation to the actual word. I believe that those may be aspects of real programmers, a great programmer goes beyond that. Building on Larry’s idea, I present you The Five Virtues of a Great Programmer:


Vampire Bug [Definition]

Vampire Bug: n. something that worked when you went to bed at 2AM, but when exposed to the light of the next day dies horribly. Typically the exposure proves that it couldn’t possibly have been working at 2AM either.


How to enable GitHub 2 factor Authentication on new device / app

( as of Sept 30th 2014 )

These are the instructions for how to do it if you’ve already got it configured and need to add a new app / device. If you don’t have it set up already, GitHub’s docs are… probably passable.

  1. Go to Settings
  2. Click on Security
  3. In the “Two-factor authentication” section click “Edit”
    • Yes, even though you don’t want to edit it.
  4. Under “Delivery options” click “Reconfigure two-factor authentication
    • Yes, even though you don’t want to reconfigure it.
  5. Click “Set up using an app” or “Set up using SMS”

What would you want to do?

This afternoon my intern asked me this simple question. She’s a new developer, and a friend of hers is working in a fresh codebase, with best practices. Everything is nice, and he can keep the entirety of it in his head. She’s working with my team, Support Engineering. We’re the front-line bug squashers at our company. We’ve got a legacy codebase with no tests and brain melting insanity around every bend.


Writing good User Stories

First, it should be noted that not all stories are “User Stories”. For example a developer might be tasked with manually running some script. The Story might simply be “run the fooberry script”.

For everything that effects the UI, use a template:

As a < type of user >
I want < to perform some task >
So that < I can achieve some goal >

Note that it’s all about what the user wants. This isn’t about instructing what change to make to a system. It’s about advising implementers on what the desires of the user are.


Finding the Github Pull Request for a topic branch

Finding the Github pull request associated with a branch.

Work on a large enough project, with other people and sooner or later you’re going to find some commit, or branch, and want to know what was in the pull request that merged it in. Maybe you want to see what other commits got merged over at the same time. Maybe you want to see what the diff was at that point in time. But, how do you get from a branch name to a pull-request.


Bonsai Coding

Writing code is a lot like maintaining a Bonsai Tree. If you stop pruning it it’ll stop being a Bonsai and turn into a bush. Little tweaks, frequently aesthetic ones, will help to keep it beautiful and under control. It will still grow in unexpected directions, as other developers make changes, but careful pruning will keep it balanced, and healthy.

What is “careful pruning” then?

Each file is a branch on our tree. The methods, are leaves. We come in to work and start examining one of the branches. Some days we need to encourage it to grow a specific way by adding a feature. Some days we make little snips to correct a bug. But what happens if, upon examining your branch for other reasons, you discover that it’s grown into spirals and knots. You can’t reach your clippers in to snip the leaves you need. You can’t do much of anything without difficulty and frustration, and frankly, it looks like crap. The unexpected spirals and knots need to go.


The Daily Team Tracker Worksheet

The Daily Standup Meeting is a core aspect of Agile development. The simplified idea is that you want to start the day with a very quick status check of what everyone’s working on, and helps “…to coordinate efforts to resolve difficult and/or time-consuming issues”.

But, how do you keep track of the things your minions are working on today and deal with your own tasks, and 400 daily interruptions? For me the answer was to put together the Daily Team Tracker Worksheet.


[Review] CruxSKUNK iPad keyboard / case

The backstory

Once upon a time there was a Kickstarter to make the world’s most awesome keyboard / case … thing to “Turn your iPad® into a laptop”. As with most hardware projects on Kickstarter the expected delivery date came and went, and came and went again, but I feel the folks at Crux did a great job of keeping the backers informed, and the reasons it got set back almost always boiled down to them not being willing to accept half-assed Chinese manufacturing even if it would have gotten it into our hands sooner.


The Thing About Today

The thing about today is that we have the power.

We, can destroy this fear.

Not by being stoic. Not by being “strong”. By smiling. By being human. By being the neighbors we wish we were surrounded by.

Go outside.
Smile at a stranger.
Ask someone how they’re doing and mean it.
Listen.

Yesterday’s act was horrific, but I will light up this mother fucking town with smiles, because we are alive, and this world is filled with brilliant people with warm hearts, and their own 200 watt smiles, just waiting to shine.


Git push is not what you think

tldr;

  • git’s default configuration with regards to push is potentially very dangerous.
  • make sure you’ve run git config --global push.default current
  • There are other options for push.default but make sure you read the docs before setting them.
  • setting current as your default behavior means no more complaints about setting upstream when pushing.

Perception vs. Reality vis-à-vis git push

When it comes to git push most people think “It pushes my current branch’s updates up to the remote server” but that’s only a small part of what’s happening, and ignorance about the rest can leave you with very upset coworkers. I know, because that’s exactly what happened to me today when I ran git push -f on a coworker’s computer that happened to have the default configuration.


Setting the Atomic Clock

This morning’s shower brought me an interesting series of thoughts that I thought you might appreciate, and it all started with the simple question of “How do you set The Atomic Clock?”

My first thought was that at some point you have to find some other clock and precisely sync up with it. Then again, they may have said “fuck it” and just had Bob press a button when some other clock flipped over, but then I wondered “How do we know what time it is in the first place?”


Some useful Vim plugins

There are two things that make using vim awesome… no there are about 200,000 but most of them involve adding a few lines to your .vimrc to enable them, or installing a plugin. My .vimrc is just over 300 lines after all these years of use and customization. But, rather than go into all that, I figured some of the vim geeks out there might appreciate a pointer to some of the plugins I use. I’d also be happy to hear suggestions any alternatives to the ones I am running.


Mage Knight Co-Op Rules

We love the game Mage Knight, but the co-op rules are widely regarded as crap. The following rules have been collected primarily from Board Game Geek, an tweaked ever so slightly here, and there, in an effort to make the game cooperative and yet, still balanced.

This document covers:


Rebasing A Pull Request on GitHub

It’s generally good practice to rebase commits on a topic branch into a single commit before merging. It results in a much cleaner commit history, and makes rollbacks easier.

The Question

However, the question was raised: what happens if you…

  • fix a bug (commit 1)
  • create a Pull Request
  • get feedback via the Pull Request
  • fix the bug fix (commit 2)
  • rebase those two commits together (new tree-ish)
  • push that back to GitHub (requires push -f )

The answer is based on understanding that a GitHub pull request has two forms of commenting: * comments on the pull request itself * comments on the commits that the pull request encapsulates. These are the comments made on specific lines in the diff.


[Review] The Sketchnote Handbook (Video Edition)

Nathan Reading The Sketchnote HandbookFirst inked spread of the Sketchnote Handbook. Liking how it's looking!Mike Rohde (Color - Square)

Who should read this?

Anyone who’s seen The Sketchnote Army and wished they could do that. Anyone who’s sick of useless meeting notes they never remember, and never go back to read. Anyone who wants a way to provide information to people in a way that people will actually enjoy consuming, and not just skim through.


Git: pushing and pulling from multiple repos

Lets assume you’ve already cloned a remote repo and have been working with it. Now, someone has set up a second repo out there for the same codebase, and you’d like to interact with both.

*Please note: The following is based on the assumption that you have write privileges to the second repo, but don’t worry, you do essentially the same thing if you don’t and I’ll cover the differences at the end. *


Why you should wear a bow tie

In many situations, the standard tie has become de rigueur, and so commonplace that it is generally only noticeable in its absence. This is not something that can be said of the bow tie.

Paisley Bow Tie

Imagine you’re going to a job interview. If you wear a tie no-one will take note of it (unless you’re a lady). It’s simply what you do. A bow tie on the other hand, says a number of things about you, and makes you more memorable.


Life: An Instructional Flow Chart

An instructional flow chart to help live a better life.

Life: Instructional Flow Chart
(click to embiggen)

I’m thinking I need to artify this and make it into a t-shirt. Drop me an e-mail if you’d be interested in one.


Office Memo

Dear Sir or Madam:

You may not be aware but liquids are capable of flowing through holes. If you place a container of liquid in such a manner that its opening is below the level of the liquid, the liquid will flow through that opening.

Please take a moment to consider the implications of this, and discuss them with your coworkers, as some of them are apparently unaware of this fun fact. Yesterday, one of them placed a carton of cream on its side, with the opening below the level of the fluid inside. As a result, we now have cream all over the bottom of the fridge.


Never register a domain name with your hosting provider

A smart developer I respect recently asked my why I didn’t just register my domain names through my hosting provider. I hoped he was joking, that he knew why this was a horrible idea. He did not, and I know some other smart people who register domains with their hosting providers. Education is needed.

The problem is simple: conflict of interest. Should you ever decide to switch to a different hosting provider it’s in their best interest to prevent you from moving your domain. Why? Because if you point it to some other hosting provider you stop having to pay them.


An unexpected benefit to being an adventurer

The edges Sandy were upon us last night and Dachary commented about how I wasn’t taking the storm too seriously. It’s true. I’ve been pretty chill about it. But here’s why: we’re adventurers, and are pretty much good to go on a worldwide adventure at a moments notice, and it turns out that our “life on the road” kit makes a pretty damn good disaster kit too.

If the power goes out we’ve got a JetBoil propane stove with a backup canister. If we run out of propane we’ve got the multifuel stove and spare gasoline. If we run out of gasoline we’ve got oil. If we run out of oil we’ve got some alcohol. We’ve got a pretty good first-aid kit (including sterile needles and syringes and splints). We’ve got a little camp food and we’ve got a bad-ass water purifier that can filter out things as small as viruses (Brita’s can’t dream of this) so I wouldn’t be too bothered if I had to go suck up water from puddles on the street.


Creating an Interview Worksheet

Once again, I’d like to pick your brain.

I’m working on an “Interview Worksheet”. It’s a simple form that you’ll fill out while interviewing someone, and prepping for an interview with them. There is, of course, a section for questions you want to ask them, one for taking notes during your discussion, and one for the common “How would you rate yourself on skill X” questions. But, I’ve also got a section where you can quickly rate the person on various attributes that you tend to look for.


There's always more to learn

My mother was an incredibly talented artist. For most of my life, she made here living teaching private students, and getting them ready for entry into art colleges.

Once upon a time a student of hers got her a present. It was a Horse-hair calligraphy brush, a solid ink stick (add water and rub), and an instructional book on Chinese calligraphy.

She was very worried about giving the gift though. She didn’t want to instruct a teacher she greatly respected by giving her an introductory how-to book. But it was a gift from the heart, and one she believed my mother would enjoy.



The Entrepreneur's Notebook (part 1)

Part 1 of 3

See also:

“Write down the thoughts of the moment. Those that come unsought for are commonly the most valuable.” - Francis Bacon, Sr.

I contend that the best thing you can do to improve your entrepreneurial skills is to practice thinking like one. What follows is my favorite technique for doing just that, and if you choose to emulate it, I guarantee you’ll end up with more business ideas to work on than you every imagined you had in you.


The Entrepreneur's Notebook (part 2)

Tips for more productive note-taking

Part 2 of 3

See also:

So, you’ve decided you want to try keeping an Entrepreneur’s Notebook, or maybe you already do, but want some tips on making it more useful. Excellent. What follows are the techniques I’ve found to be most useful in my entrepreneurial notebooks. If you’ve got some tips of your own, please drop me a note or leave a comment.


The Entrepreneur's Notebook (part 3)

Notebook choices, and backups

Part 3 of 3

See also:

What about backups and searchability?

This is one place where the digital age is unquestionably superior. Dropbox, iCloud, email… there are myriad ways to back up your digital writing, and text is easy to search. On the mac, Spotlight gives you great search across every document you’ve ever written and searching within a document is easy in any text editor. Paper… not so much.


Appcelerator: extortion is just part of the job...

Appcelerator was recently caught extorting one of its free users, and then that users client for £5000, and then others spoke up to say it’d happened to them too.

Initially it looked like it could have either been a bullshit company policy, or just a salesperson lacking in morals. In the end, it turns out to be both, but the response by the CEO is why I would strongly encourage you to never use an Appcelerator product (free or otherwise) for your project.


Cheshire [Definition]

Cheshire: the collective noun for sidecar motorcycles (alternately known as “hacks”) owing to the extraordinarily high probability of generating smiles in the people they pass relative to all other vehicles.

Usage:

“Upon encountering a cheshire of sidecars one should strongly consider playing the lottery.” or “Wow! There goes a cheshire of hacks.”


Blog post dates: Precision, or freshness. What's important?

Not too long ago I sent out a question. I asked people when, and why, dates were important to them on blog posts. The responses were revealing, both for what they did, and did not contain.

There are some situations where having a date on your blog posts is obviously needed. If you write about anything techy you absolutely need them. I come across tons of sites with perfectly good code examples, that have been obsolete for years. Ditto for how-to’s related to software and operating systems. The other place where dates are critical is anything related to news or politics.


An offer for Web Geeks

I’d like to make a simple offer to the web geeks out there:

One hour of one person’s skills, to make the web a little bit more awesome, and raise $75 for your favorite environmental or medical charity.

Information Architects (the people behind iAWriter) have come up with a really spectacular JavaScript / CSS widget. When you load one of their long articles (like this one) you’ll see a widget in the top right corner that says “Older | Newer” and links you to the previous or next article. No big deal. What’s cool, is that as you gradually scroll through the article the widget disappears, then returns, hovering beside your scroll bubble (wherever that may be in its track); its message now telling you how many minutes it’ll take you to finish the article, at an average reading speed. When you get to the bottom it reverts back to the “Older | Newer” state.


I love the internet

Something kind-of amazing just happened.

Background:

Unglue.it is a really cool site, that I’d never heard of until Amazon decided to stop processing payments for them. Think Kickstarter for freeing out-of print books. They get people to create a wishlist of books they’d like to see released as Creative Commons licensed DRM-free ebooks. They then talk to the authors and publishers of the books people want to find out how much money it would take to “unglue” them. Then they crowdsource that amount.


Turning Down Apple

I just turned down an interview with Apple.

There are a few companies who, when they call with a job offer you’ll respond with “fuck yes”. Apple is on that list for me. And yet…

A recruiter called me the other day. Apple needs someone and my particular skillset and background. It seemed to be a pretty good match, and she’d been looking for a while. An internal tool building kind of job, in a language I enjoy, for a company I admire? Fuck yes. Would you be willing to move? “Fuck yes.”


Major MObtvse Update

I’ve just merged the experimental branch of MObtvse into master. This represents a huge update and in addition to the feature list below there’s a nice update to the default theme, great new editor, improved Kudos integration on the admin screen, and a number of more subtle improvements. I’m really happy with the progress I’ve been able to make on MObtvse in my free time, and if you’ve been considering it, now is definitely the time to grab it from Github and give it a spin.


Task Order Up!

I’ve been a big fan of David Seah’s Productivity Tools for a while now, but when it comes to task management his needs, and mine frequently diverge. As a freelancer he needs to track hours in a way that is totally irrelevant to me. He’s got no-one to answer to but his clients, whereas I’ve got a boss and coworkers who are asking for details on current and past tasks in ways that clients rarely do.


About

Self Portrait

I am an adventurer, a geek, an entrepreneur, an esperantist, and a writer. I’m passionate about about exploring the world and helping people to get out of their cubes and actually live their lives.

You can find out more, including all the latest contact info, at masukomi.org.


Want Some Kudos?

I think Dustin Kurtis’ idea of “Kudos” is spectacular. A simple tool for people viewing your post to say “I really appreciated this.” You can see it in action in the upper-right corner of every blog post in the Svbtle blogging network.

I really want to bring it to MObtvse, but first I had to figure out how it worked. So, I’ve put together an example implementation of Svbtle-style Kudos that can be incorporated into your blogging software with a few easy changes.


Introducing MObtvse

Today, I would like to introduce you to MObtvse. It’s a fork of Nate Wienert’s Obtvse, a Markdown based blogging system written with Ruby on Rails. Obtvse is itself, a reverse engineering of the Svbtle blogging platform / network.

The notable differences between MObtvse and Obtvse are that:

  • MObvtse uses MongoDB via MongoID
  • MObtvse allows posts to be tagged. Readers can click the tags to see all other posts with the same tag, and Administrators can use the tag cloud to help find specific, or related, posts.
  • MObtvse uses Haml (partially implemented)
  • Responsive CSS layout via the Foundation framework.
  • MObtvse has big plans for the future.

MObtvse doesn’t currently generate static pages, but support for statically generated pages is a top priority. The faster serving helps SEO and allows a single server to handle far greater numbers of readers.


Announcing ListfulThinking

Friends, Romans, Countrymen! Lend me your ears.

Actually, that should read, “Friends, Romans, and Countrymen who own iPads or Macs!”

Eight years ago I stumbled across a brilliant way of creating a self-organizing ToDo list. My initial proof-of-concept app was really ugly, but worked wonderfully. A few years later, I translated the method into a paper version, which looked great, and worked pretty well. Sadly, lines on paper aren’t very good about rearranging themselves on command. So this year Alexander ( our wonderful Russian programmer ) and I have been working to create a beautiful version of this app with all the features I wished the previous incarnations had.


Using Git Bisect to Crush Your Enemies

Using Git Bisect

…to crush your enemies and/or bugs

Or, how to save countless hours and find out where things broke

Git bisect is the most awesome, and most poorly publicized feature of git. It allows git to walk through your branch and quickly find out which commit broke things.

The usage is simple. You point git to a bad commit ( usually the most recent one ) and you point it to a good commit (the most recent one you know of when things were working). So, if, for example, things were working on Tuesday morning, you bring up git log and scroll until you find one from Tuesday morning or maybe late Monday and copy its hash.


Tourists and Adventurers

This post was written as response to The Travel Chica’s post about the flooding of the Atacama

The Travel Chica just discovered that “the driest place on the planet is flooding”.

The two most beautiful places on my itinerary for Chile have experienced environmental disasters just before my arrival. First, there was the fire in Torres del Paine. And now the driest place on the planet is flooding.


I just spent US$100 on a bus ticket to get here, dealt with the discomfort of an overnight bus ride, and left a city I loved and wanted to explore more.  And I am not going to be able to take pictures of this landscape photographer’s dream destination.


I Saw a Man Walking Down the Street...

… and it reminded me of everything I hope for.

The man in question had serious physical disabilities. His left foot pointed almost directly inward. His legs didn’t seem to be oriented in the way that yours or mine are. I suspect his spine didn’t curve in a typical direction either.

He walked forcefully, arms flailing out to the sides. His feet stamped their way into the concrete. With every step you feared he might topple forwards, but he didn’t. My first reaction was to look away “don’t stare ate the disabled person and make them uncomfortable”. But, I forced myself to look back, as I always do. It’s unnatural to not stare at a sight like that. I think it’s doing them a great injustice to pretend they aren’t who, and what, they are. So I looked…


Great Apps for Your New iPad

A quick listing of some of my favorite iPad apps, which I hope new iPad owners may find useful.

Reading

Early Edition 2

A newspaper style feed reader. This is the best app of this genre on any platform. It does crash from time to time, but not enough to be particularly annoying. My recommendation is to not put your full list of feeds into it. Instead, put a selected subset of them that would work well if you were reading them in a physical newspaper.


Know Backbone.js? Want a Little Extra Work?

If you know Backbone.js and are interested in 5, or more, hours of freelance work every week, I want to talk to you.

We’ve got a number of apps in the pipeline and need someone to help code them. The current one needs Backbone.js and PhoneGap (iOS) experience. There will be plenty of front-end work in the upcoming apps as well as Ruby on Rails, or Node.js tasks if you’ve got the skills for those too.


How to Merge Specific Files From Another Branch in Git

There are many ways to get specific files from another git branch into your current git branch (overwriting the ones in your current branch), but this is the only method I’ve been able to find to merge those files into your branch en-masse. With this method you’ll be able to pull in any file, or files based on the name of the file or containing folder. If you need to merge files in multiple folders on different subdirectories you can simply rerun step two with a pattern that matches each of the different portions of your tree that you wish to merge.


It's Not What You Think It Is

There’s a petition on Change.org right now urging people to “Tell Ticketmaster: Stop hijacking fans’ rights!”

The short version is that person behind the petition (Nathan Hubbard) is upset that Ticketmaster has begun to tie the purchased ticket to the purchaser of the ticket. Nathan feels that since you bought the ticket you should be able to resell it, and that this is just a “ploy” by Ticketmaster to make more money by handling the resale of the tickets themselves. Ticketmaster claims that this is an anti-fraud tool.


OS X Apps Worth Checking Out

There are a ton of good OS X apps out there. These are the ones that I really appreciate, and think you ought to check out too.

Please note that this was written on Feb. 2nd 2012, and that software changes at a very rapid pace.

Writing Apps

Scrivener

If you’re serious about writing, or writing anything significant (book, screenplay, thesis, research paper, etc.), there is only one app to consider, and Scrivener is it. Be sure to go through the tutorial though. Its features do a spectacular job of getting out of your way, which means that a lot of great functionality is hiding in plain sight. The tutorial shows you just how incredible this app is. Also, it’ll generate ePub and Kindle formats for you, and it lets you write in Markdown,* if you want.*


Why bootstrappers should track their time

The Problem

Most people only track their time when they are billing by the hour, and most people aren’t billing by the hour. As a result, most people don’t track their time.

Now, you can try to bootstrap a new business or product without time tracking, but you’re doing yourself a great disservice if you do. The problem is that we always think we can get more done than we really have time for, and we inevitably think we’ll have more time to work on things than we really do. Add to this the fact that humans are incredibly bad about judging and estimating time, and it’s pretty much guaranteed that our after-hours projects will take longer than we thought.


The thing about Mock Objects

You can tell weather or not someone really “gets” unit testing by asking them one simple question, “Do you use mock objects?” Almost invariably, they will say “no”. Even people who have totally gotten the testing religion. It’s like watching someone pray to a statue of Jesus; totally oblivious to the fact that Jesus himself is standing four feet away reading a book.

This is partially due to the fact that most geeks don’t actually know what a unit test is. They think that testing the methods of a specific class constitutes a unit test, but that’s only part of the story. A unit test test is when you test the methods of a specific class in isolation, and the difference is critical. You know how some people call us “computer scientists”. Yeah, well this is the science part.


My New Favorite Interview Question

I interview a fair number of geeks every year and usually spend my alotted time going over one programming challenge. Lately I’ve been looking for a new one that was simple, but still big enough to give me a glimpse into their thinking. I think I’ve found it.

Why I Like This

I really like this question because:

  • A good solution involves recursion but you could approach it in multiple ways.
  • The seemingly simple Array throws a monkey-wrench into the whole thing.
  • It tests their ability to follow written instructions.
  • It should give an idea of how willing they are to ask questions.
  • It’s small, but with 3 separate, but connected, things to handle should be enough to give insight into how they work through things.
  • In my experience you’ll spend ~40 minutes on this regardless of experience level. I’ve only had one person do it in 5. If folks finish a little early I try and find out what kind of job would make them happy.

The Question

You’re presented with the following YAML file which you need to convert to a useful data structure, but for whatever reason you don’t have a YAML library. You do however, have something that has converted it into a tree of nodes.


Serving Octopress From a Self-hosted Git Repository

There are two good reasons to serve Octopress from a self-hosted git repo.

  1. It provides you with an off-site backup in case your local copies go up in flames.
  2. It gives you an environment where you can integrate secondary scripts and libraries that allow you to do things like e-mail posts to Octopress.
  3. git provides a very efficient, and atomic, means of uploading your files.

Complicating factors:

  1. Not all ISPs have ssh access or the latest version of ruby, and may not have git or Bundlr installed.
  2. Because of the above you may not be able to regenerate html files from markdown on the server.
  3. You need to have a basic familiarity with navigating directories and editing files over ssh.

These instructions are not for people uncomfortable with using the command line in a *nix environment. Of course, if you were uncomfortable with that you probably wouldn’t be using Octopress in the first place.


Open Source Wednesday

This is a simple idea for every web development company (small or large) that owes its existence to open source software. I’m going to use Ruby on Rails as an example, but this is just as applicable to all of the other frameworks and tools we use daily.

On the first Wednesday of every month all of your developers work on bugs or needed features in one of the frameworks or tools that your company can’t live without.


Why There?

Where you spend your time developing is an important decision for an open source developer. Partly we do it for personal satisfaction, partly we do it to give us a tool we want, but there’s always a part of us that wants others to use and enjoy our work. I want to talk about that, and I want to talk about the frustrations that people who use those open source projects have, but first I need to set the stage. Paul Ruoget (@paulrouget) has been working on a cool live CSS editor for Firefox which should be out in FF 11.


It's Worse When the Sun Goes Down

At our house, you go to the bathroom armed, or you don’t go at all. At least, once the sun goes down. There’s a pistol wedged between couch cushions with handle raised for easy access as we watch TV. You think I’m joking, that maybe the gun is metaphorical, or that this is the start of some fictional story. It’s not. Every word is true.

It all started a month or two ago. We’d hear them moving around. Little sounds. Things you could write off and not really worry about: “Probably just a mouse…” But each night the sounds got louder. The little scratches escalated until they were thumpings on the wall. And then the hole opened up, like the gaping maw of hell itself. It would almost be better if it really was an entrance to hell. At least with hell there’d be flames, or something. But this is just blackness, silent and dark. Maybe the Christians have it wrong.


gVim / MacVim drag command for base64 encoding images

The idea is that it can be very useful to base64 encode an image directly into your css file instead of referencing a separate file, but doing so usually involves dropping to the command line, calling openssl, copy-pasting the output, specifying the mime-type, etc… Bret’s Terpstra distilled all of that into one drag-and-drop command for Textmate.The following is simply a generalization and instructions for using the drag and drop in MacVim / GVim


JekyllMail: Posting to Jekyll from Email

There are a few problems with Jekyll / Octopress though that would, realistically, make me less inclined to use it. First, you need to have your entire blog checked out on whatever box you’re posting from, and that is simply not something I’m willing to do on a work computer, and not something I necessarily can do when on a borrowed computer. Secondly, the user interface sucks. Well, there really isn’t one.


[Review] Byword for OS X

  • [Some perspective][]
  • [What’s good][]
  • [What could be better][]
  • [Bugs][]
  • [Would I recommend it?][]

Some perspective

I purchased Byword because I think Markdown is a spectacular way to write and was looking for an app that would allow me to create new documents, easily preview them and grab either the formatted preview text or the generated HTML.

Until now, I’d been using Marked for previews while I typed in Vim. Now, Vim’s great. I love coding in it, but it’s really not the greatest when it comes to writing text, and I’m not really a fan of any of the other apps that handle plain text well. So, I went off in search of an app specifically designed for creating documents with Markdown.


It's not a "blog"...

Listen, you are an intelligent person, but someone has led you astray, and it is driving me nuts.

When you blog some information for the world to see, what you have created is a “post” more specifically, it is a “blog post”. Sometimes they’re “entries” but that’s more commonly associated with diary style blogs. In some cases a post could be considered an “article”, but those posts are never, ever, a “blog”.


Thinking about Lo-Fi camera apps

Dachary Anyone who’s been following my Twitter feed lately knows that I’ve been having a lot of fun with the Lo-Fi camera apps on the iPhone, and I had a post all written up about them, but then my friend Kirk tweeted:

Gotta admit I hope the whole instagram thing is kind of a fad. Makes all [the pictures look] like those b+w “dress up like Bonnie and Clyde”


Cleaning Wordpress of some Malware

The other day the Googlebot swung by to check my site for updates and found Malware. Almost immediately, it seemed, people’s browsers were warning them off from my sites. Malware! Bad Things (TM)! There be Dragons here! and so on. Fortunately a friend dropped me a Tweet shortly after it started and thus the hunt began with one clue:

Malicious software is hosted on 1 domain(s), including globalpoweringgathering.com/.

Sadly, that was ALL I had to go on, and when I told the browser I was ok with the risk (Windows malware can’t hurt us Mac folks) I was unable to find any calls to JavaScript to files on my blog. I couldn’t find any that were encoded either. I was stumped. Poking around on masukomi.org, which is just plain HTML files I did find they had all been prepended with an evil script tag, but that was easy enough to replace as there were only a few files. weblog.masukomi.org though… I was stumped. I’m still not sure where exactly it was coming through to the browser, but I did find the culprit.


Adventure means taking chances

Tomorrow morning Dachary and I will be climbing on our motorcycles and setting off for an epic adventure lasting nearly four months and over 17,000 miles. The goal is to drive south from Boston MA, USA until we reach the most southerly city on the planet: Ushuaia Tierra Del Fuego, Argentina. I can’t wait. Usually when we tell people their first reaction is “Be careful in Mexico.” Colombia, Nicaragua, El Salvador, Honduras, rebels living in the jungle… not a concern. But Mexico! OMG Flee. The fact that millions of US Citizens cross into Mexico, shop, and relax just south of the border without harm is irrelevant. Some Mexican citizens have been kidnapped, and held for ransom. Some Mexican businesspeople have been extorted. Some US citizens have been kidnapped but most of them are hispanic and there have been


Food and Cuisine (a brief history)

A brief history of food:

Early man: “So hungry…. *chomp*” Not-so-early man: “I wonder what that tastes like…”

A brief history of cuisine:

“What would make that taste better?”


Counting the days until Borders dies

Honestly, I kind-of like Borders (and Barnes and Noble), and they’re the only ones with a zero BS customer loyalty signup process.

“Do you have a card?”
“No.”
“Would you like one? I just need your e-mail address.”
“Ok it’s _____ "
“Here you go.”

The end. No paperwork. No forms. Thirty seconds. But, that’s the only thing they’ve gotten right in a long time.

Today they sent me an email announcing that “You could win the new American Girl doll”.


And then there was the bear...

We rode the Trans-Massachusetts-Trail yesterday. A series of dirt roads starting at the border of Connecticut and Massachusetts and working its way north to route 2 where it meets up with the start of the Puppy Dog Trail, which winds its way north all the way to the Canadian border (we’ll be doing that one shortly). Near the end of the trip we stopped for a break in the woods to address the “call of nature” and grab a snack.


800+ lbs of flying idiocy.

Yesterday I watched an 800 pounds of chrome, fiberglass, metal, and plastic spinning through the air. Sunlight reflected in movie-like highlights off of the long chromed pipes. The Harley did things other Harleys have only ever dreamed of… in their nightmares.

I saw the whole thing, from start to finish. Dachary only saw the grand finale of flying metal, but her brain came to the obvious conclusion: “That’s a cruiser [spinning through the air]. He was probably wearing jeans and a t-shirt.”


A note about camping while touring

On this past weekend’s test run we encountered an unexpected problem. It took us nearly two hours to break camp each morning which left us no time to relax, or have a nibble, between waking and hitting the road. On my last big trip it wasn’t like this at all. Yes, it took me nearly two hours between when I woke and when I hit the road, but that included a shower, a nibble, and lounging around reading a book. So what went wrong?


It's only been three days...

We took a test run this weekend; seeing how the gear works for the big trip in December. It was only three days, but now I’m back, out of the shower, and about to start my morning routine. And, the truth is I feel a bit overwhelmed at the prospect. So much…. internet.

So much data. So much news. And so little of it actually matters.

I’ve already falling back into the mindset of being on the road. Just ride…. grab half way through the day and guess how far you can make it before dark. See if there’s a campground nearby ride some more. Try and find as many beautiful things to see and photograph as possible. Repeat.


Why you should never indent code with spaces

Tabs vs. spaces

It’s a big back-and-forth between developers, with lots of us swearing by the use of spaces, but I’m here to explain to you why everyone who uses spaces instead of tabs for indentation is not only wrong but seriously inconsiderate of their fellow developer.

First though, we must consider what a tab is and what a space character is. A tab is a typographical element specifically designed for the indentation of text to various levels. A space is a typographical element specifically designed to separate individual characters so as to distinguish words from each other.


git status-report

Every week I, and millions of developers like me, have to put together a status report for our bosses, letting them know what we’ve been up to for the previous week. Like most of the developers I’ve encountered I’m always a little unsure of what *exactly* I was working on, and typically I just open up git to see what commits I made, and try to remember any non-code stuff I’ve Thinking it was silly to keep wading through everyone’s commits for the past week to see what I worked on I’ve put it all together in a script (in Ruby) called git status-report, which you can grab from github here.


DODOcase iPad case mod

I love my DODOcase. Money very well spent1. Throw an iPad in it and it just looks like a big Moleskine (love that look) instead of some techy $500+ block of “steal me”. Plus, it’s about the only case out there that I feel is actually worth the $50 they all seem to cost. But, there’s one problem: nowhere to store any papers. I had to go to City Hall the other day and needed to bring some papers with me. “I’ll just fold them in half and throw them in my DODOcase.” I thought. And it worked, kind-of. The problem is, that every time you open you have to move them to use the iPad, and you’re stuck like that till you get home again and have somewhere real to put them. “If only it had an accordion pocket like the Moleskine it’s emulating.”



Feed by Mira Grant [Book Review]

image

Feed is not about zombies. Yes, they play a significant role in the book, but the book is simply not about them. It is a gripping book about journalism and journalistic integrity.

It starts out with a dramatic zombie escape sequence, as all books involving zombies must, which honestly left me feeling… “um. ok. And?” The scene was good but it didn’t seem to have a real point beyond acting as a hook. Immediately afterwards she sets about the task of building up the world of her main characters, not a “zombie! zombie! fear! fear!” world; a world where two twenty-something siblings go about their life of being professional bloggers / journalists in a world where The Infected are an everyday part of life that has been, to varying degrees, contained.


Dear AT&T: Fuck You

As we all know, AT&T has been having serious issues with their quality of service thanks to the iPhone. What most people don’t know is that it isn’t a problem that can be solved by simply putting up more towers1. But that’s not what I’m upset about. I’m upset about their handling of the “3G MicroCell”.

I live in Cambridge MA, just across the river from Boston. There are millions of people here (literally), and, like many AT&T users my calls get dropped even when outside, on bright sunny days, with five bars of service. In my house maybe eight feet from the windows I’m lucky if anyone can understand what I’m saying, or can even hear me in the first place. My girlfriend works from home, and for the most part, I don’t attempt to call her, because it’s not worth the frustration, but then I get my hopes up, call, can’t understand her, and eventually have the call dropped. But she’s just screwed if she needs to call someone on her cell. But, like I said, I’m not actually that upset about the crap service. It’s like being mad at someone with a broken leg for not being able to run. Of course, their leg was broken years ago and they still seem to be hobbling around acting as if it were fresh…


Git Rebase: why, and when, you'd use it.

Rebase is one of the most powerful tools in Git’s arsenal, but it can trip up people coming from centralized version control systems. This is just a quick example of why, and when, you’d want to use it.

Let’s say we’ve got a team of three developers. Monday morning they all come in, Bob makes a quick commit, and shares it with everyone. They all do a git pull and suck it into their repos.



The $11.09 iPad typing stand

The Problem

When you check out the iPad at an Apple store they’re all lined up on little lucite stands with a grippy top and a slight angle so that they’re simultaneously easy to view and easy to type on. I love those stands. I’d totally buy one, but I can’t. [Update: now you can buy something even better. Check out the Loop from Griffin and their A-Frameimage

the goal here was to create a stand that would hold your iPad securely, would let you easily read the screen, and type comfortably on. Also, it had to not look like crap, so duct tape was specifically excluded, and this is the result.


Hi-Per Hanger [Review]

The Hi-Per Hanger from Black And Grey

image \

Let’s get this out of the way right off-the-bat. This, is a seventy dollar hanger. Technically it’s $30.95-$72.95 + shipping, and that is a pretty hard price-tag to swallow for a hanger. But, the real question is “is it worth it?” I’m asking from a purely practical perspective. The answer, as far as I’m concerned, is a whole hearted YES! If mine were stolen today I would go to the web site tomorrow and buy another one without hesitation.


Macro Micro Checklist

Macro Micro Checklist
ExampleA variation on my Simple Checklist Sheet.

The Macro Micro Checklist allows you to maintain a list of key deliverables, fine grained tasks, and a quick calendar of highlights for the upcoming month.

In the top left you’ve got a list of Key Deliverables. These are the high-level tasks / projects you’ve got on your plate. They may be personal things like “File Taxes” or work based things like “Deliver Example.com’s new logo”. There’s a faint dashed box you can either ignore or make a checkbox out of, and then check off the deliverable when you’ve completed it. If one of them needs to be brought to someone’s attention, needs followup, or whatever, you can just fill in the exclamation point at the end of the line.


Three Useful Task Sheets

Almost five years ago I wrote a self organizing todo-list application. It was ugly, but worked really well. Unfortunately for me, I really prefer writing my todo lists out on paper. I like the simplicity of it, ideas just flow out through my pen. I can make notes and draw little arrows connecting things. And, I can make really satisfying check-marks in boxes when I’ve finished something.

Paper’s just the right medium for me, and I know I’m not the only one. So, I created a paper version of that self organizing todo list, and every few months I find some little thing I can do to improve it. Now I’ve got three different forms which I’ll cover below:


On creating my own language

Some of you may remember that I was working on creating my own language. I wrote a creation myth in it a little over a year ago, and with the exception of a few months, I’ve been trying to make daily diary entries in it as a way of not only recording my life but practicing my language.

I didn’t create this for any grandiose reason. I simply wanted a language that would express the way I think. I wanted to play with language itself and learn more about it. And, I wanted to learn a new language. But I’m fairly honest with myself about what I can, and will, realistically accomplish. I could learn a natural language no problem, except for the lack of anyone to speak it with. More importantly, natural languages are external things. Someone else created them. The rules are someone else’s, and to speak it correctly you have to learn, and abide by those rules. But, they’re all just abstract foreign things. They’re not anything you’ve grown up with (at least not the languages I’m interested in), or anything that conforms to your brain’s view of the world. And without someone else to speak it with, it’s a lot like rote memorization. You memorize their words, their rules, and just accept them. And free writing in a natural language before you really understand the rules can lead to some very bad habits based on misunderstandings, and the words you have to look up seem fairly random. It doesn’t make a lot of sense why a word sounds the way it does, or why it means such different things1. Reading from books isn’t very doable either until you’ve built up a fairly decent vocabulary.



On learning Na'vi (or any "fictional" language)

There are a number of people out there who have expressed an interest in learning Na’vi (the language spoken by the Omatikaya in Avatar ) and are getting verbally shat upon by the communities they dare to mention this in. And, I can understand the knee-jerk reaction that it’s silly to learn a language from a semi-random piece of popular fiction. But, I can also think beyond that.

Learning a language, any language, is a remarkable thing, especially in American society, and if you think about it, there is nothing more or less valid about a language that was created for a movie. Does it really matter how a language came to be? The fact is that it is a legitimate and speakable language. Koreans write in Hangul, a writing system that Sejong the Great made up from scratch less than 600 years ago. They didn’t need a writing system, they were getting by with Chinese characters. It just so happens that the Korean people seemed to agree they deserved their own writing system, so they switched, but it was no more a “real” writing system than any of the ones Tolkien created for his languages. There are two million Esperanto speakers, and maybe ten million who have studied it. It’s a conlang (constructed language) just like Elvish and Na’vi, the only difference being that it was created to bring world peace through improved communication instead of just being created for the sheer love of language.


Stop applying your agenda to Avatar (and everything else)

Over on Sociological Images Lisa evaluates Avatar(spoiler alert) Unfortunately, she’s got an agenda, and is seeing what she wants to see instead of what’s actually there.

First off, she says that the Na’vi “… are, in short, the stereotypical “noble savage.” Which as I stated in my review of Avatar, is simply false.

The Na’vi are never portrayed in the classic sense of “noble savage”. They are noble yes, but your classic “noble savage” (at least as I’ve seen it) is also, “savage”, “primitive”, and simply “doesn’t know better.” You will find none of that in this film. The Na’vi are simply an indigenous people with simpler technology than ours…


Why tinyurl.com and its cousins are a blight upon the internet

Every web page on the internet has an URL that is a unique address (that’s why it goes in the “address” bar), and in the beginning everyone used that. But early e-mail clients kinda sucked, and some of the current ones still do, and those addresses were so long they’d wrap, or had some funky characters in them that the e-mail client wasn’t expecting, and so it’d break the URL in such a way that you’d have to copy and paste both parts of it into the address bar instead of just clicking on it.


Avatar [review]

I didn’t plan to write this.

I just can’t get it out of my head.

Despite the hype, despite my fear of having expectations set too high, Avatar has blown me away.

You’ve probably heard people talking about how incredible the CGI is, and it is. But that’s not important. What’s important, is that James Cameron has created a lush and beautiful world that is utterly believable. You will hear that the plot is fairly simple, even predictable. But, that’s not important either. What’s important is that you enjoy every moment of it. What’s important, is that you care about characters, and when over one hundred and fifty minutes have gone by, you just want to see it all over again. It simply does not matter that the core story arc has been used time and again. Storytellers keep using it because it’s a works, and works well.


I saw a beautiful thing today.

There was a young girl, at that age when puberty hasn’t quite reached her, and everything hasn’t changed. I watched her through the window of the subway train as she buried her face into her fathers chest and hid from the cold. He was talking with another man his age and gesturing with his arms. After a moment she turned around, reached up, and put her hands around his forearms. Not to interfere. Just, to be let them hang, to touch him as he continued talking and gesturing.


Robert A Heinlein Changed My Life

Somewhere around the time I was in High School my mother introduced me to Heinlein, and one of the first things I read was A Stranger In A Strange Land. And, I think it impacted me even more than I realized at the time. I’m almost finishing rereading it now, and reflecting on some interesting paralels between the characters and myself. While I could never prove it, it seems that as I changed from a “nestling” into an adult I took on the morals of Valentine Michael Smith and combined them with Jubal Harshaw’s way of thinking.


A Behaviorally Targeted Secret Santa

We’re doing an interesting variation on Secret Santa in our group this year, that you might enjoy too.

Background: we do behavioral targeting in my group. We get anonymous data about web surfers and try and try and make sure that those people are shown banner ads that are actually applicable to them, but we never know WHO, and thus…

A behaviorally targeted Secret Santa. Each participant submits a list of 3-5 items they’ve recently purchased (online or off) and are comfortable sharing to the coordinator. Then, instead of drawing names from a hat, each participant draws a an anonymous list of recent purchase with a participant number and has to try and buy a gift they think appropriate based on that for under $20.


A present for my Twitter followers.

A little bit ago I got a 1" button maker and have been having lots of fun with it. So, I thought I’d make you a present. :) In order to get one all you have to do is send me a Direct Message on Twitter. If, by some chance you’re following me (@masukomi), but I’m not following you (and thus you can’t DM me) send me an e-mail at masukomi@masukomi.org. Your DM, or e-mail, must contain 2 things:


An evolutionary leap

It was, so strange… No, unbelievable.

I was sitting at my desk, typing away, when the phone rang. Hmm, I don’t recognize that number… “Kay speaking”

“Hi, I’m Random Headhunter X with Random Company Y, and I was hoping I could talk to you about a position. I know you’re not looking, but I was hoping you might know someone…”

My brain froze for a minute. I know more words followed but… did he just say what I think he just said? I rewound the conversation “…I know you’re not looking…” Yes! Yes he did! Oh… my… god! He can read! There’s a note on my home page next to the resume link. It says “NO. I am not looking for a new job. Don’t offer.” And … he read it! He read it, and understood what the words meant.


A realization ~ Why hadn't I noticed this ~ Never a long day

I was thinking about my trip and had one of those awesome, yet so simple, realizations.

I never had a “long day” on the bike. Like many of you, I sit in my cube day in and day out, and by three o’clock on most of those days it’s already feeling long, and my brain just starts thinking about going home. But that never happened on the bike. Even when I was ridding ten hours a day I can’t remember a single day that felt “long”. Sure, on some of them my shoulder muscles were really hurting badly for hours on end, but mentally it never felt like a long day. There were boring times, and frustrating times, but never times when you were just desperate for it to end. And what an *amazing* thing that is.


Looking for something

Ever since the trip was done, I’ve wanted more.

It’s not that the trip was so wonderful that I want to recapture it. It’s that in nearly six thousand miles of riding I never found what I was looking for.

I keep thinking that it was too easy. That through all of that, there was no real challenge. The roads are all pretty much perfect. There’s no real risk of running out of gas in the United States. Breaking down? So what? Grab your cell and a tow truck will be along in a couple hours at the most. Fell down and broke your leg? No worries, even if you’re out of cell phone range a car drives by every ten minutes or so. Even driving down a dirt road through the badlands that doesn’t exist on the gps, has no towns, or any good reason for being traveled I kept encountering more cars…


Microlight Solo ~ Two weeks and change on the ground ~ Final Impressions

image

Quick summary

I set this tent up and took it down every day for over two weeks and thought it was excellent.

The details

I figured that camping was “the way to do it”. I’d save money, and remain a bit more in contact with the world than if i’d of stayed in motels on my trip, so I need a tent.

I hoped on my bike and drove about a hundred and fifty miles up to the L.L. Bean store in Maine. Sure I could have hopped on the subway and gone to the local R.E.I., but hey L.L. Bean’s been at this a lot longer, has a much cooler place to visit, and… road trip! And, to be fully up front. I’d read some good reviews of the L.L. Bean Microlight Solo on their site and just wanted to see one in person.


I almost Forgot ~ Buffs make everything better ~ Great comfort item

So, In my list of items in my kit ( http://masukomi.posterous.com/write-up-on-my-kit-the-things-that-worked-and ) I totally forgot to mention my Buffs. This is most likely due to the fact that I wear them every day anyway so I don’t really think about them much.

One around the neck. Kept it from getting to chilly and I hate the feeling of those tiny bugs that seem to manage to ping off your throat from time to time. 70 mph mosquito impact on an exposed throat is not a pleasant feeling. On the cold wet day when I was driving through a cloud I swapped it for a polar buff. As expected, it was perfect.


Write-up on my kit ~ The things that worked and didn't. ~ What I'll change next time.

Some of you, mostly the motorcycle geeks reading this, will be curious about the kit I used on the trip, what worked, and what didn’t.

I laid out the initial batch of it with detailed notes on flickr (click the image to go to flickr and see the notes) There were a number of items added afterwards.

image

What worked:

  • The iPhone was wicked useful but I had no service, or no data service for so much of the time that the built in map app was useless and I ended up buying the TomTom app since it keeps all its maps locally. The battery life was fairly sucky though, and the video capture is totally useless when mounted to a bike. The vibrations make the picture look like it was shot from within a running front-load washing machine. Listening to audio-books on it rocked, especially when driving through mile after mile of corn and in those hours when the sun has set, so you can’t see anything, but you’re not tired yet.
  • The L.L. Bean Microlight Solo tent was superb. So well designed that I was able to put it together in the dark the first time out in the wild. I didn’t end up using it in the rain, but i think setting up, or tearing down, any tent in the rain must suck. At least tearing this one down can be done pretty quickly, and I did do that in strong winds hoping to beat an approaching storm.
  • The $2 net from bikebandit.com held everything down but would have been mediocre at best if not for the Carabiners.
  • The 5 Carabiners were an excellent addition to the kit. 1 at each of the front corners of the net, plus one one each side to give it a redundant attachment to the saddlebags and to go through the loops at the end of the tent bag and the dry bag, so that even if the net came loose somehow (it didn’t) the things it held down wouldn’t go flying. For a while I put one through the handle of the gas can to attach it to the net but I came up with a different solution later. They also acted as a simple thing to hang my helmet from when I went into some place to eat. I used the locking one for that to make it a bit more difficult for a would-be thief.
  • The wind-up flashlight was awesome and surprisingly bright.
  • Sea To Summit Evac Dry Sac ( http://www.seatosummit.com/products/display/64 ) I got the 35 liter one and kept my sleeping bag in it. As the trip went on more things started living there too. The clipped loop at the top went through a carabiner to be sure it couldn’t fly off even if I lost my net.
  • Spork! I got it because it was neat. It turned out to be totally useful. It’s not obvious from the pics but one of the fork end’s tines has a serrated edge to use as a knife. http://lightmyfireusa.com/spork.html
  • Swiss Army Knife. One of those nice fat ones.
  • Reusable ear plugs were great. Far better than the foam ones since you don’t have to stand around waiting for them to expand in your ears and then re-attempt if there’s still a gap. I knew this before but using them that frequently really convinces you of the advantage.
  • Odwala Bars were great. I wish I could have found more when I finally ran out. Cheap, not overly sweet, and I liked most of the flavors.
  • Medium bicycle hand-pump was excellent. About 20 pumps per pound of air pressure. I rarely had to put in more than a few pounds per tire. Don’t forget that air expands as you go up in altitude. Was letting air out as I approached Colorado, then putting it back in as I made my way from it.
  • Fieldsheer Highland II suit. I thought I’d boil in it. Most of the time though, even in 80+ degree weather, I had it zipped up all the way with just the air vents open. In Wyoming i even put in the winter liner. It was about 53 degrees and I was riding through the bowels of a cloud at 70+Mph. Only real complaint was that the left knee pad on mine is positioned too far to the right so it wouldn’t really help me in a crash. https://weblog.masukomi.org/2008/05/03/fieldsheer-highland-ii-review
  • The CamelBak Mule NV was excellent. The built in rain-cover worked perfectly and having the water on my back available whenever I felt like it made an amazing difference. It was also really nice to be able to reach over and grab the tube to get a drink of water from it in the middle of the night. I did have some complaints related to it on the trip but they weren’t really failings of the Camelback. The discomfort was more due to bike ergonomics, personal muscle weirdness, and the weight of the water but there’s nothing you can do about water weighing what it weighs. A camelback tank-bag would be awesome. I’ve only seen one (knock-off brand) and it didn’t look good.
  • Zip-lock disposable tupperware thing (sandwich sized). I’d stick my leftovers in this, and throw them in my CamelBak. Don’t think I bought dinner once the entire trip thanks to this.
  • Scala Rider Q2. It took a lot of fiddling over many days before I finally got the speakers exactly against my ears but once I finally did it was excellent. You’d have that problem with any set though. I played mp3s through it with the bluetooth paired to my phone and in standby for 3 full days (8-10 hours each) of riding on one charge and it still had juice. People seem to be able to understand me just fine on it when they call, although they seem oddly reluctant to call me if they know I’m on the bike, which is sad. I would have liked to hear from them.
  • Pamprin. Nothing kills headaches better. Although staying hydrated meant headaches really weren’t a problem. Pretty much only needed it when suffering from altitude sickness as I came in to Colorado.
  • REI sleeping bag. it was rated for 35 degrees Fahrenheit but, sleeping naked in it, I got chilly, but not cold, in the mid forties and low fifties. I wish there was some standard way sleeping-bag temperatures were rated. I wouldn’t have been chilly if i was wearing anything though. On warm nights it was a bit too much and I ended up oscillating between too hot and too cool, trying to figure out just how much of your body to leave exposed to balance out the heat from the covered bits, which was complicated by not having a pad under it which limited the number of comfortable positions.
  • The Tour Master boot covers worked great, but I lost one, bought a replacement pair, and then found the one I thought I’d lost.

Things I never used but was glad to have:

  • Tire repair kit.
  • Small roll of Duct Tape
  • First Aid kit. I’ll be replacing it with a soft bag next time though. The hard plastic was obnoxiously inflexible when I needed to shove it in or pull it out of my bags to get to other things.
  • Jumper cables
  • Siphon
  • Umbrella

Things I’m unsure about the value of:

  • Tie Downs. http://www.bikebandit.com/bikebandit-com-premium-tie-downs-with-soft-tie-loop-pair Theoretically these would have been useful if I’d needed to throw it into someone’s truck bed, or maybe if it fell down a big ditch or got stuck somehow I could have attached them to the bike and a tree and used the little ratchet to help pull it up. Theoretically…
  • The moleskines got soaked. New rule: all paper products must live in a dry bag. Even so, I tended to not stop riding until sunset so I didn’t really have any time to use them before it was dark.
  • More than 2 changes of clothes. The extra socks were great, but I think I enjoy fresh socks more than most. Really though I only wore 2 shirts the whole time because I was smelly anyway and it’s not like anyone saw i’d been wearing the same shirt for a week. If I got a chance to shower at night I’d just wear the one i had on and soap it up and rinse it out before taking it off and cleaning me. Leave it to dry for morning. The drying by morning didn’t always pan out.
  • iPhone RAM mount. I got it thinking i’d take video while driving. As mentioned the vibrations made that unworkable (not the mount’s fault). It’s decent if you’re going to use your iphone as a GPS but if you do that you better have somewhere to plug in the phone. Plus you can’t work an iPhone with gloves on, and you don’t want to leave it there if it’s raining. Mostly, I didn’t use the mount and just kept the phone in my pocket so there wasn’t a cord going out between me and the bike. The mount was well made but ultimately kind-of useless for an iPhone. Maybe I’ll get a camera base for it instead.

Meh

  • Winter Gloves. I thought I might need them in the rockies. I never used them. I guess it depends where you’re going and when.

Things I wish I’d had:

  • One of those helmets with a clear visor but a slide-up tinted layer. A couple times I ended up riding past sunset and it just wasn’t worth digging out the clear visor and swapping it so I just rode with the tinted visor opened up. Or, maybe a dual-sport helmet with one of those over-hanging sun-visors that dirt-bike helmets all have.
  • Somewhere on the bike to plug in the phone.
  • A real GPS system. TomTom Rider or, better yet, Garmin Zumo.
  • Somewhere on the bike to plug in a gps.
  • V.O.I. POV Helmet Camera. http://www.vio-pov.com/ I am definitely getting one for my next adventure. I think it’s the only good camera like it with an audio-in so you can have a real mic instead of just recording wind-noise like most of them do.
  • One of those rolls of foam padding for under your sleeping bag. Or, better yet, one of those ones that folds into a 3D rectangle and has an egg-carton like texture. Definitely getting one of those for next time too. Sometimes the ground is freaking uncomfortable. I don’t trust air mattress and you’d waste time filling and emptying them every day
  • zip-ties. I didn’t end up needing them but I think they’d be a really good thing to have.
  • A companion.

Things that didn’t work:

  • Fieldsheer Expander Saddlebags. There weren’t many options that would work on my bike. These sagged a little farther every day and let everything in them get damp. The rain covers are a joke. They will try and fly off at the first opportunity. The stitching along the main zipper started to come undone on one of them after a few days, and that was the side with less stuff in it. The way the zipper opens is really annoying because it well… doesn’t really. I mean, the zipper works, and there’s an opening, but it’s like trying to pack a suitcase through the end of a manilla envelope. Also, it’s not at all obvious what they expect you to do with some of the pieces it comes with, they don’t provide a manual, and when I e-mailed them the pdf manual they sent me was only semi-helpful. Also, it was missing one rain-cover when it came from the factory, which turned out to be not much of a loss since they don’t want to stay on anyway. Fieldsheer did end up sending me a replacement for the missing one though. So, yay customer service. Also, while it was easy to lock them to my bike via a bicycle cable-lock, and I rarely needed to take them off, I never felt my belongings were really safe from prying hands (not that there were any). Next time I’m going with aluminum panniers. It just wasn’t an option on this bike though. To be honest, the saddlebags didn’t suck. They were mediocre. If I had to use them again I’d put down a piece of hard plastic across the bottom to keep them from sagging in the middle.
  • Trailer Life Directory RV Road Atlas. The map indicates what towns have campgrounds / rv parks near them, but then you have to go to the index in the back to see what’s there, and there’s no phone number, address or anything else for any of them. So, you know they’re around there somewhere but that’s about it. Without the iPhone to look them up i’d have been screwed. Also, pages started falling out the second time I opened it, in the end I decided that was a good thing because I just started ripping out the page(s) for the current day’s state(s) in the morning. And it is unexpectedly huge. God what a piece of crap.
  • Energizer Energi to go iPod charger. Totally useless piece of crap. Maybe it works better on iPods, but it’s crap with an iPhone 3Gs. It would charge for a minute, then the voltage seemed to fluctuate and the phone would claim it was incompatible, then it would charge, then it wouldn’t. Each time it switched to wouldn’t it would wake the phone and waste it’s battery. It drained more power than it gave. Only worked well once.
  • The Aerostar GP Plus gloves stayed at home, and I’m about to put them on Craigslist. I thought they’d become more comfortable once I broke them in, and while they did slightly, they were never comfortable enough for a long ride. Instead I went with my no-name “Backup Gloves” which are just leather, some foam padding across the knuckles and kevlar across the palm. They’re no good at dampening vibration, and after riding through the pouring rain I was able to clench my fists and watch a stream of water squeeze forth from each one.
  • Unable to find some overgloves I got a pair of Joe Rocket Ballistic 6.0 waterproof gloves which I ended up hating. They had an inner glove that was essentially free floating and would bunch up at the finger tips, and make it hard to get your fingers to slide into the right holes when putting it on, and a nightmare if your hands were already damp. To make matters worse, they only kept me mostly dry. My hands still ended up feeling slightly damp.
  • Aerostar GP Plus gloves. Too uncomfortable. Left them at home
  • Knox Gilete Air back protector. Too bulky. Would have been a pain in the butt, hot, and unpackable. Went with the CE back armor built into my suit instead.

Things I’ll do differently next time:

  • Two Piece suit instead of a one piece. I’m thinking about the Aerostitch Darien.
  • Metal Panniers instead of textile.
  • More waterproofing (dry sacks inside the panniers probably).
  • Take the time to wire in some sort of power outlet if the bike doesn’t have one.
  • Get a Garmin GPS.
  • Get a different bike.
  • Get a better map.
  • Get better gloves (and some waterproof overgloves).
  • Find a bigger challenge. Africa’s looking better by the day.
  • Find a companion… I hope.

Curious about what worked and what didn’t in my trip from Boston to the southern tip of South America? We put together a huge gear review after that trip too.


The unexpected: ~ Sometimes it is a grand thing ~ Sometimes it's simple

I thought it would be a Grand Adventure. Something I would return from with tales of interesting events and intriguing sights. But it wasn’t like that at all. In fact, there wasn’t a whole lot to report on, on a day to day basis. I’d kind-of bemoaned that about Lois Price’s books. I enjoyed them, but it felt a bit like she’d left out so much. She’d cross entire countries only mentioning their existence in passing. “How could she leave out so much?!” I thought. It just doesn’t make any sense until you have a long adventure of your own that you understand. It’s the simple fact, that for the most part, not much happens on a motorcycle adventure, at least, not while things are going according to plan.


First there was the pic ~ with mention of a story ~ Now you have the words.

It started with a thwapping on my left foot.

Thwap

Like a thick cloth being whipped heavily across my boot.

Thwap

“But, There’s no cloth in front of my foot…” I think.

Thwap

I’m imagining some impossible piece of canvas beating in the wind, occasionally swinging around to slap across my laces.

I look down. There’s a grasshopper IN my shoelaces, its whole body wedged under them against the tongue of my boot.


I think it's dead now. ~ There's no way it's still healthy ~ It's not my fault though

I forget what state I was in. Ohio maybe? I’m not sure.

I was driving along, through the edges of some town when I see, for an instant, a Monarch Butterfly.

And then it hit me.
In the chest.

*whap*

Then, as they weigh so very little, the force of the wind colliding with my chest and rushing upwards pulled it along.
Right
up
into
my
HELMET

*flappityFlappityFlappity*

“AAAAAAAHHH!!!!”

There’s a flapping papery thing stuck between my jaw and my helmet. IT’S ALIVE!


Pictures from across the states

Somewhere unknown
image

Camping in Carlyle IL
image

Pics from the Sky Meadow Campground
image
image
image
image
image

Wind Turbine Blades
image
image

Grain Storage
image

Murals by E. Rhodes
image

Wyoming Plains
image

Indian Springs
image

Phantom Canyon Road’s southern end
image

Bug Spatter
image

Iowa Standard
image

My bike in The Badlands
image

The final morning
image


Today was the last ~ It started off in a cloud ~ Ended with regrets

Today, my last day, started off about a third of the way across New York in Arkport and found me riding through another cloud. This one was just enough to shorten visibility and mist up your visor. Not like the one in Wyoming which left everything dripping. After a while I made my way past the hills that bounded it and found bright blue skies with sunlight streaming down.

I was excited. “I’m going home!” I thought, but the closer I got to home, the more I didn’t want to arrive. Even taking the Mohawk Trail on the way back through Massachusetts didn’t lift my spirits. In the end, it just didn’t feel like a homecoming. I love seeing Boston’s skyline come up over the horizon after being away. It’s always made me think “ahh, home” before. Today though, I just thought… “Maybe I should have kept going to California…”, and “I don’t want this to end.”


An evil bathroom ~ Did The Joker design it? ~ I'm greatly displeased

I walk in and the light snaps on. The stalls resemble small concrete torture rooms where you can easily wash down the blood. I’m about to sit when the light snaps off. “WTF?! Was there a switch I missed?” I start to move and they snap back on. No switch by the door. “This does not bode well.” The lights are on a timer. It is set to approximately 15 seconds after movement stops. It doesn’t notice you on the toilet. Every fifteen seconds the lights snap off and you have to wave your arms in the air to make them come back on.


A compromise reached ~ Colorado will be it ~ Barring surprises

I’ve reached a compromise with myself.

Turning around at the first sign of trouble really isn’t me. And, while really annoying and unsettling, the starter issue isn’t a killer. If it happens again I’ll stop at the next Kawasaki dealer I pass. I’m still not happy about driving with an iffy bike though. And, I’m still not sure that this trip is really giving me what I want for the reasons I gave yesterday. But stopping here in the middle of a non-destination, that would suck. “Yes, I drove to nowhere special and turned around.” That just doesn’t work for me.


Everything I have ~ All spread out around the room ~ Trying to dry out

  • Pants - wet
  • Spare pants - wet
  • Boots - wet
  • Sneakers - wet
  • Socks - wet
  • Spare socks - wet
  • Shirt - wet
  • Spare Shirts - wet
  • Atlas - wet
  • Moleskines - wet
  • Waterproof pocket - wet
  • Towel - wet
  • Waterproof motorcycle suit -wet
  • Tent - wet, but was expecting that
  • Sleeping bag - DRY
  • Electronics - oddly DRY

Partially this is my fault:

  • I didn’t close the air vents on my suit, so water got in, although that doesn’t explain why my legs were 100% soaked.
  • I didn’t remember the rain cover on the Camelback until it was wet
  • I didn’t think about putting on my rain booties to keep my feet dry.

Everything in the saddlebags is some degree of wet because the waterproofing on them is crap and the “Rain Cover” attempted to commit suicide the first time I tried to use it, and would have succeeded if I hadn’t thrown its drawstring through a carabiner “just in case” before setting off. The gas can tried the same thing once but failed because I put it’s handle through a carabener too.


Some complications ~ Starter is on the fritz now ~ Need a mechanic

I hate Missouri. Unfortunately, it hates me back.

It was getting late but I just wanted to get the fuck out of Missouri. I could have stopped for gas but I was all “No, I’ve got another 20 miles before i need to look. Let’s get out of this state!” Unfortunately I’d forgotten that Missouri has notably higher speed limits than all the previous states, which means I’d been going notably faster and, it turns out it shortened my range by about 40 miles. My bike doesn’t have a fuel gauge, or even a fuel light. So, when it first ran out a few miles before escaping Missouri’s grasp, I didn’t think “oh, switch to reserve, find a gas station” I thought “WTF?!” but after a minute on the side of the road I figured it out, and threw the gas from my gas can into the tank. “Problem solved.” I thought.



For those of you who don't "get" Twitter

It’s the little things that bind friendships closer. That quirky look on his face as he tells you about the bug that landed on his finger. The fact that in the middle of your phone call he suddenly stopped and calmly said, “the cat just horked on my foot.”

I don’t love you because of the valuable information you tell me. I love you because of all the other things you tell me.



Relative positioning imagery for linguists

Conveying the words for relative positioning in a new language is difficult without visual aids. And finding visual aids you have permission to use can be particularly difficult for conlangers. This is the first of four such pages. I’m releasing them into the public domain, so feel free to do whatever you want with them. In PDF format with text and without text. In SVG format without text. In PNG format without text. If you do use it, I’d love to hear about it. [Update: second page of these is here.] Preview:


Things I wish they'd told me before I got my motorcycle.

The thing to keep in mind:

Motorcycling is a lot like boating. You can get yourself a dingy that’ll get you around the bay for pretty cheap, but it doesn’t have much in the way of features, and if a big wave comes along you’re going to drown because you don’t have a life preserver. As with boats, the price range (for bikes and gear) goes from cheap and affordable to mind-bogglingly expensive.


Honda Metropolitan Scooter [Review]

metro

Summary:

The Metropolitan is a stylish, well made, scoot for getting around town, that is a blast to drive, but could do with some better brakes.

NOTE: This post was written in 2009, and I haven’t ridden more recent models. A quick look at the most recent models (2024) suggests that not much has changed and that this post is still pretty relevant.

Introduction:

The Honda Metropolitan ( CHF50 ) was introduced in 2002 with a visual style that emulates that of the classic Vespas of yesteryear. I’m typing now and waiting It’s 4-stroke 50cc engine will get you around town at a little over 30mph and gets 80-100mpg along the way. Since its introduction in 2002 the only thing Honda has changed is the color, although there was a Metropolitan II


Mass-transit within Boston isn't worth it.

A huge number of people use the subway to get from one part of the city to the other twice a day, five days a week. If they’re smart, they buy a monthly pass which costs $59 and gives you unlimited rides within the central city zone.

For the same $59 you could buy 29.5 gallons of gas at today’s prices ($2 per gallon). Burn that gas in a 50cc scooter at a conservative 80 miles per gallon (you can get more) and you can go 2,360 miles. I would estimate that the average distance traveled between home and work is less than five miles, but, to be conservative and keep the math easy we’ll say 5. That means you could make 236 round trips to work with it. That’s just under one year’s worth of work commuting for the cost of one month’s T-pass.


Localization for Struts Freemarker users

Because it took me freaking forever to find instructions on how to do this…

  1. You do NOT need a message-resource tag in your struts configuration files. Those are outdated instructions for old versions of Struts.You do not need to edit ANY xml at all.

  2. Your Action needs to implement Freemarker’s TemplateMethodModel interface

  3. You need a package.properties file (the default locale) and a then another one for each other locale / language you want to support (ex. package_en_US.properties). These should be located in the same package as the Struts action that will be needing them. You can also do ClassName.properties if you want to tie some to a particular class.


Why your tiered password scheme is flawed, and what to do about it.

First, let me explain what I mean by “tiered password scheme”. Many perfectly smart people I know have one strong password they use for one or two online banking type sites. They’ll then have a “medium security” password they use on sites that kind of important to them (maybe those sites have their credit card info stored), but not critical to day to day stuff. Then they’ll have one or two passwords they use on all the other sites like Twitter, Yahoo!, Facebook, GMail, etc.


Is that even running?

It’s not uncommon for me to wonder if some app is running on my linux or OS X box, and while I could pipe together ps and a couple greps it felt silly to keep doing it after a while. So, I applied my admittedly limited bash skills and came up with the following script which I throw that in an executable called “got”. Now I can just type “got tomcat?” (the question-mark is optional). If anything is running with “tomcat” in it’s command it’ll give me the skinny on it. Otherwise it’ll let me know it wasn’t found.


Get any URL onto your phone with a QR Code Bookmarklet

If you’re like me you find yourself sitting at your computer and need to go away, but there’s some page you’d like to read, or continue reading, on your phone. Well, if you’ve got an Android Phone or essentially any phone in Japan you can just use your phone to scan in a QR Barcode from your computer screen and then open the url on your phone. I know for a fact that there are other phones in the US that can read QR Code, but you’ll have to Google around to see if your phone is one of them. Sound good? Then go here, see the screenshots, grab the bookmarklet, and let me know what you think. P.S. If you’re interested in seeing what’s going on with 2D barcodes as we start to catch up to Japan you might be interested in checking out the 2d code news site.


Why I moved my domains to GoDaddy.com

Or, how to treat your customers right.

I’ve had a number of domains with Register.com for years now. They’re not the cheapest, but they’ve got good tools for managing your domains and back when I used to be a freelance web designer/developer I had to call them a number of times to help address setup issues for clueless customers. They were always nice and helpful.

But, I had about seven domain names with them. Roughly three months before every domain expired I’d get an e-mail from them that essentially said “OMFG Yer gonna expirez! Renew Now!!!!”


Are you missing the point entirely?

This keeps happening to me. I follow a link from one interesting blogger to another, read some post that sparks a question in my mind. Maybe it’s related to the post, maybe it’s an unrelated question for the poster. Sometimes I’ve tracked down their site because I found a bug in some open source software they wrote… either way, I’m on their site and I’m trying to contact them. But guess what? There’s no freaking e-mail link anywhere, not even on the “About” page. In fact there’s no way to contact them directly at all. Sometimes I’ll find a link to Flickr, which I happen to know lets members send little messages to each other, but *seriously?!"*What is the fucking point of writing posts on your blog if you’re not going to give anyone a way to respond?"


Shopping: musical geek style

**Background:**I’m a musician, or, I was. I used to want to be a studio bassist. When I’m in the house I’m frequently singing about whatever I’m doing. When I’m walking down the street I’m not just striding across pavement, I’m beating out quarter notes with my feet. Sometimes I add in syncopated�rhythms with my hands slapping my thighs. So, when it comes to remembering what to buy at the store there’s a song for that too. Here’s how it’s made. Maybe it’ll help you remember what to pick up too. **Step one:**list, out loud, everything you need to buy. Everything has to have an even number of syllables. If it doesn’t call it something else, or just draw out the last syllable as you sing it. Generally you just want two syllables per item. Today’s list was:


I don't know how it got this late...

“I don’t know how it got this late.” I said to my dog. “Well,” I continued, “I do know. I worked late, and I’ve been reading…” But then I stopped. I stopped because I realized that neither of those, or any of the other excuses we give for “how time flies” have anything to do with “how it got this late”. They’re merely how we came to not notice the passage of time to this point. But we have absolutely no idea how it passed. Some scientists have theories that describe its passage but not the real how or why of it. The energy of the Big Bang must be nothing in comparison to the energy required to move everything in all the universes forward through time. And yet, we sit here, not just ignorant, but not even noticing this force that is exerting an obscene amount of influence on our lives. It’s like someone has launched us from a cannon strapped to the back of a rocket while we continue to discuss the movie we saw last weekend as if we were calmly sitting on a park bench. And even that… even that metaphorical park bench is on a planet rotating at 465.1 m/s at its equator, 18 1/2 m/s around a sun, that is itself hurtling away from the center of our universe, and somehow we delude ourselves into thinking we’re stationary upon it. And all of this is nothing, nothing, to the force that moves us through time. I see two possibilities, although I’m sure there are more: 1) time is an incredible pushing force, and maybe the reason we can’t travel back in time is because we can’t overcome its inertia. I read a theory once, that went something like this: if you had a rod that was infinitely long and infinitely dense, that you could get spinning sufficiently fast, and then spiraled a space ship around it, the ship would be able to travel back in time. Now, I am woefully ignorant of physics, and quantum mechanics, but that sounds a lot like expending energy to overcome an opposing force. 2) all time exists in one instant so infinitesimally fine we don’t have words, concepts, or even brains capable of encompassing it. To me a two dimensional plane, with no thickness at all, is still infinitely thicker than the size of an instant with all time. If all time exists in an instant, then maybe we are just creatures whose way of processing it is to have created a linear perception of it. Maybe those days that seem to fly by in a blink really do. We know that if you travel fast enough time flows more slowly for you, like astronauts coming back to earth only to find that the time they spent away from us was seconds shorter than the time we spent waiting for them to come back. Maybe, those days, where so much happens so fast, that go by in a blink, go by in a blink because so much happened so fast. If all time exists at once, and it is merely a perception that we’re traveling through it one slice at at time, then who is to say ones perception doesn’t actually move them through it faster? I mean, when the astronauts land it’s not like someone went in and cut out seconds of their life. Somehow they end up with us at the same place in time, and yet they got there sooner than the rest of us. I think the physicists can prove me wrong on that theory, but isn’t it a wonderful one to try and wrap your head around? Regardless of how time works, or why time works, it concerns me that we are so utterly oblivious to a force that affects us so completely, and with such disregard. We give it lip service, we speak as if it’s this obvious thing we all understand, but we haven’t a clue, and I, like you, have no idea how it got this late…


How Borders lost my sale

(And why they’re going to loose a lot more if they don’t catch up with the times.) I love Amazon. I’ve signed up for Amazon Prime and definitely get my money’s worth out of it. But, Amazon’s simply can’t replicate the experience of browsing physical bookshelves and picking up random books by author’s you’d never heard of, simply because they caught your eye. So, I regularly go to physical bookstores, just to see what I find. It just so happens that the closest bookstore to me is a Borders, and I’m a Border’s Rewards member so I regularly have coupons for a discount on whatever book I want, which is why I found myself perusing the shelves of Borders yesterday. I found Lonely Werewolf Girl, which sounded intriguing, but odd enough that it could have been crap. So, I pulled out my phone and looked up the reviews on Amazon, which suggested that it was worth checking out, but, I also noticed the price was five dollars less. Five dollars is almost the cost of another mass market paperback. Now, I’m totally willing to pay a little more for any book in a store, because they’re the ones who led me to it on their shelves, and because I get to read it immediately. But I’m not going to give up the cost of almost another book. Next up was The Back of the Napkin: Solving Problems and Selling Ideas With Pictures. From flipping through it in the store I was confident I wanted it, and I almost didn’t bother looking it up on Amazon, but, having almost spent five dollars extra on the other one… I sat back down and pulled my phone back out. Ten dollars this time! It was $24.95 (plus tax) at Borders and $15.64 at Amazon. There’s no way I was going to pay 90% more for the same book. Yeah, I really wanted to read it right away… but 90%?! But this story doesn’t have to be an indicator of the fall of brick and mortar bookstores. There’s no reason Border’s can’t compensate. Borders.com is already hosted by Amazon (for some bizarre reason) so why not make the kiosks at all the Borders show me not only if the book is in stock, but bring up the reviews so I don’t have to deal with my phone. And, keep an eye on the prices online, especially Amazon’s. Apps like ShopSavvy just make it incredibly easy to compare prices, and they’re only going to become more ubiquitous. Just pick up the book, scan the barcode with your phone, and voilla comparison shopping, and reviews in seconds. Now, most people don’t have Amazon Prime (free 2 day shipping on essentially everything at Amazon), which means that Borders, and other brick and mortars have a pricing advantage because of shipping costs, but most people don’t think about shipping costs, and even if I was affected by shipping costs, they still wouldn’t have compensated for the fifteen dollar price difference. Traditional bookstores can survive, but they’ve got to be at least close on price, and they’ve got to overcome the fact that Amazon offers me piles of reviews on everything I’m unsure about. No matter how good your staff is, there’s no way they can have read everything. I want the traditional stores to survive. And while I am willing to pay a small premium to them for the services they offer me, there’s only so far I, or anyone else, is willing to go in that area, and it’s getting far too easy to find out when the prices are non-competitive. [Update] according to MKB Borders finally recovered their brain and split from Amazon.com. I never did understand their connection. Not only did Borders.com go to Amazon.com, after one click there was no more Borders branding and none of the purchases counted towards Borders Rewards, and they would obviously be making less than if they sold the books themselves. [Update] related post: How Borders made me into a regular customer.


Hyundai is Brilliant

(and why you should support them) Right now, most people are a little concerned about their jobs. Right now, the economy is going to shit because people are buying less. Part of this is the banks not giving out many loans. Part of it is that people have less income, or fear a sudden loss of it. But, Hyundai has just done something absolutely brilliant. They’ve made an offer: buy one of their cars, and if you loose your job within a year, you can give it back. On the surface this seems incredibly generous, and in a way, it is. But, the risk to them is probably quite small. You see, car manufacturers let people return cars all the time. It’s called a lease. But normally they get cars back with two years of wear and tear. With this deal, whatever cars they get back, come back with only one year of wear. Sales are down for all car manufacturers. Dramatic measures are going to be required for them to make it through this. And this, is awesome, because everybody wins. And, as far as the cars go? Once upon a time I spent $2,000 on a used Hyundai. I drove it for years, and if it hadn’t left town with my ex, I’d still be driving it now. It wasn’t perfect. But, it was one of the best, and most affordable, cars I’ve ever owned. As far as I’m concerned , it was totally undervalued. I wouldn’t hesitate to buy one again. And, if you need a new car? I think you should give Hyundai some real consideration, if for no other reason than the fact that they have the courage, and intelligence, to make you an offer like this. P.S. While the company may be brilliant, their web designers are beyond retarded. The main site is completely blank in Safari, and their USA site actuallycloses the windowwhen you try and go there in Safari. I’m not kidding. It’s all “No! I’m not decent!” *slams the door in your face*. Actually, maybe it’s just having an affair and wants you to think it’s indecent. Because, when you show up in Firefox it’s all “Hellooo sexy. Wanna come in and…view my ‘curves’?”


Magic to the Bone [Book Review]

Magic to the Bone is the best Urban Fantasy I’ve read in ages. Buy it now. This as another one of my impulse buys. If it weren’t for the quote on the cover from Patricia Briggs I wouldn’t have bothered, but I really respect Patricia’s writing and, of this book, she said “Loved It. Fiendishly Original.” I couldn’t agree more. The book is set in an alternate world where magic has been discovered, harnessed, and commoditized just like electricity. According to the jacket,


Developershare [definition]

Developershare: adj. The percentage or proportion of the total available pool of developers that is coding for a particular product or platform.

Example: Regardless of how good the Palm Pre is, Palm will be hard-pressed to steal any of iPhone’s developershare.


Aspirin Is Moving

[EDIT] Aspirin was a great idea, but spam has ruined email sending. These days, there are very few situations where an email sent via a home computer will ever reach its destination. It will be considered spam, because of its source.

Aspirin is an embeddable Java SMTP server, that’s been fairly well received. This is just an announcement of its new home and a notable change to the codebase.* There’s been a lingering threading bug with it which resulted in the only way to kill it being to use a System.exit() call.


4 1/2 Killer Mac Apps

Yesterday I was discussing the fact that I need a new laptop and how much I wanted to get an HP Mini 1000 (cheap, ultra light, good manufacturer), but couldn’t because of those damn independent Mac developers. They keep making incredible apps I simply won’t give up. Unsurprisingly, he asked me what my killer apps were for the Mac, and I thought you might be interested too. But, before I start the list, I just have to give a major shout-out to the indie developers for OS X. You guys make the most creative, useful, and beautiful software on any platform. If it weren’t for you I would have given up my Mac years ago.


Petitioning the god

With purpose, and a focused mind, I prepare to petition the god. Up from my desk I rise, and walk forth. Down the hall, into the room where his idol waits.

I pull my offering from my pocket: a small piece of paper covered with symbols, and the face of a past leader, all done in green.

Carefully, I prepare it, making sure it is flat, and smooth. The god will accept nothing less. With two hands, and head bowed, I hold my offering to his mouth, my breath holds for a second. Is it good enough? Will he accept it?


Practical Magic [Review]

A while ago I stumbled across the movie Practical Magic, and loved it. It’s this wonderful, playful, tale about finding love and accepting the magic that lives within yourself. And then, a few weeks ago, I discovered that it was based on a book by the same name, which I immediately purchased. What I read though, wasn’t a better version of the movie, as is typically the case. It was something else entirely. A slightly sad tale of finding women finding love even though they believed they either didn’t deserve it, or didn’t want it. And somehow, along the way, Sally’s children found maturity within themselves. It was wonderfully written, but sadly mundane. “The Aunts” still practice magic, and practically embody the witch stereotype. But they’re not much more than that. Just, witchy sisters who dress in black, “cast spells”, shun society, and happen to raise the main characters. In the movie they’re happy, playful, sneaky, strong women who happen to be witches ostracized by superstition. It was as if the screenwriter took the main themes, and characters, of the book and reworked them into an entirely new tale. But, the movie does remain true to the spirit of the book. They definitely count as a chick-flick, and chick-lit respectively, but which one is for you depends a lot on how you see the world. Is it a place filled with magic that you’ve mostly been ignoring since childhood? Or, is the world nothing more than the mundaneness that surrounds you? If the former, watch the movie. If the latter, go read the book. They’re both quite good, but, despite its title, and skillfull writing, the book really doesn’t feel very magical, and even though it has a happy ending it’ll leave you feeling a little melancholy.


Why you think the Caps Lock key is useless

Years ago I thought like many of you do; that the caps lock key is a waste of space. I never really got any benefit from it. It was just as easy, if not easier, to just keep a pinky on shift while I typed. There was even an article in Wired: Death to Caps Lock.

But then my eyes were opened, and I learned that the only reason I didn’t “get” the caps lock key was because I was a shitty typist. Sure, I could type over 100 words per minute, but my typing still sucked. It was some awkward crap that was bad for my wrists and that I’d just organically taught myself.


A simple way to encourage API adoption

Let’s assume for a minute you have a web site with an API people may actually want to use. Let’s use Flickr as an example. You can do as they did ( document it thoroughly and hope people use it ), or, and this is especially useful if you’re someone competing with an 800 lb. gorilla like Flickr, you can do something like this: First, figure out who’s a developer. If someone’s into your site enough to code for it’s API it’s generally a safe bet that they’ve got an account on it. When they sign up add a checkbox to the form: “Check here if you write software” Add it to their profile page to so they can check, or uncheck, it later on. Then, whenever a developer goes to a page, add a small note to the bottom “Developers: you can get the data on this page [link]with these’s APIs[/link].” and have that link to a page that indicates exactly which APIs can be used to get everything on that page, and link to the documentation. This has two benefits: 1) It’s a tease. It says “You could do something cool with this. Look how easy it is…” 2) when someone’s still getting up to speed with your API it makes it much easier to figure out what calls you should be making to get the information they want.


On coding for fun

I love programming. I really do. It’s one of the few things that really gets my brain buzzing. In my twenties I’d go to work, program my ass off, then come home and repeat. Or, when I worked for myself, I’d just not stop. But, as I make my way through my thirties I’ve found that most days I come home and simply don’t want to look at code anymore.


I give up. You and your ads can piss off.

A month ago I lamented that the excessive use of ads on sites was getting to be too much for me. Well, after a week where it seemed that every other article I went to read had a full page ad (or “welcome page” as Forbes called it) that I had to wait or click through to get to the article, which was still totally overrun with ads, I have given up and installed an ad blocker. To all the sites who haven’t been abusing their priveleges I’m sorry. I really do want you to profit from my visitation. I really don’t want to have to pay for your services, and I realize you’d probably loose money if you switched to a subscription model, but I just can’t take this shit anymore. I’d say that if the offending sites cleaned up their acts I’d turn the ad blocker back off, but honestly, now that they’re gone, I won’t notice if they do. With Google talking about including ad blocking software as a default plugin in upcoming Chrome releases, you should seriously rethink your strategy. When we reach the point when all browsers have ad block software build in with no download required, you better pray to all your respective deities that you haven’t been abusing your visitors. Alas, you’ve already lost any income from me, and the 30+ MILLION other browsers that have installed Adblock Plus. If you think your excessive ads won’t hurt your bottom line, you are sorely mistaken.


A review of Android and the T-Mobile G1

I’ve had the G1 for about two weeks now, and have been coding for it pretty much since the day I got it, and I have to say I love it, and regret only one thing: buying the Bronze one. So, lets start with that, and the other shortcomings, before moving on to the coolness. You’ve got three choices for the G1 Black, Bronze, and White. I’m always partial to earth tones, and I think the white one looks like a cheap plastic toy, so Bronze it was. I really should have fiddled with one first. The black and the white are pretty much what you’d expect, the bronze though, they tried to go a little fancy on the keyboard. Instead of making it the same color as the body, like the other two, they made it silver, which does look good, BUT the letters, are a dark-ish grey on a silver background. Now, once you start typing the actual letters are backlit, except, you can only notice that if you’re not in a room with light. Like say, your house, or your office, or outside during the day… You get the picture. What’s worse is the alternate characters (slashes, semicolons, etc). These are in a nice rust color, that is totally invisible unless you’re in a strong light. So, don’t buy the Bronze… As for the UI, it’s pretty much what you’d expect from the ads. Nice, but a little “ten years ago” feeling, and interactions aren’t as polished as they feel on the iPhone. Once you’re actually *in* an app it’s as slick as the developer felt like making it. Some of them are *very* slick. ShopSavvy is a good example of a really nicely done UI. Some of them are crap. But, I suspect it’s the same on the iPhone. The only non-obvious thing about the UI is that, unlike the iPhone it doesn’t swap from landscape to portrait mode, and back, as you turn the device. The G1 *knows* that it’s on it’s side, it just doesn’t bother to do anything with that information. Now, some creative geeks have figured out how to implement it but it’s not there for general consumption yet. Currently, it goes into landscape mode when you slide open the keyboard, and back to portrait when you close it. A couple apps, like the browser, allow you to set them permanently into landscape mode even if the keyboard is closed. But honestly, it feels like the kludge it is. You get used to this limitation pretty quickly, but it’s still leaves you feeling a little annoyed that it can’t switch itself. The construction is suprisingly nice. One of my requirements for any phone is that I be able to shove it in my back pocket and sit down. Yes, I am exceedingly careful about making sure the glass is pointed inwards. But, I would never feel comfortable doing that with one of those first gen iPod nanos for example. Those always felt like I’d snap them. And, even if that’s just perception, it’s an important one. You don’t want to feel like your phone is a piece of glass that needs to be wrapped and coddled. It needs to feel like a tool you can pull out, set down, sit on, and generally use without worry. The G1 totally succeeds on this front. The camera is… annoying. Don’t even attempt to take a picture of a non-sleeping cat with this. Click, wait, wait, wait, wait, get coffee, wait, go pee, wait, *snap*. Oh look, you got the blurry tip of the tail as it walked slowly out of the frame. It’s nice that during that time it’s doing some physical moving of the lens to auto-focus on whatever you’re pointing at, but still. Also the button. The button is awkwardly placed when the keyboard is closed, and downright difficult when the keyboard is open. The lens is right under your left hand as you hold it. You will, sooner or later, sit there wondering why the screen is dark when you open the camera. It’s because your finger is over the lens. And last, but not least, is the plug. I hate that plug. So, it’s powered by a mini-usb, which is convenient. Charging, and mounting as a USB device all in one. BUT, that’s the only “orifice” on the device. Like most of the smart phones it’s got crap battery life (about 24 hours), so I frequently find myself wanting to charge it AND listen to music, but I can’t. I can do one or the other but not both, unless I want to listen on the little speakers, which no-one does. The headphones, you see, plug in to a dongle on a cord, which plugs in to the mini-usb port. Now, it’s a good idea, because the dongle has the microphone on it, which means you can use any headphones with it, and still be able to hear, and speak with people on the phone. The problem is, that the microphone, is on the dongle near the device and not up high on the headphone cord near your head. If you want to talk to someone you’ll have to clip the mic up by your face. By default, if I stick the phone in my back pocket, and use the headphones that come with it, the microphone is right at crotch level. And, while you *can* use any headphones with it, you won’t want to because they’re the length you need them to be, but the cable / dongle thing that comes out of the phone is almost 3 feet long, which means your “nice and long” headphone cords are now about one mile too long. And, if that wasn’t bad enough. You simply can’t use the keyboard in the standard thumb-keyboard position while it’s plugged in (or has headphones attached). The plug prevents your right hand from gripping it. However, I find that If, I hold it so that my hands are coming down from above, instead of holding it from the edge like you’d hold out a plate, and let the cord go between my second and third fingers, it works fine. This is, of course, totally bullshit. The headphones that come with it are ok. Decent mids and highs, crap bass, and quite possibly the most tangley earbud headphones I’ve ever owned. Also, they keep wanting to fall out of my ears. I’ve never had a real problem with earbud headphones, but these just don’t work well with my ears when I’m walking. The built in apps all work really well. I have some weird issue with the browser where, after a search I occasionally find myself on a Google page with no search field and no results. Also, there’s sometimes a bit of a pause, which is especially noticeable when pulling down the menu-bar. If you’re not aware, many apps will give you notifications that show up in the menu-bar across the top. You pull this down with your finger to get the details, and/or to switch directly to one of the apps that left you a notification. It’s a nice feature once you get used to a menu-bar being something you can interact with, but frequently I’ll pull it down and have to wait 2 seconds for it to give me any indication it recognized my action. So far, you’re probably wondering how I could posssibly love this phone. And if the annoying bits, which every device has some of, was all there was to it, I wouldn’t be so thrilled. I mean, overall, using it is a lot like using the iPhone only not *quite* so polished. Which is pretty much what I expected going in to it. Actually, going in to it I thought it would be less polished than it is. Then I got to play with a friend’s, and realized that once you get past the lack of sexy makeup on its interface, it’s actually quite nice. And that, brings me to this mornings realization, which is what made be get off my butt and write this review. There is something incredibly powerful about *touching* your e-mail. *Touching* your photos. Email stops being “those messages on the computer” and becomes *my* e-mail. It’s *mine*. It’s right here. I can touch it. I can stick it in my pocket and take it with me. It doesn’t live in a box that’s so unquestionably separate from me. Now, I had a Sidekick before this, so I had my email in my pocket, but I didn’t care. It was nice to have access to it wherever I was, but I never had this visceral feeling of *mine*. Also, i never *wanted* to read e-mail on it. I just did when I had to, or was very bored and stuck on the subway. On Android, and I suspect the iPhone. You *want* to touch *your* stuff. You want to slide things around. The kinesthetic interactions that we’ve been largely ignoring in computing for years have incredibly powerfully subconscious ramifications. Speaking of my photos, once you take some, or download some, or get some onto it in any other way, they’re very well integrated. Take a pic of someone, go to set it as their icon, which shows up on the screen when they call you, and Android will pre-select all the faces in the image for you. Then give you nice cropping tools if you want to tweak its selections, or use some other part of the image. Everything shoves images in the same place so everything that consumes images knows just where to look. The interaction between apps is really nice. Really, really nice. It’s trivial for one app to hand tasks off to some other one. A simplistic example is the camera app. It *just* takes pictures. If you want to look at pictures it seamlessly hands you off to the Pictures app, without you even realizing you’ve moved to a different app. And, dealing with pics, for example, is so nice that I want to go around taking pics of everyone I know, not so that I’ll have their pics, although that would be nice, but so that I can see their face when they call AND so that I can go through the fun little process of taking the pic, choosing a contact to add it to, and cropping it to just their face. It seamlessly takes me through three apps and is kinda fun. And that brings me to developing for Android. Developing for android is *awesome*. There are tons of open source examples to get you started, including the code to all the built in apps. Want to know how the mail app does something, go look. I’ve learend so much reading the code of the example apps, and the built in ones. The APIs seem, so far, very sensible. Unlike the iPhone it’s multithreaded, so your app can be happily doing some background tasks while the user is fiddling with something in the foreground. The emulator is really nice, and best of all, you do not need anyone’s permission to put whatever app you want on your phone. And I assure you, it’s freaking awesome to have *your* app running on *your* phone. Especially when you had so much fun making it. Working on Android apps has been a total shot of adrenaline to my coding brain. I can’t wait to get home and work on my apps some more. It’s fun. And, I know that when I’m done other people will be tapping and pushing on my icons in my apps. And if I’m really good, I’ll be able to look at someone with an Android phone and say “You’ve probably got some of my stuff on there right now.” and that would just rock. Unlike iPhone. It doesn’t matter if Google doesn’t like your app, or it competes with some app they wrote. You don’t need your app to be in the built-in marketplace in order for someone to download and install it, although it’d be nice. You can stick it on a web site with a download link just like any other file. You could probably even e-mail it to someone. Yes, the user has to manually click it, approve the access it’s requestiong (contacts, internet, etc) and install it, as they should. If you weren’t aware, every developer writing an iPhone app runs the risk that after pouring months of development into their baby, Apple with say refuse to put it on their marketplace, and they’ll be left with nothing. With android you can either pay $25 for the ability to upload apps to the marketplace, or your can say screw it, and distribute it through whatever method you prefer. The killer development environment, in a language that millions of developers know, and use in their day-to-day work (as opposed to some obscure C variant that essentially only gets used on Apple products), combined with an unrestricted marketplace, means there is absolutely no question that we can expect to see some truly extraordinary apps coming out for Android. In the end it’s a great product, but, from an end user perspective, it does still feel a little version 1.0. From a developers perspective, there’s no question. You *want* to be developing for Android.


The hyprocisy of Amazon

Don’t get me wrong, as a customer I love Amazon. But their recent policy towards mobile devices is BS. In 2003 Amazon said

“…wireless users find themselves living in an increasingly mobile world. Mobile phones are a commodity. Users have grown accustomed to staying connected while on-the-go. As smart mobile device penetration grows, more and more users are expecting their devices to provide anytime, anywhere connections to data services and information.”


Switching to the G1

There’s something inherently wrong with cell phone companies these days. Case in point: my switching from a Sidekick to a G1 today, or, more specifically, my attempt to. Since I had a Sidekick I already had an account with T-Mobile, so switching to a different phone should be a non-issue. Just pay the money, update the account, and voilla. Or… not. It seems that killing my Sidekick’s service was almost instantaneous. Of course, in the process I lost all the data that was in it, but I knew that was going to happen, even if it is stupid. I’d already paid the $10 to get the Intellisync app to sync it with Outlook (first time i booted into windows in probably 2 years), and then exported that and imported it into GMail so that it would be ready for me when the new phone got activated, and that brings me to what’s wrong with cell phone companies. Switching my account to G1 data services from Sidekick wasn’t an issue. But then the real problem arose. Even though I took the sim card out of the Sidekick and put it in the G1 I couldn’t do anything with it. It just says:


Bio Zombie [Movie Review]

image Wonderfully Terrible! This is not a movie that’s so bad it’s funny. No, every moment of camp and comedy is intentional and successful. Without a doubt this is the best campy zombie comedy I’ve ever seen, and, unlike many films, the trailer gives you a very good idea of what to expect. The dialogue is simultaneously well written, and intentionally terrible. The makeup is bad, and it doesn’t matter in the least, actually it may add to the humor. With protagonists named Woody Invincible, and Crazy Bee, and the Sushi Boy in love transformed into a zombie in love, you can’t go wrong, well… you could, but they didn’t. “What about Shaun of the Dead?” you ask. Shaun’s a favorite of mine, but it’s not a cheesy campy film. Plus, with Bio Zombie you get “Engrish” subtitles and bad dubbing. Actually it’s dubbed well, but there’s been no attempt to match it to the lips and the intentionally bad dialogue makes it like watching an old kung-fu flick. We thoroughly enjoyed watching it with the dubbing AND the Engrish subtitles for added humor. If you’re looking for a campy zombie film to laugh at with your friends, this is an excellent choice.


World Trade Center [Movie Review]

World Trade Centerimage: directed by Oliver Stone and Starring Nicolas Cage Summary: The movie was essentially: We’re cops. Oh @#$% we’re trapped! Hooray, a marine! And, the occasional “Where’s my husband?” Details: I was in the mood for some pathos, but from a source that wouldn’t leave me depressed for days. I figured World Trade Center would follow Nicolas Cage, who plays a Port Authority Police officer, as the WTC was hit, he would encounter some unexpected difficulty in his attempts to rescue people, and ultimately prevail over it. And while technically that’s exactly what happens, I was also expecting something of a typical story arc along the way. Instead, we have a few minutes of establishing shots in which we learn that he gets up early, has a lot of kids, and is generally looked up to at work. The WTC is hit, he grabs some men and starts foraging for the air tanks they’ll need, and then the building falls down on him. From that point until about two minutes from the end we can only see his face poking out of the rubble. He’s twenty feet below the debris, and two of his fellow officers have survived, although one dies pretty quickly. The other one, who we can actually see a whole head and arms on keeps him company, when not hallucinating jesus with a water bottle. They chat about nothing in particular just to keep each other from falling asleep, and we have flashbacks of totally mundane life events interspersed with shots of their wives and families being generally upset that no-one knows what happened to their men. Somewhere along the way an ex-marine is watching on TV in his office, says something to the effect of “You may not know it, but we’re at war now” goes off, gets a military haircut, and spends the night looking through the rubble for survivors even though they’ve called it off until morning. Our survivors are found, dug out, wives cry, the movie ends. Nobody overcomes anything, beyond not dying for over 24 hrs with internal bleeding. <sarcasm>Obviously, I was terribly moved by this. </sarcasm>


Your ads are really starting to piss me off

Listen, I appreciate that you want to monetize your web site. I appreciate that advertising is the economic engine that drives the web, and that without it I’d have far fewer high quality sites to peruse, and all the good ones would probably have subscription fees. So, I’m actually quite comfortable with ads being on your site.

But seriously? There is a limit to what I will accept, and if you continue to exceed it one of two things will happen: either I will stop coming to your site, or worse (for you) I will continue to consume your sites resources (bandwidth and CPU) but use an ad blocker to prevent my from ever seeing your $@$#% ads.


And yet...

And yet, as if to prove that we still have a long way to go, proposition 8, which creates a constitutional amendment that bans gay marriage, has passed in California, the state that had the guts to open up gay marriage. I think we became complacent. None of us believed that, in California of all states, such bigotry could prevail. As monumental as Obama’s accomplishment is today, bigotry, is far from dead in this country.


We have awoken to a new world...

There are children in America today who will have only ever known a world where a black man has been president, where there truly is nothing that any of us can’t accomplish.

The world at large has breathed a collective sigh of relief, that we have chosen a president who will try and restore the good name that our country once had, a president who will no longer allow the U.S. to be the world’s bully. This is a president who, throughout his campaign, has pushed for things like paying teachers what they’re worth. Issues that won’t ever win a U.S. election, that we, as a people, don’t seem particularly motivated to do anything about, yet still have a dramatic effect on our economy, and world standing. This is a president who admits, that yes, humans are responsible for global warming, and yes, we can not afford to keep pretending it is something we don’t have to address right now.


Yes We Can

If you have any doubt, consider this. Don’t you want a president with fire in his heart? A president who is deeply frustrated by the current state of things? A president who will fight for real change? Climatologists tell us we have ten years, or less, to address climate change or the tipping point will have passed us, and there will be nothing we can do. The United States is responsible for using 25% of the fossil fuel on the planet. If we do not address this problem in THIS PRESIDENTIAL TERM we will be screwed. McCain isn’t convinced that we’re really responsible for global warming, despite the overwhelming scientific evidence that we are. Palin is convinced that humans and dinosaurs walked the planet at the same time…


Buzzbuling [Definition]

Buzzbuling (v.) What a really good, but not fully-formed idea does in your head. A good idea buzzes. An idea that isn’t fully formed bubbles up. A really good ideas that isn’t fully formed buzzes around your brain with potential whilst bubbling up. Thus, buzzbuling. The added U is a result of needing to distinguish it from the truly scary concept of buzzing “bling”.


One Year At Akamai

A little over a year ago I came to work for Akamai filled with hope and optimism for my new job. Today I am even more hopeful and jazzed to be going to work every day. It is, without question, the best job, and working environment, I have ever had.

A lot of this is due to the team I’m on. I am surrounded by smart people who work well together, and are damn good at what they do. The product we’re working on is filled with interesting problems, and possibilities (both financial and technical), and I have to say that I absolutely love being a part of it.


Handling and Avoiding Conflicts in Git

John Kelvie said:

[To] me the fundamental challenge with existing version control systems is the difficulty of merging change sets from multiple developers across the same set of code. To me, this issue comes down to the diffing/merging functionality provided by the software, and I haven’t seen or heard of anything that really improves the state of the art. How does GIT address this? How does it make it easier to do? Are there specific branching and merging tools it provides? Is through the use of more atomic commits (which I could see helping to an extent, but only so far as it allows for changes to be small enough that there is no overlap, thus sidestepping the problem).


Olympia Nova High-viz Vest [Review]

There are a few contenders when it comes to High-Viz motorcycle vests, Olympia, Icon, and FieldSheer are the main ones, and all meet military specs for on-base riding. Of those only the Olympia Nova and the Icon Mil Spec are available in bright yellow. If you haven’t seen the yellow in person I have to tell you that photos don’t do it justice. This stuff is so bright it makes you wonder if you’d still be able to see if you turned out the lights. The orange is, well… orange.


Using E-Z Pass / FastLane transponders on your motorcycle or scooter

You’d think it’d be a non-issue, but it is. In fact, it can be a real pain in the ass. Sometimes they simply don’t register. You’d think they’d just wave you through since it’s not your fault, but frequently they’ll make you pay, and digging your money out of a riding suit can be a major hassle, especially if you thought you weren’t going to need it. So, if you’re riding a motorcycle and have an E-Z Pass / FastLane transponder. Here’s how to use it without headaches.


Why you should use a distributed version control system

If you’ve ever:

  • made a commit and then realized you forgot “one little change”.
  • made a commit and regretted it.
  • wished you could combine some the past couple days worth of commits into one nice combined commit in the main branch.
  • wished you could commit just part of a file.
  • needed to drop work on one task and switch tracks to another one without having to make commits with unfinished changes, or commits with changes for one issue and a little of another.
  • wanted to make a test spike with version control and without polluting the public repo.
  • managed an open source project.
  • wanted the security of knowing that there was a valid backup of your revisions on many other peoples boxes, or even just your own.
  • been frustrated with branch namespacing issues
  • been frustrated with how difficult branching and merging is in most centralized version control systems.
  • wished you could just create branches to work on a feature or a bug without worrying about the consequences to the main repo.
  • wondered which branch a bug applied to.
  • wanted to use version control when you were offline.
  • wished you could quickly compare versions of entire trees.
  • wished you could easily release everything in the current branch “except that”.
  • been concerned about how to scale a system to support hundreds, or thousands, of users.
  • been concerned about what would happen if your main repo box died.

…then distributed version control is worth your consideration.


Boston Night Rides I

View from Fort Independence at
nightI love this city and I thought it would be interesting to see what I could see when the roads weren’t clogged with cars… Overall rating: 2 1/2 stars (out of 5). It’s interesting but not very relaxing. Don’t get any ideas about attempting this during the day either. The traffic would be evil. The Route Note: I’d actually recommend going to the end of Storrow Drive and following the curve around as it becomes the start of Memorial Drive but I couldn’t convince Google Maps to do that. All said, it’s about 20 miles, and a little over an hour of driving. What you’ll encounter:


typelation [Definition]

typelation: n. The act of converting speech, or thoughts, into text for a text-based conversation (e-mail, instant messages, etc.). Example: The joke lost something in the typelation.


Undelicious - a Delicious Library 2.0 review

So, Delicious Library 2.0 was finally released. I was seriously wondering if it was just going to be vaporware for years. The people behind it would pop up their heads every two to four months and say “real soon now”. Back in November / December of 07 they were encouraging people to buy 1.x so that they would get the free upgrade, hopefully in time for xmas but if not very soon thereafter. It’s now June. They had a forum to discuss it where people basically said “yo wtf?” and the devs said “…” and occasionally “real soon now” with no indication as to wtf the hold-up was or why it’d been in private beta for months, and months, and months.



Knox Gilet Air Review

Knox Gilet
Air Most motorcycle gear has little-to-no spine protection. Even suits with decent spine armor rarely have anything that comes close to what Knox offers, and essentially no-one else offers CE rated chest protection for street-riders. Being a safety conscious chick who values her spine and internal organs I ponied up the money for this. The results are mixed.

Looks

If you check out Knox’s home page you’ll see that they’ve updated the styling of this for 2008, but the one pictured here is essentially the same, and what I happen to own, so that’s what I’m showing. The only positive thing I can think to say about the looks of this is that it’s not bad from the back. The front however…


Night Life by Caitlin Kittredge - Review

Laurell K Hamilton is the undeniable queen of this genre, but it took her about eight Anita Blake books to approach the quality of writing that Caitlin has given us in her first outing. Eventually Laurell improved her skills but morphed her books into soft-core porn with vampires. Ugh.If you’re like me and enjoy a bad ass heroine in a gritty urban fantasy setting then Night Life is something you should pick up.


Some observations about Buell motorcycles

I’ve been following Buell since they appeared on the scene. Initially people were having all sorts of maintenance issues, similar to old Harley Davidsons (their parent co.), but they seem to have come a long way in that dept, although I hear tale that the Japanese bikes are still better in that dept.. Something that wouldn’t surprise me in the least.

Poking around the Buell site today I ended up watching the videos Eric Buell made a couple years ago about Buell’s “Radical Principles”, and that’s where I discovered what I think really sets Buell apart from many manufacturers. They’re making bikes for real world road riding not track racing. Given, what’s good for one is frequently good for the other. But, I think this approach has a much better chance of resulting in a bike that’s suited to the riding you’re really going to do on it, as opposed to the riding you wish you’d do on it.


If Patton was a coder...

General Patton said that “A good plan violently executed now is better than a perfect plan executed next week.” If he was a coder he might have said “An automated test violently executed now is better than a perfect test next week.”


The financial cost of motorcycle safety

New motorcyclists tend to spend most, or all, of their pennies on their new bike without considering, or perhaps realizing, just how much it’s going to cost to protect themselves on the bike. Of course, having just bought the bike, there’s no way they’re not going to ride it…. While I covered the items you’ll want to keep you safe in “So you want to ride a motorcycle… and not die” I didn’t cover what it would cost. Afterwards I figured it would be useful to put together a list of your basic safety items, and what you can expect to pay for them, so that new riders can plan accordingly. I’m mostly just going to be using low end prices, the cheapest you can get away with and still be safe. You can easily pay many times more for most of these items from different manufacturers.


Fieldsheer Highland II Review

The Fieldsheer Highland II is a surprisingly affordable and thoroughly armored one-piece motorcycle suit. At $230 from Motorcycle Closeouts it’s quite possibly the most inexpensive way to get a full compliment of CE rated armor including hip and back. Its nearest competitor is the $450 Olympia Phantom (scroll for more).

Highland
II Highland II
exploded

Sizing It is critical, with a one piece, that you really read the

sizing chart. Don’t just go with whatever size you “normally” are. The problem is, of course, that there’s no adjusting the distance between the crotch and the shoulders of a one-piece. If you’re too tall in a two piece the coat simply overlaps the pants less. In a one piece your have heavy duty fabric being yanked into your groin. I’m 5'9 1/2", 140lbs, and according to the size chart I was a medium, so that’s what I ordered, and it fits perfectly.


How to create a Test Suite in Perl's Test::Unit v0.25

If your Test Case is a package whose goal is to test all aspects of a particular class then a Test Suite is something which kicks off a collection of related Test Cases. As with most things in Perl’s Test::Unit it’s really easy to do and also terribly documented. So, without further ado… You need something to kick off all your tests:

    use Test::Unit::HarnessUnit;
    use My::Test::Suite::Package;

    my $testrunner = Test::Unit::HarnessUnit->new();
    $testrunner->start("My::Test::Suite::Package");

Next you need the test suite it’s going to kick off:


So you want to ride a motorcycle... and not die

Lets be totally clear here. The statistics say that your are roughly as likely to get in an accident while driving a motorcycle as you are while driving a car. The obvious difference being that a car has a safety cage, and a motorcycle has, well… nothing. So, if you have a brain, you’re going to want to take steps to compensate for that missing safety cage. There’s no guarantee any of this will keep you from dying but it’ll seriously increase your chances of survival. For some quick & easy to digest stats on motorcycle safety check out the Gear Up! Project


Kay's incredibly simple Catfish recipe

I’m a big fan of dishes that are easy and fast. One night I was at the store, saw some catfish and decided to buy mysef a fillet. When I got it home I had to find some way to make it interesting with my limited spices. The result has a flavor that very much resembles the physical texture you want to shoot for: lightly seared on the outside that, once breached, reveals a nice soft middle. This will take less than 10 minutes to prepare and cook. Near East makes a sun-dried tomato and rice box that, like everything of theirs, is trivial to make and goes well with this*. We had it with a nice red wine this time but, in retrospect, the flavor is a bit too powerful for wine. Knudsen’s spritzers worked well but I think that the perfect drink for this would be mango juice, although you might want to swap the sun-dried tomato rice with a simpler rice-pilaf if you went that way. If you live near an Indian restaurant you may want to snag some Mango Lassis because this’ll be a little hot. But, neither Miller, nor I, are fans of hot foods and we both like this dish. Ingredients:


LazyWeb Idea: Gravatar + Network of sites = Gravanetric

Pretty much everyone agrees that Gravatar rocks. A global avatar that shows up wherever you make a comment on a blog (sometimes even in your desktop apps). And I don’t think anyone other than naive VC guys wants another “social networking” site, so I’m not going there. But, imagine what would happen if every time you made a comment on a blog that used Gravatars a ping was sent off to the “Gravanetric” servers with two bits of information the hash of your e-mail and the root url of the site you posted too.


Getting just the tip of a Git repo

Sometimes you just want to distribute the source code without its history, and that’s where git-archive comes in. git-archive will create an archive of the files at any point in the history and wrap them all up for you in a tar or zip (defaults to tar). You can even make an archive from a remote repo by using the

—remote=<repo>

option in the administrator has enabled it.

You’ll typically use git-archive like this:


Squeak By Example (first impressions)

I’m reading through Squeak By Example because I’ve got some ideas rumbling around in my head that might be nice to do in Smalltalk. Having an integrated visual environment where everything is an object opens a lot of data visualization possibilities. Anyway, it has been probably two years since I’ve touched Smalltalk, and even then it was pretty brief. So I needed a refresher course.

I’ve been flipping through it looking for random bits of information I was interested in and found them all. Then, I went back and started from the beginning, following all the instructions, doing all the examples…. They’ve done a great job explaining things, it’s really easy to follow, and gives you an excellent step-by-step introduction to Squeak’s IDE, and that’s a very good thing if you’re not familiar with Smalltalk.


Synergy is the Bee's-Knees

Many of us “power users”, especially web developers, have multiple computers on our desks. I have the mac, the linux box, and the windows box. There are good reasons for each, not the least of which is testing browser compatibility. But, Synergy is what makes it not only not-annoying, but freaking cool.

You see my single sweet Kinesis keyboard and funky ergo mouse (neither of which anyone else can successfully use) controls everything. It starts out on the Linux box (on my right, and as i move it left swings over onto the Mac laptop (in the middle, on a pedestal of cool geek books), and as it continues left ends up on the Windows box. The clipboard follows the mouse too (at least it does if you’ve copied text onto it), so I can copy an URL (or whatever) on Windows, mouse right and paste it on the Mac, mouse a little farther and paste it on the Linux box.



Sharing a public Git repo over HTTP [flow chart]

Configuring a public HTTP Git
repository

There is also an SVG version of this flow, which is more readable (but poor IE folks will have issues). Notes: This is a simplest possible configuration. Be sure to check out the docs for git-remote to see how to, optionally, designate specific local or remote branches. Many of the initial commands could be performed locally and then just uploaded to the server. This particular sequence guarantees that all the connection pieces are in place and working correctly.


Where's the "main" repo when using Git?

Sivaram said: “I have been using CVS on and off for a long time; so using git is a bit confusing.

If all the repo clones are equivalent, how does one know one is the ‘clean’ repo? On CVS, there is a centralized repo lying somewhere. I can’t seem to wrap my head around the decentralized model.”

This question trips up a lot of people when they’re introduced to the concept of distributed version control systems. But the answer is exactly the same as in the centralized world. It is wherever the project maintainers tell you it is. Let me give you an example:


Importing an existing codebase into Git (a flowchart)

importing a codebase into Git flow
chart

A simple flow chart showing the steps you should take to add an existing codebase to Git. This assumes you don’t have revision history that you wish to migrate from another version control system. Some notes about the flow:

  • When adding file paths you can use wildcards like “git add /path/to/images/*.jpg”
  • This is one of the few times when you’d want to use “git rm –cached " to un-add a changes in the index. After the first commit the recommended way to un-add changes to the index (staging area) is to “git reset HEAD “.
  • Note that the only file that is edited during this process is .gitignore When you call “git add” you are adding the current content of a file to Git to the index. If you change a file after you add it Git won’t commit the additional changes (unless you add them too). So, it’s a good idea to run “git add .gitignore” just before you commit in order to make sure Git has the most recent version of it.
  • You’d only, obviously, “add” files you wanted. “git add .” (note the dot) tells Git to add everything in, and below, the current directory.

This image is copyright 2008 Very Useful Books, Inc. and distributed under the GPL v2. It was created With OmniGraffle 4. If anyone wants the original, just holler.


Review of Edward Tufte's Presenting Data and Information course

First, let me set the stage. I’ve been reading stumbling across interesting data information articles by Edward Tufte for years now, have been interested in getting his booksimage for a while now, and was excited when my manager offered to send me to his one day course, and am quite grateful to have had the opportunity to go. So, I definitely went into this with good expectations.

30 Second Summary:

The first two thirds were not bad. The second two thirds sucked. The type of people who would appreciate this course the most are ones akin to the woman in front of me who wore red velvet pants, a scarf that probably cost $60 and from the Museum of Fine arts, dangly earrings of semi-precious stones, and, were you to talk to her, would be sure to let you know that she’s “an artist.” She loved it. You, on the other hand, should buy his books and skip the course.


Xbox 360 Wireless Racing Wheel

The Logitech DriveFX had to go. Piece of crap. I plunked down an extra $50 ($100 total) when I returned it to get the Microsoft Xbox 360 Wireless Racing Wheelimage. The difference is incredible.

The Good:

This product is very well designed, and very well put together. It feels sturdy and solid. The rumble is very strong. The force feedback is also very strong. The buttons aren’t cheap. The pedals have an empty area that your heel goes in. At first it just looks like it’s there to save plastic, or to look cool, but it actually serves a purpose. Because it goes behind your foot it’s not possible for it to slide away from you because it would always catch on your heel. When you get slammed off in one direction you have to fight the wheel to turn back the other way.


Logitech DriveFX == teh suck

So, I really like Burnout Paradise. I love just driving around the city setting new speed records for others to try and beat. I enjoy it so much I decided to pony up the $100 to get the Microsoft Wireless Racing Wheel but when I got to GameStop there was another option: the Logitech DriveFX, and it was $50 cheaper. “What’s the difference?” I asked. “The Logitech one isn’t wireless.”


Zombies!!! Player Turn Flow chart

I decided to make a flow chart to help new players in an upcoming attack of Zombies!!!. I think I may have gone a little overboard with the details, but it’s done now. This represents standard rules plus the Zombies!!! 6 (Six Feet Under) expansion, but you can just skip the subway and sewer bits if you don’t have that.

For those of you who aren’t familiar with Zombies!!! there’s a good review / overview of Zombies!!! here. The biggest complaint people have about it is that it can run long. A nice atypical aspect of this game is that you absolutely will / must screw over your opponents repeatedly as opposed to most games where people tend to get annoyed with you if you do that. I liked it enough to go buy 2 expansions (3.5 and 6) and a bag of extra zombies (you’ll need ’em when you have lots of people or expansion sets with tiles). You probably have to enjoy poking fun at the shambling zombie movie genre to enjoy this game.


A rebuttal to "Use Mercurial You Git"

There’s a good deal of confusion about Git, Ian’s Use Mercurial You Git article is a good example of it which I’d like to address point by point. But first, I’d like to say that I’m giving Ian the benefit of the doubt. I don’t think he’s intentionally trying to mislead people I think he simply doesn’t understand Git very well, and that’s not his fault.

Git has two problems that face new users. It suffers from the Blub Paradox and the documentation tends to assume that you already “get” how radically different Git is. So people end up applying the assumptions of how other version control systems to how Git and end up becoming confused and frustrated like Ian, because while some of the commands look similar, what Git is doing and how it does it are dramatically different from other systems, but that’s a good thing. It’s what makes Git so much better than the competition. It’s kind of like how Struts (Java web framework) and Ruby On Rails (Ruby web framework) are both doing essentially the same thing and processing the same parameters from a web server, but if you try and program a Rails app like you program a Struts app you’re in for a world of hurt.


The rules of Presidential Bitching

The rules of Presidential Bitching are quite simple:

  • Everyone gets to bitch about all things presidential until the primaries.
  • After the primaries only the people who voted (or honestly intended to but were thwarted) can bitch about the candidates and party nominations. Everyone can bitch about general presidential issues.
  • After the election only the people who voted (or honestly intended to but were thwarted) can bitch about anything our president does or how much better off we’d be if someone else had of won.

Reserve your right to bitch. Vote!


Some thoughts about Git

Not too long ago I decided to start writing a book about distributed version control. I was originally going to focus on Mercurial (Hg) because it’s quite good and of the two leading systems it was the only one that ran on every OS (because it was written in Python). The fact that it could also run under Windows meant that I could help spread the word about distributed version control to more people, and it slightly increased the chance that I might actually make some money in the process.


Bullitt with Steve McQueen [Review]

I’m convinced that there must be two “Bullitt” movies with Steve McQueen. Because all the reviews seem to talk about one of the best action movies ever, the best car chase ever, a great story. They use words like “thriller”, “epic”, and “gritty”, but none of these things apply to the film I saw.

The director made sure that whenever the audience came within view of a potentially tense moment to quickly salve their nerves with at least ten minutes of sleep inducing banter, bored toothpick chewing, newspaper and frozen diner purchasing, car washing, clicky machine watching, plane embarkment and disembarkment, and, of course, coffee house music. Nothing is resolved in the end. And the plot is essentially: witness gets shot, cops slowly work their way from one clue to the next, as they learn more about why the man was killed. Eventually more people get shot, and no-one cares. I’m not kidding. No-one cares. The guy who was impatient to get the witness’s testimony starts reading his newspaper, Steve goes home and washes his hands in the bathroom sink, and the credits roll. The end.


What if I were to write my personal?

What if I were to write my personal?
What if it were true?
What if it spelled out in black and white the things I want in you?
What if it held nothing back: my faults, my hopes, my geek…

There are things I want
you’ll never be.
There are things you want
I’ll never have.
But maybe… just maybe…
that’s the way it’s meant to be.

Perfect little imperfections,
that together make up me.
Perfect little imperfections,
that define who we could be.


Pidgins Aren't DSLs

Piers Cawley just posted about Martin Fowler’s attempt to write a book about DSL’s actually, “internal DSLs”. Piers calls these “Pidgins” and I think it’s a pretty good term for them.

These are the sorts of languages where you don’t write a lexer or parser but instead build a family of objects, methods, functions or whatever other bits and pieces your host language provides in order to create a part of your program that, while it is directly interpreted by the host language, feels like it’s written in some new dialect. - Piers Cawley


Convert textual RSS feeds into podcasts

[EDIT] Odiogo is now some sort of Japanese Car site. As such, this page has been obsoleted by yet another cool proprietary product disappearing.

Odiogo will take your blog’s rss feed and run it through a text-to-speech converter so that people can subscribe to it as a podcast. It’ll, obviously, have the same quirks as any other text-to-speech converter and is, probably, limited to English but it’s a pretty nifty idea, even if their name is a total rip-off (Odiogo makes rss into podcasts Odeo manages rss feeds of podcasts). Also, they seem to have done a really good job with the intonation of the computer voice.


A New Year's Eve Tradition

I learned this many years ago from my first love, and she, I suspect, from her mother. It’s a simple and fun thing that’s always better with friends and family. In the end everyone will have a collage to help them to not loose sight of their dreams through the coming year.

**Step one:**Gather up all the magazines in your house. If you don’t have many / any get everyone who will be participating down to your local news-stand and have them all grab some magazine that reflect their interests in life.


Follow your bliss, then write your tests

_why suggested that

…chaos is an essential component of writing code. The system is too big for you to fathom. So you are always finding yourself in unfamiliar territory. And once you fathom the system, it becomes too boring and tedious to pay attention to details…

…Unit testing, in particular, is designed to reel in spontaneous hacking. It is like framing a picture before it has been painted. Hacking, at heart, will continue to be something of spontaneous order, something of anarchy, and the landscape of hacking is something which comes from human action but is not of human design.


Don't be afraid to look like an idiot

The other day I posted a rant about “Alphabetical != ASCIIbetical”, which, much to my surprise, got picked up in a couple places and brought thousands of readers. As with any post that gets thousands of readers, some of them are going to call you an idiot.

…I don’t know what you call this sorting order, but it most definitely is not alphabetical. Maybe you should make sure you aren’t being a dumbass before you climb atop your own soapbox of delusional self-importance. - Dave G.


Alphabetical != ASCIIbetical

[BEGIN RANT]

Partially this is a case of Java community being populated by idiots, but people seem to be wholly ignorant on this issue in other languages too. Google for java alphabetical sorting capitalization or any combination of words you can think of that might get you an algorithm that sorts a collection alphabetically. You will find hundreds of wrong responses and no correct ones. Most of them say to use the Arrays.sort(..) or Collections.sort(..) methods. But both of those use natural order (or ASCIIbetical as I like to call it) not alphabetical order so 1 is followed by 10 not 2 and things starting with a capital letter aren’t beside things with the lowercase version of the same letter.


The Word Game

The Word Game

I don’t remember the exact origins of The Word Game. I just remember that John was involved. The word game is great for passing time on long road trips, seeing how your friends brains work, and enhancing a child’s vocabulary. You can also play it by yourself. It’s an association game, but the rules are subtle.

The rules I can tell you: Phrases and short sentences are allowed, but words and names are preferred. All words are legal, especially interesting ones. You continue until you either can’t come up with an “acceptable” response. Then you start over. Any response that no-one complains about is “acceptable”. It should be fairly obvious when a response isn’t satisfactory. Associations can be based on the sound of the word, the meaning of the word, things associated with the word. Cooler words are better.


SSCM 0.4 Released

Some of you may be interested to know that SSCM v 0.4 has been released. Notable changes: supports move operations, fixed a bug with perforce support, allows you to live dangerously and just accept all detected changes into the repo without asking.

The two things I’d like to get in there now are branching and merging all the known repos with one command each. Should be relatively trivial for the distributed clients, but the centralized ones will be a little work. Anyone feel like pitching in?


Disovery coding through tests

Testing as a process of discovery

The other day a coworker said,

Some times you get situations where the specification for the unit or module you are writing just are not available. The code writing is a discovery process as much as anything else. Moreover, some of the packages and methods being called don’t have predictable or documented behavior. That’s ugly and horrible, and I don’t know how that’s allowed, but nonetheless, from the perspective of someone who wants to do unit testing in such an environment, can you give any tips? I mean, do you mock up approximations to what you think these external things should be doing if you really don’t know what they are doing? Do you do your best, updating mocks and tests, “in the face of adversity”?


Pretty graphs you can't show customers

This projects has been rolling around in my brain for a while but I haven’t tackled it yet because I have too damn many other projects in process. So I’m putting it here in the hopes that maybe someone will pick it up and run with it.

I want to put together a collection of javascript based graphing tools that generate pretty SVG graphs of your data in a way that’s fun to look at for people who have to work with it every day but not necessarily something you’d ever want to try and explain to a customer. I want to do this because we deal with a crapload of really interesting data at work, but a lot of it is just internal and only of interest to geeks. Also I’d like a visually interesting way to keep an eye on the status of our systems and the data flowing through them. Stacked bar charts and line graphs get old fast.


At least she knows exactly what she's doing

I’m a big fan of Laurell K Hamilton. My only complaint is that, as of late, both of her two major series have devolved into soft-core porn. The Anita Blake series started out fairly standard vampire hunter with love interest and became soft-core. Her Meredith Gentry series started out as soft-core. I just watcher her doing some Q & A at a book store and am happy to say that at least she has no misconceptions about this. When asked about having been approached with movie deals for her books she quipped: \


Szechuan Shredded Vegetables with Pressed Tofu

Last night I got off my butt and cooked something interesting for movie night. The recipe was generally well received although I learned that most people don’t share my affection for ginger. Anyway, I’m posting this recipe here for three reasons: Jess was considering making it, comments need to be added to the instructions, and I need suggestions for improving it.

First the (vegan) recipe:
Szechuan Shredded Vegetables with Pressed Tofu
from 1,000 Vegetarian Recipes

Makes: 5 1/2 cups; serves: 4 to 6 [Kay: 4 to 6 very, very, tiny people]

1/3 cup vegetable broth
1 tablespoon soy sauce
1 tablespoon mirin or sherry
1 tablespoon corn starch
2 tablespoons vegetable oil
1 tablespoon minced fresh ginger
3 cloves garlic, minced
1/4 teaspoon red pepper flakes
3 cups julienned carrots
2 cups julienned celery
1 cup julienned snow peas
1/2 cup julienned scallions (white and green parts)
2 cups julienned, pressed tofu
1 teaspoon sesame oil.

Instructions: \


Why the Serial comma should be considered non-optional

Why the Serial comma should be considered non-optional

While my grasp of proper grammar may be somewhat limited, one thing I do understand well is logic. Unfortunately, the fact that people tend to have a surprisingly poor grasp of basic logic may undermine the following argument, but here goes anyway.

Many of you have been taught that using a comma before the last item in a series (the “Serial” or “Oxford” comma) is optional, while this is technically true the single keystroke, or swipe of a pen, that it saves you is guaranteed to cause problems down the road.

Don’t believe me? I have a pretty cool toaster. It will toast your bread, and poach, or hard boil, your eggs at the same time. Whilst standing over it this morning I happened to read one of the little instructional stickers that told me I could “Use cancel button to end all functions (toast, egg and egg and toast).”

Now, while technically correct there are a number of problems with this sentence. The first, and most obvious, being that it’s not at all clear where the second comma is supposed to go. Yes, I can here many of you complaining now that it’s not hard to figure out, but sometimes it is, as I’ll demonstrate in a moment, and even if it isn’t you shouldn’t force your readers to “figure out” what you were trying to say. You should say it in a way that doesn’t require deciphering. Is it toast, egg and egg, and toast? You generally have to assume the comma before the last “and.” And what about the fact that this can actually hard-boil (hard steam?) up to four eggs at a time? “Egg and egg” is a logical possibility, as is “egg and egg and egg and egg”.

The second problem is that the usage of the comma is a bit overloaded here. We’re not just it to indicate a pause, we’re also using it to delimit the items in a list. Verbally we do this with pauses, so it the comma is a sensible choice to use, but many people leave out commas when writing that they would normally include in their speech. So, the first comma in any three item list with only one comma could just be interpreted as a pause and not a list delimiter.

As promised, here’s a real world example where you can’t “figure out” the correct meaning: “Go to the store and buy milk, eggs, broccoli, macaroni and cheese.”

How many items do I expect you to return with? Is macaroni and cheese one item or two?

The Serial comma should never be considered optional. Plus, you’d use it if you were speaking so you should use it when writing if you want to convey the same thing.

P.P. Check out the toaster, but if you do get one, you must keep a can of PAM nearby. The little egg-poachey cup-thing isn’t nearly as non-stick as it looks. I’d also recommend inserting a nice slice of medium to sharp cheddar in between the bread and eggs. Mmmm nom nom nom.

P.P.S. Lots of instructional comma goodness here.

P.P.P.S Yes, I realize the statements here put me at odds with rule #9 on the page linked above. Fuck them. ;) I believe that the final sentence of rule #9 proves that the comma is appropriate there.


\


Through a writer's eyes.

Through a writer’s eyes. I’ve spent most of my evenings, and weekends, this month working on my book for NaNoWriMo, which is why I haven’t been posting. I have to say that regardless of if I “win” or not it’s been an awesome experience. This afternoon just added to it. You see, I went to one of the regular meet-ups for the Boston participants. Unfortunately, due to technical difficulties, I wasn’t really sure what time it was supposed to be at, and ended up guessing incorrectly. But that didn’t matter, because I’ve learned that writers see the world through different eyes. My story is about a young girl (thirteen) who dies and joins the ranks of the Grim Reapers. So, I didn’t ride the T. I scanned the crowd for interesting people and pondered the various ways they might meet their demise. I contemplated the wonderful curve of a curvy black woman’s equally curvy upper lip. Oh, to kiss lips such as those… When I arrived I had an agenda. You see, my story is set in Boston. It’s the only city I know well enough to incorporate, and the Reapers spend entirely too much time hanging out at IHOP, because it’s affordable and open later than anywhere else. So, they spend their time at the Harvard Square IHOP, which I’d never been to, but knew existed. As a result, I’ve avoided actually describing it. So today’s agenda was reconnaissance. To check out the IHOP, and the Goodwill in Central, because that showed up in the book too. But what I found by watching the world through writer’s eyes was so much better than I’d hoped for. As I sat at my table, typing my story, and contemplating when the meet-up really was because it definitely wasn’t then, a family with a young deaf girl sat down perfectly positioned for me to watch them, which is notable, not only because of the relatively small number of deaf people in the world, but because one of the characters in my book is deaf, and the main character has found herself living with her. So I watched the young girl signing to her mom while her dad gazed out the window people-watching. A freshmen girl with attitude to spare gave me a decidedly unpleasant look and said something that made me wish I knew how to read lips. A trio of college students sat outside in the cold and started filming one of them looking through a newspaper with eye-holes cut out of it and holding a dress shoe up beside it. One of them wore a shirt that proclaimed that he was “Not a Ninja” despite his Asian appearance, the laptop bag he had handcuffed to his wrist, or the two guitar cases they’d leaned up against a concrete column, but never opened. And then there was the man who walked amongst the tables with people dropping off business cards with the American Sign Language alphabet on the back and a message on the front that asked if you were interested in having an experience with “the deaf” and that “Any Donation” would be accepted if you wanted to “Buy this card”. Unfortunately for the man with the cards being deaf is no excuse for not grasping the distinction between buying something and making a donation or giving the people he wanted money from absolutely no hint as to what they would be donating to (was it just him or some deaf community project) or why they would want to buy the card, unless they were so desperately in need of an ASL alphabet guide that they would put up with the almost indecipherable printing quality of this one. I would have asked him about it but my ASL skills have been degrading (although writing this book is helping) and even when I had more signs still trapped in my brain I know from experience that my trying to sign with deaf people rarely goes over well. They get all excited that you have actually taken the time to learn their language and then proceed to sign at a speed that risks breaking the sound barrier, which, to me, is totally incomprehensible, and then they get frustrated, and I feel like an idiot, and …. yeah. I think I’m going to take classes over at Deaf Inc. when they start up again, although they’re in risk of being challenged by my desire to take Japanese classes, which the deaf character is also (although I don’t know yet if she’s actually from Japan or just of Japanese descent). But that, is another discussion entirely… Of course, this being my life, and working in the fantabulous way that it does, there was a Japanese family sitting where I could watch and hear them too. Then there were the chess players, playing the pick-up games of speed chess that that the Harvard Square Au Bon Pain has become so well known for. They’d play contemplatively by themselves until a stranger walked up and, through some ritual too quick to follow, joined the table. They’d sit, focusing so intently: Move, tap. Move, take, tap. Move take tap. Move tap. Move tap. The digital timer flipping and resetting the countdown from one opponent to the next with a tap from each side. The IHOP sandwiched in between a comic store, a hair salon, and an Indian restaurant, under a Thai restaurant and possibly above a Japanese restaurant was no less inspiring. Who could consistently make up a scene that cool? My mother was an artist. Always seeing, and creating, beautiful things. But writers… they’re not limited to frozen frames of light, and the world seems to offer up such a wonderful bounty of characters. I don’t know if fiction is my forte. I know I can write well on topics I am passionate about, but I’m still learning how to translate that passion into tales that don’t yet exist, with people who don’t either. What I do know is that I’m loving the experience, and am very grateful for this totally crazy challenge. You should totally join me next year. I’ve got this comfy couch, with plenty of nearby electrical outlets, and a ready supply of junk food just around the corner.



Is it testable?

Is it testable?

Apparently some people are having trouble with determining if the code they’ve written is testable. So I’ve put together this flow chart to help you navigate through this complex decision making process. The image is distributed under the WTFPL license so please feel free to use wherever and however you want.

is it testable flow chart


Should I test it now?

Yesterday’s flow chart was designed to help with the complex issue of determining if a particular piece of code is testable. Today’s flow chart helps with the equally complex problem of determining when to write, or run, your tests. Like the last one it is distributed under the WTFPL license so please feel free to use wherever and however you want.

Shoud I test it now? flow
chart


Unit Testing 101 Presentation v2

I just put together a new unit testing presentation for the folks at work and you. Although it may need to be edited here and there for your coworkers… maybe mine too….

Anyway, Unit Testing 101 (v2) requires Firefox and I recommend you move your mouse up to the top edge and click on the icon to the left of the slider where you’ll get a menu of all the chapters and slides. Yes, there are a lot of slides, but it’s Takahashi method so they go really fast.


On Being Jewish

I recently met a couple of pretty cool people who, as it turns out, are Jewish. After hanging with them last night something struck me. When speaking with someone who is truly Jewish, not just Jewish if they have to think about it, you’ll hear them say “because I’m a Jew”, “and there I am, a Jew”, or similar phrases to describe some situation they found themselves in. I thought back to all the times I’ve heard these utterances from all the Jews I’ve know, including my father, and I realized that there’s a weight to it that goes far beyond what deity they happen to believe in. Saying “I’m a Jew” and meaning it down to your bones comes with the unspoken weight of thousands of years of being shat upon by every other race, triumphing over it, and surviving through it. It reminds me of that quote from The Matrix when Morpheus was giving his speech in the temple:


Kay's Incredibly Easy Pasta w / Tofu Recipe

When most people encounter the idea of combining pasta with tofu they generally respond with “why?” or “eww!” I’m a huge fan of tofu and if I hadn’t actually tried this I would be raising one eyebrow at it. But it’s good. It’s so good that people who never buy tofu go back for extra tofu bits for their pasta with every helping. I’m not kidding. It’s not mind-blowing or anything but it’s a tasty change and great when you have vegetarian guests. The idea is pretty simple. We’re going to make your traditional pasta withred-sauce and meatballs except we’re replacing the meatballs with crisp tofu slices. Ingredients:


A night with Bug Labs

(written back in 2007)

This morning I received a rather unexpected invite to a Meetup over at the Middlesex Lounge from the people at Bug Labs. They were getting people together to discuss their new product, a modular and open source hardware platform. I figure since they were nice enough to buy us drinks I could return the favor by giving them my thoughts.

For me the idea keeps coming back to Gumstix. Gumstix has been making these tiny tiny computers that are essentially stripped down motherboards that you could run really stripped down versions of linux on. They’re pretty cool, but you really have to be willing to code with minimal support from existing …. anything, which makes them way too much of a time investment for me to want to bother with. So, while the idea of a mini computer that I could hack to do whatever I wanted is tempting, I’ve got too many other projects to screw around with a Gumstix.


What makes you so special?

Seriously. What makes you so special? It’s not that you’re brilliant, because, statistically speaking, you’re not. Sure there may be one or… maaaybe two brilliant people reading this. But, the odds are that you aren’t them. So what makes you so special? The way I see it there are three types of people:

  • The people who are brilliant.
  • The people you look up to.
  • Everyone else.

And, since it’s safe to say that you’re not brilliant, you’re either someone people look up to or… someone else. So, what makes you so special? Are you actively pursuing your dream? Are you fighting for a cause you believe in? Are you actively trying to be the best you could be at whatever it is you do? Or, are you like everyone else?


Kinesis Contoured Keyboard: first impressions

image

I just received my Kinesis Contoured keyboard and thought that those of you who actually care about the ergonomics of your work environment might appreciate my first impressions of it. I also needed an excuse to type something so as to get used to it. ;)

Now, before I get started I should mention, as many of you already know, that I take my ergonomics seriously. I endured two weeks of painfully slow typing while I retrained myself to use the Dvorak keyboard layout because doing so involves provably less contorting and reaching, and is thus less wear on your hands. Being a programmer, and wanting to continue to be a programmer for the foreseeable future, and having the tendency to come home and either write or code after a long day of writing or coding I believe it to be in my best interest to take preventative measures to not end up in wrist braces unable to type for more than a few hours at a time. I use a trackball that involves minimal thumb movement, and nothing else, and now I, finally, have a keyboard that’s actually ergonomically designed. Let me explain…


This morning at Akamai

Six years ago Akamai lostone of it’s founders in 9/11. It’s still quite evident what a blow it was to the people here as he was apparently a man who lived life to the fullest and really touched a lot of lives. How Akamai has chosen to deal with this loss has really impressed me. The made a little park next to the office building (at least i don’t think it was here before then) and planted a tree for him. Instead of making some disconnected financial contribution to some random charity they encourage employees to go help out at the food bank or spend time at a children’s center. They give an award every year in his name to employees who show the same kind of drive and passion that Danny had. This morning there was a small service in the park.Paul and Tom said a few words about Danny why trying not to cry. Then we had a moment of silence and those who were close to him each laid a rose next to his tree. Danny is never mentioned in the abstract here. He’s not some random guy who a bad thing happened to. His spirit very much lives on in Akamai, and that’s quite possibly the greatest tribute they could give him. This morning emphasized one thing to me. That Akamai is one of the few companies that really is a family. I may be on the outside edge of that but I feel proud to be included at all.


Branching for atomic patches and cherry-picking

The best thing about Distributed Source Control Managers ( IMNSHO ) is how quick and easy it is to branch and merge. The problem is that most of us cut our teeth on centralized systems that couldn’t even hope to take advantage of cherry picking, which is, in short the ability to take a single patch out of the middle of a sequence of patches, or every patch but one from a sequence. Just imagine knowing that there was a bug introduced in a specific patch and being able to prune it from your repository but not any of the patches around it. Or, plucking one little feature out of a mass of others that should wait until the next release. You can, but if you don’t make the effort to keep your patches as atomic as possible you’ll find that that patch you want to remove or extract is dependant upon another one, or more, that you may not want to involve.


Dear Perforce: fuck you.

Dear Perforce:

Fuck you.
Fuck you, you miserable, untrustworthy, misleading, overpriced bastard. I hope your office goes up in flames along with all your off-site backups. I pray that some open source product that actually works is embraced by all the major companies and drives you out of business. I hope that no other company is duped by your salespeople into thinking you have something even remotely close in quality to the ancient and craptastic product known as CVS. Never before have I experienced so much pain in the most simplistic of version control tasks as I have since starting to work at a company that made the mistake of considering you.


Code Underwriters

Code Underwriters

Lloyds of London is able to do what they do thanks to the concept of underwriters. The simplistic version is that a risk is spread amongst a group of underwriters. If nothing goes wrong they get a cut of the profits relative the the percentage of the risk they took on. If things go wrong they take pay for whatever portion of the risk they agreed to take on.


Defensive Programming 101

Defensive Programming 101

For any given programmer the following statement should always be treated as truth:
My code sucks, but your code sucks more - Dave Astels [deleted post]

Good version control habits and test coverage will get you out of most jams related to your own code but we rarely write apps that are comprised of just our code. There are almost always libraries from other people code that you’ll include to save yourself from having to re-invent the wheel. Obviously you don’t want to start writing unit tests for code from other projects (you’d never finish) but there are some basic steps you can take to minimize your chances of failure.\


99 Lines of code on the wall...

99 lines of code on the wall.
99 lines of code.
You look around, refactor it down…
98 lines of code on the wall.

98 lines of code on the wall.
98 lines of code.
You look around, refactor it down…
97 lines of code on the wall.

Or, alternately

    function singVerse(numLines){
    
        if (numLines \> 0){
            document.write("" + numLines + " lines of code on the wall.\\n");
            document.write("" + numLines + " lines of code.\\n");
            document.write("You look around, refactor it down...\\n");
            numLines -= 1;
            document.write("" + numLines + " lines of code on the wall.\\n");
            singVerse(numLines);
        } else if (numLines == 0) {
            document.write("Totally bug free code on the wall\\n");
        } else {
            document.write("Need more tests for the code on the wall.\\n");
        }
    }
    singVerse(99);

The best argument for compiled languages

I keep thinking back to a short comment at BarCamp Manchester in the Unit Testing talk. When asked if anyone had written an app with 100% code coverage the guy beside me raised his hand. Now I’ve been advocating for a while now that it’s essentially wasted time to bother testing your getters and setters, and when I mentioned something to this effect he said, “How do you know you haven’t made a typo in a variable name?”


You treat her like a sex toy.

You treat her like a sex toy.
Just pulling her out
when you need a quickie.

She’s not like that you know.
She wants a real relationship
and she’s more than capable
of supporting one.

But that’s all you ever see her for…
A quickie. A little bit-o-feel-good.
You pop her off to get the job done
but turn your nose up at her
when you catch a glimpse
of how kinky she’ll let you get.


Who Cares About Performance

Justin Jamesasks why nobody seems to care about performance anymore. He talks about how the performance hit you get from using a “slow” language directly translate into increased hardware and electricity costs just to maintain the same kind of performance you would have had if you’d used a “fast” language or spent more time optimizing your code.

All his points are good, but they’re also all irrelevant. You see, for most applications the performance hits you get from slow languages or non-optimized code just don’t matter. Your system will still be responsive enough that no-one will be bothered. People don’t care because it just doesn’t have any noticeable effect on the end product and some languages make coding far more enjoyable and productive. Their productivity gains far outweigh performance hits that are almost unnoticeable by end users.


Java: The Mediocre Date

I’ve been programming in Java professionally for years now, and while I’ve become good at it, it’s never grown into a language I’ve been passionate about. It’s powerful, has tons of good libraries and tools but… It’s like going out on a nice date with someone but having no desire to ask them out for a second. You wouldn’t mind another dinner with them, and since you’ve got a common circle of friends you probably will, but you’re never going to get the butterflies in the tummy when you think about seeing them again. I’ve met a lot of people who’ve been out on a date with Java, and so far none of them seem to have tummy butterflies either.


Libraries, Boston, Alexandre Vattemare, and me.

imageOne of my favorite places in Boston is one of it’s best kept secrets. It’s not obvious how to get there, or that it even exists, but secreted within the bowels of the Boston Public Library is a beautiful courtyard. It’s a wonderful, quiet, relaxing place to spend an afternoon reading. There’s even a little coffee shop just before one of it’s entrances.

This afternoon I went on an excursion. In my quest to expand my mathematical knowledge I bit off a bit more than I was ready to chew with The Nature of Mathematical Modeling.


Why you shouldn't dismiss Perl so quickly

A reader commented that

…the syntax of Perl is so hideous and mysterious it produces unmaintainable code (I know having maintained a multi-tier Perl webapp).

And, sadly, he’s not the only one that shares that belief. Perl has been written off by many talented developers because essentially every piece of Perl code they’ve ever encountered is, well, crap. But, when you get right down to it you’re basing your opinion of a language based on what people write with it. It’s like saying that the English language sucks because there are so many vile and crappy things written in it.


The trials and tribulations of employment verification

I’ve just clicked send on my letter of resignation. Doing it in person wasn’t an option as my bosses are in NJ and I’m in MA. It was scary as hell to click that button because today was the end of a long stretch of serious mis-communications related to verifying my past employment and a significant portion of my brain is in a state of denial that the job offer is finally finalized. Because a few of you still haven’t heard the details please allow me to explain what has been happening over the past few weeks. If you don’t know me and don’t care about the problems I encountered getting my new job because of HireRight please just take this simple piece of advice and then stop reading: ALWAYS keep some pay-stubs from your past employers. ALWAYS keep your w2s / 1099s and ALWAYS keep in touch with your past managers.


A thought exercise for programmers

In the not so recent “outsourcing” episode of 30 days the American whose job has been outsourced to India goes there and comes to a number of interesting realizations including this:

“Knowing that probably like 16 people are surviving off of my one job … it’s almost like charitable at that point. They need the job way more than I do.”

Your thought exercise for the day is to answer this question: What can you do as a developer to justify yourself as being more valuable than sixteen Indians?


O'Reilly: a publisher with a brain

O’Reilly has just agreed to assign

…the full copyright in the book “Perl 6 and Parrot Essentials” to The Perl Foundation. The text is out-of-date, but can be updated much more rapidly than it can be rewritten from scratch.

Three cheers for O’Reilly. I wish more publishers would stop being so damn stupid when it comes to the copyright on old books that they have no intention of reprinting. Especially geek books which are frequently outdated and no-one would want them if they were reprinted (not rewritten).


Geeks Don't Touch

Have you noticed? Geeks don’t touch. I noticed this in myself a while ago, and have since been watching other geeks to confirm my theory. I was at the Boston Ruby User’s Group a week ago and essentially no-one touched. When two geeks are introduced, unless it’s a somewhat formal introduction like an interview, we don’t shake. When we encounter each other, or go our separate ways, there’s no casual touching. Many will actually wave at each other in greeting from a few feet apart so as to avoid the simple touch that normal people would expect. I think this is a byproduct of the fact that so many developers are autistic regardless of if they realize it or not.


Programming books for newbs

If you’re reading this blog there’s a fair chance you’re a programmer and that means that from time to time you’ll encounter people who want advice on leaning how to program. Unfortunately, it’s hard to point them in the right direction because we generally don’t want to spend the time to teach them ourselves and even if we did most of the learning to program books just plain suck.

So, I’d like to recommend two books. The first is Learn to Program by Chris Pine.This is the best intro to programming that I’ve ever seen. It’s not concerned so much with how to do things in a specific language as it is with teaching people the basic principles of programming although it uses Ruby to do so. It’s based on a series of tutorials that are still online but have been improved on, and expanded upon greatly in the book.


What developers can learn from ancient stadium builders

I just read an article that compared the crowd management techniques used in the stadium in ancient Pompeii to modern techniques, and while it’s an interesting read all by itself, and I do recommend you read it, I got to wondering about how similar ideas would apply to software design.

Build a bigger bathroom.

He’s actually talking about the bathrooms and concession stands but there are a couple applicable bits here: The bathrooms are an incredibly important part of any stadium. They also have nothing to do with the core purpose of a stadium. Keith recommends three things in regards to their creation:


Excellent tip for interviewers of geeks

It’s so obvious you have to wonder why people haven’t been doing this for years now…

Witten proposes an incredibly simple and good way to evaluate a potential employee’s code skills during the interview. Instead of asking arbitrary code questions ask them to send in a code example they’re proud of before they come in and actually go over that code with them during the interview.

This is a much more realistic test for exhibiting coding prowess than some sort of artificial string manipulation problem. Additionally, and this is a hugely important point when performing any interview, it tends to put the candidate at ease to talk about their very own pre-written code, so they’re not sweating bullets and thereby giving you an inaccurate reading.


Math is for people who aren't content with the status quo.

Update: I just came across a similar post by raganwald wherein he discusses the need for advanced programming skills…which you don’t get without math. ;)

When I was in high school no-one ever convinced me of why math was important and that is my biggest educational regret. Children, and adults for that matter, will neither seek out, nor retain, knowledge they don’t value. It’s all well and good to tell them algebra is important but unless you show them WHY algebra is important they will have no reason to retain it.


I think I know why people don't value tests

I think I understand why people tend to not write tests. Because they believe that tests aren’t something that’s either needed or important.

“Duh,” I hear you say, but bear with me.

Why don’t people believe that tests are something that’s either needed or important? Well, I think one of the biggest contributing factors to WHY is that essentially zero of the learn to program in language FOO books ever mention unit testing. Unit testing has been around in a formal sense since the creation of SUnit back in 1994 ! 1994 I say! That’s thirteen years now. Thirteen years and I could probably count on one hand the number of introductory language, or language reference, books that not only mention unit tests but actually explain why their important and how to use them. Even worse, most languages don’t have unit tests tools built into their core libraries. All the modern languages have fairly comprehensive test coverage but they have to use external tools to write those tests. How crazy is that? We have this common programming task that we all agree is critical to releasing a stable version of the language but it’s not important enough to build into the language. Wha?!?! The end result is that since we don’t teach tests as being even noteworthy when teaching a language no-one learns that they are important. For the most part people just don’t seem to understand the value of tests until they’ve been in the industry so long that their feet are riddled with holes.[1]

Mike Clark, and others, suggest [writing “Learning Tests”](http://clarkware.com/cgi/blosxom/2005/03/18#RLT1 “writing “Learning Tests””) as a way, not only to learn a new language, but as a way to accrete a repository of what you’ve learned about a language. I think this is a GREAT idea. Imagine if every book that taught a new programming language showed you not only how to do something but then followed it up with how to confirm that you didn’t screw it up by demonstrating how to write a test for it? People would start to see test writing as a standard part of the software writing process. It would be “just what you do.”

Imagine the impact that including unit testing as a standard part of the learning process would have on the software industry! Sure it might take five to ten years before we started to see the results from it but wouldn’t it be worth the wait?

[1] From having shot themselves in the foot on many prior occasions.\


The power of tests...

If you look at Mingle, the project management tool we’ve been working on… On that tool I happen to know that their test base is twice as much as their code base. So, two-thirds of the code in that product is tests, and that allows them to do quite violent things. I know that a couple of months ago they made a very fundamental change to the database scheme. I mean, we’re talking, utterly to the guts of the database scheme. And they did that and… it wasn’t even an event worth talking about. And, when they were planning to do it they were saying ‘Yeah, yeah, we’ve got to fundamentally alter the core tables in this application… Yeah we’ll do that, and it’s not a big deal.’" -Martin Fowler (paraphrased)


Why you should endeavor to hire from startups

I just had a thought. Companies looking for new developers should try to only ever hire from startups and similar small team companies. Why? Because people who work for small startups can’t hide. You can be reasonably certain that someone who has managed to survive for more than a few months in a small dev team puts out decent code at a good pace. Small companies just can’t afford to keep crap coders or non-producers on their payrolls. Such a simple filter. And, I think most of the time it’s an even better filter than that. In my experience small co people tend to be more flexible and more self-motivated.


Getting some agility in your workplace. A flow chart.

The software development industry is plagued with bad practices even though so many of us know better. A HUGE portion of this problem is that to really start, and continue, working the way we know we should requires buy-in from our managers and coworkers. And it’s not just a conceptual buy in that we need. People need to really get the religion. But, you and I both know that we can’t realistically expect the rest of the company to change everything at once.


Unit testing your JavaScript

Most web developers will agree that unit tests are great, and some even write them…but I know very few developers who write unit tests for their JavaScript, but it’s not really their fault. Most don’t know of good unit test systems for JavaScript and / or don’t write their JavaScript in such a way that you even could test well. This means breaking all the functionality into discreet functions and objects instead of writing old-school procedural crap. There’s also the obvious problem that most of your JavaScript is tied to the browser and the current page. So how do you test stuff in the page? Well, JsUnit lets you do just that and, seeing as I’ve just added a javascript implementation to the FizzBuzz Overthink you can run over and see how to do it for your apps too.


Getting the most out of version control for hosted web apps.

Another graph for another friend who asked for a flow chart of the branching and merging described in Best Practices for Web Development html
pdf.

Update:

Michael says: I’m a little unsure, from you diagram, how, if your trunk contains two completed and merged features that aren’t yet live (video upload and REST API, say) you put one feature live without putting the other live. It looks like code only gets to the live branch via the trunk, but it seems from your diagram that the trunk could contain all manner of complete and semi-complete features.


Using Darcs with SVN / CVS Flow Chart

A flow chart for a friend demonstrating, step by step, how you’d go about using Darcs (or any other distributed version control system) with SVN / CVS. He needs to do it for the most common reasons:

  1. it’s a pain to branch and merge with CVS.\
  2. he’d have to coordinate with other departments like QA to get them working off of whatever the current release branch happened to be at the moment and convince them that it was a good idea.
  3. currently his co., like so many, is working off of a single development trunk. There are no other branches.

Click on the image to get a full sized version. Or download the dia file here.


FizzBuzz Overthink as a Teaching Aid

UPDATE: I’ve created a new subdomain for the FizzBuzz Overthink project ( http://fbo.masukomi.org ), updated the links below to reference it instead and modified the Readme in the project (and the default page of the site) to reflect the new goals of the project

UPDATE 2: There’s a JavaScript example in there now too which, of course, includes unit testing. More details here.

I was talking with someone the other day who mentioned, in passing, how they wished they had some good examples of how to do unit tests for his co-workers. There are, of course, plenty of examples of how to do unit tests but I haven’t seen many online that show them in the context of a complete but simple application. This conversation made me remember my FizzBuzz Overthink (FBO) that I’d written in Java, and it occoured to me that it would make a great teaching application. Translating an existing FBO into a language you’re trying to learn is also a great way to get your head around it.



How Greasemonkey can save your webapp time and money

For the most part web developers spend our time guessing what features people might want and how said features should be integrated. Frequently we guess wrong and that wastes time and sometimes frustrates users. But there are tons of users out there who also happen to be developers and they’re actively implementing new features for their favorite sites with Greasemonkey. UserScripts.org has over 6,000 scripts. That’s 6,000 features with working implementations for popular sites at no cost to those sites! Free I say.


LazyWeb Hardware Idea

If you build this I will buy it.: Ergonomic Dvorak keyboards are effing expensive. Dvorak keyboards are hard to find in general and software remapping in the OS has a variety of…. issues. I want a USB dongle that remaps keystrokes from a QWERTY keyboard to Dvorak. Even better put a switch on it to turn off the remapping. I will pay up to $25 for such a device.


What if webapps worked like pinball machines?

Currently web frameworks are all about the page. This is starting to change a little thanks to Ajax but mostly just towards the idea of page snippets. But why? “Pages” are a metaphor taken from books, but books are linear and the page serves to restrict the layout. Things like Yahoo Widgets have shown us that there’s no need for layout to be bound to the “page” metaphor and we’ve known for a long time now that webapps are rarely linear, and when they are people don’t like it. Essentially we’re writing glorified “choose your own adventure” games that still say “To open the door on the left go to page 65. To open the door on the right go to page 27. Rails, and it’s clones, even number the “Pages” like that. We need a new metaphor. What if, instead of writing frameworks that are all about serving and managing pages, we started to think of webapps more like pinball machines. There are 5 major parts in every modern pinball machine (other than the ball):


Don't cut your CharlieCard

The CharlieCard, as some of you know, is the MBTA’s reusable pass for subway / buss access. The only problem with it, aside from the fact that the system is constantly breaking, is that it’s as big as a credit card so, if you’re like me, it tends to not be in a readily accessible place as you approach the station. My keys are always accessible and I have little plastic frequent shopper type cards from six other companies there. “Wouldn’t it be nice”, I thought, “if i could find the chip in the card and then cut down the card without cutting the chip so that I could put it on my keyring.” Well, I found the chip (in a strong light you can see it’s imprint in the green bar under the guy with the blue hat) and when March had passed and April’s pass was yet to be added to it (in case things went wrong), I proceeded to cut it down to a key-fob size. Alas, it didn’t work.


Using Darcs WITH Subversion / CVS

Using Darcs with Subversion / CVS

Some of you have gotten the distributed version control religion (If you haven’t, you should read my Best Practices essay) but are stuck with Subversion (or CVS) either because that’s what they use at work or because some part of your deployment systems use it. You may also want to combine them simply because of the power of svn externals which lets you pull in some of your code from constantly updated , Subversion Based, 3rd party repositories. Using SVN with a distributed version control system also gets you a cannonical, no doubt about it, central repo, instead of just a repo that everyone agrees to call the central one, plus you can utilize all those nifty notification and stats tools people have written for svn.


Best Practices For Web Developers

I wrote this essay a while ago and have been tweaking it based on the feedback from those I’ve sent it to (thanks guys). There are a few things I’d like to change still but I’m going to go with the “Release early. Release often” mantra on this one. I think it’s more important that it get out there than it being perfect.

Best Practices for Web Developers introduces the idea of Heuristically Driven Development ( HDD ) as it applies to web development, but honestly almost everything in there is applicable to all forms of development. There’s an HTML version and a PDF version and your feedback would be greatly appreciated and help to make the next iteration of the document better.


You really don't want to "become" a programmer

You really don’t want to become a programmer.

How do I explain to you that programming is an endeavor of passion?

You look at it and see text on a screen and a good paycheck.
I see problems begging for solutions.

You see tasks to be completed.
I see mountains to be scaled, and wells to be dug.

You think, “I could sit at a desk and poke at a computer all day.”
I forget there is a desk, what day it is,
or that my chair’s been broken since I started here.


FizzBuzz Overthink

Raganwald suggests, with good reasons, why you shouldn’t over-think FizzBuzz. Obviously I took a different view of it and yet I still agree with all of his points.

So, I’d like to counter with some reasons why you should over-think FizzBuzz, and why I did, because I don’t think I did a great job of explaining that in my last post. But first, lets assume you’re not being asked to solve it on a whiteboard while the interviewer waits. In that case my 400(ish) line solution is completely inappropriate. In fact, anything but a quicky solution is inappropriate. Lets also assume that in submitting an over-thought solution to FizzBuzz you make it perfectly clear that you know it’s over-thought and what you were hoping to achieve by going to such ridiculous lengths in your creation.


FizzBuzz Rethink

Or maybe overthink would be more appropriate….

[UPDATE] I’ve written a followup about why an over-thought solution like the one proposed here can be / is a good thing. And just to be blazingly, obviously, painfully clear on the matter. I do not think that every problem should be over-thought to the degree I took this. My solution represents a crazy amount of code for such a small problem. It’s intended as an example of how I’d mentally approach a real and complex problem presented by a client.


Why you should learn toki pona

If any of the following are true you should learn Toki Pona:

  • You want to learn a language, but you don’t have time.
  • You want to learn a language, but you don’t have anyone to speak it with.
  • There are things you wish to say to your friends in public (or in the workplace) without other people knowing what you’re saying.

“Toki Pona is a minimal language that focuses on the good things in life. It has been designed to express the most, using the least. The entire language has only 14 basic sounds and 118 words. The grammar, although different from English, is very regular and easy to learn.”


Why you should be using a distributed source control system

I was reading some articles yesterday that finally made the light bulb go off about distributed source control management (scm) and why we should be using them. First off, a distributed scm, unlike CVS or Subversion, has no central repository that all others pull from. It’s possible to set one up and say that it’s the master and tell people to pull from and push to it but that’s more a matter of convention. What’s truly unique about these systems is that each checkout is it’s own self-contained ecosystem. And there are many reasons this is a good thing:


The niftiest little Rails plugin you never heard of

Back in January of 2006 Ezra Zygmuntowicz came up with an exceptionally cool Rails plugin that, IMNSHO, should be in rails core. It’s called ez_where and it’s svn repo is here.

What’s so cool about ez_where? Well, the to really understand it’s beauty you have to step back to one of core concepts that’s at the heart of frameworks like Rails: Database Abstraction and Object Relational Mappings. Before these concepts really came into their own we were all writing raw SQL commands in our apps. Now we interact with a layer of abstraction that lets us work with the objects we’re actually programming with instead of database structures. Except, that’s not quite true with Rails. With rails you end up writing things that are possibly more complex than the SQL statements we’ve been trying to avoid. Here’s a particularly egregious example from a ticket system I’ve been working on:


On DRM

When it comes to DRM “protected” music people tend to be either completely ignorant as to how it affects them, or even that it affects them, or they’re religious zealots who have such extreme viewpoints you can’t have a sensible discussion about the issue.

But there’s one simple exercise that will explain just how dangerous DRM is to you and your friends:

  • What computers were people using ten years ago?
  • Can you run the software from those computers on your current computer? Does anyone even support or update the software from then? Would you want it even if they did?
    Macs were running OS 7 in 1996. Windows was Win 95.
  • Considering that Moore’s Law essentially says that computers will double in power every 18 months do you really think that the computers we have ten years from now will even remotely resemble the ones we have today?

With that in mind what will become of the DRM “protected” music you buy today from iTunes, or almost any other online music store, if the software to decrypt it can be reasonably expected no neither be supported, nor runnable in ten years?


Select Gifts On Sale

Select Gifts On Sale

Those were the words prominently displayed in the window of a Pier 1 Imports today, and they are so very wrong.

  • Gift: [n] something acquired without compensation
    If it’s on sale, you have to purchase it to get it. If you have to purchase it to get it it’s not a gift.
  • In this sentence “Select” reads as a verb, and you can rest assured that they don’t want you to actually select the sale items because the sale items are the ones they’ve cut the profit margin on to entice you into the store to hopefully buy items that are not on sale. Ignoring the fact that the “Gifts” aren’t actually gifts they should either use quotes to indicate that someone has referred to these gifts as “select” and thus making it clear it’s an adjective, or they could have used “selected gifts” instead.

Yes you can easily interpret what they meant to say but the point is that you shouldn’t have to interpret their meaning. The people who made that signage (actually it was a static window decal) are being paid good money to construct English promotional material. Were I their employer I would feel gypped to think that my employees a) couldn’t correctly construct a four word sentence and b) not one person in all the meetings that this surely went through was bright enough to catch these obvious errors.


On Warranties and Guarantees

Your warranty / guarantee says a lot about you and your products and shouldn’t be considered some legal thing to what you will and won’t reimburse the customer for when things go wrong.

Your company sells quality products or services right? Shouldn’t you stand behind them as if they were as good as you claim they are?

Let me give you an example. I’m looking for a new messenger bag because my current one has two holes and is starting to break down in other areas. I want something nice, that will last me a more than just four years and I’d narrowed down my search to two bags. The Ogio Hip Hop (in spite of the name) and the Ground Shinumo. I was having trouble deciding between them. The Ogio had pictures of the inside (on various sites) that looked like what I wanted but no reviews and the Ground had great reviews but no pictures of the inside. They both claimed to be durable and to use uber-fancy materials to resist wear, but every bag that isn’t pure crap claims that.


On having a mission

The cranium of a good developer is filled with ideas for new applications. Most of them tend to bounce around with little energy and eventually succumb to entropy. Some ideas are made out of bouncier stuff and eventually reach escape velocity, at which point they are launched down the arms and funneled out the fingertips. You can tell just how cool an idea is by the speed of typing relative to the developers average words per minute.


XML-RPC vs SOAP

Update: This article was written years ago, however, the information still holds true. What I would note is that these days both XML-RPC and SOAP have excellent libraries which makes working with both fairly simple. This article is about the capabilities of the two technologies, however, in my experience the question is no longer one of capabilities. It’s a question of which one you need to talk to, or which one your framework has baked in. In most cases the answer is SOAP. However, if you’re considering writing your own API, my recommendation would be to seriously consider using XML-RPC. It’s far less complicated and bloated, and the combination will make your debugging efforts much easier in my not so humble opinion.


Financial Entropy of a Webapp Subscriber

image

I was consumed with dreams about Stephen Hawking’s black hole entropy formula last night, which is frustrating because the math is, sadly, beyond me. But, I mention it to you today because, knowing so little about black holes my mind instead kept trying to change it into an formula to calculate the Financial Entropy of a webapp subscriber.

So, I put it to you, dear reader, have you, or any of your math enabled friends, come up with a formula for calculating the finincial entropy of a webapp subscriber? If you haven’t, but you could, there are many many entrepreneurs who would sing your praises and happily buy you a drink.


Improved extract_fixtures

I’m not sure where I originally came across the extract_fixtures rake task (maybe here)but there’s nothing better than using real data to run your Rails unit tests. Well, real in the sense that it was generated by actually using your app. But there’s a problem with extract_fixtures. Once you get some real data to base your tests on you don’t want it to change because it would break your tests. So, after the first run extract_fixtures becomes almost useless because it’ll wipe out the fixtures you’ve been working with.


It reminds me of home...

image

It was foggy the other day in Boston and I couldn’t help but take some pictures. Something about this picture just makes me feel like I’m home. I don’t really understand it though, because it’s the old parts of Boston that I truly love.


Why Rails Migrations are wrong headed

Ever since migrations were introduced to Rails I’ve heard nothing but praise for them, and truth be told, they are a far better way of setting up your database than the standard raw sql import. But, that’s where the goodness ends.

The problem is in the concept of going up or down in database versions. The core concept is great, to be able to roll back to a previous version of the database, but the implementation is completely out of sync with the version control systems we use to manage the codebase that depends on that database. I’ll use subversion as an example because (for those of you still stuck in CVS land) every time you do a check in the system gets tagged with a new revision number.