<?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>Limina.Log &#187; ITP</title>
	<atom:link href="http://log.liminastudio.com/category/itp/feed" rel="self" type="application/rss+xml" />
	<link>http://log.liminastudio.com</link>
	<description>The Limina.Studio weblog: Art, Design and Development</description>
	<lastBuildDate>Wed, 08 Sep 2010 00:02:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PureData: iemguts for darwin</title>
		<link>http://log.liminastudio.com/programming/puredata-iemguts-for-darwin</link>
		<comments>http://log.liminastudio.com/programming/puredata-iemguts-for-darwin#comments</comments>
		<pubDate>Thu, 19 Aug 2010 23:24:46 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Dataflow Programming]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[PureData]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=712</guid>
		<description><![CDATA[Here&#8217;s a binary of the iemguts externals for Puredata built for x86 Darwin.  For future reference, all you have to do to build this from source is &#8220;make pd_darwin&#8221;.  To use it, unpack the zip to ~/Library/Pd/iemguts.  You can then start or restart Pd and get the objects like [iemguts/canvasconnections].]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a <a href="http://log.liminastudio.com/wp-content/uploads/2010/08/iemguts_darwin.zip">binary</a> of the iemguts externals for Puredata built for x86 Darwin.  For future reference, all you have to do to build this from source is &#8220;make pd_darwin&#8221;.  To use it, unpack the zip to ~/Library/Pd/iemguts.  You can then start or restart Pd and get the objects like [iemguts/canvasconnections].</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/puredata-iemguts-for-darwin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>byteSlice()</title>
		<link>http://log.liminastudio.com/itp/byteslice</link>
		<comments>http://log.liminastudio.com/itp/byteslice#comments</comments>
		<pubDate>Sat, 01 May 2010 03:17:33 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=605</guid>
		<description><![CDATA[Here&#8217;s a weird little function I just wrote to &#8220;slice&#8221; an integer out of a byte: int byteSlice(byte input, byte startIndex, byte endIndex){ // generates an integer value from an arbitrary slice of a byte // Example: // // index: 01234567 // input = B01101100 (int 108) // // startIndex = 1 // endIndex = [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a weird little function I just wrote to &#8220;slice&#8221; an integer out of a byte:</p>
<pre>int byteSlice(byte input, byte startIndex, byte endIndex){

  // generates an integer value from an arbitrary slice of a byte
  // Example:
  //
  // index:   01234567
  // input = B01101100 (int 108)
  //
  // startIndex = 1
  // endIndex = 4
  // slice = B1101
  // returns int 13

  byte output;

  // shift left to shave off bits before startIndex
  output = input << startIndex;
  // shift right to shave off bits after endIndex
  output = output >> (7-endIndex) + startIndex;

  return int(output);
}</pre>
<p>This basically takes out a chunk of a byte and gives you the integer representation of its bits.  The input index byte datatypes are a neurotic memory optimization, since the indices can&#8217;t be greater than 7. <img src='http://log.liminastudio.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   Example Arduino implementation:</p>
<pre>void setup(){

  Serial.begin(9600);
  byte in = 108;

  Serial.print(in, DEC);
  Serial.print("\t");
  Serial.println(in, BIN);
  Serial.println("----------------");
  Serial.print(byteSlice(in, 0, 7), DEC);
  Serial.print("\t");
  Serial.println(byteSlice(in, 0, 7), BIN);
  Serial.println("----------------");
  Serial.print(byteSlice(in, 1, 4), DEC);
  Serial.print("\t");
  Serial.println(byteSlice(in, 1, 4), BIN);
  Serial.println("----------------");
  Serial.print(byteSlice(in, 3, 6), DEC);
  Serial.print("\t");
  Serial.println(byteSlice(in, 3, 6), BIN);
}

void loop(){
}</pre>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/byteslice/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Converting a byte to an array and vice-versa</title>
		<link>http://log.liminastudio.com/itp/converting-a-byte-to-an-array-and-vice-versa</link>
		<comments>http://log.liminastudio.com/itp/converting-a-byte-to-an-array-and-vice-versa#comments</comments>
		<pubDate>Mon, 19 Apr 2010 00:48:00 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[Bitmath]]></category>
		<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=596</guid>
		<description><![CDATA[Here are two super-useful Arduino utility functions I just devised for my thesis: byte arrayToByte(int arr[], int len){ // Convert -1 to 0 and pack the array into a byte int i; byte result = 0; for(i=len-1; i&#62;=0; i--){ if(arr[i] == -1){ result &#38;= ~(0 &#60;&#60; i); } else { result &#124;= (1 &#60;&#60; i); [...]]]></description>
			<content:encoded><![CDATA[<p>Here are two super-useful Arduino utility functions I just devised for my thesis:</p>
<pre>byte arrayToByte(int arr[], int len){
  // Convert -1 to 0 and pack the array into a byte
  int i;
  byte result = 0;

  for(i=len-1; i&gt;=0; i--){
    if(arr[i] == -1){
      result &amp;= ~(0 &lt;&lt; i);
    } else {
      result |= (1 &lt;&lt; i);
    }
  }
  return result;
}</pre>
<pre>int* byteToArray(byte in){
  int i, temp, out[8];

  for(i=0; i&lt;8; i++){     temp = (in &gt;&gt; i) &amp; 1;
    if(temp == 0) temp = -1;
    out[i] = temp;
  }
  return out;
}</pre>
<p>The first function takes in an array of up to 8 integers valued 1 or -1 and generates a corresponding byte; the second does the reverse.  Easy to modify for other integer values.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/converting-a-byte-to-an-array-and-vice-versa/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementing the Perceptron Rule</title>
		<link>http://log.liminastudio.com/itp/implementing-the-perceptron-rule</link>
		<comments>http://log.liminastudio.com/itp/implementing-the-perceptron-rule#comments</comments>
		<pubDate>Sat, 17 Apr 2010 21:41:52 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Learning Bit by Bit]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Neural Networks]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=586</guid>
		<description><![CDATA[A perceptron is one of the simplest forms of neural networks: a linear classifier.  It is a method of associating input patterns with output patterns, with the advantage that it is forgiving of noise in the input. The network consists of an input and output layer (and optional &#8220;hidden&#8221; layers in between) with weighted connections [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://en.wikipedia.org/wiki/Perceptron">perceptron</a> is one of the simplest forms of neural networks: a <a href="http://en.wikipedia.org/wiki/Linear_classifier">linear classifier</a>.  It is a method of associating input patterns with output patterns, with the advantage that it is forgiving of noise in the input.</p>
<p>The network consists of an input and output layer (and optional &#8220;hidden&#8221; layers in between) with weighted connections between all of them.  To train a perceptron, you present an input pattern and the output pattern it should learn to output.  Then you step through each pair of neurons in each pair of layers and modify their weights with this equation:</p>
<p>∆w<sub>i</sub> = c (d &#8211; sign( ∑x<sub>i</sub>w<sub>i</sub>)) x<sub>i</sub></p>
<p>&#8230;where w<sub>i</sub> is the ith weight (real-valued), c is the learning constant (i.e. 0.1), d is the desired output for this node (1 or -1), and x<sub>i</sub> is the input activation (1 or -1).  The input activation term indicates that the input node in question &#8220;contributes&#8221; to the output or &#8220;inhibits&#8221; it.  sign() is given by:</p>
<p>sign(x) = 1 if x ≥ 0, else -1</p>
<p>Here&#8217;s a C++ implementation from my <a href="http://github.com/virgildisgr4ce/Neuroduino">Neuroduino</a> Arduino library:</p>
<pre>int Neuroduino::signThreshold(double sum){
	if (sum &gt;= _net.Theta) {
		return 1;
	} else {
		return -1;
	}
}

double Neuroduino::weightedSum(int l, int node){
	// calculates input activation for a particular neuron
	int i;
	double currentWeight, sum = 0.0;

	for (i=0; i&lt;_net.Layer[l-1]-&gt;Units; i++) {
		currentWeight = _net.Layer[l]-&gt;Weight[node][i];
		sum += currentWeight * _net.Layer[l-1]-&gt;Output[i];
	}

	return sum;
}

void Neuroduino::adjustWeights(int trainArray[]){
	int l,i,j;
	int in,out, error;
	int activation;	// for each "rightmost" node
	double delta;

	for (l=1; l&lt;_numLayers; l++) {
		// cycle through each pair of nodes
		for (i=0; i&lt;_net.Layer[l]-&gt;Units; i++) {
			// "rightmost" layer
			// calculate current activation of this output node
			activation = signThreshold(weightedSum(l,i));
			out = trainArray[i];	// correct activation
			error = out - activation;	// -2, 2, or 0

			for (j=0; j&lt;_net.Layer[l-1]-&gt;Units; j++) {
				// "leftmost" layer

				in = _net.Layer[l-1]-&gt;Output[j];

				delta = _net.Eta * in * error;
				_net.Layer[l]-&gt;Weight[i][j] += delta;
			}
		}
	}
}

void Neuroduino::simulateNetwork(){
	/*****
	 Calculate activations of each output node
	 *****/
	int l,j;

	for (l=_numLayers-1; l&gt;0; l--) {
		// step backwards through layers
		// TODO: this will only work for _numLayers = 2!
		for (j=0; j &lt; _net.Layer[l]-&gt;Units; j++) {
			_output[j] = signThreshold(weightedSum(1, j));
		}
	}
}</pre>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/implementing-the-perceptron-rule/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Least Common Multiple algorithm in AS3 / Java</title>
		<link>http://log.liminastudio.com/itp/least-common-multiple-algorithm-in-as3-java</link>
		<comments>http://log.liminastudio.com/itp/least-common-multiple-algorithm-in-as3-java#comments</comments>
		<pubDate>Wed, 14 Apr 2010 21:42:29 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Writing and Reading Poetry in the Digital Age]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=581</guid>
		<description><![CDATA[Today I needed to find the Least Common Multiple of more than 2 numbers for my recombinatory poem tool, and discovered it&#8217;s more of a sophisticated problem than I had initially thought.  Here is my implementation, using recursive greatest common divisor reduction: function gcd(a, b){ // Euclidean algorithm var t; while (b != 0){ t [...]]]></description>
			<content:encoded><![CDATA[<p>Today I needed to find the <a href="http://en.wikipedia.org/wiki/Least_common_multiple">Least Common Multiple</a> of more than 2 numbers for my recombinatory poem tool, and discovered it&#8217;s more of a sophisticated problem than I had initially thought.  Here is my implementation, using recursive <a href="http://en.wikipedia.org/wiki/Euclidean_algorithm">greatest common divisor</a> reduction:</p>
<pre>function gcd(a, b){
	// Euclidean algorithm
	var t;
	while (b != 0){
		t = b;
		b = a % b;
		a = t;
	}
	return a;
}

function lcm(a, b){
	return (a * b / gcd(a, b));
}

function lcmm(args){
	// Recursively iterate through pairs of arguments
	// i.e. lcm(args[0], lcm(args[1], lcm(args[2], args[3])))

	if(args.length == 2){
		return lcm(args[0], args[1]);
	} else {
		var arg0 = args[0];
		args.shift();
		return lcm(arg0, lcmm(args));
	}
}</pre>
<p>Just pass in an array like so:</p>
<pre>trace(lcmm([1,2,3,4]));</pre>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/least-common-multiple-algorithm-in-as3-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Measuring XBee signal strength from the RSSI pin</title>
		<link>http://log.liminastudio.com/itp/physical-computing/measuring-xbee-signal-strength-from-the-rssi-pin</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/measuring-xbee-signal-strength-from-the-rssi-pin#comments</comments>
		<pubDate>Thu, 08 Apr 2010 01:52:24 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Microcontroller]]></category>
		<category><![CDATA[xbee]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=577</guid>
		<description><![CDATA[In my thesis I wanted to read the signal strength of incoming packets and store it in a variable on a microcontroller without using the XBee&#8217;s API mode.  XBee modules have an RSSI (Received Signal Strength Indicator) pin that outputs a PWM signal representing this value.  But how do you turn that PWM duty cycle [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://log.liminastudio.com/itp/the-dawn-chorus">thesis</a> I wanted to read the signal strength of incoming packets and store it in a variable on a microcontroller without using the XBee&#8217;s API mode.  XBee modules have an RSSI (Received Signal Strength Indicator) pin that outputs a PWM signal representing this value.  But how do you turn that PWM duty cycle into a useable integer on your microcontroller?  Luckily Arduino has a function made for just this application: <a href="file:///Applications/Arduino.app/Contents/Resources/Java/reference/PulseIn.html">pulseIn</a>.</p>
<ol>
<li>Connect the RSSI pin (pin 6) to a digital pin on your microcontroller.</li>
<li>Use this line of code in your Arduino loop:
<pre>rssiDur = pulseIn(digitalPin, LOW, 200);</pre>
</li>
</ol>
<p>pulseIn returns the duration of a pulse (specified HIGH or LOW) in microseconds (µs).  The 200 is a timeout value in µs—it waits this long to see if there&#8217;s going to be a pulse.  Since the XBee&#8217;s RSSI PWM period is 200µs, we want to wait at most that long to see if there&#8217;s a pulse at all.</p>
<p>Since this function gives you a duration, it&#8217;s up to you to map that to a value relevant to your program.  Since the maximum duration of the pulse would be 200µs, you could map that to your logical maximum.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/measuring-xbee-signal-strength-from-the-rssi-pin/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Dawn Chorus</title>
		<link>http://log.liminastudio.com/itp/the-dawn-chorus</link>
		<comments>http://log.liminastudio.com/itp/the-dawn-chorus#comments</comments>
		<pubDate>Tue, 06 Apr 2010 21:25:19 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Installation Art]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Sculpture]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=573</guid>
		<description><![CDATA[In the 5th grade, I devised my own language; for I could think of no better or more fascinating challenge. For my Master&#8217;s thesis at the Interactive Telecommunications Program at NYU, I could think of no better or more fascinating challenge than to invent language-inventing machines. What resulted was The Dawn Chorus, a group of [...]]]></description>
			<content:encoded><![CDATA[<p>In the 5th grade, I devised my own language; for I could think of no better or more fascinating challenge.  For my Master&#8217;s thesis at the Interactive Telecommunications Program at NYU, I could think of no better or more fascinating challenge than to invent language-inventing machines. What resulted was The Dawn Chorus, a group of electronic sculptures that do just this—emergently, and autonomously.  Using a suite of custom hardware and a simple neural network for each device, the individuals learn from each other and are thus able to converge on common, conventional &#8220;words&#8221; for their experiences, such as a flash of light or sudden noise.</p>
<p>Seem them in action:<br />
<object
		width="450"
		height="340"
		data="http://vimeo.com/moogaloop.swf?clip_id=12027457&amp;server=vimeo.com"
		type="application/x-shockwave-flash">
			<param name="allowfullscreen" value="true" />
			<param name="allowscriptaccess" value="always" />
			<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12027457&amp;server=vimeo.com" />
		</object>
</p>
<p>My final thesis presentation:<br />
<object
		width="450"
		height="340"
		data="http://vimeo.com/moogaloop.swf?clip_id=11523868&amp;server=vimeo.com"
		type="application/x-shockwave-flash">
			<param name="allowfullscreen" value="true" />
			<param name="allowscriptaccess" value="always" />
			<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=11523868&amp;server=vimeo.com" />
		</object>
</p>
<p>All the technical details are in <a href="http://log.liminastudio.com/wp-content/uploads/2010/04/Ted-Hayes-The-Dawn-Chorus.pdf">the thesis paper</a>!</p>
<p>In the gray pre-dawn, there sits, near the window-sill, a group of small, still beings.  Gradually, the diffuse edge of dawn crawls over them and, slowly, one or two of the pale, hooded entities begin to hum.  Softly and slowly, the pitches of their humming move toward consonance, and as a third and fourth join them, diverge again into dissonance.</p>
<p>This Dawn Chorus has gradually and emergently developed its own song-language, a metastructure that was never designed into any of the Chorus’s individual members.  Each member of the Chorus has the ability to sense the light and sound of its environment and the ability to vocalize—as well as the ability to learn from the actions of its neighbors.  In this way, the Chorus is able to naturally develop its own set of linguistic, musical conventions, entirely independently.</p>
<p>These sculptures contain a compact set of electronics comprising a microcontroller, sound and light sensors, a hybrid digital-analog synthesizer of my own design, a radio module and a speaker.  Each unit uses a simple neural network learning algorithm to associate environmental events and the actions of its milieu with generative sound patterns.  In short, the entities that make up the Dawn Chorus learn to talk to each other.</p>
<p>But what about?  The Dawn Chorus is not meant as an attempt to mimic animal behavior, but rather as an experiment in emergent poetics.  I see the songs of the Chorus as more musical than communicative, as more of a series of conversational poems than a survival strategy.  In time, we humans may even learn their language—but they will continue to enjoy it on their own.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/the-dawn-chorus/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Dawn Chorus Development II</title>
		<link>http://log.liminastudio.com/itp/the-dawn-chorus-development-ii</link>
		<comments>http://log.liminastudio.com/itp/the-dawn-chorus-development-ii#comments</comments>
		<pubDate>Thu, 01 Apr 2010 20:17:10 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Thesis]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Neural Networks]]></category>
		<category><![CDATA[Sound]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=569</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://log.liminastudio.com/wp-content/uploads/2010/04/NetDiagram.jpg"  rel="lightbox[roadtrip]"><img class="size-medium wp-image-570 alignnone" title="NetDiagram" src="http://log.liminastudio.com/wp-content/uploads/2010/04/NetDiagram-300x244.jpg" alt="" width="300" height="244" /></a></p>
<p><object
		width="450"
		height="340"
		data="http://vimeo.com/moogaloop.swf?clip_id=10599242&amp;server=vimeo.com"
		type="application/x-shockwave-flash">
			<param name="allowfullscreen" value="true" />
			<param name="allowscriptaccess" value="always" />
			<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10599242&amp;server=vimeo.com" />
		</object>
</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/the-dawn-chorus-development-ii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cryptoanarchism Presentation</title>
		<link>http://log.liminastudio.com/miscellaneous/cryptoanarchism-presentation</link>
		<comments>http://log.liminastudio.com/miscellaneous/cryptoanarchism-presentation#comments</comments>
		<pubDate>Wed, 03 Mar 2010 06:08:05 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Theory Club]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=557</guid>
		<description><![CDATA[Here&#8217;s my Cryptoanarchism Keynote presentation, chock full of links and tidbits. Cryptoanarchism]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s my Cryptoanarchism Keynote presentation, chock full of links and tidbits.</p>
<p><a href="http://log.liminastudio.com/wp-content/uploads/2010/03/Cryptoanarchism.zip">Cryptoanarchism</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/miscellaneous/cryptoanarchism-presentation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing the Enpersonator</title>
		<link>http://log.liminastudio.com/itp/developing-the-enpersonator</link>
		<comments>http://log.liminastudio.com/itp/developing-the-enpersonator#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:31:50 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[ITP]]></category>
		<category><![CDATA[Learning Bit by Bit]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Generative Text]]></category>
		<category><![CDATA[N-Grams]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=554</guid>
		<description><![CDATA[Using blog corpora from The Blog Authorship Corpus and the Political Blog Corpora, I have begun developing a simple blog-post generator for Enpersonator, the identity-creating software part of Automenon, an artwork in progress with Sofy Yuditskaya. See Enpersonator in action here: http://soniayuditskaya.tumblr.com/ Enpersonator is in development here: http://github.com/virgildisgr4ce/Enpersonator.  It requires the Python Tumblr library, which [...]]]></description>
			<content:encoded><![CDATA[<p>Using blog corpora from <a href="http://u.cs.biu.ac.il/~koppel/BlogCorpus.htm">The Blog Authorship Corpus</a> and the <a href="http://www.ark.cs.cmu.edu/blog-data/">Political Blog Corpora</a>, I have begun developing a simple blog-post generator for Enpersonator, the identity-creating software part of Automenon, an artwork in progress with Sofy Yuditskaya.</p>
<p>See Enpersonator in action here: <a href="http://soniayuditskaya.tumblr.com/">http://soniayuditskaya.tumblr.com/</a></p>
<p>Enpersonator is in development here: <a href="http://github.com/virgildisgr4ce/Enpersonator">http://github.com/virgildisgr4ce/Enpersonator</a>.  It requires the Python <a href="http://code.google.com/p/python-tumblr/">Tumblr library</a>, which requires <a href="http://www.djangoproject.com/download/">Django</a> for its utilities.  The Markov Generator is modified from <a href="decontextualize.com/teaching/dwwp/topics-n-grams-and-markov-chains/">Adam Parrish&#8217;s</a>.</p>
<p>The current version uses all 5 of the blogs in the Political Blog Corpora, comprising 133,953 tokens.  Not too shabby, but still not enough to avoid lots of wholesale reproductions.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://log.liminastudio.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/developing-the-enpersonator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
