About Projects Publications Resume )> Christopher R. Mitchell
============================================== )> ====
Current and Past Projects: Overview 
In the sections below, you can find general overviews of several of my projects, as well as links to the projects' homepages or sites. I have been programming graphing calculators in BASIC and assembly for over eleven years, and in the past eight years developed my skills at web and computer applications. If you have comments or questions on any of my completed or pending projects, you can reach me at my website, http://www.cemetech.net or via the email address listed on the Resumé page. A full listing of my TI calculator programming projects can be found on my ticalc.org author profile for my programming alias, Kerm Martian. The projects detailed in this page are listed to the right.

Other selected projects are on hold or have not been sufficiently documented yet. These include, in no particular order:

Other/Undocumented Academic:
  • A distributed filesystem prototype based on the Frangipani model, including distinct extents and lock servers, coherent lock and extents caching, replicated lock servers, and more.
  • Several Natural Language Processing (NLP) projects other than Simms AI. One implements forms of the Rocchio and KNN algorithms for document categorization in a corpus, and achieved 80% to 90% accuracy on a set of small training and testing corpora. A second project implements a novel method of associating similar articles in Wikipedia, examining both respective full article texts and the subset of words contained in internal links. This latter project demonstrated that full text similarity generates high-accuracy lists of similar articles as verified by human volunteers, and that both methods produce coherent results at least as meaningful as the existing internal links in each article.
  • Several Operating Systems-related programs written in C for ECE 357, Operating Systems. Early projects included piper, a program to concatenate input files to a pager such as `more`, Doors TS, a simple shell including an interpreter ability, accepting arguments and redirection (but not piping), a pair of network programs to perform file I/O over TCP, and a rudimentary IRC-like chat server and client. Later projects focused more closely on the operating system itself, including a time-slicing preemptive scheduler and a FIFO implementation demonstrating multi-threaded access techniques such as spinlocks and mutexes.
  • kcc, a C-language compiler built using Flex, Bison, and C. It compiles to x86 assembly language that can then be assembled with the Unix 'cc' program.

Other/Undocumented Hardware/Design:
  • A system to generate floppy drive music from a TI-83+ graphing calculator, documented with diagrams, pictures, and videos.
  • Clove, the Cemetech Dataglove, with a constructed and working prototype, was on hold until summer 2008, when the project advanced to a published Clove 2 prototype (below). Some information and a few pictures of the first Clove 1 design are available on the Cemetech Forum. A third revision, Clove 3, is now under construction.
  • CALCnet, CALCnet2, and globalCALCnet (gCn), a set of projects to link graphing calculators together in local- and wide-area networks. The original whitepaper for a hierarchical network was superceded by later designs for a peered network architecture, which has subsequently been successfully implemented but incompletely debugged until September 2010. A fully-functional implementation, CALCnet2.2, is detailed below.
  • The Red Edition, a theoretical calculator/PDA device I designed for fun. I have constructed original hand sketches and AutoDesk VIZ renderings made for my drafting class, CS102.
  • Design of a private train car/locomotive called CPRR1, which has been realized in a CAD model for an AutoCAD class. A full technical report including renderings is available.

