Artoo, Drag, Dead Code, and the Zeroth Constraint

Just a few web pages that I’ll probably come back to again later:

  • I’m trying my hand at scraping data out of a horribly formatted web page and reformatting it for attractive printing. So far I’m messing around with HTML parsing, using Python libraries and possibly artoo.js.
  • When I have a chance, I’m going to try optimizing JPEG files with Guetzli.
  • Some good reminders that executives don’t always have an easy time seeing things from the Agile or Lean point of view.
  • A cool idea if you need to make a point about bad code removed from a product: the big book of dead code.
  • While using the Theory of Constraints to coach an organization, “The Zeroth constraint is that the organisation do not see the coach as a close trusted advisor.”
  • Roman Pichler’s article on MVP vs. MMP came up at work and I’m thinking about more concrete ways to lay out what a Minimum Viable Product, Minimal Marketable Product, and some sort of Full Marketable Product look like.
  • AirTable looks intriguing, both for customized workflows but also, perhaps, personal kanban.
  • I have run into people with small (or even large) amounts of power within an organization who don’t seem to understand how hard it is for people with less power to speak up to them: the problem with saying, “my door is always open.”
  • I remember the PBJ instructions challenge from my childhood. Thinking about the ways instructions gloss over all of the steps involved can help you really grasp a user’s experience.
  • Someone I used to work with recommended that I check out Drag for managing my email. It does seem up my alley, at least if I wanted to address all of my personal email.
  • AgileCraft certainly says good things, and since I may get to try out their software at work, I hope their software matches what they say.
Artoo, Drag, Dead Code, and the Zeroth Constraint

Maintenance Reminder Android App

I want an Android app that will remind me to perform various maintenance activities. I have a few use cases:

  • Yearly (renew my vehicle registration)
  • 90 days after last action (replace house air filter)
  • Last weekday before the 16th (usually the 15th) each month (to submit my timesheet)
  • Same as the above, but for the end of the month.
  • Monday, every other week (tasks related to my two-week sprint schedule at work).
  • Every weekday, appears until I check it off (update a daily metric chart)
  • Three times each week (work out)

Some that I’m looking at:

  • Loop – Habit Tracker // doesn’t handle yearly reminders. Looks like it might be really nice for habit-building.
  • Habitica // doesn’t handle monthly actions. Again, looks like it might be really nice for habit-building.
  • BZ Reminder // Looks better, but can’t handle my every-other-week reminder, nor the monthly end-of-month.
  • Life Reminders // This is pretty impressive. The monthly+weekday-only criteria doesn’t seem possible, but monthly plus a day warning is. This is a contender.
  • Reminder // Does have quite as many options as Life Reminders, but it might be close enough that other features could make the difference.
  • Just Reminder // At first this appears to have the most schedule options, but it still can’t do the last weekday of the month. I don’t like the interface as much, but this is in the running.

I’ve been thinking about creating my own app for this, but getting the reminders is more urgent and more important than building the app.

Maintenance Reminder Android App

Surface Book power problems

Secret procedure:

  1. Depress power button for 30 seconds, no matter what (force full shutdown).
  2. Depress volume-up and power button for 15 seconds, no matter what (secret sauce!).
  3. Exit/restart/power-on/reboot – whatever it takes to let Windows 10 right itself.

My fancy new Microsoft Surface Book (a splurge because my new employer is subsidizing it) has caused a handful of minor disappointments and annoyances, but the one big headache has been the unexpected reboots when I just want the machine to wake from sleep. Microsoft rolled out updates that seem to have fixed this issue for others, but installing the updates didn’t help me.

While I was ready to get a replacement machine (which would’ve had the nice side-effect of addressing the minor physical imperfections of my machine), I ended up calling Surface Support and Daphne had me perform the secret procedure above to do some sort of magic. If I understood her correctly, step two tells Windows to reinstall driver software in the correct order.

Whatever it did, I’m now ten sleeps in with no unplanned restarts. Fingers crossed!

Surface Book power problems

DIY Second Keyboard (Script Triggering)

Here’s my idea:

  1. Plug a USB keyboard, possibly with custom labels on the keys, into a
  2. Raspberry Pi configured with XBindkeys to run
  3. a Python script that sends a trigger over a TCP/IP socket (via your LAN) to
  4. an AHK socket server that will then run the local AHK script desired.


  • All parts can be re-purposed if the dedicated script-trigger keyboard is no longer needed.
  • Can be very inexpensive (I already own the hardware to do this).
  • Should be low-maintenance once working, as the Pi should auto-boot to the correct state and the info sent over TCP/IP should just indicate that a certain key was pressed.
  • I feel like I can handle the technology involved.


  • I haven’t even started trying to see if this works.

