<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Moshe'z</title>
	<atom:link href="http://moshez.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://moshez.wordpress.com</link>
	<description>Where Moshe Z knows your name</description>
	<lastBuildDate>Thu, 26 Jan 2012 17:48:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='moshez.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Moshe'z</title>
		<link>http://moshez.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://moshez.wordpress.com/osd.xml" title="Moshe&#039;z" />
	<atom:link rel='hub' href='http://moshez.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Why programmers are concerned about copyright law [Addendum]</title>
		<link>http://moshez.wordpress.com/2012/01/26/why-programmers-are-concerned-about-copyright-law-addendum/</link>
		<comments>http://moshez.wordpress.com/2012/01/26/why-programmers-are-concerned-about-copyright-law-addendum/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 17:48:35 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=697</guid>
		<description><![CDATA[As we saw in the last edition, programmers are concerned about copyright law because the only way to universally enforce copyright law would be to take away all universal Turing machines and make sure that we cannot control them. How bad would that be? The previous episodes focused on laws of math (generality of computation) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=697&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As we saw in the last edition, programmers are concerned about copyright law because the only way to universally enforce copyright law would be to take away all universal Turing machines and make sure that we cannot control them. How bad would that be?</p>
<p>The previous episodes focused on laws of math (generality of computation) and physics (quantum mechanics makes it easy to build general purpose computers). Now we concentrate on laws of economics in the industrial age. In the beginning of the industrial age, factories lowered the cost of goods dramatically from before &#8212; a textile factory is much more efficient than a tailor making suits, and so it is much cheaper to clothe ourselves. However, as factories evolved, it became more and more important to drive the cost even lower &#8212; whereas before the competition was with other tailors, now the competition was with other factories. So, economies of scale and efficient production lines developed. Soon after that, supply chain management and moving factories to the most cost-efficient places were developed.</p>
<p>Let&#8217;s say that you want to make T-shirts with political slogans. You&#8217;ve got your slogan writers, huddled and coming up with good slogans. They&#8217;re a sunk cost &#8212; you&#8217;ll pay them the same no matter how many T-shirts you make, or how much they cost. Now you build a big factory to make T-shirts, and print slogans on them. The company next door specializes in T-shirts with band logos. They build a big factory to make T-shirts and print logos on them. Someone realizes there is money to be made in this scenario &#8212; build a factory to manufacture T-shirts, and send them in large crates to places that will print stuff on them. Because their factory is bigger, their cost for making T-shirts are lower, and they pass some of the savings onto you, the political slogan company. In turn, you pass some of the savings onto your customers, and everyone is happier.</p>
<p>Lesson: When economies of scale hit, you want to try and buy standard components for the product you manufacture.</p>
<p>Now suppose you build a car. The anti-lock brake system need to figure out when the car is sliding, and start &#8220;pumping&#8221; the brake. You can build a system that will contain gyroscopes that attach to some handle that pulls a wire that pumps the brake. Or, you can</p>
<ul>
<li>Buy an accelerorometer</li>
<li>Buy a general purpose chip</li>
<li>Write software for this chip, based on input from the accelorometer</li>
<li>Connect this software to a motor that controls the brake</li>
</ul>
<p>Note that in this scenario, we source some standard parts. Even though the parts are more complicated, it turns out that we save a lot of money by using standard chips and accelerometers. Note that putting the software on the chip is just copying it to some standard storage device &#8212; extremely cheap. ABS brakes become cheaper, and people die less. Overall, a good thing.</p>
<p>The same sort of logic causes a lot of things that used to be done with handles, levers and pulleys to be done with a general purpose chip and some software. Your car is full of them. Your microwave has some. Your television has some. Each of those devices is basically a computer connected to some strange peripherals (brakes, microwave-rays or screens). In a world with strong copyright regulations, those devices&#8217; software are locked to us, <em>even though we own the device</em>. Where darkness goes, evil deeds covered by the darkness soon follow. The police in Evil Regime Country wants to make sure nobody can run from them. They mandate all cars sold in ERC must have, in their software, a special switch that when a certain bluetooth signal is sent (many cars nowadays have computers connected to bluetooth receptors), the software controlling the automatic gear system makes sure the car will not go over second gear. If the ERC police are smart about using this signal, nobody will ever know.</p>
<p>In a world with strong copyright protection, big corporations control your life &#8212; and they are corruptible, and if darkness holds, corrupt.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/697/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/697/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/697/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=697&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2012/01/26/why-programmers-are-concerned-about-copyright-law-addendum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Why programmers are concerned about copyright law [Part 2 of 2]</title>
		<link>http://moshez.wordpress.com/2012/01/20/why-programmers-are-concerned-about-copyright-law-part-2-of-2/</link>
		<comments>http://moshez.wordpress.com/2012/01/20/why-programmers-are-concerned-about-copyright-law-part-2-of-2/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 17:36:02 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=691</guid>
		<description><![CDATA[[A lot of the ideas in this edition awe a lot to Cory Doctorow. The responsibility for any mistakes or omissions are still mine.] Recapping the previous episode: It&#8217;s easy to define a system that is as powerful as any other computational system (Turing complete) It&#8217;s impossible to say what any computation does (Rice&#8217;s theorem) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=691&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>[A lot of the ideas in this edition awe a lot to <a href="http://craphound.com">Cory Doctorow</a>. The responsibility for any mistakes or omissions are still mine.]</p>
<p>Recapping the previous episode:</p>
<ul>
<li>It&#8217;s easy to define a system that is as powerful as any other computational system (Turing complete)</li>
<li>It&#8217;s impossible to say what any computation does (Rice&#8217;s theorem)</li>
<li>You can use bits (0s and 1s) to encode any sort of data &#8212; music, text or anything else.</li>
</ul>
<p>In this episode, I will have a lot more to say about bits. Before I delve into bits, though, I want to talk about computers. While abstract systems that do computations abound, most modern computers are fairly similar. The theoretical computational system they are built to resemble are so-called &#8220;<a href="http://en.wikipedia.org/wiki/Von_Neumann_machine">Von Neuman Machines</a>&#8220;. A modern computer has lots of peripherals, but strip away the peripherals and you are left with:</p>
<ol>
<li>A &#8220;microchip&#8221; which implements instructions like &#8220;Add Register1 and Register2 and put the Results in Register3&#8243;</li>
<li>Memory &#8212; mapping of &#8220;addresses&#8221; (index numbers) to &#8220;values&#8221;</li>
<li>Instructions on the microchip of the sort &#8220;Treat register 1 as an address, and fetch the value there into register 2&#8243;</li>
</ol>
<p>The exact instruction set that the microchip implements depends on the type, but ultimately, as we saw before, it does not matter too much &#8212; all computational systems are equivalent. What is important is &#8220;Moore&#8217;s Law&#8221;, of which many variants exist but ultimately says that:</p>
<ol>
<li>Microchips can perform more calculations per second every year.</li>
<li>The amount of memory available for a given price keeps growing.</li>
</ol>
<p>An important computer peripheral, which almost all computers have a variant of, is a storage device. That ranges from a magnetic hard drive to a micro-SD card. All that is important, for our purposes, about those is:</p>
<ol>
<li>Accessing them is slower than memory</li>
<li>They are bigger (have more addresses) than memory for the same price [a lot more -- frequently 10x or 30x]</li>
<li>They grow bigger for the same price every year</li>
</ol>
<p>Another important computer peripheral is the network card. Networks connect computers to each other.</p>
<p>Now, let&#8217;s remember something we said earlier &#8212; there is no way to reliably detect any sequence of 0s and 1s that encodes a computation that we do not like &#8212; say, a Turing machine outputting a fanfiction about Micky Mouse having sex with Pluto. Therefore, if a network card allows you to send two distinct messages [if it only allows you to send one message, it's kind of a sucky network card], you can send some &#8220;illegal&#8221; Turing machine encoding. Moreover, you will be able to store this illegal Turing machine faster and more cheaply every year.</p>
<p>So as an inescapable conclusion of (1) The math (b) Moore&#8217;s law we see that the law cannot be enforced, and it costs less and less every year to evade this law. The laws of the universe (such as how easy it is to use Quantum Mechanics to implement computation on the stuff that is abundant on every ocean beach, or Rice&#8217;s theorem) care nothing for Walt Disney or a starving artist &#8212; they are simple there, immutable and unforgiving, and humans must learn to deal with them.</p>
<p>One way to deal with them would be to &#8220;follow the money&#8221;: enforce the law only when someone is breaking it for corporate-level gain. This is not the way the legal system has gone through. Instead, they turned to <a href="http://www.salon.com/2002/08/28/0wnz0red/">God</a> &#8212; &#8220;Crypto. Really good, standards-defined crypto&#8221;.</p>
<p>So to understand what transpired, it is important to understand the basics of cryptography. From the beginning of time (as humans count time, I guess), people have communicated with each other &#8212; &#8220;Look, Ug, I found an antelope and killed it. Help me eat it?&#8221; Not long afterwards, eavesdropping begun &#8212; &#8220;Hey, everyone, Ung has an antelope.&#8221; The next level was to use codes &#8212; &#8220;Look, Ug, I found a You-know-what and you-know-what-ted it. Help me you-know-what it?&#8221;, and so the battle begun.</p>
<p>Codes, like in the example above, have to balance two issues. The person to whom they are intended must be able to decipher them (Ung better hope Ug will get the right message). The person to whom they are <em>not</em> intended for must not be able to decipher them (or once again, the whole village will know about the antilope). Fast-forward to Greek times, Caeasar had the eponymous cipher, based on shifting every letter in the alphabet by a certain amount and the Nazis had Enigma. Word to the wise: use neither of those, as they both have been &#8220;broken&#8221;. &#8220;Broken&#8221; is a term cryptographers use to say &#8220;the eavesdropper can read the messages which are not intended for them&#8221;. Cryptographers spend a lot of time trying to figure out how to read those&#8230;</p>
<p>But back to the basics: In computer-based cryptography, we have a secret, S. S can be considered, like everything else a computer handles, as a certain sequence of bits. For cryptography to work, two parties have to pre-agree on S. (Side note: I will not be covering public-key cryptography here.) Then, we must be able to compute the &#8220;encryption&#8221;: a computation that takes M, a message, and calculates a function that depends on M and S. Then we must be able to compute &#8220;decryption&#8221;: a function that takes the encrypted message, E, and S, and returns to us M. Next, it should be impossible (or at least, very hard), to compute M from E without S.</p>
<p>How do we know that something is &#8220;very hard&#8221;? Well, if we have a guess for S, we can check that the decryption gives us a plausible message. How hard is it to guess S? Returning to the quotation at the beginning of the section, &#8220;standards-based crypto&#8221; is usually at least 128 bits of S (also known as the &#8220;key size&#8221;). That means that there are 2 to the power of 128 options. It is largely agreed that the smallest time-frame relevant for computation is the time it crosses a photon (light particle) to cross a hydrogen atom. A hydrogen atom is about 10**-11 meters long. The speed of light is about 10**8 meters per second, which means it takes more than 10**-20 seconds, which is more than 2**-70 seconds. Thus, if we have 2**128 options, we need more than 2**58 seconds. 2**30 seconds is more than a year, so it will be more than 2**28 years, which is about 32 million years. I used various approximations above, but the conclusion still stands &#8212; and more and more modern crypto uses 256-bit sized keys, which is not quite the heat death of the universe, but the point still stands: you cannot guess and hope to win. However, it turns out to be an open problem whether <em>any</em> question where you can easily verify guesses (the formal name for that is NP) is &#8220;hard&#8221; (the formal name for &#8220;easy&#8221; problems is P). By open, I mean that many computer scientists have tried tackling this problem over the last 50 years, with no success (and little progress).</p>
<p>This means, in particular, we cannot know that any cryptographic computation is really &#8220;good&#8221;. However, what we can do, and the second part of why &#8220;really good&#8221; is followed by &#8220;standards-based&#8221;, is to ask really smart people to try and solve a cryptographic problem. If they can&#8217;t, after trying really hard, we assume that the problem cannot be solved, and we used it as our encryption mechanism.</p>
<p>In modern times, the names &#8220;Ug&#8221; and &#8220;Ung&#8221;, perfectly good though they may be, have fallen into disuse. Modern cryptographers usually talk about &#8220;Alice&#8221; and &#8220;Bob&#8221; wanting to transmit messages, and &#8220;Eve&#8221; wanting to listen to them surreptitiously.</p>
<p>So here is an example of a cryptographic system: if you buy a DVD in the store, it is encrypted with a special key. When you buy a DVD player in the store, is contains the key. Your DVD player is a computer, with special software that decrypts the DVD, with a special key, and then plays it. So Alice, which is the Hollywood studio, encrypted the movie contents. Then Bob, the DVD, decrypts it. Bob, to play the DVD, must have the key. You bought the DVD, so there is nothing stopping you from opening up the DVD player, and taking the key, is there?</p>
<p>Well, there are two things. Once is simple: Hollywood, before giving the DVD maker the key, make sure that the DVD player is hard to &#8220;tamper&#8221; with. The DVD maker must put the key in a special chip, glued to the microchip, and that self-destructs if people tamper with it. As you can imagine, creative people have found ways to defeat that self-destruction. And so, Hollywood convinced the US government to pass a law called &#8220;Digital Millenium Copyright Act&#8221;. The DMCA says that</p>
<ol>
<li>It is illegal to tamper with the DVD that you bought and get the key out.</li>
<li>It is illegal to tell someone the key that you dug out of the DVD.</li>
<li>It is illegal to tell someone how to tamper with the DVD to get the key out.</li>
<li>It is illegal to tell someone where to find instructions on how to tamper with the DVD, or how to get the key.</li>
</ol>
<p>You might have noticed that 2-4 are restrictions on speech. There are <a href="http://en.wikipedia.org/wiki/Illegal_number">numbers that are so illegal</a>, that not only are you not allowed to write them on a piece of paper and give them to your friend, but if someone spray-painted them on a building, you are not allowed to tell anyone where that building is. Whether you&#8217;re allowed to tell them where they can find a map with the building starred in it is, I believe, still up for debate.</p>
<p>The incredulity continues as you find songs on You Tube and Flag images that encode illegal numbers. This means that certain songs and flags are now illegal. In fact, it very well might be that the Wikipedia page on &#8220;Illegal numbers&#8221; is already illegal, since it contains data that can allow recovery of these numbers. I wish I were kidding, but I am not.</p>
<p>I, personally, am not a copyright extremist. I am not committed to abolish copyright. However, I think that understanding the math and physics of computation are important, because otherwise <em>we end up making songs illegal</em>. When Hollywood claims that copyright infringement might cause jobs lost, and that this necessitates stronger copyright law, we should first ask &#8220;Will this make singing songs illegal?&#8221;</p>
<p>This is why programmers are concerned about copyright law &#8212; because we understand all of the above. I hope, after reading this, you are also concerned!</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/691/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/691/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/691/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=691&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2012/01/20/why-programmers-are-concerned-about-copyright-law-part-2-of-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Why programmers are concerned about copyright law [Part 1 of 2]</title>
		<link>http://moshez.wordpress.com/2012/01/13/why-programmers-are-concerned-about-copyright-law-part-1-of/</link>
		<comments>http://moshez.wordpress.com/2012/01/13/why-programmers-are-concerned-about-copyright-law-part-1-of/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 17:50:23 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=687</guid>
		<description><![CDATA[Welcome to a new experiment. I am going to try and explain why programmers tend to be concerned (one way or another) about copyright law, to the level where we compare it to slavery or tyranny. This is not going to be easy, since I intend this to be readable by people who are not [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=687&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to a new experiment. I am going to try and explain why programmers tend to be concerned (one way or another) about copyright law, to the level where we compare it to slavery or tyranny. This is not going to be easy, since I intend this to be readable by people who are not programmers, and who never programmed. I am going to start from the very beginning, and it&#8217;s going to take a while.</p>
<p>Before we even start, I would like to point out <a href="http://lesswrong.com/lw/kg/expecting_short_inferential_distances">an excellent description for why we usually expect explanations to be simpler</a> then they really are. Please do read this. I&#8217;ll wait, really. If you think you do not need to read it, that&#8217;s actually evidence that you do &#8212; you expect my explanation to be simpler than it is, and that you do not need that bit of background knowledge&#8230;</p>
<p>Welcome back! One important concept introduced in the article linked above is &#8220;Word of Power&#8221;. (If you didn&#8217;t read it, now is the time to fix that issue&#8230;) I will try to introduce the new concepts using Words of Power, saying the word, and then linking it to the power behind it.</p>
<p>The first Word of Power will be &#8220;Universal Turing Machine&#8221;. You may remember a previous post of mine about <a href="http://moshez.wordpress.com/2010/06/01/alan-turing">Alan Turing</a>, one of the greatest giants on whose shoulders we have the privilege to be standing on. But I want to start by talking about another great giant, <a href="http://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29">John McCarthy</a>. McCarthy wrote a paper with the somewhat unassuming name, <a href="http://www-formal.stanford.edu/jmc/recursive/recursive.html">Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I</a>. A more appropriate title would have been &#8220;paving the way forward for programming for the next 50 years&#8221;, you see. What McCarthy did in the paper was to lay down a simple explanation of a system for defining computation. Nowadays, a lot of computation is done, appropriately, on electronic computers. Before we had those, however, &#8220;computer&#8221; was a job title of a person who applied computation rules to symbols on paper to get results &#8212; much like the rules we learned in primary school for doing long multiplication.</p>
<p>In both sense of the word &#8220;computer&#8221;, the goal is the same: apply rules to manipulate symbols. McCarthy defined a specific set of rules to manipulate symbols that he called &#8220;Lisp&#8221;. Lisp used S-expressions (short for &#8220;symbolic expressions&#8221;) to define computations. Read this sentence over again, because it might be the most important sentence in here: even though Lisp was a set of rules to manipulate S-expressions, those S-expressions define <em>other computations</em>. If you only learned to manipulate S-expressions, someone could write an S-expression that did, say, long multiplication. Then, if you manipulated the S-expression for long multiplication followed by S-expressions representing numbers, you would <em>do long multiplication</em>. Now comes the fun part &#8212; you could even <em>write the rules for manipulating S-expressions using S-expressions</em>. You might think that for this to work, the rules for manipulating S-expressions would be really complicated. This is not true &#8212; you can see the <a href="http://www-formal.stanford.edu/jmc/recursive/node3.html">manipulation rules here</a>. Sure, it&#8217;s a bit long, but doesn&#8217;t look like more than you needed to learn to do arithmetic, right?</p>
<p>Well, what use would rules for manipulating S-expressions when already know how to manipulate S-expressions? Maybe very little, if not for a few other thing. I hope you have seen a demonstration of the <a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life">game of life</a>, once upon a time. If you haven&#8217;t, I recommend that you read the wikipedia article. With 4 simple rules, much much simpler than McCarthy&#8217;s S-expression rules, much is possible. How much? Well, the proof is long and difficult, but mathematicians have found a Game of Life configuration that will <em>manipulate S-expressions</em>. So if you only knew to manipulate squares on graph paper according to the rules of the Game of Life, seemingly easier than manipulating S-expressions, we could just give you a (pretty hefty) Game of Life that would cause you to manipulate S-expressions. Wait, but manipulating S-expressions lets you do arithmetic, right? So you could do arithmetic too!</p>
<p>Wait, what about arithmetic? Well it turns out, if you just know how to add 1 to numbers, and do a bunch of other <a href="http://en.wikipedia.org/wiki/%CE%9C-recursive_function#Definition">trivial things</a> (like substitute numbers for other numbers), we can give you a instructions that will let you manipulate the Game of Life. Or other instructions, that will manipulate S-expressions. It turns out that if you can do interesting enough computations, it doesn&#8217;t matter a whole bunch what you know to do &#8212; you can find an initial input (S-expression, Game of Life configuration, or arithmetic instructions) that will let you do anything. Anything? Well, not quite!</p>
<p>Another interesting result (called &#8220;Rice&#8217;s Theorem&#8221;) is that you cannot write an S-expression (or any of the other things) to take any S-expression (or any of the other things) and say anything interesting about what it does to any input. Notice that I didn&#8217;t say &#8220;respectively&#8221;, and didn&#8217;t mean to &#8212; you can&#8217;t make an S-expression that will take any Game of Life configuration, and will say anything interesting about what it does. You can write S-expressions that will take some S-expressions (or &#8230;) and say something interesting about them &#8212; but not <em>any</em> S-expression (or &#8230;).</p>
<p>What has all this to do with our friend, Alan Turing? Well, Turing invented the original thing that stands for &#8220;&#8230;&#8221;, and he called it a Turing machine. A Turing machine has an internal state, and reads from and writes to a tape. The interesting thing about a Turing machine? You can write a Turing machine that will manipulate S-expressions. Or play the Game of Life. Or perform arithmetic. Any of those Turing machines can do anything S-expressions do! All of those are called &#8220;Universal Turing Machine&#8221;, because any computation possible by any other Turing machine, or S-expression, or Game of Life, or arithmetic, can also be done by them. You only need One Turing machine, or one S-expression, or one Game of Life configuration, or one set of arithmetic rules and you can do anything anyone else can do, if maybe somewhat slowly. Fortunately, or unfortunately, all those computations also have the same basic flaw &#8212; you can never write one of those to say anything interesting about any computation that comes their way (this will be important later!)</p>
<p>Let us recap:</p>
<ol>
<li>Computations that manipulate symbols can be done either electronically or by a human, equally well, if not equally fast.</li>
<li>You can define a &#8220;universal computation&#8221;, that if you learn to do, anyone can get you to do any other computation by writing the correct input.</li>
<li>It is impossible for you to know anything interesting about any possible computational input.</li>
</ol>
<p>Those three concepts (&#8220;a lot of interesting manipulations are equivalent&#8221;, &#8220;universal manipulations are possible&#8221; and &#8220;nothing interesting to say&#8221;) are the core of what computers are. A computer chip does very specific manipulations ([1]). However, programmers, by writing carefully thought out inputs, can get it to perform any computation ([2]). Lastly, it is impossible to write a computer chip that will be able to say anything interesting about any specific program ([3]). Of course, crafting these programs is difficult &#8212; this is why programmers use &#8220;programming languages&#8221;, which are <em>even more</em> &#8220;universal computation instructions&#8221;. A language is called &#8220;Turing complete&#8221; when you can use it to build a Turing machine (which would also have allowed you to build an S-expression manipulator, or Game of Life player, etc.). In short, all we have said so far applies equally well to most programming languages. There are niche non-Turing-complete languages, used where being able to say something interesting about any possible program is important &#8212; but here&#8217;s the rub &#8212; it&#8217;s actually <em>hard</em> to invent something which is not Turing complete. As we saw above, even very simple things will be able to build Turing machines.</p>
<p>Computers, languages and programmers are all becoming better at making computations that were &#8220;possible&#8221; a decade ago be &#8220;fast&#8221; now. There is an enormous economic pressure on that &#8212; after all, the more you can do &#8220;fast&#8221;, the more you can do &#8220;more and bigger&#8221;, and people like &#8220;more and bigger&#8221;.</p>
<p>Now, we come to a very simple computation &#8212; copying. A &#8220;copier&#8221; can be defined in multiple ways, but let&#8217;s suppose, for the sake of argument, that we just want to replicate the input twice (&#8220;have two copies&#8221;). It is easy to write an S-expression to do it. Therefore, any Turing complete environment can do it. But remember &#8212; it is impossible to say anything &#8220;interesting&#8221; about any possible S-expression, and therefore, it is impossible to write a computation that outputs the correct answer for &#8220;this S-expression is not a copier&#8221;. Wait, what? Yes, that&#8217;s right. If an S-expression has access to some input, it is <em>impossible</em> to know for sure that it will not copy it.</p>
<p>The next Word of Power I wish to introduce is &#8220;bits&#8221;. A &#8220;bit&#8221; (short for binary digit) is a place-holder for something that can be either 0 or 1. Anything that can represent at least two states (say, the light switch in your kitchen) is a bit. Now, let&#8217;s say that you have a set of symbols &#8212; say musical notes. I hope you have seen &#8220;Sounds of Music&#8221;, and remember the best song ever &#8212; &#8220;Do, a deer&#8221; (etc.). Our symbols are &#8220;Do, Re, Mi, Fa, Sol, La, Ti&#8221;. As the song makes the case, we can write any piece of music with just those (yes, I know about sharps, flats and octaves&#8230;bear with me). Now, let&#8217;s assign &#8220;bit patterns&#8221; to each note:</p>
<ul>
<li>Do &#8212; 000</li>
<li>Re &#8212; 001</li>
<li>Mi &#8212; 010</li>
<li>Fa &#8212; 011</li>
<li>Sol &#8212; 100</li>
<li>La &#8212; 101</li>
<li>Ti &#8212; 110</li>
</ul>
<p>Now, if we want to write the notes for the first line of &#8220;Twinkle, Twinkle&#8221; (Do Do Sol Sol Ti Ti Sol) we can instead write 000000100100110110100 in bits. If we have those bits, we can just take them in threes, and convert them back to the musical notes. We can do the same with any set of symbols &#8212; say, the alphabet. This is actually how, more or less, computers store text &#8212; they can convert the alphabet into bits, and save those bits. Then they can manipulate those bits using carefully crafted programs to, say, replace the word &#8220;Foo&#8221; with &#8220;Bar&#8221;. Or, say, copy them. If we have the bits to a fan fiction of Mickey Mouse having sex with Pluto, we can copy those too. If instead, we have the bits for an S-expression that will generate the bits for a fan fiction of Mickey Mouse having sex with Pluto, we could copy those too. But wait, this is funny &#8212; there is no way to know for certain that certain bits are <em>not</em> an S-expression that will produce the bits of Mickey Mouse having sex with Pluto.</p>
<p>A fan fiction of Mickey Mouse having sex with Pluto is a dangerous thing. It is, as the law and case law currently stands, a violation of copyright law. In general, it is not protected under the Fair Use doctrine, and this means that writing this fan fiction is illegal. Copying this fan fiction is illegal. What&#8217;s more, Disney has an incentive (or at least, believes it has an incentive) to prevent copying this fan fiction around. When incentive (or perceived incentive) and legal powers combine, the result is expected &#8212; Disney would dearly love to have an automatic way to prevent computers from copying this fan fiction. Or, say, from copying the bits that represent the video of &#8220;Cars 2&#8243;.</p>
<p>Remember what I said above &#8212; it&#8217;s impossible to have a way to know for certain which bits are actually an S-expression that will create the bits for the &#8220;Cars 2&#8243; video. Although Disney has the incentive (this is a matter of economics and psychology, ultimately the results of the forces of evolution) and the legal powers (this is a matter of social convention), the math, hard and unyielding, doesn&#8217;t care. Math doesn&#8217;t care about evolution. Math doesn&#8217;t care about society. Math is math, and the math says that you can&#8217;t build a computer that will only copy things if they&#8217;re not S-expressions that produce the Cars 2 video, no matter how much you want to.</p>
<p>Join me next episode, when I explain the basics of cryptography, and how they pertain to the issue of copyright law.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/687/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/687/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/687/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=687&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2012/01/13/why-programmers-are-concerned-about-copyright-law-part-1-of/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Retroactive New Year&#8217;s Resolutions</title>
		<link>http://moshez.wordpress.com/2012/01/05/retroactive-new-years-resolutions-2/</link>
		<comments>http://moshez.wordpress.com/2012/01/05/retroactive-new-years-resolutions-2/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 10:17:04 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://moshez.wordpress.com/?p=685</guid>
		<description><![CDATA[As is my tradition, I will be posting my New Year&#8217;s resolutions from last year, retroactively decided: Get into a serious relationship Get engaged Move to a team at work where I fit in better Move to a nicer apartment Get a loan (to build up my credit history) Go to a Less Wrong meet-up [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=685&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As is my tradition, I will be posting my New Year&#8217;s resolutions from last year, retroactively decided:</p>
<p>Get into a serious relationship</p>
<p>Get engaged</p>
<p>Move to a team at work where I fit in better</p>
<p>Move to a nicer apartment</p>
<p>Get a loan (to build up my credit history)</p>
<p>Go to a Less Wrong meet-up</p>
<p>Get a talk accepted at PyCon</p>
<p>Get more recommendations on my Linked In profile</p>
<p>Write Rationalist Fan Fiction</p>
<p>Contact my Congressperson</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/685/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/685/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=685&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2012/01/05/retroactive-new-years-resolutions-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Contacting my congressperson</title>
		<link>http://moshez.wordpress.com/2011/12/09/contacting-my-congressperson/</link>
		<comments>http://moshez.wordpress.com/2011/12/09/contacting-my-congressperson/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 18:49:59 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=683</guid>
		<description><![CDATA[I have decided to check which congressperson is responsible for my district, and send her a personal message urging her to vote against SOPA. Here is the text I used: Dear Congresswoman Speier, I am writing to you regarding the so-called &#8220;SOPA&#8221;, or &#8220;Stop Piracy Online Act&#8221; which will be up for debate and a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=683&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have decided to check which congressperson is responsible for my district, and send her a personal message urging her to vote against SOPA. Here is the text I used:</p>
<p>Dear Congresswoman Speier,</p>
<p>I am writing to you regarding the so-called &#8220;SOPA&#8221;, or &#8220;Stop Piracy Online Act&#8221; which will be up for debate and a vote soon (possibly as soon as December 15th). I am concerned about the implications of the bill for my rights, as well as those of others in the United States.</p>
<p>Let me prefix this by saying that the bill will do nothing to &#8220;Stop Online Piracy&#8221;. Technologies like Freenet[1], Tor[2] or VPN[3] already exist for dedicated pirates to work around any technical or legal hurdles the US government might throw in their path.</p>
<p>However, what the bill *will* do is to create a US equivalent of the so-called &#8220;Great Firewall of China&#8221; &#8212; a centralized place for the government to stop any communications it does not want. It wouldn&#8217;t work against pirates, of course, which would find any small hole in the implementation and smuggle everything through that (just like they do in China &#8212; a police state!). But it will mean that new forms of art or technology can be stopped by a unilateral act of the government.</p>
<p>I, like many of your constituents, work in the hi-tech industry. I depend on free communication, and unfettered access to information, for my livelihood. If you put obstacles in front of Silicon Valley&#8217;s business, competitors outside the US will out-innovate, and eventually out-compete us.</p>
<p>This bill does not just threaten my rights to free expression, and my access to new forms of communication. This bill threatens my ability to make money, all in the name of protecting out-moded business models.</p>
<p>Last but not least, you will notice that the amounts of television, music and movies available has not decreased with the internet &#8212; even if we just limit our search to mass-media. If you factor in over 50 hours a minute of video uploaded to YouTube, you will see that this bill is not necessary in order to &#8220;To promote the Progress of Science and useful Arts&#8221;[Article I, Section 8, Clause 8, United States Constitution]</p>
<p>I thank you in advance for your consideration, and hope that you will choose to vote according to the interests of your constituents &#8212; against the SOPA bill.</p>
<p>Yours,<br />
Moshe Z.</p>
<p>[1]http://freenetproject.org/<br />
[2]https://www.torproject.org/<br />
[3]https://www.ipredator.se/</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/683/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/683/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=683&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/12/09/contacting-my-congressperson/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>A Transport-agnostic Process-agnostic System in Python</title>
		<link>http://moshez.wordpress.com/2011/09/29/a-transport-agnostic-process-agnostic-system-in-python/</link>
		<comments>http://moshez.wordpress.com/2011/09/29/a-transport-agnostic-process-agnostic-system-in-python/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 21:51:21 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=675</guid>
		<description><![CDATA[Abstract Different communication mechanisms have different trade-offs: XML-RPC is ubiqutous, JSON-RPC is almost as popular but more space/time efficient, AMQP allows efficient routing and so on. It is advantageous to write application code which is completely transport-agnostic. Deciding how to split components into processes is a decision more efficiently done at the tail-end of a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=675&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Abstract</h3>
<p>Different communication mechanisms have different trade-offs: XML-RPC is ubiqutous, JSON-RPC is almost as popular but more space/time efficient, AMQP allows efficient routing and so on. It is advantageous to write application code which is completely transport-agnostic. Deciding how to split components into processes is a decision more efficiently done at the tail-end of a project, when the knowledge of which processes are more reliable, or need to communicate more, is known. Described here is the system we use to allow application code to be unaware of those distinction, pushing those decisions into deployment or installation time.</p>
<h3>Introduction</h3>
<p>When starting to implement a complicated system in Python, there are many unknowns: amount of communications between processes, typical process bugs and deployment targets. It is highly useful to allow writing the business logic code in a way that is agnostic to the answers to those questions. This also allows the communication layer to be written as a quick prototype, and optimized later. Since infrastructure costs are frequently minimized during the demo phase, this kind of approach allows quick demos during development without any cross-team code rewrite. The trade-off in using this kind of approach is that the feature set assumed from the transport has to be a least-common-denominator subset of all &#8220;possible&#8221; feature sets. This, in turn, pushes some of the work that could be done by more sophisticated transport to the Python-level infrastructure and sometimes, in the worst cases, into application code. The most egregious example is that any system that supports HTTP-based RPC mechanism (XML-RPC, JSON-RPC or SOAP) must not assume any kind of asynchronous communication mechanism.</p>
<h3>Interface Definition Language</h3>
<p>Many systems do not have an IDL of their own &#8212; or it is so weak (as in the case of XML-RPC Introspection) so as to be worthless. Interface definition languages give us two benefits: it reduces the amount of trust between processes, since processes can only send valid data to each other, and it allows us to declare explicitly which methods are supported by a given component. Our Interface Definition Language takes advantage of Python meta-classes to look like::</p>
<pre> class ThingyData(Data):
     """
     Data which identifies a target
     """
     uuid=lambda:str
     metadata=lambdaict

 class ThingiesOfType(Data):
     """
     Collection of targets of the same type
     """
     type=lambda:str
     thingies=lambda:array(ThingyData)

 class SearchInterface(Interface):
     """
     Interface to search functionality.
     """
     name='com.vmware.example.version1.Search'
     @public
     def RunQuery(query=str, maxResults=int):
         """run a query

         @param query: a query to run

         @param maxResults: maximum number of results to return

         @param results: query results
         """
         return dict(results=array(ThingiesOfType))</pre>
<p>Since we cannot depend on the underlying transport to contain objects or references, we assume all communications happen in terms of &#8220;simple&#8221; (nested) data types: ints, strings, floats, uniformly typed lists, string to string dictionaries and string to vartype dictionaries. In order to do so in a dependable way, without application code having to translate manually, we have the Implementation metaclass::</p>
<pre> class SearchImplementation(object):
     __metaclass__ = Implementation
     interface = SearchInterface
     def RunQuery(self, query):
         d = defer.Deferred()
         myThingies= Structure('ThingiesOfType')
         myThingies.type = 'Something'
         myThingies.thingies = []
         reactor.callLater(5, d.callback, [myThingies])
         return d</pre>
<p>It is possible to return either a deferred or a value from a method in an implementation. Note that there is no need for type checking inside application code &#8212; bad types would trigger an exception early on in the calling process.</p>
<h3>Clients</h3>
<p>Communication needs two sides. So far we have described how to write a server. We want client code to be equally transport-agnostic. In order to do that, we have a dynamic client object.</p>
<pre> def _simplifyObject(obj):
     if isinstance(obj, (int, float, str, bool, dict)):
         return obj
     elif isinstance(obj, list):
         return [_simplifyObject(x) for x in obj]
     elif isinstance(obj, Structure):
         return dict([(key, _simplifyObject(value))
                        for key, value in obj])
      else:
         raise ValueError("cannot simplify", obj)

 class MultiClient(object):
    def __init__(self):
        self.ifaces = set()
        self.routing = {}
    def add(self, iface, provider):
        self.ifaces.add(iface)
        for method in iface.methods:
            self.routing[iface.name+"."+method] = provider
    def callRemote(self, name, *args, **kwargs):
        args = map(_simplifyObject, args)
        provider = self.routing[name]
        return provider.callRemote(name, *args)</pre>
<p>This means we can drop in any objects that support callRemote, commit to which interfaces are available for them, and the client code does all multiplexing. From inside the application code, we need no idea about which provider gives which interface &#8212; all we need is a callRemote.</p>
<h3>Transport and Processes</h3>
<p>The server code is the non-transport-agnostic part. It takes the fully-qualified name of a function, runs that function and treats the results as a (possibly nested) lists of implementations that should run in the given process. For the XML-RPC transport, it also expects on the command-line to have a list of which ports are running which interfaces. It creats XML-RPC proxies for those ports, and drops them into the singleton client. Running all servers manually means a lot of manual stitching up and repetition. In order to save that repetition, we have a so-called multiserver, using the Twisted Process Monitoring module (which takes care of starting and restarting processes). The multiserver gets a list of processes, specified in a JSON file. It then calculates what should be its client list, and runs all processes with the same client list, using the same server. We plan to add support for JSON-RPC and HTTPS as command-line switches to the multiserver, which would then run all processes, and assumptions, appropriately. Note, however, that a smarter multiserver could decide that some processes should use JSON-RPC and some XML-RPC, and run them all appropriately. Also note that currently the multiserver can only support one component per process, even though its underlying server is capable of more. We also plan to have the multiserver set a special environment variable &#8220;SECRET_KEY&#8221;. This key would be a randomized string &#8212; all clients would send it, and all servers would require it before they process input. In this way, a malicious process running with different privileges on the same machine will not be able to get into the system.</p>
<h3>Unified Front</h3>
<p>We want to have a single port on which all public parts of the interface are exposed. We can do this in a way that is transport agnostic, even if it is not agnostic to some of the implementation details of Interface or the singleton client.</p>
<pre> def makeForwardingFunction(name, outargs):
     def retFunc(self, *args):
         remoteReturn = singletonClient.callRemote(name, *args)
         def cb(remoteReturnValue):
             return dict([(aname, argumentParse(tp, remoteReturnValue[aname]))
                              for aname, tp in outargs.iteritems()])
         remoteReturn.addCallback(cb)
         return remoteReturn
     return retFunc

 def makeForwarder(iface):
     d = dict(interface=iface)
     for name, func in iface.methods.iteritems():
         if func.isPublic:
             d[name] = makeForwardingFunction(iface.name+'.'+name, func.outargs)
     return Implementation('Forwarder', (), d)()

 def unifiedFront():
     for iface in singletonClient.ifaces:
         yield makeForwarder(iface, client.client)</pre>
<p>Note that we could have set our multiserver to serve the unified front using one protocol (e.g., XML-RPC over HTTP) while running all clients using another one (e.g., AMQP). While this requires some complicated code in the multiserver, it does not require *any* kind of application code support.</p>
<h3>Conclusion</h3>
<p>With the right kind of separation between application code and transport code, it is possible to support complicated interaction topologies while completely hiding them from the application code. Python metaclasses, duck-typing and high level of dynamism makes writing this kind of code fairly easy.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/675/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=675&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/09/29/a-transport-agnostic-process-agnostic-system-in-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>What If &#8220;Superman (1978)&#8221; Was Written By Joss?</title>
		<link>http://moshez.wordpress.com/2011/08/30/what-if-superman-1978-was-written-by-joss/</link>
		<comments>http://moshez.wordpress.com/2011/08/30/what-if-superman-1978-was-written-by-joss/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 22:21:09 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=673</guid>
		<description><![CDATA[Most of the movie is fairly awesome, right? The non-Joss-ity comes at the end, where Superman does not have to actually face the consequences of stopping the Hackensack-rocket first (and letting Lois die), because he just spins the Earth around in reverse, undoing time. Come on! That&#8217;s no way to make the hero truly suffer. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=673&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Most of the movie is fairly awesome, right?</p>
<p>The non-Joss-ity comes at the end, where Superman does not have to actually face the consequences of stopping the Hackensack-rocket first (and letting Lois die), because he just spins the Earth around in reverse, undoing time. Come on! That&#8217;s no way to make the hero truly suffer. Oh, no, in the Joss version of the movie, Superman realizes he has to turn back time. But he can only do it by some super-pain-staking method, say using his microscopic vision and amazing memory to build atom-by-atom a computer model of the Earth as it existed just before the bombs. This takes millenia, which luckily superman, not aging, has.</p>
<p>Now superman has to make a choice &#8212; does he flip the switch, causing the entire Earth to reassemble into its pre-bomb existence? Sure, in some sense he kills everyone on Earth, but in a different sense, what right to life to they have compared to the people who would have lived had the bomb not killed Lois? Even though Superman is in love with a girl he knows will not exist in the re-written reality, he does it. He hugs Lois, but grieves for what might have been.</p>
<p>&#8211; THE END &#8211;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/673/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/673/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/673/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=673&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/08/30/what-if-superman-1978-was-written-by-joss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Fixing &#8220;Cowboys &amp; Aliens&#8221; Premise</title>
		<link>http://moshez.wordpress.com/2011/08/15/fixing-cowboys-aliens-premise/</link>
		<comments>http://moshez.wordpress.com/2011/08/15/fixing-cowboys-aliens-premise/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 21:09:47 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=669</guid>
		<description><![CDATA[I&#8217;m willing to have a fair suspension of disbelief when it comes to steampunkish science fiction. The alien weapon fitting a human perfectly? Fine. The convenient amnesia that allows exposition to be on its on time? Fine. But there are limits. For example, &#8220;gold is just as rare to them as it is to you.&#8221; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=669&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m willing to have a fair suspension of disbelief when it comes to steampunkish science fiction. The alien weapon fitting a human perfectly? Fine. The convenient amnesia that allows exposition to be on its on time? Fine. But there are limits.</p>
<p>For example, &#8220;gold is just as rare to them as it is to you.&#8221; Really? Is the Earth somehow so extra-ordinarily special in terms of gold, that they would come here, where an intelligent species on the verge of discovering space technology really likes it gold, instead of trying anything else not so involved? For example, mining for gold on <em>any other planet in the solar system</em>? (I&#8217;m not going to even mention solutions like surrounding a nuclear reactor with lead, and using a centrifuge to separate out gold from lead).</p>
<p>But I&#8217;m not going to just complain. I&#8217;m going to show what it should have been &#8212; what alternate premise could have made the movie make sense!</p>
<p>On an alien planet, there lived two intelligent species, from completely parallel evolutionary lines. Where we evolved a sense of humor as a signal of intelligence, one of them, species R, developed a sense of taste &#8212; for intelligent species. The R males would find a member of the other intelligent species, trap it, and present it to the female as part of their mating ritual, very early on in their evolution. Eventually, they would be herding the other species, P, and would develop complete disgust for &#8220;meat that doesn&#8217;t talk&#8221;. For the Rs, eating a meal that doesn&#8217;t talk is a way of subsistence on sub-par food &#8212; like eating worms for us, a way to survive in the wild while reaching civilization, not a part of their diet.</p>
<p>In fact, they begun to be connesuirs of intelligent species meat. They fly around the galaxy, find interesting intelligences, and eat them. As soon as they detect signs of intelligence, they swoop in and start munching about. For Earth, that meant playing around with electricity, and early radio waves, was the first sign. Soon after some of the early experiments in 1872, the vast probe system they laid out informed them that Earth had intelligent life. Squishy, soft and tiny, those intelligences were unlikely to prove a threat. But how could they get the amount of food they needed?</p>
<p>Enter the gold. Where gold is found, the humans go, the aliens discover. They started stealing the western gold not because they liked it, but because they knew it would get the humans to them &#8212; and into their ships, where they could be packaged and kept for a while. They had to experiment with preparation, and an unfortunate number of people were burned to a crisp from culinary experiments gone wrong.</p>
<p>Ella&#8217;s species, of course, was lured in with the same trick &#8212; stealing their gold to get the people. She has never, and sadly will never, discover it was all a ploy for the aliens previous planet-wide feast.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/669/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/669/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/669/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=669&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/08/15/fixing-cowboys-aliens-premise/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Some Easy Recipes</title>
		<link>http://moshez.wordpress.com/2011/06/29/some-easy-recipes/</link>
		<comments>http://moshez.wordpress.com/2011/06/29/some-easy-recipes/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 16:26:48 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=667</guid>
		<description><![CDATA[Cooking at home is cheap, but sometimes I want to cook something super-easy. Here are a few recipes that are hella easy! Mushroom Alfreddo (there&#8217;s lots of variants &#8212; but this one is really easy!) Ingredients: 4 Cups of Mushrooms (as many different ones you can find) 1 Carton of Heavy Whipped Cream 2-3 Tsp. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=667&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cooking at home is cheap, but sometimes I want to cook something super-easy. Here are a few recipes that are hella easy!</p>
<p><em>Mushroom Alfreddo (there&#8217;s lots of variants &#8212; but this one is really easy!)</em></p>
<p><strong>Ingredients</strong>:</p>
<p>4 Cups of Mushrooms (as many different ones you can find)<br />
1 Carton of Heavy Whipped Cream<br />
2-3 Tsp. of butter</p>
<p><strong>Preparation</strong></p>
<p>Slice the mushrooms into medium pieces.<br />
Heat a non-stick pan, and put the butter on it evenly. Pour in the mushrooms and mix with the butter. The butter should coat all mushrooms &#8212; add more if necessary. Wait until the mushrooms start losing significant volume (1/2-2/3). Add the heavy whipped cream, turn down the stove to low heat, and mix. Add salt, pepper and garlic to taste, and wait until the sauce is thick enough.</p>
<p>This recipe is meant to be done as you&#8217;re cooking pasta in another pot. If you have a timer in the kitchen, or are good at keeping time, this is easy. Otherwise, do the pasta first. (When you&#8217;re done cooking pasta, pour water out, add a little bit of olive oil. This will give the pasta a nice taste and will stop it from sticking together.)</p>
<p><em>Israeli Salad</em></p>
<p>2-3 servings</p>
<p><strong>Ingredients</strong></p>
<p>2 Large Cucumbers<br />
4 Mid-size tomatoes<br />
1/3 Yellow onion<br />
1 Small lemon<br />
1 Tablespoon of olive oil<br />
[Adjust quantities according to size of vegetables]</p>
<p><strong>Preparation</strong></p>
<p>1. Take out the tomatoes&#8217; seeds/liquids, and chop the rest to small pieces<br />
2. Peel the cucumbers, and chop to small pieces<br />
3. Peel the onion, and chop it to small pieces<br />
4. Mix them in a bowl. The best mixing instrument is hands (wash first!)<br />
5. Pour juice from the lemon on the vegetables.<br />
6. Pour olive oil on the vegetables.<br />
7. Salt&amp;pepper (black, ground) to taste<br />
8. Mix again to season evenly.</p>
<p><strong>Variants</strong></p>
<ul>
<li>Add cooked/canned corn kernels (mexican style)</li>
<li>Add chopped hard-boiled egg (breakfast style)</li>
<li>Add cottage cheese (lunch style)</li>
<li>Add chopped Israeli pickled cucumber</li>
<li>Substitute the onion with chives (fancy style)</li>
<li>Add some extra-fine chopped hot pepper</li>
</ul>
<p>Any subset of these works &#8212; so this is actually 64 different recipes, all easy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/667/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/667/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/667/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=667&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/06/29/some-easy-recipes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
		<item>
		<title>Going Outside</title>
		<link>http://moshez.wordpress.com/2011/06/22/going-outside/</link>
		<comments>http://moshez.wordpress.com/2011/06/22/going-outside/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 01:18:23 +0000</pubDate>
		<dc:creator>moshez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://moshez.wordpress.com/?p=654</guid>
		<description><![CDATA[&#8220;And so it was in the eld-days,&#8221; the bard spoke on the stage, &#8220;when you could walk for days without seeing another village on the horizon.&#8221; Rak was never sure if the bard&#8217;s stories were truth, fiction or somewhere in between. What he said, though, did make sense. As more babies were being born, there [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=654&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>&#8220;And so it was in the eld-days,&#8221; the bard spoke on the stage, &#8220;when you could walk for days without seeing another village on the horizon.&#8221; Rak was never sure if the bard&#8217;s stories were truth, fiction or somewhere in between. What he said, though, did make sense. As more babies were being born, there would be more people in the world.</p>
<p>Eventually, even if, as was common, every couple had only two children, the population would increase indefinitely. Rak shrugged. It would get taken care of, of course, it was too big to be allowed to be handled by people. He felt Pom&#8217;s hand in his, caressing his fingers. He brought up Pom&#8217;s hand to his lips, and kissed it. Pom turned to him, and Rak nodded.</p>
<p>&#8220;I&#8217;m tired too,&#8221; Rak said, knowing Pom was not much of a night person. The couple walked back, hand in hand, to the youth dormitory. Rak could feel the hairs on the back of his neck rising, as he felt Pom&#8217;s hand caress his ass, then drop teasingly. &#8220;Come on,&#8221; said Pom, &#8220;let&#8217;s go to bed.&#8221; Rak nodded.</p>
<p>In a post-coital bliss, Pom and Rak lay next to each other, hand in hand, staring at the ceiling. Pom hoped it would be a time of silent contemplation, but he knew his boyfriend too well. Rak wasn&#8217;t good with silence.</p>
<p>&#8220;So what do you think about the story?&#8221; said Rak. &#8220;Not much,&#8221; said Pom, &#8220;it was just a cliched love story, as far as I could tell.&#8221; &#8220;No!&#8221; said Rak emphatically, &#8220;it wasn&#8217;t about the plot, it was about the setting. The eld times, when the villages were not so crowded together.&#8221; Pom shrugged. Rak was like that, he knew. &#8220;It&#8217;s just a story,&#8221; Pom said, &#8220;of the eld times.&#8221;</p>
<p>He wasn&#8217;t really sure what Rak was getting at, but he knew how to get the story out of Rak. Play it cool, and just a little bit dumb, and Rak would explode in a big rant, and it would be all over &#8212; the sooner the better. Pom really did need his beauty sleep. He smiled, as Rak launched into the rant &#8211;</p>
<p>&#8220;Not only are all stories of eld times consistent about this, it&#8217;s also inevitable. If people are born, there will be more people. More people means more villages, since villages cannot have more than fifty people.</p>
<p>Eventually, the earth will be covered with villages,&#8221; he stopped for a quick breath and continued, &#8220;and it&#8217;s *already happening*. What does that mean for the future? Where will people go? Where will our kids go?&#8221;</p>
<p>Pom winced. He knew Rak was much more serious about this relationship than he was. He *thought* he was in love with Rak, but he wanted to take things slow. Whenever Rak talked about kids, or a future, Pom felt a little uneasy.</p>
<p>True, he was fifteen, and it was time to think about a committed relationship, but he wanted more time to think, to get in touch with his feelings, to really make sure.</p>
<p>Pom shrugged. &#8220;You do realize we do not live in prehistoric times, right?&#8221; he said, &#8220;it is not up to us.&#8221; Pom looked up, a gesture meant to symbolize looking at O, though ve was omnipresent. Pom felt like that should have been the end of the debate. O would take care of them, as ve always has, since the dawn of history.</p>
<p>He could hear Rak drawing in a breath, preparing a clever retort, and decided to forestall it. He turned to Rak, and pressed his lips Rak&#8217;s. Argument over.</p>
<p>The next morning Rak woke up early, and knew what he needed to do. He walked outside, across the paved path, and into the woods. He breathed deep breaths, in and out, to get himself into the right state of mind. Communing with O needed a certain inner calm, and Rak knew O would not appear until he was calm enough. Rak reached the tree he thought of as &#8220;the O tree&#8221;. O did reside everywhere, but humans needed a place to associate with O. Rak stood in front of the tree, and intoned the ritual phrase. &#8220;O, I want to speak to you.&#8221;</p>
<p>In the tree, a face appeared. O, looking every bit as majestic and powerful as Rak remembered him, was the face in the tree. &#8220;Tell me your problem, child.&#8221; Rak assumed O already knew, but wanted Rak to phrase it himself.</p>
<p>&#8220;The population is growing. Soon, there will be no more room for new villages.&#8221;<br />
&#8220;Did you think I did not know?&#8221;<br />
&#8220;I&#8217;m sure you know. But I wish to know your plan.&#8221;<br />
&#8220;Humanity will be going outside.&#8221;<br />
&#8220;Outside of what?&#8221;<br />
&#8220;The earth.&#8221;</p>
<p>Rak stared at O, comprehension slowly dawning. &#8220;You mean,&#8221; he said, &#8220;we&#8217;re going into space?&#8221;</p>
<p>&#8220;Some of you, at least.&#8221;</p>
<p>Rak understood now the reason he was talking to O.</p>
<p>&#8220;I want to go.&#8221;<br />
&#8220;As I knew you would. But you cannot go alone. You are almost of age, Rak, and only couples will go.&#8221;</p>
<p>Rak understood. Everyone knew that was best &#8212; to live life with another, to share joys and sorrows. He would need to marry Pom, and convince him to go with him. It would not be easy &#8212; Pom did not like big changes. But, after all, relationships cannot always be easy.</p>
<p>Pom nodded. He still felt uneasy, but he could see how much Rak wanted this, and he loved Rak. He forced himself into a smile, and said, &#8220;Sure, Rak! Let&#8217;s get married and go to space!&#8221; Pom enjoyed seeing the happiness on Rak&#8217;s face. They kissed, and Rak melted into his arms. This, thought Pom, was bliss.</p>
<p>The bliss only lasted a week, only to be replaced by pure horror. Kids? Never seeing anyone they knew, ever again? Pom was having nightmares about the vacuum of space sucking out all his joy, as a throng of kids was clamoring for attention. He evaded Rak&#8217;s gaze more and more, and started to find excuses to avoid Rak&#8217;s company. In the end, there was only one thing he could do.</p>
<p>&#8220;Dear Rak,&#8221; read the note that Rak noticed on the kitchen table. He had a feeling he knew what was coming &#8212; declarations of love, together with heart-breaking explanations for why they could not be together. He needed neither. He crumpled the note, and through it in out. It disintegrated in mid-air, and Rak was happy to see it go. It didn&#8217;t change what happened, of course. He had lost the love of his life, and nothing will ever be OK again.</p>
<p>&#8220;You have to come!&#8221; insisted San. Rak shrugged at her. &#8220;Come on! It&#8217;s going to be a beautiful ballet, and you know you love the ballet!&#8221; Rak nodded, still not convinced. San added, gently, &#8220;If you too were meant to be, you would be together. O willing, you&#8217;ll find someone. You&#8217;re a great guy.&#8221; Rak&#8217;s eyes teared, and San hugged him. He took a deep breath. &#8220;OK,&#8221; he said, let&#8217;s go.</p>
<p>The ballet was as beautiful as promised. The village dancing troupe was amazing, as Rak expected. He enjoyed looking at the fluid motions, the seemingly effortless flights through the air. He couldn&#8217;t avert his eyes. Pom was not much for the ballet, so they have not gone in a while. He forgot how much fun it was. When the dance was over, Rak was the first one to clap, the first to stand up, the last to stop clapping. San smiled at him, and said &#8220;lets&#8217;s go congratulate the dancers.&#8221; Rak knew some people did it, but he never mustered the courage, not until now.</p>
<p>&#8220;Amazing performance,&#8221; said Rak, as they went backstage. The head of the troupe, Jom, smiled at them. &#8220;Thank you! I think I know your names &#8212; Rak and San?&#8221; They nodded quickly. &#8220;I always host the dancers for a snack at my place,&#8221; he said, &#8220;would you like to join us?&#8221;</p>
<p>&#8220;I grow the apples myself,&#8221; Jom said, as Rak bit into a juicy one. He knew, of course, where the cookies and milk came from. Tag&#8217;s milk, doubtless, and Kop&#8217;s excellent chocolate chip cookies. Rak mused of the days long ago, when goods from far away places were exchanged. It was so much simpler to have the village grow all of its needs, freely shared. &#8220;Rak?&#8221; said Jom, and Rak realized he was day dreaming. &#8220;Wonderful apples,&#8221; Rak said, and meant every word. The apples were just sweet enough, just hard enough &#8212; he almost felt guilty destroying such perfection.</p>
<p>He noticed one of the dancers watching in amusement as he enjoyed the apple. &#8220;I&#8217;m Nal,&#8221; the dancer introduced himself to Rak, &#8220;I&#8217;ve rarely seen someone enjoy an apple that much.&#8221; Rak nodded. &#8220;I guess I&#8230;haven&#8217;t had one in a while. I forgot how much I like them. I&#8217;m Rak.&#8221;</p>
<p>Rak went outside, and started carving. Wooden utensils, he long knew, was to be his life-job. He was always drawn to the feeling of the wood, the subtleties that lay beneath the simple block. His hands were running the knife over the wood, as his thoughts were running around themselves. &#8220;Hi!&#8221; a voice interrupted his reverie, almost causing him to cut himself. He looked up. &#8220;Mom!&#8221; he said.</p>
<p>&#8220;I&#8217;ve heard about you and Pom,&#8221; she said. &#8220;I thought you would be interested to know that it&#8217;s not until I was 17 that I met your father.&#8221; Rak wasn&#8217;t sure if he was. It was&#8230;his mother, after all. &#8220;I was with my previous boyfriend for three years, and we were sure we were going to get married. But your father came along and..well&#8230;&#8221;</p>
<p>&#8220;Mom!&#8221; said Rak. &#8220;I have a point,&#8221; she said, &#8220;I&#8217;m not just enjoying you squirming there.&#8221; Rak fidgeted. &#8220;The right person always comes along. O gives us the opportunities. We just have to notice them. I know it feels like the end of the world right now&#8230;but things will get better.&#8221; She hugged him. &#8220;I promise.&#8221;</p>
<p>They did.</p>
<p>&#8220;We&#8217;re ready, O,&#8221; said Nal, a few weeks later, holding Rak&#8217;s hand. &#8220;Take us to space.&#8221; They would be, Nal and Rak knew, among the first of the colonists. As they stepped onto the space elevator, hand in hand, they were amazed at the speed O had built it. Pre-singularity humanity, they knew, thought of space elevators as complicated, expensive project. O (or to use the full name, SysOp) had finished it in weeks.</p>
<p>The day when Rak died started out like any other day. The colony was humming along, fifty people alone in space. The trouble started when the alarms blared. Rak looked up. &#8220;Pressure warning,&#8221; he said, surprised, &#8220;and just my luck to be on emergency duty.&#8221; Rak grabbed his gear and ran to the location indicated in the map. It was probably a false alarm, he thought to himself, but he was the one who was supposed to confirm it.</p>
<p>His eyes darkened as he saw the problem. Someone has been careless, apparently. The crack had to be there for a while, but someone taped over the crack sensor. There has been an earlier warning, probably, about a crack. Now a whole plate was gone, and patching that will be a pain. The air was whooshing out, past Rak&#8217;s ears, but he had plenty of time. The first thing to do was to report it. The only problem with sending a report was that the nearest comm unit was near the missing plate.</p>
<p>Rak pulled himself along the wall, carefully. A few more feet, and he will get to the comm unit, he thought. He would have, if another plate has not gotten loose. As he rolled into space, he remembered safety procedure was to wear a space suit first. He flew into the vacuum of space, hanging on by a thread. He opened his mouth, avoiding explosion. He calmly counted down the seconds until suffocation, and then it was all over.</p>
<p>The next thing Rak knew was looking into Nal&#8217;s eyes. O, of course, brought him back. Nal would have to nurse him back to health. That, of course, was as it should be.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/moshez.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/moshez.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/moshez.wordpress.com/654/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=moshez.wordpress.com&amp;blog=2210753&amp;post=654&amp;subd=moshez&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://moshez.wordpress.com/2011/06/22/going-outside/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/21255a57e76c4e0cf4b7c2e8fe79f2ec?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">moshez</media:title>
		</media:content>
	</item>
	</channel>
</rss>
