Segmentation Fault during vkCreateGraphicsPipelines
Improving your Laser Workflow
Modifying the DaVinci 3D Printer


XYZPrinting puts out a nice printer “DaVinci” with an enclosed build platform (helps immensely with build quality). Unfortunately the software that comes with it is abusive to the end-user, but we can put in our own stack! Caveat: the ABS spools that the company sells (high-quality product, by the way) cause the machine to destroy itself if you run the machine past the end of the spool… which wouldn’t happen if one just used their software. So long as you don’t run the machine while you sleep, I’ve run out two spools without too many problems.

The DaVinci is designed to plug in via USB so the user can send their files over for printing. The software that ships with the printer also uses this interface to update the firmware of the printer, which may or may not be in the user’s interest. Since we’re going to use our own software stack, we’ll just ignore the USB interface.
Block the USB port so noone foolishly plugs the machine into a computer
Pictured: Signal to users that this printer should never be plugged in by USB.

This printer is basically a reprap clone, and will run slightly modified gcode that standard tools (such as Slic3r [settings file]) can produce. If the factory-installed firmware is old enough, you can remove the SD card from the control board, overwrite one of the three demo prints, and use the “Build Sample” interface from the menu on the front of the machine to make arbitrary prints.
Removing a bit of plastic from the hinge makes it easier to remove the back access panel
Pictured: A coping saw removes a small amount of plastic from the hinge.

After opening the back access panel and removing all of the screws, the SD card can be removed
Pictured: The stock SD Card is accessible after removing all screws (Torx T10) from the control board.

Replace the SD Card with an SD Card extender
Pictured: An “SD Card extender” is installed to make the SD Card easier to acccess.

Continue reading...
Headless Rendered OpenGL Scenes


Running the renderer

Output of the headless renderer. The stanford rabbit.

Recent versions of PyOpenGL (>3.0.2) have support for software rendering using OSMesa. This makes rendering with OpenGL on a headless node much easier!

Continue reading...
New LF Hardware, Commodity Webcams
Projected Homography


Bouncing the calibration sequence off a mirror

This project’s aim is to replicate the results of J. Lee’s projective homography demonstration (citation at bottom).

The original project used costly fiber optic hardware to input a binary positional argument to each of four light sensors (each corner of a rectangular surface, later extended to arbitrary surfaces) via a projector that shows a series of calibration images a.k.a “structured light”, “gray-coded binary” etc.

The approach for this project will be:

Continue reading...
Review of TUIC: Enabling Tangible Interaction on Capacitive Multi-touch Display

Download: Review (100K)
LaTeX Source Files (60K)

I reviewed “TUIC: Enabling Tangible Interaction on Capacitive Multi-touch Displays” (citation below) for my course on human-computer interaction.

TUIC is a method for providing tangible input to unmodified capacitive-touch screens by simulating finger-touch events. In my review, I list the advantages and disadvantages of the technology as reported in the paper, then provide some possible improvements.

N. Yu, L. Chan, S. Lau, S. Tsai, I. Hsiao, D. Tsai, L. Cheng, F. Hsiao, M.Y. Chen, P. Huang, and Y. Hung. TUIC: Enabling Tangible Interaction on Capacitive Multi-touch Display. Proceedings of ACM CHI. 2011.
Original Paper
ACM Digital Library

IASTED Technology for Education and Learning (TEL) 2013

The Virtual Cell, from

I presented my paper: The Design of Multiplayer Simulations in Online Game-Based Learning at the TEL 2013 Conference in Los Angeles, CA (Marina del Ray) on 12 November 2013.


Deciding to break away from the usual, I attended the Computational Neuroscience conference COSYNE 2013 in Salt Lake City, UT. The take-aways that were the most compelling for me:

LFManip in Your Browser


Here, a version of LFmanip that doesn’t require an executable! As described in the Intel proposal.

Seminar Presentation: Intelligent Systems
Wheat Information Project (WHIP)

