<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title type="html"><![CDATA[]]></title>
<link href="http://evanmcc.com/index.xml" rel="self"/>
<link href="http://evanmcc.com/"/>
<updated>2016-11-11T00:00:00Z</updated>
<id>http://evanmcc.com/</id>
<author>
<name><![CDATA[ Evan Vigil-McClanahan ]]></name>
<email><![CDATA[ mcclanahan@gmail.com ]]></email>
</author>
<generator uri="http://gohugo.io/">Hugo</generator>

<entry>
<title type="html"><![CDATA[The road from 2pc to Paxos]]></title>
<link href="http://evanmcc.com/2016/11/11/consensus-intro/"/>
<updated>2016-11-11T00:00:00Z</updated>
<id>http://evanmcc.com/2016/11/11/consensus-intro/</id>

<content type="html"><![CDATA[ 

<p><em><strong>Attention conservation notice:</strong> This is a non-rigorous, under-referenced, and probably subtly (maybe baldly) wrong description of how strong distributed consensus mechanisms evolved in reaction to issues with prior replication protocols.  It is written by a non-expert who only has one, under-tested consensus system to his name.  I start with a deliberately bad version of 2pc that no one would ever write in the real world.  There may not be much here for the advanced reader.</em></p>

<h3 id="introduction">Introduction</h3>

<p>While it&rsquo;s a common refrain by more experienced engineers that most people will never need more than a single beefy database machine, an increasing number of workloads now require better fault tolerance than a single machine can provide, lower latencies than an RDBMS can manage, or both.  While a number of these systems are eventually consistent, more and more are adding stronger consistency models.  Thus, it&rsquo;s becoming more and more important for engineers to understand how these systems work, and how the can fail.  While you may never need to implement paxos, you&rsquo;re actually quite likely to have to write an application that works with primitives provided by ZooKeeper, and it pays to understand how these systems function, fail, and limp.</p>

<h3 id="our-first-steps">Our first steps</h3>

<p>Two phase commit is a value replication protocol.  This means that it&rsquo;s concerned with keeping a coherent view of data across some number of machines, so that if one fails, the data is safe, and still recoverable.  In action, it looks something like this:</p>

<pre><code>                 A         B         C
      set k1=3   |         |         |
client+--------&gt; |         |         |
                 | k1=3    |         |
                 +-------&gt; |         |
   propose       | k1=3    |         |
                 +-----------------&gt; |
                 |         |         |
                 |         | ok k1=3 |
                 | &lt;-----------------+
                 |  ok k1=3|         | accept
                 | &lt;-------+         |
                 |         |         |
                 | do k1=3 |         |
                 +-----------------&gt; |
     commit      | do k1=3 |         |
                 +-------&gt; |         |
         ok k1=3 |         |         |
client &lt;---------+         |         |
</code></pre>

<p>It works pretty well, but degrades less than gracefully when there are lost or out of order messages.  While you can work on these things by using TCP and adding retries, where this protocol falls down badly is node failures.  Everything is working great, all of the node in your system agree, and everything is happy, until one day your leader node dies at an inopportune time and everything is deadlocked forever. This isn&rsquo;t great, but since we&rsquo;re not the kind of people to give up just because something doesn&rsquo;t work at first, let&rsquo;s start tackling 2pc&rsquo;s problems and see how that leads us to failure-tolerant strong consistency systems like Viewstamped Replication and Paxos.</p>

<h4 id="what-about-3pc">What about 3pc?</h4>

<p>The <a href="https://en.wikipedia.org/wiki/Three-phase_commit_protocol">three phase commit protocol</a> is another attempt at fixing these problems, but I tend to think of it as a parallel line of research.  While it fixes deadlock problems, it still has other issues.  In the end, most successful consensus algorithms use 2pc, so 3pc seems less important to cover here in detail.</p>

<h3 id="leadership">Leadership</h3>

<p>Since in a real network, nodes can fail and messages can be lost, we first work on leadership failure.  All of our follower nodes keep a timer which is reset each time a message is received from the leader.  We use timers because perfect error detection is impossible; we simply cannot tell whether the leader is gone, slow, or is on a bad network link, so we use communication gap lengths as a heuristic for failure. When the failure timers fire, the node on which they fire declares that the leader has failed and proposes itself as the next leader of the cluster. Since this would cause a great deal of conflict and contention, the timers are usually staggered.  This leadership proposal is done in much the same way as a leader would propose a client-written value.  The other nodes then either accept or reject, the system tries again, probably via backoff, until we have an unambiguous winner.</p>

<p>Elections are not the only option here.  For example, Viewstamped Replication has a failure protocol where all nodes know of all the nodes in the cluster and sort them all using the same algorithm (VR uses a lexical sort of IP addresses).  The first node in this sorted list is the leader.  When it fails, the next working node on the list becomes the leader, and so on.</p>

<p>Regardless of how we came to the decision, we have a leader now, right?</p>

<h3 id="quorums">Quorums</h3>

<p>Maybe not.  In the case where we have a network partition, the initial leader may not have failed!  Take the following network:  <code>{A B C} | {D E F}</code>, where <code>A</code> is the initial leader.   <code>D</code>, <code>E</code>, and <code>F</code> cannot send messages to anything on the left side of the partition, and so eventually they elect <code>E</code> as their leader.  Both <code>A</code> and <code>E</code> now think that they&rsquo;re the leader and proceed to scribble all over the cluster&rsquo;s shared state by processing client requests.  This is a condition known as &lsquo;split-brain&rsquo;.  We solve the split brain problem by saying that to be elected leader, a leader must have the votes of a strict majority of all the other nodes in the cluster, not just the healthy ones.  In our network with six nodes, this means that neither <code>A</code> nor <code>E</code> would have the 4 votes (including their own) that they would need to guarantee that the whole cluster is acting together.  More formally, we need <code>2f + 1</code> nodes to endure <code>f</code> failures and <code>f + 1</code> votes for a successful leadership election.  Since for a three node partition failure you&rsquo;d need seven total nodes and four nodes on one side of the partition in order to proceed, so this entire cluster would need to fail to a stop.</p>

<p>People often complain, when looking at replicated systems, that they can&rsquo;t have just two, that the systems are designed for three, five, or more nodes.  This is why.  This is also why six node clusters like the above are rare; you don&rsquo;t get anything but overhead from node six.  You cannot tolerate three failures until you get to seven.</p>

<h3 id="the-temporal-ratchet">The temporal ratchet</h3>

<p>Sometimes, though, leaders are not actually down.  They may be in garbage collection, or perhaps they&rsquo;ve just been bogged down by too many messages, or something else happening on the machine where they&rsquo;re running.  Suppose, after a leader election, a leader that all nodes had decided had failed comes back to life, starts taking client requests and trying to propose new values.  Who is the right leader?  How are followers to know whose proposals to accept?  Let&rsquo;s take a quick side trip into abstraction, then we&rsquo;ll come back to some concrete solutions.</p>

<h4 id="the-illusion-of-linear-time">The illusion of linear time</h4>

<p>In order to provide the intuitive behavior that most people expect from replicated storage systems, (i.e. that they behave like single node systems), the system must provide a property called  <a href="http://www.bailis.org/blog/linearizability-versus-serializability/">linearizability</a>.  The linearity here is that of logical actions in a system upon a timeline.  While we have a system of perhaps many parts talking to each other on a fallible network, we want to present, externally, the appearance that we&rsquo;re a single system, processing all requests in a strictly sequential fashion.  Consider a history that looks like this (note that A here stands for the leader and elides communication between nodes):</p>

<pre><code>    B k=1 ok      B k=5 ok           B k?     k=8
     \   /         \   /              \      /
      \ /           \ /                \    /
A---------------------------------------------------&gt;
            /  \          /  \        /  \
           /    \        /    \      /    \
          C k?   k=1    C k?   k=5  C k=8  ok
</code></pre>

<p>And we need to be able to do this even when <code>A</code> fails and subsequent requests are sent to node <code>D</code>.  All operations that have been acknowledged to the client must remain true across all of the nodes in the system.</p>

<pre><code>    B k=1 ok      B k=5  ok
     \   /         \    /
      \ /           \  /
A-----------------------X
            /  \
           /    \
          C k?   k=1

                                     B k?     k=8
                                      \      /
                                       \    /
D---------------------------------------------------&gt;
                          /  \        /  \
                         /    \      /    \
                        C k?   k=5  C k=8  ok

</code></pre>

<p>In order to do this, we need for all of the parts in our system to share an ordering of events.  We could do this with timestamps, but <a href="https://aphyr.com/posts/299-the-trouble-with-timestamps">the wall clock is not your friend</a>.  So we use <a href="https://en.wikipedia.org/wiki/Logical_clock">logical timestamps</a>, typically integer-based epochs, which is simply a number that gets incremented every time something happens.  In our most recent case, the something is a leadership election.  In a production system, you&rsquo;d likely have two epochs in a tuple: <code>{leader_epoch, request_epoch}</code>, where you compare first on the leader&rsquo;s epoch, and then the request epoch, with any message with a higher leader epoch coming logically later than any message with a lower leader epoch regardless of the request epoch.</p>

<h3 id="a-pawl-for-our-ratchet">A pawl for our ratchet</h3>

<p>In order that nothing gets confused when old messages arrive, or stale, confused nodes return to the network, every actor must keep a record of the newest epoch that it has seen, in order to discard any message older than the current epoch.  Additionally, all messages must contain the epoch of their origin node when they are sent.  Implemented correctly, this guarantees that time in the system can only march forward and that any message can be ordered with respect to all of the other messages in the history of the system.</p>

<hr />

<p>Let&rsquo;s take a moment to rehearse our progress so far.  We have a solution for failed leaders, a solution for split-brained clusters, and a solution to misordered messages and confused nodes from the deep past.  Is this enough to ensure linearizable (often called &ldquo;strong&rdquo;) consistency?</p>

<h3 id="reads-are-no-longer-simple">Reads are no longer simple</h3>

<p>Kind of!  2PC is mostly concerned with writes; it doesn&rsquo;t require that reads do anything particularly special as long as they&rsquo;re done against the leader.  But in our new, fault-tolerant world, simply reading from the leader and assuming that anything that has been committed there won&rsquo;t work.  Why?  Because the leader we&rsquo;re talking to might be lagged out of the network, partitioned from its followers, who&rsquo;re now busy electing a new leader and carrying the state of the cluster away from the state known of by the leader when it got our read.  Thus, we must thread our reads through our consensus machinery, so that they enjoy the same linearizability guarantees as writes.  This means that we need to hear from a majority of nodes that the read value is still correct.</p>

<h3 id="ok-it-works-now-how-can-we-make-it-fast">OK, it works, now how can we make it fast?</h3>

<p>This &hellip; this is a big, big question.  There are any number of approaches here to all aspects of cluster performance.  Since this is such a broad topic, I&rsquo;ll just touch briefly on two aspects, reducing network round-trips and key partitioning.</p>

<h4 id="network-round-trips">Network round-trips</h4>

<p>One key aspect of research in bringing consensus to production has been the reduction of round trips between the various aspects of the system.  Largely this has been done by coalescing messages (e.g. VRR&rsquo;s commit ack is carried on the next proposal unless a timeout fires, see <a href="http://pmg.csail.mit.edu/papers/vr-revisited.pdf">VRR</a> section 4.1, step 6) and using time-based leases to allow reads from the leader to not go through the protocol within certain tight bounds (less than the timeout when other nodes will elect a new leader.  Note that this reliance on wall clock time (it isn&rsquo;t your friend, remember) makes things less safe, and imposes additional requirements on clock quality in the system.  We need to be sure that clocks are steady and ticking at approximately at the same rate, or broken leases can allow bad reads.</p>

<h4 id="key-partitioning">Key partitioning</h4>

<p>An early insight into how to optimize these systems was that unrelated operations did not need to run through the same consensus machinery to be properly ordered (since they have no ordering with relation to each other, any possible ordering is correct).  Thus, if you can partition your writes into different keyspaces, you can run multiple leaders (often on the same group of nodes), in order to increase throughput.  Some variants (notably <a href="https://www.cs.cmu.edu/~dga/papers/epaxos-sosp2013.pdf">Egalitarian Paxos</a>) take this even farther, by noting that individual writes will often have dependencies at an even narrower granularity than a keyspace, i.e. if a read, write, or transaction involving this key is not underway on <code>2f + 1</code> nodes, then the operation can proceed safely down the fast path on the node that accepted it (rather than a specific leader).  This allows for simpler cluster construction and operation at the cost of some protocol complexity.</p>

<h3 id="a-few-words-on-byzantine-failure">A few words on Byzantine failure</h3>

<p>Byzantine faults are the really bad ones.  Misbehaving or buggy nodes, malicious nodes attempting to corrupt the cluster state, and incomplete partitions, where some nodes have radically different views of the cluster.  They are, generically, quite hard to deal with.  The best that most protocols can do (without massive complication) is to fail safely to a stop.  Other protocols try to do more, but my read of the current academic consensus is that while some subsections of the problem are solvable, and most protocols can be cheaply hardened against a number of Byzantine faults, that complete tolerance of Byzantine failures cannot be achieved, only approached.  This is why all open, distributed ledgers are doomed to failure.</p>

<h3 id="references">References</h3>

<p>The following are a selection of papers and sites that I&rsquo;ve found useful when learning about this topic.</p>

<ul>
<li><a href="http://pmg.csail.mit.edu/papers/vr-revisited.pdf">Viewstamped Replication Revisited</a></li>
<li><a href="http://paxos.systems/index.html">Paxos Made Moderately Complex</a></li>
<li><a href="research.google.com/archive/paxos_made_live.html">Paxos Made Live</a></li>
<li><a href="https://www.cs.cmu.edu/~dga/papers/epaxos-sosp2013.pdf">Egalitarian Paxos</a></li>
<li><a href="https://research.microsoft.com/en-us/um/people/lamport/pubs/lamport-paxos.pdf">The part-time parliment</a></li>
<li><a href="https://raft.github.io/raft.pdf">Raft</a></li>
</ul>

<h4 id="acknowledgments">Acknowledgments</h4>

<p><em>I&rsquo;d like to thank Andrew Stone and Fred Hebert reviewing this piece and suggesting substantial improvements.</em></p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Actors, hierarchy, and anarchist software]]></title>
<link href="http://evanmcc.com/2013/02/25/actors-hierarchy-and-anarchist-software/"/>
<updated>2013-02-25T03:40:15Z</updated>
<id>http://evanmcc.com/2013/02/25/actors-hierarchy-and-anarchist-software/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>A few days ago, Steve Waldman of <a href="http://interfluidity.com">Interfluidity</a> tweeted the following:</p>

<p><blockquote class="twitter-tweet">&ldquo;Like in an economic organization, actors naturally form hierarchies.&rdquo; ideology embedded in software? fact of nature? <a href="http://t.co/FKf3KhIUNn" title="http://doc.akka.io/docs/akka/snapshot/general/actor-systems.html">doc.akka.io/docs/akka/snap…</a></p>

<p>&mdash; Steve Randy Waldman (@interfluidity) <a href="https://twitter.com/interfluidity/status/304437533884952578">February 21, 2013</a>
</blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>

<p>I responded thusly:</p>

<p><blockquote class="twitter-tweet" data-conversation="none">@<a href="https://twitter.com/interfluidity">interfluidity</a> ideology but also practical experience with the fact that it&rsquo;s super hard to build provably correct decentralized systems.
&mdash; E. Vigil-McClanahan (@evanmcc) <a href="https://twitter.com/evanmcc/status/304447778480861184">February 21, 2013</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>

<p>Which is true, but at the same time deserves a more detailed unpacking (also more commas).</p>

<p>What this sort of statement typically means in actor systems is that local systems of supervision are hierarchical.  Akka&rsquo;s <a href="http://doc.akka.io/docs/akka/snapshot/general/supervision.html#supervision">supervisors</a> look to derive directly from Erlang&rsquo;s <a href="http://www.erlang.org/doc/design_principles/sup_princ.html">supervisors</a>.  In Erlang, an important design principle is to let fail what is going to fail and to restart it cleanly.  Supervisors are a generic take on this strategy, with a supervisor starting, watching, and restarting (or reporting) after child actor failures.  Supervisors can have their own supervisors, on up the chain to the root supervisor owned directly by the virtual machine.</p>

<p>Note, in the above paragraph, an important distinction from real-world hierarchies.  For the most part, Erlang (and, I presume, Akka) supervisors don&rsquo;t tell their children <em>what to do</em>.  Their children know what to do, and supervisors merely mediate when they do it, and clean up after them when they explode.  However, in real software, sometimes even this is too much, as a supervisor can represent a serialization point (a concurrency bottleneck) in your software, and you have to decentralize launch and cleanup of critical actor systems.</p>

<p>This leads me to a more important point, which is that in the large, distributed systems tend to be decentralized for both scalability and efficiency reasons.  Marshalling all of the data needed to operate a large system correctly into a single decision loop tends to make these systems inflexible, fragile, and slow.  As such, distributed systems tend towards decentralized and distributed decision-making systems, such as gossip systems (to globally distribute critical data), leader election (for when centralized decisions need to be made), and most importantly system design that minimizes internal communication and shared state.  Riak, the product that I work on, is a reasonable example here.  Homogenous nodes with a temporarily elected leader, with all globally important information distributed by gossip.  Thousands of actors all working together to make a single system while sending each other as few messages as possible.</p>

<p>So why then supervisors, in the small?  My suspicion is time and engineering manpower constraints.  Designing these higher level decentralized systems is extremely complex.  At Basho, my employer, we spend quite a lot of time getting them right, or as right as we can, and we rely on powerful tools like <a href="http://en.wikipedia.org/wiki/QuickCheck">QuickCheck</a> to help us do it.  But if you have to write a formal model for every tiny piece of the system, you&rsquo;re doomed, at least in today&rsquo;s fast-moving software industry.  So you fall back on informally specified but easier to reason about systems like supervision trees, even though they can end up biting you in the end.  When I mentioned supervisors as a concurrency bottleneck above, I was referring to a real-world issue that we encountered, where our get and put FSM supervisors (in a nutshell, these Finite State Machines directly oversee storage and retrieval of data from our disk backends) were becoming overwhelmed in high-load situations, unable to start child actors quickly enough to fully utilize the machine the VM was running on.</p>

<p>So in the end, what does this say about the original query?  Hierarchy falls naturally out of untutored designs because we find it easy to think about multi-actor systems this way (also OOP perhaps over-strenuously encourages this sort of thinking, but that&rsquo;s another post).  But in the end, they tend to fall apart, because the parts of the system spend too much time talking to each other to get any actual work done.  This is, of course, the logic of the market, or of an anarchist utopia (so many things become isomorphic when viewed from far enough away).  I think that the most important lesson to draw from all of this is that designing and understanding highly concurrent systems with many interacting parts (inside or outside of a computer) is a task that lies right at the edge of human cognitive abilities.  We should never be entirely comfortable with them, because it&rsquo;s extremely difficult to tell if they&rsquo;re correct, so we should always be re-evaluating them, and working on the tooling that allows us to re-evaluate them, to find their defects and correct them.</p>

<p>Be careful out there.  Unintended consequences wait everywhere in the tall grass.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Trajectories]]></title>
<link href="http://evanmcc.com/2011/10/27/trajectories/"/>
<updated>2011-10-27T17:21:07Z</updated>
<id>http://evanmcc.com/2011/10/27/trajectories/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>I&rsquo;m sure that this has been noticed before, but I&rsquo;ve never seen it directly laid out, so here goes:</p>

