Welcome to my homepage! It's currently under (perpetual) construction. If you find anything useful or interesting (or wrong) on the site please get in touch and let me know.

Warning

This site contains links to programs and code I've written, they are provided as is. Run them at your own risk, don't blame me if they cause you any damage in any way.

This is my first attempt at a proper website so I've been experimenting with some stuff for fun. One such experiment is seeing if I can use css files to create simple themes for the site. So far I've only made three (slightly awful) themes which can be tried out by clicking the links below.

Themes: Grey Grey Light Light Dark Dark

SDP Solver

Semidefinite programming (SDP) is a form of convex optimization and is a generalization of linear programming. Which means it's fast and gives (significantly) better results than linear programming. Consequently it is increasing in popularity and is being applied in a lot of areas. I've personally used it in several maths papers on graph theory, and independently it was the core topic of my brother's master thesis in aeronautical engineering. As a result I decided to write my own solver.

RSDP (Rahil's SemiDefinite Program solver) is a cross-platform multithreaded multiprecision semidefinite program solver written in C++. It uses OpenMP to multithread the computation, and GMP or Boost to handle multiprecision calculations.

I'm not quite ready to release the source code just yet as I'm still in the process of optimizing and testing things out. However, you can download a cutdown precompiled version of the program for Windows (multithreading is disabled, and the multiprecision data type has a fixed accuracy of 50 significant figures).

RSDP-win-v0-9.zip (102 KB) - Warning: the zip contains an exe.

Rigid Body Simulation

Rigid Body Simulation deals with trying to model real world physical situations computationally by applying Newton's laws of motion and the laws of conservation to perfectly rigid bodies. It turns out that this is significantly trickier than you might expect. I got interested in the area from a game programming perspective, and wrote some stuff on the subject which can be found below.

A correction to Brian Mirtich's Thesis (PDF 334 KB) - I noticed a mistake in Brian Mirtich's excellent thesis (that can be currently found here) so I wrote up a correction. It describes how to handle collisions with friction in both 3D and 2D. Although it's pretty informally written it should be easy to follow. To demonstrate the 2D version of the algorithm described in the paper I wrote an OpenGL program in C (source code 22 KB) and then later, for fun, an Html5 version of the same demo. I wanted to keep the source code as simple as possible, so they're not interactive and don't really do much. (I'd like to take the opportunity to thank Martin Baker of EuclideanSpace for hosting the paper on his site.)

Rigid Body Simulation (PDF 2.8 MB) - My University of Warwick MSc thesis (see e-thesis). It seems to get cited every now and then, so I thought I'd better put it online. It covers some of the basic principles and formulas of the area. To go with the thesis there is some source code (zip 4.2 MB, warning the zip contains exe files) and 15 videos (available under 3 different codecs, hopefully one will work on your system): XviD (zip 8.0 MB), DivX (zip 13.0 MB), Microsoft MPEG-4 Video Codec V3 (zip 24.1 MB).

Maths

This section is probably of no interest to you unless you're a researcher in combinatorics. It contains a bunch of technical papers I've written over the years, mostly in collaboration with my PhD supervisor John Talbot. Some of the material has been published, some hasn't. I also have a bunch of other unpublished results scattered across my hard drives, when I stumble upon them I'll try to put a copy of them here.

Some Results In Extremal Combinatorics (PDF 832 KB) - My PhD thesis (2011). It contains a few unpublished results. There is also a CD-ROM (zip 1.12 MB) that accompanies it, containing source code, and data files.

Papers (links are to the free arXiv copy of the papers):
A collection of open problems in celebration of Imre Leader's 60th birthday, R. Baber, N. Behague, A. Calbet, D. Ellis, J. Erde, R. Gray, M.-R. Ivan, B. Janzer, R. Johnson, L. Milićević, J. Talbot, T. S. Tan, and B. Wickes, arXiv:2310.18163 [math.CO], (2023).
A solution to the 2/3 conjecture, R. Baber, and J. Talbot, SIAM Journal on Discrete Mathematics, 28 (2), 756 – 766, (2014).
Multiple unicasts, graph guessing games, and non-Shannon inequalities, R. Baber, D. Christofides, A. N. Dang, S. Riis, and E. R. Vaughan, Conference paper at The International Symposium on Network Coding, (2013).
Turán densities of hypercubes, R. Baber, arXiv:1201.3587v2 [math.CO], (2012). Deliberately unpublished.
New Turán densities for 3-graphs, R. Baber, and J. Talbot, The Electronic Journal of Combinatorics, 19 (2), P22, (2012).
Hypergraphs do jump, R. Baber, and J. Talbot, Combinatorics, Probability and Computing, 20, 161 – 171, (2011).
The minimal density of triangles in tripartite graphs, R. Baber, J. R. Johnson, and J. Talbot, LMS Journal of Computation and Mathematics, 13, 388 – 413, (2010).

Other Stuff

I was mentioned on the youtube channel "C++ Weekly With Jason Turner". I pointed out a "gotcha" with std::pmr::vector<std::pmr::string> and how to catch it by creating a custom default allocator. Check it out here.

Because knowledge of smart pointers in C++ is such a common interview question, check out my custom implementation of std::shared_ptr which I call stoppable_ptr. It behaves like a std::shared_ptr but it has a member function called stop() which disables further copies being made.

About Me

You can probably get all the information you want from my CV (I am currently looking for a new job). Feel free to contact me at rahilbaber@outlook.com.