I am Ryan A. Pavlik – a programmer, a designer, a technologist, and a learner.

Photo of Ryan Pavlik

I graduated in December 2014 with my Ph.D. in Human-Computer Interaction co-majoring in Computer Science from Iowa State University. From 2014 through May 2018, I worked for Sensics, Inc leading the design of the Open-Source Virtual Reality (OSVR) software framework, among a wide range of projects, and served as Senior Software Engineer (October 2014 – May 2016) and as Chief Technology Officer – OSVR Platform (May 2016 – May 2018) .

This is my personal, public research/academic/tech web site. Among other things, it serves as a linking hub to my various public profiles and activities, as I draw together a multi-faceted internet identity. Most of my day-to-day activity is not chronicled in posts here, as the timestamps will indicate. Instead, look to the “Me, Elsewhere” links for the play-by-play.

VR Juggler 3.0 packages updated for Ubuntu Natty

Just a quick heads-up: I’ve updated the VR Juggler Ubuntu/Debian packages I maintain on Gitorious and that are built in this PPA repository. There is now a Ubuntu 11.04 (“Natty”) build of VR Juggler 3.0 and its dependencies alongside the other distributions. The instructions I previously posted on installing VR Juggler on Ubuntu from packages is still accurate and now applies to those of you using the latest Ubuntu release.

There were only minor changes from the Maverick packages. Most notably, the Audiere plugin for Sonix is gone because Audiere is no longer being packaged or distributed by Ubuntu or Debian. (If someone would like to pick up where they left off I’d be happy to collaborate!)  Also, I temporarily disabled the VRPN Gadgeteer driver until I get a chance to make an updated, nice package of a recent version of VRPN. I’m almost done with one – just have to test it. When that’s done, I’ll push a new build with this driver re-enabled.

If they work, or don’t work, for you, let me know! You’re welcome to help maintain these packages – many hands make light work. Their source is over on that gitorious link above, and there’s docs in the gitorious wiki, though they’re sparse – happy to help clarify if you’re interested.  I’d also be interested in trying some alternate build service together with/instead of the Launchpad PPA’s – the openSUSE Build Service looks promising but I haven’t had the time to really look into it. So, there’s a side project for you 🙂

VR Juggler tools and binaries on GitHub

Now that the semester’s over, I’ve been able to catch up on a bit of a backlog and put up a few VR Juggler-related items on GitHub. For all these items, click the link to visit the GitHub repo, which will also show you a nicely-rendered README with more information.

  • Jconf Grapher – This is a Python script for parsing jconf files (including their inclusions) and outputting Doxygen code to draw a graph of devices, proxies, and proxy aliases. I’ve included a silly shell script wrapping this to directly output PDF files, and have also made a minimal GUI for exploring these graphs, using XDot and PyGTK. Cross-platform: runs anywhere Python, PyGTK, and Doxygen do. (Tested on Linux and Windows.) Free and open source (Boost Software License 1.0, a very permissive license), feel free to fork and improve!
  • Jconf Display Merger – As I’ve discovered that VR Juggler on Windows works better with fewer windows in favor of more viewports per window, I put together this Python script to automate the process of merging display windows in jconf files (appropriately re-adjusting origins and sizes, etc).  There’s a command-line version that works everywhere and merges all windows into a single one, and for more control, you can use the GUI that lets you select which windows to merge. GUI is built on PySide (the LGPL replacement for PyQt). Cross-platform (command-line requiring Python 2.4, GUI requiring Python 2.5, Qt 4.6+, and PySide), though I have only tested on Linux. Free and open source (Boost Software License 1.0, a very permissive license), feel free to fork and improve!
  • METaL JConf files – Our group at Iowa State University recently got a new virtual reality system, a three-wall CAVE called METaL. We’re using VR Juggler to build applications for it, and in the interest of both easily maintaining configuration files and providing an up-to-date example, I’m hosting the VR Juggler 3.0 jconf files for the system on GitHub. They’re still a bit of a work in progress, but definitely usable – if you have a similar system it might be easiest to fork them on GitHub for easy integration of improvements.
  • VR Juggler 3.0 Windows binaries – Building VR Juggler can be a bit tricky, and building software on Windows can be a bit of a hassle, so you can imagine that combining them isn’t necessarily something you want to be doing every day. The most recent “official” Windows binaries are for the ancient 2.2.1.  I’ve started building from SVN, on the 3.0 branch, and pushing the installed tree to GitHub, so I don’t have to build VR Juggler separately on every machine I use: I can just clone the repo, and pull when I update the build.  Right now I only have the 32-bit builds for VC9, but I anticipate eventually adding other variants. (They’ll be in different branches named accordingly.)