Other/Undocumented Software:
  • Programs and games for the Casio Prizm color-screen SH3-based graphing calculator, including Tetrizm 1.0, a Tetris clone; Obliterate, a scorched-earth/tank game, and Graph3DP, a 3D graphing utility.
  • SAX, an AJAX chat widget for phpBB fora. Screenshots and information in the Cemetech archives. I have also written saxjax, a Python-language bot that connects Cemetech's version of SAX with #cemetech on the IRC network EFNet. It includes chat bridging, post notifications, curse and color censoring and disciplining, and twitter integration.
  • Multiplicity, a massively-multiplayer world-construction game that I have planned in several forms but never fully built. A few samples pieces can be seen at http://multiplicity.cemetech.net/ and http://multiplicity.cemetech.net/explore.php.
  • Cemetech6, a completed sixth design of my website. It can be viewed at http://www.cemetech.net, and was written with both functionality and visual impact in mind. This redesign reorganizes the site for easier navigation, improves the projects section to make it easier to update including an administrative backend GUI, and more robust archives.
  • Numerous mods and scripts for the multiplayer LEGO design game Blockland as a member of the TBM team. A new game, called FreeBuild/The Builders' Game, is currently under development by members of my website.
  • An arbitrary-precision calculator written in MIPS assembly, capable of multiplication, addition, and subtraction.
  • wordNet, an attempt to model the conceptual linkages within the internet by correlating url links between websites with common keywords and phrases. Contained a search feature and a mapping tool that generated a nightly image displaying all data in the system's memory as a color-coded linked map. For this project I created a PHP spider to crawl sites, and designed a system to spawn and kill spiders to balance load with speed of indexing.
  • A python tool for z80 Assembly programming called BranchMap that creates a simplified, intuitive view of program flow to streamline the development and debugging process. Stack depth and call structure are visually displayed within a simplified view of calls, jumps, and labels; the program will warn of possible stack corruption such as returning from a function with the stack at a different depth than when a function was called. BranchMap can output Postscript or PDF-formatted documents. It was featured on ticalc.org; screenshots can be found in the Cemetech archives
  • A relatively simple drum mode solver/simulator in Matlab that uses the numerical Laplacian to model the behavior of a tensioned membrane.
  • Extensive graphical design in the GIMP, including several technique tutorials and logos for almost all my projects.
CALCnet 2.2 (Cn2.2) 
CALCnet 2.2 is a robust networking protocol and driver for two-wire devices, designed especially with timing for 6MHz TI graphing calculators. It is the culmination of a long-running, frequently inactive project of mine to allow more than two calculators to connect at once. The current working iteration has been demonstrated to work properly on at least four calculators at once, and is pending testing on larger networks. It can transmit one-to-one messages and one-to-many broadcast messages; it is built to be robust and to maintain correctness in the presence of collisions and noisy channels. The CALCnet 2.2 protocol uses the unique 10-digit ID code of each calculator as a hardware address, analogous to a MAC address; it does not assign anything akin to an IP address to each calculator. Packets are constructed to allow network endpoints other than the intended recipient of a packet to ignore data after the first five bytes, leaving a higher percentage of the CPU time free for other calculation and computation, especially important on low-speed, CPU-constrained devices such as calculators. Because CALCnet2.2 operates as a an asychronous interrupt, a program need only copy an outgoing message to a buffer or occasionally check another buffer for incoming messages rather than wait for a send or receive to complete successfully. Featured on Slashdot, Hackaday, and ticalc.org. GlobalCALCnet was later featured on Slashdot and Hackaday
Cellular Density Project (CDP) 
In the summer of 2007, I participated in an REU (Research Experience for Undergraduates) at Stevsns Institute of Technology in Hoboken, New Jersey. I developed a project that had previously been proposed by a graduate student at that institution but never attempted, using image processing methods to evaluate the probability that a photomicrography image contained cancerous cells. I spent ten weeks on the project, eventually producing a program capable of accurately predicting the presence of cancer cells even when faced with varied cell and image size, image contrast, image coloration, and other variables. Such a program might be useful in screening images to determine what images need to be further examined by a skilled professional and which can be safely discarded as a negative test for cancer.
Clove 2 Bluetooth Typing Glove 
After being in my projects queue for about two years, I finished Clove 2, the second prototype of my typing glove. Clove 2 is a bluetooth dataglove used for one-handed typing. It uses a 31-combination finger chording design with three modes to allow every key on a standard keyboard to be typed with minimal effort. The bluetooth functionality removes the need to tether it to a computer, and since it profiles as a standard HID Keyboard, a simple translation layer to perform key remapping, sticky modifiers, and mode switching is the only software required. It consists of three components, the glove itself, the bluetooth module, and a custom charger for the Bluetooth module.

  • More information about Clove 2, including pictures, schematics, and full construction instructions.

Click on any of the thumbnails below for the full-sized image
Dataglove overview Glove alone, back view Glove alone, palm view Inside the Bluetooth module

View the Clove 2 video.
Clove 3 Wireless Typing Glove 
With the popularity of my Clove 2 project came myriad suggestions for improving the device, including a simpler typing system and a more robust and compact electronics project. In the summer of 2011, I began construction in earnest to add these features to Clove 3. I designed a custom PCB with a microcontroller, wireless module, battery, accelerometer, and custom multiplexer/demultiplexer. I constructed a new glove from conductive fabric and thread. The project is currently on hold pending creation of a complete USB receiver with necessary predictive-typing firmware and mouse emulation.


