A Reflection of Warframe’s New Player Experience After 20 Hours

Warframe is free-to-play online action-adventure video game for various platforms. You play the role of a Tenno (essentially a space ninja/warrior) defending the world against numerous factions. Because the game is free, its revenue stream comes from players purchasing cosmetic items, weapons, and “frames” using a currency called “Platinum”. Such games rely on being engaging for new players because players who play the game are more likely to keep playing and therefore spend money; all of this is relevant from a UX perspective. I reflect some of my experiences that I had as a new player of the game. I originally posted this on the Warframe subreddit.

Hi everyone, I’m a new player and I’d like to report what it’s like as a new player to figure out how Warframe works and how it plays. I thought I’d write about this because I enjoy learning games. I’m also a user experience specialist so this kind of reflection just comes to me.

I wanted to find a new co-op PC game to play with my partner after I was done with Overwatch. We narrowed it down to Warframe (“space ninjas”) and Destiny 2. Eventually we decided on Warframe because posts online comparing the two described Warframe as having more RPG elements, which appealed more to my partner. We’ve both been playing games for a long time, but lean toward RPG and adventure games.

I’d like to highlight the following main stages and “ah-ha” moments for learning Warframe in roughly the order that we discovered them. We’ve been playing for 20 hours of missions (35 hours in the actual game) and have done about 120 missions together. We also know two friends who play and play with them as well; ironically, they actually didn’t introduce us to the game and we found out after playing for about a week and a half that they played. We’re enjoying ourselves, but I did have a few moments when I was like “I think I get what this game is doing” and wanted to stop. I’ll talk about this below.

Here are the main activities I really had to unpack.

  • Basic controls
  • Comprehending the game loop
    • Story and the star chart
  • Motivation and reward
    • Getting Weapons
    • Getting Warframes
  • The social aspects

Basic controls

The game does a pretty good job with the basic controls in the introductory missions. I’m sure that this is pretty familiar to most players, so I won’t go through it too much.

There were a few things that I did not learn from the basic tutorial and had to learn them on my own, or from others:

  • I learned by myself that crouch-slide and jump spamming accelerated your movement a lot. (In videos, I also see people forward jump a lot but I find it harder on my hand than slide-jumping).
  • I learned from a friend (more about friends later) that bullet jumping dramatically improves the distance that you move AND you move in the direction that you face, which includes “up”.
  • It’s much easier to melee than it is to shoot. Your melee does more damage, hits multiple enemies, and requires less aim. My partner realized this early and basically melees everyone. Apparently melee effectiveness goes down significantly later in the game but 20 hours in it’s still pretty effective. Unfortunately, this also made MR1’s test hard because it requires that you use your primary weapon despite the fact that the melee is probably more familiar to the player at that stage.

Comprehending the game loop

What I mean by “game loop” is the series of activities that you do in a sitting. In Warframe, it’s “go on mission”, “collect loot”, “go back to ship”, “upgrade your stuff”. There’s actually a lot to unpack here so I’ll go through it roughly in the order that I experienced it.

Story. Story is one of those things that gets you playing and keeps you motivated. You don’t know that much about the world after the first mission, but there’s enough of a narrative that makes you wonder, “What’s next?” Unfortunately, you figure out pretty quickly was that Warframe feels like it has no story. Now, I think this changes (apparently there are some really interesting story quests later in the game) but we’re 35 hours in game and there isn’t really anything to talk about, story-wise. That doesn’t mean that the game doesn’t have lore – there’s plenty of that that we can see in the Leverian and Nightwave, which are nice touches.

Star Chart. For a new player, Navigation menu is extremely confusing because I literally didn’t know what anything was.

First, you don’t know what the destinations really do. I think we selected Cetus as our first destination and then realized pretty quickly that it was a town. We talked to Konzu and started the mission, but when it dumped us into single-player mode, we panicked and bailed. I think my partner got one-shot by mobs in the Plains of Eternity at night – later we reasoned it was probably Eidolon analyzers. Definitely not a great first impression. A similar thing happened with Fortuna. We went there but the single-player mission destroyed our MR0-ranked rear ends. I think we came back at MR3 to do it and it still killed me two or three times.

Second, there’s a lot of mission types and their purpose isn’t really clear. There’s the Conclave stuff (which isn’t explained), Ghoul purge, Invasions, Scarlet Spear (I still don’t know what this is), there’s some Voids (which the game eventually teaches you), there’s some bonus stuff for skins (we tried one but were too low level and died).

