WorldMaker.netBlog

Blog

Introducing Debtstack

2 weeks, 4 days ago

Here's an initial copy of Debtstack (preliminary location) to try. You'll need WPF up to date to run the binaries under bin\Debug or Visual Studio 2010 or later with F# support installed. I'd love to hear if anyone finds this tool useful and/or interesting. (The full darcs repository (Ms-RL) is provided if anyone is interested in emailing me patches. Given that it is a darcs repository of an F# application I'm not expecting much interest in collaboration, but would welcome surprises.)

Overview

Debtstack is my attempt to provide interesting answers to the question of "What am I currently paying off on my credit card?". It started life as a series of spreadsheets and I decided to further automate it and use it as an excuse to do some F# programming.

Concept

The typical way to look at a credit card account is to see it where you are paying off purchases in the order that they are made: first in, first out. In data structures terms we refer to this as a queue. You can just take your last few statements and start adding up transactions until you meet your current balance and you've got a queue view into what you are currently paying off. To me, however, it is not an "interesting" view. The view tends to obscure the real reasons you may be in debt and tends to give focus more to recent trivial purchases.

The related data structure to the queue is referred to as a stack. In a stack items are dealt with first in, last out. It seemed clear to me, given the time value of money, that the stack was a more interesting way to look at an account. After having captured this sort of few for ...

Some Bits from ConGlomeration 2012

1 month ago
  • I played Cards Against Humanity for the first time. It is exactly "Apples-to-Apples for horrible people" and it was a couple of late hours of hilarity that was worth the sleep deprivation.
  • I played two games of Fiasco this year. One was interesting, but didn't quite feel to me like it was firing on all cylinders, and the other was another awesome cooperative clusterfuck with Brian (Veklam), Matt, and Nicole. (My apologies to Matt and Nicole for not remembering gaming handles better.) Fiasco when it is firing on all cylinders and everyone contributes nearly equally for every character on the table is just such a blast to play and both games Brian and I played together at ConGlomeration now have been surprisingly cohesive at the end and so much fun.
  • I find Barfleet fascinating and was glad to see a bigger presence here in Louisville this year.
  • I helped tear down this year and the prize at the end of a long Sunday was a fun session in Sean Fannon's Shaintar campaign setting (forthcoming publishing) in the Savage Worlds system, GMed by Sean himself, who was one of the Gaming Guests of Honor. It was my first experience of the Savage Worlds system and even with the few exhaustion-related hiccups we had, it was a fun system and I'm curious to try it again. Also, Sean is best known as the marketing face for Drive-Thru RPG and it was very easy to see this weekend why: he eats and sleeps RPGs and he was a lot of fun to listen to and play with.

Saving the best and most mind-blowing for last, I tried the Writer/Artist Combo this year. It's a small gathering of writers and artists where each exchanges a work and over the ...

Dynamically Data-binding Columns in XAML

1 month, 4 weeks ago

There are times when you find that you need to dynamically set the columns in a Silverlight DataGrid: perhaps you've got a need to let users configure the columns or your columns are based on some part of your data model. I've seen several anti-patterns that are in various states of broken and/or over-complicated, such as the one I removed from a code base that managed to build a column for every cell in the DataGrid. [1] While Silverlight and WPF now both support stronger (but different implementations) ways to auto-generate columns for more complicated dynamic data structures, there are still times where it is preferable to use a combination of hand-edited columns and columns built against things very specific to your data model. To save me from having to rewrite the class myself ever again (having done so twice), and to possibly help save other people from the broken versions I've seen posted to various webpages, here's my solution to dynamically bind columns from XAML:

public class ColumnBindingDataGrid : DataGrid
{
    public ObservableCollection<DataGridColumn> StaticColumns
    {
        get { return (ObservableCollection<DataGridColumn>)GetValue(StaticColumnsProperty); }
        set { SetValue(StaticColumnsProperty, value); }
    }

    public static readonly DependencyProperty StaticColumnsProperty =
        DependencyProperty.Register("StaticColumns", typeof(ObservableCollection<DataGridColumn>), typeof(ColumnBindingDataGrid), null);

    public ObservableCollection<DataGridColumn> BindingColumns
    {
        get { return (ObservableCollection<DataGridColumn>)GetValue(BindingColumnsProperty); }
        set { SetValue(BindingColumnsProperty, value); }
    }

    public static readonly DependencyProperty BindingColumnsProperty =
        DependencyProperty.Register("BindingColumns", typeof(ObservableCollection<DataGridColumn>), typeof(ColumnBindingDataGrid), new PropertyMetadata(null, ColumnsChanged));

