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.

Pros:

  • 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.

Cons:

  • 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:

enterpad_application_desktop_english_e2_thumb

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

Definition of Done vs. Checklists

If you look at my first offering of my team’s “Definition of Done,” you’ll see that it focused almost entirely on the tool (Team Foundation Server). While the items are important to remember, they aren’t agreements made by the team, but rather “the right way” to use the tool. As such, those items really belong on a checklist, not in the Definition of Done.

Here is the cleaned up version.

Definition of Done

Requirement

  • Follow the “TFS Requirement Checklist”
  • Definition of Ready
    • The “Requirements Review Checklist” has been answered.
    • The team has read the user story and acceptance criteria and has agreed on a size via planning poker.
  • Done
    • The requirement has been met.
    • The following are handled gracefully:
      • No results
      • Null values
      • Maximum-length strings
    • Reasonable input validation is implemented (see “Development Expectations”)
    • Wiki documentation updated if applicable.

Bug

  • Follow the “TFS Bug Checklist”
  • The Bug has been addressed:
    • Path 1: Bug has been fixed in the data or environment and no longer occurs.
    • Path 2: Bug has been fixed in the code and will not occur after a new build (nightly).
    • Path 3: Bug cannot be reproduced, needs more detail, or reports as-designed functionality.

Task

  • Follow the “TFS Task Checklist”
  • Task is Accomplished
  • Unit tests updated and pass
  • Code review completed, if needed

Sprint

  • Sprint Retrospective
  • Team Sprint Review
  • Internal Sprint Review (cross-team functionality)
  • “Sprint Review and Approvals” form drafted.
  • Customer Sprint Review and “Sprint Review and Approvals” form signed.
  • “Release Notes” draft updated.

Release

  • Ready for Regression Testing
    • All new functionality has been coded and tested.
    • All code checked in.
    • All requirements and bugs included in the release should be in a closed state in TFS.
  • Done
    • Regression Testing complete.
    • All Change Requests in the release are Closed (in cooperation with the Change Management team).
    • All Requirements and Bugs in the release are Closed.
    • All documentation included in the release package submitted (“Change Management Team checklist”).
    • Informational meeting and notes provided to the Help Desk, Documentation Team, and Trainers.
Definition of Done vs. Checklists

Reminder to self: Clean up Windows 7 temp files

I’m pretty sure I’ve freaked out about this before and solved this before. And then forgotten.

Note to self #1: run WinDirStat as Administrator to figure out the identity of the “Unknown” bytes taking up all your free disk space. Anything that requires Administrator rights to read will be “Unknown.”

Note to self #2: clean out “C:\Windows\Temp” every so often. That was eating up tons of space.

Reminder to self: Clean up Windows 7 temp files