<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <body>I'm working on a game meant to teach very young kids the preliminaries to basic programming.  With luck, it'll work out well and I can advance to more interesting and complex stuff to teach, but that'll happen in time (or not).  In the mean time, some screenshots:

&lt;a href="http://static.angelbob.com/portfolio/pizzawindow.png"&gt; &lt;img src="http://static.angelbob.com/portfolio/pizzawindow.png" width="250" /&gt; &lt;/a&gt;
&lt;a href="http://static.angelbob.com/portfolio/pizzawindow2.png"&gt; &lt;img src="http://static.angelbob.com/portfolio/pizzawindow2.png" width="250" /&gt; &lt;/a&gt;
</body>
    <created-at type="datetime">2010-03-01T07:55:23Z</created-at>
    <id type="integer">273</id>
    <title>Randomly...</title>
    <updated-at type="datetime">2010-03-01T07:55:23Z</updated-at>
  </post>
  <post>
    <body>I just finished writing &lt;a href="http://github.com/noahgibbs/markov"&gt;Markov&lt;/a&gt;, a simple random generator that takes a YAML file for configuration, then generates words/phrases/whatever from it.

Later, I'll integrate it with a repeatable random number API that I'm planning.  For now, it's a fun toy.  Here's a list of substance names produced by a sample file in the git repository:

Borginine yominium
chiglienerium
Phreebaum's saprinum
red chigroglannum
kepraererium
creinipraz
cyan shocrannum
sloglonyx
blue stopaz
red shoogot
Heterodized creikinum
cruipennium
seiliglinum
kinerium
bageigium
yellow gragrislaz
cratinum
beigrannum
masherbium
green yieglaeyanannum
proustulerium
loyoyugrinum
kouyeipaz
red miesannum
sagachinum
green poshaprony
mieprium
staetum
piyot
blue guthonyx
yellow piglaebannum
Wolfram's goochoprinum
craeserbium
red lierannum
raustapinum
Gibbsian loubinium
yellow prashicraetannum
lalerbium
red tooglannum
grienerium
blue tapronyx
tichinum
green bosethony
yellow mekaz
yigrougreisinum
glaeprislinum
thucrerium
yellow chiyony
thaglunum
grithum
stogreigerbium
Gibbsian glelium
thumegaecrinum
taestinum
baecrerium
priyashonyx
Wolfram's crocruchennium
gaperium
chisennium
crishuyashinum

You can start getting repetitive-looking stuff fairly quickly right now, but that was genuinely created by running "ruby generate.rb -n 50 substance.markov", so it's not too bad.

Don't those sound like great names for stuff you'd have to assemble, as a mad scientist, to bring your twisted creations to a horrid semblance of life?</body>
    <created-at type="datetime">2010-02-03T07:21:08Z</created-at>
    <id type="integer">272</id>
    <title>Silly "utility"</title>
    <updated-at type="datetime">2010-02-03T07:23:30Z</updated-at>
  </post>
  <post>
    <body>Tests often have significant dependencies between them, and those can cause all sorts of ugly problems in testing.  That's not news, of course.

Test suites tend to have varying approaches to minimizing the problem, but usually boil down to "run the tests in a basically fixed order and let the programmer sort out the problems."

Unfortunately, that encourages all &lt;i&gt;kinds&lt;/i&gt; of bad habits on the programmers' parts.

Languages, with a few exceptions (heya, Haskell!), lend themselves to ugly global state change, making it very hard to run many tests without testing things subtly different than you think you're testing -- two tests touch the database, and leave changes behind, while the other tests mess with the /tmp directory, and a fifth test does both.

Test frameworks should exist to run each  test individually, and then run combinations of them, and to mark various tests as "troublemakers" (known to touch global state in a way not fully restored), individually or in cliques.  Test suites need the equivalent information to the phrase "this test tends to fail when run along with tests under tests/functional/database".</body>
    <created-at type="datetime">2010-01-11T21:19:38Z</created-at>
    <id type="integer">271</id>
    <title>Testing</title>
    <updated-at type="datetime">2010-01-11T21:19:38Z</updated-at>
  </post>
  <post>
    <body>I haven't been blogging here much for awhile.  That'll remain true for at least a bit longer.  I hope to have some real progress next week, and then may go dark again.  No readers, so you'll all vacuously cope.

I'm not saying you're vacuous.  I'm saying you're absent, so the statement is vacuously true.  There's a logic joke in there somewhere.
</body>
    <created-at type="datetime">2010-01-11T21:14:59Z</created-at>
    <id type="integer">270</id>
    <title>Desperately behind and staying that way</title>
    <updated-at type="datetime">2010-01-11T21:14:59Z</updated-at>
  </post>
  <post>
    <body>I pushed some new code for RailsGame, but it's speculative and reorg stuff.  No real new functionality, though this paves the way for some of that.  Mostly, I'm reducing the amount of duplicated stuff each RailsGame project needs to hold that's copied over from a master copy in the RailsGame gem itself.

Static assets in Rails engines would have solved most of this problem for me.  It'll be good if they get around to adding that at some point.

There's a project called &lt;a href="http://github.com/gimite/web-socket-js"&gt;Web-Socket-JS&lt;/a&gt;, which is a WebSockets-compatible Flash-based server.  It's going to take a very short time for FireFox to add WebSockets, and Chrome already has it.  I don't see Safari being far behind.

IE, of course, will lag hideously.  But &lt;a href="http://code.google.com/chrome/chromeframe/"&gt;Chrome Frame&lt;/a&gt; means I don't have to care.  Besides which, having a Flash alternative is yet another reason I don't have to care.

So RailsGame should probably move toward WebSocketsJS rather than Juggernaut, because it's that or roll my own.  Especially since I've had to roll so much of my own security for Juggernaut.</body>
    <created-at type="datetime">2009-12-28T19:26:57Z</created-at>
    <id type="integer">269</id>
    <title>Random</title>
    <updated-at type="datetime">2009-12-28T19:26:57Z</updated-at>
  </post>
  <post>
    <body>I finally figured out how to set up a tracking branch properly with Git to use my Git project pages.

It looks obvious in retrospect:  do the usual git-clone for the repository, then "git checkout --track gh-pages".  This sets up a tracking branch locally for the gh-pages branch on the server, and links the two together properly.  Using a regular "-b" checkout won't quite work -- you get the files, but you can't push them back to the server.
</body>
    <created-at type="datetime">2009-12-27T05:32:21Z</created-at>
    <id type="integer">268</id>
    <title>More Git stuff</title>
    <updated-at type="datetime">2009-12-27T05:32:21Z</updated-at>
  </post>
</posts>