    public ColumnBindingDataGrid()
        : base()
    {
        if (this.Style == null)
        {
            // Manually attempt to inherit any implicit style
            this.Style = Application.Current.Resources[typeof(DataGrid)] as Style;
        }

        this.StaticColumns = new ObservableCollection<DataGridColumn>();
    }

    private static void ColumnsChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        var self = sender as ColumnBindingDataGrid;
        var old = e.OldValue as ObservableCollection<DataGridColumn>;
        var n = e.NewValue as ObservableCollection<DataGridColumn>;

        if (old != null) old.CollectionChanged -= self.ColumnsCollectionChanged;
        if (n != null) n ...

Thunder Over Louisville 2012

2 months, 2 weeks ago

Thought I'd post a friendly heads up here on my blog: Thunder Over Louisville is April 21st this year. It's coming up fairly rapidly. As I've mentioned to a few I will (of course) be hosting a gathering at my condo this year, rain, sleet or shine. My condo will have a great view (and amenities like air conditioning), and is an easy walk to the shenanigans happening at Waterfront Park.

I expect this will be the first of many and I'm anxiously looking forward to it. Based on earlier conversations, I'm thinking that at least some availability of Mint Juleps will be required (for those looking to party Derby Style at least twice in three weeks). I'm willing to bet that some Rock Band may even be played.

I'll need to figure out some sort of food plan between now and then, so letting me know if you are interested in attending would be appreciated and you can send that to my email address (still me@worldmaker.net after all these years). If you need them, I'll provide directions via email as well.

Hmm, I may end up needing someone to coordinate a Facebook event for me, because I still don't feel like reactivating my account...

Also, ConGlomeration is the weekend before if your April calendar isn't yet as packed as mine seems to be.

That Old Timey Star Wars Thing

3 months, 3 weeks ago

In High School I burnt out on the Star Wars franchise as a whole. I came to the conclusion that all of it was feudalist fantasy tripe in sci-fi drag. The prequel films only affirmed my opinions on the subject. Thus I was mostly immunized against certain types of hype that preceded the MMO launch that everyone couldn't shut up about.

What happened was that in my "why isn't Mass Effect 3 out yet" funk I did let myself get talked into trying said MMO. As I had suspected, SWTOR is 8 decent (but not great) "lite" Bioware single player RPGs glued together with a poor, old school MMO design with typical boring MMO "kill 10 rats" grinds to stretch the single player MMO progression out to a more MMO-ordinary progression curve. As a bit of an MMO masochist I've had a lot of experience in MMOs, and in its social aspects SWTOR feels like a MMO from the turn of this century and like its missing a decade or more of experience and innovation.

For having millions of players, it's badly fractured sharding on top of over-the-top-instancing (minus modern instancing innovations like smart leveling and auto-PUGs) combined with poor social tools (it has a standard LFG search that not enough people group enough to know or care about leaving the mostly-ignored chat channels left for mostly LFG yells and complaints), SWTOR feels dead inside. Millions of people that only contribute to "Hey look at all the named NPCs in this grindtastic single player RPG".

The single player stuff has interesting moments. I'm floored by how much money and time has obviously been lumped into this. There is so much awesome voice acting by great voice actors (and neat cameos from other name actors). Among ...

On the Night of the First Refueling of My Chevrolet Volt

4 months ago

I finally convinced myself, earlier this month, to upgrade from my reliable high school automobile (a '97 Geo Prism) and bought a Volt because electric cars are awesome. (Cue the They Might Be Giants: let's all drive an electric car / come on and take a ride in my electric car.) Tonight I refueled my Volt for the first time. I love this Volt.

For the curious I used almost exactly 8 gallons of gas in about 15 days of driving. All of the usage of my Volt's gas generator (unlike the hybrids, the Volt's electric motor always does the driving) was on the return trip of my work day commute. If I could manage to convince work to install a 240V charger I'd not need gas except for road trips...

