I decided to use the XML-RPC standard in a project I’m working on, and meebey suggested that I release it as a separate project. So here it is: Org.Cdh.Xmlrpc. Just svn co https://layla.chrishowie.com/svn/Xmlrpc. No fancy reflection stuff yet. The library was designed to encapsulate the XML part of the XML-RPC spec without doing much else….
Category: C#
Cast abuse
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…
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,…
WikiBench
I’ve been fiddling around with Mono.Addins and have decided that I will be rewriting VandalSniper from the ground up. I’ve had a lot of ideas for it that have become way too complicated to implement with the current design. VandalSniper was my first C#/Gtk# project anyway, so it’s about due for a rewrite. I’ve learned…
WatchlistBot
Today I got around to implementing an idea I had for a while. I already had code in VandalSniper that would parse the IRC feed from browne.wikimedia.org into objects that represented each edit. So, I simply pulled out those pieces, and threw them in with two other libraries for accessing Jabber and MySQL, and the…