<?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>Grantovich.net</title>
	<atom:link href="http://grantovich.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://grantovich.net</link>
	<description>Updated with astounding infrequency</description>
	<lastBuildDate>Tue, 29 Jun 2010 01:38:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Helpdeskin&#8217; It</title>
		<link>http://grantovich.net/posts/2010/04/helpdeskin-it/</link>
		<comments>http://grantovich.net/posts/2010/04/helpdeskin-it/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 03:19:51 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[helpdesk]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=552</guid>
		<description><![CDATA[Fledgling IT geeks, when they become of working age, are practically required by law to take a helpdesk job. The usual implications are that the pay will suck, the work will be unfulfilling, and the users will be stupid, but at least it builds character and acts as an important first step into the computing industry. Back when [...]]]></description>
			<content:encoded><![CDATA[<p>Fledgling IT geeks, when they become of working age, are practically required by law to take a helpdesk job. The usual implications are that the pay will suck, the work will be unfulfilling, and the users will be stupid, but at least it <a href="http://www.urbandictionary.com/define.php?term=builds%20character">builds character</a> and acts as an important first step into the computing industry.</p>
<p>Back when I was in high school, I dodged this stipulation by virtue of being incredibly lazy: A web development position almost literally fell into my lap, and I took it. Then I used the experience from that job to get another web dev position, and then I used the experience from <em>that</em> job to get <em>another</em> web dev position. By following the path of least resistance, I had accidentally become a full-fledged web developer.</p>
<p>Not wanting to pigeonhole myself, at the start of this year I began looking for a position that would give me a greater breadth of experience. A position that would challenge me to solve new and different problems every day, instead of grinding on a single project for three months straight. A position&#8230; on the IT Helpdesk?</p>
<p><img class="alignnone size-full wp-image-555"  src="http://grantovich.net/wp-uploads/p-spec-nametag.jpg" alt="" width="640" height="480" /></p>
<p>Yes, believe it or not, I&#8217;m currently on a six-month co-op at the IT helpdesk of a local company. I wasn&#8217;t quite sure what to expect going in, but after being there for six weeks (it feels like it&#8217;s been three), I&#8217;m liking it better than any of my previous jobs. I get to interact with people more often, I have a pleasantly balanced and ever-changing mix of projects and issues to work on each week, and I&#8217;m learning loads of Windows sysadmin stuff that will definitely come in handy if I decide to take a similar position after I graduate next year.</p>
<p>Of course, I probably shouldn&#8217;t be abandoning webs as a career option quite so readily&#8230; but I feel like what I&#8217;m doing now is really what I meant to do all along, and I just got severely sidetracked for the past couple of years. Web development alone does not an &#8220;IT generalist&#8221; make.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2010/04/helpdeskin-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BarCamp</title>
		<link>http://grantovich.net/posts/2010/04/barcamp/</link>
		<comments>http://grantovich.net/posts/2010/04/barcamp/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 01:56:35 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[CSH]]></category>
		<category><![CDATA[RIT]]></category>
		<category><![CDATA[rochester]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=562</guid>
		<description><![CDATA[Earlier today I found myself attending BarCamp Rochester #5, my first-ever BarCamp. It was a last-minute decision, and for the entire morning I was working away on a Powerpoint about database normalization. I scrapped it around lunchtime, because seriously, have you ever tried to teach database normalization inside of an hour? There&#8217;s a reason the RIT curriculum [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier today I found myself attending <a href="http://barcamproc.org/">BarCamp Rochester #5</a>, my first-ever BarCamp. It was a last-minute decision, and for the entire morning I was working away on a Powerpoint about database normalization. I scrapped it around lunchtime, because seriously, have you ever tried to teach database normalization inside of an hour? There&#8217;s a reason the RIT curriculum splits it up into digestible chunks over a period of several weeks. Plus, it felt really boring and lame next to what everyone else was presenting.</p>
<p>Trying to think of things I could talk about with zero preparation (it&#8217;s a short list), I ended up giving an extremely ad-hoc presentation on coding in Cartridge BASIC for the PCjr. It was mostly me going through the client-side code for <a href="http://grantovich.net/projects/twittjr/">Twittjr</a> and explaining how to do useful stuff when you don&#8217;t have function parameters, return values, code blocks, or variable scope. It produced more than a few glazed looks from the audience, but I got some positive feedback afterwards, so that was nice. The whole event made me wish I worked on more cool projects; or rather, that I had the motivation to work on more cool projects.</p>
<p>Lots of CSHers in attendance as usual, including a few venerable alumni (<a href="http://ejohn.org/">John Resig</a>, Bill Kuker) and our favorite not-quite-alumni quasi-advisor, <a href="http://twitter.com/apotter">Andy Potter</a>, talking about IT outsourcing and antiquated networking tech. We also had IGM professor <a href="http://www.ist.rit.edu/~jab/">Al Biles</a> with the history of audio recording and some GenJam tidbits, and some cool people from <a href="http://www.interlockroc.org/">Interlock Rochester</a>, one of whom I already knew from elsewhere (hi <a href="http://alan.dipert.org/">Alan</a>!). Overall it was a great time; lots of new faces and plenty of familiar ones too. I know I&#8217;ll be going next year!</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2010/04/barcamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>_why?</title>
		<link>http://grantovich.net/posts/2009/09/_why/</link>
		<comments>http://grantovich.net/posts/2009/09/_why/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 19:08:17 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chunky bacon]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[unsolved mysteries]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=502</guid>
		<description><![CDATA[Since my introduction to Ruby by way of talking foxes and chunky bacon, I&#8217;ve been fascinated with the works of the enigmatic &#8220;why the lucky stiff&#8221;, also known as _why. He became famous throughout the Ruby community for his eccentric demeanor and numerous quirky projects, all of which excellently demonstrated the power and beauty of the language in a [...]]]></description>
			<content:encoded><![CDATA[<p>Since my introduction to Ruby by way of talking foxes and chunky bacon, I&#8217;ve been fascinated with the works of the enigmatic <a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">&#8220;why the lucky stiff&#8221;</a>, also known as _why. He became famous throughout the Ruby community for his eccentric demeanor and numerous quirky projects, all of which excellently demonstrated the power and beauty of the language in a way few others could duplicate. And despite the fact that he has appeared and spoken in public, very little is known about his true identity.</p>
<p>I recently thought of using Shoes, _why&#8217;s minimalistic GUI toolkit, for a project, and found that the domain wouldn&#8217;t resolve. At the time, I thought it was nothing more than a glitch in the Matrix. Had I searched around, I would have discovered much earlier the surprising truth: On August 19th, &#8220;why the lucky stiff&#8221; <a href="http://www.h-online.com/open/why-the-lucky-stiff-Vanishes--/news/114042">winked out of existence</a>, taking everything he&#8217;d ever created with him. All of his web sites, his projects, his github account&#8230; gone, with no explanation.</p>
<p>Given that the man himself is unavailable for comment, theories abound as to why (or rather, _why) he departed so suddenly, and with so many of his projects left half-finished. Personally, I think it&#8217;s possible that _why planned to do this right from the start, as an exercise in &#8220;lifting up&#8221; the Ruby community and bringing it closer together; <a href="http://whymirror.github.com/">observe how quickly</a> his many projects have been picked up by others, who have started developing them at a remarkable pace. _why&#8217;s departure created a tremendous vacuum of talent, one that dozens of Ruby hackers are now eager to fill. Was this the intended effect? It certainly seems to be a Good Thing&#8230; though I don&#8217;t think the sheer <em>personality</em> that _why gave Ruby will ever be duplicated.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/09/_why/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Object&#8221;-Oriented Programming in the Land of ZZT</title>
		<link>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/</link>
		<comments>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 23:08:26 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[nostalgia]]></category>
		<category><![CDATA[zzt]]></category>
		<category><![CDATA[zzt-oop]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=378</guid>
		<description><![CDATA[I sometimes say that QuickBASIC was the first programming language I ever learned. This is a half-truth; a shortcut that allows me to avoid a lengthy explanation of what ZZT-OOP is, and how it was really the first programming language I ever learned. But since this is my blog and not a casual conversation, we have a bit [...]]]></description>
			<content:encoded><![CDATA[<p>I sometimes say that QuickBASIC was the first programming language I ever learned. This is a half-truth; a shortcut that allows me to avoid a lengthy explanation of what <strong>ZZT-OOP</strong> is, and how <em>it</em> was really the first programming language I ever learned. But since this is my blog and not a casual conversation, we have a bit more room for exposition. Read on, if you&#8217;re curious about languages and game development: ZZT is quite an interesting piece of history.</p>
<p>The year was 1996ish; the family computer, a Windows 3.1 pizza box with a 486 processor and <a href="http://en.wikipedia.org/wiki/CompuServe">CompuServe</a> dial-up internet. In those days I would frequently monopolize it, sinking hours into whatever <a href="http://en.wikipedia.org/wiki/Apogee_Software">Apogee</a> and <a href="http://en.wikipedia.org/wiki/Epic_Games">Epic</a> shareware games I could get my hands on. But since I couldn&#8217;t tie up the phone line with game downloads for too long, my dad would occasionally find something for me with his fast connection at the office, and bring it home on a good old 3.5&#8243; floppy.</p>
<p>On one such occasion, I found myself the recipient of a well-worn disk with the cryptic string &#8220;ZZT 3.2&#8243; scrawled on the label. Into the drive it went, and after a brief configuration prompt&#8230;</p>
<p><img class="alignnone size-full wp-image-390"  src="http://grantovich.net/wp-uploads/p-zzt-town.png" alt="p-zzt-town" width="640" height="400" /></p>
<p>As you can probably tell from the above screenshot, <a href="http://en.wikipedia.org/wiki/ZZT">ZZT</a> is an <a href="http://en.wikipedia.org/wiki/ANSI_art">ANSI-graphics</a> top-down action-adventure-puzzle game. It was created in 1991 by <a href="http://en.wikipedia.org/wiki/Tim_Sweeney_(game_developer)">Tim Sweeney</a>, founder of Epic Games (then called Epic MegaGames), who went on to develop several notable shareware classics of the DOS era and became a key developer of the Unreal engine.</p>
<p>The registered version of ZZT came with four &#8220;worlds&#8221;, each a self-contained game that could be completed in a few hours. While these worlds remain iconic even today, and did much to establish the basic formula for &#8220;classic&#8221; ZZT gameplay, they are not the reason ZZT is so interesting.</p>
<p>Notice the <strong>Board Editor</strong> option in the screen above? If you haven&#8217;t guessed already, ZZT is in fact a complete game creation system. Using a wide variety of items, obstacles, and enemies, you can construct your own game worlds (stored in a &#8220;.zzt&#8221; file) and share them with others. You&#8217;re not limited to the built-in entities, either: ZZT has special generic entities called Objects that can take on any appearance, whose behavior is determined by a program written in <strong><a href="http://en.wikipedia.org/wiki/ZZT-oop">ZZT-OOP</a></strong>, the &#8220;Object&#8221;-Oriented Programming language.</p>
<p><img class="alignnone size-full wp-image-389"  src="http://grantovich.net/wp-uploads/p-zzt-editor.png" alt="p-zzt-editor" width="640" height="400" /></p>
<p>ZZT-OOP is a weird, restrictive little language. Among its oddities:</p>
<ul>
<li>You can&#8217;t create new objects at runtime; all the objects you want to use must already exist before the game starts (with one extremely limited exception)</li>
<li>There are no methods, functions, or anything else that would imply a call stack</li>
<li>The only flow control mechanism is &#8220;messages&#8221;, which are the equivalent of <a href="http://en.wikipedia.org/wiki/Goto">GOTO</a> statements&#8230; except that code in one object can send a message to another object, causing <em>that</em> object to unconditionally jump to a different point in its program</li>
<li>There are no statement blocks; the &#8220;if&#8221; command (which is the only method of conditional flow control) jumps to a specified program location if the condition is true, and falls through to the next statement if it&#8217;s false</li>
<li>The only variable type is boolean, and you can&#8217;t have more than ten of them set to true at the same time</li>
<li>All objects on a &#8220;board&#8221; (game screen) execute their code simultaneously, but objects on other boards cannot be accessed, since a board&#8217;s state is frozen when the player leaves it</li>
</ul>
<p>With this being the first programming language I learned, and QuickBASIC being the second, it&#8217;s a miracle I ever managed to wrap my brain around modern languages at all. But the truth is, ZZT showed me how much <em>fun</em> programming could be, by setting it in the context of a game. Type in some cryptic codes, press a key, and there&#8217;s a little smiley face running around trying to shoot you. Even the tiniest amount of effort yields instant results. This appealed to my ten-year-old attention span, and though I never finished any worlds of my own, ZZT permanently lodged a favorable impression of programming in the back of my brain.</p>
<p>Needless to say, I wasn&#8217;t the only ZZT fan out there. Since the game&#8217;s 1991 release, aspiring game creators have cooked up thousands of ZZT worlds, each one pushing the limits of the engine further than before. Glitches were discovered that, if properly exploited, allowed one to do previously impossible things, like making an object move diagonally or teleporting the player to an arbitrary location. The world file format was reverse-engineered and new editors were created, far surpassing the game&#8217;s built-in editor. Ingenious coders transformed ZZT from a top-down action-adventure game into a sidescroller, an RPG, a stealth game, and many other genres.</p>
<p><img class="alignnone size-full wp-image-429"  src="http://grantovich.net/wp-uploads/p-zzt-mercenary.png" alt="p-zzt-mercenary" width="640" height="400" /></p>
<p>As complex as some of the community&#8217;s later works were, I&#8217;d say the reason ZZT was so successful and long-lived was its simplicity. The simplicity of the text-mode graphics and <a href="http://en.wikipedia.org/wiki/PC_speaker">PC speaker</a> sound effects precluded the possibility of a lengthy media creation process. The extreme simplicity of the scripting language, and the existence of a pre-built engine with a lot of basic functionality included, meant that it was easy to ignore the gritty details of making a game and focus on the actual gameplay. All of these things might seem like severe limitations (they are), but they also dramatically lower the barrier to entry for new world builders.</p>
<p>Relatively few games today are based on user-generated content to the extent that ZZT was, and even fewer have built-in scripting languages. In a 2007 <a href="http://www.digitalmzx.net/forums/index.php?showtopic=12521">interview</a>, Tim Sweeney himself had these words to offer:</p>
<blockquote cite="http://www.digitalmzx.net/forums/index.php?showtopic=12521"><p><strong>Tim Sweeney said:</strong></p>
<p>I&#8217;ve always wanted to build a massive-multiplayer version of ZZT. In other words, a vast interlinked game world built and extended by users using simple ZZT-like tools. Like ZZT, it would be open-ended and community-driven. Players would be able to build their own levels and write scripts for objects, as well as play the game as a character, build up attributes and collect items.</p>
<p>Such a project would tackle all the key technical problems of MMO development without the complexity of a 3D environment. The data required for levels and motion data is also so simple that servers could be run by the community without significant bandwidth expense.</p>
<p>Alas, such a game wouldn&#8217;t be much of a Gears of War killer. <img src='http://grantovich.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  So don&#8217;t expect it to actually happen. But it would be interesting!</p></blockquote>
<p>Indeed it would, Tim. Indeed it would.</p>
<p> </p>
<p><strong>Some links for you:</strong><br />
<a href="http://zzt.belsambar.net/">Z2</a> is the largest archive of worlds and other ZZT-related downloads on the internet, though much of its textual content is outdated. Be sure to check the <a href="http://zzt.belsambar.net/?p=fg">Featured Games</a> list, which includes a lot of famous and influential games in ZZT&#8217;s history. <a href="http://dosbox.com/">DOSBox</a> comes in handy for running ZZT on modern machines (&gt;=10,000 cycles recommended). You might also want to check out ZZT&#8217;s vastly-more-powerful-but-also-more-complex spiritual successor, <a href="http://en.wikipedia.org/wiki/MegaZeux">MegaZeux</a>, which is still developed today.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/08/object-oriented-programming-in-the-land-of-zzt/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>That Weird IE8 Textarea Bug</title>
		<link>http://grantovich.net/posts/2009/06/that-weird-ie8-textarea-bug/</link>
		<comments>http://grantovich.net/posts/2009/06/that-weird-ie8-textarea-bug/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:34:48 +0000</pubDate>
		<dc:creator>Grantovich</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[webs]]></category>

		<guid isPermaLink="false">http://grantovich.net/?p=336</guid>
		<description><![CDATA[While the latest version of Microsoft&#8217;s much-maligned browser did fix a menagerie of rendering bugs in the process of introducing full CSS 2.1 support, it unfortunately introduced one glitch that will probably have you scratching your head the first time you see it. The bug is this: If you have a textarea with a width [...]]]></description>
			<content:encoded><![CDATA[<p>While the latest version of Microsoft&#8217;s much-maligned <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx">browser</a> did fix a menagerie of rendering bugs in the process of introducing full <a href="http://www.w3.org/TR/CSS2/">CSS 2.1</a> support, it unfortunately <em>introduced</em> one glitch that will probably have you scratching your head the first time you see it.</p>
<p>The bug is this: If you have a textarea with a width specified as a percentage (most commonly 100%), and there&#8217;s enough text in the textarea to cause it to scroll, the textarea will <em>scroll up</em> by a few lines for each character you type, only stopping when the line you&#8217;re editing reaches the bottom of the box (or the scrollbar reaches the uppermost position). Sometimes, when deleting text, it even scrolls up further than that, leaving your cursor somewhere outside the visible part of the textarea. Sounds fun, right?</p>
<p>Since the bug didn&#8217;t exist before IE8, it <em>can</em> be repaired by activating <a href="http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx">Compatibility View</a>, which sends the page through the old IE7 engine instead. If you&#8217;re already doing the extra bit of work to accomodate IE7 users, this might not be a half-bad solution. But if you want to avoid regressing to an earlier version of IE and dealing with all the CSS hacks that implies, I recently found an alternate solution courtesy of <a href="http://dev.simplemachines.org/mantis/view.php?id=3354">the Simple Machines forum developers</a>.</p>
<p>The bug is triggered when the CSS &#8220;width&#8221; property (and only that property) is set to a percentage. So how do you set width without setting &#8220;width&#8221;? By setting min-width and max-width to the same value! It looks a bit odd, but it&#8217;s perfectly standards-compliant and should be interpreted correctly by all major browsers. Do it like this:</p>
<pre>textarea {
  width: 700px;
  min-width: 100%;
  max-width: 100%;
}</pre>
<p>Note that the explicit non-percentage &#8220;width&#8221; value <em>is</em> required to avoid triggering the bug; it gets overridden by the other two properties anyway.</p>
<p>If you need to support IE6 (which I strongly recommend <em>not</em> doing unless human lives are on the line), you must keep in mind that it doesn&#8217;t understand min- and max-width, and will set the textarea to the fixed width you specify. If you&#8217;re not okay with that, you&#8217;ll want to feed a &#8220;width: 100%&#8221; declaration to IE6, probably using an alternate stylesheet linked via conditional comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://grantovich.net/posts/2009/06/that-weird-ie8-textarea-bug/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