Click on any of the thumbnails below for the full-sized image
Clove 3 overview Clove 3 PCB Clove 3 palm view
Doors CS 7.1 
Doors CS 7.1 is the seventh generation of a shell and GUI for TI-83, TI-83+, TI-84+, and TI-Nspire families of graphing calculators. Hand-coded in z80 assembly, it seamlessly extends the capabilities of the native TI operating system without removing any of its functionality. Among the key features:
  • Integrated GUI API and Associated Program system allows Doors CS programs can be smaller, faster, and better-looking than those for any other available competing shell.
  • Intuitive mouse cursor to move and click on onscreen items, plus extensive keyboard shortcuts for those who dislike a mouse interface.
  • Ability to run MirageOS, Ion, Doors CS, and TI-OS BASIC programs, ASM programs, and files among many other formats.
  • Support for transparent file system modifications to allow nestable folders for easy file organization.
  • CALCnet2, a built-in feature of Doors CS, lets you can connect two or more calculators together for chatting, multiplayer gaming, and more.
  • Doors CS 7 protects your programs and files against other programmers' mistakes with features including Intelligent Writeback and FolderRestore.
  • Customize everything from your mouse speed and cursor to your desktop background. You can also install small modules called SEs to further extend the features and capabilities of Doors CS.
More information can be found at the Doors CS 7 website

Doors CS 7 Doors CS 7
Document DE 7 
Weighing in at under just under 1KB and demonstrating the power of Doors CS, this full-featured text editor allows you to create, view, save, and open text files within an attractive and intuitive GUI interface. With Doors CS's associated program feature, you can open files from Doors CS without having Document DE open! New in Document DE 7 is cleaner compatibility with Doors CS 7's "HomeRun" feature, which lets you simply run documents from the TI-OS homescreen to edit them. Also new is an Insert Symbols window that gives you access to a wide variety of untypeable characters for your documents and notes. Combined with Tokenizer DE v1.0 or SourceCoder 2.5, you can even write TI-BASIC programs with Document DE 7! A .txt<>DocDE7 converter is available at http://www.cemetech.net/projects/docde6/. Please note that Document DE 7 must be run with Doors CS 6.9 beta or higher. Source now included for reference. Document DE 7 can be downloaded at ticalc.org.

Document DE 7 Document DE 7 Document DE 7 Document DE 7
Graph3DP 
Graph3DP is a full-featured 3D graphing application for the powerful Casio Prizm graphing calculator. It allows up to six simultaneous 3D meshes to be rendered, rotated, and traced. The gCAS2 numeric CAS, written by Cemetech member "AHelper0" and extensively modified for this project, supports trig functions and arbitrarily complex mathematical expressions. This project was created to fill the void of the missing 3D graphing application on the fx-CG10/fx-CG20 Prizm calculator, a baffling omission given its fast processor and expansive color screen. Graph3DP can be downloaded in the Cemetech archives, and there's also a brief video highlighting major features.
Graph3DP
Invalid Tangram DE 
From the release description: "Invalid Tangram can best be described as a cross between Space Invaders and Tetris. Build block combos to gain powerups, then blast the enemies into oblivion while avoiding destruction. Instead of health, you have time: powerups add to your time, but enemy shots can remove it. Run out of time and the game ends. Invalid Tangram DE is based on the PC game by Josh Szepietowski and is available for both Doors CS 6.0 and Ion. Now with source and several user-suggested improvements." Invalid Tangram is based on a popular PC game written by Josh Szepietowski, combining features of a space shooter action game with a puzzle game for a unique gaming experience requiring both dexterity and strategy. Invalid Tangram DE can be downloaded from my ticalc.org author profile.

Invalid Tangram DE Invalid Tangram DE Invalid Tangram DE Invalid Tangram DE
jsTIfied TI-83+/TI-84+ Emulator 
Over the years, many popular TI-83+/TI-84+ emulators have been written, for testing programs, for taking screenshots, and for users who don't have access to their physical graphing calculator at the moment. With the introduction of HTML5, all of the pieces fell into place for my long-planned Javascript/HTML TI-83+/TI-84+ emulator. jsTIfied is a full-features graphing calculator in your browser, capable of everything that a real calculator can do. Just load the ROM image from your real calculator (which, for legal reasons, is stored in your browser in DOM Storage) and you can perform calculations, draw and inspect graphs, work with trig and statistics, and even write and test programs. jsTIfied lets you load files and programs from the internet and save them back to your computer, and can directly load projects from Cemetech's SourceCoder project. Later updates added TI-83+SE, TI-84+, and TI-84+SE support as well as a rudimentary debugger and screenshotting capabilities.