<p>There exists a trajectory for any good, &lsquo;free&rsquo; web service, be it a social network, a search engine, a blogging platform, etc..  It looks something like a parabolic arc.  The height of its apex and the speed with which it is reached are different each time, but with enough data, you begin to see similarities.</p>

<p>In the early days, things suck.  The site is ugly, it&rsquo;s slow sometimes, maybe they haven&rsquo;t got their core mechanics nailed down, or for a social network, the features are good but there is no one there.  As things pick up steam, the venture vultures begin circling, more people get hired, and things start to rapidly improved.  Things look better, more of your friends are using it, there&rsquo;s some actual infrastructure money.  There is a long, bright period at the top of the arc wherein everything is lovely on the user side.  At the company, though, they know already that gravitational rot has already set in.  They&rsquo;ve never charged you anything, because no one ever charges you for anything.  They may not even be sure that the product is worth enough to ask you for money. But the desperately need some.  The high lifestyle of all their new coders and designers costs money, and the capital men lurking in the background are getting all sweaty in anticipation of their expected liquidity event.</p>

<p>If you and they are lucky, some big company will swoop in and provide the release that everyone is looking for, buying you up and then running you for years with benign neglect while they fold the bit of your tech that they wanted into their own product, or try to steal your user base or generally just figure out some way to make actual money out of you.  Often a service can live in this limbo for years, providing use value and pleasure.  The ending here tends to be swifter, when the new owner finally decides to shut the service down, or &rsquo;re-brand&rsquo; (almost always a fatal wound).</p>

