David McCallum's Stash

Here, you can find fun and useful software, libraries and documents created by Dave. Dave is a graduate of computer science at the University of Manitoba who likes networking, mobile robotics, and ATVs. Current projects include stereo 3D programming, Dasyne, and a tele-operated vehicle unimaginatively called the Telebot. In his spare time he creates simple websites, and refers to himself in the third person.



Programming Libraries





Xing-Dong Yang, Edward Mak, David C. McCallum, Pourang Irani, Xiang Cao, and Shahram Izadi. 2010. LensMouse: augmenting the mouse with an interactive touch display. In Proceedings of the 28th international conference on Human factors in computing systems (CHI '10), 2431-2440.


David C. McCallum and Pourang Irani. 2009. ARC-Pad: absolute+relative cursor positioning for large displays with a mobile touchscreen. In Proceedings of the 22nd Annual ACM Symposium on User Interface Software and Technology (UIST '09), 153-156.


David C. McCallum, Edward Mak, Pourang Irani and Sriram Subramanian. 2009. PressureText: Pressure Input for Mobile Phone Text Entry. In Proceedings of the 27th International Conference Extended Abstracts on Human Factors in Computing Systems (CHI EA '09), 4519-4524.


My computer science master's thesis for efficient cursor control on large displays. I demonstrate a system called ARC-Pad 2 that does not follow Fitts' law, and is just as fast at selecting small distant targets as big, nearby ones. It was also faster and less error-prone than existing alternatives (laser pointer, air mouse) even for nearby targets.


W. McGrath, B. Bowman, D. McCallum, J.-D. Hincapie-Ramos, N. Elmqvist, P. Irani. Branch-Explore-Merge: Facilitating Real-Time Revision Control in Collaborative Visual Exploration. In Proceedings of the ACM Conference on Interactive Tabletops and Surfaces, to appear, 2012.

Programming Libraries


Dasyne is a high-performance networking library for C++. It builds on top of Boost::ASIO, making it efficient, scalable and cross-platform. Dasyne provides an object oriented, event-based API with a focus on simplicity and ease of use.

Features include:

Dasyne120.tar.gz (465 KB)
Dasyne120.zip (330 KB)
Online Manual

Older versions of this library


QStreamer provides a very simple webcam-capture API. It is integrated into the Qt framework, and emits a signal whenever a new image is available. QStreamer uses xawtv's streamer program to retrieve webcam images, which is only available under Linux. The streamer program normally outputs the images to hard drive, but QStreamer re-directs them to RAM.

QStreamer.tar.gz (5.2 KB) QStreamer 1.00, for Linux.
Online Manual


MathHelper is a library for 3D transformation and rotation. It includes quaternions, rotation matrices, vectors planes and more. It doesn't assume much math background, and has a gentle introduction into how 3D rotation works. MathHelper is a C++ library, and compiles in Visual Studio and Linux g++.

MathHelper.tar.gz (486 KB)
MathHelper.zip (504 KB)
Online Manual



A graphical telnet client for playing Nethack online. EbonHack includes graphics for most creatures, items and dungeon features, and drop down menus for in-game commands. Works in Windows and Linux.

Note: if graphics are being displayed at inappropriate times, use the Home key to toggle graphics mode on and off. DEC graphics mode should be disabled.

ebonhack130a.zip (20.0 MB) EbonHack 1.30a, with Windows executable. NEW! Now, with 100% more actually works!!
ebonhack130.tar.gz (4.0 MB) EbonHack 1.30, source code only.
Older versions


A simple networked paint program. Up to eight users can connect to a session, and collaborate on a drawing in real time. The bandwidth requirements for clients is modest, and dial-up users should be able to join sessions without problems. Hosting a session requires you to upload 3 Kbps per client, and requires broadband if you intend to have more than one client connected.

Type enter to chat with your fellow artists.

fnpaint121.zip (2.4 MB)

Known Bugs: some users have reported a getnameinfo error when they attempt to connect to a session.

Age of Invasion

A real-time strategy game, with a view from the side rather than the top. Comes complete with a race editor and three pre-created races. Age of Invasion was originally written with DJGPP under MS-DOS 6.22. It was later ported to Windows 98 SE, and development was finished with Dev-Cpp. The graphics, timers and input were implemented using the Allegro library. Development of this game was completed in 2003, with the exception of multiplayer.

Known Issues: occasional crashes when playing the Lake Placid and Spider Cavern maps.

Age of Invasion Original Web Page, left for amusement value.
Screen Shots
Invasion080.zip (3.02 MB)


The TeleBot

TeleBot Mark 3

A brand new TeleBot! It boasts four-wheel drive, gobs of power, a pan/tilt mechanism for the camera, and an audio feed with Skype. This beast weighs in at 11 kg.

Pictures and Video

TeleBot Mark 2

We finished water-proofing the Telebot, and took it for a spin around the yard. It handled fairly well with a video feed of 3.5 to 5.5 frames per second.

Outdoor Pictures

TeleBot Mark 1

A mobile robot. It has a Mini-ITX motherboard that takes input from a webcam, and transmits it over a wireless network. Useful for exploring your neighbourhood from the comfort of your computer room. Also it's great fun to drive.

Some webcam pictures from the Telebot's first trial run.

R Commander Tutorial

A short tutorial on data analysis with R Commander. R_Commander.pdf

Programming Resources


You can contact me with bugs, feature requests or anything else at dmccallum9@gmail.com

Valid XHTML 1.0 Strict