Welcome to my website! I hope you enjoy your stay.



20180412: It's surprisingly hard to find a good, simple clock these days. is the standard, of course, with time zones, delay correction, a daylight map, and so on. However, the actual clock widget is very small, and they disable the dynamic update on days where the time changes to ease the server load. So I made my own. And then I made another, and another. First I made one in Python with tkinter, because I like Python and tkinter. That seemed like overkill, so I tried PowerShell - it works fine, but styling is quite difficult in PowerShell and my solution for a large display was Windows Magnifier... not ideal. Then I thought maybe HTML5/JS/CSS would work, and it turns out that it does.

I briefly toyed with centering the display vertically, but that doesn't play well with Chrome for Android's address bar. The window size doesn't take the address bar into account, so content that fits in the window without any scrolling can be hidden under the address bar and the address bar can't be collapsed because that only happens when you scroll down. Android isn't even capable of opening local HTML files in Chrome, and Chrome for Android doesn't have a "view source" option, so that was kind of a pain as well. I don't really like the mobile environment.

Anyway, the HTML version is a simple clock with no applets, ads, or distractions. It works on any device with a modern browser. Note that it gets the time from your device rather than from an online timekeeping service.

20171028: I needed a stopwatch today. When you Google "stopwatch," Google gives you a page with a stopwatch widget. But it still shows the regular search results, which are full of Flash stopwatches. I was sure that was unnecessary, as a stopwatch is just a timer with a couple buttons and a single dynamic element.

Five hours later, I have a Stopwatch that not only lets you run a single timer like normal people want to do, but also allows you to split a session into segments (a "lap timer"), soft-reset completed sessions into a table, keep track of totals and split times, and keep the buttons in sight at the top while also auto-scrolling to the latest split. Press "start/stop" to make the timer run or pause, press "split/reset" while running to split, press "split/reset" while stopped to save the current session and start a new one, and press "split/reset" again before starting the next session to completely reset it.

20170627: Guess what! Something in JS's string replace or parseInt API changed in the last few months, so the HTML/JS STO loot parser was giving wrong results. Instead of replacing all the commas and parsing the result to an integer like "1,000,000" to "1000000" to 1000000, it was parsing "1,000,000" to "1000,000" to 1000. Which is, of course, dreadfully wrong. Fortunately, I double-checked the results for digital rust when I ran it for the first time in a few months, and noticed the discrepancy! It's not paranoia if it actually happens. :) Anyway, I fixed it. If you've been using it between release and this date, rerun it.

20170605: Version 3 of the DVIICE now supports logging for keyboard input! Just click the text box before playing notes, and there you have it. Click outside the text box if you don't want played notes to show up there.

20170509: Version 3 of the DVIICE now supports keyboard input! Play natural notes and sharps in a range of two octaves, selected with ZXCASD. For more, see the Help.

20170105: I wrote a log parser with many loot analysis methods for Star Trek Online in Python last year. I recently rewrote it into a streamlined version and a further-streamlined version in both Python and Julia, as well as a JavaScript version of the more-streamlined algorithm. GitHub links: If you want a full version with a powerful analysis engine, use the original parser. It allows you to show daily totals, daily cumulative totals, lockbox wins, Dabo results, and more, with any item or category of items you like. If you want a simpler version, use the JavaScript version, as all you have to do is click the link and select your files. It will give you daily totals for Contraband, Dilithium, Dilithium Ore, and Energy Credits. I chose that analysis and those items because those are the figures I'm interested in tracking. If you need more flexibility, use the original version written in Python.

20160429: I've been streaming on YouTube every day now for over a month. I alternate "Let's Play" days and "Let's Code" days. You'll see me either playing a video game for PC, Sega Genesis, or Nintendo 64, or writing a bit of Python code. You can check out my channel here.

20151213: Are Ebooks and Emulators valuable new technologies, or phonies to be scorned? This article is about twice as long as Why Windows?, but it has pictures.

Older news

20150917: Chess 11! It uses a new chess notation module I wrote. It's a useful module in its own right: it supports pipes and redirection from your favorite command shell, and can export to space-aligned or tab-delimited output. You'll find it in the Chess 11 source files.

Chess 11 has the following new features/fixes:

  • There is a new pane to the right of the game board that shows a list of the current game's moves, in ICCF notation.
  • You can underpromote a pawn to any piece (queen, rook, bishop, knight) instead of the game automatically forcing a queen promotion.
  • Instead of only being able to load a list of moves in the game's internal notation (which was pretty close to ICCF notation), you can now import a list of moves in ICCF notation, and it will be converted and loaded automatically.
  • Similarly, you can now export a list of moves in ICCF notation.
  • You can export a tab-delimited chart of the current game's moves in a variety of notations. You can't import this whole thing back into the game, but you can isolate the ICCF column and import that.
  • Bug fix: you can no longer move for the AI by stepping back to its turn.
  • Bug fix: castling moves are highlighted properly during navigation.
Get the source, the 32-bit Windows version, or the 64-bit Windows version.