<p>When no fairy godparent comes around, though, you enter the dread business of &lsquo;monetization&rsquo;.  For the most part, this comes in two flavors: charging for premium services or starting to sell ads.  I have no problems with using premium services to subsidize a free version.  It&rsquo;s a model that I like a lot, although I feel like people aren&rsquo;t particularly transparent about their  business models or flexible in their pricing (you have to take this with a grain of salt, coming from me.  I think the Swedish(?) policy of having everyone&rsquo;s tax bill be public is a great idea).  Usually, though, this seems to be the best way to postpone the inevitable decline of a web service, although some of your users will inevitably complain that starting to charge money is actually part of your decline.</p>

<p>Go down the path of advertising, though, and you&rsquo;ve basically submitted to your fate.  It seems easy at first, because ad companies like Google have made it really easy to drop stuff right in.  You make a little bit of money, but not really enough to pay anyone.  So you have to make more changes.  You realize that you&rsquo;re actually answering to two sets of customers now, and only one of them is paying you.  So you make compromises.  Over time, you realize that your advertisers are winning every time their desires come into conflict with those of your users.  Eventually your users realize this, too.  Then they leave, if they have any place to go.</p>

<p>Google is entering this phase right now.  They weathered the ownership problems and the external CEO, and any number of other issues that could have sunk them.  But inexorably, since it holds the purse strings, the ad-serving part of their business will take over, and will ruin the user experience and usefulness of their service for everyone.  Already there are issues: if you run ad-blocking software (which is within your rights.  If they don&rsquo;t want customers who don&rsquo;t see ads, they&rsquo;re welcome to turn you away, which is within their rights), or software that keeps them from tracking you elsewhere on the web, it breaks basic search most of the time.  At this time, there is no real exit, so you can only chose voice and evasion.</p>