In High School when everyone was talking about sports cars or muscle cars or trucks/SUVs, I was even then researching and following electric vehicle news. My first car (and the only one I didn't chip in to pay for, heh) was an electric: a Delorean--- the Back to the Future Part II themed power wheels with even a fake plastic Mr. Fusion. The Volt is what I very much wanted to spend years of indebtedness to major financial institutions for. After years of research, the Volt really is the coolest car I could afford and is my "green sports car" or "spaceship" in comparison to the Prism that has served me well for most of a decade. It is the kind of awesome car that Back to the Future Part II hinted that I might own in 2015, and I just hope that there will be a nice discount on hover conversion in a couple of years.

Madiolahb Preview

5 months, 1 week ago

I've uploaded a first preview build of the Madiolahb library [1] on PyPI, which means that you can install this preview release with easy_install or, better yet, pip if you have Python and one or the other installer on your system.

The latest Madiolahb documentation is now also up on PyPI and this will be where I will keep it up to date now. I'm going to slack on updating the appspot site until I've got a preview build for the REST API.

The big deal here is that Madiolahb is now a standalone library (the AppEngine code will depend on it rather than vice versa) and that it has a command line script (just madiolahb when installed via easy_install or pip). You can explore the API in Python if you wish, or you can try to Play By Command Line using JSON (or YAML if you prefer) files and command line pipes. It has useful starter help documentation (-h), and I think a very good tool to start examining.

There are a lot of known bugs and unfinished commands. It's still not quite "Bhaloidam standard" yet, but getting there. There are a lot of things I need to redocument or document for the first time. I need to start on the REST API handlers. I want to get the old text parser back together (and available from the command line). I should get code pages up on my website with the change log and a link to an up-to-date source repository. But this is a decent starting point. I think the command line feel here (bugs withstanding) should provide some idea into my thought processes for Madiolahb and a decent idea of where it is going. Feedback is welcome/encouraged.


[1]Madiolahb is my laboratory ...

The Secrets of Assassins

6 months, 2 weeks ago

Enlark's version of Assassins, a platform I put quite some work into but few played, has been down for a few months now. Partly because I didn't feel like updating through the hoops and changes of various Facebook APIs, but mostly because I deactivated my Facebook account entirely.

I haven't figured out what the next steps are for its code base. While I'm still pondering that, I thought I'd post The Secret of an Assassin which is a simple phrase generation toy. Use it to generate a fun passphrase or to amuse yourself for a short handful of minutes.

Secrets in the Assassin game are passwords to share upon a player's "death" which are plugged into the system to authenticate the completion of a contract. In previous iterations these were actually passwords, and in variations I've seen elsewhere (and nearly implemented) they can be QR codes. For the most recently version of Assassins that I wrote, I wrote a simple pass phrase generator that amused me. Few people actually played with that generator in the context of Assassins, so feel free to learn The Secret of an Assassin or two. The idea was that they should be amusing, but easy to remember and pass on. (I supported sending those messages via the (Facebook-embedded) website, email, IM, and Facebook's SMS, so they probably didn't need to be memorable for long.) I liked the idea of a non-sequitur "last words" pass phrase better than some assortment of random symbols and/or letters. To some extent, I also liked it better for its social interaction than QR codes.

The basic structure of the generator (and all of my work on Assassins) predates the xkcd on the subject, but that comic is great if you ...

Bhaloidam

6 months, 3 weeks ago

If you haven't already, you should definitely back Corvus Elrod's Bhaloidam on Kickstarter. There are only a few days left to do so. Corvus' Bhaloidam is a very unique storytelling platform as RPG-like boardgame (or boardgame-like RPG) and well worth pushing further towards its Kickstarter goal. Corvus explains things pretty well on the Kickstarter page, so go there.

I've enjoyed every opportunity I've had to work with Bhaloidam (or as it was previously referred to as the HoneyComb Engine), both in having played it a couple of times with Corvus and friends and having experimented with it in Python. Now that Bhaloidam is stable and about to be published in a big way, I'm working on slowly picking back up the Python work and bring it up to date.

The first baby step here is that I'm giving the library and assorted accoutrements a proper name, which is now Madiolahb. Obviously not entirely original as it is simply the reverse of Bhaloidam, but I like that it lends some focus to "lahb"; my intended path for the library and toolset is to be a laboratory of interesting component parts to build Bhaloidam-based games and structures in computer-mediated spaces. As a first example of this laboratory approach I'm trying to push towards as rewrite, streamline, and expand upon Madiolahb, I'm opening up the idea of a standardized JSON format for tool chaining (similar in ways to unix pipelining) within Madiolahb itself and as a potential interchange format between other Bhaloidam-based tools. Madiolahb JSON Schemata is a first stab at documenting this and comments are welcome.

More to do and more to come. (Don't forget to support Bhaloidam over on Kickstarter.)

Windows 8 Was My Idea

7 months, 3 weeks ago

As an occasional science fiction writer and would-be prognosticator, I'm always happy to see my predictions come true. Windows 8 has met a good chunk of my expectations as a developer and I'm excited. (Apologies for borrowing Windows 7's slogan, but it feels more appropriate here somehow.)

I'm happy that XAML and Blend are ensconced as the one true way to slick UI design, even for unmanaged/native developers. I'm glad of what I've seen of the now grown up, sleeker and svelter WinRT. (I remember a much ganglier, unfinished version that was promised for and subsequently cut from Longhorn/Vista. The years seem to have matured the project well from what I've seen thus far. I can't recall how much of what I remember of Vista's nascent WinRT was confidential at the time, but presumably if I remembered any of it better than hazy supposition and half-memories the statute of limitations on that confidentiality has expired.) I'm glad to see that the "Metro" design sensibility is indeed converging across devices as I had expected would happen.

Today's most recent pleasant surprise, the first I have heard of this and buried in plain sight in the Live SDK post on Building Windows 8, was that Windows Live Messenger will support XMPP for developers that wish to interoperate with it. One fewer walled garden in the IM space is great for everyone, and XMPP is the only standard to support...

It reminds me of a conversation I had during my last interview cycle at Microsoft in January 2009. I believe the statute of limitations for discussion about it has expired as well. I want to bring it up not to fester old ego wounds but instead to gloat. Microsoft (like ...

A Rant On "Entity Systems"

8 months ago

Certain game development blogs that are very likely to be dropped from my RSS feeds in the near future have been talking a lot lately about so-called "Entity Systems". This happens to involve a couple of axes I have to grind. It seems like another good example of how the Games Industry's locked-doors, no-academics, lets-brute-force-this attitudes have put blinders on the industry to decades of software engineering history and learning. "Entity Systems", as for instance described on the Entity Systems wiki, is a poorly renamed description of the prototype-based paradigm. (My Master's Project regarded this paradigm.) In object-oriented programming, prototype-based OO largely predates gaming's dominant class-based OO language (C++) and even the class-based paradigm as a whole...

That's not to say that many programmers understand prototype-oriented programming-- one of the most commonly used languages in the world (JavaScript/EcmaScript) is so often poorly understood and utilized because programmers don't make the attempt to properly understand prototype-oriented programming.

I'd love to see the heads explode should some of these "Entity Systems" programmers sit down with a proper prototype-oriented language/environment that builds on decades of prototype-oriented knowledge. For instance: io.

(I am thinking about revisiting my Master's Project using the DLR more directly to build a fast prototype-oriented object model in .NET and see if I can rewrite some "Entity Systems" example into a more interesting shape (dot-notation and less "silly-DOM-model" API code smell). I would bet I could get it pretty fast and beautiful. Even if the DLR scares even professional .NET programmers, much less the C/C++ stalwarts.)

8671 "Veteran's Parkway" Concept

8 months, 1 week ago

Here's my crazy and yet pragmatic transportation idea for downtown Louisville: terminate I-71 at I-264, converting a few blocks of I-71 into a Parkway. I've mentioned this concept before, but now that I'm driving this path every weekday I think about it a bit more. I appreciate 8664's wild-eyed optimism, but I still don't feel it is a pragmatic solution and I don't feel that the majority of its proponents actually drive I-64 downtown often enough to appreciate the "weight" of the plan. 8671 I think is much cheaper and much more pragmatic, even if it certainly doesn't have the raw aesthetic appeal that 8664 commands...

Anyway, background and details: I-71 already terminates in Louisville (in fact it is a fairly short interstate terminating in one end at Louisville and the other at Cincinnati), only currently it terminates in the sprawl of flyovers belovedly called "spaghetti junction". The interconnections with I-65 and I-64 are useful, but not an important or necessary components (from what I understand of I-71's design intent) of the current I-71. I think that terminating I-71 only a few miles "early" is an acceptable compromise for the current access afforded. Trucks and regional through traffic can reroute through I-264 or I-265 (particularly once the East End Bridge is finally built) to both I-64 and I-65. Removing I-71 from the mix drops four lanes and several requisite flyovers from "spaghetti junction". That removal and a few sign changes are all that are needed to terminate I-71 at I-264... It should be doable with existing spaghetti junction funds.

The part of I-71 to be cut off, which is currently marked by signs as the "Veteran's Memorial Freeway" is interesting because it would still remain useful for local traffic and could ...

On Condo Buying and Expectations of the Past's Future

10 months ago

I'm deep within the process of condo buying. I have damoclesian pendulums of insurance, loan agreements, furniture needs, et al hanging over. I have reached a responsibility point of no return that is of course both exciting and frightening. If I have not matured I at least seem to be pretending at maturity well enough.

Visited the condo again today and each time I visit is a slight touch more complete and ready and slight bit more awesome and exciting. I hope to throw a great party to celebrate once things are ready. We should celebrate all the little things of life and debt.

On Saturday for the mortgage company I was ransacking old archives for minutia from past lives. I don't think that I would have predicted some of the curvature of the last few years. I certainly would have planned things differently, if I were better at planning and foresight. I think I'm in a good place right now, metaphysically speaking. But I'm not sure where I'm going quite yet.

In the stack of documents I was looking for was one with my company logo (Enlark) and I shivered a little when the logo appeared on screen. I do the same thing every time I hand out a business card. There's a lot of weird emotion there of unfulfilled promise. The logo is one I made rather quickly from simple elements and found elements and a gorgeous licensed font that found me. It's still evocative to me. Almost more so given the company's failure, or rather the utter lack of failure. I put in a lot of hours and work and sweat and tears into its projects. I got back a little more stress than I expected and a lot ...

The Laundry RPG: Session 1 and Fun With Office Supplies

1 year ago

On Wednesday I took on my first big "real" attempt at game mastering. The group I've been playing with had gotten a bit tired with its long-running D&D game and in order to mix things up I agreed to take on the GM mantle for a while and try running some adventures from the files of The Laundry. I'm a fan of Charles Stross' series, and I felt it would be quite fun for a series of one-off RPG sessions. My players don't have any familiarity with the books nor do they seem to have much other experience with the Cthulu mythos... I take it as an interesting challenge to keep things interesting and maybe introduce them to crazy new things.

Session 1 started with the obligatory character creation. I spent a bit too much time in an office supply store picking up the preparations I wanted. I wanted to be a prepared GM and in weeks before had already picked up extra polyhedral randomization devices and a battle map. Now, I may like office supplies a bit too much, but it also seemed quite fitting for the setting. (As I've told my players, The Laundry RPG can be thought of as Call of Cthulu meets The IT Crowd.)

https://lh4.googleusercontent.com/_-9wqz4E1yko/Tc84j8iVeKI/AAAAAAAAAB8/fPlrneFm8FE/s400/Laundry%20Character%20Pack.JPG

The biggest usage of the office supplies I purchased was these character packs. Plain manilla folder with a personnel record (character sheet) and a name tag, and a paper clip to bind them. The key piece that really sells this for me, though, and the thing I spent the most time figuring out was the "Paper Clip" acquisition form:

https://lh6.googleusercontent.com/_-9wqz4E1yko/Tc84louQ3nI/AAAAAAAAABs/lWQp4dy6hIg/s640/Laundry%20Character%20Pack%20Detail.JPG

Certainly, none of my player's have read The Fuller Memorandum yet, but the threat of a paper clip audit and dealing with frightening-sounding Auditors I think ...

Short Fiction Rejection Metrics

1 year ago

Thanks to Duotrope I tracked my lone recent experiment in selling short fiction to a short fiction market. All things considered, attempting to sell my short story has felt like too much work for too many rejections. I've got too few stories in my back catalog (primarily because how terribly easy it is to just post things to my blog) and too few hours in my day, unfortunately.

The short story involved in this experiment was called Princesses for Planetary Peace, quite possibly one of the best I've written, I think. It uses design ideas I had from gaming and I felt it was ahead of the zeitgeist when it was written, and seems now to be set directly in the zeitgeist of last week: It uses a riff on The Last Starfighter to play with the hardcore/casual "divide". At 4900 words it is one of my longest short stories to date (my personal high school short story "bar" was 1500 words, so this is three high school stories long), about middle of the road for short fiction markets, and apparently too short for its early "beta" reader fans. (All two of them. Hi!)

I submitted it for inspection to four markets for a combined 293 days of consideration time. First submission was on June 19, 2010 and fourth rejection was April 19, 2011. Shortest rejection was two days and the longest accounted for 215 days out. (The large standard deviation of 83 and a half days should thus be unsurprising.) All four markets required exclusive access, so the story was only ever in a single market's queue at a time.

I'm still debating how and when I'm going to publish this short story. I'm somewhat tempted by the idea of an extreme ...

Colophon Copyright © 1999-2010 Max Battcher / WorldMaker. Some Rights Reserved.

With our thoughts, we make our worlds. Font Hosting by Kernest.com. I only buy the best Robots — All my Robots are GSD ServDev® Brand.