16829. >> Andy Wilson: Thanks everybody for coming. It's my pleasure to be hosting Bjoern Hartmann from Stanford. Bjoern has done a lot of really interesting things in ETI, as many of you know. And he is finishing up his Ph.D. work right now and he'll be presenting some of that work. We've had the privilege of working with him last spring. He was an intern here, and we worked with Mary Morris, myself and Banco on a large format surface, which is actually still running upstairs. We're still doing some work on that, and I know some of you here have seen that. If you haven't, I'll happily give you a demo of that system. I think one of the interesting things about Bjoern is his approach to ATI and it's his looking at tools for designers and various strategies for prototyping and making tools for prototyping. And I think it's some things that resonate with some of the activities that are going around on campus. So Bjoern himself has done a lot of, as I mentioned, a lot of interesting work in ATI. He's garnered several best paper awards at West and ACI. And he's editor of Ambidextrous Journal at Stanford University. And reading through his CV is really interesting because he's worked all over the world. I think he's had jobs in France and Netherlands and Italy and been involved with a record company and all sorts of interesting things. He has a lot of different experiences for a computer scientist. Thank you. He's going to be talking about enlightened trial and error. I'll give it over to Bjoern. >> Bjoern Hartmann: Thank you for the introduction. I have to warn you ahead of time, if I'm not quite my bubbly self today, it is because I caught a cold about two days ago on the East Coast. But, anyway, I'm very glad to be here, excited to be here. Great time in the three months that I spent here last year. And today I want to talk to you about my dissertation research, which is really concerned with new prototyping tools for the design of physically embodied user interfaces. Now, in particular I will introduce systems in my talk today that address three important concerns for prototyping new user interfaces. First, how to enable a larger group of designers to rapidly create functional ubiquitous computing prototypes. Second, demonstrate how to support iteration in the design process by integrating test feedback from testing and prototype right back into the design tool. And, third, I'll introduce ways to -- oops -- enable simultaneous exploration of multiple design alternatives in parallel. But maybe let's first take a step back and ask the question: Why focus on prototypes? Well, if you believe practicing designers and people who study design, then they will tell you that prototypes are central to good design in any domain, and that prototyping is the pivotal activity that structures innovation and collaboration, whether you're designing furniture or medical devices or user interfaces. And the goal in prototyping is not the artifact, per se. It's feedback and iteration. Prototypes are cognitive artifacts that enable exploration and iteration. Let's look at exploration and iteration in a little bit more detail. This diagram may be familiar to you since it came from Bill Buxton's book. So any sufficiently complex problem has a space of possible solutions. To map that space, designers frequently generate multiple possible solutions to a problem and they do that simultaneously. And afterwards they then select either desirable candidates or desirable features from different candidates to move forward. Now, iterative design just acknowledges that finding a fit between a problem space and a solution space can only be achieved through repeated testing and improvement if what you're concerned with is the user experience. Let me give you two examples. Up here you see Paul Bradley, industrial designer at IDEO, and when they were tasked with designing an early version of the Microsoft mouse, he rapidly built about 80 different foam models to just explore the space of possible shapes. This is Liza Richert in the UK works for Buchard Design. Recently worked on the open source content management system. They have about 300,000 users, and the way they went about that was to post even early wire frames to the community of existing users, gather factor one week, and then incorporate that feedback into the next iteration, and then wire frames turned into more functional prototypes and into the next iteration and the next and the next. Now, given that exploration and iteration are core activities in design, it's somewhat exciting the tools neither of these two activities are well supported. The focus of today's tools are really on getting a single complete polished robust artifact built. And, of course, that's important, but it makes the wrong set of trade-offs in earlier stages of the design process. So let's see what I propose we can do about that. So, first, I'm going to talk to you about how to enable more rapid offering of prototypes in the realm of off-the-desktop user interfaces. So information appliances, smart products, ubiquitous computing interfaces, and think of rapid authoring as really the baseline of support, without which none of the other work can happen. If you can't build a single prototype quickly enough, you're unlikely to explore multiple different alternatives in parallel. You're unlikely to go through the iterative cycle a number of times because it just takes too many sources to get started in the first place. Now, as a good user-centered designer, of course you have to go out into the world and learn about your user. So, for example, I served as a technical consultant at a Bay Area product design company for the design of the physical user interface for a medical surgery device and that just allowed me to go into the company and get kind of firsthand data of how those design teams work. I just want to highlight one of the findings from this initial inquiry. And that is that professional design companies actually do have access to resources and the expertise required to build, well, almost anything. However, that expertise is nonuniformly distributed. So at many design companies, for example, there will be one electrical engineer on staff. And that one person now is a bottleneck for all projects that will have some kind of sensing and actuation component in them. What that means is that shiny functional prototypes are getting built but oftentimes, because of those resource constraints, only as kind of models that you show off at trade shows to wow potential clients, not as tools for design thinking itself, for reasoning through the problem space. Now, to address that opportunity, I, together with collaborators, built D Tools, which is a hardware and software toolkit that leverages the storyboard paradigm familiar to many designers. It's the first toolkit that designs the behavior of what your prototypes should do together with the design of what kind of IO components are there, how many buttons are there, what kind of sensing can your device do. And let me give you an example to make clear what level of fidelity details targets. This is an example taken from a local university. The mobile text entry problem. In the absence of a touch screen, if you have less buttons than letters in the alphabet you'll need some kind of multi-step disambiguation process to select maybe some subset and select a letter from that subset. So people at UW proposed you take that small number of buttons and combine it with tilled information that you may extract from an accelerometer. That's becoming ubiquitous in our mobile devices. The larger question is how well does such an input technique work? And this is a question that I submit that instead of going through quite involved step of spinning out a custom circuit board and fabricating the hardware, really you want to be able to answer in about an afternoon. So here is a prototype of tilt based technique we built using our own toolkit. It's a little larger, but there's some trade-offs you make in prototyping. Let me just show you. This is an action. We were able to prototype the published technique of first using buttons to select the letter subset followed by tilt to select a letter within that subset. Now, more importantly details was rapid enough to ask what happened if you reverse the structure so you first use tilt and then buttons to disambiguate. Turns out that because tilting is more error prone, you have less feedback. The second technique actually outperforms the first technique. However, this second technique was not what was published. So my larger argument here is having a rapid enough tool supported the serendipitous discovery of better spots in the design space that just thinking hard about the problem itself sometimes does not get you to. All right. Well, how do we build such a prototype in D Tools? Designers begin by plugging in physical components such as sensors and actuators into the D Tools interface. As they do that details counterparts appear. The designer is laying out an input what input and output exists. With that blueprint in place, you can then offer interactions through visual states which encapsulate output and link them with transitions which get triggered by input events. And any such author interaction can be tried out in real time or it can be simulated if, for example, you're sitting in an airport and you don't have your hardware with you. Now, of course, the complexity of what you can author in any visual scheme is limited. And so to break through that complexity barrier our toolkit offers methods to augment any visual state with procedural code. Just to look at the user interface here of D Tools, again in the lower left-hand corner you have a graphical user interface, GUI editor. We know how to build those, yet they still need to be part of kind of a larger set. What's novel is really on the upper left-hand corner that you have this virtual representation of what the physical thing is you are building. And I'd argue that having this representation serves as a bridge to reduce the cognitive friction of focusing on one type of work that happens on your screen where you author the behavior and another kind of work when you switch over to your desk and you have a bunch of hardware in your hands. To make this plug-and-play architecture interaction feasible that I showed you, we built our own hardware interface that's built based on networking, smart components on a shared bus. So here every button, every LED and sensor has a tiny, cheap micro controller underneath it so when you plug it in it can announce its identity and its capabilities to our toolkit. Now, of course, the main editor. This is where the prototype's behavior is defined. And as I mentioned, states encapsulate output think control flow, herald state charts and then control is transferred from one state to another through events that come in through the infidel moments. That raises another question, that is where do these events come from. It's fairly trivial when you're thinking about discrete inputs but those are actually the less interesting case. The more interesting case is working with continuous sensors such as accelerometers for resistors, photo transistor, rangers, et cetera. Now the challenges that these kind of inputs pose is any time you're sensing the real world, the real world turns out to be noisy and nonlinear. If you don't have a background in signal processing, this presents quite a challenge to the interaction designer. Observe where the challenge is. It's not in kind of scoping what should be detected. We're focusing on the domain of sensor-based interaction. So take the Wii tennis game. As a designer I know I want to detect the swinging of the tennis racket. I can perform that action itself. The problem comes in symbolically specifying to the system how to detect such as an action. So the research question is can we use the performance of the action itself to do a significant amount of the work of specifying the recognition algorithm. Well, it kind of sounds like a machine learning problem. And, yes, of course, what I'm talking about here is using recognition algorithms kind of under the hood to help you with more complex event definitions for your prototypes. However, from the perspective of an HCI researcher, you're actually not done at that point if you have the right algorithms in hand. Because there's another problem, that is, what are the appropriate techniques in the user interface that make real time demonstration and testing feasible for designers? How do we elicit an appropriate example set and how do we deal with breakdown cases such as false positives or missed recognition? And the guiding insight here is you really want to combine the smarts of recognition algorithm on one side with the smarts of the designer on the other side of the screen. And I believe the way to do that is by combining direct multiplication with a rich information visualization interface about what's going on. So here's a quick demonstration of this extension to D Tools which is called Exemplar. So once again you begin by connecting sensors. In this case, the two accelerometer, and then you demonstrate what you want to recognize. Here it's a simple shake. Then mark up in the signal graph, the part of the signal that corresponds to the demonstration. You can then perform that action again, and see in real time a visualization of what was recognized and why it was recognized. Now, the crux, of course, is that generalization step. How do we go from one or a small number of demonstrations to a more generally applicable rule? Well, I'll make two suggestions here. The first one is just to use thresholds. These are computationally straightforward. However, they're very powerful from the point of view of the designer, because they have a straightforward visual interpretation. I can just track my signal, see when it dips into the right region. And I don't know if you can see on this projector, we then highlight throughout the history of the signal regions that match. Now simple thresholds, of course, are not that useful when you're dealing with noisy signal data. So that's why experts employ techniques such as historesis or double threshold and turns out these techniques also have good visual representations. So in exemplar, you can adjust parameters, split thresholds, define minimum event durations, and as you do that interactively with each step we revisualize how your new event would have been recognized throughout the history of the signal. Now, that gives you two ways of checking whether you're done. The first one is inspection of the signal. And the second one is just another demonstration in real time. Now, thresholds do have limited power. For example, they don't let you capture anything where the performance depends on variation over time. It's not good for gesture detection. So for gestures, exemplar introduces pattern matching techniques where, from the user's point the interaction is the same. Give an example, mark it up and then threshold. However, what you're thresholding against now is a second graph that we plot into that same window and that graph is an error metric of the pattern recognition algorithm. The particular algorithm we're employing here is the dynamic time warping which comes out of the speech recognition community. It's been around for a while, since the late '70s. The idea behind that, given one demonstration and new input, compute how much you have to distort the new input in both time and space to match the demonstration. That gives you an error metric and then we plot that error metric back into the UI. Speech recognition has moved on. They're mostly not using dynamic time warping anymore. However, when it makes this algorithm especially promising in our setting is it works with a single demonstration, where most of the techniques like hidden Markov models and others that are used today require larger sample sets. You don't want to turn the designer into this example provision machine. Another technical detail, this algorithm is quadratic in time and space. But we don't really care about that because it's entirely reasonable to sample human motion around 100 Hertz. So N ends up being fairly small and it is not a problem to run a large bank of these recognizers in parallel. So I'm showing you kind of two classes of techniques. Visual authoring and demonstration based definition of events and the next question is how well does this work. And one of the challenges in design tool research is oftentimes you lack a clear comparison for doing an A/B test. In the absence of a clear comparison, what you can do, though, is a triangulation of methods to examine the software artifact you've built from multiple different perspectives. So that can start with inspection by experts using, for example, the cognitive dimensions of notation questionnaire which we've employed, which comes from cognitive science. Of course, first use lab studies which have two important limitations, though, with respect to the kind of tools I'm building. The first one is you're always conflating learning curve with usability and utility of your tool. And you are actually only interested in the latter for any tool that's going to be used for any significant amount of time. The second one is if what you're testing is a tool to build for something else you have to give people tasks to build something else. It's quite tricky, oftentimes, to come up with tasks that you feel confident generalized to the task you would encounter in a real world setting. To work around that, we also tried to do class and industry deployment of our tools. And kind of longer term settings. Let me give you a few impressions of our user studies. So these were lab user studies of details and exemplar. One task we gave people was to, from scratch, build an interactive prototype, working prototype of an MP3 player in less than 45 minutes. Another task was that given a set of mouse and keyboard control games and a box of sensors, we'll give you 30 minutes to come up with new, more compelling interaction schemes to control those games. I'll show you three quick clips from this. Here a participant with no prior exposure to sensing techniques builds a booth where hitting the walls and stomping on the floor would navigate a spaceship. Another participant who uses accelerometer to detect rocket fire ranges to detect left and right stepping. And here's someone used the game where you aim and shoot rubberbands and you control that game with a hand-held mini joystick and a bend sensor on the table where flicking would trigger shooting the rubber band. What do we get out of these studies instead of a few funny engaging data clips? Because we have that fine grained data we can look at traditional measures like task completion time. This is now data for building the MP3 player for that part of the study. It turns out, however, that task completion time is not that meaningful when you have an open ended design task, because there's no clear notion of what it means to be done with it. So to get meaningful data, then, you can delve one layer deeper into the data and split the video analysis, split and tally what did people spend their time doing. And here I'm showing you a breakdown between time spent in software and the black bar and time spent just assembling and modifying the physical prototype, in the shaded area. What's exciting here is we're starting to approach parity and time spent between prototyping the behavior and the form. Here in prototyping the foam core was sandwiched between layers of cardboard. That's a successful material in prototyping for industrial design because it allows you to do massing models really quickly. Now, I also mentioned class deployment. And I just wanted to bring up here one example of a successful pass collaboration with industry. So Leapfrog, the electronic toy manufacturer, approached us about using D Tools internally for their advanced concepts group to prototype new toys. And in return for me training them, they then actually had one of their electrical engineers improve our hardware design and manufactured a whole set of hardware tool kits which we were then able to give out to students. So we taught an interaction design course with 50 students that all used our tool kits. Bubbling up from this section of the talk. So what are the important notions for this first section? First hopefully showed that D tool successfully enabled nonprogrammers to program novel functional ubiquitous sensor user interfaces. And the techniques that enabled that were first in visual offering having that virtual model of a physical device that you're building and combine with plug and play hardware. And the second technique was raising the complexity of the event definitions that interaction designers can work with by employing programming by demonstration. All right. Moving on now to the second topic of this talk, how can we aid iteration. So the repeated refinement and modification of prototypes in our design tools. Well, a second result of our inquiry was that user tests, even of incomplete rough prototypes at design companies today, are frequently video recorded. And that is because video is essentially free. Doesn't cost much in terms of equipment or storage. However, what's expensive is revisiting that video later on. So a typical use case would be I just collected an hour or two or three of user study data and really all I care about for now are three five-second snippets that distil the key insights so I can communicate those to my team. Now, the insight in research was that it's possible to integrate the design, the test and the analysis of user interfaces into a single tool so that we can then afterwards leverage the correlation of the design model with the test data of testing that model. So I'm going to show you how such a test would look like. So we have a prototype built with our toolkit. We now just point a camera over the shoulder of the tester. Instead of recording to RAM, we just record to flash, and we record straight to the computer and annotate in real time the video with the states that the software model was in, all possible events that occurred by user interaction, and then in addition we can provide the experimenter itself with a big red button that says review this later. Now, after test session is completed, you can then leverage tight synchronization between the graphical interaction model, the video and the test data, kind of the meta data that ties the two together. This is a prime example for leveraging a multi-monitor setup that many of us already work on. So now we have the design environment running on the left-hand screen and the video review application on the right-hand screen. And the interactions that are now possible are that you can get context of what happened in the video in the software model. So as the play head scrubs through the video, we can highlight in our software model where the user was at that point and also where they were coming from and because the test is over where they're going to next. So that gives you additional context. More importantly, though, is probably the other direction, where you can now use your state model as a query interface into the video. So I can click on any particular state to execute the query, show me only those video sequences where the user was in that particular state. And that can either be done in software or actually through demonstration on the physical prototype itself. So, for example, the query show me all video segments where the user moved the volume slider on the device can be executed by picking up the device and moving the volume slider. All right. So built it , prototyped it tested it and looked through and analyzed the results of that test. That most likely suggests some changes that need to be done for the next revision. If there are no changes, we actually didn't learn anything from the test and the test kind of was a waste. Now, designed as a team sport, undertaken by people from different backgrounds, so most likely the people, the person reviewing is actually not the person who built the prototype in the first place. So that raises the question of what would suitable interfaces for advising interaction designs look like? And this is really early work that's been kind of in progress, so I'm going to give you a quick snippet of this. Really, our approach is to say that, well, interaction designers really concerned with two separate activities that are interrelated. It's about the definition of appearance and the definition of behavior. So maybe we can take inspiration from the different realms that are concerned with behavior in the one sense and pure appearance on the other hand. So, of course, for definition of behavior we have a long history of successful tools in revision control and versioning, which operate on the level of the source representation itself and show you what changes were made. However, if you look in the domain of appearance, you actually get very different tools. So on the left-hand side is a shot from Pixar where directors, after reviewing the daily 3-D rendering of a scene annotate on a Tablet PC how things should change for the next rendering. Now, observe none of the changes here are done. They're just suggested in a more abstract medium. So to me that says we actually want to have both of these functions available in a revision tool. So here's the first stab at what a revision tool should look like. To enable sketching this is pen driven. You want to be able to have both high level feedback through sketching as well as semantic actions think track changes in word that visualize insertions, modifications, deletions to the structure, to the kind of information architecture of your prototype. Bubbling back up a level. So what's important in this section about supporting integration. Integration of analysis data into a design tool can radically shorten the time required to work with that test data. And the second point that I would like to make is that integration is really enabled by having this high level visual representation of the software model. Now in D Tools you kind of get that high level representation for free because that also happens to be the representation that you author in, that control flow from state to state. Now, these techniques don't directly apply if, for example, your entire software was written in C++, because there's a huge granularity mismatch between tying a second of video to lines of code that executed. So we may actually, for those cases, maybe automatically create some kind of higher level representation of that software. And then, finally, design is a team sport. So new revision tools are needed to enable and capture and express insight between iterations. And the last part of my talk, I'd like to really ask the following research questions: Research question: How can tools support the creation of multiple user interface alternatives in parallel? And that question didn't just arise out of a vacuum. It was an interesting study published by Brad Meyers at Real HCC last year where he did a large survey of 259 interaction designers. And one of the key findings of that paper was that designers frequently wanted to have multiple alternatives of a behavior side by side but that there was no way to do that in current implementation tools. Now, when we started this project, I asked the question: Maybe we can gain inspiration, once again, from neighboring domains. Maybe they already have some good solutions prepared that we can leverage and work off of. And kind of the most relevant things I found were design galleries, research done at Meryl, which looked at the problem of finding your way to good points in the design space of large 3-D rendered scenes. So take, for example, particle systems. We have a large number of dimensions. And it's not clear a priori where to set those parameters to get good visual results. Their solution was we'll just off line overnight generate a hopefully space-spanning set and then let you select the right alternatives. Mark Lavoy proposed using spreadsheets where the spreadsheet paradigm is inherently supportive of having multiple possible what-if scenarios living side by side. Unfortunately, these kind of solutions don't translate straightforwardly to the task of interaction design, and that is because visual tools like D Tools, notwithstanding, actually a lot of the nuts and bolts of interactions happens to be done in code. So whether it's action script in Flash or HTML and CSS in DreamWeaver, or if you look on the open source side, the most popular tools right now are Duono and Processing which give you thin wrappers around C and Java. Now once you're working with programmed interaction, of course, now we have two representations you have to worry about. There's the source code where you make changes, where you express the alternatives and the running program where you then observe them later on. So in the absence of good existing tools for supporting exploration, you can ask the question: What do people already do to kind of get around those limitations? So we conducted a small study where we asked interaction designers to come into our office and bring the source code of their last project. And this was a little dicy to convince people to open up their code. But we got a number of respondents. And really from that exercise derived three separate requirements. The first is creating a satisfying user experience often involves tweaking the dials of your application. So the code stays the same and you're just experimenting with different parameter settings. Now, a second requirement is that to compare different behaviors, changes to logic may be required as well. Don't worry about what this function does. This is a code someone brought in during the inquiry. The important part here is that there are actually two different alternatives co-existing side by side within the same function body and then to switch between testing one and the other between executions, this participant would move the comment lines up and down. So I think tool support, creation management of different code alternatives in a better way than the moving of comment lines. And then the final observation was that management of code and data alternatives really has to span both the editing and the execution environments because you express them in one but observe them in the other. So you really want to play around with them not when the code is up but actually when the program is up and running. Now, experts already do that today through providing separate slider panels. So at some point in a complex project, someone will just say I've had enough of this messing around and reexecuting, I'm just going to write a slider panel that puts all the relevant dimensions right there on my screen while the program is executing. Now, this practice right now is, first it's really reserved to expert programmers; and, second, this is a whole bunch of effort you expend that is not part of the final deliverable at all. It's code that's written solely to get some hooks, get some instrumentation into the behavior of your program at runtime. So wouldn't it be nice if you could just generate those for free automatically? All right. To see how we could address these three requirements in practice, we will juxtapose, which is an experimental both code editor and runtime environment. Excuse me, which manages source alternatives in an augmented editor. Those alternatives are then executed side by side in runtime, and augmented by automatic generation of control interfaces to let you modify parameters of the running application. All right. Working with multiple code alternatives. Kind of sounds like a big headache for the developer. How do you keep track of what the alternatives are. How do you express them. So I think there are really two requirements that your authoring environment has to deliver on. The first is offer techniques to manipulate content across different alternatives in parallel. And the second one is visualize. Make in some way visually apparent of what's shared and what's not shared between your different alternatives. So in our editor which we wrote for Action Script, compiles and runs Flash files, alternatives are expressed in tabs. So tabs are no longer different files, they're alternatives of the same file. And then there's a linked edit mode which basically determines where your edits are applied. So with linked edit mode on, anything you type gets propagated to all alternatives that exist. And to know where the right spot is to apply those alternatives, you basically use the DIF algorithm underneath the hood, so we can keep cursor correspondents in one location what corresponds to the right in another alternative in the text documents. When linked edit is turned off, your changes are going to be made locally to only to the document that you currently see, and then to make that apparent what's unique we just highlight it in a different background color. So I was thinking about what's kind of a small but salient example that demonstrates how a designer would use parallel editing for exploration. And luckily someone else provided the answer for me. This is Chris Harrison at WIS 2007 who had this nice insight and published a paper on it that varying the function that maps actual progress in the progress bar to displayed progress actually has implications for how long people think -- how long people think it took regardless of how long it actually took. So he came up with a bank of different functions for mapping actual progress to displayed progress, and then measured the difference that people felt. So here the application harness is the same each and every time, right? I have some window that has some functions and then a progress bar. And the only thing I'm varying is that one line of code that expresses this function. So here's this project we implemented in Flash. I created four alternatives. They really only change in two lines of code. One in the label and the other one in the mapping function. When I hit run, I now compile the set of applications and they get tiled on my screen so I can rapidly look at them side by side. Now it may also be advantageous sometimes to provide parallel input instead of sequential input. Here we add support for intercepting elements and inject ghost events in all the other alternatives. Now to explore parameter spaces really the goal of juxtapose is basically just from the definition of suitable parameters variables in your source code to automatically generate control panels. And here's another example of when that might be useful. Many of you here may be familiar with this particular project of Patrick that in a collaborative setting, if you have multiple people looking at the same screen, it's hard for the person who is not controlling the mouse to make sense of what just happened last in the interface. So Patrick had this great idea of using basically afterglows of widget manipulations. Now those afterglows -- there's a trade-off space of how visually salient do you make them; you want to make sure they don't get missed, but you also don't want them to clutter the user interface. There's lots of dynamic and interface parameters for these parameters that you want to experiment with. Here's a reimplementation of [inaudible] that I wrote in Flash, and you see on the right-hand side here we get a completely automatically generated control panel that allows me to at runtime modify the behavior of these afterglows. Just to peek underneath the hood. Can we generate these control interfaces? Well, first I would argue that you actually want them to run in a different process. So you don't more than necessary interfere with the timing of your original application. So the UI is going to run, the control UI is going to run in a different process. The user process here, before we compile the program, we add a little library stub that on start-up then basically wraps the main entry point to the application and uses language reflection to inspect the user's application, package up a message containing names, types, initial values of variable, send that across using remote procedure call into our runtime process, which, from that information, can then generate the control UI. When that control UI is modified we just do a remote procedure call in the other direction into our library, which can then update the running application. So let me just spend a couple minutes talking about evaluation here. One of the questions we asked was well, when is this tuning really most useful? And the way we try to get at the answer was through a closed-ended task which allowed for precise measurement of completion times and other metrics, where we gave people procedural code that recursively drew this tree, and to hopefully make this a little more externally valid we actually took this task from a book on authoring dynamic flash applications. So we get people code that drew this tree and we said now your task is to produce these four trees by varying the parameters of the code. Here's what one of these sessions would have looked like. And so here now we actually have a good A/B comparison. We can in one case just let people use our tool and the other one we just get rid of this panel but have them use the same editor and the same runtime environment otherwise. Here's the result from the obvious department. Of course, if you give people sliders to change parameters, they'll test many more variations than they ever could if they had to recompile. Direct manipulation is good. But we already believed in that. I think more interesting thing is the question where does it provide benefits. You delve a little deeper in the data and you actually see there were only significant differences for these two trees. Why is that? And it turned out that this code was not written by computer scientists it was written by designers. There were some strange interaction effects between different parameters that made it hard for these two trees after initially reasoning about what the parameters should be to then, by reasoning alone, close the remaining gap. So it was precisely when reasoning could not get you closer, when trial and error was the way to go that tuning made most of a difference. Now, that actually adds a little wrinkle to the story I told you before because if really the value is in exploring multi-dimensional interactions between parameters, then a mouse-controlled interface is definitely suboptimal because you always have only a single point of control. So the design response to that is to make it possible to use a multi-dimensional input device. Here you can map different parameters to an actuated media slider board that musicians use. That that actually turns out to have three benefits. The first one is more than one dimension of control in parallel. The second one is with the mouse it's a hand-eye coordination task to adjust your control sliders. Here, your eyes are free to focus on the application that you want to tune. And the last one is because the mouse is still free, you can, in parallel, tune interactions that depend on mouse input. So I think there's a good case for kind of moving the control interface off on to dedicated hardware. Now, the first two projects I showed you were really in the realm of ubiquitous interaction. And here I show you unique alternatives for exploring off the desktop. The natural next question is can we extend these benefits to pervasive computing? And I looked at two particular points in that space. The first one is interaction design for mobile phones. So here mobile phones are, of course, the new commodity hardware. So mobile developers already frequently test with a whole bank of devices that they own. So this now gives us the opportunity to leverage these device collections by rendering out different alternatives to different phones. So you may test your alternatives by simply picking a second phone up that runs a second alternative and put the first phone down. Now, the interesting part here is that you still have a control interface that runs on the PC. So you still have hooks into the application that runs on your phone, but that phone now actually can be taken outside the lab and you could potentially monitor as well as influence what's happening on the phone application from a remote location. The second domain I briefly want to talk about is the realm of working with micro controllers. So those are the tool of choice if you want to experiment with haptic interactions or other sensing interaction. I picked the Argueno [phonetic] a typical stand in for the hardware that's used for this region of work today. So you typically find something like an eight bit risk chip, 16 K of memory with fairly low level -well, at this point it's already having, sees already a high level tool, statically compiled languages and really small footprints. So just one final engineering detail that we ran into is the question of how would you actually implement this variable tuning in a static language that does not have reflection and no other good runtime information? Well, instead of leveraging reflection, you can actually, before you compile the cold, you can parse the code and you can't get all variable information, but you can definitely know what the set of global variables is. You can then build a symbol table that contains names, types, and runtime pointers to those variables. And then emit that symbol table as C code back into the original program. You can then compile the modified program, and that's what you ship off to the micro controller. Along with some communication routines, so you can talk back to the PC. And that then allows us at runtime when a tuning widget is manipulated or to send a message and use our symbol table to do pointer referencing and change the value of the variable in the running program. From pointer to referencing back to the high level. So what's important here? Well, the high level point is that a structured approach to supporting alternatives can eliminate a lot of the rough, the nasty practices that people retrofit on their current tools, and plain enable more interaction. The tool support for doing that requires connecting both the authoring and the runtime environments of the programs. And juxtaposed in particular, introduce three techniques, linked editing to manage code alternatives. Executing programs side by side with either serial or parallel interaction and automatic generation of tuning interfaces. As a quick summary and a future agenda, I introduced today systems that address three important concerns for the prototyping of new user interfaces. First enabling a larger group of interaction design practitioners to build functional prototypes of user interfaces that live off the desktop and have some real embodied physical presence. Second, introduced techniques that allow you to much more rapidly make sense of feedback you gathered in the iterative development of user interface prototypes. And, third, juxtapose introduced techniques for exploring multiple user interfaces in parallel. Briefly wanted to mention some kind of reception of this work. Unbeknownst to me and to our group there was a research group in Germany which took D Tools because it was open source and just extended it to also record timing characteristics of user interaction with prototypes and they published a paper at CAI on this and there are two recent O'Riley books which discuss these tools. The first is Tomago Making Things Talk teaches in the interactive televisions program at NYU and this is a book for students and enthusiasts to get a foothold in computing. And the second book came out maybe a month ago from John Safford. He was a consultant at Adaptive Path. This book is how to help them reason through making the transition between desktop interfaces and [inaudible] controlled interfaces. In terms of a future research agenda, there are, of course, many concrete topics that fall directly out of the research from the prior system. So one concrete example juxtaposes, I haven't talked at all about enabling exploration of alternatives of hybrid authoring environments like blend or Flash that have both code and visual direct manipulation editing. That's concrete. In terms of larger other ideas, the first is how can -- well, languages or maybe execution environments and IDs be co-designed to facilitate prototyping. So a good example was that we found in juxtapose, it's actually very valuable to have some kind of additional keywords or modifiers in the source language that can inform the automatic generation of these control interfaces at runtime, and that's just one instance of a much larger space of kind of development environment support. I'm interested in the question of design and programming by example modification. So very little code these days gets written by firing up Visual Studio and just typing from scratch. Much more code gets found by initial search through either company databases or search on the web for public resources, and there's an interesting, if somewhat complex, analogous practice in product design where during the initial phases you oftentimes your team will construct kind of a project room or a war room and put up as many and as diverse a set of examples of other existing products in that space as you can find. So you find practices built around working with examples both in programming and design. It would be nice to delve into that deeper. And then as a larger project, there's the question of what will the interaction design studio of the future look like. The work I presented today had the commonality that I used, graphical user interfaces to develop nongraphical user interfaces. All the tools were desktop-based. The target domain is off the desktop. So what happens if we flip that first bit? Can we actually make use of surface computing and other ubiquitous computing technologies to help how, especially team design happens. Can we transform the designers' work spaces? And really the first impetus to that work was done right here with Mary and Banco and Andy last year at MSR, where we built a large surface to support design team meetings. And the motivation was that in observing what happens currently at design team meetings, that there's kind of an uneasy co-existence between physical and digital artifacts, whether it's sketches in them [inaudible] printed out schedules for the team, and together with PowerPoints and other videos of prototypes. If we let our design tools move into the physical world we have a much better chance of integrating these practices. So there are some initial interaction techniques that we worked on that allow you, if you can track where objects are on your surface, they'll allow you to rapidly capture high resolution, digital images of any artifact, or go into the other direction if you want to walk out of the meeting with something take a digital artifact and basically use your table as an impromptu light table to quickly sketch on paper. Of course, these are kind of the first inklings of techniques in a larger plan to holistically support design activity and we'd be happy to chat with you about that later. And to conclude, I want to point out that none of the work I presented today was done by me alone. And it was a fantastic set of collaborators at MSR and undergrads master students and Ph.D. students who worked with me over the years. And also just want to point out kind of the variety of companies who have both used design tools to give us feedback or served as sites where we could do contextual inquiry. More information is in recent papers and all of those can just be found on the website. Thank you. [Applause]. >> Andy Wilson: We have time for some questions. >>: I have a question. In Juxtapose, there's kind of two benches that I've seen for the system. One is that you could see the actual behavior simultaneously from multiple instances and the other one is this automatic control, generation controls. Did you find that one was more useful to the other? In particular, was it useful to have multiples running at the same time? >> Bjoern Hartmann: Yeah, so the multiples. The tuning of parameters only gets you a win if the code stays constant, right? Any part where you want to change the code itself, that is much better expressed by creating multiple alternatives and then running them -- whether you run them side by side or focus in one versus focusing in on the other is one question, but certainly having authoring support for keeping track of those changes was definitely used. So I didn't in this talk report on the task where we had people design -- we basically gave them a code framework for rendering and interacting with a map and gave them tasks to think about, if this were for a GPS device, what changes when you're designing for pedestrians versus bicyclist versus drivers. And there we saw a lot of use of these, of code alternatives and also get executed side by side to both think about changes and also have it be a lightweight, smaller scale versioning mechanism, right? In a way, some of this, it shares most of the back end architecture with version control, but because we're targeting a different time scale of interaction and a different kind of scale of changes, the interaction techniques end up being very different, and the feel for what people do with those tools end up being very different. So, yeah, both we definitely saw both in use. Other questions? >>: I'll throw one in here. So one thing that strikes me about all of your work was the active programming now is more of performance, like it's an ongoing activity and it's more like you start with a lump of clay and you build it and one of the key components there is you always have something that's there working doing something. I know in my own work life I'm very nervous when I don't have something running, and I was wondering if you felt that people who were from traditional computer science background were comfortable with that way of doing things or if you found that some other, maybe we're better off having somebody who is more into, I don't know, some other area of expertise would be better at doing this kind of stuff. Maybe a mechanic might be better off at doing this. >> Bjoern Hartmann: Well, a couple of things I want to touch upon in my answer. The first is that we see actually a lot of experimentation in this space of applications, really moved out of computer science and moved into the realm of it would be the professional design shops or hobbyists, because the promise is there. It's very appealing for people to get started and it's not that hard to make the first steps. But then subsequent steps, once you delve into it, if you used the current tool, you often find out at some point you've bitten off more than you can swallow. And there's certainly I've aimed these tools more at interaction designers and I have less data to report on how computer scientists use them. I want to touch upon, though, that issue of how -- how close do you want that integration to be between something that's always working or when do you want to say: Stop, now I really need to go back to the drawing board. Give me two hours to make a big change and come back. And I think there definitely is a space -- you need to provide support for moving along that continuum. Far on the other end of the spectrum is some other work in on the fly programming that people like Guong who came from Princeton who is now at Stanford, do for live programming of audio performances where everything you type gets interpreted on the fly and you definitely get -somehow that puts limits on the amount of exploration you're going to do in real time. Because sometimes you need to do a larger refactoring, whether that's code refactoring or mental refactoring of how things work. So I realize that as something too play close attention to, but I don't have any good principles to report about it. >> Andy Wilson: Any more questions? Let's thank Bjoern.