We did eventually figure out how to select missions on the star chart. and selected a few mission types to go on. Our first mission together was a Defense mission against the Grineer. Then we did one against the Corpus, which was actually pretty cool. At some point, we realized that there was a portal to Venus that you had to open up and that it had mission requirements. The game doesn’t tell you this. It would have been nice for the game to give you an initial goal.

Motivation and reward

As a new player, you actually don’t really know what the reward are yet. I think initially, it’s the fast-paced action. Parkour is a lot of fun and you quickly learn that you can fly around levels and kill things really quickly. However, that wears out pretty quickly as a reward in itself since most of the initial levels on Earth and Venus are pretty simple.

The next level to draw you in, then, is getting new stuff to play with. This is where the game can fall short with respect to a new player experience.

Weapons are difficult to understand. Though the game explains that there’s a Market, it doesn’t do a lot to explain what you can buy. It was through some confused exploration that we realized that you generally had to buy blueprints, craft items, and then you’d get to use the weapon. It was also through some exploration that I realized that some weapons (a very small number, actually) could be bought with credits. It does present to you the concept of Platinum early and it’s easy to figure out it that Plat is the “real money” currency.

At Mastery Rank 2, I recall looking at weapons and the only ones being available being the MK1-Strum, the Boltor, and the MK1 fist weapon. I was unfortunately misled by guides on the Internet that said that MK1 weapons were inferior, so I opted not to spend my hard-earned credits on them and instead managed to snag myself a Furis pistol. I also observed quickly that many of the weapons that you already used MK1 versions of (like the Paris and the Bo) couldn’t be crafted until much later in the game (more on this below).

It felt like a significant amount of variety of the game was being locked out. I think we had played for about 2-3 hours and I was actually telling my partner, “I think I understand this game, we can play something else” because I had been using my first Warframe, my first primary weapon, and my first melee weapon for the entire game so far. Imagine playing an FPS shooter and for the first few hours, only having access to one load out. In fact, 122 missions in, my most-used primary weapon is STILL the MK1-Paris (32.1%) and the MK1-Bo (45.6%). It would be a huge improvement in the game if it made it clear how you could acquire new weapons. It improved my interest in the game dramatically when I discovered how to buy a Furis and Braton at MR2 and then even more when I got my second rifle, the Boltor. There are only a few items that are easily craftable before you get to Phobos, which is a pretty limiting factor considering how many hours it takes before you get to that point.

Warframes are REALLY difficult to craft. Often, people say, “Don’t spend Plat on Warframes”. I actually wonder how many players who are brand new spend Plat on Warframes (or quit before reaching Venus) because the game makes it really hard to get Warframes without help.

I’m about 20 hours of missions and I still only have two warframes (Mag and Ember, which I got for free with Twitch Prime). I suspect that I would have quit the game by now if I didn’t get get Ember for free. My partner wouldn’t have been able to get a second warframe if it wasn’t for help from friends.. I think that this is a major gap in the new player experience: the fact that it’s so difficult to get your second Warframe. What about the common recommendations, though?

  • Rhino. Often Rhino is considered the “first” Warframes. While you can get Rhino’s parts from Jackal, you can’t actually craft him until you reach Phobos because he requires Plastids. It took us about 10 hours to get to Phobos.
  • Oberon. To craft Oberon, you require a control module and an Orokin cell. You can’t get a control module until you get to the Void, which, if I recall correctly, is just off of Ceres. That’s even farther than Phobos.
  • Gara. Gara you can get from Plains of Eternity, but the higher-level bounties are challenging (level 30-40) and Gara also requires Orokin cells.

Are you really expected to use your starter Warframe for the first 10 hours of gameplay? For a while, the game was boring because the various missions weren’t really that challenging – it felt like you just either cut down mobs as quickly as possible or that you ran from Point A to Point B as quickly as possible. However, getting different Warframes really changed that and it adds a lot of this “gotta collect them all” aspect in addition to the changes in the basic gameplay that’s a lot of fun.

The social aspects

As with many games of this type, the social aspects saved this. Specifically, the fact that we had friends who could help us probably singlehandedly kept us playing because they were able to provide the game variety that we were looking for by helping us farm for materials.