<p>These are hard times.  Business models are in violent flux.  Many companies are not sure where their next dollar is going to come from.  I sympathize with people who&rsquo;re using ads to patch together a business that they love into something that works.  The market isn&rsquo;t fair or perfect or even good, most of the time.  I am not sure that there are good answers.  Premium service pricing is only a partial solution, and isn&rsquo;t going to work for everyone.  Independent artists are a particular quandary.  It&rsquo;s time, though, to start looking around for solutions.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Advertorialism]]></title>
<link href="http://evanmcc.com/2011/10/18/advertorialism/"/>
<updated>2011-10-18T19:25:03Z</updated>
<id>http://evanmcc.com/2011/10/18/advertorialism/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p><em>Attention conservation notice: ~900 words of divisive, under-researched hobby-horse riding.</em></p>

<p>So I read <a href="http://lhote.blogspot.com/2011/10/resentment-machine.html">this piece</a> by Freddie de Boer the other day, and then Rob Horning&rsquo;s <a href="http://www.popmatters.com/pm/post/149640-/">post on Steve Jobs</a>. Something in both bothered me.</p>

<p>Both of them are basically getting at consumerism and capitalism from slightly different left-wing viewpoints (I am assuming that you&rsquo;ve read both, at this point). I partially agree with both of them.  Neither of them gets all the way to the root of their arguments, so maybe I am getting their position subtly wrong.</p>

<p>But I think the thing that they&rsquo;re getting wrong, both of them, perhaps this entire line of critique, is that the internet that we have cannot possibly be any other way, as a straightforward consequence of where all of the money (or near as makes no difference) on the internet comes from, which is advertisement.  What I mean by this is that almost everything  interesting that&rsquo;s happening lately on the commercial web is in the SaaS sphere (I include social networking in this, although the service is a tad nebulous and always changing) and almost all of it that interacts with consumers is funded by advertising rather than payment for the product.  Even in app stores, there are ads, although due to the cognitive magic/trickery of encapsulation into &lsquo;apps&rsquo;, people seem willing to put in a little money up front, although never very much.</p>

<p>Horning seems to address this every so often, but he never seems to take it all the way.  The underlying logic of the social deskilling that he sees stemming from Facebook has no root in the logic of what people actually need from something like a social networking platform.  In a world where the money comes from somewhere else, Facebook or an entity like it would look and act nothing like it does.  As it stands, social deskilling is just a epiphenomenon of Facebook needing information about what you&rsquo;re doing there, so they can keep you there longer, looking at their pages and the ads displayed on them.  One could argue that it isn&rsquo;t so much a social deskilling as a gamification of online social interaction, with the dual goal of getting more information about the user to sell to advertisers, and to keep them looking at advertisements for longer periods of time.</p>

<p>My critique of de Boer is a little different, because I think that he gets closer, in his closing paragraph.  I guess I would say that he reads to much in; he assumes that more people are more deeply engaged with the worthlessness of the current online world than really are (as does Horning).  I&rsquo;ll gladly join him in his crusade to end a world where everyone is a fetishistic consumer/critic, but I think that the number of people who actually aspire to that sort of thing, who construct their selves online, are many fewer than he imagines.  Here too, of course, we see the logic of the advertising-funded internet, as innumerable outlets attempt to pull in as many &lsquo;eyes&rsquo; as possible with their floods of strategized and seo-optimized &lsquo;content&rsquo;.  Each struggling to establish themselves as a brand, to gain loyal followers (ad-viewers all), rather than follow the logic of their various missions.  Trying to be divisive, sticky, intrusive, to keep us looking longer than we would have otherwise.</p>

<p>This is all pretty dreary, I guess.  I think that both of these guys are interesting thinkers, and de Boer doesn&rsquo;t spend a lot of time talking about the internet, so it&rsquo;s understandable if his insights are a little hazy there.  And it isn&rsquo;t if I come equipped with all of the answers.  I mean, I have some proposals, but isn&rsquo;t as if the US government is going to go around regulating advertisers and taxing marketing budgets and nationalizing Comcast.  Nor is anyone going to write a computer virus that installs adblocking on people&rsquo;s browsers.  Although that&rsquo;s both awesome and doable.</p>