20150605: New look for this page. I wanted to put the older news items into a collapsible widget, and the ready-made stylesheet I found on w3schools looked like this. Not-quite-black text, off-white background, and sans serif fonts. I think it looks fine. Either way, I don't plan to apply this stylesheet to any other pages.

20150425: Chess 10 is here! New features include the following:
  • Volume control
  • Time control
  • Background image selection
  • Background animation color selection
  • Grid line color selection
  • Developer console (use with caution)
Get the source, the 32-bit Windows version, or the 64-bit Windows version.

20150228: Why do I prefer Windows? The answer is a few screens long. You should get a snack.

20150222: There are several new things here that I have neglected to put in this news area. Sorry.

First, what's the smallest floating-point number your device can handle before it rounds to zero? Find out with the Smallest Float page.

Next, there is a schedule for the Winter Wonderland events that occur in Star Trek Online during the winter event. It won't be too useful right now, but just wait until December rolls around.

There is a map of the server room maze in the Star Trek Online episode "Dust to Dust." There is a special bridge officer you can find in that maze, but it's in a random dead end, so you'll just have to have a look around.

I learned Python last year. It's a straightforward language to learn, and a great language to do things in. One of the things I have made so far is a program to help plan half-square quilting patterns (my sister quilts). It is available as source and as a frozen package that runs on 32-bit Windows PCs without needing a Python installation. There's also an earlier version 1 (source or frozen), but you don't want that. Still, it's there, because data. After starting it up, you'll find instructions at the bottom of the window.

Another thing I have made so far - or, I should say, something I make - is a chess game. It is currently on version 9, and I'm working on version 10. I'm keeping old versions available, but I very highly recommend getting the latest one to avoid bugs (not to mention all the cool new features I keep adding).

Chess 5 with piece icons
Chess 5, source only
Chess 6, source
Chess 8, frozen
Chess 8, source
Chess 9, old frozen release
Chess 9, source
Chess 9, win32
Chess 9, win64

Those last three are all the latest version, until I'm done with version 10.

20140616: The DVIICE V3 now has the ukulele in various tunings.

20140327: The DVIICE V3 now has Powerbender harps in a full range of 14 keys, from Low F to High G. I have also added natural minor harp tunings, from Abm to Gm.

20140305: Version 3 of the DVIICE is now available. Switch between Chrome/Safari and Compatibility modes on the fly, with the click of a button. Assign instruments to instrument zones with a unified menu.

20140101: The DVIICE now loads instruments and their images in a single click. Added Powerbender tuning (just C for now) to Instrument 1.

20131215: The DVIICE now has alternate guitar tunings, including open tunings, all fourths, DADGAD, and more.

: I have updated the DVIICE with new functionality and better coding. You can now select from a variety of instruments/keys for Instrument 1, Instrument 2, and Instrument 3. Remember to use the "Display (X)" button if you're choosing an instrument with a different layout. There is a Chrome/Safari version, and a compatibility version. Many thanks to "Old Pedant" at for his patience and generosity with giving me a new highlighting methodology and helping troubleshoot and debug the whole thing.

: I have created the Digital Virtual Instantaneous Instrument Comparator and Emulator, or DVIICE, a tool that allows users to compare note positions between a 10-hole diatonic harmonica, a six-string guitar, a piano, and a musical scale. Mouse over a note to display all enharmonic (equivalent) notes, and click a note to play it (uses an equal-tempered scale). The Chrome/Safari version (using the Web Audio API) allows you to hold the button down for a continuous note, while the compatibility version (using HTML5 - works on modern browsers) produces fixed tones of one beat (half a second) in length.

Want to change a guitar tab into a harmonica tab? Use the DVIICE to quickly translate each fret on the guitar to the proper hole (with any required overblows or bends) on the harmonica. Want to create sheet music out of your harmonica ditty? Tell the DVIICE how it goes on the harmonica, and it will show you where each note belongs.

You can find links for each version in the "Other" section, accessed via the eponymous button on the navigation bar. Save it for offline use by downloading and extracting this zip file.

: I'm now posting replays of my League of Legends matches.

: Added a large batch of rage comics. Now at 58 comics.

: I made a gallery for my rage comics.

: I wrote a review for the Fenix TK35 and posted it on I didn't take any pictures for it, so I'm just going to link to it instead of making my own page for it. Here it is.

20110808: Did you know that I have a Career? True story.

: WoW-related: GraphCalc scripts for warrior/bear rage generation as of patch 3.3.5.

: The short film "Look, But Don't Lick" is up.

: I gave Paul his birthday present, and he liked it! Video here. I've also added a little video that's funny for you but annoying for me.

: Happy 21st birthday, Paul! There's a video of Paul's newly modded flashlight build, a fully dimmable Maglite.

: The Welcome Mat has been updated! The new version can be found here.

: If you'd like your banner ad near the top of this page, please contact me.

: I've added a new clip to the videos page. Enjoy!

: If you want to view my videos but don't want to stream it in a Flash player, you can download the .avi versions and view them easily at your convenience. Just go to the directory.

20080206: I'm going to start providing updates about the site. It'll include new features, content, and so on.