<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
      <title>2020 Week 1: Introduction to Critical Code Studies — CCS Working Group 2020</title>
      <link>http://wg20.criticalcodestudies.com/index.php?p=/</link>
      <pubDate>Sat, 04 Apr 2026 23:22:40 +0000</pubDate>
          <description>2020 Week 1: Introduction to Critical Code Studies — CCS Working Group 2020</description>
    <language>en</language>
    <atom:link href="http://wg20.criticalcodestudies.com/index.php?p=/categories/2020-week-1:-introduction-to-critical-code-studies/feed.rss" rel="self" type="application/rss+xml"/>
    <item>
        <title>Week 1: Introduction to Critical Code Studies (Main thread)</title>
        <link>http://wg20.criticalcodestudies.com/index.php?p=/discussion/57/week-1-introduction-to-critical-code-studies-main-thread</link>
        <pubDate>Mon, 20 Jan 2020 17:08:59 +0000</pubDate>
        <category>2020 Week 1: Introduction to Critical Code Studies</category>
        <dc:creator>markcmarino</dc:creator>
        <guid isPermaLink="false">57@/index.php?p=/discussions</guid>
        <description><![CDATA[<p><strong>Jeremy Douglass and Mark C. Marino</strong></p>

<p><span data-youtube="youtube-631TRAcKqjs?autoplay=1"><a rel="nofollow" href="https://www.youtube.com/watch?v=631TRAcKqjs"><img src="https://img.youtube.com/vi/631TRAcKqjs/0.jpg" width="640" height="385" border="0" alt="image" /></a></span></p>

<p><br /></p>

<p>Welcome to the first week of the 2020 Critical Code Studies Working Group. During this week, we’ll be introducing critical code studies in general by means of the introductory chapter to the forthcoming book Critical Code Studies (The MIT Press). We’ll also take this week as an opportunity to introduce newcomers to the field but also to take stock in where the field has come and to look forward to where it is headed next.</p>

<blockquote><div>
  <p>Critical code studies names the applications of hermeneutics to the interpretation of the extrafunctional significance of computer computer source code…. Extra here means not outside of or in addition to but instead growing out of…. CCS holds that the lines of code of a program are not value-neutral and can be analyzed using the theoretical approaches applied to other semiotic systems, in addition to particular interpretive methods developed specifically for the discussions of programs.</p>
</div></blockquote>

<p>But what does it mean to explore culture through code?</p>

<p>Mark answers this question in the book, reading code as varied as the leaked software from the Climategate scandal to code written by media philosopher Friedrich Kittler. He reads art objects like the Transborder Immigrant Tool, variants of electronic literature works like Taroko Gorge, and code languages like the English-like precursor to COBOL, FLOW-MATIC.  He explores low level to high level languages, from ASSEMBLY to Inform 7, including languages in Arabic (قلب or ’alb), Hawiian (in the ʻAnuʻu project), and Cree. (For much more on Indigenous Programming, look forward to our Week 2 discussion).  In a medium most consider to be merely an operationalized mathematics, readings of code lead him to discuss issues of racial and ethnic bias and the gendered bias he calls encoded chauvinism.  These readings have grown out of and reference discussions from past Critical Code Studies Working Groups because these collectives, these gathering of such varied minds, have the ability to identify so many complex meanings.</p>

<p>In the epilogue to the CCS book, Mark claims we have reached a moment where “philosophers process, poets publish, and curators collect code knowing scholars will interpret it as discourse” (227) -- in other words, where the basic tenets of critical code studies, that code is meaningful, have been widely accepted. How does that acceptance change the culture of code? How does that facilitate what we are trying to do here?</p>

<p>Because code has become accepted as a means of expression, we now have new works choosing code as one of their communication channels.  Consider: Eugenio Tisselli's “Amazon” webpage, released over Twitter.  Created in response to this summer’s devastating fires, Tisselli’s code articulated his despair over the environmental effects of globalized capitalism. Code was able to serve as his language of expression because, as, Alex McCLean and Geoff Cox have written, Code Speaks.</p>

<blockquote><div>
  <p>see related discussion: <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/discussion/61/week-1-amazon-html-by-euguenio-tisselli">amazon.html by Euguenio Tisselli</a></p>
</div></blockquote>

<p>Code is a social medium and its meaning is also social.  The “critical” aspect of critical code studies looks to explore, among other aspects, this social dimension, especially as it pertains to power relations, across differences of race, gender, sexuality, and socio-economic status or class.  “Critical” code studies is not technological history at the service of digital industries, it is an exploration of human culture in code complete with biases, abuses, inconsistencies, and injustices.  CCS is an alternative to “uncritically documenting military-industrial-academic artifacts on behalf of those who created them to the benefit of their creators’ self-regard” (238). We aspire to more.</p>

<p>At the same time, it is worthwhile to look to critical theories and philosophical paradigms that you have found useful or would like to apply but perhaps can’t see how. Or maybe you have come across some code that you can’t read or can’t find a critical hand hold on. (This is a good time to introduce some of your code critique threads).</p>

<p>Programming has continued to evolve.  New and strange languages have emerged. With the advent of contemporary machine learning algorithms, more code is being generated by software, code that programmers may never deal with directly. How does meaning change in such contexts? As more people discuss algorithms, what can the study of code add to those conversations?</p>

<p>So we invite the CCS community to begin this week of the Working Group with a broad, reflexive conversation, a thread that invites you to look back and forward, that invites you to express your thoughts about the potential obstacles for critical code studies as well as your own insights and inspirations.</p>

<p><br /></p>

<hr />

<p>Some questions:</p>

<ul>
<li>What do you want to know about CCS?</li>
<li>What are the next challenges for Critical Code Studies? Current puzzles?</li>
<li>What projects would we like to launch in the coming years? An edited collection? Conference?</li>
<li>How has CCS been most productive?</li>
<li>What are some current questions or problems that CCS is uniquely suited to addressing?</li>
<li>What are the lacuna or blindspots--what should should CCS be addressing that it is not currently?</li>
</ul>

<p><br /></p>
]]>
        </description>
    </item>
    <item>
        <title>Week 1: amazon.html by Euguenio Tisselli</title>
        <link>http://wg20.criticalcodestudies.com/index.php?p=/discussion/61/week-1-amazon-html-by-euguenio-tisselli</link>
        <pubDate>Mon, 20 Jan 2020 23:08:51 +0000</pubDate>
        <category>2020 Week 1: Introduction to Critical Code Studies</category>
        <dc:creator>jeremydouglass</dc:creator>
        <guid isPermaLink="false">61@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>by Mark C. Marino and Jeremy Douglass</p>