<p>I just mean to highlight the irresistible logic of all of the money on the web currently coming from ads and its consequences.  We&rsquo;re essentially stuck at this stage until we can figure out how to make money doing something else.  Google is the highlight here.  They&rsquo;ve brought together thousands of smart people who make daring and great products of genuine utility, and it&rsquo;s all just a sideline to their real business, which is spying on you for people who want to sell you shoes.</p>

<p>Their critiques are obviously heartfelt (at least de Boer&rsquo;s.  I feel that I am never sure where Horning is coming from, emotionally or contextually), but complaining that &lsquo;the internet&rsquo; is vapid or enervating or atomizing or what have you isn&rsquo;t the point.  To some extent, it falls victim to the same kind of end-of-history/there-is-no-alternative thinking both of them inveigh against in other aspects of their political discourses.  This is not a surprising thing; the internet is not apart from the world.  But the internet is a place where it&rsquo;s especially problematic, where we&rsquo;re willing to build an entire world on a pile of shit because the shit-sellers have told us there is nothing else to build on.  There is endless analysis to be done on the effects of this, but to me it isn&rsquo;t important.  None of these problems is solvable inside the current framework, and few of them would exist outside of it.  Anatomizing the symptoms while ignoring the disease isn&rsquo;t going to get you anywhere.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Guilt, shame, and fluffy fantasy]]></title>
<link href="http://evanmcc.com/2011/06/28/guilt-shame/"/>
<updated>2011-06-28T22:45:42Z</updated>
<id>http://evanmcc.com/2011/06/28/guilt-shame/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>I think that I&rsquo;ve read <a href="http://www.strangehorizons.com/reviews/2007/07/the_name_of_the.shtml">Adam Roberts&rsquo; review</a> of <em>The Name of the Wind</em> maybe 6 times now, so if you haven&rsquo;t read that, this isn&rsquo;t going to make any sense.  It may not make any sense anyway, since it&rsquo;s still a bit hazy, but I wanted to get it out there to work through it.</p>

<p>Something about it has always struck me as off, but I haven&rsquo;t been able to articulate it up to now.  For the most part, he&rsquo;s correct about the novel and its failings.  In no way is it high art, and the sooner Rothfuss finishes this white whale of a series and moves on to something more mature the better for him, and for all of us. But Roberts goes in on Rothfuss&rsquo; failure to truly inhabit the medieval mindset he posits is required for this sort of novel:
&gt;This could be three pals from any novel set in the 20th or 21st centuryl [<em>sic</em>]; and hundreds and hundreds of similar passages serve only to show the author has not entered into the pre-industrial medieval mindset that his medieval pre-industrial world requires—to, for example, understand the crucial point that not guilt (&ldquo;I looked as guilty as I felt&rdquo;) but shame was the key moral dynamic for the period. But to understand that would involve shifting about the psychological portraiture of the entire project; it would have meant writing characters less like, and therefore less appealing to, a 21st-century readership disinclined to make the effort to encounter the properly strange or unusual.</p>

<blockquote>
<p>This speaks to a broader state of affairs in which style—the language and form of the novel—is seen as an unimportant adjunct to the &ldquo;story.&rdquo; It is not. A bourgeois discursive style constructs a bourgeois world. If it is used to describe a medieval world it necessarily mismatches what it describes, creating a milieu that is only an anachronism, a theme park, or a WoW gaming environment rather than an actual place. This degrades the ability of the book properly to evoke its fictional setting, and therefore denies the book the higher heroic possibilities of its imaginative premise.</p>
</blockquote>

<p>I think that this is subtly wrong.  Firstly, it is mistaken in assuming that a particular kind of moral technology (for lack of a better word), such as guilt-driven normative self-coercion, necessarily accompanies particular social structures and physical technology levels.  But more to the point, it&rsquo;s mistaken to assume that the supposed mismatch of form and tone has something to do with accessibility.  Although writing characters more like his audience surely makes it easier for that audience to relate to them, I think that the fundamental issue is that for books like <em>tNoW</em>, where surely a weighty Moral Lesson is in the offing, is that ante-Guilt characters have nothing, morally, to teach those of us in the post-Guilt world.  Men and women in the AG inhabit an different moral universe.  Moral lessons taught to and through them are untranslatable, unteachable to us, unless we&rsquo;re shame-driven atavisms.</p>

<p>So it makes no sense for Rothfuss to do that work, unless, like Tolkien, he&rsquo;s a big fan of the period and its work.  The telling sentence is this one:</p>

<blockquote>
<p>But to understand that would involve shifting about the psychological portraiture of the entire project; it would have meant writing characters less like, and therefore less appealing to, a 21st-century readership disinclined to make the effort to encounter the properly strange or unusual.</p>
</blockquote>

<p>I would argue here that the aim of Rothfuss&rsquo; project here is not actually to expose his readers to the strange or the unusual, and that it&rsquo;s a mistake to assume that it is (Roberts&rsquo; easy &lsquo;kids these days&rsquo; condescension wins him no points, either).  Rothfuss&rsquo; narrow aims are as yet unclear, as there are any number of ways the third novel could resolve all of the issues that have been set up in the first two books, but his broader aims are clear; Kvothe is going to relate to us some important bit of moral knowledge about being an Exceptional Outsider.  Hopefully it&rsquo;ll be more profound than &ldquo;Get over your first, unrequited love as quickly as possible&rdquo;, which presumably would have, if learned early enough, prevented most of the series from happening.</p>

<p><strong>Statements of Bias</strong>*:</p>

<ul>
<li>Adam Roberts: I enjoy his reviews, generally (especially the lighter, quicker ones at his blog).  I typically don&rsquo;t care for his fiction for reasons too involved to get into in a brief statement such as this.</li>
<li><em>The Name of the Wind</em>/Patrick Rothfuss: I thought it was entertaining enough, but had to reread it in order to read its follow-up, which isn&rsquo;t really a good sign.  I don&rsquo;t think that any of its characters are the least bit psychologically realistic, but the manner of the telling makes it a quick and enjoyable read.  I know more or less zip about its author.</li>
</ul>

<p>* I am thinking of making bias statements part of the structure of the blog.  I am not sure how useful that would be, but I feel that making bias clear might matter here more than usual.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Upgrading to mainstream Wordpress from an Ubuntu install]]></title>
<link href="http://evanmcc.com/2011/06/19/upgrading-to-mainstream-wordpress-from-an-ubuntu-install/"/>
<updated>2011-06-19T20:58:32Z</updated>
<id>http://evanmcc.com/2011/06/19/upgrading-to-mainstream-wordpress-from-an-ubuntu-install/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>Sorry for the flurry of posts today, I need to get all this stuff out before I forget about the site again for six months.</p>

<p>Originally when I switched over to this host I had decided that I was just going to stick with the apt-provided version of wordpress and just deal with the issues, but it turns out that their modularization is too leaky, and their code churn rate is too high for that to be a viable strategy, what with the low turnover rate of the Ubuntu package.  Once I&rsquo;d fallen too many released behind, all of the AJAX stuff started to break.  I couldn&rsquo;t even reply to comments from the console or post any pictures.</p>

