<?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>Wyld Collective Ltd</title>
	<atom:link href="http://wyldco.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://wyldco.com/blog</link>
	<description>It&#039;s a brave new computational world. We can help you make it your own.</description>
	<lastBuildDate>Wed, 11 Apr 2012 13:42:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CakePHP and Twilio: Receiving and Replying to SMS</title>
		<link>http://wyldco.com/blog/2012/04/cakephp-and-twilio-receiving-and-replying-to-sms/</link>
		<comments>http://wyldco.com/blog/2012/04/cakephp-and-twilio-receiving-and-replying-to-sms/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 20:51:32 +0000</pubDate>
		<dc:creator>Bruno Nadeau</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sms]]></category>
		<category><![CDATA[twilio]]></category>

		<guid isPermaLink="false">http://wyldco.com/blog/?p=193</guid>
		<description><![CDATA[We recently started updating a project that will be re-released, with a new face, and a new back, in June. Re-released because it&#8217;s been around for many years, and until last month, it relied on an SMS modem to receive &#8230; <a href="http://wyldco.com/blog/2012/04/cakephp-and-twilio-receiving-and-replying-to-sms/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We recently started updating a project that will be re-released, with a new face, and a new back, in June. Re-released because it&#8217;s been around for many years, and until last month, it relied on an SMS modem to receive messages, and then forward them to a database to be processed. Every time we wanted to install this project in a new city, we had to run around to find a SIM card, adjust the modem&#8217;s settings if we were in a country with a different infrastructure than Canada, and make sure we found a plan that wouldn&#8217;t cost us a limb. Then came <a href="http://www.twilio.com/" title="Twilio" target="_blank">Twilio</a>. That&#8217;s all the back story I&#8217;m going to cover for now, more on that project later.</p>
<p>This post does NOT cover the use of the Twilio library, because we simply haven&#8217;t had the need for it for this project. The next steps explain how to receive, and reply to SMS messages that are sent to a Twilio number, with Twilio set to make requests to a <a href="http://cakephp.org/" title="CakePHP" target="_blank">CakePHP</a> app.<span id="more-193"></span></p>
<p>This example is intended for CakePHP 2.1, because it makes this process so easy, but a few tweaks will make it work with earlier versions.</p>
<p><strong>1. Setup a Twilio number, and a TwiML application.</strong><br />
If you got to this point in the post, your should know what Twilio is. You can use the number that comes with the trial version, but we decided to purchase a number that we&#8217;ll keep around to test this project, and future ones.</p>
<p>After you purchase the number, you&#8217;ll be taken to a page where you can enter the Request URLs that Twilio will call when it receives Voice call and SMS messages. You could enter Request URLs directly here, but don&#8217;t worry about those for now, we will create a TwiML application instead. One reason why we prefer using a TwiML application is because it makes it easier to switch quickly between development urls and production urls.</p>
<p>While in your account, open the &#8216;Apps&#8217; tab, and create a new TwiML app. You should see a field for the name, and sections for the Voice, and below, the SMS parameters. Name the app something funky, and in the SMS section, look for the field where you can enter the Request URL that Twilio will call. Our Request URL looks something like this: http://fancydomain.com/twilio/installations/receive_sms.xml</p>
<p>Here are the different parts, and how they relate to our CakePHP project:</p>
<ul>
<li>fancydomain.com &#8211; just the domain, nothing special here.</li>
<li>twilio &#8211; this is optional, but we use the twilio prefix to make our code more readable.</li>
<li>installations &#8211; this is our controller, yours will probably be different.</li>
<li>receive_sms &#8211; this is our action that receives an SMS message, and sends a response.</li>
<li>xml &#8211; last but not least, the file extension that controls the view to output the xml response.</li>
</ul>
<p>The next few steps will cover the changes (or additions) you need to make to your CakePHP app so that each parts of the Request URL is treated correctly.</p>
<p><strong>2. Setting up the Twilio prefix</strong><br />
This part is optional. If you remove &#8216;/twilio&#8217; from the URL, you can skip this step. If you decide to not use this, just remember not to include the &#8216;twilio_&#8217; prefix in your action name when you get to step 4.</p>
<p>All that is required is one line in your &#8216;app/Config/core.php&#8217; file. Find the line that configures &#8216;Routing.prefixes&#8217;, and change it to the following to setup the &#8216;twilio&#8217; prefix. We already had the &#8216;admin&#8217; prefix so ours looks like this:</p>
<pre class="brush: php; title: ; notranslate">Configure::write('Routing.prefixes', array('admin', 'twilio'));</pre>
<p><strong>3. Parsing the file extension in the router</strong><br />
Another easy step, we need a single line in &#8216;app/Config/routes.php&#8217; to handle the &#8216;.xml&#8217; extension of our Request URL. Adding the following line &#8212; we added it at the beginning &#8212; will tell CakePHP to switch to the XmlView to render the response as XML.</p>
<pre class="brush: php; title: ; notranslate">Router::parseExtensions('xml');</pre>
<p><strong>4. Add the action</strong><br />
In our Request URL we specified, first, the &#8216;twilio&#8217; prefix, then the &#8216;installations&#8217; controller, and finally the &#8216;receive_sms&#8217; action, so we need to create the following function in &#8216;app/Controller/InstallationsController.php&#8217;:</p>
<pre class="brush: php; title: ; notranslate">public function twilio_receive_sms() {
  //make sure we have a post request
  if (!$this-&gt;request-&gt;is('post')) {
    throw new MethodNotAllowedException();
  }

  //find the correct installation using the twilio phone number
  $installation = $this-&gt;Installation-&gt;findByPhone($this-&gt;request-&gt;data['To']);
  if ($installation == null) {
    return;
  }

  $message = array(
    'installation_id' =&gt; $installation['Installation']['id'],
    'source' =&gt; $this-&gt;request-&gt;data['From'],
    'message'=&gt; $this-&gt;request-&gt;data['Body'],
  );

  $this-&gt;Installation-&gt;Message-&gt;create();
  if (!$this-&gt;Installation-&gt;Message-&gt;save($message)) {
    return;
  }

  //send response
  $this-&gt;set('response', array(
    'Response' =&gt; array(
      'Sms' =&gt; 'Thank you!',
    )
  ));
  $this-&gt;set('_serialize', 'response');
}</pre>
<p>A few notes about this code before we move on. At the top, we check to make sure the action is called from a POST request. If you specified GET instead of POST in your TwiML application, then you should check for the same method your assigned to your Request URL. Then, for our project, each installation object is matched with a Twilio number, so we find the installation with the &#8216;findByPhone&#8217; method, passing it the &#8216;To&#8217; field that Twilio passed to the Request URL. We then create a message array, but in this case, we only need the &#8216;From&#8217; and &#8216;Body&#8217; fields. If you want to know what data Twilio passes, you should read the <a href="https://www.twilio.com/docs/api/twiml/sms/twilio_request" title="Twilio SMS Request" target="_blank">Twilio SMS Request</a> page in their documentation. After that, we create and save a message object linked to the correct installation. Finally we create an array for the response object, and make sure we set the &#8216;_serialize&#8217; variable so that the XmlView will know to output the content of the &#8216;response&#8217; variable as XML, following the instructions for the <a href="http://book.cakephp.org/2.0/en/views/json-and-xml-views.html" title="JSON and XML views" target="_blank">JSON and XML views</a> of CakePHP.</p>
<p><strong>5. Try it!</strong><br />
Give it a go. Send a text message to your Twilio number, and if you set up everything correctly, you should receive an SMS reply that says &#8216;Thank you!&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/04/cakephp-and-twilio-receiving-and-replying-to-sms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Favorite tools for less than $100: Post-it glue</title>
		<link>http://wyldco.com/blog/2012/03/favorite-tools-for-less-than-100-post-it-glue/</link>
		<comments>http://wyldco.com/blog/2012/03/favorite-tools-for-less-than-100-post-it-glue/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 00:37:41 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://wyldco.com/blog/?p=180</guid>
		<description><![CDATA[One point that I try to drive home when talking to people about design research, especially &#8220;indy&#8221; research done at small businesses like Wyld Collective, is that research in our area doesn&#8217;t require incredibly costly or dangerous equipment. No linear &#8230; <a href="http://wyldco.com/blog/2012/03/favorite-tools-for-less-than-100-post-it-glue/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One point that I try to drive home when talking to people about design research, especially &#8220;indy&#8221; research done at small businesses like Wyld Collective, is that research in our area doesn&#8217;t require incredibly costly or dangerous equipment. No linear accelerators or biohazards here. So we&#8217;re starting a series of blog posts, to be published here once every week or two, about our favorite tools under $100. And we mean <em>legally</em> obtainable for under $100. We will not be urging you to bittorrent CS6.</p>
<p>We&#8217;re kicking this series off with something <em>very</em> inexpensive. The item I&#8217;m writing about today is <strong>post-it glue</strong>, <a href="http://www.staples.ca/ENG/Catalog/cat_sku.asp?CatIds=6706%2C6721%2C6717,6708&amp;webid=18842&amp;affixedcode=WW&amp;VLP=1">available from Staples for $2.04</a>. I mean, <em>obviously</em> post-its are useful, everyone knows that. But not many people know that you can actually buy glue sticks that will let you turn anything into a post-it. Seriously, try it. It&#8217;s a little bit scary how satisfying it is to postitify all the arbitrary pieces of paper in your life. We found this stuff a little over a year ago, and have been using it since. Whenever we do any paper prototyping, it goes into heavy rotation.</p>
<p>The fun and challenge of sketching and prototyping is to craft something that&#8217;s at the proper resolution to teach you something. A prototype that looks too polished is liable to intimidate the person you&#8217;re asking to critique it; it looks too close to done, and suggestions for major changes would feel out of line. Anyway, too much detail too early is a waste of time, since you&#8217;re going to revise everything as you go. And yet, at least parts of your prototype need to be detailed enough to discern opportunities and problems, to imagine what it would be like in use. How much detail to include, and where to put it, depends a lot on what you&#8217;re trying to learn from the prototype. In my experience, you may need to include a convincing-looking animation in a prototype, even when everything else can look sketchy and wireframey, if (for example) you&#8217;re trying to figure out how a certain component can grab the user&#8217;s attention.</p>
<p>So the great thing about post-it glue is that it gives you unlimited ability to create removable and replaceable parts for your paper prototype while retaining just the look and feel you want. This helped us stretch the principles of paper prototyping to apply not just to conventional screen interfaces (though we do those, too), but to prototyping spatial and tangible interactions. If you&#8217;re testing, say, the playability of a scavenger-hunt type game, you can&#8217;t just sketch components onto a post-it and expect them to be legible from across the room&#8230; you want to print out something clear, clean and iconic and <em>turn it into</em> a post-it.</p>
<p>In the gallery below, you can see how we used post-it glue to fake a sequence of system actions and reactions scattered among many screens all around a room.</p>

<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6172.jpg' rel='shadowbox[sbalbum-180];player=img;' title='cutting and gluing in anticipation of a play-test'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6172-150x150.jpg" class="attachment-thumbnail" alt="cutting and gluing in anticipation of a play-test" title="cutting and gluing in anticipation of a play-test" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6179.jpg' rel='shadowbox[sbalbum-180];player=img;' title='One wall display - peel off the post-it to see the next screen'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6179-150x150.jpg" class="attachment-thumbnail" alt="One wall display - peel off the post-it to see the next screen" title="One wall display - peel off the post-it to see the next screen" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6180.jpg' rel='shadowbox[sbalbum-180];player=img;' title='Components arranged on a central &quot;display&quot;'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6180-150x150.jpg" class="attachment-thumbnail" alt="Components arranged on a central &quot;display&quot;" title="Components arranged on a central &quot;display&quot;" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6181.jpg' rel='shadowbox[sbalbum-180];player=img;' title='Displays arranged on the wall'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6181-150x150.jpg" class="attachment-thumbnail" alt="Displays arranged on the wall" title="Displays arranged on the wall" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6182.jpg' rel='shadowbox[sbalbum-180];player=img;' title='Ordering a sequence of screens to be shown on one display'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_6182-150x150.jpg" class="attachment-thumbnail" alt="Ordering a sequence of screens to be shown on one display" title="Ordering a sequence of screens to be shown on one display" /></a>

]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/03/favorite-tools-for-less-than-100-post-it-glue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cosmodôme: Le Rêve Impossible</title>
		<link>http://wyldco.com/blog/2012/03/cosmodome-le-reve-impossible/</link>
		<comments>http://wyldco.com/blog/2012/03/cosmodome-le-reve-impossible/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 02:42:56 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wyldco.com/blog/?p=173</guid>
		<description><![CDATA[I admit it, I was doing a vanity search. A while back we did this really fun project designing an exhibit about the International Space Station with some guys from gsmprjct, due to open at the Cosmodôme in Laval this last winter. &#8230; <a href="http://wyldco.com/blog/2012/03/cosmodome-le-reve-impossible/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I admit it, I was doing a vanity search.</p>
<p>A while back we did this really fun project designing <a href="http://wyldco.com/project/iss/">an exhibit about the International Space Station</a> with some guys from <a href="http://gsmprjct.com/">gsmprjct</a>, due to open at the<a href="http://www.cosmodome.org/"> Cosmodôme</a> in Laval this last winter. We helped brainstorm the concept for the ISS portion of the exhibit, and then came up with some game mechanics and put together the interaction design to get a whole group of visitors to work together gathering components from all over the world to assemble the International Space Station. We also developed a deep and abiding love for cosmonauts and their moustaches.</p>
<p>So we ran across some promotional videos and some pictures of how the exhibit turned out. (The video&#8217;s in French, FYI.)</p>
<p><iframe src="http://www.youtube.com/embed/2TJfST_5-mg" frameborder="0" width="560" height="315"></iframe></p>
<p>And there are some <a href="https://www.facebook.com/media/set/?set=a.282328021803168.57270.226589507377020&amp;type=1">lovely pictures up on the Cosmodôme&#8217;s Facebook page</a>. (#9 and #1 are the room we worked on.)</p>
<p>We&#8217;ll have some more photos of the final project to post here soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/03/cosmodome-le-reve-impossible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our latest project: luciole</title>
		<link>http://wyldco.com/blog/2012/03/our-latest-project-luciole/</link>
		<comments>http://wyldco.com/blog/2012/03/our-latest-project-luciole/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 15:39:51 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://wyldco.com/blog/?p=145</guid>
		<description><![CDATA[We&#8217;ve been holed up for a while, here at Wyld Collective headquarters, madly prototyping our very first, very own line of products. luciole is simplicity itself. It&#8217;s a kit for building adaptable, rechargeable lights. It&#8217;s a great first-time project for someone &#8230; <a href="http://wyldco.com/blog/2012/03/our-latest-project-luciole/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been holed up for a while, here at Wyld Collective headquarters, madly prototyping our very first, very own line of products.</p>
<p><iframe src="http://www.youtube.com/embed/ns-PW2tSlDw" frameborder="0" width="420" height="315"></iframe></p>
<p><em>luciole</em> is simplicity itself. It&#8217;s a kit for building adaptable, rechargeable lights. It&#8217;s a great first-time project for someone who wants to learn about electronics (or teach their kid). But we wanted to go above and beyond what most electronics kits offer you.</p>
<p>We&#8217;re putting a lot of thought into the design of the circuit boards for <em>luciole</em>, aiming to create something that you can assemble and reassemble into lots of different shapes. This gives you the freedom to create whatever form you want for your light, and to change that form if you change your mind.</p>
<p>Moreover, if you want something with a little more polish, we&#8217;ll be offering a few different kinds of cases designed specifically for <em>luciole</em>. Forget about finishing your assembly and ending up with a bare PCB, or stuffing it inside an altoids tin (which, OK, sometimes conveys a sense of DIY-chic, but you want other options, don&#8217;t you?). <em>luciole</em> gives you the sense of know-how and ownership that comes with hacking your own electronics, but if you&#8217;ve got it on display when your grandparents come over, they won&#8217;t think you&#8217;re a crazy bomb-maker. They&#8217;ll just think you have great taste.</p>

<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_1176.jpg' rel='shadowbox[sbalbum-145];player=img;' title='prototype kits'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/IMG_1176-150x150.jpg" class="attachment-thumbnail" alt="prototype kits" title="prototype kits" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/form_factor3.jpg' rel='shadowbox[sbalbum-145];player=img;' title='gooseneck lamp'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/form_factor3-150x150.jpg" class="attachment-thumbnail" alt="gooseneck lamp" title="gooseneck lamp" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/form_factor2.jpg' rel='shadowbox[sbalbum-145];player=img;' title='ambient light'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/form_factor2-150x150.jpg" class="attachment-thumbnail" alt="ambient light" title="ambient light" /></a>
<a href='http://wyldco.com/blog/wp-content/uploads/2012/03/iq_light.jpg' rel='shadowbox[sbalbum-145];player=img;' title='IQ Light'><img width="150" height="150" src="http://wyldco.com/blog/wp-content/uploads/2012/03/iq_light-150x150.jpg" class="attachment-thumbnail" alt="IQ Light" title="IQ Light" /></a>

<p>You can assemble the components on these guys in various different ways &#8212; whatever suits your purpose. The center piece of the PCB where the LEDs attach can pop out of the board.</p>
<p>With LEDs separated from the base and batteries, you can use <em>luciole</em> to make yourself a focal desk lamp. Or you can make something like the cute little hockey puck pictured above for ambient light, using the exact same electronics kit.</p>
<p>The IQ light is versatile, good looking, relatively easy to put together, and in the public domain, so you can do whatever you want with it. Using just a single shape cut from thin plastic or thick paper, you can put together some pretty cool modern-looking polyhedrons. luciole works great inside of these.</p>
<p>We anticipate that we&#8217;ll be able to make the bare-bones kits available around May, with some beautiful cases to unveil at the end of the summer. If you are a product designer and/or an awesome crafter, and you&#8217;re interested in having some of your work featured on our site, get in touch with us at info [at] wyldco.com</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/03/our-latest-project-luciole/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Research with a Hacker Ethos</title>
		<link>http://wyldco.com/blog/2012/03/research-with-a-hacker-ethos/</link>
		<comments>http://wyldco.com/blog/2012/03/research-with-a-hacker-ethos/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 04:20:34 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wyldco.com/blog/?p=139</guid>
		<description><![CDATA[We&#8217;re  holding in our hands a brand new issue of the ACM&#8217;s interactions magazine, which contains our article &#8220;Research with a Hacker Ethos: what DIY means for tangible interaction research&#8220;. (This is a scan of the magazine article, but we &#8230; <a href="http://wyldco.com/blog/2012/03/research-with-a-hacker-ethos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re  holding in our hands a brand new issue of the ACM&#8217;s <a href="http://interactions.acm.org/">interactions magazine</a>, which contains our article &#8220;<a href="http://wyldco.com/pub/HackerResearch_web.pdf">Research with a Hacker Ethos: what DIY means for tangible interaction research</a>&#8220;. (This is a scan of the magazine article, but we hope to upload a nicer PDF soon.) The lovely and talented <a href="http://aliciagibb.com/">Alicia Gibb</a> and <a href="http://blog.dweek.ly/">David Weekly</a> also contributed their considerable smarts to this article.</p>
<p>What we&#8217;re saying here is basically that innovation and original design work is certainly not limited to university and corporate research settings. This isn&#8217;t a competitive threat, it&#8217;s awesome for all of us! Open-source hackerly devices like Arduino, Xbees, Makerbots, etc. are making it much easier to create cool tangible interfaces than it was when I started out back in 2004, so we can focus on great interaction design instead of trying to be electrical engineers (which we&#8217;re not).</p>
<p>We wrote about Open Source Hardware and hackerspaces in particular. While one is about licensing and the other is about physical space, both of these things allow for the dissemination, development and maturing of good ideas among researchers, professionals, hobbyists, community members, and all kinds of smart and motivated people from a variety of backgrounds.</p>
<p>So this doesn&#8217;t just make things easier for professional researchers in tangibles and in interaction design, it means that small-businesses and hobbyists are increasingly turning towards custom-made tangible, spatial, in-the-world interactions. Which is just how we like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/03/research-with-a-hacker-ethos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy 2012 from Wyld Collective!</title>
		<link>http://wyldco.com/blog/2012/01/happy-2012-from-wyld-collective/</link>
		<comments>http://wyldco.com/blog/2012/01/happy-2012-from-wyld-collective/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 22:21:49 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.wyldco.com/blog/?p=130</guid>
		<description><![CDATA[2011 brought some new and exciting developments at Wyld Collective Ltd. After a transitional year during which we both worked “day jobs” while also getting Wyld Collective rolling, we were finally able to commit ourselves full-time to our own business. With &#8230; <a href="http://wyldco.com/blog/2012/01/happy-2012-from-wyld-collective/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>2011 brought some new and exciting developments at Wyld Collective Ltd. After a transitional year during which we both worked “day jobs” while also getting Wyld Collective rolling, we were finally able to commit ourselves full-time to our own business. With this transition, we’ve re-vamped our <a href="http://wyldco.com/">website</a> to show off some of our favorite projects and outline the kinds of services that we can offer to our clients.</p>
<p>Speaking of clients, we had some awesome ones this year! We were asked to lead the key early phase of User Experience design for <a href="http://www.treatful.com/">Treatful.com</a>, a web service that allows users to treat family and friends with personalized electronic gift certificates to excellent local restaurants. On a seven-week deadline, we made new prototypes weekly and conducted dozens of user tests. They launched a major update to their service, based on our specifications, in time for the holiday gift-giving season. It’s extra fun for us to work on a project that literally makes our mouths water!</p>
<p>Wyld Collective’s participation in <a href="http://www.poemm.net/">P.o.E.M.M. (Poems for Excitable Mobile Media)</a> also bore fruit this year, with Jason Lewis’s <a href="http://www.obxlabs.net/shows/welfare/">Vital to the General Public Welfare</a> exhibition in Toronto last October. Wyld led the development of most of the interactivity behind these artworks, as well as the iPad and iPhone apps that let you enjoy them outside the gallery. <a href="http://itunes.apple.com/app/speak/id406078727">“Speak”</a>, <a href="http://itunes.apple.com/app/know/id446777294">“Know”</a>, and <a href="http://itunes.apple.com/app/migration/id464900068">“Migration”</a> are free to download – check them out!</p>
<p>It looks like 2012 will be keeping us busy as well. Look for our article on “Research with a Hacker Ethos” in the upcoming March/April issue of <a href="http://interactions.acm.org/">ACM Interactions Magazine</a>. If you’re going to be at <a href="http://chi2012.acm.org/">CHI</a> this spring, come to our panel on “Indy R&amp;D”. And last but not least, over the next few months, we’re on track to introduce some hacktastic new products aimed at design-conscious DIYers.</p>
<p>At Wyld Collective we’re all about designing interactive systems. We combine years of experience in design practice and user research with up-to-the-minute knowledge of cutting-edge technologies. Our services include interaction design, prototyping, software development, and evaluation in both qualitative and quantitative flavors. Sometimes we even run workshops (bizarro game controllers, anyone?). If these skills sound like something you could use, <a href="mailto:info@wyldco.com">drop us a line</a>, tell us about your project, ask for an estimate, tell your friends. You know the drill.</p>
<p>Finally, we owe a big “thank you!” to the people who have helped make 2011 so successful for us: our clients, friends who’ve referred us, the people who have been willing and patient guinea pigs to our unfinished designs, and everyone who’s given us an opportunity to do something cool. We couldn’t do it without you!</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/01/happy-2012-from-wyld-collective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing with local practitioners</title>
		<link>http://wyldco.com/blog/2012/01/designing-with-local-practitioners/</link>
		<comments>http://wyldco.com/blog/2012/01/designing-with-local-practitioners/#comments</comments>
		<pubDate>Tue, 17 Jan 2012 17:00:07 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[developing country]]></category>
		<category><![CDATA[ethnography]]></category>

		<guid isPermaLink="false">http://www.wyldco.com/blog/?p=124</guid>
		<description><![CDATA[A recent article on CoDesign asks “Do Designers Actually Exploit The Poor While Trying To Do Good?”. The article features an interview with Jan Chipchase, tech-ethnographer extraordinaire, formerly of Nokia and currently of Frog Design, both large, Western-based, design-focused corporations &#8230; <a href="http://wyldco.com/blog/2012/01/designing-with-local-practitioners/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A recent article on <a href="http://www.fastcodesign.com/">CoDesign</a> asks <a href="http://www.fastcodesign.com/1665635/do-designers-actually-exploit-the-poor-while-trying-to-do-good-jan-chipchase-responds">“Do Designers Actually Exploit The Poor While Trying To Do Good?”</a>. The article features an interview with Jan Chipchase, tech-ethnographer extraordinaire, formerly of Nokia and currently of Frog Design, both large, Western-based, design-focused corporations with global reach. He specializes in studying technology practices in developing regions, and he’s impressively attuned to the creativity in people’s daily practices. But ultimately, he answers to a rich Western corporation. So it’s worth asking, as the article does:</p>
<p><em>Were Chipchase and those doing similar work really helping those in developing countries by creating better products for them? What if, instead, they were simply scraping local communities for big ideas and then riding them to big profits?</em></p>
<p>In other words, Chipchase’s admirable sensitivity to individual ingenuity, under the force of the corporate logics of his employer, can bend all to easily into theft of poor communities’ intellectual property.<span id="more-124"></span></p>
<p>These are uncomfortable questions for many of us to grapple with. I’ve done ethnographic and design work for huge corporations as well, and questioned whether I was selling out my participants. Though I was working in what most would call a developing region, the participants in some of my studies have been middle-class. They were already buying products from Nokia, HP, Intel, and Acer, and were gratified to see their purchasing power drawing those companies’ attention to their particular needs.</p>
<p>But there’s a big difference between the global middle class and the global working class, who must budget more carefully, and who are more vulnerable to exploitation. There is no easy yes-or-no answer here. For a corporate design-ethnographer to engage with the world’s poor risks exploiting them, while avoiding these engagements continues to silence them.</p>
<p>The article points out that the world’s poor are not passive victims of consumer technology:</p>
<p><em>Chipchase argues that critics of this process are themselves making a terrible assumption about the poor: That they&#8217;re simply victims, or, worse yet, that they&#8217;re dumb and can&#8217;t think for themselves&#8211;that they can&#8217;t decide what&#8217;s valuable to them, and vote with their dollars.</em></p>
<p>Chipchase’s statement is true as far as it goes, but it doesn’t go far enough, and it presents the reader with a false dichotomy: either the poor are victims or their empowerment lies primarily in their purchasing power: to buy or not to buy. A dichotomy such as this continues to underestimate the creativity and intelligence of people living close to the edge of survival: there is where their power lies.</p>
<p>So who is best positioned to design better products for poor communities: large corporations or those communities themselves? I’ll argue that this is a false dichotomy, and that the how of it matters just as much as who makes the products.</p>
<p>In Thailand, and many other countries, people on limited incomes find mobile phones to be a worthwhile expenditure. Yes, they’ve made a decision to buy or not to buy. But this is contingent on cellular plans being within financial reach. How is this achieved? Telecoms and government policy have some role in it, of course; different markets have different prices. But for now let’s focus on some practices of individuals and entrepreneurs around these products. In any mall anywhere in Thailand, and not a few street markets, you’ll find dozens of entrepreneurs who will unlock virtually any mobile phone for a low price. While most North American consumers allow their service providers to lock them in to using their service for a multi-year contract, Thai consumers are having none of it. People routinely change their phone numbers when they find a plan at a better price, and this increased competition helps to drive dirt cheap cellular service. Chipchase himself has presented footage of African hacker-entrepreneurs disassembling and reassembling SIM cards so people can carry two chips in their phones. I haven’t even gotten around to jailbreaking my iPhone. So now who’s the passive victim of corporate avarice?</p>
<p>What we designers and ethnographers need to be doing is this: Let’s recognize the strengths and weaknesses of local practitioners in these developing regions. Their strengths are many: collectively they are smart and savvy, creative, and unafraid to tinker with and reappropriate technology. Their knowledge of local conditions is better than anything a non-local corporation could hope to achieve, which means they’re probably making better decisions about how to adjust products to their needs. Their weaknesses: lack of resources mostly – money, power to determine policy, to move or stay put as they choose – and sometimes lack of formal education. (Of course, these are broad generalizations and your mileage will vary depending on the community you’re dealing with.)</p>
<p>We also need to turn our perceptual and interpretive powers on ourselves and our employers. As long as we aren’t actively aware of our own corporate cultures, means of production, and privileges, then we’re failing to understand half of the design process. What are for-profit companies good at? What are they bad at? Where can corporate and local practices complement one another rather than butt heads? One thing large corporations are really good at is sourcing raw materials cheaply, thanks to economies of scale. They’re good at quality control and efficiency and minimizing costs. They’re good at optimizing supply chains, when they want to be. They are not so good at anticipating every local situation that their products might encounter, or at understanding the good and bad ways that their products might disrupt existing practices and communities.</p>
<p>So how can we, ethnographers and designers, take advantage of the strengths in both local practice and corporate production? Here are a few strategies that we’re trying at Wyld Collective:</p>
<p>1. Partner with local organizations. Depending on your objective, these may be non-profits, governments, entrepreneurs, or mid-to-large sized businesses that have been operating in your target market for a good long time. Don’t just extract information from them. Consider letting them fine-tune your design, or work in tandem with them to do so.</p>
<p>2. Make kits instead of finished products; local sellers can add value by tweaking them for their own customers. This is similar to suggestion #1, but in this case you’re underdetermining your product and giving locals close-to-complete control over the finished product. This depends on availability of local resources and may work better for some products (e.g. lights) than others (e.g. cars). In cases where this works, you’re not crowding out local competitors, but using your strengths to help support theirs.</p>
<p>3. Make tools to enable others’ production. Here you’re really underdetermining what the end-user gets. Arduino (thought not designed for developing regions) is a good example of a product that is really an open-ended, infinitely appropriable tool. More particular to to developing regions, Ushahidi facilitates communication of regional trends, and alerts viewers quickly to potential human rights emergencies. These are tools for people to empower themselves, but they don’t do the work for them, nor do they overdetermine what’s appropriate for different situations.</p>
<p>You don’t have to pick just one of the strategies above – they’re complementary. And they require you to ask certain questions about your site, your market, your product, and your own design and production processes:</p>
<p>• What are some of the strongest local skills in our target market?<br />
• What are our strongest skills?<br />
• Which parts of this process would benefit most from scalability and mass production? (For example: electronic parts are much cheaper bought and produced in bulk, and might not need to vary as much as the external form of your product would.)<br />
• Which would benefit more from appropriability and local production? (For example, the more we can produce locally, the less is added to the cost by import duties.)</p>
<p>All of these recommendations require designers and engineers and ethnographers to have some literacy in each others’ practices, and some trust in each others’ knowledge. And of course, we’re being awfully optimistic here: there will always be corporations willing to fleece the poor. But as skilled practitioners working within a capitalist system, we do have some ability to push product design in more ethical, more sensible, more well-designed directions.</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2012/01/designing-with-local-practitioners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speak: From poem to platform</title>
		<link>http://wyldco.com/blog/2011/05/speak-from-poem-to-platform/</link>
		<comments>http://wyldco.com/blog/2011/05/speak-from-poem-to-platform/#comments</comments>
		<pubDate>Sat, 28 May 2011 16:16:45 +0000</pubDate>
		<dc:creator>Bruno Nadeau</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[obx]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[typography]]></category>
		<category><![CDATA[digital poetry]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod]]></category>
		<category><![CDATA[speak]]></category>
		<category><![CDATA[wts]]></category>
		<category><![CDATA[wtswtstm]]></category>

		<guid isPermaLink="false">http://blog.wyldco.com/?p=92</guid>
		<description><![CDATA[We have been so busy lately, building a much improved version of our own site, running around to conferences, and completing a handful of projects, that we lost touch with our blog. I thought it was time for a small &#8230; <a href="http://wyldco.com/blog/2011/05/speak-from-poem-to-platform/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-42" title="Speak App" src="/blog/wp-content/uploads/2010/09/WTS_v2-128.png" alt="" width="128" height="128" />We have been so busy lately, building a much improved version of our own site, running around to conferences, and completing a handful of projects, that we lost touch with our blog. I thought it was time for a small update to mention something we released recently.</p>
<p>A few months ago, we released a poem app named <a href="http://poemm.net/#speak">Speak</a>, which is part of the <a href="http://poemm.net">P.o.E.M.M.</a> series, made with Jason Edward Lewis at the <a href="http://obxlabs.net">Obx Labs</a>. The original app for the iPhone and iPad was a single interactive poem written by Jason, and designed in collaboration with us. The poem is broken down, its letters randomly floating across the screen. The reader can touch and drag each letter, which then attracts the rest of the line it is a part of, allowing the reader to<span id="more-92"></span> form and read the poem one line at a time.</p>
<p>Last week, we released version 2 of the app. As an experiment, we opened Speak to other writers to see what they might write for this specific interaction, transforming the poem into a poetic platform. To start, Jason invited four poets: JR Carpenter, Jim Andrews, David Jhave Johnston, and Aya Karpinska, who each wrote a text for the app. The poems will be released weekly starting June 1st, and hopefully more will follow.</p>
<p><a href="http://itunes.apple.com/ca/app/speak/id406078727?mt=8#ls=1">Speak</a> is available on the app store.</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2011/05/speak-from-poem-to-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to capture touches over a UIWebView</title>
		<link>http://wyldco.com/blog/2010/11/how-to-capture-touches-over-a-uiwebview/</link>
		<comments>http://wyldco.com/blog/2010/11/how-to-capture-touches-over-a-uiwebview/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 01:51:59 +0000</pubDate>
		<dc:creator>Bruno Nadeau</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[obx]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[iOs]]></category>
		<category><![CDATA[touch]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[UIWebView]]></category>
		<category><![CDATA[web view]]></category>

		<guid isPermaLink="false">http://blog.wyldco.com/?p=61</guid>
		<description><![CDATA[I spent the last few weeks polishing the What They Speak When They Speak to Me (WTS) iOS application I developed with Obx Labs, which I mentioned in a <a href="http://wyldco.com/blog/2010/09/coding-portable-poetry/">previous post</a>. Developing a working prototype for an iOS application can be done fairly quickly, thanks to the tools provided by Apple and a growing list of libraries and engines, but the more time consuming part of development takes place later, working with and often against the features embedded in the iOS SDK to polish your product. This how-to is about one specific issue that arose during the development of WTS: capturing touches over a UIWebView without losing its functionality. <a href="http://wyldco.com/blog/2010/11/how-to-capture-touches-over-a-uiwebview/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>This post was updated with corrections to work with iOS5.</strong></p>
<p>I spent the last few weeks polishing the What They Speak When They Speak to Me (WTS) iOS application I developed with Obx Labs, which I mentioned in a <a href="http://wyldco.com/blog/2010/09/coding-portable-poetry/">previous post</a>. Developing a working prototype for an iOS application can be done fairly quickly, thanks to the tools provided by Apple and a growing list of libraries and engines, but the more time consuming part of development takes place later, working with and often against the features embedded in the iOS SDK to polish your product. This how-to is about one specific issue that arose during the development of WTS: capturing touches over a UIWebView without losing its functionality.</p>
<p>This short tutorial assumes that you know how to place a UIWebView (or other touch swallowing views) in your app, and that you are at the frustrating point of trying to catch touch events over the Web View to implement some interactive behaviour. In my case, I wanted to swipe the Web View left and right to show or<span id="more-61"></span> hide it, similarly to how the Twitter for iPad app manages its browser tab.</p>
<p>We&#8217;ll start from scratch and go through the following four steps. You can jump to step 4 if you&#8217;re looking for the meat of this tutorial.</p>
<ol>
<li>Create a new XCode project using the &#8220;View-based application&#8221; template.</li>
<li>Add the standard methods to manage touch events.</li>
<li>Add a UIWebView covering the main view.</li>
<li>Add a custom class that extends UIWindow to capture touch events.</li>
</ol>
<p><strong>1. Create a new XCode project using the &#8220;View-based application&#8221; template.</strong></p>
<p>This step is self explanatory. From XCode you select from the main menu: File &gt; New Project, and them &#8220;View-based Application&#8221; which is under the &#8220;Application&#8221; template folder. This is here mainly to have a common code base from which to start the tutorial; I named the project &#8220;CaptureTouch&#8221;.</p>
<p><strong>2. Add the standard methods to manage touch events.</strong></p>
<p>Before we get to the problematic UIWebView, we want to make sure that touch events get to the application&#8217;s main standard view. The new project you created in step 1 should contain a view controller named CaptureTouchViewController. In the implementation file of this view controller, add the four standard touch management methods:</p>
<pre class="brush: objc; title: ; notranslate">
- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@&quot;Touches began&quot;);
}
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@&quot;Touches moved&quot;);
}
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@&quot;Touches ended&quot;);
}
- (void) touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@&quot;Touches cancelled&quot;);
}
</pre>
<p>At this point, if you build and run the application, you should see a gray background (the view), and clicking anywhere on the background will output &#8220;Touch began&#8221; to the console.</p>
<p><strong>3. Add a UIWebView that covers the main view.</strong></p>
<p>As mentioned before, we assume you know how the UIWebView works, so we won&#8217;t get into too much detail. All we need is the simplest UIWebView covering the application&#8217;s main view. We will add the UIWebView in the .xib file created by XCode, but first we need to add an attribute and outlet to the CaptureTouchViewController. Your CaptureTouchViewController.h file should then look like the following:</p>
<pre class="brush: objc; title: ; notranslate">
@interface CaptureTouchViewController : UIViewController {
	UIWebView* webView;
}
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@end
</pre>
<p>With the outlet created, you can open the CaptureTouchViewController.xib file in Interface Builder. Open the &#8220;View&#8221; object, and then drag-and-drop a new Web View into it. The Web View should automatically expand to cover the whole view. Right-click on the Web View, and then link a &#8220;New Referencing Outlet&#8221; with the &#8220;webView&#8221; attribute you created above by clicking the &#8220;New Referencing Outlet&#8221;, dragging to the &#8220;File&#8217;s Owner&#8221; object, and then selecting the &#8220;webView&#8221; from the list that pops up.</p>
<p>At this point, you linked the interface to the &#8220;webView&#8221; attribute, but it is not loading any html. We will need one last bit of code before we get to the core of this tutorial, which will load a url to make sure the Web View is working correctly. After the application&#8217;s main view finished loading, the CaptureTouchViewController&#8217;s viewDidLoad: method is called. This is where we add the few lines that will load a url into the web view. Your viewDidLoad: method should look like the following after the changes:</p>
<pre class="brush: objc; title: ; notranslate">
- (void)viewDidLoad {
    [super viewDidLoad];

	//Load the request in the UIWebView.
	NSURL *url = [NSURL URLWithString:@&quot;http://www.wyldco.com&quot;];
	NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
	[webView loadRequest:requestObj];
}
</pre>
<p>If you build and run the application, you should see the web page. Everything looks fine, but if you touch anywhere on the screen, you&#8217;ll notice that the &#8220;Touch began&#8221; message from step 2 does not appear in the console anymore. The Web View swallows the touches to manage scrolling and displaying the magnifying glass if you hold down a touch over text, and it blocks touch events from getting to the view. The next step shows how to capture those touch events.</p>
<p><strong>4. Add a custom class that extends UIWindow to capture touch events.</strong></p>
<p>There are different ways to capture touches over a Web View. One would be to extend the UIWebView class, but Apple says you should not, so we will stay away from that solution in case it causes problem later. Instead, we are going to extend the UIWindow class, and capture touch events before they get propagated to the correct view(s). The first thing you&#8217;ll need is a new class, let&#8217;s call it TouchCapturingWindow, with the following header and implementation files:</p>
<pre class="brush: objc; title: TouchCapturingWindow.h; notranslate">
#import &lt;Foundation/Foundation.h&gt;

@interface TouchCapturingWindow : UIWindow {
    NSMutableArray *views;

@private
    UIView *touchView;
}

- (void)addViewForTouchPriority:(UIView*)view;
- (void)removeViewForTouchPriority:(UIView*)view;

@end
</pre>
<pre class="brush: objc; title: TouchCapturingWindow.m; notranslate">
#import &quot;TouchCapturingWindow.h&quot;

@implementation TouchCapturingWindow

- (void)dealloc {
    if ( views ) [views release];
    [super dealloc];
}

- (void)addViewForTouchPriority:(UIView*)view {
    if ( !views ) views = [[NSMutableArray alloc] init];
    [views addObject:view];
}

- (void)removeViewForTouchPriority:(UIView*)view {
    if ( !views ) return;
    [views removeObject:view];
}

- (void)sendEvent:(UIEvent *)event {
    //we need to send the message to the super for the    //text overlay to work (holding touch to show copy/paste)
    //NOTE: this used to be called at the beginning of this method
    //for the copy/paste and magnifying class overlay to work. As
    //of iOS5, it stopped working, and this code needs to go at
    //the end of this method.    //[super sendEvent:event];    

    //get a touch
    UITouch *touch = [[event allTouches] anyObject];

    //check which phase the touch is at, and process it
    if (touch.phase == UITouchPhaseBegan) {
            for ( UIView *view in views ) {
                //NOTE: I added the isHidden check so that hiding the windows doesn't catch events
                //and changed it checks if the touch is in the frame.
                //if ( CGRectContainsPoint([view frame], [touch locationInView:[view superview]]) ) {
                if ( ![view isHidden] &amp;&amp; [view pointInside:[touch locationInView:view] withEvent:event] ) {
                    touchView = view;
                    [touchView touchesBegan:[event allTouches] withEvent:event];
                    break; //NOTE: this used to be a return in the previous version
                }
            }
    }
    else if (touch.phase == UITouchPhaseMoved) {
        if ( touchView ) {
            [touchView touchesMoved:[event allTouches] withEvent:event];
        }
    }
    else if (touch.phase == UITouchPhaseCancelled) {
        if ( touchView ) {
            [touchView touchesCancelled:[event allTouches] withEvent:event];
            touchView = nil;
        }
    }
    else if (touch.phase == UITouchPhaseEnded) {
        if ( touchView ) {
            [touchView touchesEnded:[event allTouches] withEvent:event];
            touchView = nil;
        }
    }

    //we need to send the message to the super for the
    //text overlay to work (holding touch to show copy/paste)
    [super sendEvent:event];
}
@end
</pre>
<p>This class is heavily inspired by <a href="http://atastypixel.com/blog/a-trick-for-capturing-all-touch-input-for-the-duration-of-a-touch/">Michael Tyson&#8217;s tutorial</a>, with a few changes and some added notes about the implementation. Here&#8217;s how it works. The TouchCapturingWindow overrides the sendEvent: method of UIWindow to check if touch events should be sent to certain views instead of only the top view, which is more or less the default behaviour. If you intend to have multiple views in your application, you probably don&#8217;t want to have all of them capture touch events, so the TouchCapturingWindow provides methods (i.e. addViewForTouchPriority: and removeViewForTouchPriority:) to add and remove the specific view(s) you want to touch. Once you&#8217;ve replaced the standard UIWindow with an instance of this custom class, touch events will go through the sendEvent: method, and allow you to redirect them to the correct view(s) based on any criteria. In the above case, the only criteria is if the touch falls inside the frame of any of the views that were added to the TouchCapturingWindow.</p>
<p>First, you need to change the default &#8220;window&#8221; of your application&#8217;s delegate to use the new custom class. Open the CaptureTouchAppDelegate.h file, and replace the UIWindow class by TouchCapturingWindow; don&#8217;t forget to import the header, which should give you something like this:</p>
<pre class="brush: objc; title: ; notranslate">
#import &lt;UIKit/UIKit.h&gt;
#import &quot;TouchCapturingWindow.h&quot;

@class CaptureTouchViewController;

@interface CaptureTouchAppDelegate : NSObject &lt;UIApplicationDelegate&gt; {
    TouchCapturingWindow *window;
    CaptureTouchViewController *viewController;
}

//NOTE: After updating to iOS5 and the latest XCode, this line started showing
//a warning, so to remove it, simply rename TouchCapturingWindow to UIWindow.
//@property (nonatomic, retain) IBOutlet TouchCapturingWindow *window;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet CaptureTouchViewController *viewController;

@end
</pre>
<p>After you changed the window in the code, you&#8217;ll need to adjust the MainWindow.xib to also reflect this change. Open MainWindow.xib, and change the class of its window object from UIWindow to the new TouchCapturingWindow.</p>
<p>Now that the window can propagate touch events the way we want, we need to tell it which view to prioritize. In this case, we want the application&#8217;s main view to receive the touch events that would normally be blocked by the Web View covering it. To add the view to the priority list, you&#8217;ll need to modify the applicationDidFinishLaunchingWithOptions: method of the CaptureTouchAppDelegate. Just after the window is made visible, add the view using the new addViewForTouchPriority: method, which should give you the following:</p>
<pre class="brush: objc; title: ; notranslate">
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Add the view controller's view to the window and display.
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    //add the view to the touch priority list
   [window addViewForTouchPriority:viewController.view];

    return YES;
}
</pre>
<p><strong>Conclusion</strong></p>
<p>At this point, if you run the application, you can see that touching anywhere on the Web View outputs the &#8220;Touch began&#8221; message of step 2. You can now use the touch events to add some touch-based interaction to your application, but be careful not to conflict with the Web View&#8217;s features such as scrolling and text selection.</p>
<p>At the beginning I mentioned that I wanted to keep all the Web View&#8217;s features. This is accomplished by one short but important line of code. In the sendEvent: method of the new TouchCapturingWindow class, the line [super sendEvent:event] assures that the Web View receives the event before we propagate it to the main view. As of iOS5, placing that line at the beginning of the method stopped working, and it now needs to be at the end of the method. Placing it at the end keeps all the Web View&#8217;s features for iOS5, but does not show them for devices with <iOS5. You might want check the OS version of the device and call the method at the right place based on its version.</p>
<pre class="brush: objc; title: ; notranslate">
[super sendEvent:event];
</pre>
<p>On a final note, if you look at the sendEvent: method, you'll notice that touch events are propagated to a view only if the location of the touch is inside the frame of the view. This is a common behaviour, but there is no reason why you should always stick to it. You might want to check the state of a view to decide if the view should receive touches, control the view by touching outside its visual frame, or send event to a specific view only after the user tapped around up, up, down, down, left, right, left, right...</p>
<p><strong>Download</strong><br />
<a href="http://wyldco.com/blog/wp-content/uploads/2010/11/CaptureTouch.zip">CaptureTouch Xcode project (pre-iOS5)</a><br />
<a href="http://wyldco.com/blog/wp-content/uploads/2011/12/CaptureTouch-iOS5.zip">CaptureTouch Xcode project (iOS5)</a></p>
<p><strong>Related links</strong><br />
<a href="http://atastypixel.com/blog/a-trick-for-capturing-all-touch-input-for-the-duration-of-a-touch/">Michael Tyson's (A Tasty Pixel) trick for capturing all touch input</a><br />
<a href="https://github.com/psychs/iphone-samples/tree/master/WebViewTappingHack/">Satoshi Nakagawa's WebViewTappingHack</a><br />
<a href="http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way/">Mithin Kumar's post on detecting taps and events on UIWebView – The right way</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2010/11/how-to-capture-touches-over-a-uiwebview/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Designing like an Acupuncturist</title>
		<link>http://wyldco.com/blog/2010/10/designing-like-an-acupuncturist/</link>
		<comments>http://wyldco.com/blog/2010/10/designing-like-an-acupuncturist/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 01:46:35 +0000</pubDate>
		<dc:creator>metamanda</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[developing country]]></category>
		<category><![CDATA[ethnography]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mobility]]></category>
		<category><![CDATA[slum]]></category>
		<category><![CDATA[sustainable]]></category>
		<category><![CDATA[urban]]></category>

		<guid isPermaLink="false">http://blog.wyldco.com/?p=48</guid>
		<description><![CDATA[Like acupuncture, it's not about how pretty the needle is, it's about where you stick it. If you can intelligently select one small spot to focus on, you can design something awesome. The ethnographic account can help you see how the parts fit together. It can tease out where some of the important practices are -- the places where a small change can radiate outward. <a href="http://wyldco.com/blog/2010/10/designing-like-an-acupuncturist/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Having done both ethnography and design, I&#8217;m well acquainted with the (sometimes-productive) tensions between ethnographic accounting and design requirements.</p>
<p>The ethnographer deals with nuance, particularities, with rich and textured accounts. She aims to communicate experience in a way that defamiliarizes the familiar and refamiliarizes the strange. A good ethnography holds a distorted mirror up to our own ways of life. If the ethnographer is asked to distill their living interconnected account into the regimented format of design requirements (at worst, something that looks like a bullet-pointed list), that conversion does violence to the ethnography. For a more thorough discussion of this, read Paul Dourish&#8217;s <a href="http://portal.acm.org/citation.cfm?id=1124855&amp;dl=acm...">Implications for Design</a>.</p>
<p>From the designer&#8217;s point of view the account presented by an ethnographer looks too shifty and complex to get a handle on. It&#8217;s overwhelming, because to design is to act; it requires the confidence to intervene in a situation. The clarity and solidity of requirements help us feel brave enough to act without doubting ourselves too much. This may be an illusion but it&#8217;s better than<span id="more-48"></span> being paralyzed by self-doubt.</p>
<p>One of my ethnographic engagements focused on the question of what slum mobility looks like. Let&#8217;s look at just a small and abbreviated, but sufficiently complex, bit of the ethnographic account: slum fires.</p>
<p>Most people in this neighborhood are squatters, which means they don&#8217;t own the land &#8212; though some families have been around for three or four generations. The infrastructure is spotty, since they&#8217;re not officially supposed to be there. Electricity, then, is often expensive because it&#8217;s jury-rigged, re-sold and marked up. If you&#8217;re behind on the bills your landlord will probably cut off your electricity first, but you can fall back on candles for lighting. Cooking usually happens in hot woks. So: you get cooking fires, and you get candles burning, and sometimes someone falls asleep without putting it out.</p>
<p>Building materials here are very flammable. A slum fire spreads fast. It burns birth certificates that prove citizenship, without which a child cannot attend public school in the country where I did this study. It&#8217;s an opportunity for the city to evict people, by simply denying them permission to rebuild. An opportunistic eviction escalates a disaster into a tragedy, because poor slum dwellers muddle along using support from a network of mutual exchange with family, friends and neighbors. This is not easily rebuilt when people are forcibly scattered.</p>
<p>As a designer, how do I make this better without accidentally making something worse? How can I achieve the clarity I need to design effectively without losing sight of the entire context in which I&#8217;m acting?</p>
<p>The humbling answer is that I can&#8217;t tackle that whole mess. Slum mobility, in its tangle of interconnected, undesigned moving parts, is as baffling and as alive as a human body. But the ethnographic account can help you see how the parts fit together. It can tease out where some of the important practices are &#8212; the places where a small change can radiate outward.</p>
<p>The metaphor I&#8217;ve started using to describe this is <em>design-as-acupuncture</em>. If you can intelligently select one small spot to focus on, you can design something awesome.</p>
<p><a href="http://blog.wyldco.com/wp-content/uploads/2010/10/ledcandle.jpg" rel="shadowbox[sbpost-48];player=img;"><img class="alignleft size-medium wp-image-51" title="ledcandle" src="/blog/wp-content/uploads/2010/10/ledcandle-200x300.jpg" alt="led candle sketch" width="200" height="300" /></a>The design proposal that comes out of this story is simple: cheap, compact, off-the-grid lighting. LEDs are brighter than candles and non-flammable. Discarded scraps of solar cells can be gotten for cheap (see <a href="http://www.instructables.com/id/DIY-Solar-Panel/">Gilad Lotan&#8217;s excellent instructable</a> for more specifics). Shake-to-power flashlights also suggest a possibility for renewable power. The hardest part is probably figuring out how to make it affordable (ideally, a dollar or less). On the whole, this is a relatively simple thing to design and build, and can eliminate one of the common causes of slum fires. It&#8217;s simple enough to be produced locally. If it makes a difference, it would be because of its intelligent positioning in an interlocking net of practices, spaces, and vulnerabilities. Like acupuncture, it&#8217;s not about how pretty the needle is, it&#8217;s about where you stick it.</p>
]]></content:encoded>
			<wfw:commentRss>http://wyldco.com/blog/2010/10/designing-like-an-acupuncturist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