Live site:

Sometime during March 2011, I was asked if I could so some work on a web view of NDSU’s varietal trial publications, which are currently sent out yearly to farmers and available as PDFs. I threw together a demo of search results with some jQuery polish using static data, and we were off!

Like all great projects, we needed some data entry. We hired a student to do this data entry (copying rows of numbers from PDFs), bullet dodged. Now that we were actually using a database, I tried to rope in our department’s systems administrator, but he wisely resisted. He did highly recommend the Django project (Python), and that’s how our framework was chosen. Since we couldn’t get the sysadmin, we hired an additional web developer, and later an artist.

After some steady progess, and talks with the administrators of, we were ready to put the site up live. By this point, the other developers had finished their tasks and gone back to school, and I was doing the work during my off-hours.

After a bit, we decided to tweak the search results a bit, but found the legacy code (only 1-year old!) to be getting in the way. Since summer (2012) was approaching, we decided to hire a handful of undergraduates to help with the polish and the rewrite of the search result backends.

With the fall semester underway, we’re back to a sole developer, and performing a few bug fixes now and again, with the exception of a new method for calculating our LSD results, using R behind-the-scenes as we orignally intended… turns out the Python LSD I wrote wasn’t as robust as we’d like.


erfinv (erf, erfc) in Javascript

Download: Report (1M)
Code (6K)
IJITCS Paper (300K)

Update 21 Apr 2013: We’ve been published in the International Journal of Information Technology and Computer Science (IJITCS)!

Juan Li, Justin Anderson, Matti Kariluoma, Kailash Joshi, Prateek Rajan, Pubudu Wijeyaratne,”iText – SMS-based Web Services for Low-end Cell Phones”, IJITCS, vol.5, no.5, pp.22-28, 2013.DOI: 10.5815/ijitcs.2013.05.03

Also available on github :

For my computer networks class, I convinced our group to do a project involving the SMS protocol. We agreed to do some sort of SMS service, where you’d message a particular number or email address (not obvious that you can message an email address!) using a small command language, and access web services such as email, calender, etc.

We ended up with web search and email (through google’s OpenAuth and a registration website we cooked up), and managed to do a demo live in class during our report. We used a Nokia N900 and two webservers, which aren’t live anymore unfortunately, shit’s expensive.

Unipolar, Optoisolated Stepper Driver

Download: PCB (svg) (300K)
Arduino Code (3K)

Schematic of the unipolar optoisolated stepper driver

Assembled PCB of the unipolar optoisolated stepper driver

Pictured: An optoisolated (the computer is separated from the motor’s power supply by an air gap. The control signals are transmitted over a LED / photodiode pair) unipolar stepper driver.

Continue reading...
Seminar Presentation: Educational Media
Intel Proposal
Least Significant Difference (LSD) in Python
RenameAll.exe in Python
Wireless DDR Pad for the PS3
An Overdrive Circuit
MICS 2011
Laser Overdrive
cURL + gzip (Beating a Dead Horse)
Sidetrack: Edge-finding and Line Representations
Software Testing, A Story
Mill Resurrection
A Simple Equalization Circuit
lfmanip with Threading
Cardboard Book Scanner

Dan and I tried to build a cheap book scanner. Enjoy the Cardboard Book Scanner.

A book scanner made of cardboard and duct tape

Next Steps - lfmanip
JavaMOO, javamoo-legacy
A Simple Game Client
A Salaryman
OpenGL and libjpeg: Using Software Libraries in C
Making of lftextures
DIY Camera Array Parts 1 and 2 Up

Dan and I have just put the finishing touches on two new Instructables:

First, a primer on Computational Photography: Computational Photography Primer
Second, a quick tutorial on using a single camera to make a refocusable image: Using one Camera to Make Refocusable Pictures

A plenoptic camera using one camera

Continue reading...
Using Your Own Images in lftextures
Introducing lftextures
About - Contact