jsTIfied
MiNT (Mobile Network Testbed) 
The objective of the project is to continue previous work by SUNY Stony Brook to create a physical, small-scale test environment to simulate wireless network scenarios. A tool called Network Simulator (NS2) currently exists, but since it performs all simulation solely in hardware, it cannot accurately reproduce all of the possibly fault modes possible in a real wireless situation, including multipath interference, obstacles, and hardware failure. I designed a hardware platform upon which to implement a hybrid NS2 using commercial iRobot Create robots and x86-based embedded computers with multiple wireless interfaces, then helped to build the hybridized NS2 software. Among the challenges we encountered were the problem of correcting for inaccuracies in the robots' movements (localization), finding hardware drawing sufficiently low power to run entirely off the robot's own battery to simplify the design, and properly controlling the transmission power level of each robot to maintain the small-scale quality of the testbed.

Full documentation of MiNT results to date can be found in the Published Works section of the Publications page here.
MiNT
mobileTunes 3.2 
mobileTunes 3.2 is a z80 assembly media player for TI graphing calculators that can play up to quadraphonic MOD music through the calculator's serial port. It uses pulse-width modulation to generate sound, and takes advantage of the Doors CS 6 GUI and Associated Program routines to maximize features while restricting program size to under 2KB. It can be downloaded from my page on ticalc.org. In addition, I wrote a PHP tool to convert MIDI music into mobileTunes 3 songs; that webapp can be found on Cemetech.

mobileTunes 3 mobileTunes 3 mobileTunes 3
Multichord 
The Multichord musical instrument is an acoustic stringed instrument with a single string, constructed from wood, a hard drive, 20-lb monofilament, and assorted electronic components. It was the culmination of a project to build an acoustic instrument capable of playing multiple notes without fretting or manual, time-consuming retuning. The Multichord achieves this by attaching a hard drive read/write head assembly between the resonant string and a tensioning spring to adjust the tension of the instrument's string. Careful adjustment was made to the tension of both the string and the spring with the hard drive head in a neutral, unpowered position to ensure a bipolar application of voltage within the safety ratings of the hard drive's coil could cause the string to cover a full musical octave. In the end, the Multichord was tuned to a C-major scale (no flats or sharps) running from A at 220Hz through (but not including) A at 440Hz. Full documentation, construction details, schematics, and specifications can be found on the Multichord project page.


Click on any of the thumbnails below for the full-sized image
Multichord overview Hard drive detail Resistor detail Button detail

View the Clove 2 video.
Oolong 
Distributed applications are becoming increasingly relevant as the cost of powerful commodity computing hardware plummets, and novel frameworks such as Piccolo have introduced fast, efficient, and simple means to build such applications. Piccolo provides a clean interface for problems that can be easily divided into iterations, and for which most data must be examined in each iteration. However, problems requiring sparse execution, for which only a subset of the data must be examined in each iteration, including causal sparse execution, cannot be cleanly or efficiently solved with Piccolo. Oolong solves this weakness by offering two classes of active triggers, used respectively to execute arbitrary code when key-value pairs are changed, andto monitor specific pairs, potentially in conjunction with other systemstate. We present our motivation and interface, and show the speedand simplicity advantages of Oolong through two sample applications implemented with and without triggers.

