Quote of the Week

"If debugging is the process of removing bugs, then programming must be the process of putting them in."

About Me

Botond Ballo

I am a software engineer, with a degree in Computer Science from the University of Toronto. I work at Mozilla, and hack of software development tools on the side.

My vision is a world where programmers can write code whose structure corresponds to the structure of the problems they are trying to solve. I believe this can be achieved by improving our programming languages and software development tools.

I have a blog, where I feature epic songs, report on C++ standards meetings I attend, and write about sundry other topics, and a Twitter account where I mostly grumble about politics.

My email address is:

Current Projects

Eclipse CDT

I do a lot of C++ programming, and I find a good editor to be an invaluable tool. My preferred C++ editor is Eclipse CDT, because it's one of the few C++ editors that parses and semantically analyzes the code you are editing, much like a compiler front-end would, which allows it to provide advanced features, such as semantic code navigation and search, intelligent code refactoring, and live notifications of compiler errors in the code.

I've been using Eclipse CDT since I discovered it in 2008. As with any tool, it's not perfect; there are bugs in its C++ parsing and semantic analysis that cause it to occasionally present you with false positive errors, or inaccurate navigation/search results. Since 2010, I've been systematically reducing and reporting such bugs as I encounter them in my C++ codebases. In 2012, I decided to take my investment in this tool a level further, and start contributing bug fixes to it myself. That's the wonderful thing about an open-source project - you can fix bugs that annoy you yourself, and the entire community of users benefits from it!

I've now been a code contributor to CDT for over five years, and a project committer for two. I feel like CDT's editing capabilities and accuracy have come a long way in that time, though of course there is always more to be done, especially with the C++ language gaining new features as it evolves.

At the same time, I've come to realize that having an editor maintain its own C++ parser is not really sustainable, as it's an enormous amount of effort to maintain and keep up to date with language changes. A better architecture is to have it reuse the parser of an actual C++ compiler. The Language Server Protocol is a recent development that makes such integration easier, and my more recent efforts as a CDT contributor have been in this direction.


Control Flow Visualizer (CFViz) is a debugger plugin that helps you visualize what path control flow takes during the execution of a function. It's designed primarily for use with rr, Mozilla's super-neat record-and-replay debugger, but it works with vanilla GDB as well. I use rr and CFViz on a regular basis at Mozilla.

This blog post describes CFViz in more detail and has some screenshots of it.

I wrote CFViz in collaboration with my friend Derek Berger, for whom it was an opportunity to learn Rust.

Timetable Generator

Botond's Collection of Common Utilities

Botond's Collection of Common Utilities (BCCU) is a C++ library containing a collection of generally useful utilities. Timetable Generator and the Timetable Generator API use BCCU in their implementation. I have released BCCU as open-source in the hope that it will be useful to others as well.

Past Projects


Boost logo

Boost.Range is a C++ software library that allows for greater expressiveness and efficiency when writing code that processes collections of data. It bears some resemblance to LINQ in C#. Boost.Range is a component in the prestigious and widely-used Boost C++ libraries.

I have been using the Boost.Range library since around 2009, and helped maintain it for a couple of years starting from around 2012. I later lost interest as the C++ community moved on to Eric Niebler's Range v3, which is now getting standardized as the Ranges TS.


TableDroid logo


Bidirected Graph Layouts

During the summer of 2009, I developed an algorithm for producing a visually appealing screen layout for bidirected graphs used in DNA sequence assembly, under the supervision of Professor Mike Brudno and his grad student Nilgun Donmez.

This work was open-sourced and used to be available here, but no longer seems to be. If you are interested you can email me for a copy of the code.


Basie is a a web-based software project management system, meant to be an improvement to Trac. Basie is developed by a team of students under the supervision of Dr. Greg Wilson of the University of Toronto.

I was part of the Basie team from January-April 2009.

The development of Basie has since been discontinued.

Project Ideas


a basil leaf

I have an idea for a C++ library — tentatively called the Binary Application/Storage Interchange Library (BASIL) — that would allow writing down specifications of binary file formats in a declarative form, using a domain-specific language embedded in C++. Based on these specifications, the library would generate code for reading/writing binary files in the specified format to/from appropriate data structures. This idea hasn't gotten past the early design stage.

Quote of the Week

"If debugging is the process of removing bugs, then programming must be the process of putting them in."

Site design by Derek Berger.