As always with any of my grad school-related work, if you use or build on anything I make available, I’d really appreciate hearing from you. Information on how our work is used is helpful when providing reports and seeking renewal of the funding that makes this possible.


I’m here in Singapore for the IEEE Virtual Reality conference and the SEARIS workshop at which I will be presenting. Flights were long but reasonably comfortable.

One interesting trend I’ve noticed: Like CHI, everyone has either a Mac or ThinkPad (or occasionally a small laptop/netbook of other sort). Lots more Thinkpads per Mac here than CHI, and they are generally tiny and running Win 7.

Quickie: Fix /usr/local permissions for Homebrew on Mac OS X

Homebrew is a great way to get unixy software on your Mac. The default install is to /usr/local, and it fixes the directory permissions so you don’t sudo every time. Every so often, however, the permissions can get a little mangled, usually from some other overzealous installer.

This quick fix is just a small modification to the standard Homebrew installer, removing the parts that actually do the installing: Running this command should fix your Homebrew /usr/local install in no time.

ruby -e "$(curl -fsSL https://gist.github.com/raw/768518/fix_homebrew.rb)"

Install VR Juggler on Ubuntu Linux – from packages!

Just a brief announcement on a broader, more Google-accessible venue: I’ve been creating and maintaining VR Juggler packages for Ubuntu in a PPA repository. If you’re on Lucid (10.04) or Maverick (10.10), you’re in luck: I have both 3.0 and 2.2 versions created, though at the moment you can’t have both of their dev packages installed simultaneously. I created them primarily for my own use and sanity, but I’m happy to share – getting Juggler to build and package nicely in both 32 and 64-bit was a bit of work.  They certainly won’t win awards for high-quality packages, but I’ve been using them for quite a while and they are easier to handle than a mess of locally-installed versions.

Here’s the Launchpad URL for more info:https://launchpad.net/~isu-vrac/+archive/vr-software

Just run these commands to add the source:

sudo add-apt-repository ppa:isu-vrac/vr-software
sudo apt-get update

(or add ppa:isu-vrac/vr-software to your Software Sources control panel)

Then, you can use your preferred package management tool to install: here’s the “install it all” packages in the Ubuntu Software Center, for example. (Once you have the source added, these links should also work: install VR Juggler 2.2 development packages or install VR Juggler 3.0 development packages)

VR Juggler in Ubuntu Software Center


Keep Mac OS X from mangling your Lua code

If you write Lua, you might find yourself trying to type three dots in a row for a function with variable parameters. When doing this recently, I found that it was frustratingly being turned into an ellipse (the “three dots in one character” symbol) despite the fact that my text editor had all the auto-everything turned off.

It turns out that Mac OS X (at least 10.6, might be earlier too) can “helpfully” perform some MS Word-style autocorrections for you. I had a little difficulty finding where, so I thought I’d archive it in spiderable-space here. Here’s how to turn down the offer of help:

  • Open System Preferences, and choose the Language & Text item.

  • Choose the Text tab.
  • Uncheck all undesired corrections.

Building and Installing VR Juggler on Mac OS X

VR Juggler is an open-source virtual reality framework that is very cross-platform compatible.  However, that doesn’t mean it is necessarily easy to install on multiple platforms – there are some pitfalls.  Hopefully this post will help VR Juggler users get it going on their Mac computers.

