<?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>Thomas Hansen’s Thoughts and Doings</title>
	<atom:link href="http://blog.tehansen.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.tehansen.de</link>
	<description>Just like that ...</description>
	<lastBuildDate>Mon, 08 Mar 2010 07:21:39 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Python Meta Classes ROCK!!</title>
		<link>http://blog.tehansen.de/?p=90</link>
		<comments>http://blog.tehansen.de/?p=90#comments</comments>
		<pubDate>Mon, 08 Mar 2010 06:15:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog2.tehansen.de/?p=90</guid>
		<description><![CDATA[I&#8217;ve been trying to do this for a long time, but could never find a way.  Today I actually spent some time reading up on how metclasses work, and bam!
The goal is to have a base class, which has a method called &#8220;init_done()&#8221;.  I want this method to be called after the actual object is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to do this for a long time, but could never find a way.  Today I actually spent some time reading up on how metclasses work, and bam!</p>
<p>The goal is to have a base class, which has a method called &#8220;init_done()&#8221;.  I want this method to be called after the actual object is initialized.  That doesnt sound to bad, but try doing it and still have it be called after all calls to __init__ are done once you start subclassing (you only want it called once at the end, not after every parent calss&#8217; call to __init__)!</p>
<p>So here it goes (I&#8217;m also adding a nifty print statement that one can exchang for e.g.  autoregister all your subclasses in a factory or something like that ).</p>
<pre name="code" class="python:nogutter">
class MyType(type):
    def __new__(cls, name, bases, attrs):
        init = attrs['__init__']
        def call_me_after_init(self,*args,**kwargs):
            init(self,*args,**kwargs)
            if type(self) == eval(name):
                print "AFTER init!!",   #or attrs['init']
        attrs['__init__'] = call_me_after_init
        return super(MyType, cls).__new__(cls, name, bases, attrs)

    def __init__(self, name, bases, attrs):
        super(MyType, self).__init__(name, bases, attrs)
        print "Register me in factory!  name:", name, "self:", self

class A(object):
    __metaclass__ = MyType
    def __init__(self, a):
        print "init A", a

class B(A):
    def __init__(self, a):
        print "init B start", a
        super(B, self).__init__(a)
        print "init B end", a

test = B("test")</pre>
<p>This is the output:<br />
<code><br />
Register me in factory!  name: A self:<br />
Register me in factory!  name: B self:<br />
init B start test<br />
init A test<br />
init B end test<br />
AFTER init?!<br />
</code></p>
<p>AWESOME!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=90</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Touch vs PyMT: Why multi-touch programming on Windows is too complicated!</title>
		<link>http://blog.tehansen.de/?p=62</link>
		<comments>http://blog.tehansen.de/?p=62#comments</comments>
		<pubDate>Sun, 18 Oct 2009 18:44:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HCI]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[multi-touch]]></category>
		<category><![CDATA[programing]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[pymt]]></category>

		<guid isPermaLink="false">http://blog.tehansen.de/?p=62</guid>
		<description><![CDATA[Now, I am obviously a bit partial on this topic, having worked in pyMT for quite a while and all.  But I think doing so, we&#8217;ve made some valuable observations about what is involved when you program for multi-touch input.  If you want to code multi-touch interactions or applications context becomes very important. 
If you read the rest [...]]]></description>
			<content:encoded><![CDATA[<p class="mceTemp">Now, I am obviously a bit partial on this topic, having worked in pyMT for quite a while and all.  But I think doing so, we&#8217;ve made some valuable observations about what is involved when you program for multi-touch input.  If you want to code multi-touch interactions or applications context becomes very important. </p>
<p class="mceTemp">If you read the rest of the blog post, I&#8217;ll show you what I mean about context, and why e.g.  Windows Touch makes life difficult if you want to program multi-touch.  I&#8217;ll show you how to rewrite a windows touch example project (5 C# source files and &gt; 400 lines of code) in Python using PyMT (1 source file with 12 lines of code).  Yes 12 lines, you read correctly (and then there is the whole thing about it just running on Linux or OSX as well&#8230;but we&#8217;ll leave that for another blog post).</p>
<h3 class="mceTemp">The Problem</h3>
<p class="mceTemp">Here is the problem:  When you start programming with multiple simultaneous input cursors (e.g. multi-touch) things very quickly turn very funky and very different from programming for e.g. a single mouse.  There is a lot of added complexity just in handling the state for multiple inputs without even beginning to talk about interpreting them in relation to each other.  To make things easier, I think we need APIs and SDKs that provide a context in which multi-touch input makes sense.  Instead, Windows (and other APIs) try to simplify things by giving you a more abstract view by default.  That can make things simpler, but these approaches also limit the kinds of things you can do with multi-touch tremendously! </p>
<p class="mceTemp">Windows 7 for example doesn&#8217;t give you the raw multi-touch information by default.  Touch or stylus input generates mouse events, and your application can choose to handle some gesture events that windows has pre-defined (like &#8216;pan&#8217; or &#8216;zoom&#8217;).  Now I think that&#8217;s great if that&#8217;s all you want.  Especially for legacy support (which being Windows is obviously a priority).  It makes sense to do this, so that old applications have some way of working with the new input devices. </p>
<p>But let&#8217;s say you actually want to write an application that takes full advantage of multi-touch input. There are some videos over at <a href="http://channel9.msdn.com/posts/yochay/Windows-7-Mutli-Touch-Overview/">channel9</a> that talk about the Windows Touch API in Windows 7, and what you have to do if you want to provide the full multi-touch experience.  There is also a nice article about it <a href="http://msdn.microsoft.com/en-us/magazine/ee336016.aspx">here</a>.  But if you opt for true multi-touch, it litterally gives you <em>raw</em>information.  Even if you are pretty familiar with the Windows API&#8217;s and know how to  handle the messaging system and all that jazz, multi-touch programming isn&#8217;t going to be much fun with this API.</p>
<p>Let me show you what I&#8217;m talking about:</p>
<h3>Windows Touch ScratchPad Example App</h3>
<p>The Windows 7 SDK comes with am example application called MTScratchPad.  You can read about it <a href="http://msdn.microsoft.com/en-us/library/dd940546(VS.85).aspx">here</a> or download it <a href="http://code.msdn.microsoft.com/WindowsTouch">here </a>to take a closer look, if you don&#8217;t have the SDK installed.  The application draws a line for every touch on the display while the finger is down.  Here is a screenshot (from the msdn documentation, I hope they don&#8217;t mind me using their picture)</p>
<div id="attachment_66" class="wp-caption alignleft" style="width: 520px"><a rel="http://i.msdn.microsoft.com/Dd940546.MTScratchpadWMTouchCS(en-us,VS.85).png" href="http://blog.tehansen.de/wp-content/uploads/ee336016_fig08_gifen-us1.gif"><img class="size-medium wp-image-66  " title="ScratchPad Screenshot" src="http://i.msdn.microsoft.com/Dd940546.MTScratchpadWMTouchCS(en-us,VS.85).png" alt="Screenshot form teh ScratchPad Example in teh Windows SDK" width="510" height="393" /></a><p class="wp-caption-text">Screenshot form teh ScratchPad Example in teh Windows SDK</p></div>
<p>If you take a look at the documentation or code, you will see that you have to do a lot of things as the developer in order to make the application do what you want.  you have to overwrite the <span style="font-family: Courier New;">WndProc </span>method of your window to catch WM_MESSAGES, you have to decode the touch structures for each message, define your event handlers, call them yourself based on what WM_TOUCH message you got, and keep track of all the strokes yourself in a collection.  The example includes a class to represent a stroke and draws those lines (&gt;170 lines of code).  The main source file &#8220;WMTouchForm&#8221; has over 250 lines of code (that&#8217;s with comments and blank lines removed mind you), and of course visual studio generates a whole bunch of code and some other files.  In PyMT I can make that entire application in 12 lines of code.</p>
<h3>PyMT ScratchPad</h3>
<p>Here is the PyMT version and a video explaining the code as well as showing a little bit more interesting example:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7130180&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7130180&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><a href="http://vimeo.com/7130180">PyMT Video Tutorial 1</a> from <a href="http://vimeo.com/user1410649">Thomas Hansen</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p> </p>
<pre name="code" class="python:nogutter">
from pymt import *
class Tracer(MTWidget):
   
    def on_touch_down(self, touch):
        touch.userdata['line'] = list(touch.pos)
       
    def on_touch_move(self, touch):
        touch.userdata['line'].extend(touch.pos)
           
    def draw(self):
        for touch in getAvailableTouches():
            drawLine(touch.userdata['line'])
   
w = MTWindow()
w.add_widget(Tracer())
runTouchApp()</pre>
<h3>Other SDK&#8217;s and multi-touch programming challenges</h3>
<p>PyMT tries to give you a context in which multi-touch programming makes sense.  This involves making it easy to handle events, and learn more about them, providing functionality to interpret and deal with those events and offering a collection of classes that encapsulate useful interactions and event processing.  Now, if I&#8217;m honest, it&#8217;s unfair to compare it to the Windows Touch API, given that Windows Touch has to be part of and fit in with the overall Windows API.  But I think the point I&#8217;m trying to make is that we need to rethink the way we program for multi-touch and other novel input devices (just like we changed programming paradigms when we went from text to gui interfaces).  There is some other multi-touch SDK&#8217;s out there, that are probably more akin to what PyMT tries to do.  Some are proprietary (e.g. Snowflake), and others open source (e.g. MultiTouchVista).  I haven&#8217;t used or explored any of them, but I would welcome any feedback in how they approach some of the things I&#8217;m talking about here.</p>
<p>I have to say a little bit about the Surface SDK.  It looks much better than the other multi-touch API&#8217;s I&#8217;ve gotten to look at. But it works only for the $15,000 surface, and its proprietary, so I can&#8217;t really use or test it.  It does seem to have a great collection of surface/multi-touch controls.  I haven&#8217;t had a chance to check out how it stacks up if you want to experiment with your own interaction ideas, or more radical interface ideas.  (see e.g. <a href="http://channel9.msdn.com/pdc2008/PC17/">http://channel9.msdn.com/pdc2008/PC17/</a> ).  From the video it seems very much like they are providing ready made controls for developers in an attempt to unify the end user experience a lot. PyMT has a whole bunch of controls(widgets) too, but they are aimed more at giving the developer something to work with, rather than unifying the experience.</p>
<p>I do think unifying the interaction is important at some point, but I think it&#8217;s a little early for that.  I wish we would focus a little bit more on providing developers with tools and API&#8217;s to let them be as creative as possible, instead of giving them tools to build the same kind of applications.  Let&#8217;s see what we can come up with first, before deciding what the controls need to be and how they work.  I don&#8217;t think we are ready for unifying either the SDK/API approach nor the interactions/controls for multi-touch or surface computing.  The interaction paradigm is so revolutionary, I think we need to adopt our development tools more to it and explore the interaction space.  Instead I think people are jumping the gun on trying to standardize the interface while using the development paradigms we used for the GUI.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=62</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>updates</title>
		<link>http://blog.tehansen.de/?p=60</link>
		<comments>http://blog.tehansen.de/?p=60#comments</comments>
		<pubDate>Sat, 05 Sep 2009 20:48:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tehansen.de/?p=60</guid>
		<description><![CDATA[not much happening here lately.  i have been pretty busy becoming a dad lately  .  check back soon, im working on some updates to the website and stuff like that.
]]></description>
			<content:encoded><![CDATA[<p>not much happening here lately.  i have been pretty busy becoming a dad lately <img src='http://blog.tehansen.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .  check back soon, im working on some updates to the website and stuff like that.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=60</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personal Reflections on IDC, nuigroup and Open Initiatives on User Interfaces</title>
		<link>http://blog.tehansen.de/?p=47</link>
		<comments>http://blog.tehansen.de/?p=47#comments</comments>
		<pubDate>Mon, 27 Apr 2009 10:33:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[nuigroup]]></category>

		<guid isPermaLink="false">http://blog.tehansen.de/?p=47</guid>
		<description><![CDATA[IDC and awesome people
I was invited about a month ago to attend IDC by &#8220;the nuigroup team&#8221;. For those that aren&#8217;t familiar with it, nuigroup is an online community of people interested in &#8220;natural&#8221; user interfaces. Last summer, I made some money participating as a student in google summer of code under the nuigroup organization. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>IDC and awesome people</strong></p>
<p>I was <a href="http://idc.nuigroup.com/sponsor/">invited</a> about a month ago to attend IDC by &#8220;the nuigroup team&#8221;. For those that aren&#8217;t familiar with it, <a href="http://www.nuigroup.com">nuigroup</a> is an online community of people interested in &#8220;natural&#8221; user interfaces. Last summer, I made some money participating as a student in google summer of code under the nuigroup organization. This year, I am lucky to share a mentoring position along side Mathew Virbel for a very talented student, Sharath Patali on his GSOC project related to <a href="http://pymt.googlecode.com">pymt</a>.  The groups feedback and sharing of ideas has been an invaluable resource for the software and studies I am working on at school.  Members of the group share knowledge, references, thoughts, ideas, and open source code for building and developing novel user interface devices and software.  At least thats how I had interpreted it so far.</p>
<p>I&#8217;m not sure I have one good word for conveying the entirety of my experiences from the Interactive Display Conference (IDC) in San Jose,CA this last week. It was certainly an interesting event.  I got to talk (albeit briefly) to both Andy Wilson and Jeff Han. Both of whom produce very inspiring and world class UI/HCI research on a consistent basis.  Further, it was a great honor to meet some of the other members of the nuigroup community in person, some of whom where inspiring not only because of their amazing intellect and artistic talents, but especially due to their friendliness, benevolence, and maturity.</p>
<p><strong>Some concerning developments..</strong></p>
<p>However, I am somewhat troubled by various apparent misconceptions and misunderstandings concerning the nuigroup community (<a href="http://theclevermonkey.blogspot.com/">a related blog post</a>).  Many industry attendees where confused or even upset about the difference/associations between the nuigroup community and<a href="http://natural-ui.com/"> Natual User Interface A.B</a>. of Sweden.   As if this matter wasn&#8217;t already confusing enough, other &#8220;nuigroup commercialization&#8221; efforts have apparently been underway by some of the individuals running the nuigroup.com forums and website.</p>
<p>Dont get me wrong.  I have no problem whatsoever with commercial ventures or proprietary software and business models.  I do however have a problem with what I think has been gross misconduct from some of the business entities involved with or arising out of the nuigroup.</p>
<p>Even more troubling to me personally, is the extent to which some of these issues have been seemingly intentionally kept under the table by individuals that consider themselves important members of the community.  An open community cannot function without transparent and honest discussions concerning its identity and purpose.</p>
<p><strong>nuigroup needs to talk!</strong></p>
<p>Of course, I can only speak for myself as a single member participating in the nuigroup community.  That however is the nature of communities, whether they be online research or hobbyist communities, academic communities, a small group of friends or entire countries. Here is a claim I make confidently without the need for a reference or argument: Organizing, maintaining, and governing communities is  a very hard problem.  And while many of us desire especially open, free, and democratic communities, these aspect make the organization and governance anything but easier.</p>
<p>I feel very strongly  that the community is entitled to an open and transparent discourse about these issues and its identity.  Whether the impact of the community is significant in industry or academia or not, the 5000 individuals contributing their thoughts and ideas have the right to know with whom they are sharing and under what conditions they are doing so.</p>
<p>I have been under the impression that many other community members have understood nuigroup in very similar terms as myself (at least most of the other members at IDC seemed to think so as well). Maybe that was ignorant and based on bad assumptions.  Either way, lets talk openly about what the nuigroup has been, is, and should be.  Here is what I think:</p>
<p><strong>What I think:</strong></p>
<p>I think I am way to busy with school work and trying to think about user interfaces to be able to worry about these issues.</p>
<p>I think teh community deserves an open dialog about nuigroup&#8217;s purpose, mission statement, and organization and that it is past due.  Maybe we have been to gullible or busy solving the technical problems we have been collaborating on. Maybe these issues have arisen only after the community has grown to a significant size.  Maybe ulterior motives have tainted the direction and caused the lack of appropriate steps along the way.  Maybe I am the only one who has been going along perceiving a very different community.  Maybe I am getting concerned about insignificant things.</p>
<p>To my understanding, the community itself has no direct affiliation with<a href="http://natural-ui.com/"> Natural User Interface A.B. of Sweden (NUI)</a>.  NUI was founded by early members of the nuigroup community and uses the same logo.  While NUI is free to contribute to the community like anyone else, the community cannot be responsible for the actions taken by NUI or endorse the company in any way shape or form.  The logo thing causes way to much confusion.  While I like the logo (and to my understanding nuigroup.com used it first), i could care less.  There is more important things in life to worry about than a freaking logo or name (unless your only objective is to make money through branding). Let&#8217;s get back to talking about novel UI&#8217;s.</p>
<p>The same things apply to <a href="http://nuiinc.com/">NUIINC</a>.  This is another  commercial entity founded in the US, by the individuals running the nuigroup.com webserver.  Apparently they are in the business of &#8220;creating communities and user interfaces&#8221;. It is my understanding that the community at large has not even been aware of the existence of this incorporation. At least I was&#8217;nt until last week.</p>
<p>Again, I think it is perfectly fine for a commercial enterprise to take interest in, support, or collaborate as part of the nuigroup community.  But you cannot claim to own, represent, or be anymore affiliated with the community than its other members.  Especially not if those members are lead to belive to be part of a truly open initiative.</p>
<p>It&#8217;s probably time to agree on some rules of conduct.  There are many ways to go here, but lets make sure everyone knows what is going on.  There is plenty of good research and examples of other online communities from which nuigroup can learn about how to organize itself (e.g <a href="http://wiki.sugarlabs.org/go/Sugar_Labs/Governance">Sugar Labs</a> just went though some discussion last year.   John Hull pointed out <a href="http://www.amazon.com/Starfish-Spider-Unstoppable-Leaderless-Organizations/dp/1591841437/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1240797338&amp;sr=8-1">this book</a>:  ).  To what level it needs to establish rules for making collective decisions (e.g. hosting costs, gsoc, and other resources) needs to be established by the community as a whole.</p>
<p>At IDC, there was some talk about a foundation being formed to act as a legal entity and protect the communities collective resources.  The NUINC people apparently have already established such a foundation, much of this information was not layed out very clearly in my opinion though.  If a foundation or other legal entity needs to be formed, this needs to happen from within the community and based one some consensus.</p>
<p><strong>Why the nuigroup community is a good thing</strong></p>
<p>Despite these negative issues and circumstances, I do believe that the community has a very valid reason and purpose to exist.</p>
<p>For one I think that making the technology and knowledge we discuss more accessible is a good thing.  We do need to be more careful about respecting intellectual property and copyright!   Obviously no one should start a business using a patented technology after learning about it in the community without proper licensing.  We also cannot make available copies of copyrighted material.  We are free to discuss the knowledge, information and implications described in patents and copyrighted material.  If one disagrees with the laws governing these concepts, the appropriate venue or action to be taken has to be political or legal in nature.</p>
<p>What we can do is far more powerfull however, making the information and technology more accessible and easier to understand to people outside industry or academic communities only benefits us all.  Patent documents and conference papers can be hard to find or be very expensive.  No one can keep us from sharing the knowledge we gain from reading them. Neglecting the ideas of newcomers or those that aren&#8217;t privileged with direct acces to these materials would not only be arrogant, it would be counterproductive.  Especially in a field where so much of what we do is tainted by prior experiences and expectations about computer interfaces and their past limitations.</p>
<p>The assimilation and filtering of information and knowledge from various backgrounds is invaluable to members of all participating communities.  One nice aspect of IDC was the variety of backgrounds reflected in the speakers and attendees.  Yet, it came nowhere close to the unique and diverse backgrounds and demographics represented inside the nuigroup community.</p>
<p>A truly open online community about user interfaces and its collective intelligence can be a breeding ground for new ideas .  It can provide real time feedback and collaboration for our projects and work.  It spreads excitement about pushing user interfaces beyond our expectations.</p>
<p>An open and widely distributed community can provide valuable resources and novel evaluation methods for UI and HCI research.  Collaborative evaluation of user interfaces could provide many benefits besides just scalability and decentralization (we&#8217;re not all that good at recreating or confirming the user studies and experiemnts of our peers in the HCI field).</p>
<p><strong>What do you think?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=47</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>pymt</title>
		<link>http://blog.tehansen.de/?p=34</link>
		<comments>http://blog.tehansen.de/?p=34#comments</comments>
		<pubDate>Thu, 20 Nov 2008 05:24:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tehansen.de/?p=34</guid>
		<description><![CDATA[pymt is a python module for developing multi-touch enabled media rich applications. Currently the aim is to allow for quick and easy interaction design and rapid prototype development. There is also a focus on logging tasks or sessions of user interaction to quantitative data and the analysis/visualization of such data.
check it out:  pymt.googlecode.com
]]></description>
			<content:encoded><![CDATA[<p>pymt is a python module for developing multi-touch enabled media rich applications. Currently the aim is to allow for quick and easy interaction design and rapid prototype development. There is also a focus on logging tasks or sessions of user interaction to quantitative data and the analysis/visualization of such data.</p>
<p>check it out:  <a href="pymt.googlecode.com">pymt.googlecode.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gpu acceleration for tbeta</title>
		<link>http://blog.tehansen.de/?p=28</link>
		<comments>http://blog.tehansen.de/?p=28#comments</comments>
		<pubDate>Thu, 31 Jul 2008 07:03:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tehansen.wordpress.com/?p=40</guid>
		<description><![CDATA[I&#8217;m kinda tired as its getting late, but I wanted to post something since I&#8217;ve been so busy lately and the blog is one of the things that sort of ended up suffering from it.  More later when I fix some of more bugs and get to do some better testing on some real hardware.
I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m kinda tired as its getting late, but I wanted to post something since I&#8217;ve been so busy lately and the blog is one of the things that sort of ended up suffering from it.  More later when I fix some of more bugs and get to do some better testing on some real hardware.</p>
<p>I have been working on integrating the gpu accelerated tracking into tbeta&#8211;a new tracker that is being developed by <a href="http://www.nuicat.com">Seth Sandler</a>.  I&#8217;ve managed to add all the gpu based pre processing to the current OpenCV based filter pipeline and added some new glsl filters along the way.  For now I am just reading back the result from the preprocessing using glReadPixels (which is really slow) and feeding it to the OpenCV contourFilter and tracker.  Still I seem to be getting a speedup from 170fps to 270fps (although I am not sure if those numbers are accurate).</p>
<p>I&#8217;ve got some bugs to fix when using video instead of the camera, and also still need to hook up the sliders to the gpu filters.  The parameters are still in the xml format I had them before.  And of course I still need to fix the rest of the pipeline to avoid the costly readback.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=28</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To analyse or not to analyse conected components</title>
		<link>http://blog.tehansen.de/?p=24</link>
		<comments>http://blog.tehansen.de/?p=24#comments</comments>
		<pubDate>Fri, 11 Jul 2008 10:02:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[gpuTracker]]></category>

		<guid isPermaLink="false">http://tehansen.wordpress.com/?p=24</guid>
		<description><![CDATA[So to figure out the location of independent blobs one has to first figure out which pixels belong to what blob.  This is usually reffered to as connected component analysis/labeling.  The standard algorithm do do this starts in one corner of an image and then looks at the next pixel until it reaches opposite corner [...]]]></description>
			<content:encoded><![CDATA[<p>So to figure out the location of independent blobs one has to first figure out which pixels belong to what blob.  This is usually reffered to as connected component analysis/labeling.  The standard algorithm do do this starts in one corner of an image and then looks at the next pixel until it reaches opposite corner (<a href="http://homepages.inf.ed.ac.uk/rbf/HIPR2/label.htm">connected component labeling</a>)This doesn&#8217;t really work on the gpu, because everything happens in parallel.</p>
<p>I have been playing around with a couple ideas of how to cope with this.  Some of which use alternative algorithm to label the individual components  Here is a screenshot of a really naive approach that actually works better than i thought it would.  It marks the horizontal and vertical middle pixel red and green respectively for each row/column.  The center point becomes yellow.  The idea is that if i have an image with just single pixels representing the center of each blob I can find them quickly on the gpu by processing e.g. each 10&#215;10 block by a separate geometry shader thread.  Then I could easily produce variable length output to store the coordinates and only transfer back to the cpu what is really needed.</p>
<p style="text-align: center;"><a href="http://blog.tehansen.de/wp-content/uploads/blobs1.png"><img class="aligncenter size-medium wp-image-36" src="http://tehansen.files.wordpress.com/2008/07/blobs1.png?w=300&amp;h=300" alt="" /></a></p>
<p>I&#8217;m pretty convinced that this approach is too naiive to work well, but it kind of looked cool.  We&#8217;ll see what else we can come up with.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=24</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>first svn commit</title>
		<link>http://blog.tehansen.de/?p=19</link>
		<comments>http://blog.tehansen.de/?p=19#comments</comments>
		<pubDate>Wed, 25 Jun 2008 06:49:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gpuTracker]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[nuigroup]]></category>

		<guid isPermaLink="false">http://tehansen.wordpress.com/?p=8</guid>
		<description><![CDATA[I uploaded some code to svn.  Google code project is here: http://code.google.com/p/gputracker
I&#8217;ll add some documentation in the days to come. I need to also make the user interface for filter chain configuration better and get the blob detection and tracking working.

]]></description>
			<content:encoded><![CDATA[<p>I uploaded some code to svn.  Google code project is here: <a href="http://code.google.com/p/gputracker" target="_blank">http://code.google.com/p/gputracker</a></p>
<p>I&#8217;ll add some documentation in the days to come. I need to also make the user interface for filter chain configuration better and get the blob detection and tracking working.</p>
<p><a href="http://tehansen.files.wordpress.com/2008/06/screenshot-gputracker-1.png"><img class="alignnone size-medium wp-image-9" src="http://tehansen.files.wordpress.com/2008/06/screenshot-gputracker-1.png?w=300" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=19</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World</title>
		<link>http://blog.tehansen.de/?p=17</link>
		<comments>http://blog.tehansen.de/?p=17#comments</comments>
		<pubDate>Fri, 30 May 2008 23:26:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[gpuTracker]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[nuigroup]]></category>

		<guid isPermaLink="false">http://tehansen.wordpress.com/?p=5</guid>
		<description><![CDATA[Hello World.  the default Wordpress title is quite fitting.  This blog is meant to document my google summer of code project.  I am working on implementing gpu accelerated blob tracking for nuigroup.  NUIgroup is awesome community made up from people around the world sharing a common interest in natural user interfaces [...]]]></description>
			<content:encoded><![CDATA[<p>Hello World.  the default Wordpress title is quite fitting.  This blog is meant to document my google summer of code project.  I am working on implementing gpu accelerated blob tracking for <a href="http://www.nuigroup.com">nuigroup</a>.  NUIgroup is awesome community made up from people around the world sharing a common interest in natural user interfaces and next generation human computer interaction.</p>
<p>I have started coding and am working on adding camera support for a couple of different camera types.  USB and ieee1394 work great on windows through DSLib and the CMU driver.  I have gotten firewire support to work on OSX and Linux as well through libdc1394 but I still have quite some work to do with the cameras.  I will see how far I can get this weekend.  I am getting eager to write some glsl code for the image processing.</p>
<p>I will upload some code to svn after playing a bit more with the various camera interfaces so that people can actually use it with the hardware they have.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Zero Force Touch</title>
		<link>http://blog.tehansen.de/?p=10</link>
		<comments>http://blog.tehansen.de/?p=10#comments</comments>
		<pubDate>Thu, 27 Mar 2008 10:44:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">e70c4963-0ee2-455d-9af0-115852fc9b2c</guid>
		<description><![CDATA[After finally getting everything set up in the lab, I ran some tests.  I’m getting great zero force recognition on the touches.  Especially when the lights are out!When the lights are on it doesn’t work as well, but it still responds.  The rear projection film that will be going on top of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cs.uiowa.edu/%7Etehansen/Site/Multi-Touch/Entries/2008/3/27_Zero_Force_Touch_files/DSC_0030.jpg"><img src="http://cs.uiowa.edu/%7Etehansen/Site/Multi-Touch/Media/DSC_0030.jpg" style="float:left; padding-right:10px; padding-bottom:10px; width:262px; height:174px;"/></a>After finally getting everything set up in the lab, I ran some tests.  <br/><br/>I’m getting great zero force recognition on the touches.  Especially when the lights are out!<br/><br/>When the lights are on it doesn’t work as well, but it still responds.  The rear projection film that will be going on top of my mylar diffuser should fix the lighting problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tehansen.de/?feed=rss2&amp;p=10</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
