A lot of projects I complete just get abandoned once I'm done, so I wanted a place to display, organize, and make them available for others. This is the site you are on right now.
I originally had it working in PHP from scratch, but redid it using the CodeIgniter framework to try something new. The PHP-inspired default theme (see PHP.net for comparison) is a rare example of when I've put effort into the CSS and really tried to make it look good.
A site to keep track of all of the media that I watch. Especially geared toward keeping track of how many movies I've watched on IMDb lists.
A long time ago I tried to mark all of the movies I had seen with IMDb's "My Movies" feature. It was a tedious process and it seemed like there was nothing useful you could do with the end result. It was a waste of such a cool set of data.
In the summer of 2007 after I finished college, I was supposed to be looking for a job. Part of the time when I claimed to be filling out applications online, I was actually making a very simple Greasemonkey script that allowed me to look up movies on IMDb and save the data back to my own database. I started marking movies daily as I saw them. The initial goal was to show how many movies I had seen total and how many I had seen that were listed on the IMDb Top 250. Despite using Facebook for a site login, it was hardcoded such that only I could use it, and I let the idea atrophy. (Thankfully, the week I moved to Irvine without a job, the UCI job fair led me to my job at Kofax.)
I still worked on it some in 2008 and in 2009 I put a decent amount of effort into rewriting the guts in VB.NET. The idea was that the same .NET guts could power both a website and any desktop client that I wanted to make. Unfortunately for that idea, I changed teams at work around that time. I had to devote too much of my energy to learning new things at work to keep attention on this project.
In 2010 my interest in the project was revitalized and it has been complete rewritten:
Anyone can login with their Facebook account
Filter movie lists to movies seen, not seen, available for Netflix streaming, etc
Use groups with filters to find movies that no one (or everyone) has seen
integrates to various degrees with IMDb, Netflix, Hulu, RottenTomatoes, Metacritic, Jinni, and Amazon
Visual timeline of movies or episodes watched
Firefox Addon or Chrome Extension highlights movies you've seen on IMDb and links data on what you've watched to pages on IMDb, RottenTomoatoes, Metacritic, and Jinni
Website showcasing the art of Bakersfield artist Barbara Reid, who also happens to be my mom.
The earliest version of the site was a FrontPage template. But that required her to contact me to manually edit every time she produced new art. Though I hadn't done it before, I decided I could make something better. Building the next version of the website was my start into database driven PHP.
The result allowed her to update her art and the text throughout her site whenever she needed. A later additions allowed ajax drag-and-drop ordering so that artist visual preference could decide how it displayed rather than just database sorting. Another did some calculations on the color of the pixels and showed color tones most used in each piece (not publicly visible). On each Mother's Day while I was in college, I either added new features or did some other tie-in to the site.
A speed run is a video of a player striving to complete a video game in as fast a time as they can manage. This is not a speed run.
Speed runs cut out any moments that can be skipped, often leaving little or none of a game's story. This Story Run attempts the opposite, speeding up the gameplay and focusing only on dialogue and story moments.
Released as DVD and AVI via torrent and also by YouTube.
A speed run is a video of a player striving to complete a video game in as fast a time as they can manage. This is not a speed run.
Speed runs cut out any moments that can be skipped, often leaving little or none of a game's story. This Story Run attempts the opposite, speeding up the gameplay and focusing only on dialogue and story moments.
Released as DVD via torrent and streamable via YouTube. Also included separate from the main story are compilations of each of the in-game TV shows.
CaptureCabTool is meant to take a cab file containing Kofax Capture exported Batch Classes and strip out the custom components. Kofax Capture will not let you import a cab file that references components you don't have installed. The workaround is fake-register the component so the system thinks they are installed, but that is very messy.
This was the first utility I made while working for Kofax, and also the last time I used VB6 to start a new project.
My first in depth .NET project. It was an evolution of CaptureCabTool and I consider it my playground when it comes to making new Kofax utilities. In that sense, it will never be "done" or polished to be user-friendly, but classes from this project have formed the core of others I've made like BatchClassRescue, KTM Validation Control Finder, and Procmon Augmented KTM.
It can open Kofax Capture exported cab files, KTM xdc documents, and KTM fpr Projects. The feature set really is just based on whatever I make to solve the problems I'm faced with working in Kofax Support. But these things aren't polished to the point of being user friendly. They might not work and even if they do, it won't be obvious how they work.
This is intended as a way to see any stations with open modules in Kofax Capture. This correlates checked out licenses with current database connections. In versions before the License API was exposed only database connections will be listed. This utility should work from 6.1 to 9.0, listing license information from 7.50.857+/8.0.1033+/9.0.
I wrote this because AC Connection Lister (not written by me) was not compatible with KC8, and as a way to include the most useful subset of functionality from KELU (an internal-only utility written by me) in a public utility.
I wrote this to encourage people not to delete log files, while still keeping them from taking too much space. This was prompted by a situation where errors caused the logs to grow rapidly, so users would delete the logs to save space. Thus we had no logs to see what the errors actually were.
This is a quick little utility to monitor a log folder and compress and move the log files when they hit a certain size.
I put some decent time into trying to make a .NET version of the internals (no ui yet) of my movies site. I was trying to make it a much better structure capable of being more organized and extensible. But sometime around then is when I changed teams at work and got really busy, and then when I had time to work on anything again, the immediate gratification of updating the existing PHP version was too great.
I like to have something to watch while I eat. If I don't already have something I want to watch (or only have something longer like movies) I might go for rewatching a random episode of any of the Adult Swim shows. But I gravitate to ones I've already seen a lot or episode names I remember. There is no simple way to actually chose a random one.
That's where this tool comes in. Give it a directory and a list of extensions and it will scan recursively then allow you to open a random file. I actually built this really quickly one day just to take a look at the interface of the Visual Stuido 2010 Beta I had installed.
An unofficial replacement for the Kofax Capture license utility. Because it gives more detailed licensing information, this is an internal-only utility, but KC Connection Lister contains a subset of these features and is not internal-only. Beyond the features of the official license utility:
Implements the license API to show which machines are using licenses.
Can list all known license types.
Interprets activation codes
Request activation code directly from Kofax activation server (as if activating)
Add, Remove, Reorder license servers in ACConfig.xml via GUI or command line
This was a helper app I created so that I could work effectively on SyncFileAndXLS. So the night I wrote that, I had to write this first. Before leaving the office that day I took a snapshot of the 3200 or so files I had to work with using a tool called Dir2HTML. Then I created this tool which created 0 byte files from that directory listing. Then I was able to test the filesystem changes of my app without risk, without being there, and transferring the massive folder. Years later I made the improved CopyDummyFiles.
A more coherent version of my VB6 helper app CreateDummyFiles, this will copy the contents of a directory as zero-byte files. The intention is to have a filesystem collection when all that is needed is the names and structure. Like when writing a program that will interact with files based on their name and location rather than contents.
Batch Class Rescue creates importable cab files from published Batch Classes in the PubTypes folder. It does this without any access to the Capture database, thus can be used to recover Batch Classes in an environment where the database is unrecoverable but the file share remains.
It may also be used to recover a previous version of a published Batch Class if that version still exists in the PubTypes folder.
This utility will not grab the extra files used by KTM/INDICIUS/Xtrata batch classes.
Corrupt Access databases (mdb files) can cause problems in a Kofax Capture system and are the reason behind some types of stuck batches. In the case of publish.mdb, empty.mdb, or local\pubtypes, corruption may cause publish or batch creation problems. In other cases they can simply fill the error log with Microsoft Jet Database Engine errors.
Because they are passworded and because Microsoft Access may not be available on a given system these can be inconvenient to check. This utility tries to open all mdb files on both the server and local workstation and lists any that throw errors. It also provides a command line accessible alternative to DBUtil for running a Repair and Compact on Capture mdb files.
This is a utility to compare whether lines of text are in both files or only one. I wrote this after I was asked to do what I considered to be an asinine manual task of recording inconsistencies between two sets of data. I had to write JavaScript to screen scrape one source, then use this program to compare it against the other.
From the utility itself, here's how it works:
Drag a file to each field and click the button. Breaking by Windows linebreaks (CRLF) it will look for lines in the first that match in the second. If matched they will be added to SharedLines.txt, but if in only one, they will be added to [Filename]-only.txt"
I've told the story of this program in a few job interviews...
It was the second week of an unpaid Web Design internship with Orange County government and I finished whatever small tasks I had been given. They wanted to give me something to occupy my time. The task they had that no one else wanted to do was take a folder of 3200 MSDS (Material Safety Data Sheet) PDF files and make sure each had a corresponding database entry. They gave me a dump of the database table as an XLS spreadsheet and told me to look for they matched and correct either one when there were discrepancies.
I started doing it but it was incredibly tedious and slow. I was falling asleep. So I went to them and said, "Look, I can write a program to do this. I'm going to go home and do that." They laughed and let me go. They clearly thought I was making an excuse to go home, but I was an unpaid intern, so they didn't care.
I knew I would need something to work from when I was at home without access to the files, so I used a tool I found to create an HTML list of the PDF folder and took that and the XLS file. When I got home I wrote CreateDummyFiles to create zero-byte files from the HTML list. Then I spent the rest of the night building a tool which would iterate through the spreadsheet looking for matches in the folder. It could auto correct minor differences like spaces to underscores, but if there was no match or auto corrected match, then it would suggest possible matches based on the longest word in the filename.
When I came in the next day I told them I had the program. I assumed they really didn't believe my reason the day before, because they seemed like they didn't know what I was talking about. By that afternoon I used my this program to finish the work. They weren't really sure what to do with me at that point since they expected that going through all of those files might take two weeks.
Surprising them like that definitely got some positive attention. It played a role in the fact that a little later that summer I was changed to a paid intern. And when I went back to school they let me continue to work remotely.
When designing a Validation Form in KTM 4.5 and earlier, there is nothing to stop you from dragging buttons and fields off of the screen to the top and the left at which point they still exist but are completely inaccessible. You could also resize these controls to have zero height or width, also making them completely inaccessible.
This utility finds and restores controls lost in this way. The underlying behavior was fixed in KTM 5.0
I recreated the map Complex from N64's Goldeneye for Quake 3 Arena. The separate music download is level appropriate music that I used when I played it but did not include in the original because back in 2000 download size mattered too much to add a few unnecessary Mb.
I was never sure how my map ended up on a LvL map review. I would not have voluntarily subjected it to such scrutiny given that it is just a remake from another game and has a number of technical inadequacies in its construction. I am amused to see that it has almost a hundred thousand downloads on the FileFront link.
At different points I played with converting the map to Doom 3 and to Counter-Strike. The Doom 3 version only might work, but the Counter-Strike version is playable. Put de_complex.bsp in counter-strike\valve\maps and complex.wad in counter-strike\valve\.
Long after I found it had been adapted to a derivative game called Urban Terror, and even played on someone's server devoted to Goldeneye maps. I believe adapting it only meant including textures that were from the retail Quake 3 pk3 files. That version is available below as well as a link to a video of people playing it on the UT Goldeneye server. Not long after that someone named per0x1de messaged me on YouTube saying that he had added water and fixed the sky (which I had never done correctly). Link to a video and his version below.
This is PHP code that produces a visual representation of the connections between classes in PHP code.
Here's what I said when I initially finished it:
"The code is basically counting occurances of calls to static methods/constants/variables, creation of instances of class via the 'new' keyword, references to parent class, references to a class via PHP5 Type Hinting. Notably, it does not count calls to instance methods/constants/variables because then I would have to try to keep track of variable type while parsing source. Though the calls aren't being counted it terms of numbers, the dependency on the class of the instance variable will still have at least one reference and be mapped as long as there is either a 'new' or a type hinted parameter. Which... there totally should be."
This is a tool I made to explain some very unobvious problems I've run into at work. The utility mimics behavior of KTM 4.5 SP1/5.0's relational database dialog and assists in troubleshooting issues documented in SPR 85394 (as well as SPR 85165 and SPR 84870). These issues involve the inconsistency of how KTM checks whether a name evaluates to a valid table or view.
These issues are resolved as of KTM 4.5 SP1 Patch 2 and KTM 5.0 SP1.
This is just a custom panel that I quickly built from sample code. It adds a menu in the scan module that separates pages into documents based on their original filename. Even though I already had files in multipage tiffs that each comprised a document, I didn't see an obvious way for those to come into Capture as a document: they just imported as separate pages. So this is a hastily made solution to that problem.
Recursively copies files from subfolders to the base folder while appending the folder names to the file name. The result is that a set of files in many subfolders becomes a set of files in one folder with more descriptive names.
This allows using an arbitrary amount of volume of any Kofax volume license. I've used it to test certain low or no volume situations. A similarly themed "Use My Stations" did not work because the license API will not let a module take more than one of a station license. I had hoped to do just that to be able to test different situations without requesting my license to be changed.
Some time after my brother was diagnosed with leukemia I created a Doom mod with the premise being that you would fight cancer. I didn't get all that far: The fist became a syringe, the BFG became a bottle of Nystatin and a hospital computer monitor was thrown in. A separate file replaced the Doom-guy with my brother's face. I wrote a readme at the time, although I believe the only place that I released this was on my first website, which I made shortly after this project.
Several years before making Goldeneye's Complex for Quake 3 I started trying to make Goldeneye maps in Doom. Bond Doom only got as far as the basic layout of the Runway map and the start of the Petersburg Streets map. The midi of Tina Turner's song Goldeneye was used for the level music and of course the Bond theme for the title music, and Boris's "I am invincible!" quote was put in as the sound when you pick up Invincibility.
Goldeneye.wad includes the audio and the Streets level. Runway.wad includes the runway level.
When you are already modifying games, it's too amusing not to put your face in there. This allows me to play as me in Quake 3. Or at least my face on the existing Bitterman model.
This is a partially completed Quake 3 map modeled after Prontera, capital city of Rune Midgard in the Korean MMO Ragnarok Online. Every time I look back at this project I get nostalgic because I loved both RO and Quake 3. Prontera is a pretty decent sized city to try to recreate, and as I see in notes I wrote at the time, I had 48 buildings placed so far with the 5 unique building designs I had completed. One of the plans I tossed around to try to actually finish the project was to change it to the neighboring city of Izlude. It was a much smaller city and I could have reused much of what I had already done.
The reason for the size of the download is
It includes not just all of the textures used in the map, but all of the textures I planned to use in finishing it.
The Prontera music is included and, as far as I am aware, Quake 3 only plays Wave format, so the music itself is 23Mb.
Also, because it was already a sizable download, I left in the daily builds I was doing for a while. In addition to using "map prontera" to load the latest version, you can also do "map prontera-2004-07-xx" where xx is 18-21 for my progress from each of the days I was working on this.
Though it is probably not in a usable state, I also did some work at converting it to Doom 3 format.
This was a partially completed StarCraft themed Quake 3 map. The concept was to use the basic layout of the small 4-player StarCraft map named Bloodbath and make it into a, probably team-oriented, Quake 3 map. The map idea seemed well suited to creative use of map triggers. For example, the Photon Cannon actually did shoot plasma, and the Missile Turret did shoot rockets. At some point I had it set up such that the Pylon had an aura that restored health and the two Nydus Canals allowed teleportation between each other. I was considering having timed intervals where either the BattleCrusier would fire its cannon toward the ground, or having a "nuke" hit the middle of the map.
These were the structures that were completed:
Terran - Bunker, Barracks, Command Center, and Supply Depot, BattleCruiser, Missile Turret*.
Protoss - Pylon, Photon Cannon, Nexus.
Zerg - Hatchery, Nydus Canal
*Bob did the Missile Turret.
While working on this I was designing each building then saving it as a prefab so it would be easy to move around or duplicate. The collection of prefabs is available separately.
This program allows you to browse a selection of the contents of your computer's hard drive with your TI-89. You can also rename, copy, move, and delete the files on your calculator and have the same changes made to the actual files on your computer.
There was both a program written for the calc in TI-BASIC and a program for the computer written in VB6. The calculator portion of it was written instead of paying attention in a history class that I took summer of 2001. I released it to ticalc.org when it was done. Because it was written in BASIC and running on a 12Mhz calculator it was too slow to be very practical, so it was more of an amusing proof of concept.
A version of the game Battleship that I wrote for the TI-89 Calculator in TI-BASIC. I believe I wrote it so you could do single-calc multiplayer where you make your move then it hides the screen and you hand it to the other player, or play the "AI". The AI just tried random spots even if it gets a hit.
This was basically a browser that augmented and recorded information for the turn-based browser game The Reincarnation. MageManager was previously named ArchManager and worked with the predecessor of The Reincarnation, called ArchMage. This was a game that myself and many friends played together in high school and then again in college.
When the game was played through MageManager pages were enhanced with calculations that helped play the game more effectively, or more quickly. It also kept history of interesting statistics of your character over the course of your game (the game was played usually once a day for sets of several months at a time). I had a lot of fun with this project. It was part because I was addicted to the game, part because this project gave me additional incentive to figure out the sometimes mysterious game mechanics, and part because friends were using my program.
I wish I had screenshots or better explanations of the features of this. I don't want to jump back in the game and see if they work at this point, but there was some fun stuff. There was a hidden feature, which I don't think I made available to others back then, which allowed the program to send me a text message when unique items went on sale in the in-game black market. It had to be specifically set to check, but it was a pretty satisfying moment one day when I actually saw a notification that something was available.
The Reincarnation is still around so this program probably still works. You just need to make sure that under Vista/Seven you register MSINET.OCX from an elevated command prompt.
The source code is below as well, however this was long before I learned the value of commenting one's code. Also included is an archive of whatever other ArchMage/TR information I had along with this project.
Following my map of Goldeneye's Complex, this was Bob's map of Bunkers from Goldeneye. He finished a majority of the layout in 2000 before he stopped working on it and turned it over to me. In 2004 I had a resurgence of interest in Quake 3, so I retextured it and cleaned up technical problems like colliding brushes and broken doors. We never got this to a real "finished" state, so it wasn't released anywhere. It looks decent as is, and probably would have been playable if more player spawns and weapons were added.
In what must be the most hackerish thing I've done*, I broke the string obfuscation in a commercial software product. You could already use .NET Reflector to see inside, but the strings were still obfuscated and trying to view the decryption method crashed Reflector. What I ended up doing is using an addon to Reflector to inject code that changed the scope of the decryption method to be public instead of super-private-crash-reflector scope. Then I could reference that modified dll in a utility that called the decryption method. Thus I could use that to view the decrypted strings within the obfuscated program.
*Though if we were friends in high school, there is a fair chance I had your password...
Procmon Augmented KTM (PAK) is a program I am working on that will look through the script in a KTM project and inject logging code in each function such that it will log to Process Monitor. It recognizes different types of parameters that are available in different events/functions and will output massively detailed logging specific to the major types of variables used in KTM script: xDocument, xDocInfo, xFolder, xDocField, and primitive types that can be converted to strings.
As with any of my side projects at work, I'm never sure how much time I will be able to find to work on it. Currently this is functional and useful, but isn't polished to have a nice installer or configurable options. The real power and flexibility of this utility is the injected logging script and that could be continually refined.
In spring of 2004, the last quarter of my first year of college, I took the class Music 14 - Contemporary Music.
We had to do a project involving making music somehow... frankly I don't remember the specifics. My inclination was to play with code and movie quotes and try to make that somehow work for the class.
Like everything in college, I waited until the last moment to do this. As an extra complication, my project was due to be presented on the friday of Sungod, the big music festival which is the one day of the year that UCSD parties like San Diego State. So I was furiously trying to finish writing this program, then literally ran to class, presented the program and its output, then proceeded to join the Sungod festivities. Here is the description I had with the presentation:
For my project I wrote a computer program that plays a series of sounds according to rules that I designed. The sounds are all of "multimedia" inspiration: they sound like they are from generic videogames, and also used are quotes from the movie The Big Lebowski. The sounds begin with a randomly initiated interval and then get faster until they plateau at a fast speed. At that point the sounds drop off and a random quote from the movie is played. After this the sounds are resumed with the interval reversed so they slow down again. During the entirety of this, a background sound is looping. The pattern used is this: the first sound is at an unchanging interval of repetition. The next changes its interval 1ms/s, the next 2ms/s, and so on. The underlying idea is that we constantly have media speeding up our lives and causing lots of stress. The lifestyle and goals of the main character of The Big Lebowski are very relaxed and are a reminder to slow down the music and also our lives.
No need to run the program, the output is recorded as mp3s below.
I played around with the music program Fruity Loops just long enough to see how it works and make this track. I named it "Greatest Mario Mix Ever" with a sense of humor about how easily tools like this let even someone like me pump out a track on day one. The flip side of that sarcasm is that it honestly was fun to make. And Mario sounds just trigger the aural pleasure centers in my brain.
I've historically been pretty bad naming my projects and I think this one perfectly falls into that zone where you can tell I tried to come up with a name... it just didn't work. It was supposed to be a mix of genre and genius.
The idea behind this program was to use the Last.FM API to create genre-based playlists. So you would scan music that you had on your hard drive and based on the mode selected it would get information from Last.FM or the file itself to decide which playlists the track should end up in. As an alternate to creating playlists with this information, the program could instead create folders where it hardlinked the original files. Better known in Linux, but possible in Windows as well, hardlinking basically means that I could copy the song a folder for each genre without using any additional space on the hard drive.
These are the modes of classification possible:
artist/tags (Last.FM) - Adds the song to playlists by the top 3 tags used to describe the artist (result is cached per artist, thus faster).
track/tags (Last.FM) - Adds the song to playlists by the top 3 tags used to describe the track.
artist/toptracks (Last.FM) - Adds the song to the playlist if it meets a certain threshhold of popularity in the artist's top songs.
year (ID3 Tag) - Adds the song to a playlist by the year in its ID3 Tag.
genre (ID3 Tag) - Adds the song to a playlist by the genre in its ID3 Tag.
The program worked and the results were amusing, but the tags pulled from Last.FM were often uninteresting, which limited the use of the program. If a track was mainstream, "Rock" was almost certainly one of the top tags (seemingly without regard to the kind of music). If a track was less mainstream, it was less reliable that you would get good tags. It did seem to have a sweet spot that worked well with Electronic music.
Making fun of a teacher my brother and his friend disliked, this little "game" just let you move a ship back and forth and shoot a monster shooting back at you. The graphics were lovingly handcrafted in MS Paint. Mostly amusing because it used StarCraft sounds. It was fun to make at the time because, even though I pretty much did everything, it was a project with other people involved in the idea.
In the summer of 1998 I went on a People to People trip to the UK and Ireland. The three groups that met to go together were from Bakersfield, Fresno, and Connecticut. When I returned I wanted to make a program to commemorate the experience. Like many projects, I didn't complete enough to really release it, and of course this had a very specific audience. The two sections I completed were the schedule of activities, which let you view the itinerary for each day of the trip, and the roster, which had the name/picture/address of each of the people that went on the trip (using a different form for each person instead of dynamically loading the info, ewww). The main screen of the program shows time in the UK, time since we took the trip, and birthdays this month of the trip-goers.
Some of the earliest things I made on a computer were icons. Icons were a bigger deal back in the days of Windows 3.1's Program Manager. I was so compulsive that I had program groups set up for different categories of audio clips I downloaded (probably from AOL 2.5). Then I started making custom icons to assign to the sounds in these program groups.
Part of the fun of it was that with only a 32x32 pixel canvas and 8-bit color to work with, you knew they weren't going to look great. You just do your best within the constraints of the medium and you have a convenient excuse for anything that looks like crap. Of course those were the old days, before high resolution 32-bit color icons.
Technically we were breaking the rules, but there is beauty in perfecting automation. Bob and I were botting in RO. For the uninformed: This means instead of playing ourselves, we had a program (several instances in fact) automatically playing the Korean massively multiplayer online game Ragnarok Online. The benefits being that with minimal time actually playing, we had high level characters, and accumulated in-game currency and rare items.
On one hand, I was pleased with how well I had tweaked the settings to control the bot, but the real project here was setting up a website that automatically parsed the bot program's logs to create a visual inventory of our characters and items. We used this as a virtual storefront to sell the currency and items. I thought the site turned out very pretty as it was the first time I really put any effort into CSS and I was using the already cute graphics from the game. The fact that it auto updated from "real" data along with code that showed when we were available to buyers on AIM made this pretty neat.
I wanted to try cutting up an image to make a site design with it, so I used a high res image of an eye and used it as a frame to display eye-color themed lyrics. It wasn't even my eye; it was just picture a friend posted after playing with a new camera.
My first website, made in the summer of 1998. This snippet of the HTML tells pretty much all you need to know about how it looked: <META NAME="Generator" CONTENT="Microsoft Word 97">
I built it to offer downloads for my Windows icons and Cancer Doom, as well as mentioning work on Bond Doom. It was hosted on AOL under the long-since forgotten screenname, SilencrPPK.
Friends.zip has a quotes program I wrote that I had bound to [diamond]+5 on my calc. Any time it was run it would display a random quote or odd phrase along with the crudely drawn images of the friends known for saying it.
Friends.zip also has the calculator version of BobNSean which was just a joke program in the first place.
flibgraytest.zip is just a test of the grayscale features of the flib library (there is no native grayscale on the calc), to display an scene from a Counter-Strike minigame I was making. I had a calculator freeze which required a hard reset and I lost all work on this other than the test image.
Misc.zip has the only assembly program I've ever written which just clears the screen and displays some song lyrics. Misc also has the beginnings of my attempt to write a calc program that would parse/display html. I must have been super bored in class.
Math.zip just has some random math functions I wrote. Nothing super impressive.
A memorial site we created for my brother a year after his death. The site itself was just a FrontPage template, but turned out well because of my mom's incredible collection and sorting of photos. Dan managed to be captured in a lot of hilarious and cute pictures. Dan's dog Sammy later got her own section of the site as well.
A few years after my brother's death I put together a DVD of videos of him. A few of the videos are included below. One is his reaction to being given $100 to buy fireworks. The other is a memorial salute to Dan, who played as futy, in the game of Counter-Strike.
This was a video project that my mom and I put together for my brother Danny. We gave it to him after his second remission of leukemia and completion of chemotherapy. Interviews of family, friends, and teachers were mixed in with colleges of pictures.
The interviews would are private, somewhat boring, and more than a little awkward to see now, considering he died less than a year later. But the picture colleges are decent, and in many places, pretty funny. They are available both here and on his memorial site.
Long ago I had a subscription to PCXL and either PC Games or PC Gamer. Eventually I had a huge stack of them, but I was too much of a neurotic packrat to get rid of them. The only way I could get rid of them was by using them for something. So I started looking through all of the old issues and clipping out cool pictures or slogans. Then I started putting them together in a giant 4' x 6' collage.
I have this memory (which might even be true) of working on this between rounds of playing Counter-Strike all day one Easter Sunday. I am amused to look at the picture now and see that it had the original ads for classics like Half-Life, StarCraft, Tomb Raider, Fallout 2, Worms, and Rainbow Six. It even has an ad for the Blizzard game that was never released: WarCraft Adventures.
It was destroyed with similar neurosis as it was created: After having it up on my wall for years I didn't know what I wanted to do with it. I couldn't bring myself to get rid of it. But I decided to take it with me when I moved, and didn't make too much effort to protect it. Pair that with its shoddy initial construction and it was torn apart during the move.
A long time ago, my mom's friend Bev gave me some program with "Hollywood" in the name as a gift. I can't find the name or any mention of it online with the little I remember. It let you write a script using preset characters, sound, effects, and music, and the characters talked with text-to-speech software. I thought it was pretty neat for 1997, but now it's like a sillier, less featured, non-web version of http://www.xtranormal.com/.
The Lonely View is Bob's map released around the same time I released Complex. It was submitted to FilePlanet with the description, "This is an interesting map with some cool, fast jumps, and an nifty little cage of death with a lonely view." The title is taken from the clip of RHCP's Scar Tissue that places when you get launched into the aforementioned cage of death. I think we were both pretty much listening to the Californication CD on repeat back when we were making Quake 3 maps in 2000.
Visor's Arena is Bob's second map released a few months later. The original readme describes it as "A kind of platforms type of level with a swimming pool."
After downloading my Complex map, a member of the then-titled Madness mod asked me to do a map about an "clone of Doom"-character they created named Kain. Kain's Domain is the beginning of that map. I had made more, but some problem with the map editor caused me to lose a bunch of work. Already having low interest, that was enough to give them the small part of the map that still existed, and then quit.
The zip of other Quake 3 maps has the start to mapping my mom's house, the floor plan of Izlude (as mentioned in the Prontera project), and the start of Goldeneye's Runway level.
This was a quick and silly website that I made from a day in 1999 when I had borrowed a digital camera and Bob, Kat, Dan, and Daniel were over at my dad's house watching Goldeneye, playing StarCraft, playing Worms Armageddon, and jumping on the trampoline.
My brother and I went to a week long computer camp in the summer of 1999. Impressively, my brother managed to break his arm... at computer camp. Anyway, while there I got to try making simple C++ programs, play with graphics programs, and make this site. The site was hosted on Homestead.com.
I ended up using the SMKnight logo elsewhere over several years. I also made an animated gif for the first time while there. Because if there is one thing the internet always needs more of, it's animated gifs. I linked it below rather than show it as a screenshot because now technically this site doesn't have any animated gifs... it just links to one.
I was amused to find this code sitting in the folder for that site:
HELLO.CPP
#include <iostream.h>
In 2000 I made a more ambitious version of the site I made at the Baytec computer camp. Having had more encouragement there to use HTML, and sick of having sites produced by Microsoft Word, I switched to pure HTML-by-hand in Notepad. This was hosted at FortuneCity.
The main attraction here was the Quake 3 page, as I was doing this site at the same time as I was making maps with Bob. It also linked to or hosted all the websites I had created previously, the beginnings of my packrat relationship with projects.
In 2001, revised it down to a more minimalist layout which only linked to a few things I was working on, such as the TI-89 programs I was working on at the time.
Though I don't remember the specifics of what I was supposed to do, in 1999 as a Freshman in high school, I had to do a project for "History Day" and one of the categories was website. I think the general topic was supposed to be an invention which was a turning point in history, so I did "Computers: The Turning Point of Modern History." Is it obvious yet that I wasn't going to be delivering something my teacher liked?
Even though my project was a website about computers, I still had arbitrary requirements to have 50 sources, 5 which had to interviews, and I think only 10 of which could be from the internet. And 1999 was much deeper in the teachers-hate-internet-sources days.
So I made a site with some meager amount of history of computers and threw in a section title "Modern Computers" which I filled with things like a programming section with my own programs and a games section which ran down the history of Doom and Quake. I don't know why I though this was okay. So I turned it in and got a D+. Yay, no F!
My pattern of a new website every year started in 1997 and ended in 2002 with Daydream Reality. Though it did have sections for projects that had been in previous incarnations of my website, this one was more like a blog than anything else.
I'm not sure how much it helped or hurt to have this as an outlet, but its use encompassed my brother's death, the start and end of an influential relationship, and the start of college. In addition to always having had a connection to dreams, the website title had a tie to that relationship in that she was my daydream, now a reality. So when that ended I, like a crazy person, kept changing the theme and title of the site, using titles like "Dream No More" and finally settling on "Real or Dream?".
In terms of the actual construction of the site, I used Frontpage after I'd grown tired of pure HTML in Notepad. That meant hosting on Tripod, the one free host I could find with Frontpage extensions. It started out using a Frontpage theme named Zero, though I later changed it to a theme I designed in a graphic arts class in high school. There was a short time near the end when I moved it to a subdomain of my brother's memorial site, changed it to the Frontpage Evergreen theme, and made a PHP/MySQL dynamic blog, rather than the static text pages I used for so long.
In late 2005 as the site entered the limbo of disuse, I put up a spinning image of Megaman as a placeholder and never came back to it.
At the end of high school and beginning of college, many of my friends had online journals. I wanted a more convenient way to read them than checking a bunch of links to see if any were updated. So I wrote this program which allowed you to keep a list of users on LiveJournal, DeadJournal, and Blurty that you followed, then it would sort and combine them for easy reading.
I released this at the time to the friends whose journals I was reading. Back then it was pretty useful to be able to just run a shortcut to this program to display any updates from the past week. Now this can be accomplished much more simply by using RSS, but RSS wasn't as well known when I wrote this.
A program which augmented the game ArchMage. ArchMage died a few months later, but the project and the game were resurrected as The Reincarnation and MageManager.
I still haven't really "released" this because I kept wanting to make it better, and add KTM-specific features, but haven't gotten back to it.
It lists all of the batches in a Capture installation and a double click opens the image path. I do it outside of the Capture API so it is quicker and does not require opening the batch.
My attempt at making a tile based game where the game was also the editor. Clearly I didn't know what I was doing, but like many things I've done, it was a good learning experience. I made a few screens from Link's Awakening with it. I was drawing each tile in MS Paint by staring intently at my Game Boy, so that was a mix of both tedious and fun.
At some point in 2000, I found the Persistence of Vision Raytracer, Pov-Ray. It is basically a programming language for rendering raytraced images. Like vector images, one benefit of these is that, like I did, you can come back years later and render at a higher resolution or from a different angle.
I used it to make a sword logo to match my SMKnight alias and it ended up using it here and there whenever I needed a logo. I used it on websites. I had a grayscale version as an intro graphic in calculator programs I wrote. I used it as a spray logo in Counter Strike. In fact, this even flashes up on the logo on the screen when my projector is starting up.
Much later, putting together a sort of portfolio of work in 2006, I went back and re-rendered it with my full name instead.
Now it is common for online services or social networks to show what music friends are listening to, but when I wrote this program in 2002 it was a bit more novel.
This was back in the days when people cared about AIM profiles, enough at least that if put a link there, it was likely that friends would see it. There was a program called HyperInfo which was just a tiny web server where you could host a profile with additional features (muliple pages, click tracking, replacing commands like username/ip with dynamic values).
The program I wrote checked if Winamp was open and if it was, it would extract the artist and song title from the window title, and then replace the {winamp} command in the HyperInfo profile with the song info. It also added a link to to AudioGalaxy (a much different service then than now) to instantly download the song. Simple, but pretty neat.
Looking back on this is hilarious... So all this program does is write out a simple script with console commands that could be executed in Half-Life/Counter-Strike.
In-game, you bind a key to execute this script and it tells you the current time and the time left on the current map.
I laughing trying to think, "How did I decide I needed this?" Ok, so you couldn't see the current time from within the game, and alt-tabbing would either take forever or break the game... I guess I might not have had a clock in my room after I started using my computer as an alarm, whenever that was... though I was pretty sure these were back int the days where I wore a watch continuously...
Funny, but the program worked, and I used it for some time.
Perhaps even funnier was the utility HLtxt, which I tried to write afterwards. It is important to note that my playstyle and level of skill in Counter-Strike resulted in a lot of time dead between rounds, and as mentioned, these were the days when alt-tabbing broke the game or was prohibbitively slow (also no dual monitors).
So the idea was that HLtxt was a monitoring program that would let you read (or possibly even write) content from outside the game by executing config files dynamically generated by the program. Then I could read other things, or write papers for school... while I was dead in CS. For example, it was populated with the first chapter of Alice in Wonderland by default, and you could bind a key to show the current line of the text and advance to the next. I think I got the read-mode to work, but I don't remember ever actually using this.
Obviously this hasn't been accurate for years, but in 2006 when I was playing a Hunter in World of Warcraft, I wrote this quick little program to calculate various DPS, AP, hit, and critical stats so I could do a quick assessment of if another weapon seemed worth it.
Sometime in 1997 or 1998 I was gifted the Star Wars parody game Star Warped. It was pretty cheesy, but the thing I remembered most from it was the short skits called Scrapped Scripts done in the styles of Seinfeld, Spike Lee, Tarantino, and Woody Allen.
I was only ever able to find one online of the 14 that were in the game, so when I was back home I found the disc and tried to capture all of them. They are available on YouTube as well as in the new WebM format. The only quirk is that the last lines are cut off of two of them, but the missing lines are available below and on the appropriate YouTube pages.
When you copy text you know you will be able to past it in any other program that has a text field. But what about other formats? When you copy something more complex, sometimes it isn't clear whether it will paste as a simple text, a visual representation, or not work at all.
This utility monitors the data types of the contents of the Windows clipboard When the clipboard contents change, it displays all of the formats in which the current data can be interpreted. If the data can be interpreted as "Text", the text content is also displayed. This is primarily useful to a programmer who wants to see formats in which other programs make data available. Source is included and this could easily be extended to monitor a particular type of interest.
I initially made this to investigate a problem with how KTM 5.0 Document Review used the clipboard. The Doc Review version included below only works in KTM 5.0 before Patch 4, after which the issue was fixed by implementing an "internal clipboard" as an alternative to actually using the Windows clipboard.
Update: I've since discovered NirSoft's InsideClipboard tool, which is similar but nicer. Though since the source is included with my tool, it is still a good starting place for a tool to monitor for details about a specific type as I did with the Doc Review objects.
This is a sample utility built against Kofax Transformation Toolkit 5.0 which lists databases used by a KTT/KTM project. It allows you to drag a project (fpr file) to load it, then press the button to display any databases used.
I thought it might be useful to build utility which would quickly show a bunch of info about a project file, however building it against KTT means that it can only be used with a license and product installed which very few people have. If I make something along the same lines in the future, I would do it differently, so it didn't have a product and licensing dependency.
Source included, but of course it requires KTT 5.0 to build.
Working in Kofax Support, I use the Knowledgebase site a lot and I found it intolerable that the individual pages didn't link back to the search page and there was no links between the internal and external versions. So this is a small userscript for Firefox-Greasemonkey/Chrome adds these links which, for me, greatly improves the usability of the site.
A later improvement rewrote all links to make sure they pointed to internal versions, linked to incident numbers in TechHELP, and linkified the rare KB which wasn't properly linked.
TechHELP was Tim's project, but I made significant contributions to it. Before Kofax Support transitioned to SalesForce, this was an internal web frontend to view support cases as an alternative to the unituitive old CMS program we used. It was fun working on this because it was collaborative, the end product actively made my job easier, and other people enjoyed using it.
Despite that, project was done with the "ask forgiveness, not permission"-idea. We had access to resources we were not meant to, but no one took any action about that because what we made was unarguably useful, and we would be moving to SalesForce eventually anyway.
The main appeal was that it provided a very simple view to cases of various criteria, highlighting cases that needed attention. Domain authentication was used to show an individuals cases without any login needed. It even tied in with the other systems to show knowledgebase articles written and Software Problem Reports written. Customer Surveys were exposed as well, which were not available to us before, and have not been available to us again after the move to SalesForce.
The more experimental features included a search to try to make sense of the (at the time) mess of contact information, and a chart to show chart to show knowledgebase articles most often used to solve cases.
Capture System Chart is quick visual way to get an idea of the status of a Kofax Capture system. It does this by showing a pie chart of how many batches, documents, or pages are in each module. Optionally it can be separated further, grouping by module and batch status.
It uses Microsoft Chart Controls which are included in .NET 4.0 or can be installed separately with .NET 3.5 SP1. The installer is included in the zip file.
This utility will restore the proper names of KTM licenses after a Kofax Capture license reset.
When KTM is installed it sets the correct names in the Kofax Capture license server. If the license is reset or a moved to a new server, the license server will revert to old names. Though this is cosmetic, reinstalling KTM would be the only way to correct the names.
This utility corrects the names, allowing a choice between names used in KTM 4.5 or KTM 5.0, which only have slight differences. Also, if you enter the Konami code, the utility exposes controls to allow arbitrary renaming of any license name.
QAID stands for Question/Answer ID which is the name that Kofax uses for its Knowledgebase articles. I wrote this tool to aid in some of the tasks of migrating from an in-house KB to a SalesForce hosted KB.
Small utility meant to be called in script from other programs. It logs the name as well as the virtual and private bytes of the program which called it.
Currently, able to combine event logs (currently only local, not saved), Capture ERR logs, KTM logs, CSV files (aimed toward PerfMon CSV). The events can be sorted and CSV files with headers are handled in a more readable way. Uses ObjectListView.
The viewer that can be docked or floated in KTM Validation can disappear under certain conditions and this utility will reset and, to an extent, prevent future occurrences of this.
This utility will reset all users' KTM Validation settings including the Docked/Floated state of the Viewer, then it will open KTM Validation where you should open a batch, then close the module. This will cause KTM Validation to create an XML file in the All Users location, which we will then copy to the user directory for each user who has logged into Windows/Citrix on this system. These users can then float or dock their viewers and should have no further problems. New users who have never logged into Windows/Citrix on this machine could still see the problem, and need this utility to be run again.
A system tray utility which uses Growl notifications for SalesForce cases which need attention. Falls back to bubble notifications if Growl is not running. The design is specific to Kofax and it is not possible to use or adapt this to other SalesForce implementations.