<blockquote><div>
  <p>In the <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/discussion/57/week-1-introduction-to-critical-code-studies-main-thread">Week 1 Introduction to Critical Code Studies</a> we mention Tisselli's piece amazon.html as an example of contemporary code as cultural discourse. Below is an overview and questions on amazon.html, presented in the form of a Working Group code critique for discussion.</p>
</div></blockquote>

<p><strong>Title</strong>: amazon.html<br />
<strong>By:</strong> Euguenio Tisselli<br />
<strong>Source:</strong> <a rel="nofollow" href="https://twitter.com/motorhueso/status/1157758552662040577">https://twitter.com/motorhueso/status/1157758552662040577</a><br />
<strong>Code:</strong> HTML/JavaScript<br />
<strong>Date:</strong> Aug. 3, 2019<br />
Released via Twitter</p>

<h3>Code:</h3>

<pre><code>&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta charset=&quot;utf-8&quot;&gt;&lt;title&gt;amazon&lt;/title&gt;&lt;style&gt;body{margin:0;overflow:hidden;}#x{text-align:center;padding-top:30px;}.p{line-height:0.3;display:block;}.q{font-size:2em;font-family:&quot;Courier&quot;;letter-spacing:-5px;}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;div id=&quot;x&quot;&gt;&lt;/div&gt;
</code></pre>

