Boris Smus

interaction engineering

Headlines, meet sparklines: news in context

News reporting suffers from two major issues I'd like to tackle. The first is a bias towards negative, emotionally laden events. The second is the difficulty of capturing information about gradual changes.

These two deficiencies distort our perception. They make it easy for demagogues to claim that the world has gone to shit. The data tells a different story, as the late Hans Rosling was fond of reminding us. My hypothesis is that if base rates were provided in a compelling way alongside news stories (or even headlines), the public would be better informed. The challenges are many: first, getting and analyzing the data, but even more important, presenting it in a reasonable way.

In this post, let's explore what that would entail, from data collection, to analysis, to visualization. We'll go through a couple of examples.

Continued →

Tools for making better decisions

In a famous letter dating back to 1772, Benjamin Franklin described how he made decisions to a friend who was facing a dilemma. Franklin's method involved enumerating pros and cons of an argument, and then attempting to weigh one against the other to ultimately decide which of the two possibilities to pursue. Franklin wrote:

My way is to divide half a sheet of paper by a line into two columns; writing over the one Pro, and over the other Con. Then, during three or four days consideration, I put down under the different heads short hints of the different motives, ... I endeavor to estimate their respective weights.

This post attempts to modernize Franklin's method to attempt to overcome some of its shortcomings. Once we have gathered our thoughts in one place using this spreadsheet format, we can, with the help of others or using (aspirational) AI, assist the decision maker to help them combat common mistakes.

Continued →

Front page blues

According to the American Press Institute,

News is that part of communication that keeps us informed of the changing events, issues, and characters in the world outside.

There are many ways for news to be uninformative or even outright misleading. Two trends in particular have received a lot of attention recently. The first is social recommendation systems and selective unfollowing, which creates a reality-distorting echo chamber. The second is fake news, which sure is in vogue these days, and is obviously a problem that we should tackle.

This post is about a different trend: real news presented with misleading frequency. The issue at stake is the media's ability to inform its readers and serve the public interest.

Continued →

VR View 2.0: JavaScript API

VR View was just updated to version 2! This release includes some nice new features, the main one of which is a JavaScript API. This allows VR Views to be much more interactive. You can now load new content dynamically, play and pause videos, and add hotspots that link from one piece of 360 imagery to another. Here's a simple auto-advancing 360 slideshow showing some of my recent escapes around Seattle...

Continued →

Election 2016

Back in June, I gave Trump a coldhearted 55% chance of winning the 2016 US election. You don't have to believe me, since I recorded it in my Predictions.md file, and never on gjopen.com, where it belongs. My assessment was mostly based on anecdotal observations that recent, related polls have been terribly wrong. Brexit and then Trump's surprise Republican nomination both came as a complete surprise to experts from all sides.

But, despite my dire predictions, it somehow didn't feel that I could be right on the eve of the election. When the final result was revealed, I was just as disturbed as everyone else. In retrospect, I attribute my "successful" prediction mostly to luck combined with my apparently contrarian tendencies, rather than to skill. Nearly a week after the announcement of President Trump, I'm still processing the verdict. Two big questions loom: 1) Why did he win?, and 2) Why didn't we see it coming?

Continued →

Ray Input: WebVR interaction patterns

What would the web look like if there were no scrollbars, no mouse cursors, and no clickable links? That's what VR is like today. On one hand, this is great! Developers are completely free to build however they want, leading to a lot of interesting experiments. On the other hand, it takes a lot of engineering effort to just get basic interactions up and running. Furthermore, it lacks consistency. The alluring promise of being able to navigate from world to world may be diluted by the frustration of having to rediscover new interaction paradigms every time.

While sane interaction defaults are badly needed, baking them into the platform violates principles of the Extensible Web. With that in mind, I implemented a basic Ray-based interaction library called RayInput, which provides reasonable defaults for interacting with 3D objects in and outside of VR. Here's what the interaction looks like on various platforms:

Continued →

Copresence in WebVR

The web platform is uniquely great for networked copresence. To demonstrate, I built a multi-user chat prototype that uses peer-to-peer audio and data connections to establish a virtual audio experience. Voices are spatialized based on the position and orientation of each participant (using Web Audio). Also, you can shrink and grow, which, in addition to changing your avatar's size, pitch shifts your voice. Large avatars have deep, god-like voices, while smaller ones start to sound very mousey!

Check out the demo for yourself. It works on desktop (mouse look and spacebar triggers movement), on mobile (magic window) and in VR (through the WebVR API, via the polyfill).

Continued →

Inspirata: for what inspires you

My site has a little section called Clippings. It's meant as a visual record of some of the things I've found inspiring on the web. How do I add new items to this visual record? Well, I'm glad you asked!

About a year ago, I cobbled together a Chrome extension for exactly this purpose: screen grabs from any webpage. Releasing it on the webstore has been on my backburner ever since. Over the last few weeks, I've spent a bit of time improving it and today, I'm ready to release it for broader testing. I call it Inspirata. Inspirata can be downloaded from the Web Store, and it works like this:

  1. Click the Inspirata icon button.
  2. Select part of the page to save.
  3. Enter an optional caption, et voila!

How Inspirata works video

Continued →

Browsing Wikipedia in VR

WebVR provides a solid technical foundation on which to build compelling VR experiences. But it does not answer a critical question, which is the topic of this post:

What could the web become in a Virtual Reality environment?

Gear VR provides a simple and straightforward answer: same same. The fundamental unit is still a page, but you use the immersion of VR to increase your effective screen size. The input constraints result in a worse experience for the user. Scrolling with your finger on your temple is tiring and head-based typing is a massive pain. Given the input constraints, we need to beef up the output and make it better matched to what VR excels at. A responsive design inspired solution would involve deconstructing the page to better suit the nature of the immersive environment.

Another approach is to make a clean break from legacy web content. What if certain web pages had parallel content tailored for virtual reality? In this post, I'll explore this idea with an example focused on Wikipedia.

Video of VR Wikipedia

Continued →

Three approaches to VR lens distortion

Immersion requires a large field of view. This could be achieved by putting a large curved spherical display on your face, but alas such technology is prohibitively expensive. A more affordable solution to increasing the field of view is to look at small ubiquitous rectangular displays through lenses:

Why VR needs lenses

Lenses placed close to your eyes greatly increase your field of view, but there is a cost: the image becomes spherically distorted. The larger the field of view, the more distorted the image. This post is a quick summary of three different approaches to undistorting the image, all of which have been implemented in JavaScript for various WebVR-related projects.

Continued →