Our friends who played Warframe weren’t exactly low – something like MR13 and MR17. After my partner mentioned that she was bored of Volt, one of them gifted my partner Octavia, which totally renewed her interest in the game. They also helped us farm Orokin cells and Control modules (both are essential to craft Oberon, which is one of the earlier blueprints you can get), Nova, as well as nano-spores (for weapons). Suddenly, I had a new melee weapon and actual choices for primary weapons and the game opened up dramatically.

Now at this point some people reading are probably like “Duh, it’s an MMORPG, you’re supposed to make friends.” At the same time, very little about the game’s introduction introduces you to the social aspects. Since we were playing two player, we played with each other only and didn’t PUG any missions. The game doesn’t teach you how to use chat. When you get a message from other players in your Inbox, there’s no way to respond. Even if you become aware of other players and trading, it’s hard to become aware of how to ask players for help especially if it’s farming for materials (and many people don’t like asking favors of strangers anyway). Essentially, if you never go to capital cities, it’s possible to go through the entire game without seeing other players.


Warframe is a solid action game with a lot of lore and variety, but it’s buried underneath an overwhelming set of available activities that feel really monotonous unless you either figure it out yourself, or ask someone to teach you. I think that if the game did a slightly better job of making more variety available and introducing new players to the social aspects, it would really smooth out the experience for everyone. Once you get a good sense of how junctions and main story quest work, the player ends up being able to make their own goals and play the game how they want to, but it takes a fair amount of context and comprehension to get to that point. I acquired a mental model of how the game worked mostly through talking with friends and through some experimentation and talking it through with my partner.

I think we’re into it though. I just spent my first real dollars on the game and hopefully will be able to enjoy it for the foreseeable future even though there’s a long way to go to get where everyone else is doing stuff. If you enjoyed reading this and want to say hi, feel free to reach out. My name is “emeraldarcana” also in game. I’m trying to get more warframes now – tomorrow evening, I’ll have Nova and I’m super excited.

Album Release: “Daily Routine” by Irwin

There’s an annual challenge called “National Solo Album Month” that challenges musicians to compose and release a solo album in the month off November. It’s based off of NaNoWriMo, “National Novel Writing Month”. An album is defined as having 29:09 of content (because that’s the shortest album released by a label that they have found).

I did the challenge this month and released my album, “Daily Routine” on Bandcamp. You can listen to it at https://irwink.bandcamp.com/releases!

The album itself is an improvisational album of techno and house beats that focuses on groovy rhythmic patterns, evolving musical textures, and minimal melodies. If you like that kind of stuff, check it out.

How did I make this album?

The album was composed using hardware synthesizers. I primarily used my Eurorack modular synthesizer, a Roland TR-8s drum machine, an Elektron Octatrack performance sampler, and an Elektron Analog Four multitimbral analog synthesizer. I also played melodies on the Linnstrument. For most of the songs, I composed a bassline, some backing tracks, and the drums, and then played them on the sequencer while adding lead melodies with Linnstrument playing a part of the Analog Four. Most of the songs are improvised, so they’re a little unstructured but are meant to convey a mood consistently through the whole song.

Creating a Song in Squarp Instruments Hermod

I created a video to illustrate the use of the Squarp Instruments Hermod Modular Brain. This is a multi-sequence, polyphonic sequencer for Eurorack that interfaces with MIDI, USB, and CV made by the creators of the very popular Pyramid. Check it out!

I also have a more detailed video that goes into how Hermod’s step mode and zoom levels work.

Upgrading the Kilpatrick Carbon Firmware

I recently purchased a Kilpatrick Audio Carbon made by Kilpatrick Audio. The Carbon is a multi-track, multi-step sequencer that controls instruments using MIDI and CV. So far, it’s been fantastic and it’s allowed me to start doing loop-based music live.

I’ve been communicating with the author, Andrew Kilpatrick, about some bugs about the device, and he recently released a new firmware update. He doesn’t have a Mac so he’s not able to test the Carbon’s firmware updating process.

For all of you visiting who have a Carbon that needs updating, here’s the instructions for Mac (they’ll also work on Linux).

Updating the Carbon using dfu-util

The Carbon uses DFU for its firmware updates. There are many DFU utilities out there, but an open-source one that works is called dfu-util, which runs on Mac and Linux. (If you’re using Windows instead, instructions exist on the Kilpatrick Audio firmware site).

Get the DFU program

