Every so often when reading through some C# code I’ll run across the as keyword. Now this is a very nifty feature of C#. Just like the familiar parenthetical cast, it returns the object cast to the new type if it succeeds. However, if it fails then it simply returns null instead of throwing an…
A bit of everything
Today was a really good day, at least for summer break. I got to see my girlfriend again (second time in the last week… woot), got a long-standing WikiBench todo done, and found some pretty nasty bugs in Mono’s implementation of the 2.0 framework TryParse methods for integer types. Somewhere in there I sent a…
WikiBench: Persistence
One of the things I’d been dreading implementing in WikiBench is state persistence. This is, however, very important. When the user closes the application, they should find it in the same state they left it in when they open it later. This is a tricky one to get right, though. Because one of the goals…
Well, it finally happened…
I got a car! They just had some work done on it so it should be working for a while yet. Not bad for $500.
Manhood
Some of you may know that I celebrated my 21st birthday recently. So I guess I’m legally an adult according to the law, which means that I should be mature enough to choose how much of my time I want to spend drunk. Apparently turning 21 is that life-changing, I guess, according to the government…
JavaScript Queues
One of the most annoying parts of VandalSniper from a maintenance perspective was how the “JavaScript Queue” was run. To perform some complex action such as rolling back an article and posting a warning to the talk page of the editor required a sequence of JavaScript snippets to be run, one each time the browser…
What’s in a name?
Quite a bit, if you’re Gtk#. I’ve implemented the popup user menu in WikiBench.MediaWikiIntegration, along with the extension points for other addins to insert their own menu items into the menu. They can either provide a type extension using a class that derives Gtk.MenuItem, or a custom extension node provided by MediaWikiIntegration to add a…
Glue-free JSCall#
One of my goals during this rewriting of VandalSniper as a more general-purpose browser has been to reduce or eliminate the dependency on platform-specific glue libraries. JSCall# uses a C/C++ library to interact with the DOM, and this is just one more hurdle to be jumped over on the road to portability. Who wants to…
More on WikiBench
I’ve been hacking on WikiBench some more. The primary addition is the recent changes pad, which you can see in the screenshot. It is a separate addin that hooks into the WikipediaChangeStream addin to provide a list of changes to the user. Clicking a row in the list will display that diff in the browser,…
More HD-DVD fanart!
To further test US copyright law, I have created more art that incorporates the released AACS processing key that the MPAA is sending DMCA takedown notices over. Due to the size of the image I am making it available exclusively at deviantART. The image uses 24-bit sections of the key as the colors for text…