Running Old Programs In The Browser

I did my first programming in Applesoft BASIC on the Apple IIc, and then I did quite a bit in middle school and early high school in QBasic on a 486 machine.

I've been in a bit of an archival kick lately. I recently started a small project of getting some data off of my Apple IIc disks, which is going well. I thought: maybe there is a way to get my old QBasic programs running as well.

QBasic ran under MS-DOS, the command-line interface of pre-Windows and early Windows computers. You can see a more modern version by typing cmd at the Windows program. I wanted to get a way that I could look at my old programs and to preserve and distribute them to others.

I looked around for a QBasic emulator, and except for the well-known and battle-tested DOSBox DOS emulator, could only find a partially-completed QBasic interpreter written in JavaScript. It didn't have graphics mode, and many of the programs that I wrote used this.

Archive.org has a huge collection of DOS games. This is great for preserving old software. You can even play old games, although any game saves won't persist between page reloads1. The DOS collection runs on em-dosbox, which compiles the DOSBox DOS emulator from C++ to Javascript using emscripten. Fortunately, all of this is open source.

Read on →

Deciding From Multiple Open-Source Alternatives

In a Slack organization that I am a part of, someone asked:

Has anyone ever heard of anything that takes Github repos and assigns them some sort of "reliability score"? Something that takes stars, commit frequency, PRs, open/closed issue ratio, issue closing time, etc. into account and gives them a score? It would be really nice for choosing between two or three repos that do similar things.

I had some thoughts on this since it is something that I have done in the past, and took them and extended for this post.

Existing alternatives

The Ruby Toolbox tries to give a rough score for ruby gems based on the features above, and it gets most of the way there. It provides a good overview for classes of gems to get a sense of how well maintained they are. Usually when I am trying to find a gem that does something, I start here. Over time you get a sense of a language's ecosystem and this is less valuable, but it is still useful for finding new gems that might do that thing better.

Read on →

Mac Karabiner Key Remaps I Use

Karabiner (formerly KeyRemap4MacBook) is a tool that lets you remap certain keys on your keyboard. I find this useful as a developer and someone who writes words in a few ways.

Mega Fast Key Repeats

When I pair with someone for the first time or give a presentation, they usually ask "how are you moving the cursor so fast?" I use Karabiner to crank up the cursor speed. This is most useful for navigating quickly between letters, words, and sentences. Also, it's useful for quickly killing characters. At first the cursor seems to be flying around, but soon you gain control and can't imagine working another way.

My current settings (see the "Key Repeat" tab) are for a "delay until repeat" of 250 milliseconds and a "key repeat" of 10 milliseconds. Any shorter of delay until repeat causes me to add extra chaarractersss when I don't intend to do so. Similarly, 10 milliseconds of key repeat allows me to be pretty precise in cursor placement without sacrificing nearly top speed.

Read on →

For Higher Productivity, Call Your Shots

There is a famous 1932 World Series game that legendary baseball player Babe Ruth played in. In the game, he may or may not have pointed to the bleachers before hitting a critical home run, which intrigues fans to this day. There's something compelling about the idea of calling your shot, or saying what you are going to do and then doing it.

Picture of Babe Ruth

Calling your shots

My productivity advice is to call your shots every day you sit down to work.

At the beginning of each day, publicly state what you're going to accomplish, and then update the list throughout the day. Make a list of the three or so most important things you are going to accomplish. If they aren't important, why are you doing them? Ideally, you can tie these back to company or team objectives.

Here's an example of what I might set out to do during a day. I usually post this to Slack in an appropriate channel, but you can use the best communication method for your team:

2016-02-02</br></br> [√] Fix forward-progress onboarding issue when there is a 500</br> [√] Sign up for Salesforce backups { OKR: Salesforce }</br> [√] Work with KP to test out a Salesforce email sending to Mandrill test environment</br></br> Blockers: need help figuring out why the PDFs are not generating and updated TOS/ROI at on some Salesforce accounts.</br></br> Headed to the Indy Vim meetup tonight, where I'll be presenting on "using text objects and surround.vim effectively".

I try to update the task list throughout the day for:

Read on →

Rice Bucket Workout: Forearm and Grip For Ultimate

I play Ultimate1. While throwing and catching are an integral part of the game, I don't see most players work on strengthening their grip or forearms to make their catches and throws better. At some point I randomly saw an article for baseball pitchers to strengthen their grip and thought that this could be useful to Ultimate players. So, I bought a five gallon bucket and filled it with rice and tried it.

While doing the workouts, I can definitely feel that my forearms and hands get tired. Within a few days, I feel that I can make more difficult catches, have better hand and forearm agility, and get a tighter grip on the disc for hucks (long throws, in Ultimate parlance.) I try to be more careful to be gentle while typing, since my forearms feel slightly inflamed and I don't want to have any carpal tunnel issues.

Read on →