<pre><code>&lt;script&gt;var s=5e3;var c=[&quot;#37ae3c&quot;,&quot;#236e12&quot;,&quot;#7bab2e&quot;];var x=document.getElementById(&quot;x&quot;);function g(y){return ~~(Math.random()*y);}var i=60;while(i--){var d=document.createElement(&quot;DIV&quot;);d.className=&quot;p&quot;;var j=50;while(j--){var t=document.createElement(&quot;SPAN&quot;);t.className=&quot;q&quot;;
</code></pre>

<pre><code>http://t.style.color=c[g(c.length)];t.textContent=&quot;*&quot;;d.appendChild(t);}x.appendChild(d);}function m(){var e=x.children[g(x.children.length)];var f=e.children[g(e.children.length)];http://f.style.color=&quot;#795548&quot;;f.textContent=String.fromCharCode(g(10)+48);
</code></pre>

<pre><code>s=s&gt;100?s-100:10;setTimeout(m,s);}setTimeout(m,s);&lt;/script&gt;&lt;/body&gt;&lt;/html&gt;
</code></pre>

<p><br /></p>

<h3>Overview</h3>

<p>On August 3rd, 2019, Euguenio Tisselli posted “amazon.html”: a series of four plaintext code fragments of HTML with embedded JavaScript, all published as a single Twitter thread,[<sup><a rel="nofollow" href="#fn:1">1</a></sup>] along with instructions:</p>

<blockquote><div>
  <p>copy the following code (all of it, follow the thread), paste it on a plain text editor, save it as 'amazon.html', double click on the file so it shows in your browser... and watch <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/search&amp;Search=%23capitalocene&amp;Mode=like">#capitalocene</a> unfold before your eyes!<br />
   <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/search&amp;Search=%23visual&amp;Mode=like">#visual</a> <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/search&amp;Search=%23code&amp;Mode=like">#code</a> <a rel="nofollow" href="http://wg20.criticalcodestudies.com/index.php?p=/search&amp;Search=%23poetry&amp;Mode=like">#poetry</a><br />
  </p><div data-tweeturl="https://twitter.com/motorhueso/status/1157758552662040577" data-tweetid="1157758552662040577"><a href="https://twitter.com/motorhueso/status/1157758552662040577" rel="nofollow">https://twitter.com/motorhueso/status/1157758552662040577</a></div>
</div></blockquote>

<p>Individually, each fragment does nothing. When one does assemble the fragments and run amazon.html in a contemporary web browser[<sup><a rel="nofollow" href="#fn:2">2</a></sup>] the result is a large field of hundreds of asterisk characters of varying shades of green, evoking map or satellite view of a forest. Very slowly, green characters are replaced with brown numerals. Over time the process accelerates, until only a field of shifting numbers remains.</p>

<p><img src="http://wg20.criticalcodestudies.com/uploads/editor/94/kym1zqz6tnym.png" alt="Initial state of amazon script, all green asterisks" title="" /> <img src="http://wg20.criticalcodestudies.com/uploads/editor/wu/jr223d8rvh5i.png" alt="Intermediate state, green asterisks with mixed brown numerals" title="" /> <img src="http://wg20.criticalcodestudies.com/uploads/editor/y4/efdeqxgc2a7g.png" alt="Final state, all brown numerals" title="" /></p>

