Welcome to my website! I hope you enjoy your stay.
# yay, programming!
rate = 0.96
potency = 100
month = 1
while potency > 50:
    print(month, potency)
    month += 1
    potency *= rate

print(month, potency, 'discard')

# might as well one-line it™
[None for dct in [{'month':1, 'rate':.96, 'potency':100}]
          for x in iter(lambda: dct['potency']>50, False)
              if (print(dct['month'], dct['potency']),
                  dct.__setitem__('month', dct['month']+1), 
                  dct.__setitem__('potency', dct['potency']*dct['rate']),
                  dct['potency']50)[-1]
                and print(dct['month'], dct['potency'], 'discard')] or None

NEWS

20180609: I have decided that plucking is the default on the DVIICE. Now < turns on sustain through consecutive notes (the old default), while > goes back to plucking.

20180531: The DVIICE now allows "plucking" behavior, giving the start of a note just enough character to differentiate between sustain and repeated plays. Press < (shift-,) to start plucking and > (shift-.) to go back to sustaining. This works with playback in the text area as well.

You can now also indicate a rest with the underscore (_) instead of only with a space.

20180527: When working with the text area of the DVIICE, if you highlight some text before pressing "Play!" it will now limit playback to your selection.

2018
20180526: The DVIICE now allows tempo changes during playback from the text area by writing the new BPM after a colon, surrounded by parentheses, e.g. (:120)bnm(:180)bnm. It will still start playback at the BPM in the text box above the "Play!" button (default 120).

20180525: The DVIICE now has new tunings for the guitar: baritone perfect fourth, baritone perfect fifth, and baritone major third.

20180523: If you enjoy my work (like the DVIICE, my YouTube channel, or my GitHub projects, to name a few examples), you can now donate to me via PayPal. I've only linked it where it won't interfere with normal use of the site's content and apps, it's totally optional, and it'll show me that I have actual visitors here rather than just crawlers, robots, and spiders. :)

20180522: I added a pitch wheel to the DVIICE, between the instruments and the staff. It only works for desktop mode. Click and hold to set a starting point, then drag up and down to bend. Release to stop bending and let notes snap back to their original pitches. Any notes played with the keyboard or played back from the text area will be affected, whether they begin before you click the pitch wheel or afterward.

20180522: Someone asked about playing chords on the DVIICE, so now it is possible to play multiple notes at once with the keyboard, and create chords in the text area for playback. See the help for details. There's a simple notation for basic chords, and a more complex notation if you want to get fancy.

I think it's important to take a step back and remember what the DVIICE is and isn't for. It's a tool to compare notes across instruments. It's not an instrument per se, and it's not music composition software. If you want to play an instrument, you'd be better served with physical hardware like a synthesizer. If you want to compose music, you'd be better served with something like MuseScore. Instruments and MuseScore have many wonderful features, and the DVIICE is meant to complement them, not duplicate them.

20180518: Well, that didn't last long. The sweep button is gone, and instead you can just click and drag naturally without dragging images around, because I figured out how to suppress browsers' default drag-and-drop behavior.

20180518: If you click the "Sweep" button near the version button on the DVIICE, notes will play as soon as you mouse over them rather than waiting for a click.

20180515: The DVIICE has been updated with new back-end code that allows it to work outside of an Apache-capable server. This opens it up to hosting on more basic servers, and it can even run locally, with all features! It used to load instruments by retrieving the corresponding file, reading its contents, parsing those contents as HTML, and inserting that into the page. Now the instruments are stored as strings in a script, and I can simply access them directly. It's like going from Python code of num = int(open('data.txt').read()) to from data import num. Much easier, and not something I would've thought of when I first started writing the original DVIICE back in 2013, before I'd actually learned programming. Anyway, it works the same as before, only now it's available as a zip file for local use. Enjoy!

I also added the ability to select sine, triangle, square, or sawtooth waves with Q, W, E, and R, and set vibrato levels with "`" (off) through 5 (strong). Because.

20180507:

OH MY GOD THE SITE LOOKS DIFFERENT

Yes. I changed it.

It's been about ten years since I last updated this site's look and organization. I realized that all the categories in the navigation bar pointed to things I haven't updated in years, while all the relatively recent stuff was buried in this "News" area. No more! I not only made relevant content more accessible (I didn't delete the legacy pages; your bookmarks won't break), I also updated the code behind the navigation bar. It no longer consists of huge blocks of JavaScript that swap out hand-made images of text - it's pure CSS. Along with the change a few days ago moving to the details HTML tag for collapsible sections, this site gets along without JavaScript except on pages like the clock or the DVIICE.

20180506: The clock had a slight problem on mobile: if the device locked (screen off), the function that announced the time couldn't fire, and there's no way to break through that barrier. However, if the device locks while that function is in progress, it's allowed to complete. My solution was to abandon setInterval (which is the obvious and correct solution for a clock or timer) and set up a wrapper function that calls the primary updating function in a loop, with a one-second sleep. Devices may block functions from starting, but they won't block functions from continuing, so this "foot in the door" lets us hang on to the necessary permissions. So now that works.

I also changed the notes from C/F/D/G to C4/E4/G4/C5 (C5/E5/G5/C6 on mobile), for better clarity on which digit is playing.

20180503: Two updates again! First, the clock now lets you click/tap anywhere on the page if you're on a mobile device, so you don't have to tap the text and have the browser try to highlight it. The mobile version also plays an octave higher (from C5 instead of C4), which is easier for small speakers.

Second, Version 3 of the DVIICE now allows playback! Enter a BPM in the box to the right of the "notes" area (the default is 120 BPM), and click "Play!". Use a space for rests.

20180503: Yes, two updates in one push. The stylesheet I started using back in 2015 just so happens to be bad at actually loading pages. It sometimes tried to add a fade effect to transition to a new page, and sometimes it would either require a refresh on the new page or simply fail with an error. Well, after first changing everything to work with some pure HTML5/JS/CSS code I found, I kept looking and apparently there's now HTML that literally does exactly what I want with nothing but a details tag and a summary tag. So now we're back to the old look, just tidied up a bit.

20180502: Remember when I made a clock a few weeks ago? A clean, simple, uncluttered clock? Well, I cluttered it. The clutter is in the source code, though, and it doesn't load the audio unless you use it, so that's something. Anyway, if you use it the same way as you did the old version, there's no difference. However, you can now click/tap the time, and you'll get a dialog box asking how often you want to hear the time. If you provide a positive integer, it'll beep out the time immediately and then again when the minute is a multiple of n:
  1. First digit of hour, C4 for 0 and F4 for 1
  2. Second digit of hour, C4 for 0 and F4 for 1
  3. First digit of minute, D4 for 0 and G4 for 1
  4. Second digit of minute, D4 for 0 and G4 for 1
So 14:05 would be F FCC D GDG.

Note that the original version is now preserved at tigerhawkt3.com/time.html while the new version has replaced the old version at tigerhawkt3.com/time/index.html.

20180412: It's surprisingly hard to find a good, simple clock these days. time.gov 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.

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

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

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

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.

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

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

20130903: 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 www.codingforums.com for his patience and generosity with giving me a new highlighting methodology and helping troubleshoot and debug the whole thing.

20130822: 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 "Music" section, accessed via the eponymous button on the navigation bar. Save it for offline use by downloading and extracting this zip file.

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

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

2011
20110814: I made a gallery for my rage comics (mirror).

20110814: I wrote a review for the Fenix TK35 and posted it on 4sevens.com. 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.

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

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

20080316: 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.

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

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

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

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

20080206: 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 http://tigerhawkt3.com/videos directory.

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

Contact