Every so often when I’m using AutoHotKey scripts I wish I had a second keyboard dedicated to my various scripts. While something like the AHK Command Picker is probably all I need, the Enterpad is really more what I’ve been dreaming of:


Unless I’m given a free one like Daniel Schroeder, it’s pretty hard for me to justify close to $300. But a DIY setup? That might just happen.

DIY Second Keyboard (Script Triggering)

Migrating Windows 10 to a smaller SSD

Last year I went through quite the ordeal migrating Windows 10 to an SSD smaller than my old hard drive. This may not be the best way, but the following are the steps that contributed to the successful migration (as opposed to all the missteps that made this process far longer and more painful than it needed to be). I’m addressing my future self when I attempt something like this again.

Get Ready

Backup data. First of all, make sure you’ve backed up what matters to you. In 2015 I was paying for CrashPlan‘s cloud backup, so that was my solution there. It certainly wouldn’t hurt to use Clonezilla to create an image of your drive before you start doing surgery, but I didn’t, because I like to live dangerously.

Create live USB drives (all three).

Lose Weight

Bottom line: you cannot transfer more data than your target SSD can hold.

Remove low-hanging fruit. I was already in the habit of using WinDirStat to find the biggest space hogs. I love the information-rich visualization. Remember to run with administrative rights so that all the system files will be analyzed, instead of just showing up as “Unknown” and scaring you.

The easiest targets for me were games that sucked up a lot of space storing data that I can just download again from Steam or Blizzard. Because I’ve been burned before, I used GameSave Manager to backup my game progress before uninstalling.

Let cloud data stay in the cloud. Since Dropbox and Google Drive already have all their data in the cloud, I used selective syncing to stop syncing pretty much all folders.

Cut deep with care. Since I was desperate for space, I went a little crazy. I turned off System Protection for my drive (in the Properties for the drive). I turned off Indexing (and did it in such a way that I’m still struggling to get it working again, so . . . not recommended). I tried to compress the entire drive (also in the Properties for the drive). And in the end I completely disabled paging and swap (run: systempropertiesperformance), although that was more to make it through the next step.

Suck It In

Defragment/Optimize. So, even after you can theoretically fit, you’ve got to get all your bits packed at the beginning so that you can safely lop off the extra disk space for the move. I tried a product that claimed it could do the move without this step, but to no avail.

If you remove/disable everything I mentioned above, you probably just need to run the defragmenter (“Optimizer”) via the Properties of your drive, Tools tab, Optimize button.

Verify and investigate with Disk Management and Event Viewer. You can check to see if you’ve done it by running Disk Management (run: diskmgmt.msc) and selecting the Shrink option for the partition. I couldn’t actually shrink this way, but the reported new size told me whether I had done enough to fit.

When I was nowhere near small enough, I was able to open the Event Viewer (run: eventvwr.msc), go to the Application log, and filter for event ID “259”. This event would let me know what unmovable file was getting in my way.

Portion Control

Resize the source partition and create target partitions. I ran GParted via a live USB (the first of three needed). I shrank my source partition in no time. I also set up the target partitions on the SSD.

Here’s where I learned something (over many hours): I needed to copy over the 100MB “System” partition too. No joy without this, for whatever reason. Nobody told me.

Transplant and Recover

Create backup images where practical. Running Clonezilla from the second live USB was a little scary, but not a problem. I created images of the System partition and also HP’s restore partition (for Windows 7), just in case.

Copy the partitions via Clonezilla.

Run Startup Repair. I disconnected my source hard drive before booting with the Window’s recovery drive to perform startup repair. When I finally did this with the “System” partition in place, all was well.

Double check, then wipe old partitions. Once successfully booting, I shut down, reconnected the hard drive, and used GParted again to wipe the old partitions and create a new one.

Undo your temporary measures. With all as it should be, I closed my computer case, booted, and began undoing my drastic actions (as space became available) of disabling paging and swap, compressing the drive, disabling system protection, and disabling indexing.

New Lifestyle

Move libraries off the SSD. Find your various libraries (such as Documents, Downloads, Pictures, etc.), right click on one, choose Properties, then on the Location tab click on the Move… button. You can then choose to move the folder to reside on the old hard drive.

Move cloud-synced folders off the SSD. While Dropbox lets you move the folder through the Preferences (Account tab), Google Drive requires you to disconnect and reconnect your account in order to choose a new location. Each cloud-syncing service will have their own way.

Install fat programs to the hard drive. So far, the programs I’ve reinstalled have been happy enough to be told to install somewhere other than the default location.

Migrating Windows 10 to a smaller SSD