Kevin's Awful Website by Kevin Rohrbaugh

Weaponized Platitudes

YAGNI. DRY. KISS. Idiomatic. Readable.

These terms are intended to succinctly communicate a concept, yet easily become conflict-laden clich├ęs. Avoid them to improve discussions about code.

For instance, YAGNI, DRY, and KISS are frequently employed as arguments to simplify needlessly complex code. Unfortunately, they can also be used to wave away essential complexity, without the need for understanding the underlying value.

Similarly, idiomatic, and readable are ofttimes used to guide toward common approaches which are easily identifiable by practioners in a particular community. However, they can also be used to dictate personal aesthetics without the hassle of justification.

All of the terms refer to a quality that's difficult to take an opposing position on. After all, who wants to build unnecessary stuff, or write overly-complex, unreadable code? Due to this, the discussion often devolves into one of two scenarios: acquiescence or semantic discord. Acquiescence means that nobody is improving, since there's no need to educate or discuss trade-offs. Semantic discord is exhausting, as it means the debate ceases to be about the code, and becomes about definitions, and arguing first principles. While it's possible for an individual to feel like they've won either type of debate, the team as a whole has lost.

What works better?

Rather than lobbing truisms at one another, focus discussions around the trade-offs being made. A simple way to do so is to employ the Socratic method: ask questions, in order to draw out intent, and underlying presumptions.

When faced with needlessly complex code, ask why the complexity is necessary, and what value it brings. The discussion may show the complexity to be warranted.

When providing feedback on code which eschews a common solution, offer the alternative, along with justification, and ask why it won't work in this instance. The discussion may highlight how this problem does not fit the pattern.

When we abandon trite declarations, we make room to evolve our understanding of the problem, along with the solution. Arm yourself with curiosity, not platitudes.

HD Gaming for Classic Console Snobs

The work to create the high definition video (HD) spec began the same year that Nintendo released the Family Computer. It took twenty years for HDTV to become the norm, with high definition video output arriving on game consoles in late 2005 (Xbox 360). Consoles from the Magnavox Odyssey to the Nintendo Wii output only standard definition (SD) analog signals.

Using SD consoles on HD displays often yields poor results. New TVs are increasingly designed with digital video in mind, often including lower quality components for the processing of analog input. This, combined with the poor signal quality of RF modulator and composite video connections, can lead to a muddy, disappointing picture.

Emulation is the typical solution to the problem, but I like playing on original hardware. Since I don't have the space (nor any interest) in having a CRT set just for retro gaming, I decided to go for the least practical solution: a video scaler combined with the best output option for a given system.

The first bit of equipment necessary is the video scaler. There are several options, but the most common setup typically involves the Micomsoft XRGB-Mini. While the hardware comes highly recommended, it has several negatives: The device is only sold in Japan, includes poorly translated English menus and a Japanese-labeled remote control (English overlays available on ebay.)

The video scaler provides the high definition digital input, but getting a clean signal out of classic consoles often requires more than purchasing electronics. For systems that predate component video, the best option is typically RGB via a SCART cable. Some classic systems, including most Sega consoles, output in this format without modification. Others, such as the NES, require extensive modification and custom chips. For more details regarding the options for various consoles, the RetroRGB site has lots of information.

As an example of the end-product, the following videos were captured using an Elgato Game Capture HD from my NESRGB-modified top- loader NES, upscaled to 1080p with the XRGB-Mini.

A video scaler solution is not cheap and is likely to require modifications to at least some of your game consoles. Admittedly, it's an impractical approach for a pretty esoteric "problem". That's in no small part why I find it an interesting and fun project.

Sync WoW Plugins and Settings for Free

I have an on-again, off-again relationship with World of Warcraft, often returning to play through new expansions and then wandering off after a few months.

Like many WoW players, I use a lot of add-ons, all but replacing the default UI. I tend to play on my main gaming PC, as well as my Mac laptop (often from my couch). Keeping add-ons up-to-date across both machines is a hassle, which is why Curse offers a subscription service for syncing them. Unfortunately, I'm too cheap to pay for it.

Instead, I use Dropbox's desktop client to accomplish the same thing for free. Here's how to do it (using Terminal on Mac or admin-mode Command Prompt on PC):

  1. Setup Dropbox to sync a local folder (sign up for a free account)
  2. On your primary computer, which has your up-to-date add-ons and settings, move your settings and add-ons folders to a World of Warcraft folder inside your synced Dropbox folder

    # Mac
    mkdir -p ~/Dropbox/World\ of\ Warcraft/WTF
    cd /Applications/World\ of\ Warcraft
    mv WTF/Account ~/Dropbox/World\ of\ Warcraft/WTF/Account
    mv Interface ~/Dropbox/World\ of\ Warcraft/Interface
    :: PC
    cmd /x
    mkdir "%HOMEDRIVE%%HOMEPATH%\Dropbox\World of Warcraft\WTF"
    cd "%PROGRAMFILES(X86)%\World of Warcraft"
    robocopy WTF\Account "%HOMEDRIVE%%HOMEPATH%\Dropbox\World of Warcraft\WTF\Account" /move /s
    robocopy Interface "%HOMEDRIVE%%HOMEPATH%\Dropbox\World of Warcraft\Interface" /move /s
  3. Create a symbolic link from your WoW folder to the Dropbox folder

    # Mac
    cd ~/Dropbox/World\ of\ Warcraft
    ln -s WTF/Account /Applications/World\ of\ Warcraft/WTF/Account
    ln -s Interface /Applications/World\ of\ Warcraft/Interface
    :: PC
    cd "%PROGRAMFILES(X86)%/World of Warcraft"
    mklink /D WTF/Account "%HOMEDRIVE%%HOMEPATH%\Dropbox\World of Warcraft\WTF\Account"
    mklink /D Interface "%HOMEDRIVE%%HOMEPATH%\Dropbox\World of Warcraft\Interface"

At this point, you've moved your WoW settings and add-ons to your Dropbox folder, so that it can begin syncing the data to the cloud. You've also created symbolic links so that WoW still believes those directories are where it expects them to be.

All that's left is making similar links from Dropbox to the WoW application directory on your secondary machine. This is done by installing Dropbox on that machine, allowing it to sync your files, and then creating links as outlined in step 3 above.

Note that many settings (stored in WTF/Account) are display-resolution dependent, so you may not want to actually link your entire settings directory.