1. (on macOS) Install home-brew (http://brew.sh). You’ll need Xcode for this (with the command-line tools).
2. (on macOS) Install dfu-util. “brew install dfu-util”

On Linux, the instructions will be different, but will probably involve using your system’s package manager in a similar way.

Get the firmware from Kilpatrick Audio

Download and unzip the firmware from the Kilpatrick Audio firmware updates web site. The latest firmware as of writing is v1.06.

Do the update

Restart Carbon in firmware update mode. To do this:

  1. Connect your Carbon to your computer using USB.
  2. Unplug the power connector.
  3. Hold down the power button.
  4. Plug in the power connector.

The LEDs will be a solid color and the screen will be blank. Sometimes, the LEDs will be different colors. That’s normal.

Open Terminal (macOS) or another command-line window.

In the prompt, type the following to check that the program can see your carbon:

dfu-util —list

Your output will resemble the following:

dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Deducing device DFU version from functional descriptor length
Found Runtime: [05ac:828d] ver=0118, devnum=8, cfg=1, intf=3, path="20-6.3", alt=0, name="UNKNOWN", serial="UNKNOWN"
Found DFU: [0483:df11] ver=2200, devnum=27, cfg=1, intf=0, path="20-4.1.2", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="376837513335"
Found DFU: [0483:df11] ver=2200, devnum=27, cfg=1, intf=0, path="20-4.1.2", alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="376837513335"
Found DFU: [0483:df11] ver=2200, devnum=27, cfg=1, intf=0, path="20-4.1.2", alt=1, name="@Option Bytes  /0x1FFFC000/01*016 e", serial="376837513335"
Found DFU: [0483:df11] ver=2200, devnum=27, cfg=1, intf=0, path="20-4.1.2", alt=0, name="@Internal Flash  /0x08000000/04*016Kg,01*064Kg,07*128Kg", serial=“376837513335"

The Carbon’s device ID is 0483:df11. In this particular case, you want to write to the “alt bank 0”, which is the Carbon’s internal flash.

Install the firmware with the following command:

dfu-util -a 0 -D K66-carbon-1.06-firmware.dfu

You will see output that looks like the following:

dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Match vendor ID from file: 0483
Match product ID from file: df11
Deducing device DFU version from functional descriptor length
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
file contains 1 DFU images
parsing DFU image 1
image for alternate setting 0, (1 elements, total size = 272176)
parsing element 1, address = 0x08000000, size = 272168
Download [=========================] 100%       272168 bytes
Download done.
done parsing DfuSe file

This will take a minute or two to do the transfer.

When it’s done, remove the power from the Carbon, and plug it back in again. Start the power normally. Press SYS (SHIFT-MIDI) to check the firmware version.

If you’re updating from v1.02, the first few things that you’ll notice is a new font (I’m not 100% sold on it honestly) and that the Carbon now takes MIDI input from any channel instead of channel 1. There are also a number of bug fixes.

The Carbon also has a Github page, so if you have bugs to report or suggestions to send about the device, that’s the place to do it.

Enjoy your noodling!

Quickie: Upgrading Windows 8 to Windows 8.1 Problems?

I’ve been using Windows 8 as a dual-boot option on my iMac for a while. When Windows 8.1 came out, I was pretty excited, as Peter Bright’s review on Ars Technica was quite positive about it.

Unfortunately, I was getting errors doing the upgrade it directly from the Microsoft Store, eventually getting Error 0x0073B92 - 0x20009. I was a little stumped about how to get around this.

The solution was actually simple: disconnect all of your USB devices during the installation. (Internet searching seems to indicate that this is related to a problem with a second hard drive).

Sublime Text: Always run a single file in a project no matter what is focused

When I program, I often try to split up my code into modules. This requires that I use different files. However, I also want to run my code from a “main” or a “master” file as well. It’s pretty annoying in Sublime Text, or any text editor, to have to switch to your main file to run your project.

I’ve talked about how to do this in TextMate but how can you pull this off in Sublime Text? Let me show you how.

  1. Create a Sublime Text project for your program. You can do this by using the menu Project > Save Project As…”.
  2. Open the settings for your project using the menu Project > Edit Project.
  3. You’ll get a mostly empty text window. Modify this window to include a build definition, such as the following one for Python:
    • "build_systems": [
          "name": "PyProj",
          "cmd": ["python", "-u", "$file"],
          "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
          "selector": "source.python"
  4. Modify the line with “cmd” and change “$file” to the master file you always want to run. For example, if your main file is called pyproj.py, then change it to pyproj.py.

Add the "build_systems" JSON field in your project settings file, accessible through the Project menu > Edit project.

Add the “build_systems” JSON field in your project settings file, accessible through the Project menu > Edit project.

That’s it! While you’re editing your project settings, you can make other customizations as well as you see fit.

Obviously, this isn’t limited to just setting a file to be run no matter what file you’re focused on. You could use this to add command-line arguments to a single project, to run project-specific scripts for building and testing, or to otherwise customize the way the “Control-B” (Command-B on Mac OS X) works when you are running the project. You can essentially define your own build system on a per-project basis in a project file’s “build_systems” section and use any information in Sublime Text’s build system documentation to do so. Unfortunately, the build system documentation doesn’t really describe this because it’s focused more toward Package development.

For more information about how project settings work, look at Sublime Text’s documentation for build systems and for projects!

The Function (Fn) key is on the full-size Apple Keyboard

Are you one of those Mac users who generally turns on the F1, F2, keys as standard function keys option in System Preferences? If you do that, then if you want to use your keyboard to control the volume or the screen brightness, you need to find the Function (or Fn) key. (Alternatively, if you don’t turn it on then you need the Fn key to simulate F1, F2, and so forth keypresses).

Do you check off the box in System Preferences > Keyboard that makes the F keys behave as standard function keys?

Do you check off the box in System Preferences > Keyboard that makes the F keys behave as standard function keys? I usually do. I think I only ever use the Volume Control function on the keyboard anyway.

On the laptop and the wireless keyboards, Apple usually puts the Fn key on the lower-left hand corner, next to the “Control” key. But it’s not there on the full-sized Apple Keyboard with the numeric keypad!

Or is it?

The Fn Key on an Apple Keyboard is next to the home and above the delete key in the area above the arrow keys.

Ha, it’s in the middle of the keyboard between the letters and the numeric keypad, right below the F13 key and above the Delete key!

Eject All of your Removable Mac OS X Disks Quickly!

Are you always using hard disks and USB keys in your Mac? Getting annoyed with having to go to the Finder, scrolling down in the sidebar, and then ejecting these disks before you can unplug all of these devices to move your computer? Or, maybe you just pull out the USB and let Mac OS X complain at you about how the disk was removed without you ejecting it first?

Try using this AppleScript along with a launcher application like QuickSilver to save time and eject all of your disks with one command! A launcher application is basically a quick way to start up applications – you press a keystroke like “Ctrl-Space” and then begin typing, and QuickSilver will find applications that match what you’ve typed. Ejecting disks is quite literally at your fingertips.

  1. Open up the AppleScript Editor (it’s in /Applications/Utilities)
  2. Copy and paste the following code:
      tell application "Finder"
        eject the disks
        display dialog "Successfully ejected disks." buttons {"Close"} default button "Close"
      end tell
    on error
      display dialog "Unable to eject all disks." buttons {"Close"} default button "Close"
    end try

    AppleScript Editor with the Eject All script

    AppleScript Editor with the Eject All script.
  3. Save it into a place you’ll find it later. I used ~/Library/Scripts and called the script “EjectAll.scpt”.
  4. Compile it!

Now, if you double-click on that script, it’ll automatically eject all of your media and give you a dialog box to let you know when it’s finished.


QuickSilver Catalog Preferences Window

In QuickSilver, I added the ~/Library/Scripts directory to my catalog by opening the QuickSilver Preferences, clicking on Catalog, then going to Scripts in the sidebar. I then ensured that “Scripts (User)” was checked.

Then, you can relaunch QuickSilver, press its hotkey (Ctrl-Space by default), and type “EjectAll” and press enter to run the script. It’ll automatically eject all of your media and then you can pull out all of your plugged-in devices without worry!

Do People Seek Information Like Animals Forage for Food? An Introduction to Information Foraging Theory

Much of my research at Oregon State University examines debugging using a lens called Information Foraging Theory. I’ve written a few posts on this topic but I haven’t really given a good overview of what Information Foraging Theory is and what it provides for software engineering.

The theory, in a nutshell, is a theory of human behaviour that describes how people forage for information. They are theorized to forage in a way to provide maximum benefit for minimum value and to make decisions based on input from the environment that affects this cost/benefit ratio. This theory is applicable to software engineering because software engineering is a very information-seeking intensive activity. People spend a lot of time looking for things—whether it’s “What does this variable do?” down to, “Where can I start investigating this problem?”

Another reason why this theory is valuable in software engineering is because software engineering research often is built on ideas but not necessarily on underlying theories. Information foraging theory provides a theoretical framework that can help consolidate previous results and provide not only an explanation for why previous tools and findings have worked in the past, but also can make predictions for how people may behave in the future.

Now that we have an idea of what it is and why it’s relevant to software engineering, let’s dive into what information foraging is. Much of this post is adapted from material that appears in An Information Foraging Theory Perspective on Tools for Debugging, Refactoring, and Reuse Tasks that appears in the ACM Transactions on Software Engineering and Methodology (TOSEM), 2013. In another post, we’ll talk about how it relates to software engineering research.

Information Foraging Theory: What it is

Information Foraging Theory was originally proposed by Peter Pirolli and Stuart Card at what was then Xerox PARC to explain how individuals search the web for information. The idea was inspired by ecology’s Optimal Foraging Theory which is the idea that foraging animals attempt to maximize their energy intake (by finding food) over the time required to find that food.

Constructs and Theory

In Information Foraging Theory, the human, called a predator, is looking for information in an environment, like the web. A predator can seek information from an information source, called an information patch, and a topology is made up of many patches. Many patches make up an information topology. Patches are connected to each other through links—each link requires a certain cost to go from one patch to another. Within each patch, there are information features. These features might be words or sentences on a screen, graphics and pictures, icons, even colours and shapes.

A rounded, shaded rectangle contains hexagons with numbers inside them. Some of these hexagons are associated with outgoing links to other shaded rectangles that each have their own hexagons with numbers in them. The links have a number on top of them representing the cost of traversing the link.

Information patches (shaded boxes) in an information topology. In each information patch, there are features (hexagons) with a numerical value. Some of these features are attached to links (dashed line). Each link navigates to a different patch and has a cost.

The predator has an information goal in mind and want to seek information that satisfies that goal. This predator forages through the information topology seeking prey, which are information features that are related to the predator’s goal.

The activity of getting at information has a cost (usually time) but consuming information from a source also has an associated value (how relevant or important the information is). After consuming some amount of information (which is called prey), the predator may decide that it’s no longer worth the predator’s time to continue processing that patch and the predator navigates away from the patch to a new one that is considered more valuable.

Some information features are connected to links. In web pages, links are usually located in particular places, are coloured differently, and are sometimes underlined when you mouse over them. These features are called cues. A predator can use these cues to try to predict the value of the information on the other side of a link.

Three-panel representation of a developer looking at a screen of information. In the first panel, the developer is staring at a panel at the top of the screen. In the second panel, the developer is choosing to move to a new part of the same screen. In the third panel, the developer has chosen an alternate route of changing the view to look at an entirely new screen.

A developer decides whether to continue foraging in the same screen of information, or whether to refresh a view (which has a cost) and getting new information.

So, a developer who is foraging for information has to make a decision whether to stay within the current patch and continue processing the information in it or to access a different patch and process information from there. To make the optimal decision, the developer wants highest value information for the lowest cost!

If we decide to use math to represent this relationship, it looks like this:

A mathematical formula: Predator's desired choice equals max(V over C).

The predator wants to maximize value V of processing information and minimize the cost C of travelling to find information.

This is pretty basic so far—everyone wants to maximize their value and get the lowest cost! What is really interesting about this theory is what people’s perceptions of high value and low cost are.

Perceptions and Scents

Even though a predator wants to maximize value and get low cost, one of the main issues is that predators don’t know everything. They only know what they can see currently. Thus, predators perceive an expected value and an expected cost whenever they are processing information features from a patch, including the cues that indicate if a patch is worth leaving.

Since most patches have multiple cues, this means that the predator has to make a number of estimations, based on the cue (and possibly other factors) about whether to leave the patch. This is called information scent. Scent is often represented in practice by measures of textual similarity. Scent is also influenced by the amount of attention—for example, how big the cue’s visual size is, or the position of the cue.

Summary of Information Foraging Theory Constructs

That’s a lot of constructs. Fortunately, Fleming et al. (in an article that I helped write) built a pretty handy table to remind everyone what all of these concepts are.

Construct Description
Topology Collection of information patches and links between those patches within a particular information environment
Information patch Region in the topology that contain information features
Links L Traversable arcs between patches
Information features Elements of the environment that the predator can process to gain knowledge
Cues Set of information features associated with a particular link
Predator Person in search of information
Information goal Set of information features that the predator wants to find
Prey An individual feature in the goal set
Information scent Given a link with an associated cue, the predator’s estimation of the probability that traversing the link will lead to prey
Attention Amount of attention that a predator pays to a particular cue
Information value V Benefit of processed information to the predator
Interaction cost C Value that the predator anticipates gaining through a particular course of action (e.g., following a particular link)
Expected value E(V) Value that the predator anticipates gaining through a particular course of action (e.g., following a particular link)
Expected cost E(C) Cost that the predator anticipates incurring in following of a particular course of action

IFT’s Key Constructs, adapted from Fleming et al. 2013, An Information Foraging Theory Perspective on Tools for Debugging, Refactoring, and Reuse Tasks, ACM Transactions on Software Engineering and Methodology.

Predictions and Validations

There’s a lot of scientific work that has designed mathematical models of information foraging theory in the web domain. Pirolli and Card, 1999 investigated models to predict how people surf the web; this work was further augmented by incorporationg scent Chi et al. 2000, Chi et al. 2001.

Information foraging theory has also since been used to investigate collaborative search on the web, as well as social media tagging.

Next time: Information Foraging Theory in Software Engineering

Now that we have an idea of what information foraging theory is, I will present an overview next time about how this theory’s been applied in software engineering. So far, information foraging theory has been applied primarily to debugging tasks. Margaret Burnett has been leading the charge in this direction, but the concept is beginning to take hold in other areas of software engineering. Nan Niu, for instance, recently published at ICSE a requirements engineering paper on traceability using constructs from information foraging theory.

Stay tuned for the next part in this series!

Programming in the console with GNU Screen and vim

When I program, I use a text editor. Now, even though I recently bought Sublime Text (and I’ll probably do a post on that later), I still use vi a lot – specifically, vim. I also occasionally used GNU screen (mostly for managing remote IRC sessions with the irssi client).

So why use the console to program? Well, the main reason is that typing in the keyboard and not using the mouse is faster if your keyboard skills are good. Given the quality of most laptop trackpads, getting away from the need to use the mouse is actually something of a relief sometimes. The second reason to be familiar with the console is if you’re logging in to a remote session, you often don’t have a mouse available to you at all.

The learning curve is quite steep for console applications, but once you get familiar with them you can get your editing tasks done very quickly because everything’s quite literally right at your fingertips.

Screen: Access Terminal Applications All The Time, Anywhere You Want

GNU Screen is a terminal emulator that’s available on most flavours of Unix-like operating systems, including Linux, BSD, and Mac OS X. Screen runs inside a shell. I think the “killer feature” of screen is the fact that screen is persistent, so you can essentially make your terminal applications run all the time, from anywhere you want.

A terminal window that has screen running inside it.

A typical screen session

What this means is that if you log into a remote machine, and use “screen”, you can start commands that you expect to run for a long time, close the SSH window, and then log back in and resume what you were doing. Everything will be chugging along just as you had it. It’s especially useful for applications that need to run in the background for a long time, like IRC windows or really, really long compilations or analysis.

Another feature of screen is the fact that it has “tabs”, or multiple windows within screen. You can then run multiple terminal programs in the same screen session, resuming them when you want.

A Basic Screen Workflow

To use screen, open a terminal window and then type screen. You will get a splash screen, but then you will be kicked out into what is essentially a shell. From here, you can basically do everything you normally would in a console.

Let’s say you want a new console to work in – a new “tab”, so to speak. In screen, press Control-a, let go of control, then c (c for create). This will create a new console for you to work in. You now have two consoles!

To switch between these consoles, use Control-a + n (n for next) and Control-a + p (p for previous). Try this now: Control-a c, Control-a n, Control-a p.

In screen, every command is preceded by a “Control-a”. It’s kind of the secret shortcut in the program, it’s often abbreviated, so Control-a and a (which means to go to the beginning of the current line) is often written as C-a a.

Let’s say you’re doing a lot of work in screen and now you need to log out, but you want to keep all of your work active. This is a “detach”. If you want to “detach” a screen and do other things in your original shell, you can do that with C-a d. If you’re working in a windowed environment, if you close the program that screen is running in, it’ll also detach for you.

Later that day, you want to log back in to the machine and resume your work. To “attach” a screen, type screen -R -D. That finds a screen for you, detaches it from other consoles if necessary, and resumes it.

The workflow for screen is pretty simple overall: you basically attach a screen when you start, then you create new windows, and detach when you’re done (or if you’re like me, you’ll just lock your computer and reattach it whenever you get around to it from whereever).

I find that using screen in conjunction with vi is extremely useful: you edit it one screen session, then compile/run/test in another.

For more information, take a look at this handy screen command reference.

Making Screen Look Pretty and Useful

You’ll notice that screen on the surface is pretty minimal. However, there are a lot of features built in that make it quite handy as a terminal emulator.

It’s possible to list the windows in your screen at the bottom of the terminal. You can see which one you’re currently working on. You can list the hostname, the current time, and so forth. With a little bit of work, you can make a very simple statusbar that will increase the usability of screen significantly.

To do this, first edit the .screenrc file in your home directory. Then, add the following lines:

hardstatus on
hardstatus alwayslastline
hardstatus string "%{.kw}%-w%{= kR}(%{r}%n %t%{-}%{= kR})%?%{= .kw}%+w%? %{.kw}%=%c %d/%m/%Y" #B&W & date&time

I won’t step through the syntax in its entirety (it’s very cryptic and confusing), but you’ll end up with a handy listing of the current screen windows in the session with the current one visible in red.

I followed the syntax on the GNU Screen manual to customize the string to my liking. %{.kw} colours the string with a black background and white text…. %-w lists all of the windows in screen up to, but not including your current session, %{= kR} makes the next section black and red, ( is a parentheses, %n is the number of the current window, and so forth. It takes a bit of starting at to understand, but it’s not too difficult to customize to your linking.

Vim: Navigate your Documents in an Instant

Vi is a text editor that originated in the mid 70s. One of the most popular modern incarnations is Vi Improved (vim). One of the most powerful features of Vim is the speed at which you can navigate through your documents. You can immediately jump to lines, delete a range of lines, move forward four spaces (or four words), search for words easily, and more, without your hands leaving the keyboard. I use it for much of my small-scale programming work even though I like my GUI-based text editors.

To launch it, open a text editor and type vi.

Configuring vim

I’m really not that much of a vim power user; my .vimrc file is really simple compared to some people who live in vim full-time. I like navigating code in vim and I use it for most of my console-based editing but if I am working on large, multi-project files I end up using a text editor like Sublime Text instead.

Regardless, it’s nice to have a decently usable set of vim defaults. Here’s mine:

syntax on
set number
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

In this setup, I turn on syntax highlighting, print numbers on the side (considering how dependent vim is on navigating by line numbers, this is essential), I turn on auto-indentation, set the tab size and indentation sizes to 4, and expand tabs to spaces.

A swift introduction to using vi

vim is pretty intimidating to use, because it uses multiple modes. The default mode is a “navigation” mode where you can move the cursor around, and then there’s a “line editor” mode where you actually modify the text on the screen. There’s also a “command” mode where you enter custom commands, too.

The most important command in vi

If you don’t know anything else about vi, learn this:

ESC :q!

Press the escape key, press colon, press q, then press !. This exits the program with no changes! If you have absolutely no idea how to do anything, you can at least get back out to the console.

Related but important as well:

ESC :wq

Press the escape key, press colon, press w, then press q.

This writes the current file, then quits the program. Basically, it’s a “save and quit”.


When you start vim, you’re always in navigation mode. You can navigate using the h, j, k, and l keys. These correspond to left, down, up, and right respectively (this was so ingrained into me that I had to actually start vim to check the directions). One reason why this is great is because the controls are on the home row, so navigating in vi is pretty fast.

If you want to jump to a line, you enter the line number and press G. So going to the first line of a file is 1 G whereas going to line 23 is 23 G.

You can move multiple lines and characters up, left, down, and right as well. 3 h moves three characters left. 5 j moves five lines down.


i to enter “insert” mode. You can then type to enter characters at the current cursor position. You’ll see -- INSERT-- at the bottom of your screen. To stop editing, press Escape.

There are many variations of insert in vi to help people insert things really, really quickly. I (capital I, vi is case-sensitive) inserts at the beginning of the current line, A inserts at the end of the current line, o inserts a new line before the current line, O inserts a new line after the current line. You can even combine these with numbers and the directional hjkl keys to insert multiple lines. That’s probably too much information.

You can also delete quickly vi as well. x is the basic “delete one character”. dd deletes a line.

Finally, u undoes the last command, so if you find yourself deleting the wrong lines, hit u repeatedly.


I hope this serves as a brief introduction to vim and screen for most people. Anyone with a Unix-like computer and the need to write text or markup should consider looking into these kinds of programs because they increase the flexibility of what you can do.