<?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</title>
	<atom:link href="http://log.liminastudio.com/feed" rel="self" type="application/rss+xml" />
	<link>http://log.liminastudio.com</link>
	<description>Research &#38; Development at Limina.Studio</description>
	<lastBuildDate>Sat, 05 May 2012 18:56:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>How I Got a Tornado App Running on Heroku in 10 Seconds</title>
		<link>http://log.liminastudio.com/programming/how-i-got-a-tornado-app-running-on-heroku-in-10-seconds</link>
		<comments>http://log.liminastudio.com/programming/how-i-got-a-tornado-app-running-on-heroku-in-10-seconds#comments</comments>
		<pubDate>Thu, 26 Apr 2012 22:34:01 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Heroku]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tornado]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=995</guid>
		<description><![CDATA[I&#8217;d been wanting to try out Heroku and Tornado for a while, so why not try them together?  I found a nice starter repo by Mike Dory, co-author of the O&#8217;Reilly Tornado book, so I figured I&#8217;d use that.  I forked it and rearranged it a bit, and it worked perfectly!  Here&#8217;s what I did: [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d been wanting to try out Heroku and Tornado for a while, so why not try them together?  I found a <a href="https://github.com/mikedory/Tornado-Heroku-Helpers">nice starter repo</a> by Mike Dory, co-author of the <a href="http://shop.oreilly.com/product/0636920021292.do">O&#8217;Reilly Tornado book</a>, so I figured I&#8217;d use that.  I <a href="https://github.com/virgildisgr4ce/Tornado-Heroku-Helpers">forked it</a> and rearranged it a bit, and it worked perfectly!  Here&#8217;s what I did:</p>
<ol>
<li>I&#8217;m on a brand new computer, so I had to install some basic stuff first:</li>
<ol>
<li>Setuptools:
<pre>sudo curl http://python-distribute.org/distribute_setup.py | sudo python</pre>
</li>
<li>PIP:
<pre>sudo curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python</pre>
</li>
</ol>
<li>Get the <a href="https://github.com/virgildisgr4ce/Tornado-Heroku-Helpers">starter repo</a>.</li>
<li>Make a Heroku account if you don&#8217;t have one and <a href="https://devcenter.heroku.com/articles/quickstart">set it up</a>.</li>
<li>Make init-project.sh runnable:
<pre>chmod +x init-project.sh</pre>
</li>
<li>Run
<pre>./init-project.sh</pre>
</li>
<li>That should be it, and your Heroku app is live!</li>
</ol>
<p>Let me know if this works for y&#8217;all!</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/how-i-got-a-tornado-app-running-on-heroku-in-10-seconds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Build clj-processing</title>
		<link>http://log.liminastudio.com/programming/how-to-build-clj-processing</link>
		<comments>http://log.liminastudio.com/programming/how-to-build-clj-processing#comments</comments>
		<pubDate>Thu, 01 Mar 2012 20:42:45 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=991</guid>
		<description><![CDATA[Recently I wrote up a tutorial on getting started programming Processing sketches in Clojure. The clj-processing bindings require a slightly involved build process, which I&#8217;m detailing here.  I have since created a quick-start project that contains the pre-built binary, so unless you want to build a newer version of the processing.core.jar library, you can use [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I wrote up a tutorial on getting started programming Processing sketches in Clojure. The <a href="https://github.com/rosado/clj-processing">clj-processing bindings</a> require a slightly involved build process, which I&#8217;m detailing here.  I have since created a <a href="https://github.com/virgildisgr4ce/CloojProcessingStarter">quick-start project</a> that contains the pre-built binary, so unless you want to build a newer version of the processing.core.jar library, you can use that.  So here&#8217;s how to build it.<span id="more-991"></span></p>
<p>Both are in somewhat early development, so it&#8217;s a bit tricky, but here we go.</p>
<ol>
<li>Get Clooj by downloading the latest &#8220;standalone&#8221; jar from the <a href="https://github.com/arthuredelstein/clooj/downloads">downloads page</a>.  That file is the IDE; it doesn&#8217;t install, you just double-click on that and it opens the Clooj environment.</li>
<li>Build the clj-processing core.  This is the most complicated part; instructions are for OSX—other OSes have similar commands.</li>
<li>Clone the <a href="https://github.com/rosado/clj-processing">repo from github</a>.</li>
<li>Find your Processing core.jar and OpenGL jars.  They will be in (Processing Dir)/core.jar and (Processing Dir)/modes/java/libraries/opengl/library.  If you&#8217;re on OSX and have Processing in your root Applications folder, (Processing Dir) is this: /Applications/Processing.app/Contents/Resources/Java</li>
<li>From a terminal (on OSX, assuming you have Processing in your Applications folder):
<pre>export CLASSPATH="/Applications/Processing.app/Contents/Resources/Java:/Applications/Processing.app/Contents/Resources/Java/modes/java/libraries/opengl/library"</pre>
</li>
<li>From the same terminal, in the clj-processing directory, run
<pre>ant</pre>
<p>If you don&#8217;t have ant, you need to install Java.</li>
<li>This should build the processing.core.jar.  Now open Clooj and make a new project and note where you save it.</li>
<li>Make a lib/ folder in the root of your Clooj project folder.</li>
<li>Copy processing.core.jar and Processing&#8217;s core.jar file to your Clooj project lib/ folder.</li>
<li>Restart Clooj.  When it opens again, it should say something like this in the output window:
<pre>=== RESTARTING /Users/daleth/Projects/Clojure/Test REPL ===
Classpath:
/Users/daleth/Projects/Clojure/Test/lib
/Users/daleth/Projects/Clojure/Test/src
/Users/daleth/Projects/Clojure/Test/lib/core.jar
/Users/daleth/Projects/Clojure/Test/lib/processing.core.jar</pre>
</li>
<li>To get OpenGL functions, we have to take some extra steps. If you don&#8217;t need those, you can skip this part.</li>
<ol>
<li>First, copy the following files from (Processing Dir)/modes/java/libraries/opengl/library/:
<pre>gluegen-rt.jar
jogl.jar
opengl.jar</pre>
<p>to (Clooj Project)/lib/.</li>
<li>Now, to launch Clooj, you have to use a special command line:
<pre>java -Djava.library.path=(Processing Dir)/modes/java/libraries/opengl/library/macosx -jar /path/to/clooj-standalone.jar</pre>
</li>
<li>Note the /macosx on the end of that path—it points to the OS-specific dynamic libraries (.jnilib for OSX) instead of the jars.  This should be changed for your operating system (i.e. windows32 or linux64).</li>
</ol>
<li>Now you can open one of the examples from the clj-processing repo and hit Command-E to run the whole file.  This should open up an applet window with your Processing sketch running—and the best part is, you can modify the code at any time without restarting the applet!!  Try changing a value in the draw function and hitting Command-Enter, which will only run that function (as opposed to the whole file).  You can also run commands in the REPL and affect the applet—again, all while it&#8217;s still running.  Super fun!</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/how-to-build-clj-processing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Clojure &amp; Processing</title>
		<link>http://log.liminastudio.com/programming/getting-started-with-clojure-processing</link>
		<comments>http://log.liminastudio.com/programming/getting-started-with-clojure-processing#comments</comments>
		<pubDate>Tue, 28 Feb 2012 22:42:38 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=978</guid>
		<description><![CDATA[For the past little while here at the studio, there&#8217;s been a lot of buzz and conversation about Clojure, a modern LISP language that runs on the Java Virtual Machine.  It&#8217;s a fascinating language that can help anyone learn about functional programming.  There are a variety of interesting resources for learning Clojure, but I find [...]]]></description>
			<content:encoded><![CDATA[<p>For the past little while here at the studio, there&#8217;s been a lot of buzz and conversation about <a href="http://clojure.org/">Clojure</a>, a modern LISP language that runs on the Java Virtual Machine.  It&#8217;s a fascinating language that can help anyone learn about functional programming.  There are a variety of interesting resources for learning Clojure, but I find it&#8217;s most fun when your code can make something happen on your screen instantly, like <a href="http://processing.org/">Processing</a> does for Java.</p>
<p>As such, my friend <a href="http://timsgardner.com/">Tims Gardner</a> and I were talking about putting together a class on Clojure &amp; Processing using Roland Sadowski&#8217;s <a href="https://github.com/rosado/clj-processing">clj-processing bindings</a> and Arthur Edelstein&#8217;s <a href="https://github.com/arthuredelstein/clooj">Clooj IDE</a>.  So, to make things as fast and easy as possible for people to get started, I made a <a href="https://github.com/virgildisgr4ce/CloojProcessingStarter">Clooj/Processing Starter Project</a> that you can download and start using right away!  Here&#8217;s what you need to do.<span id="more-978"></span></p>
<ol>
<li>Clone or <a href="https://github.com/virgildisgr4ce/CloojProcessingStarter/zipball/master">Download</a> the <a href="https://github.com/virgildisgr4ce/CloojProcessingStarter">Starter Project</a> into a directory of your choice</li>
<li>Download <a href="https://github.com/arthuredelstein/clooj/downloads">Clooj standalone</a> and run it</li>
<li>In Clooj, do Project &gt; Open&#8230; and point at your new CloojProcessingProject folder</li>
<li>Click on one of the example scripts in the src/ directory</li>
<li>Hit Command-E to run it.</li>
<li>Enjoy! Note that you don&#8217;t have to close the applet window to change the code—try changing some code in the (draw) function and hit Command-Enter. Voila, the applet reflects your changes without restarting it! (This is buggy in OpenGL at the moment but works well for regular sketches.)</li>
<li>For reference to the names of Processing functions in clj-processing, refer to the <a href="https://github.com/rosado/clj-processing/blob/master/src/processing/core.clj">core source</a> (for now).</li>
<li>Note that as clj-processing is changed, the library (processing.core.jar) included may not; I&#8217;m including it pre-built for ease of use and setup.  I will try to update it as necessary, though!</li>
</ol>
<h3>For OpenGL Support</h3>
<ol>
<li>I made a startClooj.sh script that you need to run instead of just double-clicking on Clooj. Do <code>chmod +x startClooj.sh</code> (if necessary) and then <code>./startClooj.sh</code>.
<ol>
<li>Why is this necessary? For whatever reason, to enable OpenGL support, java has to be started with the java.library.path set to the path of Processing&#8217;s OGL dynamic libraries. These are different for different operating systems, so I&#8217;m not including all of them here. Hence, you&#8217;ll need Processing installed.</li>
<li>The script assumes that:
<ol>
<li>You have Processing installed in /Applications. If you don&#8217;t have Processing, <a href="http://processing.org/download/">download it</a> and put it wherever, and change the startClooj script to point at it.</li>
<li>Clooj is in /Applications and is named <code>clooj-0.2.8-standalone.jar</code>. If not, just change it in the script.</li>
</ol>
</li>
</ol>
</li>
</ol>
<h3>Learning Clojure</h3>
<ul>
<li>If you&#8217;ve never used Clojure before, but are curious to get started, check out these online tutorials:
<ul>
<li><a href="http://www.moxleystratton.com/article/clojure/for-non-lisp-programmers">Clojure for the Non-LISP Programmer</a></li>
<li><a href="http://java.ociweb.com/mark/clojure/article.html">Clojure &#8211; Functional Programming for the JVM</a></li>
<li><a href="http://www.youtube.com/watch?index=0&amp;feature=PlayList&amp;v=Aoeav_T1ARU&amp;list=PLAC43CFB134E85266">Intro to Clojure videos on YouTube</a></li>
<li><a href="http://fasttrackclojure.blogspot.com/">Fast Track Clojure</a></li>
</ul>
</li>
<li>Books &amp; Wikibooks:
<ul>
<li><a href="http://joyofclojure.com/">The Joy of Closure</a></li>
<li><a href="http://pragprog.com/book/shcloj2/programming-clojure">Programming Clojure</a></li>
<li><a href="http://en.wikibooks.org/wiki/Learning_Clojure">Learning Clojure</a></li>
<li><a href="http://en.wikibooks.org/wiki/Clojure_Programming">Clojure Programming</a></li>
</ul>
</li>
</ul>
<h3>Licensing</h3>
<p>My understanding is that Processing&#8217;s libraries (core.jar, gluegen-rt.jar, jogl.jar and opengl.jar) are licensed under the <a href="http://www.opensource.org/licenses/lgpl-2.1.php">GNU Lesser General Public License</a>, so I&#8217;m including them here for ease of use.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/getting-started-with-clojure-processing/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Kitchen Table Coders in The Atlantic</title>
		<link>http://log.liminastudio.com/programming/kitchen-table-coders-in-the-atlantic</link>
		<comments>http://log.liminastudio.com/programming/kitchen-table-coders-in-the-atlantic#comments</comments>
		<pubDate>Tue, 28 Feb 2012 20:30:44 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Kitchen Table Coders]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=979</guid>
		<description><![CDATA[My studiomates and I do workshops most weekends on various (sometimes esoteric) coding and hacking subjects, and recently The Atlantic ran a story about us on their blog. Awesome!  For more information on Kitchen Table Coders, check out our website and our EventBrite page.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.theatlantic.com/technology/archive/2012/02/how-one-kitchen-table-in-brooklyn-became-a-school-for-coders/252809/"><img class="alignnone" src="http://cdn.theatlantic.com/static/mt/assets/steven_heller/IMG_1077.jpg"  alt="" width="600" / rel="lightbox[roadtrip]"></a>My studiomates and I do workshops most weekends on various (sometimes esoteric) coding and hacking subjects, and recently The Atlantic <a href="http://www.theatlantic.com/technology/archive/2012/02/how-one-kitchen-table-in-brooklyn-became-a-school-for-coders/252809/">ran a story about us</a> on their blog.</p>
<p>Awesome!  For more information on Kitchen Table Coders, check out <a href="http://kitchentablecoders.com/">our website</a> and our <a href="http://www.eventbrite.com/org/1055703555">EventBrite page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/kitchen-table-coders-in-the-atlantic/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Event: First Symposium on Research Art</title>
		<link>http://log.liminastudio.com/events/event-first-symposium-on-research-art</link>
		<comments>http://log.liminastudio.com/events/event-first-symposium-on-research-art#comments</comments>
		<pubDate>Fri, 10 Feb 2012 04:02:19 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Research]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=974</guid>
		<description><![CDATA[The New York Society for Research Art presents a gathering of artists, curators, gallerists and theorists to investigate and debate the role of scientific and technological experiment in contemporary art practice—when is an artwork a science project, and when is a science project an artwork?  Our guest speakers will present a variety of perspectives on the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://log.liminastudio.com/wp-content/uploads/2012/02/symposium_poster_big.png"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-975" title="symposium_poster_big" src="http://log.liminastudio.com/wp-content/uploads/2012/02/symposium_poster_big-194x300.png" alt="" width="194" height="300" /></a>The <a href="nysra.com">New York Society for Research Art</a> presents a gathering of artists, curators, gallerists and theorists to investigate and debate the role of scientific and technological experiment in contemporary art practice—when is an artwork a science project, and when is a science project an artwork?  Our guest speakers will present a variety of perspectives on the topic, ranging from historical to curatorial to practical to economical.  The talks will be followed by an open panel discussion to address and debate the presented ideas interactively with the audience.</p>
<p>The event is free and open to the public! <a href="http://researchart.eventbrite.com/">Register on EventBrite (and please consider a donation!)</a>.  Also check out the <a href="https://www.facebook.com/events/316922931692369/">Facebook Event</a>.</p>
<p>Confirmed speakers include:</p>
<ul>
<li>Georgia Krantz, Education Manager, Guggenheim</li>
<li>Kyle McDonald, Artist</li>
<li>Luther Davis, Artist</li>
<li>Keynote by Ted Hayes and Alex Dodge, Artists</li>
</ul>
<p>Presenter Biographies:</p>
<p><strong>Georgia Krantz</strong> works full-time as the Education Manager for Adult Interpretive Programs at the Guggenheim Museum.  She is an art historian with extensive teaching experience from Ancient to Contemporary Art.  She is Adjunct Professor at the New School as well as ITP, and lectures at the Guggenheim, the Museum of Modern Art and the International Center of Photography.  Over the past few years she has been involved in several outside projects including an NEA-funded educational website for the Rubin Museum of Himalayan Art, and Vital Visionaries, a study by the National Institute on Aging on the value of art for promoting intergenerational communication.  She has an MA in Art History (Northern Renaissance and Baroque Art), and is working on her Ph.D dissertation in Modern Art.</p>
<p><strong>Kyle McDonald</strong> works with sounds and codes, exploring translation, contextualization, and similarity. With a background in philosophy and computer science, he strives to integrate intricate processes and structures with accessible, playful realizations that often have a do-it-yourself, open-source aesthetic.</p>
<p>http://kylemcdonald.net/</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/events/event-first-symposium-on-research-art/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome Disqus Comments!</title>
		<link>http://log.liminastudio.com/miscellaneous/welcome-disqus-comments</link>
		<comments>http://log.liminastudio.com/miscellaneous/welcome-disqus-comments#comments</comments>
		<pubDate>Sun, 15 Jan 2012 21:25:34 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Comments]]></category>
		<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=970</guid>
		<description><![CDATA[I just implemented Disqus comments for the entire blog, which should make things a bit nicer, since there&#8217;s been a lot of discussion on some posts.  Let me know what you think!]]></description>
			<content:encoded><![CDATA[<p>I just implemented <a href="disqus.com">Disqus comments</a> for the entire blog, which should make things a bit nicer, since there&#8217;s been a lot of discussion on some posts.  Let me know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/miscellaneous/welcome-disqus-comments/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Wireless Positioning &amp; Location Awareness: An Overview</title>
		<link>http://log.liminastudio.com/writing/research/wireless-positioning-location-awareness-an-overview</link>
		<comments>http://log.liminastudio.com/writing/research/wireless-positioning-location-awareness-an-overview#comments</comments>
		<pubDate>Wed, 21 Dec 2011 19:56:50 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[Location Awareness]]></category>
		<category><![CDATA[Location Fingerprinting]]></category>
		<category><![CDATA[R&D]]></category>
		<category><![CDATA[RFID]]></category>
		<category><![CDATA[wireless]]></category>
		<category><![CDATA[xbee]]></category>
		<category><![CDATA[ZigBee]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=965</guid>
		<description><![CDATA[For one of my major projects I&#8217;m tasked with figuring out how we can locate mobile wireless devices within a limited location, and it seems a lot of other people I&#8217;ve talked to are in the process of figuring out the same thing, so here&#8217;s an overview of what I&#8217;ve learned so far. Wireless Technologies [...]]]></description>
			<content:encoded><![CDATA[<p>For one of my major projects I&#8217;m tasked with figuring out how we can locate mobile wireless devices within a limited location, and it seems a lot of other people I&#8217;ve talked to are in the process of figuring out the same thing, so here&#8217;s an overview of what I&#8217;ve learned so far.<span id="more-965"></span></p>
<p><strong>Wireless Technologies / Protocols</strong></p>
<ul>
<li>WiFi (802.11)</li>
<li>XBee/ZigBee (802.15.4)</li>
<li>BlueTooth (802.15.1)</li>
<li>RFID</li>
<ul>
<li>Near Field Communication (Two-Way RFID)</li>
</ul>
</ul>
<p>These are four of the principal wireless technologies in mainstream use today.  The goal is to determine within some degree of accuracy the position in 2 or 3 dimensions of a wireless node.  Most, if not all, of the available approaches utilize the RSSI (Received Signal Strength Indicator) of the target node&#8217;s connections to nearby nodes.</p>
<p>If you have fixed routers with known locations, you can use the RSSI values of their connections to the target node to calculate the distances from the fixed nodes to the target node.  However, any RSSI value will be heavily influenced by a number of factors that may be out of your control: interfering structures, interfering people (we are walking bags of water, which readily absorbs 2.4ghz radiation) and other interfering radio signals or noise.</p>
<p>Due to these issues, some smart folks developed a system called RADAR that uses &#8216;location fingerprinting&#8217; to take a bunch of readings of signal strengths under varying conditions and associate them with known locations.  There are a variety of algorithms to tabulate this information, one of which uses neural networks.</p>
<p>Here is a collection of extremely useful papers and links that describe these various approaches, techniques and technologies:</p>
<p><strong>Resources</strong></p>
<ul>
<li><a href="http://www.sis.pitt.edu/~dtipper/2011/Survey1.pdf">Survey of Wireless Indoor Positioning Systems</a> [pdf]</li>
<li><a href="http://www.sensor-networks.org/index.php?page=0827027001">Indoor Location using 802.15.4</a></li>
<li><a href="http://www.ece.ucdavis.edu/~chuah/classes/eec173B/eec173b-s05/students/BluetoothTri_ppt.pdf">Bluetooth Triangulation</a> [pdf]</li>
<li><a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.124.3108&amp;rep=rep1&amp;type=pdf&amp;ei=jDbyTtTHO4Tz0gHl492zAg&amp;usg=AFQjCNHzIdwdyFqnY4nuSVz-ZFsj40Yn9Q&amp;sig2=YXe5yRHv3AXb9ZjySOeAEw">CS/RADAR: Indoor Location Discovery and Tracking</a> [pdf]</li>
<li><a href="http://crystal.uta.edu/~zaruba/winet_journal.pdf">Indoor location tracking using RSSI readings from a single Wi-Fi access point</a> [pdf]</li>
<li><a href="http://cial.csie.ncku.edu.tw/presentation/group_pdf/Location%20Estimation%20in%20ZigBee%20Network%20Based%20on%20Fingerprinting.pdf">Location Estimation in ZigBee Network Based on Fingerprinting</a> [pdf]</li>
<li><a href="http://www.cs.sunysb.edu/~pgupta/pdfs/COMSWARE_08.pdf">Experimental Analysis of RSSI-based Location Estimation in Wireless Sensor Networks</a> [pdf]</li>
<li><a href="http://www.freescale.com/files/microcontrollers/doc/brochure/PositionLocationMonitoring.pdf">Position Location Monitoring Using 802.15.4/ZigBee technology</a> [pdf]</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/writing/research/wireless-positioning-location-awareness-an-overview/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using the RN-XV WiFi Module as a Remote Switch</title>
		<link>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch</link>
		<comments>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch#comments</comments>
		<pubDate>Wed, 21 Dec 2011 00:40:57 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[RN-XV]]></category>
		<category><![CDATA[WiFi]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=959</guid>
		<description><![CDATA[It&#8217;s been a struggle, but I finally figured out how to use a Roving Networks RN-XV WiFi module as a remote switch.  It&#8217;s not hard now that I know how it works, but figuring out was quite difficult, as the manual is apparently incorrect and the firmware it shipped with was causing problems.  Read on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://log.liminastudio.com/wp-content/uploads/2011/12/IMG_2464.jpg"  rel="lightbox[roadtrip]"><img class="alignleft size-medium wp-image-960" title="RN-XV remote switch" src="http://log.liminastudio.com/wp-content/uploads/2011/12/IMG_2464-224x300.jpg" alt="" width="224" height="300" /></a>It&#8217;s been a struggle, but I finally figured out how to use a Roving Networks RN-XV WiFi module as a remote switch.  It&#8217;s not hard now that I know how it works, but figuring out was quite difficult, as the manual is apparently incorrect and the firmware it shipped with was causing problems.  Read on for the solution!</p>
<p><strong>Hardware</strong></p>
<p>Simple! Here&#8217;s all you need:</p>
<ul>
<li>An <a href="http://www.sparkfun.com/products/8276">XBee breakout board</a> (so you can plug it into your breadboard)</li>
<li>An <a href="http://www.sparkfun.com/products/8687">XBee Explorer</a> (not necessary with ad-hoc mode, but I had one around so this tutorial will use it)</li>
<li>3.3V regulator (ONLY—the module has a 10% tolerance, so anything beyond that will either not work or damage the module).</li>
<li>10µF and 0.1µF capacitors for good measure (clean power is especially important when using radio devices)</li>
<li>Power and Ground (Pins 1 and 10, the top and bottom pins on the left side of the module)</li>
<li>An LED connected to pin 9.  In practice you&#8217;d want to put a current-limiting resistor on it, i.e. 220 ohms, but for a quick test it won&#8217;t matter.  The module only drives 8mA on this pin.</li>
<li>That&#8217;s it!</li>
</ul>
<div><strong>Setup</strong></div>
<div></div>
<div>Although the module has an ad-hoc setup mode, where it broadcasts its own ad-hoc wifi network that you connect to with your computer, I found it faster to just plug it in directly to my computer using a serial adapter such as the XBee Explorer.  When you connect with ad-hoc mode, you talk to the module over telnet, when you use direct serial, you use a serial terminal such as <a href="http://freeware.the-meiers.org/">CoolTerm</a>, which the following instructions will use.</div>
<div></div>
<div>With your module plugged into USB, open up the port in CoolTerm.  You may see some data from the unit or a status message (it&#8217;s ok if you don&#8217;t).  Type $$$ (without hitting return) to enter command mode.  Now you can setup the module&#8217;s wifi settings (hit return after each command):</div>
<div></div>
<pre>set wlan phrase &lt;your wpa password&gt;
set wlan ssid &lt;your ssid&gt;
save
reboot</pre>
<p>&nbsp;</p>
<div></div>
<div>The module will power-cycle and the green status LED will start blinking.  After 5-10 seconds it should start blinking more slowly, which indicates that it has successfully connected to your WiFi network.  If your terminal session is still open, you should see a status message that indicates its success and its IP address (which you&#8217;ll need soon).</div>
<div></div>
<div>Now we need to update the firmware.  Luckily, they made this extremely easy!  Just do this:</div>
<div></div>
<pre>ftp u</pre>
<div></div>
<div>And it will take care of the rest—connecting to the Roving Networks FTP server, downloading the newest firmware image and &#8216;installing&#8217; it.</div>
<div></div>
<div>Once that&#8217;s done, you can transfer your module to your breadboard.  The rest of the work happens over telnet, so make sure your computer and module are connecting to the same WiFi network!  When the module is on your board and it&#8217;s joined your network, open a shell on your computer and do:</div>
<div></div>
<pre>telnet &lt;module's ip address&gt; 2000</pre>
<div></div>
<div>You should see a &#8216;*HELLO*&#8217; message.  Congratulations!  Now you can talk to your breadboarded module from anywhere!  To switch the LED on and off, first set the I/O direction mask:</div>
<div></div>
<pre>set sys mask 0x21f2</pre>
<div></div>
<div>This adds GPIO (General-Purpose Input/Output) Pin 1 (hex 0&#215;2) to the default mask, setting it as an output.  To switch it high, do:</div>
<div></div>
<pre>set sys output 2 2</pre>
<div></div>
<div>Similarly, to switch it low:</div>
<div></div>
<pre>set sys output 0 2</pre>
<div></div>
<div>And that&#8217;s it!  You can now, for instance, have a web server connect directly to that port and issue those commands dynamically to control your hardware remotely.  Try hooking up a relay to switch a house light!</div>
<p><strong>References</strong></p>
<ul>
<li><a href="http://www.rovingnetworks.com/files/resources/WiFly-RN-UM.pdf">RN-XV User Manual</a> (API reference, etc.)</li>
<li><a href="http://www.rovingnetworks.com/files/resources/WiFly-RN-XV-DS.pdf">RN-XV Datasheet</a> (pinout and electrical characteristics)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/itp/physical-computing/using-the-rn-xv-wifi-module-as-a-remote-switch/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Getting Started Developing with the WiMM One</title>
		<link>http://log.liminastudio.com/programming/getting-started-developing-with-the-wimm-one</link>
		<comments>http://log.liminastudio.com/programming/getting-started-developing-with-the-wimm-one#comments</comments>
		<pubDate>Sat, 17 Dec 2011 00:23:34 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[WiMM]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=955</guid>
		<description><![CDATA[We just received a Developer Preview of the new WiMM One wearable touchscreen device, and dove into developing for it.  It runs Android so you have to get the Android SDK set up.  Here are our notes so far. Install Eclipse.  I had the &#8220;Galileo&#8221; version which I found out the hard way isn&#8217;t supported, [...]]]></description>
			<content:encoded><![CDATA[<div>We just received a Developer Preview of the new <a href="wimm.com">WiMM One</a> wearable touchscreen device, and dove into developing for it.  It runs Android so you have to get the Android SDK set up.  Here are our notes so far.</div>
<ol>
<li>Install Eclipse.  I had the &#8220;Galileo&#8221; version which I found out the hard way isn&#8217;t supported, so I downloaded the newest as of writing (&#8220;Indigo&#8221;).</li>
<li>Install the <a href="http://developer.android.com/sdk/index.html">Android SDK</a>.</li>
<li>Install the <a href="http://developer.android.com/sdk/eclipse-adt.html#installing">Android Developer Tools (ADT) plugin</a> for Eclipse.</li>
<li>Download the <a href="https://dev.wimm.com/developer/resources/sdk">WiMM Android Add-On</a> (make a free developer account first to get it).</li>
<li>Put the WiMM Add-On folder in the add-ons folder in the Android SDK.</li>
<li>Run the Android SDK Manager from Eclipse &gt; Window.</li>
<li>Select and install Android 2.1 (API 7) and the Android SDK Platform Tools.</li>
<li>Make a WiMM Android Virtual Device with SD card 2 GiB and resolution 160&#215;160.</li>
<li>You can now make new projects that target the WiMM One Add-On.</li>
</ol>
<p><strong>Building and Running on the Emulator</strong></p>
<ol>
<li>Open a terminal at [your-android-sdk]/add-ons/addon_wimm_one_7/tools and run ./emu.</li>
<li>Wait for the emulator to boot up (it takes a minute).</li>
<li>Hit &#8220;Run&#8221; in Eclipse.</li>
<ol>
<li>If you get an expired certificate error, <a href="http://stackoverflow.com/questions/2194808/debug-certificate-expired-error-in-eclipse-android-plugins">look here</a>.</li>
</ol>
<li>If you&#8217;re prompted to choose a device, choose the emulator.</li>
</ol>
<p><strong>Building and Running on the Device</strong></p>
<ol>
<li>On your WiMM, go to Settings &gt; Advanced and turn on &#8220;Allow USB debugging&#8221;</li>
<li>Plug in your WiMM.</li>
<li>Open a terminal at addon_wimm_one_7/tools and run ./android update adb.</li>
<li>Go to addon_wimm_one_7/platform-tools and run ./adb kill-server and ./adb start-server.</li>
<li>Now run ./adb devices and you should see your hardware device listed as well as any running emulators.</li>
<li>Now when you run your app from Eclipse, you can choose your hardware device!</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/getting-started-developing-with-the-wimm-one/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting started with the RN-XV WiFi Module &amp; Node.js</title>
		<link>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js</link>
		<comments>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js#comments</comments>
		<pubDate>Thu, 08 Dec 2011 04:08:54 +0000</pubDate>
		<dc:creator>Tedb0t</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Physical Computing]]></category>
		<category><![CDATA[Sockets]]></category>

		<guid isPermaLink="false">http://log.liminastudio.com/?p=951</guid>
		<description><![CDATA[The RN-XV WiFi module is a nifty little WiFi module designed to fit the same pinout as an XBee, so it&#8217;s intended to be a drop-in replacement. Tonight I whipped up a little test of the module to get a joystick to talk to a Node.js server over WiFi.  I attached +3V power and ground [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.sparkfun.com/products/10822">RN-XV WiFi module</a> is a nifty little WiFi module designed to fit the same pinout as an XBee, so it&#8217;s intended to be a drop-in replacement.</p>
<p>Tonight I whipped up a little test of the module to get <a href="http://www.sparkfun.com/products/9032">a joystick</a> to talk to a <a href="http://nodejs.org/">Node.js</a> server over WiFi.  I attached +3V power and ground to the module (pins 1 and 10, respectively), pin 2 (TX) to Arduino digital pin 0 (RX), and pin 1 (RX) to Arduino digital pin 1 (TX).  That&#8217;s all the hardware setup you need.</p>
<p>I used <a href="https://github.com/jcrouchley/WiFly-Shield">this WiFly library</a> to handle the connection.  All it does is talk to the WiFly module over serial and send control commands, so the library abstracts that a bit.  Here&#8217;s the Arduino sketch I built:<span id="more-951"></span></p>
<script src = "http://gist-it.sudarmuthu.com/github/KitchenTableCoders/node-pong/blob/master/nodeArduinoWiFly/nodeArduinoWiFly.ino?footer=minimal"></script>
<p>And here&#8217;s the very basic Node.js server that just prints out the values it receives:</p>
<script>document.write('<link rel="stylesheet" href="https://gist.github.com/stylesheets/gist/embed.css"/>')

document.write('<div id=\"gist-2604751\" class=\"gist\">\n\n        <div class=\"gist-file\">\n          <div class=\"gist-data gist-syntax\">\n              <div class=\"gist-highlight\"><pre><div class=\'line\' id=\'LC1\'><span class="kd">var<\/span> <span class="nx">net<\/span> <span class="o">=<\/span> <span class="nx">require<\/span><span class="p">(<\/span><span class="s1">&#39;net&#39;<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC2\'><br/><\/div><div class=\'line\' id=\'LC3\'><span class="kd">var<\/span> <span class="nx">server<\/span> <span class="o">=<\/span> <span class="nx">net<\/span><span class="p">.<\/span><span class="nx">createServer<\/span><span class="p">(<\/span><span class="kd">function<\/span><span class="p">(<\/span><span class="nx">socket<\/span><span class="p">)<\/span> <span class="p">{<\/span> <span class="c1">//&#39;connection&#39; listener<\/span><\/div><div class=\'line\' id=\'LC4\'>	<span class="nx">console<\/span><span class="p">.<\/span><span class="nx">log<\/span><span class="p">(<\/span><span class="s1">&#39;server connected&#39;<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC5\'><br/><\/div><div class=\'line\' id=\'LC6\'>	<span class="nx">socket<\/span><span class="p">.<\/span><span class="nx">setEncoding<\/span><span class="p">(<\/span><span class="s1">&#39;ascii&#39;<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC7\'><br/><\/div><div class=\'line\' id=\'LC8\'>	<span class="nx">socket<\/span><span class="p">.<\/span><span class="nx">on<\/span><span class="p">(<\/span><span class="s1">&#39;end&#39;<\/span><span class="p">,<\/span> <span class="kd">function<\/span><span class="p">()<\/span> <span class="p">{<\/span><\/div><div class=\'line\' id=\'LC9\'>		<span class="nx">console<\/span><span class="p">.<\/span><span class="nx">log<\/span><span class="p">(<\/span><span class="s1">&#39;server disconnected&#39;<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC10\'>	<span class="p">});<\/span><\/div><div class=\'line\' id=\'LC11\'><br/><\/div><div class=\'line\' id=\'LC12\'>	<span class="nx">socket<\/span><span class="p">.<\/span><span class="nx">on<\/span><span class="p">(<\/span><span class="s1">&#39;data&#39;<\/span><span class="p">,<\/span> <span class="kd">function<\/span><span class="p">(<\/span><span class="nx">data<\/span><span class="p">){<\/span><\/div><div class=\'line\' id=\'LC13\'>		<span class="nx">console<\/span><span class="p">.<\/span><span class="nx">log<\/span><span class="p">(<\/span><span class="nx">data<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC14\'>	<span class="p">});<\/span><\/div><div class=\'line\' id=\'LC15\'><span class="p">});<\/span><\/div><div class=\'line\' id=\'LC16\'><br/><\/div><div class=\'line\' id=\'LC17\'><span class="nx">server<\/span><span class="p">.<\/span><span class="nx">listen<\/span><span class="p">(<\/span><span class="mi">5001<\/span><span class="p">,<\/span> <span class="kd">function<\/span><span class="p">()<\/span> <span class="p">{<\/span> <span class="c1">//&#39;listening&#39; listener<\/span><\/div><div class=\'line\' id=\'LC18\'>	<span class="nx">console<\/span><span class="p">.<\/span><span class="nx">log<\/span><span class="p">(<\/span><span class="s1">&#39;server bound&#39;<\/span><span class="p">);<\/span><\/div><div class=\'line\' id=\'LC19\'><span class="p">});<\/span><\/div><\/pre><\/div>\n          <\/div>\n\n          <div class="gist-meta">\n            <a href="https://gist.github.com/raw/2604751/5ee017c9f513f4095a90326605fe01e0600d448c/nodeServer.js" style="float:right;">view raw<\/a>\n            <a href="https://gist.github.com/2604751#file_node_server.js" style="float:right;margin-right:10px;color:#666">nodeServer.js<\/a>\n            <a href="https://gist.github.com/2604751">This Gist<\/a> brought to you by <a href="http://github.com">GitHub<\/a>.\n          <\/div>\n        <\/div>\n<\/div>\n')
</script><div style='margin-bottom:1em;padding:0;'><noscript><code><pre style='overflow:auto;margin:0;padding:0;border:1px solid #DDD;'>var net = require('net');

var server = net.createServer(function(socket) { //'connection' listener
	console.log('server connected');

	socket.setEncoding('ascii');

	socket.on('end', function() {
		console.log('server disconnected');
	});

	socket.on('data', function(data){
		console.log(data);
	});
});

server.listen(5001, function() { //'listening' listener
	console.log('server bound');
});</pre></code></noscript></div>
]]></content:encoded>
			<wfw:commentRss>http://log.liminastudio.com/programming/getting-started-with-the-rn-xv-wifi-module-node-js/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