<p>So if you&rsquo;re looking for how to do this, here is what worked for me in early 2011 (this post will no doubt date rapidly):</p>

<ol>
<li>As root, type <code># echo wordpress hold | dpkg --set-selections</code> (note that this step is apt cargo cult magic which may fail in the future; I&rsquo;ll update this if so).</li>
<li>Edit <code>/etc/wordpress/wp-config.php</code>, commenting out the line which says <code>define('WP_CORE_UPDATE', false);</code>.</li>
<li>Download the latest wordpress tarball from <a href="http://wordpress.org/">http://wordpress.org/</a>.</li>
<li>Unpack it somewhere.</li>
<li>Backup /usr/share/wordpress (I used <code># tar czf backup.tgz /usr/share/wordpress</code> but you may (by which I mean should) want to do something more bulletproof.</li>
<li>Do <code># cp -R /path/to/wp/wordpress/ /usr/share/</code></li>
<li>Look at the output and cleanup as appropriate.  I ended up having to nuke <code>/usr/share/workpress/wp-include/js/</code> and then recopy it from the unpacked tarball.</li>
<li>Go back to your dashboard, as you&rsquo;ll likely have to trigger a database update or something similar.</li>
<li>Make sure your site or sites are still working.</li>
</ol>

<p>Feel free to comment if you have any questions but I am hardly an expert on the Wordpress side.  Good luck.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Embassytown, by China Miéville]]></title>
<link href="http://evanmcc.com/2011/06/19/embassytown-by-china-mieville/"/>
<updated>2011-06-19T20:21:30Z</updated>
<id>http://evanmcc.com/2011/06/19/embassytown-by-china-mieville/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>I also read this recently.  No one will be shocked, I suppose, that I didn&rsquo;t particularly like it.</p>

<p>Quoting myself on twitter:</p>

<blockquote>
<p>In the middle of <em>Embassytown</em> right now. Impression is Miéville doing Harrison doing Blish. Less happy with it after the mid-reveal.</p>
</blockquote>

<p>And:</p>

<blockquote>
<p>Finished <em>Embassytown</em>. Now wishing I hadn&rsquo;t fought through the middle. &ldquo;Language&rdquo; is a dud pivot. Artful awkwardness here just awkward.</p>
</blockquote>

<p>I don&rsquo;t have a ton to add, I suppose, other than a statement of bias, as I thought that <em>Kraken</em>, as fun as it was a times, was kind of a baggy mess and concerned Men&rsquo;s Business entirely too much, and had some huge disappointments in terms of its female characters.</p>

<p>The treatment of women as important is better here, which is praiseworthy, but doesn&rsquo;t overcome the novel&rsquo;s other flaws.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[(My) Problems with Post-cyberpunk work]]></title>
<link href="http://evanmcc.com/2011/06/19/my-problems-with-post-cyberpunk-work/"/>
<updated>2011-06-19T20:01:49Z</updated>
<id>http://evanmcc.com/2011/06/19/my-problems-with-post-cyberpunk-work/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>The earliest and most famous of cyberpunk novels, the endlessly famous <em>Neuromancer</em> concerns the actions of a few marginal, violent people being manipulated by forces larger than they can comprehend.  True, they have some agency; indeed they’d be useless as agents for their operators if they did not have some special skills and talents that make them the best tools possible in the situation.  Ultimately, though, they are merely tools.  Gibson’s interest is, for the most part, on the vast forces at work, rather than the tools themselves.  His protagonists (who grow less marginal and less violent as the sprawl series progresses), are more or less a lens through which the world is seen.  The culmination of each of these novels is the reveal, in which the tool-protagonist is made aware of the full scope of the drama in which they have played a small part.</p>

<p>This form, which of course has antecedents in older SF, detective and spy novels, and numerous other forms, tends to be what people take away from cyberpunk, second only to its window dressing of augments, street-wise tech-ninjas, and decades-old visual symbols of bad-assery (leather jackets, dark sunglasses or mirrorshades, dusters, ass-kicking boots, that sort of thing).</p>

<p>When Gibson first wrote his novels, deep into the Reagan-Thatcher years, things really did look pretty bad (almost thirty years ago, now).  It wasn’t entirely whacked out to picture a world run for the profit of massive corporations who’d suborned the nation-states of the world (one could argue that that is in fact what happened, although it didn’t turn out as badly as it could have).  Things really did suck, and it wasn’t insane to imagine marginal people being empowered by some mystical countervailing force being the only way that a little good could be done in the world.</p>

<p>But as time wore on and things got at least a little bit better our noir-loving doomprophets seem to have doubled down on the spit and the muck, and have moved the lens from the physically ineffectual Case to everyone’s favorite sexy ninja badass, Molly Millions.</p>

<p>While there has been some updating of the socio-political concerns that animate these books, their protagonists have gone ever more retrograde, evincing ever more cartoonish moralism and special pleading, while simultaneously growing ever more stimulatingly violent.  At times, it seems as if their worlds have to be darkened and violent in order to enable any sort of engagement with their brutal, near-psychotic protagonists.  Nyx and Takeshi Kovacs would, if introduced into a future that was anything like the present that we or their authors inhabit they’d swiftly be arrested or killed.</p>

<p>In literature, form and function are intimately linked.  Sticking so hard to a genre form birthed in an extremely dark moment limits the effectiveness with which you can navigate the gray time in which we find ourselves now.  The easy violence may sell books, and I am loathe to deny anyone their consolatory narratives in hard times, but I feel that these sort of novels are not doing the kind of work that’s pushing the genre forward or doing the sort of adaptive thinking and imaginative investigation which I consider to be the main work of SF.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[God’s War, by Kameron Hurley]]></title>
<link href="http://evanmcc.com/2011/06/14/god%E2%80%99s-war-by-kameron-hurley/"/>
<updated>2011-06-14T23:15:07Z</updated>
<id>http://evanmcc.com/2011/06/14/god%E2%80%99s-war-by-kameron-hurley/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>On Niall Harrison’s recommendation I picked up Hurley’s <em>God’s War</em> and read it over the weekend.  As a paid up member of the Post-Cyberpunk clade, it’s a solid piece of work.  Violent, entertaining outcasts are jerked around by the powerful, people are killed, scores are settled, bad-assery is done.  The world-building is vivid, if not entirely consistent.  Its treatment of gender is interesting, and reasonably novel, and it depicts the issues of its two Muslim civilizations as being orthogonal to the fact that they’re Muslim.  It’s even well paced.</p>

