<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>eurge blog</title>
	<atom:link href="http://eurge.net/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://eurge.net/blog</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Wed, 14 Sep 2011 01:58:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Beta Two</title>
		<link>http://eurge.net/blog/?p=108</link>
		<comments>http://eurge.net/blog/?p=108#comments</comments>
		<pubDate>Tue, 13 Sep 2011 23:04:52 +0000</pubDate>
		<dc:creator>WK</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=108</guid>
		<description><![CDATA[It&#8217;s been about a month since I spent any real time with the Phyre codebase, in large part because I&#8217;ve been using the time to get my new consultancy business off the ground. That&#8217;s done now, and it&#8217;s high time &#8230; <a href="http://eurge.net/blog/?p=108">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been about a month since I spent any real time with the Phyre codebase, in large part because I&#8217;ve been using the time to get my new <a href="http://www.sudowned.com">consultancy business</a> off the ground. That&#8217;s done now, and it&#8217;s high time we got started.</p>
<p>I&#8217;m opening the second Phyre beta <del>tonight at 10:00 Eastern</del> as soon as technical problems are dealt with, with a host of awesome features.  Among the goodies are:</p>
<ul>
<li>Live, editable chat with in-character and Out-Of-Character posting</li>
<li>Private note-taking, publishable to notes the whole table can read</li>
<li>Dice that are really, seriously random</li>
<li>Character sheets from templates</li>
<li>Make your own templates</li>
<li>GM controls</li>
<li><em>and lots, lots more!</em></li>
</ul>
<p>Seriously, that&#8217;s just scratching the surface.  Phyre is crazy good and you need to try it.  There are bugs, but those are going away quickly and will be gone even faster if you report them.  There&#8217;s a bug-report button right there.  It takes like five seconds.</p>
<p>I would be equally interested in hearing what features we don&#8217;t have that you want.</p>
<p>Phyre currently supports the following browsers:</p>
<ul>
<li>Chrome</li>
<li>Firefox</li>
<li>Safari</li>
<li>Internet Explorer 9</li>
</ul>
<p>If you&#8217;re using something else, try it and see.  If you&#8217;re using Internet Explorer 8 or earlier, upgrade.  Other than the browser, you won&#8217;t need any plugins &#8211; though if you&#8217;re running with JavaScript off you&#8217;ll need to enable it.</p>
<p>But enough about that.  You should probably figure out what campaign you&#8217;re going to run.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=108</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugs</title>
		<link>http://eurge.net/blog/?p=103</link>
		<comments>http://eurge.net/blog/?p=103#comments</comments>
		<pubDate>Sun, 10 Jul 2011 00:17:04 +0000</pubDate>
		<dc:creator>WK</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=103</guid>
		<description><![CDATA[New templating engine is coming along nicely.  I&#8217;ve run on about it a little in Twitter, but of course what is on the twitter feed is Subject To Change.  Also did a complete overhaul of the layout code, both for &#8230; <a href="http://eurge.net/blog/?p=103">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>New templating engine is coming along nicely.  I&#8217;ve run on about it a little in Twitter, but of course what is on the twitter feed is Subject To Change.  Also did a complete overhaul of the layout code, both for the site itself and the character sheets.</p>
<p>The layout on this landing page is the only part that&#8217;s unaffected.  This is because the hacks I used to make the text wrap properly around Minerva is really, really fragile and by altering the positioning logic that breaks completely.  I&#8217;ll take another crack at it later, but for now I need to allocate my time more wisely.</p>
<p>It&#8217;s clear to me now that my decision to start the Phyre beta last month was really, really immature.  The sheer number of bugs that I&#8217;ve discovered since then are terrifying to behold, and it&#8217;s clear that only my very specific (and surprisingly, highly regular) usage patterns could get through typical use of the site without game-breaking errors occurring.  I&#8217;m chagrined, and I&#8217;ll do what I can to keep this happening again.  Sorry, I&#8217;ve never tried to release software before!</p>
<p>Once again the tactical map has slipped.  I don&#8217;t want to imply that I don&#8217;t know how important it is, but I can&#8217;t ignore that it, well, just isn&#8217;t that important to <em>me.</em>  My playstyle doesn&#8217;t work well with battlemaps, and it seems ill advised to add a feature that i won&#8217;t be testing as part of my daily routine when I&#8217;m still finding and fixing so many problems elsewhere.</p>
<p>I&#8217;ve created a <a href="http://projects.eurge.net">bugtracker</a>. Please don&#8217;t hesitate to <a href="http://projects.eurge.net/projects/phyre/issues/new">use it</a>.  You don&#8217;t need to sign up or log in, it just works.  The bugtracker is the absolute best way to get stuff fixed or ask for a feature.  If you aren&#8217;t in the Phyre beta right now, well, that&#8217;s probably for the best.  We probably won&#8217;t be actually, seriously beta quality for a couple weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=103</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More, but less</title>
		<link>http://eurge.net/blog/?p=98</link>
		<comments>http://eurge.net/blog/?p=98#comments</comments>
		<pubDate>Fri, 01 Jul 2011 19:21:25 +0000</pubDate>
		<dc:creator>WK</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=98</guid>
		<description><![CDATA[Over the last few days I&#8217;ve been (again) deviating from planned course, this time to strip out all the awful iFrames and replace them with all AJAX, and also to fix some of the CSS issues that the site currently &#8230; <a href="http://eurge.net/blog/?p=98">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Over the last few days I&#8217;ve been (again) deviating from planned course, this time to strip out all the awful iFrames and replace them with all AJAX, and also to fix some of the CSS issues that the site currently faces.  Both problems were causing site navigation to totally break under certain non-rare cases (like opening your browser with a saved tab set to Phyre) and needed to either be individually addressed via javascript positioning tweaks or automatically reloading the page.</p>
<p>Obviously, that&#8217;s not acceptable.  I don&#8217;t really know how I put up with it as long as I did, other than that I just didn&#8217;t know how to fix it.</p>
<p>It&#8217;s kind of bittersweet, though.  I&#8217;ve ripped out about 300 lines of iFrame-specific code, and replaced it with about 40 lines of jQuery AJAX magic.  It&#8217;s nice and it&#8217;s slick and for the most part I&#8217;d abstracted everything enough that changing stuff in the JS library made navigation Just Work again. Still, it&#8217;s a wrench throwing out so much work (old work &#8211; the iFrame navs were put together in 2008.)</p>
<p>The downside here is that now I need to do something so that Phyre behaves rationally in the presence of forward/back controls.  Currently it&#8217;s completely history-opaque, so if you click on the wrong sheet and hit Back you go back to Google, or whatever.  Not cool either.</p>
<p>Silver lining: this actually fixes about half of my existing problems with the iPad version of the site.  iDevice rotation events don&#8217;t seem to propagate to iFrames properly, either through Javascript or via MEDIA-selected stylesheets, which is rubbish.  I guess in the case of iFrames deprecation is in full effect.</p>
<p>As an aside, I&#8217;ve finally had to switch from a PG4WP-wrapped WordPress instance to a standard one.  I&#8217;m pretty sure the old one had been compromised, and it wouldn&#8217;t let me, um, make blog posts.  Which is pretty important for a blog. It sucks because MySQL is running on my much slower development server, and that means loading time on this landing page is compromised.</p>
<p>Ugh.  Part of the reason I&#8217;m so unfocused is because there&#8217;s so much to do right now that Phyre could keep three coders busy for the next month full time.  The other part is because, um, I&#8217;m just unfocused.  But I still really wish I could afford to hire help.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=98</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Non-update post</title>
		<link>http://eurge.net/blog/?p=59</link>
		<comments>http://eurge.net/blog/?p=59#comments</comments>
		<pubDate>Thu, 23 Jun 2011 14:54:42 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=59</guid>
		<description><![CDATA[I&#8217;d like to take a moment here today to talk to you about the business. Oh, sure, there&#8217;s plenty of Phyre stuff to talk about, and maybe some Good Things coming up that are maybe more worthy of our time, &#8230; <a href="http://eurge.net/blog/?p=59">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to take a moment here today to talk to you about the business. Oh, sure, there&#8217;s plenty of Phyre stuff to talk about, and maybe some Good Things coming up that are maybe more worthy of our time, but that stuff is a little too speculative right now. And I think that the post I&#8217;m writing now will be useful enough. Who knows, you might<br />
even enjoy it.</p>
<p>As much as I would like to believe otherwise, Phyre is not an original idea. There have been numerous tools like it, all of which aim to &#8220;solve&#8221; the problem of RPGs online. There are even a few people who think that the whole idea is ludicrous, that if you have a computer at your disposal you can just play video games so who cares.</p>
<p>I obviously don&#8217;t buy that line one bit. RPGs are awesome, and I have without a doubt spent more time roleplaying than I have playing video games. And the bulk of that has been, appropriately enough, online!</p>
<p>In the summer of 1999 I visited my grandparents in California. Though the specifics are lost &#8211; I was about 12 at the time &#8211; I somehow found myself at a small, dimly-lit shop which sold all manner of roleplaying supplies in addition to the standard array of miniatures, fake trees and foam hills, and Magic cards. I was enthralled, and with the $20 in my pocket I oggled the boxed adventure games for nearly ten minutes before asking for the Dungeons &#038; Dragons set.  It was that or the Diablo RPG, you see &#8211; it could have gone either way.</p>
<p>The lady at the counter told me that if I could come back next week, they&#8217;d have the &#8220;three-ee&#8221; sets in. I explained politely that I would have gone home by then and that the second-edition set would be very fine, please and thank you. With the sort of look that city people give strange<br />
children who are too pleasant and don&#8217;t know what they are buying, she acquiesced.  And so began my love affair with a social hobby that is usually enjoyed in basements, by antisocial young men wearing cloaks.</p>
<p>I was excited as anything, so obviously I wasn&#8217;t going to wait until I got home to play.  So when I tried to play with my brother, at my grandmother&#8217;s house, over the large dinner table &#8211; things didn&#8217;t go well. Though excitingly illustrated, the character sheets were filled with arcane calculations that I could scarcely comprehend, let alone calculate, and the rulebooks were paradoxically both pregnant with possibility and illegible in its presentation.  It was a struggle, and I think we got as far as the discovery of Ironstone&#8217;s Dog before dinner was ready and we had to set the table and  what were all these things doing on the table those are the strangest little dice, what, why are there so many pencils and that was that.</p>
<p>After that, it took me about four years to find a group to play with.  When that happened, it was with kids about two hours away by car, and we got to play maybe every third month.  It wasn&#8217;t the best thing ever, but I lived in the middle of nowhere.  What was I going to do about it?</p>
<p>And more than anything, that&#8217;s the biggest problem with the hobby today. Forget about market saturation, forget about segmentation &#8211; if the reason you aren&#8217;t playing is because your group can&#8217;t settle on 3.5 versus 4e, you just don&#8217;t have a GM who&#8217;s interesting enough to remind you that it doesn&#8217;t matter. No, the real problem is making games happen at all.</p>
<p>The first version of the setup that would become Phyre was simple: a page with a pJirc client embedded, and an iframe referencing a forum.  It was almost slick, and my group was suitably  impressed.  You could seriously just open it up and type stuff.  I added some greyed-out text below the chatbox, explaining some basic IRC commands like /nick and /join.  I set up a mIRC dicebot.  Man, I was clever.</p>
<p>And it was a failure.  It turned out that Alex&#8217;s computer didn&#8217;t have Java installed.  We tried to make it work properly, found out that AOL didn&#8217;t actually let that sort of funny business happen, and then Keith&#8217;s machine decided that the iFrame should point to Google and nothing we could say would convince it otherwise.  Damn.</p>
<p>Over the years my solution changed many times.  CGI-IRC? Latency problems, plus it sometimes just eats posts.  mIRC for everyone in the group? Apparently some of us couldn&#8217;t install software due to system policy restrictions.  Oh, and one guy was on a Mac.  Eventually It became apparent that even with client issues aside, IRC was just too complicated for most of my players to enjoy.</p>
<p>And so, eventually, it comes to this.  Though there are loads of solutions to this problem, they all either run on Java, are costly and proprietary, or just don&#8217;t work right.  It is a problem so intractable that I had to learn about arcane nonsense like variable scope and SQL injection to solve it properly.  And now, you won&#8217;t have to.</p>
<p>I used to assume that, since gamers are smart people, they could figure out a complicated solution.  I was wrong, though not about gamers being smart.  They are, you guys are often brilliant people, but &#8211; crucially &#8211; not about making The Internet behave properly.  And now you don&#8217;t have to.</p>
<p>And now the rest of you can do what you&#8217;re best at &#8211; tell thrilling stories, have amazing adventures, and roll the strangest little dice.</p>
<p>You guys are awesome.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=59</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chat dev</title>
		<link>http://eurge.net/blog/?p=33</link>
		<comments>http://eurge.net/blog/?p=33#comments</comments>
		<pubDate>Mon, 09 May 2011 23:09:07 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=33</guid>
		<description><![CDATA[I&#8217;ve been working for the last couple weeks to bring a number of new features to the fore, things like persistent chat sessions, better performance, whispers, and game logging. More and more I realize that the limitation here is what &#8230; <a href="http://eurge.net/blog/?p=33">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working for the last couple weeks to bring a number of new features to the fore, things like persistent chat sessions, better performance, whispers, and game logging.  More and more I realize that the limitation here is what I have always considered to be Phyre&#8217;s main strength: that it&#8217;s IRC-based.</p>
<p>IRC is short for Internet Relay Chat, a protocol that has existed since roughly 1620 and is notable for being the medium through which Richelieu and D&#8217;Artagnan negotiated the signing of the Magna Carta (itself a treaty that was important because it led to the legal creation of America,) which should give you an idea of just how old IRC is.  Many, many online roleplaying groups use IRC, and though claiming that they&#8217;re the majority might be wrong it remains incredibly popular.</p>
<p>This is partly because of the protocol&#8217;s age, which means that an IRC client can be found for basically any computer or phone &#8211; but it also means there are drawbacks, like that it has a long and vibrant history of exploits and hackery. IRC is not and never has been particularly secure, and supporting it makes preventing name spoofing and other villainy kind of difficult.  Switching to a homegrown solution would alleviate all of these issues.</p>
<p>But getting rid of IRC has its own drawback. Many existing groups already use IRC, and for a lot of people trading in a utilitarian chat app for a browser-based web app isn&#8217;t appealing.  I get this &#8211; in fact, one of my group&#8217;s founding members is a diehard IRCer who does all his roleplaying from a textmode console in Linux.  Heck, I still roleplay with xchat now and then, especially on my netbook (which despite being purpose-built for the Internet, doesn&#8217;t do Internet very well.)</p>
<p>So to a large extent I feel like I&#8217;d be crazy for dropping IRC.  And yet, all the features I mentioned in the opening paragraph are going to be infeasible to implement in the near timeframe and with any degree of reliability.  I would need to make a number of change to the IRC server&#8217;s core code, which means &#8211; assuming everything worked and I didn&#8217;t introduce crippling timing issues or crashes &#8211; means that, at best, I would have one more piece of software with proprietary changes that I&#8217;d have to continually merge back as the developers improved the original software.  Not good.</p>
<p>The third option is to do both, to use a homegrown chat system but allow IRC chat on a per-game basis.  This may be what I ultimately go with, although it rather nastily increases the workload ahead.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=33</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Browsers, part deux</title>
		<link>http://eurge.net/blog/?p=29</link>
		<comments>http://eurge.net/blog/?p=29#comments</comments>
		<pubDate>Wed, 13 Apr 2011 00:07:45 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=29</guid>
		<description><![CDATA[After working on the problem for pretty much of the last 18 hours (apologies to my wife and son,) I&#8217;ve got Phyre working in Internet Explorer&#8230; 9. I was hoping to get it working in 8 as well, but it&#8217;s &#8230; <a href="http://eurge.net/blog/?p=29">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After working on the problem for pretty much of the last 18 hours (apologies to my wife and son,) I&#8217;ve got Phyre working in Internet Explorer&#8230; 9.</p>
<p>I was hoping to get it working in 8 as well, but it&#8217;s looking like that will be prohibitively difficult for now.  Basically none of the CSS works, and for some reason IE8 gives typeface.js fits.  Well, that sucks.</p>
<p>But according to our stats package, only 23% of you are using Internet Explorer at all &#8211; and of those, <strong>19%</strong> are already using IE9.  That&#8217;s pretty fantastic, because compared to earlier versions IE9 is almost civilized.  All told, just 5% of this site&#8217;s traffic is with a legacy IE version.  And that really isn&#8217;t worth developing against when there are so many legitimate bugs and missing features!</p>
<p>So going forward, you should assume that IE8 support isn&#8217;t coming.  Maybe in the future when things have settled down, I&#8217;ll throw together a minimalistic template for the cavemen.  Sorry, <em>cavepeople.</em> Don&#8217;t want to be insensitive.</p>
<p>Just don&#8217;t count on it.</p>
<p>In any case, here&#8217;s a new and updated compatibility chart:</p>
<p><strong>Works well:</strong></p>
<ul>
<li>Firefox 3</li>
<li>Chrome</li>
<li>Internet Explorer 9</li>
</ul>
<p><strong>Works with visual issues:</strong></p>
<ul>
<li>Opera 11</li>
<li>Safari iPhone</li>
<li>Probably Safari Desktop</li>
</ul>
<p><strong>Does not work:</strong></p>
<ul>
<li>Epiphany (Javascript entirely broken)</li>
<li>Internet Explorer 8 &amp; below</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=29</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Browsers</title>
		<link>http://eurge.net/blog/?p=27</link>
		<comments>http://eurge.net/blog/?p=27#comments</comments>
		<pubDate>Tue, 12 Apr 2011 02:06:02 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=27</guid>
		<description><![CDATA[Howdy, guys- We&#8217;re working to address some compatibility issues right now, specifically with Internet Explorer.  I should state up front that making IE behave will never be a priority, but that said I&#8217;d like it if it at least mostly &#8230; <a href="http://eurge.net/blog/?p=27">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>
<p>Howdy, guys-</p>
<p>We&#8217;re working to address some compatibility issues right now, specifically with Internet Explorer.  I should state up front that making IE behave will never be a priority, but that said I&#8217;d like it if it at least mostly worked.  I&#8217;m going to tentatively project that it should be running in IE9 by tomorrow, and maybe IE8 as well.</p>
<p>Here&#8217;s a list of compatibilities:</p>
<p>Works well:</p>
<ul>
<li>Firefox 3</li>
<li>Chrome</li>
</ul>
<p>Works with visual issues:</p>
<ul>
<li>Opera 11</li>
<li>Safari iPhone</li>
<li>Probably Safari Desktop</li>
</ul>
<p>Does not work:</p>
<ul>
<li>Internet Explorer 9 (Chat is broken, other elements mostly work)</li>
<li>Internet Explorer 8 (Totally broken)</li>
<li>Epiphany (Javascript entirely broken)</li>
</ul>
<p>Never to be supported:</p>
<ul>
<li>Internet Explorer 7 &amp; below</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=27</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drumroll, Please</title>
		<link>http://eurge.net/blog/?p=11</link>
		<comments>http://eurge.net/blog/?p=11#comments</comments>
		<pubDate>Tue, 05 Apr 2011 22:50:08 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/blog/?p=11</guid>
		<description><![CDATA[The time is finally very nearly upon us: Luminar is ready for beta. Except that isn&#8217;t quite true &#8211; as was mentioned earlier, it&#8217;s not actually called that anymore.  It&#8217;s Phyre, because, as you might imagine, it&#8217;s rather hard to &#8230; <a href="http://eurge.net/blog/?p=11">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The time is finally very nearly upon us: Luminar is ready for beta.</p>
<p>Except that isn&#8217;t quite true &#8211; as was mentioned earlier, it&#8217;s not actually called that anymore.  It&#8217;s <a href="http://www.phyre.im"><strong>Phyre</strong></a>, because, as you might imagine, it&#8217;s rather hard to name something well when all the words that describe it revolve around dice, erasers, and pretending you&#8217;re an elf.</p>
<p>Anyway, as of right now Phyre is a usable system.  The only piece that&#8217;s missing wholesale is the battlegrid, which needs a bit of attention before it joins the gestalt.  I&#8217;m hoping that won&#8217;t matter; I intend to have the grid back within the month.  We&#8217;ll see what happens.</p>
<p>Right now I am looking for a few groups to begin beta-testing, ideally groups that plan to meet and play at least once a week. If that&#8217;s you, or it sounds like it could be, drop me an email at wk@eurge.net.</p>
<p>If you&#8217;re an individual, that&#8217;s okay too.  You should also send me an email, and I will see if I can&#8217;t find you some folks to play with.</p>
<p>I&#8217;m excited.  I hope I&#8217;m not getting ahead of myself!</p>
<p>-WK</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=11</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aaagh?!&gt;2 (or, how to wise up and move to a relational database)</title>
		<link>http://eurge.net/blog/?p=80</link>
		<comments>http://eurge.net/blog/?p=80#comments</comments>
		<pubDate>Sat, 19 Mar 2011 11:47:20 +0000</pubDate>
		<dc:creator>WK</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/columns/?p=80</guid>
		<description><![CDATA[Pardon the faceroll-style subject line, I swear I&#8217;m not trying to be kooky.  Over the last week-odd I&#8217;ve been moving the project to SQL.  From the flatfile system I had been using. &#8230;Yeah, I know.  I&#8217;m sorry.  It seemed like &#8230; <a href="http://eurge.net/blog/?p=80">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pardon the faceroll-style subject line, I swear I&#8217;m not trying to be kooky.  Over the last week-odd I&#8217;ve been moving the project to SQL.  From the flatfile system I had been using.</p>
<p>&#8230;Yeah, I know.  I&#8217;m sorry.  It seemed like a good idea at the time!  As far as I could tell from sort-of exhaustive googling, flatfile wasn&#8217;t all that slow.  As of now, I&#8217;m not really sure about the speed &#8211; it sure SEEMS faster now that everything&#8217;s humming away inside postgres, but given the time expended in making that happen I&#8217;m pretty much required to feel that way.  Overall I suspect it&#8217;s a wash, but that will probably improve once</p>
<p>a) usage increases past current 1+1 concurrent users, where the first 1 represents me and the second 1 represents a second browser open logged into another account to test concurrency<br />
b) I get around to implementing searches more advanced than games-by-name and &#8220;ID&#8221; .</p>
<p>When I started organizing the data into MySQL &#8211; yeah, I started with MySQL and switched to Postgres halfway through &#8211; I realized just how powerful a database was.  I&#8217;ve worked with them before, usually hacking new features into existing software like PHPBB or CMSMS, but the flexibility it&#8217;s given me here is astonishing.  It&#8217;s hard to explain it if you aren&#8217;t used to arguing with a computer through a parser, but being able to update a given snippet of data without needing to read the entire record, edit the relevant bit, and write it all back is a boon.  Imagine needing to print out a copy of your calendar, update it with pen and white-out and then scan the whole thing back in each time you wanted to add or remove a date. Now imagine not needing to do that anymore.  (It must be weird imagining you&#8217;re such an eccentric dude.)</p>
<p><span id="more-80"></span></p>
<p>Now, I had the data laid out more or less responsibly before, flatfile or no.  Each user had a directory with a definitions file containing their password hash, permissions, email, and so on.  That directory had a directory for character sheets and sheet templates.  Adding a character to a game involved creating a symlink between the character sheet and the game&#8217;s directory, and joining a game meant linking the game&#8217;s directory into the user&#8217;s games/ directory.  It was all reasonably not-terrible (I tell myself) for a flatfile solution, and for any given lookup the system would be no further than six or so lines from the relevant data from the initial read.</p>
<p>The problem was that looking data up by anything <em>other</em> than name was an unbelievable chore.  Want to get all the users of a given level? Open every single user, parse their data and make a table of their levels, then return the array.  Want to search game descriptions? Do what you did a second ago but open bigger files and then loop through string comparisons for however long feels appropriate.</p>
<p>In order to make listing games by name less than a complete chore, I&#8217;d (in addition to the actual storage system where games are all in a directory listed by &#8220;ID&#8221; number) had a second lookup directory where game directories were symlinked to their names.  Some games are public and some are invitation-only, so in order to make that distinction visible on the listing and search pages I had to add a symbol to the end of games which required an invite.  To facilitate browsing games by tag, I had another directory with subdirectories representing each possible tag, and linked game-names into those as well.  This means (if you&#8217;re counting) that a game actually had a minimum of two filesystem objects, plus one per tag the game possessed.</p>
<p>It was somewhere in the middle of writing a complex locking system to prevent a game&#8217;s metadata from being corrupted when reads and writes occurred at inopportune times that I muttered something like &#8220;Fine, FINE, I&#8217;m doing it already, Mom&#8221; and opened a new database on the server.</p>
<p>By the way, as much as I liked to pretend in certain earlier posts I&#8217;m the only person involved in developing Luminar (name change soon.)  I&#8217;m only sort of even a professional, but boy howdy do I ever procrastinate like one.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=80</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security is tricky</title>
		<link>http://eurge.net/blog/?p=75</link>
		<comments>http://eurge.net/blog/?p=75#comments</comments>
		<pubDate>Wed, 23 Feb 2011 18:28:48 +0000</pubDate>
		<dc:creator>d</dc:creator>
				<category><![CDATA[Phyre]]></category>

		<guid isPermaLink="false">http://eurge.net/columns/?p=75</guid>
		<description><![CDATA[As I crawl closer to having a usable build of the software, I grow more and more nervous.  You see, I&#8217;ve got a list &#8211; made by me, because this is a one-man project no matter what a number of &#8230; <a href="http://eurge.net/blog/?p=75">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As I crawl closer to having a usable build of the software, I grow more and more nervous.  You see, I&#8217;ve got a list &#8211; made by me, because this is a one-man project no matter what a number of earlier, more pretentious posts might imply &#8211; a list of things that need to be finished before Version One Point Oh.  There are a lot of things missing, a lot of <em>really critical</em> things, but ultimately what makes me most nervous is this one: &#8220;Security Audit.&#8221;</p>
<p>Security is tricky.  The user&#8217;s actions, though initiated by the user and submitted by the client software on the user&#8217;s computer, are actually carried out on the server.  The server has control over everyone&#8217;s data, which is where privilege comes into play.  If I try to delete a sheet, should it let me?  The server should check to make sure that my account either owns or has write access to the sheet, that the sheet isn&#8217;t shared exclusively with anyone else, and that my account actually issued the delete order.  The problem is, the server needs to be specifically told to do this.</p>
<p>The situation gets more problematic when you&#8217;re developing, because the underlying security model (&#8220;Who can change what data, and under what circumstances?&#8221;) can change a lot, or God forbid isn&#8217;t really that well defined to start with.  Since I&#8217;m a tool, this latter case is what is going on here.</p>
<p>Ironically, this is (yet) another reason why Luminar and TikiWiki didn&#8217;t work out together.  TikiWiki&#8217;s security is a big selling point, but it isn&#8217;t really something I&#8217;d ever want to buy into.  I don&#8217;t want to gripe too much about Tiki, because it&#8217;s software that continues to serve my private campaign setting well &#8211; but still, the security model is bizarre, contradictory, and redundant.  Security settings exist in multiple places that do almost the same thing and which interact with each other in unpredictable ways.  Some settings require modules to be loaded that aren&#8217;t by default, and the software doesn&#8217;t tell you about the dependency &#8211; it just transparently fails.  Unraveling it all as an outsider is a nightmare.</p>
<p>Worst of all the security rules, which are supposed to be flexible so that they can serve many purposes, aren&#8217;t even particularly well-suited to <em>one </em>purpose.  It&#8217;s hard to protect a wiki page so that it can&#8217;t be edited by the wrong people and can be edited by anyone who isn&#8217;t an admin, and coaxing it into doing the kind of duty I needed for roleplaying games is probably impossible.  The contrast, though, comes in the form of the current build of Luminar (26, for the record) which operates mostly on the &#8220;please don&#8217;t edit the GET-parameters to do stuff the UI doesn&#8217;t allow&#8221; model, which is to say it uses the honor system.</p>
<p>The issue isn&#8217;t that security itself is particularly tricky, it&#8217;s that I was pretty naive when going into development.  Security at an actual pen-and-paper game is pretty basic.  You don&#8217;t pick up and read your friends&#8217; sheets without asking, and if you look behind the DM screen your character loses a level and swaps genders.  And so I thought that I&#8217;d be able to plan security intuitively, and have it work more or less the same.</p>
<p>Nope, wrong.  There are roughly a hojillion ways it can go wrong that I didn&#8217;t take into account.  How should sharing a sheet work?  Does the recipient get a copy, or do they see a &#8220;live&#8221; version of your own sheet? Can they erase it? Delete it? Should the original owner be prompted to accept outside changes?  What about the GM of your game?  Surely he should be able to edit at will, but then maybe that&#8217;s only a given in my games.  What about campaign notes? Visibility of party members on the battlegrid?  Holy balls, this is getting complicated.</p>
<p>There are a lot of ways of going about this that I know are wrong, that are obviously mistakes. There probably also isn&#8217;t any one <em>right</em> way to do this.</p>
<p>All this sums up with me having a version of the software that is less feature-complete than the old and abandoned Tiki branch, but which does the things which ARE implemented much better.</p>
<p>If in the least secure manner possible.</p>
<p>And there it is, at the bottom of a very long, very daunting list.  Security audit.</p>
<p>It&#8217;s going to be a while.</p>
]]></content:encoded>
			<wfw:commentRss>http://eurge.net/blog/?feed=rss2&#038;p=75</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