Homebrew is a great replacement for MacPorts or Fink: it’s a system for installing Unix or Unixy packages on Mac OS X.  It tries to keep things simple and non-duplicated (unlike, for example, MacPorts…).  I’ve created package descriptions (“formulae”) for Brew to install VR Juggler 2.2.x or 3.0 prereleases on the Mac – just follow these steps.  If you’ve already used Homebrew, you can skip the first three steps.  Update instructions are at the bottom.

  • If you haven’t already, install XCode: there should be a somewhat out of date version on your OS X install CD, and you can get an updated version from Apple’s ADC.
  • Install homebrew system-wide in /usr/local – the latest instructions (from the homepage at http://github.com/mxcl/homebrew ) at time of post are:
ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"

(If you want, you can install it elsewhere: I’ll refer you to the brew homepage and wiki for instructions on installing brew elsewhere, and you’ll have to change all instances of /usr/local in these instructions to your chosen install directory.)

  • Install git, update brew, and set it up as a git repo:
cd /usr/local
brew install git
brew update
  • If you’ve already used Homebrew, this is the place where you pick up in the instructions: add my repository as a remote, and merge it.
cd /usr/local
git remote add rpavlik http://github.com/rpavlik/homebrew.git
git fetch rpavlik
git merge rpavlik/master
  • Optional: Edit/create .bash_profile by running this command (or choosing Open Hidden with Fraise)
nano ~/.bash_profile

add these lines toward the top for brew’s sake.

# Mac Homebrew
export PATH=/usr/local/sbin:/usr/local/Library/Contributions/examples:$PATH
export PYTHONPATH="/usr/local/lib/python2.6/site-packages/:$PYTHONPATH"
source `brew --prefix`/Library/Contributions/brew_bash_completion.sh
# Bash completion scripts
if [ -f `brew --prefix`/etc/bash_completion ]; then
 . `brew --prefix`/etc/bash_completion
  • Find out about possible issues with your install through a brew diagnostic command – you may want to act on its recommendations.
brew doctor
  • Install the latest CMake from cmake.org: when it asks where you want to install command line tools to, first run this in a terminal
mkdir -p /usr/local/Cellar/cmake/CMAKEVERSIONGOESHERE/bin
  • Then back in the cmake installer, type:
  • Run this command to point brew to your CMake:
brew link cmake
  • Install any or all of these optional dependencies, if desired – it won’t hurt to install more than necessary, so I’d recommend installing all of them (you can put all the package names on the same brew install command)
brew install vrpn
brew install omniorb
brew install freealut
  • Install your desired version of VR Juggler: either 2.2.x or 3.0.x. Add “–HEAD” to the command to build the latest SVN from that branch instead of the latest release tarball, and add –with-debug if you also want the debug-enabled versions built [new enhancement courtesy of Brandon Newendorp – thanks!].
brew install vrjuggler-2.2
brew install vrjuggler-3.0
  • Go get a snack while this builds – it will take a while, especially if you haven’t installed any brew packages before (since it will compile the common dependencies like boost, etc)
  • When it’s done: you’ll have your desired VR Juggler installed to /usr/local – a message will tell you where the VRJConfig.app bundle is so that you can copy it to /Applications, if you like.
  • If you use OpenSceneGraph for your apps, you can also install it using Homebrew. You may first wish to run:
brew install collada

to install the COLLADA DOM so your osg build can read collada files.  In any case, run:

brew install openscenegraph

and go eat a meal – OSG is a large set of software so it takes a while.  On my MacBook (Santa Rosa/Late 2007), I believe it takes roughly an hour to build.  Don’t worry, Brew build in parallel when possible, so if you have a very fancy machine it will go quickly.  If you want to use the OpenSceneGraph as a framework, instead of “unix-style”, you’ll want to build the XCode projects included with the OpenSceneGraph source instead of using Homebrew.  (Both methods work, it’s just personal preference or potentially some corner cases.)

To update, just run:

brew upgrade

Once you’ve merged from my repository, you’ll have a slightly-patched version of brew that first updates from my repository before updating from the upstream repo.  This makes it so that I have a chance to fix any merge conflicts pre-emptively so you don’t run into them.  If you get a merge conflict, running this command will undo the attempted merge and any uncommitted changes in your homebrew repository (which is safe as long as you aren’t making your own formulas without committing them).

cd /usr/local
git reset --hard

If these instructions aren’t quite clear, please contact me and let me know how I can clarify them – I only have one Mac so I rarely start from scratch setting up a development environment.

[EDIT: 8 Sept 2010 – Fixed the path for installing CMake links, add brew doctor step, add note about OSG as a framework]

[EDIT: 8 Sept 2010 – Add notes about .bash_profile]

[EDIT: 28 Jan 2011 – Made the CMake section clearer and not version-specific, added info about –with-debug flag for VR Juggler formulas]

CHI 2010 – Sessions Attended

Here is an overview of the sessions/courses I attended at CHI 2010 – it was a great conference!  My ability to choose sessions to attend was somewhat constrained by my role as a student volunteer, but I got to attend a large number of interesting sessions and really actually lucked out with the task assignment as an SV.

Most links go to more information on the CHI2010 “advance program.” I’ve marked the papers/sessions I found especially intriguing.





All Week – Posters and Exhibit Hall

Day 1 – Opening Plenary Notes

Here are my very nearly unedited notes from the opening plenary given by Genevieve Bell (Intel), taken on my mobile device…

“CHI has been around for a long time, and you haven’t turned turned the opening talk into either a drinking game or bingo. As an Australian, I found this lacking.”
Ethnography and anthropology.
What are real consumers? They don’t have kids and white furniture, or all stare transfixed with such pleasure as in marketing photos..

Future involves shifts:
Demographic shifts – toward 75pct of people living in cities
and those may mean crises in resources and infrastructure
US avg home 2300-2700 sq.ft, 2.5 people.
Elsewhere goes down to about 1000 and more people.
Women in workforce an accellerating trend.
Global economic crisis has disproportionately affected men.
Companies will have to move beyond just “shrink it, pink it” to make items appeal to women.
People still think of the intrnet as a destination in places – and the idea of “feral” also applies.
“Feral internets”
Percent of internet users that are American from 70 down to ~25: bring different ways of interacting and conceiving of information.

The TV was not a PC with internet waiting to happen: viewership is growing.
Rateyournetworkdiagram.com – like hot or not for networks
Device convergence didn’t happen, and a “simple” network looks a bit messy.
When it breaks it’s not clear what’s broken or who to call.

New anxieties. concern for privacy changing: accept providers having demographics, but terrified that what we are really doing will get out.

Implications for research – future controversial topics:
Religion: Still a very important part of many people’s lives, and technology becoming integrated with it. Church sign with “God answers KNEe-mail”, Vatican has a web site with a link labeled “secret archives”…

Government: clashes between internet time and government time.
Australia took data on government-managed systems, came up with a site called “it’s buggered, mate” and it will become real!

Sex: Poloroids brought sexting to the world long before mobile phones, but institutions get anxious when people think about studying this. And, look beyond just pornography, even though there is precious little HCI research even there.

Sport: It’s a big thing for those not in this room, but less on ACM portal about it than the others together. 40% of US households upgrading to HDTV cited sports looking better as the reason. Not understanding cricket is a social crime.

Etiquette: sign in church that roughly translates to “it would be a blessing if you turned your cellphone off.” We will increasingly have to negotiate how we interact with constant connectivity. We even lack the language to discuss it: our terms like “not connected” imply a social norm that those folks are on the wrong side.

Gender: Lists of best apps for men included “PMS Buddy” (Track up to 5 women!). Best apps for women include “For Aunt Flo” and “iPeriod”. Things worth studying here! What does it means to talk about these things from feminist theory, queer theory points of view?

Day 0, and day 1 begins

Yesterday, some enjoyable SV’ing, and a bit of project work. And today,the big one begins. Waiting for the opening plenary to start, with Coldplay’s “Clocks” jamming in this huge ballroom that nevertheless seems quite full…