Oolong
PartyMode 
PartyMode was a project to turn a computer lab at Cooper Union, the µLab, into a transformable space. The lab contains ten Dell workstations running Windows XP Professional and a 52" presentation screen; I added twenty-two speakers and four subwoofers arranged for surround sound, driven by a series of amps and a 6.1-channel PC sound card. In the center of the room is the VUfan, a sound visualizer of sort built of computer case fans and assorted electronics. Its project page can be found on Cemetech; note that the page explains the five-fan version, though the current version has seven levels. The second element of PartyMode is DiscoScreens, a C++ program written using OpenGL and UDP networking to produce a distributed visualizer over the ten workstations, controlled by a central media server that extracts volume and beat information from currently-playing music and sends it to each computer as solid-color brightness and tint information. The final component is a modified server case containing circuitry to enable and disable the speaker system, turn the room lights on and off, and activate or deactivate DiscoScreens without needing to access a computer. All systems were functional except for the light switching module; future plans involved collaborating with the mechanical engineering department to add a disco ball descending from the drop ceiling. Unfortunately, due to new building infrastructure regulations, this project had to be discontinued.
Pilaf 
Pilaf is an implementation of a high-performance distributed storage system over Infiniband. With existing Ethernet-based networking, many distributed system designs are impossible. Infiniband includes two key features that make new designs feasible: very low-latency, high-throughput messages, and RDMA reads and writes that do not involve the remote CPU. Pilaf is an in-memory distributed cache leveraging these key features. By comparing Pilaf to Memcached and other popular in-memory caches and key-value stores, we show the importance of considering new system designs to take advantage of networking hardware features rather than simply leveraging the higher throughput of such hardware for existing systems.
Scouter 
Facial detection and recognition are among the most heavily researched fields of computer vision and image processing. However, the computation necessary for most facial processing tasks has historically made it unfit for real-time applications. The constant pace of technological progress has made current computers powerful enough to perform near-real-time image processing and light enough to be carried as wearable computing systems. Facial detection within an augmented reality framework has myriad applications, including potential uses for law enforcement, medical personnel, and patients with post-traumatic or degenerative memory loss or visual impairments. Although the hardware is now available, few portable or wearable computing systems exist that can localize and identify individuals for real-time or near-real-time augmented reality.

I present a system design and implementation that performs robust facial detection and recognition robust to variations in lighting, pose, and scale. Scouter combines a commodity netbook computer, a high-resolution webcam, and display glasses into a light and powerful wearable computing system platform for real-time augmented reality and near-real-time facial processing. A convolutional neural network performs precise facial localization, a Haar cascade object detector is used for facial feature registration, and a Fisherface implementation recognizes size-normalized faces. A novel multiscale voting and overlap removal algorithm is presented to boost face localization accuracy; a failure-resilient normalization method is detailed that can perform rotation and scale normalization on faces with occluded or undetectable facial features. The development, implementation, and positive performance results of this system are discussed at length.
Scouter Scouter Scouter
Simms AI 
Simms AI v1 is the culmination of several previous Cemetech projects including WordNet, an application that attempted to spider websites and build associations between related websites based on keywords rather than mutual hyperlinking. The basic design of Simms is a centralized neural network database paired with a distributed processing array that parses input into long-term memory, constructs a response when necessary, and returns it to the module that delivered the input. Its neural structure is based on that of the human brain, in that each neuron or ’node’ maintains between one and thousands of connections to other nodes. In order to speed the development of its associative memory, a variety of techniques were employed, including spidering Wikipedia, reading chat logs, and engaging in conversation with human users, which quickly demonstrated the power and the limitations of the approach. Speed and working database size became a primary concern as Simms’ neural network exceeded 300,000 nodes connected by two million connections, a suboptimal node-connection ratio caused by poor text-cleaning routines and storage ef?ciency. Careful analysis revealed fundamental flaws in the neural storage system that will be examined in designing Simms AI v2, the next iteration of the Simms project. A full technical report about Simms AI v1 is available.
smsdoor 
SMSdoor is a small hardware and software project of which Deian Stefan and I have constructed two working prototypes. It is an electronic doorlock controlled by cellphone, AIM client, or web page. The code is based on the `snazzy` Perl library written by Deian with some simple C code interfacing the parallel port on a linux box. Since we're both EEs we chose to use an actuator (rather than something more mechanically complicated) and also built an emergency manual key override. View the video demonstrating its functionality.
SourceCoder 2.5 
SourceCoder 2 is the second generation of the SourceCoder project, an attempt to provide a full, flexible IDE to facilitate programming in TI-BASIC. It fulfills the requirement for cross-platform accessibilty through its availability on any device that supports basic XHTML and optionally Javascript. The flexibility comes from its ability to read and write several types of *.8** files including matrices, lists, programs, groups, and images. New in 2.0 is a feature that lets SourceCoder participate in group programming help and optimization by automatically posting on a specified forum when new changes are saved to a group project. Such behavior is controlled through permissions set on projects, which can now be saved using your Cemetech account and are accessible anywhere you can log into Cemetech. SC2 is based on SourceCoder 1.0, featured at ticalc.org, and pieces of OpTI-BASIC, from which some of the optimization, character, and syntax-coloring code is drawn. An additional set of changes including a rewritten virtual calculator command interface and refreshed backend comprised SourceCoder 2.5, and since its announcement additional image tools have been added to convert .png, .bmp, and .gif images into monochrome, 3-level grayscale, and 4-level grayscale hex and z80-formatted assemblable binary, as well as to .8xi TI-83+/TI-84+ images and 16-level TI-Nspire grayscale images.
Ultimate Calculator 1/2/3 
The original Ultimate Calculator was a modded TI-83+ graphing calculator. It was a project a project I had dreamed of attempting for a very long time, but never quite had the resources and equipment to complete. I finished it in February 2007, with the following features as documented in the project's construction blog:
  • Modified LCD with RGB LED backlight controlled by a GAL16V PLD slaved to two CPU I/O lines allowing full-spectrum color control that also illuminate the case windows
  • Sanded, painted, and varnished case with sports car-style racing stripes
  • Removed LCD bevel and slanted LCD for more unique, non-branded look and easier LCD viewing
  • Internal powered PS/2 port with working drivers for use with external keyboards and mice
  • Case cutouts and case windows for added "wow" factor


