<?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>the corioblog &#187; Human Interest</title>
	<atom:link href="http://www.coriolinus.net/tag/human-interest/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coriolinus.net</link>
	<description>read, and be entertained</description>
	<lastBuildDate>Sat, 09 Jul 2011 19:53:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>conf.py: One-upping ConfigParser</title>
		<link>http://www.coriolinus.net/2010/11/13/conf-py-one-upping-configparser/</link>
		<comments>http://www.coriolinus.net/2010/11/13/conf-py-one-upping-configparser/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 14:39:13 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Computer programming]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[Creative Commons]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[Main function]]></category>
		<category><![CDATA[Method]]></category>
		<category><![CDATA[Object-oriented programming]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Perl module]]></category>
		<category><![CDATA[programmer]]></category>
		<category><![CDATA[Software design patterns]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[wb]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3135</guid>
		<description><![CDATA[There comes a time in every programmer&#8217;s life when they decide that some silly, common library that they use all the time just isn&#8217;t good enough. It takes too many actions, or it feels opaque, or there are obvious features conspicuous in their absence. For me, that time is now, that library is ConfigParser, and [...]]]></description>
			<content:encoded><![CDATA[<p>There comes a time in every programmer&#8217;s life when they decide that some silly, common library that they use all the time just <em>isn&#8217;t good enough</em>. It takes too many actions, or it feels opaque, or there are obvious features conspicuous in their absence. </p>
<p>For me, that time is now, that library is ConfigParser, and the replacement is included below the fold. It&#8217;s called conf, and it means that the only interaction you as a programmer are required to have with your config file is to assign and/or read values to/from it. Assigning and reading look exactly like normal attribute assignment/reading. </p>
<p>Subversion/TRAC string: <a href="https://trac.coriolinus.net/browser/OOconf">https://svn.coriolinus.net/OOconf</a><br />
distutils packaged version: <a href="https://trac.coriolinus.net/browser/OOconf/dist/conf-0.2.0.zip?format=raw">conf-0.2.0</a></p>
<p>As always, I&#8217;m too cheap to pay a thousand dollars for a site certificate, so please ignore any certificate mismatch errors you encounter when viewing the https side of the site. If you don&#8217;t trust me enough to click through, you&#8217;ll still find the current version under the fold.</p>
<p><span id="more-3135"></span></p>
<pre class="brush: python">
import os
import codecs
import json
from ConfigParser import SafeConfigParser

def internal(func):
	def tf(self, *args, **kwargs):
		self.__dict__[&#039;__conf__&#039;].__dict__[&#039;__internal__&#039;] += 1
		try:
			return func(self, *args, **kwargs)
		finally:
			self.__dict__[&#039;__conf__&#039;].__dict__[&#039;__internal__&#039;] -= 1
	return tf

class Section(object):
	def __init__(self, conf, name, fullname=None):
		if fullname is None:
			fullname = name

		self.__dict__[&#039;__conf__&#039;] = conf
		self.__name__ = name
		self.__fullname__ = fullname

		self.__dict__[&#039;subsections&#039;] = set()
		self.__dict__[&#039;attributes&#039;] = set()

		#this lines MUST be the last in __init__
		self.__restrictedvars__ = set((i for i in dir(self) if &#039;__&#039; not in i))

	@internal
	def __setattr__(self, name, value):
		if self.restricted(name):
			if (not self.__conf__.__restrict__) or self.__conf__.__internal__ &gt; 0:
				self.__dict__[name] = value
			else:
				raise AttributeError(&quot;Namespace conflict: %s restricted for Conf use.&quot; % name)
		else:
			self.__conf__.__new_data__ = True
			self.attributes.add(name)
			self.__conf__.__cp__.set(self.__fullname__, name, json.dumps(value))

	@internal
	def __getattr__(self, name):
		if self.restricted(name):
			return self.__dict__[name]
		else:
			return json.loads(self.__conf__.__cp__.get(self.__fullname__, name))

	@internal
	def __delattr__(self, name):
		if self.restricted(name):
			if (not self.__conf__.__restrict__) or self.__conf__.__internal__ &gt; 0:
				del self.__dict__[name]
			else:
				raise AttributeError(&quot;Namespace conflict: %s restricted for Conf use.&quot; % name)
		else:
			self.__conf__.__new_data__ = True
			self.attributes.remove(name)
			self.__conf__.__cp__.remove_option(self.__name__, name)

	@internal
	def restricted(self, name):
		&quot;&quot;&quot;
		This function returns true for all attributes which should be stored locally, not in the
		configuration file proper.
		&quot;&quot;&quot;
		if name.startswith(&#039;__&#039;) or name.endswith(&#039;__&#039;):
			return True
		if name in self.__restrictedvars__:
			return True

		return False

	@internal
	def add_section(self, name):
		fullname = &#039;&#039;.join((self.__fullname__, &#039;.&#039;, name))

		if hasattr(self, name):
			raise ValueError(&quot;Namespace conflict: %s already in use&quot; % fullname)

		if not self.__conf__.__cp__.has_section(fullname):
			self.__conf__.__cp__.add_section(fullname)
		self.subsections.add(name)
		self.__dict__[name] = Section(self.__conf__, name, fullname)
		self.__restrictedvars__.add(name)
		self.__new_data__ = True

	@internal
	def remove_section(self, name):
		fullname = &#039;&#039;.join((self.__fullname__, &#039;.&#039;, name))

		if not hasattr(self, name):
			raise ValueError(&quot;Can&#039;t remove section %s, as it doesn&#039;t exist&quot; % fullname)

		sub = getattr(self, name)
		for subsub in list(sub.subsections):
			sub.remove_section(subsub)

		self.__conf__.__cp__.remove_section(fullname)
		self.subsections.remove(name)
		self.__restrictedvars__.remove(name)
		del self.__dict__[name]
		self.__new_data__ = True

class Conf(Section):
	&quot;&quot;&quot;
	Automatic storage and retrieval of arbitrary values into a config file. 

	Uses type information and automatic reconversions to store a variety of primitive types in a
	perfectly human-readable format. Primitive types are those encodable by the json module.

	Usage:
	&gt;&gt;&gt; from conf import Conf
	&gt;&gt;&gt; conf = Conf() #or Conf(filename, defaultsectionname)
	&gt;&gt;&gt; conf.foo = &#039;hello world&#039;
	&gt;&gt;&gt; conf.bar = 723
	&gt;&gt;&gt; conf.baz = False
	&gt;&gt;&gt; conf.flush()

	[exit, start a new session here]

	&gt;&gt;&gt; conf = Conf()
	&gt;&gt;&gt; conf.foo
	&#039;hello world&#039;
	&gt;&gt;&gt; conf.bar
	723
	&gt;&gt;&gt; conf.baz
	False

	If you want implicit file creation, you need to use a with statement:
	&gt;&gt;&gt; with Conf() as conf:
	...      conf.foo = 2783.1
	...
	&gt;&gt;&gt; del conf
	&gt;&gt;&gt; with Conf() as otherConf:
	...      otherConf.foo
	...
	2783.1
	&quot;&quot;&quot;
	def __init__(self, filename =&#039;.conf&#039;, sectionName=None):
		&quot;&quot;&quot;
		Initialize a new Conf object.
		&quot;&quot;&quot;
		self.__dict__[&#039;__internal__&#039;] = 0
		self.__dict__[&#039;__restrict__&#039;] = False
		#the above is magic; it must come first

		#sanity check
		if sectionName is not None and &#039;.&#039; in sectionName:
			raise ValueError(&quot;Namespace: &#039;.&#039; cannot be part of a section name&quot;)

		#initialize the superclass
		Section.__init__(self, self, sectionName if sectionName is not None else &#039;config&#039;)

		self.__filename__ = filename
		self.__cp__ = SafeConfigParser()

		#load and initialize the configparser
		if os.path.exists(filename):
			with codecs.open(filename, &#039;rb&#039;, &#039;utf8&#039;) as cf:
				self.__cp__.readfp(cf, filename)

		if sectionName is None:
			topLevelSections = [s for s in self.__cp__.sections() if s.count(&#039;.&#039;) == 0]
			if len(topLevelSections) == 1:
				sectionName = topLevelSections[0]
				self.__name__ = sectionName
				self.__fullname__ = sectionName
			else:
				sectionName = &#039;config&#039;

		#create the default section
		if not self.__cp__.has_section(sectionName):
			self.__cp__.add_section(sectionName)

		#load default section attributes
		self.attributes = set(self.__cp__.options(sectionName))

		#load the various sections
		#first, sort them by the number of dots they contain
		secs = [(s.count(&#039;.&#039;), s) for s in self.__cp__.sections() if s != sectionName]
		secs.sort()
		for name in [sec for count, sec in secs]:
			if &#039;.&#039; not in name:
				self.subsections.add(name)
				self.__dict__[name] = Section(self, name)
				self.__dict__[name].attributes = set(self.__cp__.options(name))
				self.__restrictedvars__.add(name)
			else:
				fullname = name
				rest, name = name.rsplit(&#039;.&#039;, 1)
				sec = self
				for part in rest.split(&#039;.&#039;):
					sec = getattr(sec, part)
				sec.subsections.add(name)
				sec.__dict__[name] = Section(self, name, fullname)
				sec.__dict__[name].attributes = set(self.__cp__.options(fullname))
				sec.__restrictedvars__.add(name)

		self.__new_data__ = False

		#this must come last:
		self.__internal__ = 0
		self.__restrict__ = True
		#This is used in combination with the @internal decorator. Each method so decorated
		# increments this variable on entry, and decrements it on exit. They can then check: is
		# __internal__ &gt; 0? If yes, they were called from within this Conf object, and can adjust
		# their behavior accordingly.
		#
		#Note that we initialize it here to 0. When this __init__ exits, it decrements to -1. This
		# is intentional. Since each internal function starts by incrementing it, this means that
		# only if the variable is &gt; 0 was its caller also internal.

	@internal
	def __enter__(self):
		return self

	@internal
	def __exit__(self, exc_type, exc_value, traceback):
		if self.__new_data__:
			self.flush()

	@internal
	def flush(self):
		with codecs.open(self.__filename__, &#039;wb&#039;, &#039;utf8&#039;) as cf:
			self.__cp__.write(cf)
		self.__new_data__ = False

	@internal
	def add_section(self, name):
		&quot;&quot;&quot;
		Create a new section in the conf file. This will become a dotted extension of the conf object.

		For example:
		&gt;&gt;&gt; c = Conf()
		&gt;&gt;&gt; c.foo = &#039;hello world&#039;
		&gt;&gt;&gt; c.add_section(&#039;bar&#039;)
		&gt;&gt;&gt; c.bar.baz = &#039;world says hello&#039;

		The above turns into a config file which looks like this:
		[config]
		foo = hello world

		[bar]
		baz = world says hello
		&quot;&quot;&quot;
		if hasattr(self, name):
			raise ValueError(&quot;Namespace conflict: %s already in use&quot; % name)
		if &#039;.&#039; in name:
			raise ValueError(&quot;Namespace: &#039;.&#039; cannot be part of a section name&quot;)

		if not self.__conf__.__cp__.has_section(name):
			self.__conf__.__cp__.add_section(name)
		self.subsections.add(name)
		self.__dict__[name] = Section(self, name)
		self.__restrictedvars__.add(name)
		self.__new_data__ = True

	@internal
	def remove_section(self, name):
		&quot;&quot;&quot;
		Remove a section and all included data.
		&quot;&quot;&quot;
		if not hasattr(self, name):
			raise ValueError(&quot;Can&#039;t remove section %s, as it doesn&#039;t exist&quot; % name)

		sub = getattr(self, name)
		for subsub in sub.subsections:
			sub.remove_section(subsub)

		self.__cp__.remove_section(name)
		self.subsections.remove(name)
		self.__restrictedvars__.remove(name)
		del self.__dict__[name]
		self.__new_data__ = True
</pre>
<p><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Text" property="dct:title" rel="dct:type">conf.py</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://coriolinus.net" property="cc:attributionName" rel="cc:attributionURL">coriolinus</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/">Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License</a>.<br />Permissions beyond the scope of this license may be available at <a xmlns:cc="http://creativecommons.org/ns#" href="http://www.coriolinus.net/contact/" rel="cc:morePermissions">http://www.coriolinus.net/contact/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/11/13/conf-py-one-upping-configparser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Myth of Sisyphus</title>
		<link>http://www.coriolinus.net/2010/06/17/the-myth-of-sisyphus/</link>
		<comments>http://www.coriolinus.net/2010/06/17/the-myth-of-sisyphus/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:06:55 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[bibliophile]]></category>
		<category><![CDATA[Albert Camus]]></category>
		<category><![CDATA[Entertainment/Culture]]></category>
		<category><![CDATA[Existentialists]]></category>
		<category><![CDATA[France]]></category>
		<category><![CDATA[French people]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[Overrated]]></category>
		<category><![CDATA[Vindicated]]></category>
		<category><![CDATA[Vocabulary]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3087</guid>
		<description><![CDATA[Reading Albert Camus&#8217;s book. So far, I can&#8217;t say I&#8217;m impressed. He&#8217;s got a big vocabulary. So do I. I&#8217;ve experienced often enough the fact that people assume that this implies intelligence far beyond what actually exists. Now I have evidence: this book, which I&#8217;m reading because of a recommendation saying it was quite profound, [...]]]></description>
			<content:encoded><![CDATA[<p>Reading Albert Camus&#8217;s book. So far, I can&#8217;t say I&#8217;m impressed. </p>
<p>He&#8217;s got a big vocabulary. So do I. I&#8217;ve experienced often enough the fact that people assume that this implies intelligence far beyond what actually exists. Now I have evidence: this book, which I&#8217;m reading because of a recommendation saying it was quite profound, so far is nothing much except him long-windedly laying out postulates and concluding that as there are no moral absolutes which can be derived from scratch, everything is terrible.</p>
<p>Again: I&#8217;m currently only partway into the book. Still, unless he comes out with something astonishing before the conclusion, I&#8217;ll be vindicated in my prediction that this book is little more than overrated crap.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/06/17/the-myth-of-sisyphus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cyrano de Bergerac</title>
		<link>http://www.coriolinus.net/2010/06/10/cyrano-de-bergerac/</link>
		<comments>http://www.coriolinus.net/2010/06/10/cyrano-de-bergerac/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 16:00:27 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[bibliophile]]></category>
		<category><![CDATA[Brian Hooker]]></category>
		<category><![CDATA[Cinema of France]]></category>
		<category><![CDATA[Cyrano de Bergerac]]></category>
		<category><![CDATA[Entertainment/Culture]]></category>
		<category><![CDATA[films]]></category>
		<category><![CDATA[first rapper]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[singer]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3079</guid>
		<description><![CDATA[Cyrano de Bergerac was the first rapper. What? Most rap is the singer bragging about their accomplishments. The most frequently bragged about accomplishments: The ability to compose verse on the fly. The ability to seduce women with the aid of said verse Proficiency with a weapon Cyrano was accomplished in all of this, before the [...]]]></description>
			<content:encoded><![CDATA[<p>Cyrano de Bergerac was the first rapper.</p>
<p>What?</p>
<p>Most rap is the singer bragging about their accomplishments. The most frequently bragged about accomplishments:</p>
<ul>
<li>The ability to compose verse on the fly.</li>
<li>The ability to seduce women with the aid of said verse</li>
<li>Proficiency with a weapon</li>
</ul>
<p>Cyrano was accomplished in all of this, before the year 1900.</p>
<p>It is a very fun book, though not one it&#8217;s really possible to take seriously. The Brian Hooker translation wonderfully captures the spirit of the verse; I recommend it. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/06/10/cyrano-de-bergerac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blue House</title>
		<link>http://www.coriolinus.net/2010/06/06/blue-house/</link>
		<comments>http://www.coriolinus.net/2010/06/06/blue-house/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 14:57:48 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[korea]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[Blue House]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Guard]]></category>
		<category><![CDATA[Guard Mounting]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[KATUSA]]></category>
		<category><![CDATA[Korea]]></category>
		<category><![CDATA[March music]]></category>
		<category><![CDATA[Pomp and Circumstance Marches]]></category>
		<category><![CDATA[President]]></category>
		<category><![CDATA[Republic of Korea Army]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3075</guid>
		<description><![CDATA[Last Friday I took a tour of the Blue House: Korea&#8217;s executive mansion and offices. It was a nice enough tour, though we were only allowed to take pictures from three designated locations. For the most part, the landscapes were beautiful and the architecture stately. There were two exceptions: two carefully manicured lawns which had [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday I took a tour of the Blue House: Korea&#8217;s executive mansion and offices. </p>
<p><a href="http://www.flickr.com/photos/coriolinus/4675027374/" title="Blue House Front View by coriolinus, on Flickr"><img src="http://farm5.static.flickr.com/4031/4675027374_83aa56f05b_b.jpg" width="1024" alt="Blue House Front View" /></a></p>
<p>It was a nice enough tour, though we were only allowed to take pictures from three designated locations. For the most part, the landscapes were beautiful and the architecture stately. There were two exceptions: two carefully manicured lawns which had obviously been artificially flattened for use as helicopter landing pads. Unfortunately, I didn&#8217;t get much information from the tour guides; they spoke only in Korean, and deputized an astonished KATUSA on the fly to translate for them. The one they chose tended to summarize, for example, a ten minute speech into &#8220;See that tree? It&#8217;s famous for being 160 years old.&#8221;</p>
<p><a href="http://www.flickr.com/photos/coriolinus/4674402471/" title="Palace Guard (in Traditional Garb) by coriolinus, on Flickr"><img src="http://farm5.static.flickr.com/4031/4674402471_11381e00dd_b.jpg" width="1024" alt="Palace Guard (in Traditional Garb)" /></a></p>
<p>I cannot overemphasize how ornate and elaborate the changing of the guard ceremony was. It involved a marching band, two parades of guards, a prerecorded speech (with translations following each line into Japanese, English, and Chinese), and much pomp and circumstance. This picture shows just one of the parades of guards, minutes before they marched up to relieve the parade comprised of the previous shift. It was a nice show, but I can&#8217;t help but assume that the majority of the guards change shift in a much more relaxed manner, and that this was just an additional duty that some of them picked up somehow. </p>
<p><a href="http://www.flickr.com/photos/coriolinus/4675029724/" title="War Memorial by coriolinus, on Flickr"><img src="http://farm2.static.flickr.com/1291/4675029724_cb30cec2ce_b.jpg" width="683" alt="War Memorial" /></a></p>
<p>This particular war memorial was much more inspirational than most I&#8217;ve seen in Korea. Then again, its symbolism with a phoenix rising over a smiling family seems less like it&#8217;s commemorating less the war of the 1950s than the upcoming one which will unite the peninsula. An interesting message for the memorial in front of the house of the President, but a powerful one. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/06/06/blue-house/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Date, Another Breakup</title>
		<link>http://www.coriolinus.net/2010/04/03/another-date-another-breakup/</link>
		<comments>http://www.coriolinus.net/2010/04/03/another-date-another-breakup/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 14:53:10 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[life things]]></category>
		<category><![CDATA[Entertainment/Culture]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[Saigon]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3029</guid>
		<description><![CDATA[Met, ate a fancy dinner, saw a performance of Miss Saigon. It turns out that the play&#8217;d been translated entirely into Korean. Not particularly surprising given the theater location, but the website played the songs in English. Left the theater, got the speech that&#8217;s becoming creepily familiar. &#8220;You&#8217;re a great guy and I&#8217;ve enjoyed our [...]]]></description>
			<content:encoded><![CDATA[<p>Met, ate a fancy dinner, saw a performance of Miss Saigon. It turns out that the play&#8217;d been translated entirely into Korean. Not particularly surprising given the theater location, but the website played the songs in English.</p>
<p>Left the theater, got the speech that&#8217;s becoming creepily familiar. &#8220;You&#8217;re a great guy and I&#8217;ve enjoyed our dates, but I don&#8217;t see us having any romantic potential.&#8221; She was having more trouble making the speech than I was receiving it. I made a joke, left her laughing. Then we studiously got into separate subway cars for the 90 minute ride home.</p>
<p>I&#8217;m kind, polite, respectful by default. It&#8217;s not too much effort on my part to be attentive, even witty. However, I just have not got the hang of being sexy. The the eerie similarities of the last few breakup speeches suggest that it is an essential quality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/04/03/another-date-another-breakup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>In the last seven days</title>
		<link>http://www.coriolinus.net/2010/03/13/in-the-last-seven-days/</link>
		<comments>http://www.coriolinus.net/2010/03/13/in-the-last-seven-days/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 06:23:36 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[life things]]></category>
		<category><![CDATA[Cessna]]></category>
		<category><![CDATA[Cessna 172]]></category>
		<category><![CDATA[Everland]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[Novel]]></category>
		<category><![CDATA[Samsung Group]]></category>
		<category><![CDATA[UH-60]]></category>
		<category><![CDATA[Yongin]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=3013</guid>
		<description><![CDATA[I had Thursday off to go to Yongsan for an appointment. Despite that, I worked 48 hours. I flew 9.1 hours in a UH-60 and 2.1 in a Cessna 172. I read three novels and four volumes of a graphic novel. I wrote approximately 2500 words of essay, blog, and correspondence. I spent 12 hours [...]]]></description>
			<content:encoded><![CDATA[<p>I had Thursday off to go to Yongsan for an appointment.<br />
Despite that, I worked 48 hours.<br />
I flew 9.1 hours in a UH-60 and 2.1 in a Cessna 172.<br />
I read three novels and four volumes of a graphic novel.<br />
I wrote approximately 2500 words of essay, blog, and correspondence.<br />
I spent 12 hours socializing with friends.<br />
I visited Everland amusement park.</p>
<p>I think I have a legitimate claim to being busy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/03/13/in-the-last-seven-days/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I like that one of the autotags for these three sentences is &#8220;rational egoism&#8221;</title>
		<link>http://www.coriolinus.net/2010/02/12/i-like-that-one-of-the-autotags-for-these-three-sentences-is-rational-egoism/</link>
		<comments>http://www.coriolinus.net/2010/02/12/i-like-that-one-of-the-autotags-for-these-three-sentences-is-rational-egoism/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 13:39:53 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[being organic sucks]]></category>
		<category><![CDATA[Aristotle]]></category>
		<category><![CDATA[Capitalism]]></category>
		<category><![CDATA[Epistemology]]></category>
		<category><![CDATA[Health/Medical/Pharmaceuticals]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[Metaphysics]]></category>
		<category><![CDATA[Monism]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Rational egoism]]></category>
		<category><![CDATA[Religion/Belief]]></category>
		<category><![CDATA[Theology]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=2982</guid>
		<description><![CDATA[Human beings are not rational. I am, unfortunately, human. I may not be able to transcend my nature but I don&#8217;t have to like it.]]></description>
			<content:encoded><![CDATA[<p>Human beings are not rational. I am, unfortunately, human. I may not be able to transcend my nature but I don&#8217;t have to like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/02/12/i-like-that-one-of-the-autotags-for-these-three-sentences-is-rational-egoism/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bioshock</title>
		<link>http://www.coriolinus.net/2010/01/27/bioshock-2/</link>
		<comments>http://www.coriolinus.net/2010/01/27/bioshock-2/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 03:02:08 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[geekspeak]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[BioShock]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Business/Finance]]></category>
		<category><![CDATA[Cloud computing]]></category>
		<category><![CDATA[Commerce]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[Digital rights management]]></category>
		<category><![CDATA[Electronic commerce]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[First-person shooters]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Hospitality/Recreation]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[PlayStation 3 games]]></category>
		<category><![CDATA[Steam]]></category>
		<category><![CDATA[Valve Corporation]]></category>
		<category><![CDATA[Video games]]></category>
		<category><![CDATA[Windows games]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=2967</guid>
		<description><![CDATA[By preordering the sequel on Steam I got the original free. As I already owned the original via Steam, I have one license too many. As Steam is actually fair, it gives me the option to give away the surplus license. Who wants Bioshock?]]></description>
			<content:encoded><![CDATA[<p>By preordering the sequel on Steam I got the original free. As I already owned the original via Steam, I have one license too many. As Steam is actually fair, it gives me the option to give away the surplus license.</p>
<p>Who wants Bioshock?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2010/01/27/bioshock-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2010</title>
		<link>http://www.coriolinus.net/2009/12/31/2010/</link>
		<comments>http://www.coriolinus.net/2009/12/31/2010/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 15:03:05 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[brain flotsam]]></category>
		<category><![CDATA[Abbreviations]]></category>
		<category><![CDATA[Contraction]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[japan]]></category>
		<category><![CDATA[Japanese verb conjugations and adjective declensions]]></category>
		<category><![CDATA[Korea]]></category>
		<category><![CDATA[New Year's Day]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=2942</guid>
		<description><![CDATA[It&#8217;s a new year again, for my readers in Korea and Japan at least*. (新年あけましておめでとうございます!) For my family and most of my friends, it&#8217;ll be another half day or so. In moving here I&#8217;ve cheated over twelve hours from both 2009 and the decade it was a part of; I think most people will agree [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a new year again, for my readers in Korea and Japan at least*. (新年あけましておめでとうございます!) For my family and most of my friends, it&#8217;ll be another half day or so. In moving here I&#8217;ve cheated over twelve hours from both 2009 and the decade it was a part of; I think most people will agree that those were time periods best not lengthened.</p>
<p>Nevertheless, I didn&#8217;t go out and party. I haven&#8217;t made any resolutions. This holiday season I&#8217;ve avoided mistletoe and been unable to procure eggnog. The fact that tomorrow I&#8217;ve got a 24-hour shift starting at 0900 has something to do with it, but I suppose I&#8217;m also just naturally Grinch-like. </p>
<p>2010 has always seemed an unimaginably futuristic time. Now that it&#8217;s begun, I suppose I&#8217;ll have to recalibrate my expectations. Hopefully the year is wonderful for all of you.</p>
<hr width="30%" align="left" /><small>* For those of you looking at the post&#8217;s timestamp, my server&#8217;s on EST and it&#8217;d be annoying to reconfigure it every time I move. Mostly it doesn&#8217;t matter, except when it&#8217;s dating a New Year&#8217;s post some 14 hours behind its correct time.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2009/12/31/2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>new TSA madness</title>
		<link>http://www.coriolinus.net/2009/12/27/new-tsa-madness/</link>
		<comments>http://www.coriolinus.net/2009/12/27/new-tsa-madness/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 10:44:37 +0000</pubDate>
		<dc:creator>coriolinus</dc:creator>
				<category><![CDATA[opinion]]></category>
		<category><![CDATA[air travel stops]]></category>
		<category><![CDATA[Hospitality/Recreation]]></category>
		<category><![CDATA[Human Interest]]></category>
		<category><![CDATA[paranoia]]></category>
		<category><![CDATA[United States]]></category>

		<guid isPermaLink="false">http://www.coriolinus.net/?p=2931</guid>
		<description><![CDATA[Most of what I have to say is simple repetition of others. Still, this much at least is original: while the new restrictions remain in effect, I will not fly commercial air in the US. I will not succumb to an atmosphere of paranoia in which I am required to keep my hands visible, my [...]]]></description>
			<content:encoded><![CDATA[<p>Most of what I have to say is simple repetition of others. Still, this much at least is original: while the new restrictions remain in effect, I will not fly commercial air in the US.</p>
<p>I will not succumb to an atmosphere of paranoia in which I am required to keep my hands visible, my lap clear, and in which I am prohibited from movement during any portion of a flight. Instead, I boycott the industry until it stops mistaking liberty for threat. I encourage you to do the same. There exist other options than commercial air: general aviation is a lot of fun, but there also exist long-haul bus and train lines even in the US.</p>
<p>At some point, commercial air travel stops being worth the hassle. For me, that point has just been reached.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coriolinus.net/2009/12/27/new-tsa-madness/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