<p>In his tweet thread, Tisselli also linked to a page where “you can see it live” (<a href="http://motorhueso.net/amazon/" rel="nofollow">http://motorhueso.net/amazon/</a>), however that page also did not present the running code. Instead, it offered the same code as a single text block of HTML with embedded JavaScript (a one-liner, in fact, labeled “length: 873 bytes”) along with similar instructions to cut, paste, save, and run.[<sup><a rel="nofollow" href="#fn:3">3</a></sup>] The reader is asked to do this in order to witness what the code performs.[<sup><a rel="nofollow" href="#fn:4">4</a></sup>]</p>

<p>Both sources (the Twitter thread and the hosting webpage) contain similar commentaries on contexts of meaning for amazon.html. The thread contains a photo of Amazon rainforest clearcutting, along with a quote on the “tipping point” of deforestation; the webpage simply links to the source 2019 EcoWatch article “<a rel="nofollow" href="https://www.ecowatch.com/amazon-deforestation-unrecoverable-tipping-point-2639358982.html?rebelltitem=1#rebelltitem1">Amazon Deforestation Rate Hits 3 Football Fields Per Minute, Data Confirms</a>” while providing additional artist’s commentary on what it means to “watch the capitalocene unfold before your eyes” -- and on the role of algorithm and code in the piece.</p>

<blockquote><div>
  <p>what is destroying the forest? it is the capitalist algorithm, executed by <a rel="nofollow" href="https://www.ecowatch.com/amazon-deforestation-unrecoverable-tipping-point-2639358982.html?rebelltitem=1#rebelltitem1">fascist war-men/machines</a>. remove the algorithm from bodies and minds, smash the killer machines!</p>
  
  <p>code is the vector that transforms your desires into data // code extracts desires from your body, delivers them to the machine, and transports them through the full stack // code is what connects your infinite boredom to the tragedy of burning forests</p>
</div></blockquote>

<p>Due to the nature of the piece, the code is available in three forms: as fragments, as a one-liner, and as a user-generated file necessary for the piece to run. In all cases, the code is pre-minified or compressed, as is common in both commercial HTML+JavaScript and in aesthetic code art / play practices such as quines, esoteric languages, and code golf. An interesting aspect of this minification is that it is unlikely (although not impossible) that Tisselli actually composed or revised the code in this form. Instead, there might be (or might have been) an original author’s source code that was later minified before being published. <strong>[Edit: In fact, the code <em>was</em> authored in minified form.]</strong></p>

<p>Minified code, however, may be difficult to read (and annotate). It can largely be reversed by running it through parsers to add white space and unpack dense structures for each of the three syntax types in the document: HTML, CSS, and JavaScript. [<sup><a rel="nofollow" href="#fn:5">5</a></sup>] A resulting decompressed form of amazon.html looks like this:</p>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt;
      amazon
    &lt;/title&gt;
    &lt;style&gt;
      body {
        margin: 0;
        overflow: hidden;
      }
      #x {
        text-align: center;
        padding-top: 30px;
      }
      .p {
        line-height: 0.3;
        display: block;
      }
      .q {
        font-size: 2em;
        font-family: &quot;Courier&quot;;
        letter-spacing: -5px;}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;x&quot;&gt;&lt;/div&gt;
    &lt;script&gt;
      var s = 5e3;
      var c = [&quot;#37ae3c&quot;, &quot;#236e12&quot;, &quot;#7bab2e&quot;];
      var x = document.getElementById(&quot;x&quot;);
      function g(y) {
          return ~~(Math.random() * y);
      }
      var i = 60;
      while (i--) {
          var d = document.createElement(&quot;DIV&quot;);
          d.className = &quot;p&quot;;
          var j = 50;
          while (j--) {
              var t = document.createElement(&quot;SPAN&quot;);
              t.className = &quot;q&quot;;
              t.style.color = c[g(c.length)];
              t.textContent = &quot;*&quot;;
              d.appendChild(t);
          }
          x.appendChild(d);
      }
      function m() {
          var e = x.children[g(x.children.length)];
          var f = e.children[g(e.children.length)];
          f.style.color = &quot;#795548&quot;;
          f.textContent = String.fromCharCode(g(10) + 48);
          s = s &gt; 100 ? s - 100 : 10;
          setTimeout(m, s);
      }
      setTimeout(m, s);
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p><br /></p>

<h3>Questions for Discussion</h3>

<p>How to approach such code, and what to ask about it?</p>

<ul>
<li>We could question its form of representation and related idioms (ASCII art, helicopter and satellite photography, et cetera).</li>
<li>We could what it is and does -- is it random, is it interactive, does it change continuously or in stages, what is its model and/or what is it modeling, et cetera.</li>
<li>We could talk about its aesthetics -- at run time, in its presentation, and in the way it was coded / composed.</li>
<li>We could consider its intertextual references -- the related EcoWatch and Guardian articles, as well as whether its form is inspired by, an homage to, or borrowed / taken ready-made from other prior code.</li>
<li>We might consider it in the context of other work by Tisselli, or other discourse on the capitaloscene.</li>
<li>We could investigate about the relationships between the processes the user must perform to run the code and the code processes.</li>
<li>We could consider audience and platform: for example, can amazon.html be composited, saved, and loaded easily on a contemporary smartphone, or is it primarily accessible only to laptop users, and if so how does that relate to its dissemination through Twitter?</li>
<li>We might also consider questions of preservation, archiving, and dissemination. If this piece is worth talking about, is it worth keeping accessible three years, ten years, or fifty years from now? What would that accessibility look like, and what do the roles of artists, commentators, or scholars look like in that process?</li>
<li>Finally, what might any of this tell us about how amazon.html relates to the Amazon rainforest, deforestation, the capitaloscene, or algorithmic culture more broadly?</li>
</ul>

<blockquote><div>
  <p><img src="http://wg20.criticalcodestudies.com/uploads/editor/9a/qfyf1zbuc0je.png" alt="Aerial shot of Amazon rainforest with large clearcut section area on right half." title="" /><br />
  Amazon rainforest clearcutting photo tweeted by Tiisselli.</p>
</div></blockquote>

<p><br /><br /></p>

<div>
<hr />
<ol>

<li>
<p>A screenshot of the original Twitter thread: <a rel="nofollow" href="https://drive.google.com/file/d/1GTkQ82C0YxMyRn-V8lC51VmSn3FTB9VH/view?usp=sharing">https://drive.google.com/file/d/1GTkQ82C0YxMyRn-V8lC51VmSn3FTB9VH/view?usp=sharing</a>&#160;<a rel="nofollow" href="#fnref:1">&#8617;&#xfe0e;</a></p>
</li>

<li>
<p>Tested Jan 2019 on Chrome 79.0&#160;<a rel="nofollow" href="#fnref:2">&#8617;&#xfe0e;</a></p>
</li>

<li>
<p>A screenshot of the original webpage: <a rel="nofollow" href="https://drive.google.com/open?id=1iNV94bE3R1973rrTW7Gfx20zpI_vYcSz">https://drive.google.com/open?id=1iNV94bE3R1973rrTW7Gfx20zpI_vYcSz</a>&#160;<a rel="nofollow" href="#fnref:3">&#8617;&#xfe0e;</a></p>
</li>

<li>
<p>A running copy of the work: <a rel="nofollow" href="http://wg20.criticalcodestudies.com/files/amazon.html">http://wg20.criticalcodestudies.com/files/amazon.html</a>&#160;<a rel="nofollow" href="#fnref:4">&#8617;&#xfe0e;</a></p>
</li>

<li>
<p>Unminifying can be done using a programming text editor, such as TextMate, or using a web service, such as unminify.com -- both give similar identical results.&#160;<a rel="nofollow" href="#fnref:5">&#8617;&#xfe0e;</a></p>
</li>

</ol>
</div>
]]>
        </description>
    </item>
    <item>
        <title>From the introductory chapter: "a job interview"</title>
        <link>http://wg20.criticalcodestudies.com/index.php?p=/discussion/64/from-the-introductory-chapter-a-job-interview</link>
        <pubDate>Wed, 22 Jan 2020 11:48:11 +0000</pubDate>
        <category>2020 Week 1: Introduction to Critical Code Studies</category>
        <dc:creator>jang</dc:creator>
        <guid isPermaLink="false">64@/index.php?p=/discussions</guid>
        <description><![CDATA[<p>I've been prodded to disseminate this a little more widely during Week 1. For reference, the two approaches were as follows:</p>

<pre><code>// Approach 1
function anagram(text) {
  var a = text.split(&quot;&quot;);
  for (var i = 0; i &lt; a.length; i += 1) {
    var letter = a[i];
    var j = Math.floor(Math.random() * a.length);
    a[i] = a[j];
    a[j] = letter;
  }
  return a.join(&quot;&quot;);
}
</code></pre>

<p>and</p>

<pre><code>// Approach 2
function anagram(text) {
  return text.split(&quot;&quot;).sort(function () {return 0.5- Math.random()}).join(&quot;&quot;);
}
</code></pre>

<p>A thing to note about these is that they don't achieve the same thing. I initially posted a demonstration of that <a rel="nofollow" href="https://gist.github.com/jan-g/34bbf97b1f4b1aa885baa5f5b17bbcb4">here</a>.</p>

<h2>Functionality</h2>

<p>Firstly, note that both approaches are biased in terms of the distribution of permutations they create.</p>

<p>There's a simple counting argument here as to the bias in the two approaches. (Both might be suitable for a follow-up question during this hypothetical interview.)</p>

<p>For the first approach, we make <code>n</code> swaps, each picking a target from <code>n</code> elements. There are thus <code>n^n</code> potential paths through the algorithm. However, there are <code>n!</code> distinct permutations. Because the former value doesn't divide cleanly by the latter [example: n = 8, n! = 40320, n^n = 16777216, 16777216 isn't evenly divisible by 40320], the argument is that there <em>must</em> be some bias in the outcome - some "anagrams" crop up more frequently than others. (This is evident even when we're producing anagrams of a simple string like "abc", which you can try by hand.)</p>

<p>For the second approach, any analysis of behaviour needs to rely on the fact that the sorting algorithm is likely to have been picked with a runtime of <code>n . log_2 n</code>. [There are multiple ways to implement a sort, but that's a common behaviour. For n=8, a sort may make 8 . (log_2 8) = 24 comparisons.] Each time the sort algorithm makes a comparison, it'll perform one of two operations: swap, or don't swap. Thus, there are <code>2 ^ (n log_2 n)</code> potential paths through the algorithm - or again, <code>n^n</code>. [For the case n=8, this comes out as 16777216 again.]</p>

<p>However, sorting algorithms try hard to not make comparisons when they "know" what the result would be; thus, this approach produces a much stronger bias in the sampled outcomes. Indeed, some potential anagrams of eight characters don't show up at all during the sample run.</p>

<p>[Assuming the sort function isn't broken, all permutations <em>can</em> turn up - we'd just require far more runs before we expected to see the extreme cases.]</p>

<p>On the question of which of those approaches is "stronger": the first approach produces outputs which are closer to uniform. Additionally, it requires a far smaller change to bring its output to a strictly uniform distribution. The second approach may be "clever", but it's by no means clear that it could be adjusted, should uniformity of output be desired.</p>

<p>If I had to interpret those two samples, I'd say it was much more likely that the second was a reproduction of a trick seen elsewhere, whereas the first seems more likely to be an on-the-spot invention.</p>

<h2>The desirability of uniformity of distribution and the problem statement</h2>

<p>Why desire a uniform distribution? There's certainly a certain symmetrical draw to it. At the other end of the spectrum,  sorting all input characters may suffice - or simply returning the input string. (Where Unicode strings are concerned, "returning the value you've been given" is about the safest thing you can do - see below.)</p>

<p>If the requirement in the problem statement ["An anagram contains all the same characters of the initial string or word in a different order"] is a strong one, then the last option doesn't work - and both of the suggested approaches also have a flaw. However, under those circumstances, we should note that there are inputs where <em>no</em> algorithm can meet a strict interpretation of that requirement. [Examples: any single-character string, or "AAA", etc.]</p>

<p>There may be other, less specific versions of "better," when picking a distribution - for instance, finding letter-orderings which produce more challenging anagrams for a human solver, or ones that embed wry phrases.</p>

<p>Pedantry to one side, however...</p>

<h2>Broader observation</h2>

<p>In typical i18n-blindness, all approaches here don't deal correctly with combining characters and other tricky Unicode features.</p>

<p>I'd also observe that there's a western bias - perhaps even an Anglophone one - to the problem statement. I'm not sure that the notion of an anagram even <em>applies</em> across all the languages that Unicode covers. But the problem there can be found closer to home: if you asked Herr Gauß how many anagrams his surname generated, the answer probably wouldn't be 24. The Unicode consortium offers some partial approaches to dealing with this, but they are by no means comprehensive (and a desire for a comprehensive approach is misplaced, usually arising from an underestimation of how complex the problem space is). Software that deals with human text is notoriously hard to get even close to correct in a cross-cultural fashion. (cf. the question of "how should software handle names?" which has been the subject of a number of writeups.)</p>
]]>
        </description>
    </item>
   <language>en</language>
   </channel>
</rss>
