# Cyborg and Tracer

I have been working independently on “Tracer” a 3D/game engine in Direct3D11, used by a user interface project “Cyborg” which is geared towards advanced and efficient 3D user interaction with potential real world applications in various interaction contexts. More particularly, I have always felt that GUIs have been lacking, and that the next step of UIs should be more graph based and able exploit more dimensions of both interactivity and visualisation in a way that power users can get much more leverage and productivity from.

My project is still in early days from a usability perspective, however, much of the time has been spent on developing Tracer, the 3D/UI engine, where I have worked on various subsystems:

• Geometry tracking and submission
• Shader and Texture management systems
• A scenegraph with a dynamic component system
• A messaging system
• Widget/UI system (with signals/slots, hierarchy, relative coordinate spaces etc)
• Low-level memory management and optimisations:
• Custom allocators and memory pools
• Memory representation e.g. alignment
• Font reading, and efficient text rendering
• User input, picking, widget translation
• Integration of physics (bullet physics) for rigid body dynamics
• Performance profiling
• Logging and assertion systems

As a result, my C++ skills, particularly in the area of templates, and the new C++11 features have improved. A negative result of this is that whenever you get to the next “level” of understanding, a lot of your existing code (which you were proud of not too long ago) suddenly looks less impressive. This happened to me a few times during the course of this project, to the point where large segments of the existing codebase of a few months ago were basically rewritten again in a matter of days or weeks (I got faster, and started using some of the more modern C++ features and idioms).

But since most of my work has been in engine development, and not in the app that uses the engine, I don’t have much to visually show at the moment (Screenshots, Video). This choice of writing an engine might seem like a mistake in the software world where you don’t reinvent the wheel, but I approached this froma learning perspective, and I’m glad I did it. I didn’t want to simply use a high level engine while being clueless to what is running under the hood, and I was afraid thats where I would end up in terms of understanding if I went directly for the off-the-shelf/managed/wrapper route. I don’t assert this view for everyone, as different people have different goals.

I have also been contributing on StackOverflow to keep my skills broad and sharp, for a bit of variety, and to maintain a rough idea of what is trending in the tech world.

# A Case of Mercurial Collision Folding

During a file renaming/cleaning phase in a project, using mercurial as my DVCS, I had to rename a set of directories containing tracked source files from Capitalized to lowercase (e.g. renaming directory Foo to foo and directory Bar to bar.). I was doing this in a feature branch that I would merge back into default/trunk when finished.

I got a rude surprise later on when merging the changes; I realised that since I was working on windows (which natively uses an NTFS file system), The functionality of hg is reactive to the limitations of file path case insensitivity of the filesystem, and hence inherits certain name clobbering “features” as a result.

# Advanced Declarative Association and Relationship Modeling with SQLAlchemy ORM

Disclaimer: This is a concatenation of 3 articles I posted on my older site in 2010, which many people found useful back then. This information may not be completely up to date.

# PYGPW: Generate Pronounceable Words

pygpw is a python module that uses a trigraph probability matrix (extracted from an english dictionary) to pseudo-randomly generate pronouncable words.

Inspired by existing C++ and Java implementations and [1], pygpw offers added functionality, such as multiple pronouncability methods and leetification , as well as a flexible command line interface. I’m releasing pygpw under the zlib license, and you can check out pygpw here

Here is some sample usage:

    \$ pygpw 6
ariblene
instormi
expassac
andishia
tumircop
zonester


# Thesis: Explanation System for Scrutable Learner Modeling

A thesis paper written in my final university year about exploring ways for expert systems to explain their assessment of learner models to their owners. Continue reading