<p>It isn’t without its flaws, of course.  The writing could be better, especially in the neologisms department, and the world-building suffers quite a lot from tech search and replace issue, subbing in ‘bug’ for any number of other terms just to make things fit with the aesthetic, without ever bothering to think of whether these substitutions actually make sense.  The vehicles, in particular, suffer from both the neologism issue (‘bakkie’??) and from being powered by and constructed from bug-encrusted handwavium (this wouldn’t be so much of an issue if they weren’t so prominent and often mentioned).  The world-building is big on bold, vague strokes and light on telling details, and the visual description could use some real work.  Also, for being so many thousands of years into the future, it’s all a bit old-fashioned.</p>

<p><strong>EDIT:</strong> Niall points out in comments below that bakkie is South African slang for a pickup truck.  So I apologize for that (although it still sounds a bit silly to American ears), but this highlights the visual description issues that I mention.  Nowhere that I noticed was a bakkie described in enough detail for me to get that it was anything other than a wheeled vehicle (running on bug spit and unicorn farts).</p>

<p><strong>END EDIT</strong></p>

<p>None of these things are fatal flaws, and are easily overlooked, especially since this is the author’s debut.  If you like Richard Morgan (particularly the second two Kovacs books), you’re quite likely to enjoy <em>God’s War</em>.</p>

<p>That said, the more of these I read, the more I wonder why people still bother to write them.</p>