In December and January I worked on improving and upgrading the Ultimate Calculator, releasing information in January on the Ultimate Calculator 2, detailed on its project page. Current features include:
  • An improved paint job, blue with silver stripes, using Krylon spray paint and a Minwax finish.
  • A fully-functional 2.5"-diagonal PS/2 touchpad on the rear of the calculator for easy use with mouse-enabled calculator programs.
  • A higher-power TICI CSA full-spectrum RGB backlight capable of producing any color.
  • An integrated female PS/2 port for connection of a mouse, keyboard, or other PS/2 device. Current drivers support mice (and touchpads) as well as keyboards.
  • Slightly modified case construction that combines a sleeker, look with keypad and touchpad water resistance.
Varnished main case halves (rear view) Completed overview Completed Ultimate Calculator 2 (open)
WiSO Safe 
The development of rip currents at beaches is very common and life-threatening to even the most experienced swimmers. Despite being the primary cause of drownings and lifeguard rescue missions, little research effort has been put into detecting these rip currents. With Deian Stefan and Dave Nummey, I designed a real-time, fault-tolerant and easily deployable solution, the Wireless Shore Observational Safety System (WiSO Safe), to detect rip currents using a wireless sensor network.

We proposed a design for detecting rip currents based on wireless sensor networks (WSNs). The WSN consists of many small and self-powered sensor nodes wirelessly sharing routing and sensor data to monitor water safety in an efficient manner. Along with the challenge of building a fault-tolerant, self-powered and energy-efficient node, the distribution of the nodes in the WSN poses the challenge of shore coverage, scalability (i.e., how many nodes the routing protocol can efficiently support), localization, network dynamics (i.e., network adjusting for dropped/added nodes), ease of deployment, and analysis of multiple sensor information to determine the safety threshold of the water.
WorldTrends 1/2 
This was an attempt to track keywords and activity at popular general and specialty news sources as well as financial markets to correlate positive and negative world events to news and financial trends, and eventually, try to extract some pattern or predictive algorithm. This project collected data faithfully for about year before overwhelming itself with the amount of data collected; I have put it on hold, but hope to pick it up at some point and recode the system to better handle large volumes of data.

Contents
Academic Projects [Chronological Order]
» Pilaf
» Oolong
» Scouter
» MiNT
» Cellular Density Project

Hardware Projects
» CALCnet 2.2
» Clove 2
» Clove 3
» Multichord Hybrid Instrument
» PartyMode
» smsdoor
» Ultimate Calculator 1/2/3
» WiSO Safe

Software Projects
» Doors CS 7.1
» Document DE 7
» Graph3DP
» Invalid Tangram DE
» jsTIfied TI-83+ Emulator
» mobileTunes 3
» Simms AI
» SourceCoder 2.5
» WorldTrends 1/2
CRM
© 2007-2013 Christopher Mitchell.