<?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>A Random String of Bits</title>
	<atom:link href="http://stringofbits.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://stringofbits.net</link>
	<description>Sequences of bytes about Technology, Games, Programming, and more</description>
	<lastBuildDate>Thu, 25 Feb 2010 14:36:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Heavy Rain</title>
		<link>http://stringofbits.net/2010/02/heavy-rain/</link>
		<comments>http://stringofbits.net/2010/02/heavy-rain/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 20:51:02 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[Heavy Rain]]></category>
		<category><![CDATA[philosophy]]></category>
		<category><![CDATA[PS3]]></category>
		<category><![CDATA[Sony]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=216</guid>
		<description><![CDATA[So, Sony released a little game for the PS3 yesterday called Heavy Rain.  Having already played the demo, I ran out and nabbed a copy.  I got home, popped it in.  I thought I would play for a little while, just to see the intro, you know?

A very short while later, I [...]]]></description>
			<content:encoded><![CDATA[<p>So, Sony released a little game for the PS3 yesterday called <a href="http://en.wikipedia.org/wiki/Heavy_Rain">Heavy Rain</a>.  Having already played the demo, I ran out and nabbed a copy.  I got home, popped it in.  I thought I would play for a little while, just to see the intro, you know?<br />
<span id="more-216"></span><br />
A very short while later, I heard this:  &#8220;Hey, you know it&#8217;s almost 1 in the morning, right?&#8221;</p>
<p>It seemed strange that a character in the game sounded so much like my wife.  Also, my character had just looked at her watch, and it was way after 1.  And there wasn&#8217;t anyone else in the room.</p>
<p>&#8220;Did you hear me?&#8221;</p>
<p>The surround sound on this game is great, too.  It sounds like that voice is coming from <strong>right behind me</strong>.  I turn my character around, but don&#8217;t see anything.  Kinda creepy.</p>
<p>Then it dawns on me, and I press Start, and turn around.</p>
<p>This is the effect Heavy Rain has on me.  The story in this game is <strong>that</strong> gripping, compelling.  It propels you forward naturally, the pacing keeping you engaged without overwhelming.  This game has the highest production quality of any game I can recall playing.  I&#8217;ve seen the phrase <em>interactive movie</em> thrown around here and there over the years, but Heavy Rain turns that on its head; it is not a movie; it is doing things with storytelling that a movie can&#8217;t do, for a number of reasons.  It&#8217;s not a <em>visual novel</em> either, because it is far more than a series of cinematic sequences with decision points.  Rather, we have something entirely new here, and it is an ambitious and compelling idea.</p>
<p>I have been known to opine that a great piece of art is one that plays to the strengths of its medium.  A great novel uses the written word to convey something that can only be conveyed with writing.  Certain combinations of words have great effect on the reader, in a way that the same scene in a movie might miss entirely.  Literature has the advantage of narration; a voice that can drive the story in ways that are unique to the form, and great stories capitalize on this.</p>
<p>A great movie, on the other hand, uses the fact that it is a visual medium to convey powerful emotional content that would feel flat in writing.  Lighting, facial expression, and tone of voice can be evocative in a movie like they never could in writing. Plays have their own framework, and they are at their best when they exploit this fact.  Ditto music, painting, and other artistic forms.</p>
<p>Heavy Rain is the first game that I have encountered that takes this approach with a video game.  It is treating the game as a work of art, and not simply an entertaining way to kill time.  Sure, other games have stories and beautifully rendered scenery.  They have characters that portray emotion, sometimes.  But Heavy Rain uses the canvas of video games to tell a story in a unique way; you couldn&#8217;t copy this story to movie or novel form without losing, or at least changing, something important.</p>
<p>Traditional games, even ones with great stories, are hampered by a number of problems.  One is the tendency for this pattern to emerge:</p>
<p>1. Plot (cutscene, dialogue tree, etc)<br />
2. Gameplay (random battles, shooting bad guys)<br />
3. Goto 1.</p>
<p>In Heavy Rain, the plot and gameplay are intertwined inextricably, and the gameplay doesn&#8217;t devolve into the usual video game tropes of, well, killing Bad Guys.  It&#8217;s more nuanced than that, and you observe a story unfolding in which your actions have real consequences, both minor and major, and in both the short and long term.</p>
<p>It&#8217;s been obvious to me for a long time that video games could potentially be art, evoke a broad range of real human emotion in the player, and deal with deep themes without resorting to ham-fisted tropes or dulling the emotional experience with tons of unrelated gameplay between evocative scenes.  Heavy Rain is the first time I&#8217;ve seen this potential realized.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=216" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2010/02/heavy-rain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bulding bridges in the metaverse</title>
		<link>http://stringofbits.net/2010/01/bulding-bridges-in-the-metaverse/</link>
		<comments>http://stringofbits.net/2010/01/bulding-bridges-in-the-metaverse/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 17:24:59 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[metaverse]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[second life]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=154</guid>
		<description><![CDATA[If/once you &#8220;get it&#8221;, Second Life is pretty cool.  It can be a lot of different things, and its potential has barely even been scratched.  Sure, the tools are cumbersome, but they are getting better.  And some of Linden Lab&#8217;s policies suck, but that will just drive people to OSGrid, eventually.
Anyway, there [...]]]></description>
			<content:encoded><![CDATA[<p>If/once you &#8220;get it&#8221;, <a href="http://secondlife.com">Second Life</a> is pretty cool.  It can be a lot of different things, and its potential has barely even been scratched.  Sure, the tools are cumbersome, but they are getting better.  And some of Linden Lab&#8217;s policies suck, but that will just drive people to OSGrid, eventually.</p>
<p>Anyway, there are people in Second Life that I like being able to communicate with.  However, when I&#8217;m at work, it&#8217;s a lot of trouble to create an SSH tunnel home, then forward a text-only client like <a href="http://omvviewer-light.byteme.org.uk/">ommviewer-light</a> just so I can log in and see who is online.</p>
<p>So, as I always do, I went way overboard and created a system that can relay chat between an IRC channel (or channels) and any location (or locations) inside Second Life (or any other grid that supports LSL).  It can also check the online status of users and send them one-way IMs.  I call the entire system slrelay, and you can get it <a href="http://stringofbits.net/slrelay/">here</a>.</p>
<p>It requires a few things to work: a running webserver is absolutely necessary.  If you want the IRC features, then you also need an IRC network of your choice and a machine that can execute perl scripts.  I have my IRC bot connected to irc.slashnet.org.</p>
<p>slrelay has a number of possible uses.  You could use it to relay chat between key locations on a large landmass (say, an area that spans 3 or 4 sims).  It could relay chat between Second Life and another metaverse grid like OSGrid.  It can be used as a simple IRC tool to check who is online very quickly.  Or it can do all of these things at once.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=154" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2010/01/bulding-bridges-in-the-metaverse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scratching the itch</title>
		<link>http://stringofbits.net/2010/01/scratching-the-itch/</link>
		<comments>http://stringofbits.net/2010/01/scratching-the-itch/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 17:06:55 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[eve online]]></category>
		<category><![CDATA[thunderdome]]></category>
		<category><![CDATA[vendetta online]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=207</guid>
		<description><![CDATA[I thought about titling this post &#8220;Eve and Vendetta in the THUNDERDOME&#8221;, but sanity prevailed.  You win this round, sanity.
I played through the trial run of Eve Online.  It worked without much complaint in wine.  Let&#8217;s look at the things I think are cool about Eve Online, and the problems and realizations [...]]]></description>
			<content:encoded><![CDATA[<p>I thought about titling this post &#8220;Eve and Vendetta in the THUNDERDOME&#8221;, but sanity prevailed.  You win this round, sanity.</p>
<p>I played through the trial run of Eve Online.  It worked without much complaint in wine.  Let&#8217;s look at the things I think are cool about Eve Online, and the problems and realizations that came from the trial.<br />
<span id="more-207"></span></p>
<p>Okay, the star map.  I could spend hours just playing with the gorram star map.  Coloring systems by various data, playing with routes&#8230; the star map makes me feel like I&#8217;m in an Asimov novel.  This hits my geek spot so very very hard.</p>
<p>The scale of the game is immense.  4500 star systems.  Something to do in every one of them.  It&#8217;s mind-boggling, and it&#8217;s easy to feel lost in the vast cloud of stars.  Which is a good thing, for me.</p>
<p>The setting is really cool.  The whole concept of capsuleers &#8211; transhumanist sociopaths, small gods reigning death on lesser humans &#8211; is really cool.  The fact that you play as one is the surprising part.  And NPCs even make reference to the fact that your &#8216;kind&#8217; have a reputation for callousness.  Very well executed.</p>
<p>In theory, I love the PvP/corporation/territorial battle aspects of Eve.  Player-run corporations can control star systems.  That&#8217;s amazing.  In fact, it is the single coolest thing the game has to offer.  If VO could find a way to implement sector/system sovereignty, it would be a better game (I believe this is being worked on).</p>
<p>Eve has a  HUGE player base.  There are human players in pretty much every system I pass through.  However, while the player base is huge, I find myself rarely interacting with them.  Which is fine, in that it is realistic enough; I have no real reason to talk to these pilots at this time.  But it makes me realize that VO&#8217;s absence of a huge player base isn&#8217;t as much of a deal breaker as I thought.</p>
<p>I like that Eve&#8217;s economy is thoroughly player-driven.  Vendetta feels contrived; sure, prices fluctuate as you move commodities from one port to another, but a station isn&#8217;t relying on players for a shipment of actual, usable goods, like weapons and ships.  The economy in Eve is easily the most amazing thing I&#8217;ve ever seen in a video game.  The fact that it <strong>works</strong> is almost unbelievable.</p>
<p>Eve has some graphical and performance issues, and it isn&#8217;t really any prettier than Vendetta Online on my hardware.  This is annoying, because Eve looks and runs better in Windows.  That&#8217;s a HUGE point in Vendetta&#8217;s favor; Linux compatibility is very important to me.</p>
<p>Combat in Eve can be boring at times.  Theoretically it&#8217;s a more tactical approach, but PvE comes down to:</p>
<ol>
<li>Click enemy.</li>
<li>Click &#8220;Lock&#8221;</li>
<li>Press F1</li>
<li>Wait until enemy is dead</li>
</ol>
<p>You might need to toggle some shield hardeners or armor repair modules, or run away to repair/reload.  But that&#8217;s about it for the entry-level PvE.  Now, granted, PvP is another deal altogether, and I&#8217;m sure the combat in PvE gets more nuanced.  The presence of tons of options (weapons, shields, add-ons, upgrades, &#8216;rigs&#8217;) is really cool, too, if a bit overwhelming.</p>
<p>In contrast, VO&#8217;s combat is immediate, twitch-based, and immensely rewarding.  It is also a lot harder for me, but I relish the challenge.  In my two-week trial of Eve, I didn&#8217;t lose a single ship.  In Vendetta, blowing up happens every day.  Of course, it isn&#8217;t as big a deal either.</p>
<p>Vendetta&#8217;s limited options with weapons and ships makes it easy to build a balanced, meaningful loadout.  It also has a really good variety of different ship types (light/medium/heavy fighter, transport, bomber) without having an overwhelming number of options.</p>
<p>I think that, in the end, VO is more my style.  It is better suited to casual play.  It has a more open attitude (native Linux client, client plugins are encouraged, very open source-style release model).  The public chat channel makes the game&#8217;s community very accessible; you can ask questions or just chat, and it makes the whole experience feel like hanging out on IRC (but with more explosions).</p>
<p>Eve Online has a lot of things that I want in a game, but it&#8217;s not quite casual-friendly enough for me.  If Vendetta takes some cues from Eve in terms of the broader features, it will turn into a damned fine game.  As it is, it&#8217;s enough fun to justify paying for it.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=207" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2010/01/scratching-the-itch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vendetta redux, Eve Online, and the MMO bug</title>
		<link>http://stringofbits.net/2009/11/vendetta-redux-eve-online-and-the-mmo-bug/</link>
		<comments>http://stringofbits.net/2009/11/vendetta-redux-eve-online-and-the-mmo-bug/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 16:58:57 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[eve online]]></category>
		<category><![CDATA[mmo]]></category>
		<category><![CDATA[vendetta online]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=204</guid>
		<description><![CDATA[So, I&#8217;ve been playing Vendetta Online for a while now, and the shiny factor is starting to fade.  My neophilia guarantees that I will like any sufficiently shiny thing for at least a couple weeks.  However, the game underneath the shiny is lacking, and it may be lacking in too many ways for [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;ve been playing Vendetta Online for a while now, and the shiny factor is starting to fade.  My <a href="http://en.wikipedia.org/wiki/Neophilia">neophilia</a> guarantees that I will like any sufficiently shiny thing for at least a couple weeks.  However, the game underneath the shiny is lacking, and it may be lacking in too many ways for me to justify playing it.</p>
<p>The biggest problem, by a long shot, is the player base.  60 players seems to be the absolute upper bound at any given time, at least while I&#8217;ve been playing.  This is abysmal for an MMOG; there are FPS games that support larger numbers of players at a time.  I might even be happy with this player base, if they did anything other than hang out in Sedina B8 PvPing.  It doesn&#8217;t really feel like an MMO at this point, it has the feeling of a social dogfighting game.</p>
<p>A lot of noobs seem to appear, play for a few weeks, and vanish.  I can see why.  The player base seems a little cliquish, though not overly much.  But you get the feeling that Veterans will always be Veterans, reminiscing about the glory days, and noobs will always be noobs, struggling to make a few credits in the face of vastly more experienced and skilled pirates.  Of course, that&#8217;s when you find pirates at all.  I&#8217;ve flown across have the game&#8217;s universe trading and never been pirated.  Like I said in my previous post, it&#8217;s a ghost galaxy.</p>
<p>The numerous buggy things and realism-breakers are a turn-off, too.  Capships in convoys don&#8217;t carry any cargo, so they&#8217;re worthless to both escorts (who get a &#8220;share of the profits&#8221; for their pay) and pirates.  The cargo is simply an unlimited stream of widgets moving back and forth across the universe, with no great purpose in life.  The convoy missions don&#8217;t always work, either; I&#8217;ve had several simply fail to end, giving me nothing and forcing me to abort the mission.</p>
<p>There is not a lot of variety in missions.  After playing through the few available mission trees, the missions are all one of a few boilerplate missions.  Fly out, kill some stuff, you&#8217;re done.  Take this here, bring that back.  Mine for lots of foo, get paid.  Nothing more elaborate than that, which is disappointing.</p>
<p>I&#8217;m not cancelling my subscription yet.  I&#8217;m giving the game a little more time to impress me.  But at the same time, I&#8217;m going to try out Eve Online.  You see, the MMO bug has hit me, and now I want a large, persistent universe full of people that I can fight with, trade with, and just generally game alongside.  The space theme is more appealing to me than fantasy MMOs have ever been (fantasy has been done to death, is what it comes down to).</p>
<p>As far as roleplaying backstory goes, the science in Eve is surprisingly non-squishy, with a lot of modern scifi concepts making an appearance: quantum entaglement-based FTL communication, consciousness hot-backups, etc.  Sure, the spectre of &#8220;jumpgates&#8221; (replace with &#8220;wormholes&#8221; at leisure) makes an appearance, but I can accept some foils for the sake of the story.</p>
<p>While I love twitch-based gameplay, I am a lot better at tactical/strategic combat.  I think on my feet pretty well, but my reflexes suck pretty hard.  I would probably find the combat in Eve more enjoyable, as a result.</p>
<p>If you ignore the combat layer, Eve has a lot of awesome features that would make VO great: player-owned systems, player-run economics (the materials you trade actually seem to come from a player at some point), and player-designed ships.  All of these could have an analogue in VO, and if features like these were present, I would probably enjoy VO a lot more.</p>
<p>Of course, there&#8217;s also Jumpgate: Evolution.  It&#8217;ll be interesting to check that out when it launches.  We&#8217;ll see.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=204" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/11/vendetta-redux-eve-online-and-the-mmo-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vendetta Online</title>
		<link>http://stringofbits.net/2009/10/vendetta-online/</link>
		<comments>http://stringofbits.net/2009/10/vendetta-online/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 19:13:47 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[in space]]></category>
		<category><![CDATA[mmorpg]]></category>
		<category><![CDATA[vendetta online]]></category>
		<category><![CDATA[video games]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=200</guid>
		<description><![CDATA[I&#8217;ve recently discovered a game called Vendetta Online.  This may be the MMORPG I have been waiting for:  real-time skill-based combat, space flight, trading and mining, space flight, an interesting back story, space flight, and extensive moddability through custom skins, binds, and plugins.  Oh, and it&#8217;s a space flight game.
I love space [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently discovered a game called <a href="http://www.vendetta-online.com">Vendetta Online</a>.  This may be the <a href="http://en.wikipedia.org/wiki/Massively_multiplayer_online_role-playing_game">MMORPG</a> I have been waiting for:  real-time skill-based combat, space flight, trading and mining, space flight, an interesting back story, space flight, and extensive moddability through custom skins, binds, and plugins.  Oh, and it&#8217;s a space flight game.</p>
<p>I love space shooters.  Put me in a cockpit and give me 3 dimensions of unfettered movement, and I may as well be in Valhalla.  Combat is secondary; fighting in space is fun, but just the feeling of (pretending to) pilot through the stars, skirting around asteroids, and maneuvering into docking bays is intoxicating to me.  The chance to do so with other people in a persistent world is something I can&#8217;t pass up.</p>
<p>The space flight in VO is a very solid balance of realism vs playability.  Contrast <a href="http://vegastrike.sourceforge.net/">Vega Strike</a>, which focuses on realism to a fault.  In Vega Strike, it often takes upwards of 15 seconds to maneuver your craft into position for each attack run on an enemy.  Also, to disengage your engines you have to throttle all the way down, and to turn without having your engines engaged you have to press a special key.</p>
<p>Vendetta Online, on the other hand, operates in a more enjoyable way; you only apply thrust for as long as you keep pressing one of your thrusters.  When you stop thrusting, you maintain your current velocity until you thrust again.  This lets you reorient your ship without changing your vector, which is very useful for targeting objects, getting a visual on enemy craft, etc.  It also feels very intuitive and realistic (whether it really is realistic or not is irrelevant, see below).  Moreover, you can apply thrust in 6 directions; forward or backward along the 3 primary axes (relative to your ship&#8217;s current orientation).  The game controls refer to left (+y), right (-y), up (+z), and down (-z) as strafing, while forward (+x) is accelerate and backward (-x) is decelerate.</p>
<p>Having the ability to thrust in any direction is useful and fun, but it isn&#8217;t very realistic (well, not with the ships looking the way they do; a ship that could do that would need thrusters all over the place).  This is where the fun > realism design mentality comes into play, and frankly it makes for a very fun game.  Another unrealistic design decision is the existence of a maximum velocity.  Sure, you could make some sci-fi sounding arguments for it, but honestly it&#8217;s a balancing mechanic, plain and simple.  And in my opinion, there&#8217;s nothing wrong with that.</p>
<p>The game world is vast; 30 systems with 64 sectors in each system (a system is a 16&#215;16 grid of sectors).  Each sector is &#8220;theoretically infinite&#8221; in size, although all of the interesting stuff is centered about the sector&#8217;s origin; after a few kilometers you find a whole lot of nothing that goes on forever.  To get between sectors you can set a destination and &#8216;jump&#8217; there.  Likewise, to get between systems you go to special sectors that have wormhole areas, and you &#8216;jump&#8217; while in one of these.</p>
<p>The game&#8217;s main RPG element (and I mean RPG-esque mechanics, not actual roleplaying) comes in the form of licenses.  These are like a combination of level and skills in most MMOs.  There are 5 licenses: combat, light &#038; heavy weapons, trading, and mining.  As you perform the eponymous activities, the skills increase.  When they level up, you gain access to new ships, weapons, and missions.  But the game remains primarily skill-based; in the hands of an incompetent pilot, the better ships aren&#8217;t that much better.  I am afraid that I&#8217;m a testament to this fact.</p>
<p>The game isn&#8217;t perfect, though, and as long as I&#8217;m writing something like a review I&#8217;ll have to point out a few flaws.  I hate to have to do this to you, Vendetta, but it&#8217;s for your own good.  This will hurt me more than it hurts you.</p>
<p>The game world is big, like I said before.  However, the player base is small.  VO runs entirely in one instance, and you could easily fly across the galaxy and not meet another player.  There are, on average, only 30 &#8211; 40 players online.  This is alleviated a little by the fact that there is a cohesive world-wide chat, so communicating with the other players is easy.</p>
<p>I don&#8217;t know if there are more people on at other times of the day (I tend to play any time between 22:00 and 06:00 UTC) or if this is a low point for the year (more players during the summer?).  Maybe the game is just old, and has lost most of its player base to attrition.  At any rate, it feels like a ghost galaxy sometimes.  I want to populate this world, to convince everyone I know to play and invade the VO universe <i>en masse</i>.</p>
<p>The other flaws in the game are fairly minor.  You can only take one mission at a time, and many missions are automatically aborted (and thus failed) if you log out mid-mission.  A network hiccup can destroy an hour of work (or more for mission trees that require you to start all the way over if you fail any mission in them).</p>
<p>In-system jumps and wormholes look the same.  A more spectacular graphic for wormholes would be really cool, but on the other hand, the <a href="http://vendetta-online.com/h/storyline.html">in-universe explanation</a> for wormholes makes the modest special effects make enough sense.</p>
<p>There is also a stat called &#8220;grid&#8221; that weapons have but don&#8217;t explain.  It refers to the total amount of power connected devices on your ship can use (i.e. the &#8220;power grid&#8221;).  It&#8217;s kind of like a maximum voltage, and you can only use 20 grid per ship, although this is not explained anywhere.  It&#8217;s not important until you get access to some pretty hefty ships, but it would be good to know about it, at least.</p>
<p>Other than these and similar minor nitpicks, the game is tons of fun and I foresee myself playing it for a long time.  There is a free 8-hours-of-play-time trial available.  My character&#8217;s name is Gjalfr.  See you there.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=200" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/10/vendetta-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Creating OpenSim terrain with Blender</title>
		<link>http://stringofbits.net/2009/09/tutorial-creating-opensim-terrain-with-blender/</link>
		<comments>http://stringofbits.net/2009/09/tutorial-creating-opensim-terrain-with-blender/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 02:18:19 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[metaverse]]></category>
		<category><![CDATA[opensim]]></category>
		<category><![CDATA[second life]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=152</guid>
		<description><![CDATA[This tutorial will explain how to create RAW terrain files for OpenSim and Second Life using Blender and the Gimp.

Before we begin
You will need the following software for this tutorial.  All of this software is free and open source.

Blender, a professional 3d modelling tool.  Blender is powerful but complex, and basic blender knowledge [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial will explain how to create RAW terrain files for <a href="http://opensimulator.org/wiki/Main_Page">OpenSim</a> and <a href="http://secondlife.com">Second Life</a> using <a href="http://blender.org">Blender</a> and the <a href="http://www.gimp.org/">Gimp</a>.<br />
<span id="more-152"></span></p>
<h3>Before we begin</h3>
<p>You will need the following software for this tutorial.  All of this software is free and open source.</p>
<ul>
<li><a href="http://blender.org">Blender</a>, a professional 3d modelling tool.  Blender is powerful but complex, and basic blender knowledge is assumed for this tutorial.  Blender will be used to actually create the heightmap.</li>
<li><a href="http://www.gimp.org/">The Gimp</a>, a powerful program for creating and editing raster (i.e. normal) image files.  The Gimp will be used for splitting the heightmap into RAW terrain files that OpenSim can use.</li>
<li><a href="http://dominodesigns.info/project/gimpterrain">gimpterrain</a>, a plug-in for The Gimp that allows it to open and save RAW terrain files.</li>
<li><a href="http://stringofbits.net/terrainerizer/">terrainerizer</a> (optional), a bash script I created to automate splitting the heightmap into RAW files.  Terrainerizer only works on Linux, and still requires The Gimp and gimpterrain to be installed.  It also requires <a href="http://www.imagemagick.org/script/index.php">ImageMagick</a>.</li>
</ul>
<p>In addition to the above software, you will also need a blank RAW terrain file.  You could download a terrain file from OpenSim and transform it into a blank one (replace the Height layer with #ffffff, replace the factor layer with #808080), or you could just download <a href="http://stringofbits.net/wp-content/blank.raw">this one</a> that I have created for you.</p>
<h3>Create a heightmap</h3>
<p>A good tutorial on creating a generic heightmap in Blender can be found <a href="http://wiki.blender.org/index.php/Doc:Tutorials/Textures/Maps/Creating_a_Heightmap_from_a_Plane">here</a>.</p>
<p>The tutorial above creates a heightmap that is 512&#215;512 pixels.  However, an OpenSim RAW terrain file is only 256&#215;256 pixels.  This means that the above tutorial will create terrain for 4 regions, arranged in a square.  If you need terrain for a different number of regions, you can modify the above tutorial to create different sized heightmaps.</p>
<p>For example, suppose you want to create an oblong island that is 2 regions by 4 regions in size.  To do that:</p>
<p>1. Create the plane, but instead of scaling it to 2&#215;2 blender units, scale it to 2&#215;4 blender units.  To do this, you can use this command sequence in blender:</p>
<ul>
<li>Right-click on the object to select it.</li>
<li>Change the mode to Edit mode.</li>
<li>Press &#8217;s&#8217;, &#8216;y&#8217;, &#8216;2&#8242;, &#8216;return&#8217;.</li>
<li>Press &#8217;s&#8217;, &#8216;x&#8217;, &#8216;4&#8242;, &#8216;return&#8217;.</li>
</ul>
<p>Now you should have a plane that is oblong instead of perfectly square.</p>
<p>2. When you configure the render settings, you will need to use different values.</p>
<ul>
<li>In the Scene settings (F10), SizeX and SizeY should be set to 256 * (number of regions).  In our case, we have 2 regions in the Y dimension, and 4 regions in the X dimension.  So, SizeX should be set to 1024, and SizeY should be set to 512.</li>
<li>In the camera settings, the scale needs to be adjusted to fit the plane precisely.  In our example, the scale should be set to 8.  To get it just right, select the camera, and press Numpad0 to switch to camera view.  You should see two concentric rectangles composed of dashed lines.  Now, press F9 to view the Editing options for the camera.  Now, adjust the Scale value until the outer dashed rectangle encompasses your plane completely, without including anything outside the plane.  If the dashed rectangle is not the same shape as your plane, then you still need to set SizeX and SizeY in the Render settings.</li>
</ul>
<h3>Creating RAW terrain files with the Gimp</h3>
<p>Now that you have a heightmap file, you still need to turn it into terrain files that can be uploaded into OpenSim.</p>
<p>Enter <a href="http://dominodesigns.info/">Domino Marama</a>, creator of <a href="http://dominodesigns.info/project/gimpterrain">gimpterrain</a>, an import/export plug-in for the Gimp that can handle the OpenSim RAW terrain format.  Download gimpterrain and install it into your gimp plug-ins directory.</p>
<p>Now, if you are running Linux, you can automate the rest of this section with my terrainerizer script.  See <a href="#easier">below</a>.</p>
<p>We also need the blank terrain file that I mentioned earlier.</p>
<p>Armed with these tools, we can open a terrain file in the gimp and combine it with a portion of our heightmap.</p>
<ol>
<li>Open your blank terrain file (blank.raw) and the heightmap in the Gimp.</li>
<li>Using the Rectangle Select tool, select a 256&#215;256 pixel section of the heightmap, starting in the upper-left corner.</li>
<li>Click Edit -> Copy</li>
<li>Select the terrain file and make sure the Height layer is selected.</li>
<li>Click Edit -> Paste.  You should see the section of the heightmap you copied appear as a floating layer.</li>
<li>Click Layer -> Anchor Layer.  The Height layer should now look like the copied portion of the heightmap.</li>
<li>Click File -> Save As and save this file as a new file with the .raw extension.</li>
</ol>
<p>Now, repeat this process for every 256&#215;256 pixel section in your original heightmap.</p>
<h3><a name="easier">Making it easier</a></h3>
<p>Performing the steps in the previous section is very tedious, especially given how long it takes to save the terrain files.  To make this easier, I have automated the process with the <a href="http://stringofbits.net/terrainerizer/">terrainerizer</a> script.</p>
<p>If you are running Linux, simply put the terrainerizer script somewhere in your path.  Edit it and specify the path to your blank.raw file, then run:</p>
<blockquote><p><code>terrainerizer heightmap.png</code></p></blockquote>
<p>Replace &#8216;heightmap.png&#8217; with your heightmap file.  Now let terrainerizer work.  It will handle everything we did in the previous section automatically.  It may take a while, depending on how large your heightmap is.</p>
<p>When it is finished, terrainerizer will leave several files in your current directory, named with this scheme:</p>
<p><code>heightmap-nxm.raw</code></p>
<p>Where &#8216;n&#8217; and &#8216;m&#8217; are numbers starting at 0 that represent the column and row for that terrain file.  So, <code>0x0</code> is the top left region of your terrain, <code>0x1</code> is the next region (moving from top to bottom), and so on.  Just upload these terrain files and you&#8217;re done!</p>
<h3>Uploading the terrain files</h3>
<p>Now that you have the terrain files, you can upload these files into OpenSim.  There are two ways to do this.</p>
<p>1. From the OpenSim server console, you can simply:</p>
<blockquote><p><code>change region RegionName<br />
terrain load /path/to/terrain.raw</code></p></blockquote>
<p>Repeat this for each of your regions.</p>
<p>2. From a viewer connected to OpenSim (assuming you are using Hippo or a similar viewer):</p>
<ul>
<li>Move to the region you where you want to upload terrain.</i>
<li>Navigate to World -> Region/Estate -> Terrain</li>
<li>Click &#8220;Upload RAW Terrain&#8230;&#8221; and select the terrain file you created for this region.</li>
</ul>
<div id="attachment_190" class="wp-caption alignright" style="width: 310px"><a href="http://stringofbits.net/wp-content/upload_terrain.png"><img src="http://stringofbits.net/wp-content/upload_terrain-300x218.png" alt="The Upload Terrain menu in Hippo" title="upload_terrain" width="300" height="218" class="size-medium wp-image-190" /></a><p class="wp-caption-text">The Upload Terrain menu in Hippo</p></div>
<p>Repeat these steps for each region where you want to upload terrain.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=152" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/09/tutorial-creating-opensim-terrain-with-blender/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>emacs 23, dbus, and libnotify</title>
		<link>http://stringofbits.net/2009/08/emacs-23-dbus-and-libnotify/</link>
		<comments>http://stringofbits.net/2009/08/emacs-23-dbus-and-libnotify/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 03:47:44 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=166</guid>
		<description><![CDATA[A new major version of emacs is out, and it includes dbus support.  This is great, because it means we can do things like this:

(require 'dbus)
(defun send-desktop-notification (summary body timeout)
  "call notification-daemon method METHOD with ARGS over dbus"
  (dbus-call-method
    :session          [...]]]></description>
			<content:encoded><![CDATA[<p>A new major version of <a href="http://www.gnu.org/software/emacs/">emacs</a> is out, and it includes dbus support.  This is great, because it means we can do things like this:</p>
<blockquote><pre>
(require 'dbus)
(defun send-desktop-notification (summary body timeout)
  "call notification-daemon method METHOD with ARGS over dbus"
  (dbus-call-method
    :session                        ; use the session (not system) bus
    "org.freedesktop.Notifications" ; service name
    "/org/freedesktop/Notifications"   ; path name
    "org.freedesktop.Notifications" "Notify" ; Method
    "emacs"
    0
    ""
    summary
    body
    '(:array)
    '(:array :signature "{sv}")
    ':int32 timeout))

(defun pw/compile-notify (buffer message)
  (send-desktop-notification "emacs compile" message 0))

(setq compilation-finish-function 'pw/compile-notify)
</pre>
</blockquote>
<p>Add this to your .emacs file and you will receive a libnotify popup when M-x compile completes.  It will even give you the exit message, so you know whether the compile was successful.</p>
<p>So now you can let that long compile run, and work on <a href="http://xkcd.com/303/">something else</a>.  emacs will let you know when the compile finishes.</p>
<p>As written above, the notifications will stay on your screen until you dismiss them (by clicking on them).  If you would like them to vanish after a preset time limit, change the 0 in the call to send-desktop-notification.  Set it to the number of milliseconds the popup should remain on the screen.</p>
<div id="attachment_173" class="wp-caption alignright" style="width: 310px"><a href="http://stringofbits.net/wp-content/compile_bad.png"><img src="http://stringofbits.net/wp-content/compile_bad-300x99.png" alt="Screenshot of libnotify popup showing a compiler error" title="compile_bad" width="300" height="99" class="size-medium wp-image-173" /></a><p class="wp-caption-text">Screenshot of libnotify popup showing a compiler error</p></div>
<p>This is just the tip of the iceberg, of course.  Any application that presents a dbus interface can be interacted with from emacs, which means that emacs can also integrate itself with the Linux desktop in <a href="http://emacs-fu.blogspot.com/2009/01/using-d-bus-example.html">other interesting ways</a>.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=166" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/08/emacs-23-dbus-and-libnotify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>so close, Netflix</title>
		<link>http://stringofbits.net/2009/08/so-close-netflix/</link>
		<comments>http://stringofbits.net/2009/08/so-close-netflix/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 21:54:49 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[netflix]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=171</guid>
		<description><![CDATA[I like Netflix.  I think they&#8217;re a great service, reasonably priced, and they have completely replaced cable television for me.  However, I have found one problem.  According to Netflix:

If you are renting a series or seasons, we will ship the DVDs in order. That means:
&#8230;
* If there is a wait for a [...]]]></description>
			<content:encoded><![CDATA[<p>I like Netflix.  I think they&#8217;re a great service, reasonably priced, and they have completely replaced cable television for me.  However, I have found one problem.  According to Netflix:</p>
<blockquote><p>
If you are renting a series or seasons, we will ship the DVDs in order. That means:<br />
&#8230;<br />
* If there is a wait for a particular DVD in a series, will we wait until we ship you that DVD until we ship the next DVD in that series.
</p></blockquote>
<p>Which is great.  If I add, say, Excel Saga to my queue, I can be certain that I will get disc 1 first, followed by disc 2 and 3.  Under no circumstances will I have to worry about getting, say, disc 4 before disc 2.  Right?</p>
<p>Well, in theory.  In practice, some TV series (notably, Excel Saga) have discs missing completely.  These discs go into your &#8220;Saved DVDs&#8221; list instead of your queue, and they aren&#8217;t considered to be discs with a &#8220;wait&#8221;.  As a result, they get skipped over completely, and you get the next disc in the series that isn&#8217;t missing.</p>
<p>Why am I complaining here instead of directly to Netflix?  Because Netflix doesn&#8217;t have any reasonable way that I can find to open a bug report or provide feedback.  And I wanted to vent a little.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=171" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/08/so-close-netflix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Decentralized Metaverse</title>
		<link>http://stringofbits.net/2009/08/the-decentralized-metaverse/</link>
		<comments>http://stringofbits.net/2009/08/the-decentralized-metaverse/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 07:50:57 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[drm]]></category>
		<category><![CDATA[metaverse]]></category>
		<category><![CDATA[second life]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=140</guid>
		<description><![CDATA[Several years ago I mused on the decentralization of Second Life, Linden Labs&#8217; virtual world.  Shortly after that post, I dropped out of the metaverse entirely for more than a year.
While I was off not paying attention, it seems that almost all of my predictions have come true.  An open-source server for running [...]]]></description>
			<content:encoded><![CDATA[<p>Several years ago I <a href="http://stringofbits.net/2006/11/decentralizing-second-life/">mused on the decentralization</a> of <a href="http://www.secondlife.com">Second Life</a>, Linden Labs&#8217; virtual world.  Shortly after that post, I dropped out of the metaverse entirely for more than a year.</p>
<p>While I was off not paying attention, it seems that almost all of my predictions have come true.  An open-source server for running a simulator and/or grid, <a href="http://opensimulator.org/wiki/Main_Page">OpenSim</a>, has been created.  OpenSim appears to have solved many of the problems, and implemented many of the predictions, of my post from 2006.</p>
<p>One &#8220;problem&#8221; that remains, though, is economy.<br />
<span id="more-140"></span><br />
The problem I outlined in my original post was that without a robust permissions scheme, economy would break down.  Looking back, this seems terribly unlike me.  Even in 2006, I had a strong dislike for anything that reeked of <a href="http://en.wikipedia.org/wiki/Digital_rights_management">Digital Rights Management</a> (DRM) even for the me that wrote that post.  The permissions scheme employed by Second Life, after all, is just a DRM scheme.  Like all DRM, it attempts to keep the user from using the things they purchase the way they would like, and like all DRM it is ultimately futile.</p>
<h3>Economy on a Closed Grid</h3>
<p>On the Second Life grid, you use real money to purchase virtual goods, which might have any of a number of permissions associated with them (modify, copy, and transfer).  This permissions scheme is enforced by the fact that Second Life&#8217;s grid is a walled garden; Linden Labs controls the asset server, so your data all exists in their hands.  They safeguard it, preventing nefarious users from copying your creations.</p>
<p>Except, not really.</p>
<p>Like all DRM, this scheme just plain can&#8217;t work.  It can&#8217;t.  It violates information theory.  It is mathematically impossible to give something to someone and then keep them from having it.  This is a corollary to the <a href="http://en.wikipedia.org/wiki/Have_one%27s_cake_and_eat_it_too">Law of Cake</a>.  I will elaborate.</p>
<p>For the Second Life viewer (aka client software) to render the object, it needs a copy of the object.  This copy is necessarily sufficient to reproduce the object.  Since any viewer that can speak the protocol can connect to Second Life, all you have to do is create a viewer that copies the object data being sent to it.  </p>
<p>In fact, exactly <a href="http://wiki.secondlife.com/wiki/Help:CopyBot#CopyBot">such a viewer</a> has been written.  Linden Labs responded to this viewer&#8217;s existence by appealing to their Terms of Service.  Whenever a user is caught using CopyBot, they are banned from Second Life.</p>
<p>In other words, there is no technical solution, only a social/legal one.  This is because DRM is fundamentally flawed; it is trying to achieve the impossible.</p>
<p>Even without CopyBot, you could just decode cached objects from the official viewer&#8217;s data cache.  Programs have also been created which do this as well, although they are harder to use than the infamous CopyBot.</p>
<p>The point of all this is that the assumption that the Walled Garden protects your Intellectual Property is simply false.  As with the rest of the Internet, piracy is a given.  Anyone creating and distributing content on the web must start with that assumption.</p>
<h3>Economy on an Open Grid</h3>
<p>I haven&#8217;t explored OpenSim enough to determine whether it supports any sort of monetary transaction, but let us assume that it does.  In other words, assume that you can, via direct credit card payments or via a virtual currency, purchase virtual goods.  Even if you can&#8217;t do this yet, I have little doubt that OpenSim will support it eventually.</p>
<p>Now, let us further assume that I connect to OSGrid via a region that I run myself.  This means that I control my own asset server, where my inventory resides.  If I purchase an object with restrictive permissions on another region, a copy of that object will be transferred to my asset server, where I can simply log in via mysql and change the permissions.  Now, I can create multiple copies of this object, or give a copy to someone else.</p>
<p>What I have done here is to defeat DRM, just like CopyBot.  It&#8217;s considerably easier, and much harder to detect.  However, in practice this is no less secure to the Intellectual Property owner than Second Life&#8217;s walled garden.  It still requires a reasonable level of competence (running your own grid/sim) to exploit, so piracy is likely to be similar in rate.  Of course, the open metaverse has no Terms of Service (although individual grids/regions within the metaverse may).  But the technical merits are the same; when looking at the threat of piracy, the open grid has the same basic properties as the closed grid.</p>
<p>Of course, even without our own asset server, we could still use the same techniques to copy data that I described for the closed grid.  CopyBot and copying assets out of cache work identically on an OpenSim grid.</p>
<h3>Not a problem</h3>
<p>Okay, so the economy &#8220;problem&#8221; isn&#8217;t really a problem, just a fact of life.  In the words of the OpenSim folks:</p>
<blockquote cite="http://opensimulator.org/wiki/Hypergrid_Security"><p>
[The existence of piracy] is the kernel of the belief that open grids are hopeless for a virtual-goods economy. DRM discussion aside, maybe they are hopeless. But then, everyone thought the web was hopeless for selling music, and look at the success of iTunes in spite of all the piracy that still exists out there.
</p></blockquote>
<p>I am not proposing that piracy is good in any way, merely describing how it is inevitable.  You simply cannot restrict how users will use the things you buy.  You can&#8217;t keep someone from copying digital data, if they are determined enough to do it.  You can use restrictive terms of service and try to sue or press charges, but there will never be a technological solution.</p>
<p>So, to current and potential content creators shying away from the open grids: piracy is an unfortunate fact of life.  It will happen.  Start with that assumption, and work from there.  If this means you don&#8217;t want to create digital content, I&#8217;m sure the creative community will miss you.  If, however, you realize that some people will appreciate your work enough to pay for it, without worrying about the details, then you are in the company of some <a href="http://www.jonathancoulton.com/">fine artists</a>.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=140" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/08/the-decentralized-metaverse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>d20tools 0.3 is here</title>
		<link>http://stringofbits.net/2009/08/d20tools-0-3-is-here/</link>
		<comments>http://stringofbits.net/2009/08/d20tools-0-3-is-here/#comments</comments>
		<pubDate>Sun, 23 Aug 2009 02:27:22 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[dungeons & dragons]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=145</guid>
		<description><![CDATA[I&#8217;ve released a new version of d20tools.  In addition to using a new, simpler file saving/loading scheme and better keyboard handling, the new feature is also a lot more stable.  Other highlights include a more sensible entity/group management system, and the ability for any creature to be a henchman.
Get it here.
I&#8217;m lifting my [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve released a new version of d20tools.  In addition to using a new, simpler file saving/loading scheme and better keyboard handling, the new feature is also a lot more stable.  Other highlights include a more sensible entity/group management system, and the ability for any creature to be a henchman.</p>
<p>Get it <a href="http://sourceforge.net/projects/d20tools">here</a>.</p>
<p>I&#8217;m lifting my moratorium on D&#038;D 4e, as well.  This means that d20tools will eventually support 4e creatures.  However, this is a huge undertaking, and I have to decide how best to handle it.  I&#8217;m leaning towards a system that will allow anyone to write system templates; then, any gaming system could be plugged in, theoretically.  In practice, this is a lot of work for a single developer, so I wouldn&#8217;t anticipate this happening any time soon.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=145" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/08/d20tools-0-3-is-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on the Transhuman revolution</title>
		<link>http://stringofbits.net/2009/07/thoughts-on-the-transhuman-revolution/</link>
		<comments>http://stringofbits.net/2009/07/thoughts-on-the-transhuman-revolution/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 14:56:25 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[transhumanism]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=82</guid>
		<description><![CDATA[I&#8217;ve been reading a lot of near-future science fiction and speculative nonfiction lately, and as a result I&#8217;ve been contemplating the idea of transhumanism and what it means for us as a species and a culture.  Transhumanism is decently defined by wikipedia, and has been explored in fiction by Charles Stross, Cory Doctorow, and others.  [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been reading a lot of near-future science fiction and speculative nonfiction lately, and as a result I&#8217;ve been contemplating the idea of transhumanism and what it means for us as a species and a culture.  <a href="http://en.wikipedia.org/wiki/Transhumanism">Transhumanism</a> is decently defined by wikipedia, and has been explored in fiction by <a href="http://www.accelerando.org/">Charles Stross</a>, <a href="http://www.tor.com/index.php?option=com_content&amp;view=story&amp;id=2993">Cory Doctorow</a>, and others.  It has been discussed extensively in the non-fiction sphere as well: <a href="http://www.kurzweilai.net/index.html?flash=2">Ray Kurtzweil</a> is probably the most well-known thinker discussing the topic.  However, while Kurtzweil discusses the possibilities of <a href="http://en.wikipedia.org/wiki/Strong_AI">AI consciousness</a> and the emergence of the <a href="http://en.wikipedia.org/wiki/Technological_singularity">singularity</a>, I am more interested in transhumanism in this article.<br />
<span id="more-82"></span></p>
<h3>Defining Transhumanism</h3>
<p>For semantic clarity, I&#8217;m going to define what I mean by transhuman, because my definition and connotations may differ from yours.</p>
<p>A &#8216;transhuman&#8217; is someone who augments reality with technology at a constant and unconscious on nearly unconscious level.  The key concept here is that transhumans use technology to augment reality.  This helps avoid the temptation to define any tool-user as a transhuman; a primitive man with a spear is more capable at hunting than a primitive man with his bare hands.  A person driving a car is more mobile than a person walking.  A person who watches a movie while browsing <a href="http://imdb.com">IMDB</a> on their iPhone knows more about the movie than someone watching it passively (though the passive viewer may well be enjoying the movie more).  By our definition, the iPhone user comes close to transhumanism.  We might call her a proto-transhuman.  However, these is still significant effort involved; she must look away from the movie and focus on her iPhone to search IMDB.</p>
<p>So, where are we now?  Some people (early-adopting geeks, for example), already consider quick access to information to be something like an extra limb; as one of those affected with this feeling, I can vouch for it.  Are we transhuman or not?  Again, we&#8217;re on the way there, but we haven&#8217;t yet achieved the fluidity of control and automation needed yet.</p>
<p>As for where we&#8217;re going next, let&#8217;s begin by discussing how we got where we are.</p>
<h3>The Evolution of Information Access</h3>
<p>For the majority of human history, access to information has been difficult.  Even after the invention of the printing press, one had to have either a personal library or access to a public library.  Information could be obtained, but not in a timely manner; poring over books was the purview of academia.  And even academics could only access this information when they were actually at their libraries.</p>
<p>As a result, the human brain has been the only way to store a significant amount of information for quick retrieval.  As a storage device, the brain is not that great; storing something permanently requires multiple writes (our recall of a fact is better the more times we have heard it).  It can be finicky at retrieving information; everyone who has ever had something &#8216;on the tip of their tongue&#8217; can attest to that.</p>
<p>The next revolution in storage was electronic storage; in other words, computers.  Of course, early computers couldn&#8217;t hold a ton of information, but more importantly; that information was still stuck in one location.  To look up a fact on a computer, you had to physically travel to the computer with the information on it (or to a terminal connected to that computer; typically, these needed to be pretty close to the mainframe).</p>
<h4>Enter the Internet</h4>
<p>And here we come to the revolution; the Internet allows us to access virtually any piece of information from any computer in the world.  And with the information searching miracle we call Google, we can usually find that information very quickly.  Of course, the original problem with the Internet was that you still had to get to a computer to use it.  The solution?</p>
<p>Smaller computers.</p>
<p>Laptops, to be precise.  Laptop computers allowed us to connect to the Internet, and its massive store of information, anywhere we could find a phone line.  With the emergence of wireless networking, all we need is a wireless signal.  However, laptops are big, and cumbersome to use in a hurry; if I&#8217;m in the midst of a conversation and need to recall a fact, it takes several minutes to get my laptop powered on and connected to the Internet.  The solution?</p>
<p>Smaller computers.</p>
<p>Cellular telephones have evolved from foot-long bricks that required external power to pocket-sized devices with <a href="http://en.wikipedia.org/wiki/Touchscreen#Capacitive">capacitive touchscreen</a> interfaces.  These phones can also connect to the Internet, play music and games, function as e-book readers, scan bar-codes and do real-time price comparison, and perform myriad other tasks.  They can access any information from any location that has cellular service.  This is the first real step toward ubiquitous information access.  However, these devices can still be somewhat cumbersome to use.  The device must be fetched from a user&#8217;s pocket, then interacted with for quite some time to get the information you want.  If you want this information in the middle of a conversation, it can be fairly cumbersome.  The solution?</p>
<p>Smarter computers.</p>
<h4>The current state of the art</h4>
<p>Immediate mastery of a wide array of information was once a symbol of the elite.  Now, anyone who can type reasonably quickly can have an online, text-based conversation and match the knowledge of anyone else on many topics (this can be tough for very advanced or specialized topics, obviously).  I suspect that this trend will continue until anyone can retrieve any fact instantaneously.</p>
<p>The implications this has for culture are immense.  Once memorization of fact is no longer a measure of the intellectual elite, intelligence will be judged along other axes; the ability to synthesize existing content (analysis) and the ability to create new content (art).  The stigma that exists against artists will disappear, and we will be left with a culture in which artists are not only lauded as worthwhile members of society, but financially supported by society.</p>
<h3>Portrait of a Transhuman</h3>
<p>Let&#8217;s look at what transhumans might look like at a point in the near future.</p>
<p>He wears sunglasses with transparent <a href="http://en.wikipedia.org/wiki/Organic_light-emitting_diode">OLED</a> overlays and a bluetooth radio that communicates with his personal Mobile Device (the successor to the smart phone).  The overlay provides a Heads-Up Display; in it, he sees that he has 3 unread emails, 4 new <a href="http://en.wikipedia.org/wiki/RSS">RSS</a> items, and an instant message from his wife.  A pinhole camera in the glasses tracks his eye movements and responds to them; he keeps his gaze on the IM for a moment and it expands.  His wife is asking him to pick a restaurant for dinner.  A second pinhole camera looks outward from the glasses, feeding data about his surroundings to the Mobile Device.  He looks at a restaurant down the block, and a moment later his HUD provides a menu, operating hours, and reviews.  He pulls out his Mobile Device and types a quick reply to his wife.</p>
<p>All of the technology I just described already exists; it just needs to be made small enough, responsive enough, and accurate enough.  Protocols and standards need to be developed, and our access to information needs to be made a public commodity.  Once this is achieved, we will have the future.  What we&#8217;ll do with it, I have no idea.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=82" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/07/thoughts-on-the-transhuman-revolution/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter from the command line</title>
		<link>http://stringofbits.net/2009/07/twitter-from-the-command-line/</link>
		<comments>http://stringofbits.net/2009/07/twitter-from-the-command-line/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 20:38:30 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=129</guid>
		<description><![CDATA[I&#8217;ve recently started playing with twitter.  A nice way to use it via the command-line (using curl) was suggested here.  I have taken that and improved slightly on it.

Here is the result:
#!/bin/sh
echo -n "twitter&#62; "
read text
while [ ${#text} -gt 140 ]; do
echo
echo "Message too long; used ${#text}/140 characters."
echo
echo -n "twitter&#62; "
read text
done
echo
echo "Message [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started playing with twitter.  A nice way to use it via the command-line (using curl) was suggested <a href="http://binnyva.blogspot.com/2007/03/using-twitter-part-1-command-line.html">here</a>.  I have taken that and improved slightly on it.</p>
<p><span id="more-129"></span></p>
<p>Here is the result:</p>
<blockquote><p><code>#!/bin/sh<br />
echo -n "twitter&gt; "<br />
read text</p>
<p>while [ ${#text} -gt 140 ]; do</p>
<p>echo<br />
echo "Message too long; used ${#text}/140 characters."<br />
echo<br />
echo -n "twitter&gt; "<br />
read text</p>
<p>done</p>
<p>echo<br />
echo "Message is ${#text}/140 characters.  Press enter to post, or Ctrl+C to cancel."<br />
read</p>
<p>curl --basic --user "username:password" --data-ascii "status=`echo $text|tr ' ' '+'`" "http://twitter.com/statuses/update.json" &amp;&gt; /dev/null<br />
</code>
</p></blockquote>
<p>To use the script, copy all of that into a file somewhere in your path, then make the file executable (e.g., <code>chmod 755 /usr/local/bin/twitter</code>).  Now you can type &#8216;twitter&#8217;, type in your tweet, and you&#8217;re done!</p>
<p>I even set up fluxbox so that mod4+t launches a terminal with the script running.  To do that, I added this to ~/.fluxbox/keys:</p>
<blockquote><p>
<code><br />
Mod4 t :Exec xterm -e "twitter"<br />
</code>
</p></blockquote>
<p>If you&#8217;re not familiar with &#8216;mod4&#8242;, it is the Windows key on most PC keyboards.</p>
<p>I&#8217;ll eventually get around to writing a slightly more full-featured twitter updater in c or c++.  Until then, enjoy this script!</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=129" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/07/twitter-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My new project &#8211; netjatafl</title>
		<link>http://stringofbits.net/2009/06/my-new-project-netjatafl/</link>
		<comments>http://stringofbits.net/2009/06/my-new-project-netjatafl/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 19:06:03 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[chess]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[mancala]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tafl]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=126</guid>
		<description><![CDATA[I&#8217;ve been pretty busy the last month working on netjatafl.  Netjatafl will eventually be a networked client for playing various board and/or card games.  It was originally created for hnefatafl and other tafl games.  However, I have designed it to be extensible; I&#8217;m working on adding mancala games, and it looks like [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been pretty busy the last month working on <a href="http://netjatafl.sourceforge.net">netjatafl</a>.  Netjatafl will eventually be a networked client for playing various board and/or card games.  It was originally created for hnefatafl and other tafl games.  However, I have designed it to be extensible; I&#8217;m working on adding mancala games, and it looks like my design makes it pretty easy to add a new game. (I&#8217;ve added most of the logic for mancala to the client and server in just a couple hours of work).  I intend to add shogi, xiangqi, chess, and possibly even go at some point in the future.</p>
<p>The netjatafl server (taflserv) operates on a simple, completely open protocol; it will eventually support authenticated logins and statistics tracking.  Anyone could write a netjatafl client for any platform, if they wished.  My clients will all be in C++, because this let&#8217;s me reuse the &#8216;libboardgame&#8217; library, which contains the game logic used by the server.  I will also build in a &#8220;capabilities&#8221; system at some point, so the client and server can both advertise which games they support.</p>
<p>The whole thing is theoretically usable in its current state; the client is an ncurses-based text UI that is pretty cumbersome, but can be used.  As far as I know, it only works in Linux.  Anyone who wants to cross-compile it for Windows and send me a patch with everything you had to add, feel free!  I will eventually add a proper GUI, probably gtk+-based.</p>
<p>Like the sound of this project?  Feel free to check out the code, compile it, and let me know what you think!</p>
<p>Etymology notes:  netjatafl is Old Norse for &#8220;net-table&#8221;; i.e. a networked table you can gather around to play games.  &#8216;taflbordh&#8217; is ON for &#8216;tafl board&#8217; (tafl can also refer to tafl games in general), which sounds a little redundant, but it made a nice name for a client.  And &#8216;taflserv&#8217; is just &#8216;tafl server&#8217;&#8230; &#8217;serv&#8217; was meant to be short for &#8217;server&#8217;, but I later noticed that it&#8217;s also a French word meaning &#8216;it serves&#8221;.  I find this somewhat appropriate.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=126" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/06/my-new-project-netjatafl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to fix PulseAudio in Fedora in 2 easy steps!</title>
		<link>http://stringofbits.net/2009/05/how-to-fix-pulseaudio-in-fedora-in-2-easy-steps/</link>
		<comments>http://stringofbits.net/2009/05/how-to-fix-pulseaudio-in-fedora-in-2-easy-steps/#comments</comments>
		<pubDate>Thu, 28 May 2009 03:40:08 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=124</guid>
		<description><![CDATA[1. su -c &#8220;yum -y remove alsa-plugins-pulseaudio&#8221;
2. su -c &#8220;reboot&#8221;
 ]]></description>
			<content:encoded><![CDATA[<p>1. su -c &#8220;yum -y remove alsa-plugins-pulseaudio&#8221;</p>
<p>2. su -c &#8220;reboot&#8221;</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=124" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/05/how-to-fix-pulseaudio-in-fedora-in-2-easy-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Case of the Odd NetworkManager Behavior</title>
		<link>http://stringofbits.net/2009/04/the-case-of-the-odd-networkmanager-behavior/</link>
		<comments>http://stringofbits.net/2009/04/the-case-of-the-odd-networkmanager-behavior/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 17:31:47 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=110</guid>
		<description><![CDATA[I recently purchased an Eee PC 1000HE.  This is a very nice machine, and aside from one weird bug, Linux support is great.  However, I&#8217;ve run into a very annoying problem with Fedora 10, and at the root of that problem is gnome-keyring-manager.

Misconfiguration Most Foul
We begin our tale with NetworkManager.  Since I connect to several [...]]]></description>
			<content:encoded><![CDATA[<p>I recently purchased an <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16834220504">Eee PC 1000HE</a>.  This is a very nice machine, and aside from one <a href="https://bugzilla.redhat.com/show_bug.cgi?id=489216">weird bug</a>, Linux support is great.  However, I&#8217;ve run into a very annoying problem with Fedora 10, and at the root of that problem is gnome-keyring-manager.</p>
<p><span id="more-110"></span></p>
<h3>Misconfiguration Most Foul</h3>
<p>We begin our tale with NetworkManager.  Since I connect to several wireless networks and a VPN, NetworkManager is a very useful thing to have working.  Its initial setup was great; I loaded nm-applet in my fluxbox startup, it prompted me for a default keyring password, and we were off.</p>
<p>However, on my next boot I was not prompted for my keyring password; I had to enter my WEP key manually.  After some exploration, I learned that gnome-keyring-daemon needs to be running.  The paradox is that it WAS running.</p>
<h3>A Red Herring</h3>
<p>I found some rather old advice thas suggested I run gnome-keyring-daemon manually from ~/.fluxbox/startup, but this didn&#8217;t work; gnome-keyring-daemon starts automatically in Fedora 10, thanks to pam_gnome_keyring.so.  I now had two copies of the daemon now running, neither of which worked.</p>
<p>What I eventually discovered was this: if I kill the automatically-started gnome-keyring-daemon (or remove auto_start from the pam_gnome_keyring options in /etc/pam.d/kdm), then start it manually with different options, it works every time.  So, instead of:</p>
<p><code>gnome-keyring-daemon -d --login</code></p>
<p>which is the automatically provided command, I ran:</p>
<p><code>gnome-keyring-daemon -f -c keyring</code></p>
<p>from my fluxbox startup file.  This worked, but turned out to be unnecessary.</p>
<h3>An Anwser</h3>
<p>My next discovery:  If I disable the daemon&#8217;s automatic starting (once again by taking the auto_start option out of /etc/pam.d/kdm) and remove my custom invocation from the startup file, it still starts automatically, but with different options than the auto_start version!  In fact, it starts with the options work.</p>
<p>It turns out that nm-applet and gnome-screensaver both automatically start gnome-keyring-daemon if it isn&#8217;t running.  Since nm-applet runs first, it starts up the daemon, and passes it a completely different set of options than the pam-invoked version.  Thanks for the consistency, gnome!</p>
<h3>A Problem</h3>
<p>Starting gnome-keyring-daemon manually or allowing nm-applet to start it still poses a problem: the daemon doesn&#8217;t die when I log out!  This means that, as I log in and out several times, useless instances of the daemon end up sitting around doing nothing.  Since the apps that talk to the daemon use $GNOME_KEYRING_SOCKET to do so, everything keeps working; but it&#8217;s cruft I&#8217;d rather not have.</p>
<h3>Elementary</h3>
<p>After following this circuitous path, I finally stumbled into the answer: it&#8217;s a <a href="https://bugzilla.redhat.com/show_bug.cgi?id=453880">known bug</a>.  It is actually related to the lack of a proper $DISPLAY getting set for gnome-keyring-daemon; it isn&#8217;t related to the passed in options at all.</p>
<p>At this point, I&#8217;m forced to fall back on a hack.  I&#8217;ve added the following to my ~/.fluxbox/startup, above the gnome-related apps:</p>
<p><code>killall gnome-keyring-daemon</code></p>
<p>I&#8217;ve also removed the auto_start option from /etc/pam.d/kdm.  Unfortunately, not launching the daemon with pam means that I can&#8217;t take advantage of the single sign-on feature provided by pam_gnome_keyring.  But until the bug is fixed, I guess this will have to be good enough.</p>
<p>(As for why I don&#8217;t use gdm, see <a href="http://stringofbits.net/2009/01/5-things-i-hate-about-fedora-10/">this post</a>)</p>
<h3>Update: a command explained</h3>
<p>If you look at the &#8211;help output for gnome-keyring-daemon (or, if you&#8217;ve applied my hack below, gnome-keyring-daemon-bin), you&#8217;ll see this output:</p>
<p><code>Usage:<br />
  gnome-keyring-daemon [OPTION...] - The Gnome Keyring Daemon</p>
<p>Help Options:<br />
  -?, --help                              Show help options</p>
<p>Application Options:<br />
  -f, --foreground                        Run in the foreground<br />
  -d, --daemonize                         Run as a daemon<br />
  -l, --login                             Use login password from stdin<br />
  -c, --components=ssh,keyring,pkcs11     The components to run</code></p>
<p>Anyone acquainted with Linux will understand the first two options, -f and -d, pretty intuitively.  You&#8217;ll note in my post above that my &#8216;working&#8217; option set included -f; this is because -f prints to standard out, allowing us to capture the GNOME_KEYRING_SOCKET and GNOME_KEYRING_PID variables that the daemon spits out.  However, when run in -d, these variable seem to get set correctly anyway.  Further, the -c option I used in my quest seems superfluous; the daemon defaults to using the keyring component.  I wanted to explain this since it wasn&#8217;t clear in the original post exactly why I bounced between options.  At the time, I was grasping at straws, and assigned a simple correlation (the different command-line options in use) to a causation (the daemon that started automatically, with the different options, failed to work correctly).</p>
<p>The option that had me baffled, though, was &#8211;login.  The information in the help output is cryptic, but I finally worked out its purpose; it allows single sign-on.  pam_gnome_keyring passes your login password to gnome-keyring-daemon, which uses it to unlock a special keyring called the login keyring.  This keyring can then be used to store the passwords to your other keyrings, so that when you log in, everything unlocks automatically.  Your system login doubles as your keyring authentication.</p>
<h4>Further Update: Eureka! (or: building a better hack)</h4>
<p>Based on a comment in the bugzilla entry for this problem, I have crafted a better (if more system-intrusive) hack.  I simply perform the following:</p>
<p><code>mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-bin<br />
touch /usr/bin/gnome-keyring-daemon<br />
chmod 755 /usr/bin/gnome-keyring-daemon<br />
cat > /usr/bin/gnome-keyring-daemon << EOF<br />
#!/bin/sh<br />
DISPLAY=":0.0" /usr/bin/gnome-keyring-daemon-bin "\$@"<br />
EOF</code></p>
<p>This hack creates a wrapper script that sets the $DISPLAY variable before running the keyring daemon.  Until this kdm bug is worked out, this hack performs beautifully.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=110" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/04/the-case-of-the-odd-networkmanager-behavior/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It is pitch black.  You are likely to be flamed by a fanboy.</title>
		<link>http://stringofbits.net/2009/01/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/</link>
		<comments>http://stringofbits.net/2009/01/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 05:53:44 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[stupid people]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=97</guid>
		<description><![CDATA[I feel the need to comment about this (and, subsequently, this and this).
First, a summary, for those who get a case of the tl;dr&#8217;s.  A woman bought a laptop to use for her coursework at a local college.  She accidentally bought a Dell laptop with Ubuntu on it.  When she realized her ISP&#8217;s setup disk [...]]]></description>
			<content:encoded><![CDATA[<p>I feel the need to comment about <a href="http://www.wkowtv.com/Global/story.asp?S=9667184&amp;nav=menu1362_8_6">this</a> (and, subsequently, <a href="http://www.wkowtv.com/Global/story.asp?S=9682258&amp;nav=menu1362_2">this</a> and <a href="http://addins.wkowtv.com/blogs/behindthenews/archives/84">this</a>).</p>
<p>First, a summary, for those who get a case of the tl;dr&#8217;s.  A woman bought a laptop to use for her coursework at a local college.  She accidentally bought a Dell laptop with Ubuntu on it.  When she realized her ISP&#8217;s setup disk wouldn&#8217;t work, she tried to get Dell to swap the laptop for one with Windows.  The Dell representative apparently convinced her to keep the one she had.</p>
<p>She claims that this problem, combined with a lack of Microsoft Office, forced her to withdraw from classes.  The local news ran the linked article; it is worth noting that the bottom portion (the part where the news agency contacted the college and Verizon, and everything got cleaned up) did not appear in the initial article.</p>
<p><span id="more-97"></span><br />
Needless to say, the Linux community (and the Ubuntu community in particular) exploded.  The article hit digg, slashdot, and reddit.  The angry letters and phone calls started pouring in to the news station (though they got tons of traffic, naturally).  More significantly, the woman in question was harassed on facebook.</p>
<p>This story shows mistakes from every party involved.  The Dell representative should have helped her switch to a machine she was more comfortable with.  The woman herself should have taken initiative, called Verizon and asked what she could do to get her connection working.  Alternately, what&#8217;s wrong with using another computer (say, at a local library) until you can get the laptop issue sorted out?  Dropping all your classes for the semester is overly drastic and melodramatic.</p>
<p>The worst perpetrators of stupidity here, though, are the Linux community members who not only lambasted and ridiculed this woman publicly on forums and blogs, but also attacked her personally on her Facebook account.  This is childish, pointless, and it paints the entire Linux community as anti-social assholes.</p>
<p>Unlike most groups, the Linux community IS Linux.  If a Star Wars fan blogs about how everyone who doesn&#8217;t know the difference between a Sith and a Dark Jedi is an idiot, the Star Wars franchise is not going to be damaged; there is a clear disparity between the creators (Lucasfilm et al) and the consumers (fans).  On the other hand, if a Linux fanboy blogs that everyone should know the intricacies of iptables configuration before being allowed on the Internet, this will color peoples&#8217; perception of Linux.</p>
<p>Why does this happen?  Because Linux is Free, open to the world.  Anyone can add to it.  The community and the product are intricately intertwined.</p>
<p>This is a false perception, though; in reality, the rabid fanboys who would harass a woman on Facebook are a completely different set of people than the assholes that argue fine technical points on <a href="http://lkml.org/">LKML</a>. (I&#8217;m using asshole here in its rare application as a compliment)  However, the impression that an outsider has looking in is that Linux is some wild, anarchistic (or maybe communist) creation.  This stems from the growing cultural knowledge that Linux was created by and for the people that use it.  This is not quite true.  Linux was created by and for developers and technology enthusiasts, true.  However, not every vocal member of the community actually contributes to Linux itself; only a fairly small subset of users are actively involved in improving the software.</p>
<p>I don&#8217;t mean to devalue the role of the community in development.  Community contributors are important, welcome, and numerous.  Bug submitters and other &#8220;active users&#8221; are vital to the strength of the open development model.  However, the active users aren&#8217;t even the people that we see evident in this article.  What we see here are fanboys:</p>
<blockquote><p>fanboy (n): Someone who is so obsessed with some subject or thing that they are blind to its faults and harass and deride anyone whose opinion differs.</p></blockquote>
<p>These are precisely the people that Linux does not need.  The community would be doing itself a favor by creating public distance from this subset of itself.  We need more rational, clear-headed people speaking out about the benefits of Linux.  Fanboys ranting and harassing people will get us nowhere.</p>
<div>I am aware that I haven&#8217;t offered any advice on <strong>how</strong> to make the fanboys go away, and that&#8217;s because I don&#8217;t have any.  I don&#8217;t know how to do it, or if it is even possible.  This is just a statement of a problem that I see; anyone with ideas, please share them.</div>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=97" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/01/it-is-pitch-black-you-are-likely-to-be-flamed-by-a-fanboy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 things I hate about Fedora 10</title>
		<link>http://stringofbits.net/2009/01/5-things-i-hate-about-fedora-10/</link>
		<comments>http://stringofbits.net/2009/01/5-things-i-hate-about-fedora-10/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 21:14:05 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=88</guid>
		<description><![CDATA[Every release of Fedora feels like a step in the wrong direction.  I don&#8217;t say this lightly &#8211; I use Fedora at work and at home; it is my primary operating system.  I have staunchly supported it in the face of critical Ubuntu fans for a while now.
First, a little background.  I switched to Fedora [...]]]></description>
			<content:encoded><![CDATA[<p>Every release of Fedora feels like a step in the wrong direction.  I don&#8217;t say this lightly &#8211; I use Fedora at work and at home; it is my primary operating system.  I have staunchly supported it in the face of critical Ubuntu fans for a while now.</p>
<p>First, a little background.  I switched to Fedora from a mixture of gentoo and slackware around the time I started my <a href="http://www.redhat.com">current job</a>, since it was far easier to keep track of one package management toolset, and several things about gentoo&#8217;s packaging system had started to irk me.  The current release of Fedora at the time was 7.  I have been using it since, usually upgrading to new releases (via a clean install) about a month after they release.</p>
<p>My needs are simple, but apparently elusive to Fedora.  I use fluxbox as my window manager.  I prefer to perform all of my system configuration from the command line.  My graphical application use is minimal (firefox, games, pidgin).</p>
<p>Let&#8217;s explore the problems I&#8217;ve noticed have started creeping in, starting with the release of fedora 8.  My solution/workaround for each problem is included, if I have one.  For what it is worth, I realize that some of these could be the result of 3rd-party packages (such as Nvidia&#8217;s proprietary drivers).  However, if any of these are the result of user error, then the solution should rightly be easy to find by searching documentation, which I have done extensively in every case.</p>
<p><span id="more-88"></span></p>
<h2>1. Pulseaudio</h2>
<p><em>Pulseaudio&#8230; I hate the word</em></p>
<p>This one heads the list because it&#8217;s the problem I&#8217;ve had to deal with most recently.  I have been lucky in that pulseaudio plays nicely with the sound cards on all 3 of my Fedora machines (others have been less fortunate).  However, I was stuck with audio far quieter than what I had grown used to in gentoo.</p>
<p><strong>Solution:</strong> I finally discovered that pulseaudio has its own volume settings, independent of the ALSA-level audio device.  You can adjust the hardware volume levels with either of these commands:</p>
<blockquote><p><code>alsamixer -Dhw:0<br />
alsamixer -c 0</code></p></blockquote>
<p>It would be nice if this were clearly documented somewhere.  There are some vague hints on <a href="https://fedoraproject.org/wiki/SoundTroubleshooting">this page</a>, which is what pointed me in the right direction.</p>
<p>Thankfully, pulseaudio is no longer quite so painful when dealing with apps that only talk to ALSA.  I noticed some popping in certain applications, though (Neverwinter Nights, for one).  pasuspender seems to work around this, but the fact that this is necessary is kludgy.</p>
<h3>2. GDM</h3>
<p><em>The thousand injuries of GDM I had borne as best I could; but when he ventured upon insult, I vowed revenge&#8230;</em></p>
<p>GDM in Fedora has been upgraded to the latest upstream from the gnome team.  The problem with this version of GDM is that it removes almost all of its configuration options.  They have crippled it thus <a href="http://live.gnome.org/GDM/2.22/Configuration">intentionally</a>, and while they claim the removed options were &#8220;obsoleted due to redesign&#8221;, it seems that some of the options were dropped to prevent users from doing stupid things.</p>
<p>This Lowest Common Denominator approach is fine for a default configuration, but it should always be possible to change the default behavior.  Removing the ability to customize it entirely is not only against the spirit of open source software and Linux, it is insulting to the users.  It feels as if the team responsible for GDM thinks they know better than I do when it comes to configuring my machine.</p>
<p>In my case, the default behavior that troubles me is the fact that GDM passes the +accessx option to X.  Gnome includes a daemon that can override the accessx behavior (namely, enabling sticky keys if you hold shift down too long).  KDE includes a similar tool.  Fluxbox, however, has none &#8211; it assumes (justly) that you can turn off the accessx option at the X11 level if you don&#8217;t want it.  The new GDM denies you this ability, however.</p>
<p><strong>Solution:</strong> Switched to KDM, which doesn&#8217;t seem to enable +accessx by default.  I tried XDM first, but it has SELinux errors and fails to launch fluxbox.  Also, KDM looks much nicer.  Alternately, I could have booted into runlevel 3 and then used startx, but I&#8217;ve become a fan of the graphical login prompt.</p>
<h3>3. Upstart</h3>
<p><em>The name says it all</em></p>
<p><a href="http://en.wikipedia.org/wiki/Upstart">upstart</a> is the new init system in fedora; a replacement for the aging sysVinit.  In theory, upstart is great &#8211; gives you much more granular control over what processes should happen at each runlevel, and may eventually replace /etc/init.d entirely.  In practice, however, it has a rather annoying problem: sometimes it fails to respawn the ttys when in runlevel 5.  This problem doesn&#8217;t seem to be present in runlevel 3, for whatever reason.</p>
<p><strong>Solution:</strong> no real solution at present, but you can work around it with <code>initctl start ttyX</code></p>
<h3>4. rsyslog</h3>
<p><em>Hey&#8230; Listen!</em></p>
<p>The traditional syslogd has been replaced with rsyslog, a much more powerful/configurable syslog daemon.  However, it seems to dump all kernel output to the console.  The default configuration doesn&#8217;t include any statements that should be logging to the console, so it could be caused by something else.  Either way, the problem is present.</p>
<p>You can test this from any fedora machine: it seems to happen on every F10 box I can find.  Just press Ctrl+Alt+F2, then plug in a USB flash drive.  This is annoying on its own, but is especially frustrating when combined with #5, below.</p>
<p><strong>Solution:</strong> none</p>
<h3>5. PCI-Express device errors</h3>
<p><em>Or How I Learned to Stop Worrying and Love X.org</em></p>
<p>On my PCI-Express video card, I receive constant error messages, both in messages and on the console (see #4, above).  These happen whenever the screen is cleared or switched to.  In other words, Ctrl+Alt+FX will generate one of these, sometimes two.  Running &#8216;less&#8217; generates the errors.  So does the &#8216;clear&#8217; command.  emacs and vi both trigger the error.  Each instance of the error takes up about 25% of the screen&#8217;s real estate.  This makes operating on the command line extremely difficult.</p>
<p><strong>Solution:</strong> None yet.  I suspect this may be related to the Nvidia drivers; in that case, a future update may fix these errors.  I&#8217;ll give Fedora the benefit of the doubt where I can.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=88" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/01/5-things-i-hate-about-fedora-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>An aside on Education</title>
		<link>http://stringofbits.net/2009/01/an-aside-on-education/</link>
		<comments>http://stringofbits.net/2009/01/an-aside-on-education/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 20:33:48 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[education]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=90</guid>
		<description><![CDATA[I first encountered Clay Burell on his blog Beyond School, where he had started a series of Unsucky English Lectures.  These posts were brilliant, engaging, and poignant, and I followed them to their tragically early conclusion. (Clay, if you&#8217;re reading this, pick those back up, man!)  It turns out that Beyond School was actually a [...]]]></description>
			<content:encoded><![CDATA[<p>I first encountered Clay Burell on his blog <a href="http://beyond-school.org">Beyond School</a>, where he had started a series of <a href="http://beyond-school.org/2008/08/26/gilgamesh1/">Unsucky English Lectures</a>.  These posts were brilliant, engaging, and poignant, and I followed them to their tragically early conclusion. (Clay, if you&#8217;re reading this, pick those back up, man!)  It turns out that Beyond School was actually a blog about revolutionizing education.  I just happened in while he was doing a special series.  I kept following his blog, though.</p>
<p>At any rate, Mr. Burell now has a new blog at <a href="http://education.change.gov">education.change.org</a>.  In particular, one recent post impressed me, and I wanted to increase its distribution, at least by the tiny amount that people actually view this blog :P</p>
<p><a href="http://education.change.org/blog/view/why_schoolwork_doesnt_have_to_suck_learning_20">Why Schoolwork Doesn&#8217;t Have to Suck</a></p>
<p>There&#8217;s some important ideas here.  The concept that our technology could (should, must) become the medium through which we engage in learning is as groundbreaking as it is obvious.  Enjoy.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=90" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2009/01/an-aside-on-education/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.com is the new .org</title>
		<link>http://stringofbits.net/2008/12/com-is-the-new-org/</link>
		<comments>http://stringofbits.net/2008/12/com-is-the-new-org/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 14:26:28 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=86</guid>
		<description><![CDATA[No, not an angry rant about proper gTLD usage.  Instead, this is more of a Public Service Announcement: silenceisdefeat, my favorite provider of life-long free shell accounts, has had their domain name taken hostage.  silenceisdefeat.org now redirects to an ebay auction for the domain name.  As a result, they can now be found at:
http://silenceisdefeat.com
I have [...]]]></description>
			<content:encoded><![CDATA[<p>No, not an angry rant about proper gTLD usage.  Instead, this is more of a Public Service Announcement: silenceisdefeat, my favorite provider of life-long free shell accounts, has had their domain name taken hostage.  silenceisdefeat.org now redirects to an ebay auction for the domain name.  As a result, they can now be found at:</p>
<p><a href="http://silenceisdefeat.com">http://silenceisdefeat.com</a></p>
<p>I have updated my previous link to their site (in <a href="http://stringofbits.net/2008/12/paranoid-security-establishing-a-connection-the-hard-way/">this article</a>) to reflect the change as well.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=86" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/12/com-is-the-new-org/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Self-indulgent musings on total knowledge strategy games</title>
		<link>http://stringofbits.net/2008/12/self-indulgent-musings-on-total-knowledge-strategy-games/</link>
		<comments>http://stringofbits.net/2008/12/self-indulgent-musings-on-total-knowledge-strategy-games/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 21:44:31 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[chess]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[hnefatafl]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=72</guid>
		<description><![CDATA[Total knowledge games are games in which all players involved have equal knowledge of the current state of the game, and the only factor that influences the game&#8217;s future state is the actions of the players.  Chess, Go, and tafl are three such games that I play periodically.
Recently, I pondered a fairly simple question: which [...]]]></description>
			<content:encoded><![CDATA[<p>Total knowledge games are games in which all players involved have equal knowledge of the current state of the game, and the only factor that influences the game&#8217;s future state is the actions of the players.  <a href="http://en.wikipedia.org/wiki/Chess">Chess</a>, <a href="http://en.wikipedia.org/wiki/Go_(game)">Go</a>, and <a href="http://en.wikipedia.org/wiki/Hnefatafl">tafl</a> are three such games that I play periodically.</p>
<p>Recently, I pondered a fairly simple question: which of these games is the most complex?  All of them are complex enough that new players have room to become stronger over time.  Skill in these games has been traditionally praised as a virtue by each game&#8217;s culture of origin.  So, which game provides the greatest depth as a topic of study?</p>
<p><span id="more-72"></span>Before I consider the differences in the level of complexity of these games, let&#8217;s look at how a few basic elements of the games compare.  This will give us a fuller understanding of the factors that contribute to the games&#8217; complexity.</p>
<h3>Symmetry</h3>
<p>Chess and Go have in common that they are symmetric games &#8211; both players have the same resources at their disposal, and seek the same goal.  In chess, the pieces for each player are arranged similarly at the start of the board, and each player tries to capture the other player&#8217;s king.  In Go, the board begins empty of pieces, and capturing territory is the goal for both players.  In both of these games, neither player has a handicap evenly matched opponents will have an equal chance of winning.</p>
<p>Tafl, on the other hand, is asymmetric.  One player, the defender, controls a king and his bodyguards, and tries to flee to one of the corners of the board.  His pieces begin the game arranged in the board&#8217;s center.  The attacker, on the other hand, has his pieces along the four sides of the board.  He also outnumbers the defender 2-1.  Tafl also favors the defender; if two equally skilled players play each other, the defender is nearly guaranteed victory.</p>
<h3>Board Size</h3>
<p>Tafl and chess are played on fairly small boards &#8211; 8&#215;8 for chess, and anywhere from 7&#215;7 to 13&#215;13 for tafl.  The most common tafl board sizes appear to be 9&#215;9 (Tablut) and 11&#215;11 (Hnefatafl).  I will be contemplating a hnefatafl board here, because that is the size on which I most commonly play.</p>
<p>Go, on the other hand, is played on a 19&#215;19 board. This means that, in general, far more moves are possible at any given time in Go.</p>
<h4>Spaces vs Intersections</h4>
<p>While we&#8217;re talking about boards, I will pause briefly to discuss spaces and intersections.  In Go, your pieces are played on the intersections of the lines.  In tafl and chess, your pieces reside in the spaces, or squares, between the lines.  This fundamentally makes no difference at all.  You could make a grid of 8&#215;8 intersections instead of 8&#215;8 spaces, and play chess on it.  It would feel unnatural, perhaps, but only because you would be accustomed to the other convention.  Likewise, you could play Go on a board of 19&#215;19 spaces.  In fact, some variants of tafl were played on a grid of intersections, such as Alea Evangelii, a tafl game played on a 19&#215;19 board (you could, in other words, use a modern Go board to play Alea Evangelii).</p>
<h3>Capturing</h3>
<p>Go requires a player to surround an opponent&#8217;s stones and &#8216;cut him off&#8217; from all open spaces.  Capturing, however, is not the point of the game, only a strategic element.  This is also fundamentally true of tafl and chess; the ultimate goal is to surround the king; the capturing move is not strictly necessary.  Tafl&#8217;s capture rules are less straightforward than chess; you must &#8216;flank&#8217; an opponent&#8217;s piece (place your pieces on opposite, orthogonal sides of the opposing piece) to capture it.  The king must be surrounded on all four sides (in most variants).</p>
<h3>Construction vs Destruction</h3>
<p>In chess and tafl, players begin the game with all of their pieces in place; pieces can be captured, but new pieces will never be added to the board.  In a sense, they are destructive games; the forms which are in play at the beginning can change and be eliminated, but nothing new ever appears in play.</p>
<p>By contrast, Go is a constructive game.  The board begins completely barren; players add pieces until the board is full of pieces surrounding empty territories.  Pieces can be captured, but the overall trend during play is toward a fuller board.</p>
<h2>Complexity</h2>
<p>So, how do these games compare to each other in terms of strategic complexity?  Go has a lot going for it in terms of complexity.  First, it is played on a large board, meaning there will always be more moves to consider.  In addition, the constructive nature of the game means it is legal to play in nearly any open space at any time.  This means that the number of possible moves in Go will always be much greater than the other two games.</p>
<p>Additionally, the strategic elements within Go are extremely intricate.  Opening moves can impact the later game dramatically, and individual &#8216;battles&#8217; (sequences of moves on a small section of the board) have countless patterns and scenarios that players must be comfortable with.  Capturing an opponent&#8217;s stones isn&#8217;t always a good idea; often, nothing prevents your opponent from immediately capturing even more of your stones (and thus gaining territory) in return.</p>
<p>By stark contrast, chess and tafl have a fairly small number of legal moves.  For example, in chess, there are only 20 possible moves on the first play.  The average number of possible moves for a given chess game is something in the range of 32.  Tafl provides more possibilities than chess, even with fewer pieces; since all tafl pieces can move any number of spaces orthogonally, the attacker (who plays first) has 116 possible opening moves.  The defender&#8217;s first move has 120 possibilities.  Go, by comparison, has 361 possible opening moves.</p>
<p>In terms of capture rules, it is not clear to me whether tafl&#8217;s capture mechanics, which are more involved than those of chess, make the game simpler or more complex than chess&#8217; straightforward captures.  In chess, the capture rules require you to keep track of more information, since each piece has a more complex influence on holding territory.  Go, however, is the clear winner here as well, as capturing can be extremely intricate &#8211; often when trying to capture a group, you may limit your own liberties and end up being captured yourself.  A significant portion of the game&#8217;s strategy involves creating arrangements of stones that cannot be captured.</p>
<p>Ultimately, my observations and subjective experience suggest that Go is the most complex of these games.  It has an amazing number of possible permutations, and a very simple ruleset that nevertheless lends itself to an immense number of factors that must be considered.</p>
<p>Between chess and tafl, the numbers seem to favor tafl.  The asymmetry,  larger board, and larger number of possible moves seem to make it more sophisticated.  However, as long as the game is skewed in favor of the defender, the complexity may mean very little in the end.  Mostly from subjective experience, I would estimate that tafl is the more numerically complex game, but this experience may be skewed by the fact that so many of the possible moves in chess have been so well mapped.  The complexity of tafl also depends heavily on the specific tafl game and board size.  Even subjectively, I can&#8217;t come to any real conclusion here.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=72" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/12/self-indulgent-musings-on-total-knowledge-strategy-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paranoid Security: Establishing a Connection the Hard Way</title>
		<link>http://stringofbits.net/2008/12/paranoid-security-establishing-a-connection-the-hard-way/</link>
		<comments>http://stringofbits.net/2008/12/paranoid-security-establishing-a-connection-the-hard-way/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 07:03:08 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=52</guid>
		<description><![CDATA[Recently, I was describing the personal setup I use to connect to my home machine over on watchingback (a group that has gone unfortunately silent).  This setup combines port-knocking (with one-time sequences), disk encryption, and passphrase-protected rsa keys.  Here&#8217;s a basic rundown of how it works from an end-user perspective (i.e., once everything is set [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I was describing the personal setup I use to connect to my home machine over on <a href="http://groups.google.com/group/watchingback/topics">watchingback</a> (a group that has gone unfortunately silent).  This setup combines <a href="http://en.wikipedia.org/wiki/Port_knocking">port-knocking</a> (with <a href="http://en.wikipedia.org/wiki/One-time_pad">one-time sequences</a>), disk encryption, and passphrase-protected rsa keys.  Here&#8217;s a basic rundown of how it works from an end-user perspective (i.e., once everything is set up):</p>
<p>First, the user (me) inserts a USB flash drive with an encrypted partition.  He mounts up the encrypted disk on a local machine (I&#8217;ll call this machine the &#8216;client&#8217; throughout this article), providing the necessary password, and runs a script called &#8216;callhome&#8217;.  He is prompted for his passphrase, and then gets a terminal session on his home machine (we&#8217;ll call this one the &#8217;server&#8217;).</p>
<p>Read on for details about this setup, and how to do it.</p>
<p><span id="more-52"></span></p>
<p>Warning: what follows is madness. It is overkill taken to an extreme.  I am describing a way you can take a very, very simple procedure (connecting remotely to a system), and make it exceedingly complicated, all for the benefit of a little added security.  Whether or not this security is worthwhile to you is, of course, your business.  In an age where our governments and fellow citizens are increasingly keen on everything from our shopping and reading habits to our credit card numbers, I personally feel that cautiousness is worth the effort.</p>
<p>It is madness.  I&#8217;m not convinced it isn&#8217;t justified madness.</p>
<p>This tutorial assumes you are running <a href="http://linux.org">Linux</a>, and that you are comfortable with the command-line interface and with networked computing in general (of course, you&#8217;re reading this on the Internet, so that&#8217;s a good start).  All of my examples will be <a href="http://fedoraproject.org">Fedora</a>-centric.  If you don&#8217;t use Fedora, you&#8217;ll need to figure out what the commands are for your distro.</p>
<p>So, how is this complex setup I describe different from just typing &#8220;ssh user@server&#8221;?  Well, first, the callhome script executes a portknocking sequence.  Until this sequence is done, ssh is closed on the server.  After the sequence, ssh is opened only for the IP address of the client, and only for a small time window.  The ssh connection must happen during this window.  The script initiates the ssh connection, which helps keep this secure.  In addition, each portknocking sequence is valid only once &#8211; the USB drive contains a list of all valid sequences, and the script is set up to only use each one once.</p>
<p>Next, ssh on our server is set up to <strong>only</strong> allow connections with public keys.  This means that even if an attacker knew the correct portknocking sequence, he would not be able to login with a password &#8211; he must have the private RSA key.  The private key is on our USB flash drive, which is encrypted.  The key itself is further encrypted with its own passphrase, so you still enter a password to connect home, the work to verify it is simply done on the local machine.  The passphrase is never sent across the Internet, even in an encrypted/hashed form.</p>
<p>There are some other nice features, including a &#8216;panic&#8217; portknocking sequence that will shut down the portknocking server itself, locking down the remote server completely.  This panic script is stored on a machine to which I have a shell account.  If the USB flash drive is ever lost/stolen, I can get to any machine with an ssh client, log in to the shell account, and kill the knock server.  New connections to the server then become impossible.</p>
<p>This setup is useful for more than just a terminal connection home.  You can forward X through it and run graphical apps from home (this is typically going to be very slow, however).  You can forward any ports you like, so that you can route web traffic through this ssh tunnel and prevent people on your network from watching where you go on the web.  Anything you can do with a normal ssh connection can be done here.  Later I&#8217;ll demonstrate some examples that I use.  So, that&#8217;s the setup.</p>
<p>Now I will outline exactly how to do it, one step at a time.  You might want to grab a snack and use the bathroom &#8211; this is going to be a long trip.</p>
<h2 id="part_1">Part 1: Dynamic DNS</h2>
<p>Before you can call home to your server, it helps to have a name to call it by.  However, you can&#8217;t use a traditional hostname if your machine is on a broadband network because your IP address may periodically change.  Dynamic DNS (or DynDNS) was created to solve this problem.  A daemon runs on your server that periodically checks the IP address of the server and sends it to a DynDNS server.  This DynDNS server then updates a DNS record whenever your IP address changes.  I use <a href="http://dyndns.com">DynDNS.com</a>.  It&#8217;s free and easy.  Just choose a hostname for your machine, then install and configure the <a href="http://cdn.dyndns.com/ddclient.tar.gz">ddclient</a> software.  You can get instructions on configuring ddclient for DynDNS.com <a href="https://www.dyndns.com/support/kb/using_ddclient_with_dyndns_services.html">here</a>.</p>
<h2 id="part_2">Part 2: Configuring SSH</h2>
<p>On the server, find your sshd configuration file (on Fedora, this is at /etc/ssh/sshd_config) and ensure the following options are set to these values:</p>
<blockquote><p><code>RSAAuthentication yes<br />
PubkeyAuthentication yes<br />
AuthorizedKeysFile     .ssh/authorized_keys<br />
PasswordAuthentication no<br />
ChallengeResponseAuthentication no</code></p></blockquote>
<p>Now, restart your ssh daemon:</p>
<blockquote><p><code>service sshd restart</code></p></blockquote>
<p>Now, try to ssh into your machine (you can just do &#8217;ssh user@localhost&#8217;).  You&#8217;ll get denied immediately, without even seeing a password prompt.  This is what we want.  Next, we create the ssh key that we will use.  Run:</p>
<blockquote><p><code>ssh-keygen -t rsa -b 4096</code></p></blockquote>
<p>When prompted, specify a path <strong>other</strong> than the default.  Your home directory is a good choice &#8211; we will be moving id_rsa to the USB flash drive later.  Also, make sure you specify a good passphrase &#8211; if the USB flash drive is compromised, the strength of this passphrase will buy you time to lock down the server.  Now you have 2 files in your home directory, id_rsa and id_rsa.pub.  id_rsa is your encrypted, private RSA key.  id_rsa.pub is the public key that matches this private key.  Copy the contents of id_rsa.pub into ~/.ssh/authorized_keys.  This step will allow the private key to connect to the server as this user.</p>
<h2 id="part_3">Part 3: portknocking</h2>
<p>There&#8217;s still one significant security concern: unknown vulnerabilities.  OpenSSH is a complex program, and almost certainly still contains a vulnerability or two that haven&#8217;t been discovered.  To combat getting hit with that latest exploit, we can hide the presence of ssh from the outside world completely.  This is the beauty of portknocking.  The premise of portknocking is that the ssh port is firewalled off unless a specific sequence of ports are first pinged, in order.  This doesn&#8217;t add a lot of security by itself; an attacker can simply sniff the portknock sequence, then repeat it to open the same port.  Normally, portknocking will only deter attackers who don&#8217;t know you have ssh open.</p>
<p>However, the portknocking server we are going to use supports one-time sequences.  With this configuration, the correct knock sequence changes after each knock.  The server has a list of sequences to use, and we will also keep this list with us on the USB flash drive.  Before we begin configuring portknocking, make sure you have firewalled off port 22.  There are two possible network setups we will consider:</p>
<ul>
<li>You have a router between the server and the Internet.  This router passes ssh traffic to your server, and the router acts as the firewall that blocks ssh access.</li>
<li>The server is connected directly to the Internet.  Local firewall rules on the machine are blocking ssh access.</li>
</ul>
<p>In the first instance, you need to be able to install a portknocking server on the router; additionally, the firewall rules needed will be more complicated, and will vary based on how your router is configured.  My example here assumes the second case: that the server itself is listening to the knocks (i.e. it is directly connected to the Internet).  The first case is discussed in <a href="#appendix_c">Appendix C</a>.   Install <a href="http://www.zeroflux.org/cgi-bin/cvstrac.cgi/knock/wiki">knockd</a>.  Once installed, you&#8217;ll need to configure /etc/knockd.conf.  For now, I&#8217;ll present a basic configuration (we&#8217;ll add some more stuff to this later):</p>
<blockquote><p><code>[options]<br />
logfile = /var/log/knockd.log</code></p>
<p><code>[ssh]<br />
one_time_sequences = /etc/knockd/ssh<br />
seq_timeout = 10<br />
tcpflags = syn<br />
start_command = /usr/sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT<br />
cmd_timeout = 5<br />
stop_command = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT</code></p></blockquote>
<p>In /etc/knockd/ssh, you need to have sequences of numbers to use as one-time sequences.  Each entry in the list should be formatted like this:</p>
<blockquote><p><code>1,2,3,4,5</code></p></blockquote>
<p>There is a space at the beginning of the line; this is helpful because knockd will comment out each line as it uses it by placing a &#8216;#&#8217; at the beginning of the line.  The numbers you generate should ideally be between 1024 and 65535; I generate my numbers with a script similar to the following:</p>
<blockquote><p><code>#!/usr/bin/perl<br />
$num_keys = 50;<br />
@data = `d20diceroller --nototals "5d65535[reroll&lt; 1024][repeat $num_keys]"`;</code></p>
<p>foreach (@data)<br />
{<br />
next if (/:/);</p>
<p>s/ $//;<br />
s/ /,/g;<br />
s/^/ /;</p>
<p>print;<br />
}</p></blockquote>
<p>This script uses a program I created, d20diceroller, to generate its random numbers.  That tool is part of the d20tools package, and can be found at its <a href="http://d20tools.sourceforge.net">sourceforge page</a>.  The subversion repository is currently recommended.  Now that you have the one-time sequences, you must start the knock daemon.  You&#8217;ll most likely want to add this to an init script (such as /etc/rc.local):</p>
<blockquote><p><code>knockd -i eth0 &amp;</code></p></blockquote>
<p>&#8216;eth0&#8242; here should be replaced with whatever the name of your Internet-facing network interface is.  Now, portknocking is configured and running.  We only need to configure the USB flash drive, and we&#8217;re done with the basics.</p>
<h2 id="part_4">Part 4: USB Flash drive setup</h2>
<p>First, you need a partition on the flash drive that will be dedicated as the encrypted partition.  This can be one small partition, or it can be the entire disk.  I set aside the last 10 MB of the disk, myself.  Use fdisk, parted, or another partitioning tool to get the disk to your liking (remember, re-partitioning can erase everything you have on the drive.  Be careful).  Once the disk is partitioned, you must create a secure volume, then create a filesystem on that volume.  As root, run the command:</p>
<blockquote><p><code>cryptsetup create secure /dev/sda1</code></p></blockquote>
<p>Where &#8216;/dev/sda1&#8242; is the device name of the partition that should be the encrypted partition.  Enter your desired passphrase when prompted.  This should be a <strong>different</strong> passphrase than you used with the ssh key, ideally.  Now, you should have a device file named /dev/mapper/secure.  This is the encrypted pseudo-device Linux has created to represent your partition.  Create a filesystem on it.  I recommend a DOS filesystem because of its portability (an ext3 filesystem will retain the UID/GID and permissions for each file, which can get really confusing when moving from system to system and using users with different UIDs):</p>
<blockquote><p><code>mkdosfs -F 16 /dev/mapper/secure</code></p></blockquote>
<p>Now mount /dev/mapper/secure.  On it, create a directory called .ssh.  Copy the id_rsa file you created earlier into this directory, and create a file called &#8216;config&#8217; that looks like this:</p>
<p><code><small><br />
</small></code></p>
<blockquote><p><code>Host your.server.address home<br />
User your_user_name<br />
UserKnownHostsFile .ssh/known_hosts<br />
HostName your.server.address<br />
Port 22<br />
IdentityFile .ssh/id_rsa<br />
Compression yes</code></p></blockquote>
<p>Also, take a copy of the sequences you created earlier (in /etc/knockd/ssh) and copy them to a file called &#8217;sequences&#8217; in this .ssh directory.  You need to modify this sequences file so that the commas are converted to spaces.  You can do that with this command:</p>
<blockquote><p><code>perl -p -i -e 's/,/ /' sequences</code></p></blockquote>
<p>Now, create a script in the root of the encrypted partition with these contents:</p>
<blockquote><p><code>#!/bin/sh<br />
SERVER_NAME=your.server.name<br />
WD=$(echo $0 | perl -pe 's/^(.*)\/.*?$/\1/')<br />
cd $WD<br />
chmod 600 $WD/.ssh/id_rsa &amp;&gt; /dev/null<br />
sequence=`head -n 1 $WD/.ssh/sequences`<br />
[ -z "$sequence" ] &amp;&amp; echo "Error: No more knock sequences" &amp;&amp; exit 1<br />
for i in $sequence;<br />
do nc -z $SERVER_NAME $i; done<br />
sleep 1<br />
ssh -F $WD/.ssh/config home &amp;&amp; sed -i '1d' $WD/.ssh/sequences</code></p></blockquote>
<p>This script will execute the next portknocking sequence in the list, then automatically ssh into the server.  It uses the config file in our local .ssh directory, so the username and key file are already specified.  Now, to unmount the USB flash drive&#8217;s encrypted partition, you can execute these commands:</p>
<blockquote><p><code>umount /dev/mapper/secure<br />
cryptsetup remove secure</code></p></blockquote>
<p>That&#8217;s it!  Now, all you need to do use the system is set up the partition as an encrypted volume, mount the encrypted filesystem, run the &#8216;callhome&#8217; script, and enter your ssh passphrase.  Extra-secure connection home, for the truly paranoid.  The only upkeep required is to periodically generate a new list of sequences when you run low.  This system is a bit more complicated than just using an ssh command, but I discuss how to automate the connection procedure on systems you use a lot in <a href="#appendix_b">Appendix B</a>.</p>
<p>But wait, there&#8217;s more!  What happens when The Bad Guys steal our USB flash drive and start frantically trying to decrypt it?  Enter the panic knock.</p>
<h2 id="part_5">Part 5: Disaster recovery</h2>
<p>A scenario, if you will.  <em>You&#8217;re sitting at your desk, your uber-secure connection home humming along, letting you chat on IRC without your boss being any wiser.  You lock your X session and get up to grab some coffee.  You get back to your desk, and glance over at your workstation, expecting to see protruding from the front your faithful USB flash drive, fast friend these many years, steadfast companion against the dangers of revealing your personal life&#8217;s details to those who would kill for it.  But it&#8217;s gone.  Someone has taken it.  A quick survey of your fellow workers (and by &#8220;survey&#8221; we mean &#8220;threaten them with violence so they know you&#8217;re serious&#8221;) reveals that they don&#8217;t have it.  No one saw anyone come near your desk.</em></p>
<p><em>There is only one explanation: Identity Theft Ninja.  Trained in the secluded mountains of Japan from birth, these versatile agents of stealth can smell a USB flash drive that allows a connection to someone&#8217;s home server from a league distant.  You never had a chance.  Hope is not lost, however!  Because the drive is encrypted, and the ssh key is further encrypted, you have an advantage.  The Identity Theft Ninja have powerful computers for cracking encryption schemes, but it will still take time.</em></p>
<p>Basically, when you notice your USB drive is missing, you can execute your panic script.  The panic script should live on a shell server; something you can get to from any machine.  I recommend <a href="http://silenceisdefeat.com">silenceisdefeat</a>.  On the shell server, you simply have a script called &#8216;panic&#8217;.  It can look like the following:</p>
<blockquote><p><code>#!/bin/sh<br />
SERVER_NAME=your.server.name<br />
sequence=("1" "2" "3" "4" "5")</code></p>
<p>for i in ${sequence[@]};<br />
do nc -z $SERVER_NAME $i;<br />
done</p></blockquote>
<p>Most shell servers will not give you execute privileges, but because this is a script, you can simply type &#8217;sh panic&#8217; to execute it.  On the knock server, we have a special action to perform when someone executes that particular sequence.  Add this to /etc/knockd.conf:</p>
<blockquote><p><code>[shutdown]<br />
sequence = 1,2,3,4,5<br />
seq_timeout = 10<br />
tcpflags = syn<br />
command = killall knockd</code></p></blockquote>
<p>By the way, <strong>do not</strong> actually use the sequence 1 2 3 4 5.  Use a random sequence, but include a number that will never appear in your normal portknocking sequences.  The &#8216;out of phase&#8217; number guarantees you never accidentally shut down the server, and keeping the sequence random guarantees that a portscan or other malicious attack won&#8217;t lock you out down your server.  It would be a good idea to change this sequence every time you use it, as well, to prevent an attacker from repeating the sequence to frustrate you.</p>
<h2 id="appendix_a">Appendix A: Beyond SSH &#8211; forwarding other traffic</h2>
<p>You can take advantage of the power of SSH to create an extremely secure tunnel for almost any data; you aren&#8217;t limited to running commands on your remote machine.  Perhaps you want to browse the web through the encrypted tunnel, so other users on the network can&#8217;t see that you&#8217;re really shopping on newegg instead of getting work done.  In that case, you could add this to your .ssh/config file:</p>
<blockquote><p><code>DynamicForward 8137</code></p></blockquote>
<p>This creates a SOCKS proxy that you can route traffic through.  Simply configure your web browser to use a proxy at localhost, port 8137.  If you want to tunnel certain sites through the proxy but not others (and you use Firefox), check out <a href="http://foxyproxy.mozdev.org/">FoxyProxy</a>.  Check the command &#8216;man ssh_config&#8217; for more options you can put in the .ssh/config file.</p>
<h2 id="appendix_b">Appendix B: Mounting your encrypted volume made easy</h2>
<p>You need root access to create and mount an encrypted volume.  If you use the same few computers all the time (and you have root access on them), you can simplify your life.  First, use the &#8216;visudo&#8217; command and add a line to the end of the sudoers file like this:</p>
<blockquote><p><code>your_user ALL=(root) NOPASSWD: /sbin/cryptsetup</code></p></blockquote>
<p>This will allow you, as a normal user, to execute &#8216;cryptsetup&#8217;, which lets you create and remove encrypted volumes.  Next, add a line like this to /etc/fstab:</p>
<blockquote><p><code>/dev/mapper/secure /mnt/secure auto noauto,user,umask=077 0 0</code></p></blockquote>
<p>This will allow users to mount /dev/mapper/secure once it is created.  The umask guarantees other users on the system can&#8217;t see our files, which would compromise the ssh key.  Don&#8217;t worry, we can still prevent another user on the system from hijacking our mount; that comes next.  Now, create two files in /usr/local/bin, called &#8217;secureon&#8217; and &#8217;secureoff&#8217;.  In secureon, put:</p>
<blockquote><p><code>#!/bin/sh<br />
sudo cryptsetup create secure /dev/sda1 &amp;&amp; \<br />
mount /mnt/secure</code></p></blockquote>
<p>sda1, of course, is whatever the device name of the encrypted partition is.  You can use udev or hal to ensure this is always a consistent name.  secureoff looks like this:</p>
<blockquote><p><code>#!/bin/sh<br />
umount /mnt/secure &amp;&amp; \<br />
sudo cryptsetup remove secure</code></p></blockquote>
<p>Make both of these scripts executable (&#8216;chmod 755 /usr/local/bin/secureo*&#8217;).  Now you can simply run &#8217;secureon to create and mount the secure volume (you&#8217;ll be prompted for the encryption passphrase), and &#8217;secureoff&#8217; when you&#8217;re finished.</p>
<h2 id="appendix_c">Appendix C: Behind a router</h2>
<p>The last case we will consider is the complex but extremely common situation where you have one device acting as a router.  This changes the iptables rules we need to use with the knockd server.</p>
<p>First, you need to have a router that  you can install Linux software on.  In other words, your router must be running Linux.  If you have a computer acting as your router, this is probably no problem for you.  If you have a consumer broadband router, this may be more difficult.  You can get Linux firmware for certain models of broadband router, however.  Several broadband router distributions exist; I use <a href="http://openwrt.org/">OpenWRT</a>; it is easy to install new software with OpenWRT, and <a href="http://www.dd-wrt.com/wiki/index.php/Knockd">knockd is available for it</a>.</p>
<p>The exact rules you will need are going to depend on your particular iptables setup, but to forward a port you will need two rules:  one in the filter table&#8217;s FORWARD chain and one in the nat table&#8217;s PREROUTING chain.  The approach that I recommend is to add the rule in the FORWARD chain permanently, and use knockd to add and remove the PREROUTING rule.  This simplifies the knockd configuration, and allows you to use the FORWARD chain as a handy reference for what forwards are possible.</p>
<p>For example, let&#8217;s say you have a machine at 10.10.9.18, and the knock daemon will open SSH to this machine.  First, you want to add this firewall rule permanently:</p>
<blockquote><p><code>iptables -A FORWARD -p tcp --dport 22 -d 10.10.9.18 -j ACCEPT</code></p></blockquote>
<p>Put that in your router&#8217;s iptables configuration.  If your router is running Fedora, put this line (minus &#8216;iptables&#8217;) in /etc/sysconfig/iptables.</p>
<p>If you&#8217;re using OpenWRT, I would suggest using the forwarding_wan chain instead of the FORWARD chain.  Also, on OpenWRT you can put this line in /etc/firewall.user.</p>
<p>The start_command and stop_command lines in /etc/knockd.conf will add and remove the PREROUTING rule, like so:</p>
<blockquote><p><code> start_command = /usr/sbin/iptables -t nat -A PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22<br />
stop_command = /usr/sbin/iptables -t nat -D PREROUTING -s %IP% -p tcp --dport 22 -j DNAT --to 10.10.9.18:22</code></p></blockquote>
<p>For OpenWRT, use the prerouting_wan chain instead of the  PREROUTING chain.</p>
<p>One great thing you can do with a router is use different knock sequences to forward SSH to different servers.  If you have several machines on your network, you can simply add additional sections to knockd.conf (and additional rules in the FORWARD chain).  As long as they use different knock sequences, you can overload port 22 to forward to whichever machine you need.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=52" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/12/paranoid-security-establishing-a-connection-the-hard-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A New Hope</title>
		<link>http://stringofbits.net/2008/11/a-new-hope/</link>
		<comments>http://stringofbits.net/2008/11/a-new-hope/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 03:23:39 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[meta]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=17</guid>
		<description><![CDATA[I once had a blog on livejournal, titled slashsplat.  This blog didn&#8217;t see very many posts, because I had to log out of my personal journal to log in to it.  So I decided that a blog hosted somewhere other than livejournal would be a good idea.
That&#8217;s the purpose of this site.  It will be [...]]]></description>
			<content:encoded><![CDATA[<p>I once had a blog on livejournal, titled <a title="My old blog" href="http://slashsplat.livejournal.com">slashsplat</a>.  This blog didn&#8217;t see very many posts, because I had to log out of my personal journal to log in to it.  So I decided that a blog hosted somewhere other than livejournal would be a good idea.</p>
<p>That&#8217;s the purpose of this site.  It will be somewhat more general; the goal of this blog is to discuss geek culture and everything that may mean to me:  programming, technology, gaming (video and table-top), and whatever else springs to mind.  However, each post will try to be an entity separate from myself; personal matters that I feel like ranting about will not appear here.  I have a personal journal for that, after all.</p>
<p>Anyone who feels like reading this little piece of the Internet is welcome to come along for the ride.  If it&#8217;s just an exercise in self-indulgence, then so be it.</p>
<p>(Below this post, you may notice I&#8217;ve included all of the posts from slashsplat as well.  Those few posts span a lot of changes in my life, so the tone will vary as you venture farther back.)</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=17" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/11/a-new-hope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nintendo and the Homebrew Arms Race</title>
		<link>http://stringofbits.net/2008/11/nintendo-and-the-homebrew-arms-race/</link>
		<comments>http://stringofbits.net/2008/11/nintendo-and-the-homebrew-arms-race/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 21:51:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[video games]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=16</guid>
		<description><![CDATA[When I purchase a piece of hardware, it is mine to do with as I wish.  This is a long-held understanding.  If I buy a piece of clothing, I can have it altered.  If I buy a car, I can change the tires.  If I buy a television, I can kill myself trying to screw [...]]]></description>
			<content:encoded><![CDATA[<p>When I purchase a piece of hardware, it is mine to do with as I wish.  This is a long-held understanding.  If I buy a piece of clothing, I can have it altered.  If I buy a car, I can change the tires.  If I buy a television, I can kill myself trying to screw with its insides.</p>
<p>It might void the warranty, it might put my life at risk or potentially damage the thing I&#8217;ve purchased, but it is my right as a consumer.</p>
<p>Nintendo takes a different view on the issue.  Owners of the Wii have long been able to employ a simple buffer overflow exploit in <a href="http://en.wikipedia.org/wiki/Twilight_Princess">Twilight Princess</a> to run custom code.  This exploit, called the <a href="http://wiibrew.org/wiki/Twilight_Hack">Twilight Hack</a>, allows a user to install, among other things, an application called the <a href="http://hbc.hackmii.com/">Homebrew Channel</a>, which looks like any other Wii channel and lets you run other custom code without using the Twilight Hack again.  It&#8217;s the gaming console equivalent of installing a new stereo in your car.</p>
<p>Since the hack was made public, Nintendo has been trying to thwart it.  They have, to date, released three firmware updates that included code targeted to stop the Twilight Hack.  The most recent update succeeded at stopping it completely &#8211; it appears to detect the hacked save files and delete them, both on boot and whenever you insert an SD card.</p>
<p>So, all of this is standard fare.  Whenever a console launches, homebrewers will make it run custom code.  The console manufacturer will release an update to prevent this.  The homebrewers will work around it.  This process will continue in an escalating cycle.</p>
<p>However, Nintendo has delivered a low blow here.  Along with the System Menu 3.4 update, they changed their <a href="http://www.nintendo.com/consumer/systems/wii/en_na/privacy.jsp">terms of service</a>.</p>
<div style="margin-left: 40px;"><em><br />
We may without notifying you<strong>,</strong> download updates, patches, upgrades and similar software to your Wii Console and may disable unauthorized or illegal software placed on your Wii Console&#8230;</em></div>
<p>Now, that&#8217;s pretty cold &#8211; deleting our custom software?  Come on Nintendo, all I want to do is play videos on my Wii!  Also, the first time a fully automated background firmware update breaks something, the angry calls are going to pour like rain.  Power outage in the middle of a night-time firmware update?  Too bad!  But it gets worse&#8230;</p>
<div style="margin-left: 40px;"><em>If we detect unauthorized software, services, or devices, your access to the Wii Network Service may be disabled and/or the Wii Console or games may be unplayable. </em></div>
<p>Okay, at this point I feel it is crucial to point out a couple of things.  First, these quotes come from two documents, the Wii Network Service Privacy Policy and the Wii Network Service EULA.  Both of these documents are required, not to use the Wii in general, but to use the Wiiconnect24 services (the Shop channel, Nintendo channel, and Nintendo&#8217;s other online content channels).  So, to use their network, you agree that they may <strong>disable your system completely</strong>.  This means two things:</p>
<p>1. You can perfectly legally run hacked code on a Wii that does not use Wiiconnect24.</p>
<p>2. You grant Nintendo the right to break the law (destruction of private property) if you choose to use the Wiiconnect24 service.</p>
<p>Now, according to a lawyer I know, a contract cannot override criminal law, even if signed in full knowledge as opposed to clicked-through (the enforceability of click-through EULAs is still up for debate in the US).  So this clause is, by necessity, unenforceable.</p>
<p>So why is it there?  Nintendo has a juggernaut legal team, famed for its ruthlessness.  They can bankrupt any individual consumer with the legal proceedings necessary to challenge them, and it is unlikely that this will raise enough stink to get a class-action suit started.</p>
<p>I used to have some respect for Nintendo.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=16" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2008/11/nintendo-and-the-homebrew-arms-race/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux on the Desktop &#8211; a partial solution</title>
		<link>http://stringofbits.net/2007/07/linux-on-the-desktop-a-partial-solution/</link>
		<comments>http://stringofbits.net/2007/07/linux-on-the-desktop-a-partial-solution/#comments</comments>
		<pubDate>Tue, 24 Jul 2007 18:56:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=14</guid>
		<description><![CDATA[Lately, I&#8217;ve read a number of &#8220;Windows user tried Linux for a week and hated it, and this is why&#8221; articles.  Then, while holding back the urge to scream during a Windows XP install, it hit me: we&#8217;re holding a double standard, here.
In the last year, whenever someone talks about &#8220;whether Linux is ready [...]]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve read a number of &#8220;Windows user tried Linux for a week and hated it, and this is why&#8221; articles.  Then, while holding back the urge to scream during a Windows XP install, it hit me: we&#8217;re holding a double standard, here.</p>
<p>In the last year, whenever someone talks about &#8220;whether Linux is ready for the desktop&#8221;, the complaints that always crop up revolve around the fact that a user can&#8217;t throw in a Linux install CD, click next a few times, and have a fully functional desktop environment in half an hour.  Several things plague these proverbial users: the lack of mp3 support is probably the most problematic now, as is the lack of 3d graphics support.  The complaints further, er&#8230; complain, that the user has to know what she is doing to enable/install all of these components.</p>
<p>What most people overlook, though, is that installing Windows is no cakewalk, either.  Windows ships with almost no real video or audio hardware support &#8211; everything must be downloaded from 3rd party websites, and more importantly, the user has to *know* what vendor website to go to, and how to navigate the vendor&#8217;s site (with some vendors, that can be a real pain!).</p>
<p>So now, let&#8217;s be fair.  I&#8217;m taking a Windows XP install, out of the box, and comparing it side-by-side with an Ubuntu Linux install.  Okay, here goes.</p>
<div style="font-size: 14pt;">Ubuntu Linux</div>
<div style="font-weight: bold;">No mp3 support</div>
<p>As a user, I have to install several non-free packages, which means changing my available repositories and running a few commands (or using the graphical tool).  If I prefer the less-questionably-legal route, I would purchase <a href="http://www.fluendo.com/">Fluendo</a> (28E for their entire set of plugins, with perputual updates, as of this writing.  Still about 1/4 the price of Windows&#8217; most basic version), and follow their instructions to install it.</p>
<p>Of course, I also have to *know* about these options.  A quick google search (&#8220;MP3s in Ubuntu&#8221;) and a forum gives me the answer, in step-by-step format.</p>
<div style="font-weight: bold;">No 3d graphics acceleration</div>
<p>This is even easier.  All we need is to install the nvidia-glx or xorg-driver-fglrx packages, depending on the card.  They&#8217;re also in the restricted repository, but we&#8217;ve already enabled it previously.  If we hadn&#8217;t, the google search &#8220;3d graphics in Ubuntu&#8221; gives us the correct answer immediately.</p>
<div style="font-weight: bold;">No flash player</div>
<p>Another quick google search turns up the answer, as always with step-by-step instructions.</p>
<p>And, that&#8217;s it.  Everything else I need to do to be productive is already provided by Ubuntu: web browser, office suite, multimedia software.  Note: I never had to restart Ubuntu during this whole process.</p>
<div style="font-size: 14pt;">Windows XP</div>
<div style="font-weight: bold;">No audio</div>
<p>First, I have to figure out the name of my audio chip, which Windows doesn&#8217;t tell me.  All Windows will say is &#8220;Unknown Multimedia device&#8221;.  By booting Linux and running lspci, I discover it&#8217;s a C-Media chip, and go to their website.  I have to give them the exact chip model number, and they give me a driver to download.  I have to restart Windows.</p>
<div style="font-weight: bold;">No 3d graphics acceleration</div>
<p>Again, the video controller is just called an &#8220;Unknown display adapter&#8221;.  Foreknowledge tells me I have an Nvidia Geforce 6600 GT.  I go to Nvidia&#8217;s website (much easier to use than C-Media was), and get the driver.  I have to restart Windows.</p>
<div style="font-weight: bold;">No flash player</div>
<p>Well, this one installs automatically.  Doesn&#8217;t even need a restart!  1/3 isn&#8217;t bad, I suppose.</p>
<div style="font-size: 14pt;">The Conclusion</div>
<p>What&#8217;s the point of this exercise?  Am I trying to say Windows is teh sux0r?  No, that&#8217;s not my message today.  I could extoll the myriad problems with Windows that make Linux a better option (spyware, viruses, openness and all the benefits thereof, etc), but that&#8217;s not the point.</p>
<p>The point is this:  when it comes to installation, Linux and Windows are roughly equivalent in complexity.  Linux has its installation issues; so does Windows.  They tend to break roughly even, in my experience, although Linux has a much more readily available support structure in the form of community forums.  But both OSes require a lot of user knowledge in order to get up and running.  They assume you already know how to do things.  What they really assume, underneath, is that</p>
<div style="font-weight: bold;">a technical person is doing the install.</div>
<div style="font-size: 14pt;">The Solution</div>
<p>Most Windows users never install their OS; some technician installs it, either OEM at a factory, or at the local computer shop, or the in-law programmer who gets drafted for technical work (ahem&#8230;).  Linux users have seldom known this luxury; instead, whenever someone talks about Linux, they assume that the end user is doing the install.</p>
<p>The solution is to treat Linux installation the way we treat Windows installation.  Someone who Knows What They Are Doing &#8482; sets up the OS and delivers it to the end user.  One practical advantage for the Linux community is that all the time spent on fancy installers could be channeled elsewhere (not to say we don&#8217;t like our hardware auto-detection, et al.  But a curses-based menu is just fine, thanks).  Make Linux installation work like OS installation always has before: technical users install their own OS, everyone else leaves it to the techs.</p>
<p>At least don&#8217;t hold us to a double standard.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=14" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2007/07/linux-on-the-desktop-a-partial-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Then They Fight You</title>
		<link>http://stringofbits.net/2007/05/then-they-fight-you/</link>
		<comments>http://stringofbits.net/2007/05/then-they-fight-you/#comments</comments>
		<pubDate>Mon, 14 May 2007 05:56:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=12</guid>
		<description><![CDATA[Microsoft threatens to sue the entire FOSS community
Where have I seen this kind of threat before?  Hmm&#8230; SCO, anyone?  Is MS really desperate enough for that?  SCO only sued IBM because they were losing money in copious amounts, flirting with bankruptcy.  Vista seems to be the straw that&#8217;s breaking Microsoft&#8217;s back.
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://money.cnn.com/magazines/fortune/fortune_archive/2007/05/28/100033867/index.htm?section=money_latest">Microsoft threatens to sue the entire FOSS community</a></p>
<p>Where have I seen this kind of threat before?  Hmm&#8230; SCO, anyone?  Is MS really desperate enough for that?  SCO only sued IBM because they were losing money in copious amounts, flirting with bankruptcy.  Vista seems to be the straw that&#8217;s breaking Microsoft&#8217;s back.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=12" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2007/05/then-they-fight-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2^8</title>
		<link>http://stringofbits.net/2007/05/28/</link>
		<comments>http://stringofbits.net/2007/05/28/#comments</comments>
		<pubDate>Wed, 02 May 2007 04:35:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[freedom]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=11</guid>
		<description><![CDATA[09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
That is all.
 ]]></description>
			<content:encoded><![CDATA[<p>09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0</p>
<p>That is all.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=11" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2007/05/28/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Decentralizing Second Life</title>
		<link>http://stringofbits.net/2006/11/decentralizing-second-life/</link>
		<comments>http://stringofbits.net/2006/11/decentralizing-second-life/#comments</comments>
		<pubDate>Fri, 10 Nov 2006 04:23:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[video games]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=9</guid>
		<description><![CDATA[So, I&#8217;ve been thinking about Second Life, and it occured to me that it&#8217;s being done entirely the wrong way.  Don&#8217;t get me wrong; I enjoy SL, and have no qualms with the experience itself.  It&#8217;s the underlying scheme it&#8217;s built on that bothers me: one company controlling all the servers, one company [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;ve been thinking about <a href="http://www.secondlife.com">Second Life</a>, and it occured to me that it&#8217;s being done entirely the wrong way.  Don&#8217;t get me wrong; I enjoy SL, and have no qualms with the experience itself.  It&#8217;s the underlying scheme it&#8217;s built on that bothers me: one company controlling all the servers, one company responsible for keeping everything running smoothly.  It seems to me that all technologies built on that model eventually fail on the Internet, while distributed technologies (Web, email, usenet) thrive.</p>
<p>To that end, I&#8217;ve been thinking about how Second Life could be successfully decentralized, without adversely affecting the experience that everyone has come to know and love.  I&#8217;ve identified key elements of the user experience that would be difficult to decentralize, and possible ways to handle them.  First, though, we&#8217;ll talk about the basics; how could decentralization even work.</p>
<p>First, LL releases the code for the Second Life server.  Now, anyone who wants to can host a Second Life sim/sims of their own on a server.  A central repository would keep track of the existing sims, in a vaguely similar fashion to DNS (see The Grid, below).  This would allow Second Life to grow without bound, with sims run by a multitude of companies and even home users.</p>
<p>So, how do we keep that Second Life experience without the centralized monolith of Linden Labs?</p>
<p><strong>Economy</strong><br />
First and most importantly, the Second Life economy must be preserved.  The economy has become the most crucial element to the experience; the ability to use real money, diluted down to a virtual quantum, to purchase other users&#8217; custom created content.  This breaks down into two sub-problems:</p>
<p>a) Managing the money.  The most likely way to do this would be to set up a &#8220;bank&#8221;, wherein a single host (or several different hosts) manages all of the banking transactions.  I&#8217;m thinking basically a system like paypal, where you buy L$ (&#8220;Linden Dollars&#8221;, Second Life&#8217;s currency) from the bank, or sell $L back to the bank for real currency.  Each SL server would use this central bank system to check a user&#8217;s account balance, and make withdrawals/deposits, with proper confirmation on the part of the user, naturally.  A public/private key system to ensure the user actually sent the confirmation could prevent abuse here, so no worries on that score.  The SL bank could even be controlled by Linden Labs, as this would be a lot easier to handle than the entire grid, and still give them opportunity to have a strong stake in their creation.</p>
<p>b) Protecting Intellectual Property.  This is a tricky problem, and the single hardest element to decentralizing SL.  Since a huge portion of the money in SL is traded for users&#8217; creations, there must be a way to prevent them from being stolen.  Under a decentralized scheme, when a user rezzes an object on a sim, all the data for that object (textures, sounds, scripts) would necessarily be available to the owner of that sim.  The most obvious solution I can find for this is to keep the object data elsewhere, and have a rezzed object be a pointer to that data.  The advantage is that compiled scripts, raw texture data, and sound files stay on a secure server independent of their rezzed location.  But where is this mystical server?  I see two options here: either the data is on another sim, perhaps the user&#8217;s &#8220;home sim&#8221; (see User Accounts, below), or the data is in a central &#8220;asset server&#8221; (essentially the way SL works right now).  Using the former approach, the client would have to make tons of connections to different servers to get all the data.  Under the latter, the asset server would have to be extremely load-tolerant and robust, and all the data is stored by the same group of people, whose ethical integrity the SL user base would have to trust implicitly.  Since both of these are flaws in the *existing* Second Life system, however, it is acceptable for the hypothetical exercise we&#8217;re attempting here.  Also, under either system the sim owner&#8217;s creations could be stored on-sim for lower lag.</p>
<p>One other solution would be to create some DRM scheme that encrypts this data until it reaches the client.  Of course, in all of these cases the client could be modified to steal the data.  However, here we again reach the fact that these flaws are already inherent in SL, and there&#8217;s no easy way around them.</p>
<p><strong>The Grid</strong><br />
The ability to bring up a map and scroll around, or teleport instantly to another part of the world, is an exciting part of SL, and another crucial part of the SL experience.  Fortunately, the Internet already has a great system that we can build on &#8211; DNS and hyperlinking.  We simply define 2 kinds of link:  &#8220;landmarks&#8221; and &#8220;neighbors&#8221;.  Each sim can have 4 neighbors, and neighbors must mutually agree to be neighbors (for a neighboring to work between sim A and B, A would have to set B as a neighbor and vice versa).  The neighboring agreements would be stored in a central server system, modelled on DNS.  A few recursive calls to this system and each sim can cache a portion of the overall grid map.  Want a private island?  Simply don&#8217;t neighbor your sim with any others.  This creates user-level &#8220;peering agreements&#8221; that could create a more logical terrain (snowy areas linked together, etc) even if the landscape does shift from time to time.</p>
<p>The other kind of link would work just like landmarks in the current SL system.  Pretty self-explanatory, except this system would make &#8220;click to teleport&#8221; objects a necessity, finally.</p>
<p>If a user searches for a sim on the map, the client can grab that sim&#8217;s cache of neighbors, and display more of the grid.  The client could be configured to keep any amount of that information cached locally, for a more immersive experience.</p>
<p><strong>User Accounts</strong><br />
There are two ways to handle user accounts: a centralized account server, or a sim-based account system.  Under a centralized server, all accounts would be handled by, say, LL.  This simplifies the system greatly, and aids in managing the asset server.  With &#8220;home sims&#8221;, you&#8217;d have a system similar to Jabber, where user accounts are essentially user@home_sim.  I believe the centralized system will work best, given that the asset server system seems to be the most logical way to do things.</p>
<p><strong>Instant Messages</strong><br />
Well, LL is currently planning to re-implement the IM system in Jabber, so we&#8217;re pretty much covered there :P</p>
<p>So, in summary, we have a system that uses a centralized server for accounts and user-created assets, as well as a DNS-like neighboring system to create the world map, but grids are controlled by individuals, and hosted by companies just like web servers are now.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=9" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2006/11/decentralizing-second-life/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Related rant</title>
		<link>http://stringofbits.net/2006/09/related-rant/</link>
		<comments>http://stringofbits.net/2006/09/related-rant/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 04:52:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=7</guid>
		<description><![CDATA[I have a Free/Open Source software related rant posted over on my personal journal.  It&#8217;s vaguely related to this journal&#8217;s purpose, hence the link.  Enjoy :)
 ]]></description>
			<content:encoded><![CDATA[<p>I have a Free/Open Source software related <a href="http://darksidex.livejournal.com/39338.html">rant</a> posted over on my <a href="http://darksidex.livejournal.com">personal journal</a>.  It&#8217;s vaguely related to this journal&#8217;s purpose, hence the link.  Enjoy :)</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=7" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2006/09/related-rant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technophobia</title>
		<link>http://stringofbits.net/2006/08/technophobia/</link>
		<comments>http://stringofbits.net/2006/08/technophobia/#comments</comments>
		<pubDate>Sat, 26 Aug 2006 05:31:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=5</guid>
		<description><![CDATA[I have recently realized why there are so many computer illiterate people running around.  It&#8217;s not that people are simply stupid &#8211; that&#8217;s a grossly judgemental answer that many of my fellow geeks unfortunately arrive at.  That&#8217;s not it at all, because computer illiteracy reaches into technical fields.  I know several computer [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently realized why there are so many computer illiterate people running around.  It&#8217;s not that people are simply stupid &#8211; that&#8217;s a grossly judgemental answer that many of my fellow geeks unfortunately arrive at.  That&#8217;s not it at all, because computer illiteracy reaches into technical fields.  I know several computer science professors that simply can&#8217;t use technology newer than 5 years old.</p>
<p>So, what causes this, if not simply &#8220;they&#8217;re dumb&#8221;?  Fear.  Technology is mysterious; most people, when confronted with something unfamiliar, are uncomfortable.  It feels like some delicate piece of magic; if they touch it too hard, it might shatter.</p>
<p>The consequence of this fear is that, once gripped by it, people start assuming they *can&#8217;t* learn anything about computers; it&#8217;s too arcane.  So, when presented with technical terms or ideas, they stumble over them.  If the technophobe stopped to think about the idea they are grappling with, they&#8217;d probably figure it out pretty quickly.  But their mind won&#8217;t do that, computers are &#8220;too complicated&#8221; for anyone like them to figure out.</p>
<p>An example:  USB flash drives.  Even most technophobes know what floppy disks are, but when you tell them this is similar, except it connects to that rectangular plug on the side of their computer, they give a blank stare.  They can&#8217;t comprehend it because it&#8217;s new.</p>
<p>A better example:  If presented with two products that very clearly do the same thing, but are made by different companies, the technophobe will invariably ask &#8220;what&#8217;s the difference between these two?&#8221;  If you showed them a Dirt Devil and a Hoover, they would have no such problem, but computers are *mysterious*, afforded a special class of untouchability.</p>
<p>So, to all you technophobes out there:  Stop being afraid of the computer.  I promise it won&#8217;t bite.  Engage your mind and really *listen* when computer jargon floats by.  Make intuitive leaps; even if they&#8217;re wrong, they&#8217;ll eventually point you in the right direction.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=5" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2006/08/technophobia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming: The theory</title>
		<link>http://stringofbits.net/2006/08/programming-the-theory/</link>
		<comments>http://stringofbits.net/2006/08/programming-the-theory/#comments</comments>
		<pubDate>Tue, 22 Aug 2006 13:14:00 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://stringofbits.net/?p=4</guid>
		<description><![CDATA[One of my biggest problems with the IT community, both in amateur programmers and prospective employers, is the following question:  &#8220;So, what programming languages do you know?&#8221;  This implies that learning a language is an extremely difficult task, and collecting languages like trophies is somehow a worthy pursuit.
A programming language is a tool. [...]]]></description>
			<content:encoded><![CDATA[<p>One of my biggest problems with the IT community, both in amateur programmers and prospective employers, is the following question:  &#8220;So, what programming languages do you know?&#8221;  This implies that learning a language is an extremely difficult task, and collecting languages like trophies is somehow a worthy pursuit.</p>
<p>A programming language is a tool.  A skilled craftsman isn&#8217;t good at her trade because she knows how to use a given set of tools; anyone can learn that.  Rather, true skill comes from knowing how to *apply* the tools.  The fundamental concepts behind programming are the skills on which we should be focusing.</p>
<p>This applies to academia as well.  The language you use to teach students, especially the first language they encounter, *is* important.  I&#8217;m not about to advocate &#8220;teaching languages&#8221; like Pascal, though.  I think it&#8217;s important to choose a real-world language, with all the pitfalls and caveats of a real-world language, as a student&#8217;s first language.  At the same time, it should be a language with the features available to demonstrate all the fundamental concepts in programming.  A language that doesn&#8217;t support recursion would be a Bad Choice, for example.</p>
<p>So, when someone (a peer or a hopeful programmer-to-be) asks me &#8220;what languages do you know?&#8221;, I won&#8217;t respond &#8220;Well, I know C, C++, Java, perl, php, xhtml/xml/css (if you count those), lisp, prolog, LotusScript, Javascript, LSL&#8230;&#8221; etc.  Instead, I&#8217;ll say &#8220;I&#8217;ve used a number of languages, but the key thing is that I know how to learn any language.&#8221;  When an employer asks, I suppose I&#8217;ll have to say &#8220;Well, I know @languages&#8230;&#8221;.  Then, though, I might add &#8220;&#8230;but I consider the fundamental concepts behind programming languages to be more important, because mastering those means I can learn to get around in any language given a week or two of study.&#8221;</p>
<p>In summary:  Learning a programming language is trivial, once you know the fundamental concepts of programming.</p>
 <img src="http://stringofbits.net/wp-content/plugins/feed-statistics.php?view=1&post_id=4" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://stringofbits.net/2006/08/programming-the-theory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