<p>To get at why, I am going to have to delve into spoiler territory, and possibly into some uniquely personal aesthetic preferences, so go read it if you haven’t.  It’s only a few bucks online.  I&rsquo;ll write another post detailing why I say that tomorrow, once I&rsquo;ve had some more time to chew over my objections.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Directions]]></title>
<link href="http://evanmcc.com/2011/04/17/directions/"/>
<updated>2011-04-17T06:23:59Z</updated>
<id>http://evanmcc.com/2011/04/17/directions/</id>
<category term="rambling"/>
<content type="html"><![CDATA[ <p>I have some political posts almost done, and will post them (both! I promise!) in the coming week, but mostly I am thinking that I should really do something else with this space.  I clearly don&rsquo;t have enough opinions to post daily (even on twitter).  I have to keep the machine around, since I am hosting the farm businesses site on the same server, but I am not sure what to do with this domain.</p>

<p>I no longer read enough, nor like enough of what I do read, for this to be a dedicated space for reviews and criticism.  My writing output is too low for it to be some place to dump story snippets and chunks of works in progress.  I don&rsquo;t honestly have unique enough opinions on current events, nor do I have enough subject matter expertise for this site to be dedicated to politics.  Farm stuff goes at the farm blog.</p>

<p>In all likelihood, it&rsquo;ll continue to be as it is, as I don&rsquo;t have the spare time to make it into anything else.  Too busy building nursery tables and (if we get some rain) laying fence.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[Moving hosts (done)]]></title>
<link href="http://evanmcc.com/2011/03/25/moving-hosts/"/>
<updated>2011-03-25T11:31:19Z</updated>
<id>http://evanmcc.com/2011/03/25/moving-hosts/</id>

<content type="html"><![CDATA[ <p>I am moving this site over to where everything else I run lives.</p>

<p>Not that this site is particularly active, but if you&rsquo;re looking to access it, it may be up and down over the weekend as I get everything transferred to the new host.</p>

<p><strong>UPDATE:</strong> If you can see this, everything should be switched over.  Because I was bored while I was waiting, I fiddled with the layout, and added some TypeKit stuff to try it out.  Mostly I think that it looks a tad better, although if I upgrade to a real TypeKit account, I think I&rsquo;ll be on the lookout for some better fonts.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[&#34;My Father&#39;s Singularity&#34;, by Brenda Cooper]]></title>
<link href="http://evanmcc.com/2010/10/29/my-fathers-singularity-by-brenda-cooper/"/>
<updated>2010-10-29T21:24:23Z</updated>
<id>http://evanmcc.com/2010/10/29/my-fathers-singularity-by-brenda-cooper/</id>

<content type="html"><![CDATA[ <p>It&rsquo;s hard for me to tease out what I don&rsquo;t like here about this story from what I don&rsquo;t like about its embedded assumptions about humanity, America, and people.</p>

<p>Like someone said a couple of stories ago, I am dog-tired of first-person narratives.  I am tired of a lot of things, and this story manages to hit on a lot of them.  So if you strip away the science-fiction aspects of the story, you have a slightly sexist and racist reactionary stick-figure of a protagonist worshiping his golden idol of a father because his father loves him less than his dogs.  I&rsquo;d have considered the father-son relationship here a cheap, sentimental trick in a better story.  Here, the main character is so warped by this unlikely relationship that he&rsquo;s effectively emasculated, despite the fact that he has worlds more power than his father in every conceivable way.  The only way to make the device more crass would be to move it into 1970s American Male Author daddy-issue territory by having the kid lust after Mona more and have a painful scene in which the kid discovers that his daddy have been &lsquo;comforting&rsquo; her in her grief, after her husband died.  Suffice it to say that I find the characters unbelievable, schematic, and uninvolving.</p>

<p>The embedded assumptions are maybe going to be less apparent or obnoxious to the non-American people; it might even be West Coast specific.  Capitalist/libertarian-oriented, dully US-centric, assuming that each tech boom will be followed by another, the country is better than the city, manual work better than intellectual work, government is evil when not incompetent, etc., etc., so on and so forth.  It circumscribes the world declaring that while it might be different, it can never really be better.  I am against the golden age, as a human concept.  The fact that we all feel it says something about us, rather than something about the world.  If the story had been a dissection of this feeling through its blinkered and backwards-looking main character, it might have been something interesting, but it doesn&rsquo;t even remain unexamined; it seems to be the explicit position of the story.</p>

<p>It could be that I am riding my own hobby horses into someone else&rsquo;s narrative, and taking these things too seriously, but the fact remains that improvements in the state of the world do have real consequences.  To write a story in which the betterment of the lives of billions of people is sidelined by the quotidian drama of the decline of the aged is, in some ways, to entirely miss the point of using a science-fictional setting.  No doubt there are issues of taste at the heart of it.  Also there&rsquo;s an election coming up, and that always gets my political juices flowing and my ideological antennae quivering.</p>

<p>Even putting aside the ideological underpinnings of the story, the failures of character would be enough to damn it, all on their own.  Prose-wise, it feels under-baked, larded with a few too many stock phrasings.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[A game mechanic]]></title>
<link href="http://evanmcc.com/2010/10/26/a-game-mechanic/"/>
<updated>2010-10-26T17:52:39Z</updated>
<id>http://evanmcc.com/2010/10/26/a-game-mechanic/</id>

<content type="html"><![CDATA[ <p>More specifically, a mechanic for capturing collective action problems.</p>

<p>You need at least three people to play, but ideally five.  Odd numbers are best, no ties.  That said, tie-breaking can be done with a coin or dice.</p>

<p>You have three teams.  Everyone who is playing is assigned to one of the teams at random.  If there&rsquo;s no one on one of the teams, the <em>least</em> populous team donates one member. Everyone rolls a die and triples the result.  This is taken as their initial score.  Then, they vote.  The vote can be to give one of the teams two points, or to give all teams one point, or to take one point from a team.  After the vote the dice is rolled.  1-3 means one of the teams loses a point, 3-6 means one of the teams gains a point.</p>

<p>The first player to break fifty points wins, but if <em>any</em> player is under twenty-five points when the game finishes, everyone loses.</p>

<p>Obviously there are elaborations to be made to make this a palatable mechanic, and it might be possible to make the idea simpler, but I just wanted to benchmark where my thinking was at this point.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[&#34;The Cage&#34;, by A.M. Dellamonica]]></title>
<link href="http://evanmcc.com/2010/10/23/the-cage-by-a-m-dellamonica/"/>
<updated>2010-10-23T11:39:05Z</updated>
<id>http://evanmcc.com/2010/10/23/the-cage-by-a-m-dellamonica/</id>

<content type="html"><![CDATA[ <p>I am deeply tempted to start this off with a rant about how terrible the stories bought for Tor.com&rsquo;s theme months are, but I will not, other than to note that they have a pretty bad track record there.</p>

<p>From the author&rsquo;s contributions to the comments, she doesn&rsquo;t typically trade in paranormal romance (do people in the UK really call them &lsquo;fang bangers?&rsquo;), and I think that it&rsquo;s all the better for it.  She doesn&rsquo;t attempt to trade on the presumably well-worn tropes of the genre, and apparently all this happens in a world where we both have werewolves and <em>Buffy</em> still aired (side note: <em>Buffy</em> ended a year after the date that monsterkind is revealed in the world of the story.  I am curious as to what that last season would have been like, in that universe. Also I am a dork).</p>

<p>Since I don&rsquo;t read a lot of PR books, I might be missing the people who&rsquo;re trying to subvert the conventions of the genre, but this is the best piece that I&rsquo;ve read so far in that vein.  Werewolf hunters as psychopaths and sadists rather than bad-ass superheroes is a subversion that resonates with a lot of my complaints about the entire genre, not just its PR subsections (cyberpunk did us a disservice, I think).</p>

<p>The thematic spine of the story is, of course, the ties here between othered communities.  Normally, an LGBT community (or another outsider community) springing to the defense of &lsquo;monsterkind&rsquo; here would be a bit obvious, but somehow she manages it here without making it too terribly unsubtle.  Normally outsider communities don&rsquo;t like to go around borrowing trouble, but in larger cities, there&rsquo;s a sense that the more people who band together the more powerful you become.  So it makes sense, narrative-wise that the whole community that this women has access to would come out and stand up.  This isn&rsquo;t simple, of course.  Just witness the difficulties transgender persons have had getting properly represented by the &lsquo;mainstream&rsquo; LGBT organizations.  It&rsquo;d have amped up the realism a bit more to show the phonecalls that she made, so that we could see not just who came, but who couldn&rsquo;t be bothered and who actively didn&rsquo;t want to come.</p>

<p>I also like how government is presented as complicated, with multiple levels and factions.  Too often, especially in literature coming from the notional left, or from any non-centrist ideological position, that government is one single block oozing evil and simpering henchmen.  The evocation of this here wasn&rsquo;t necessary to the plot, but I thought that it was a nice touch all the same.</p>

<p>My only real complaint with the story is that the prose is too transparent.  Well enough written, but not exactly fine.  Totally capable of supporting the piece, though, so it&rsquo;s something of a minor quibble.</p>
 ]]></content>
</entry>

<entry>
<title type="html"><![CDATA[&#34;Elegy for a Young Elk&#34; by Hannu Rajaniemi]]></title>
<link href="http://evanmcc.com/2010/09/17/elegy-for-a-young-elk-by-hannu-rajaniemi/"/>
<updated>2010-09-17T17:42:52Z</updated>
<id>http://evanmcc.com/2010/09/17/elegy-for-a-young-elk-by-hannu-rajaniemi/</id>

<content type="html"><![CDATA[ <p>Several years ago, I wrote a story set in a post-singularity world, which bore a bit of a family resemblance to &lsquo;Elegy &hellip;&rsquo;.  Mine was pretty bad.  There&rsquo;s a posthuman guy and another posthuman about to transcend, and a bunch of people trying to stop her from doing it.  I never did revise it fully, because I could never convince myself that the setting wasn&rsquo;t precisely isomorphic to the same situation reworked as a fantasy, or a superhero story.  Also it contained enough Ellisian verbal tics that I worried that Warren would file suit.  And also there are the ugly chunks of autobiography and personal opinion dropped in there.  But those things are fixable.  There might even be a story worth telling in there, but I never could get over the foundational problem that basically that the setting didn&rsquo;t say anything unique, and didn&rsquo;t reflect interestingly on the story that I had to tell.</p>

<p>I suppose that that failure was the beginning of the end of my flirtation with singulatarian fiction.  I still enjoy a finely-wrought peice of it, but I never could make it work for me, and I was less impressed with work in the sub-genre thereafter, having struggled with the setting issues up close and rarely seeing anyone solve them in a satisfying way.</p>

<p>I struggle too much, a lot of the time, with the underlying meanings of stories, both the ones I try to write and the ones I read.  I don&rsquo;t think that SFF is required to be allegory at all times, or even most of the time.  I don&rsquo;t subscribe to Gibson&rsquo;s theory that all SFF is built around a re-framing of some contemporary issue or the current zeitgeist.  But I suppose I at least expect an argument, a lesson, a possible issue, or something to think about.</p>

<p>This story was good.  It was coherent, it managed not to over-explain, it was about real-feeling people and realistic relationships.  Rajaniemi has the storyteller&rsquo;s spark.  It was a bit baggy, like it was told at the granularity of a novel, rather than a short story.  It&rsquo;s satisfyingly low on exposition.  There are many moments where the writing is quite nice.</p>

<p>There are two takes on the ending, I think.  Either the sky-people planned the entire affair to go off the way it did, or they didn&rsquo;t.  I like the former theory better.  A bit of theater, allowing Kosonen to move on and his son and the quantum girl to finally go free in a way that makes them less dangerous to the people around them (presumably they&rsquo;re reduced somewhat by translation into poetical form).  The setting here then is a neat bit of work, but doesn&rsquo;t really get behind the story and push.  It&rsquo;s stronger if you&rsquo;ve read &ldquo;Deus Ex Homine&rdquo;, I think.</p>

<p>If the latter is the case, then the story is unfinished, the ending makes very little sense, the setup is stupid, and Rajaniemi is betrayed by the allure of his setting, much like I was.</p>

<p>There&rsquo;s a longer discussion to be had, now that the singularity thing is just about wound down, but I am not sure that this story is the right tee for kicking it off.</p>
 ]]></content>
</entry>

</feed>
