## Summer Vacation is Over!

2018-08-15

I attended the Recurse Center for two main reasons:

• To stretch myself as a programmer. It was nice being in an environment where this goal is shared, and where everyone is excited about programming.
• To take a break from Oil, after working on it for over 2 years.

I feel like the trip was a success on both counts. Read on for details!

### A Raytraced Video Made With Shell Scripts

I could write at length about what I did for the last three weeks at Recurse Center, but this video demonstrates it more concisely:

The idea is to visualize four-dimensional geometry with raytracing. I studied these ideas over 15 years ago, but I didn't have the programming skills to do anything interesting with them.

Happily, shell scripts helped us complete this project! It took ~500 lines of shell to coordinate ~1100 lines of Python, the PBRT renderer, ImageMagick, ffmpeg, and a few other components. The rendering was distributed across 66 cores on 3 machines.

I explain this further in the README.md of the pbrt-video repository. I also wrote about the math involved.

Aside from using shell scripts, I stretched myself in a few other ways:

• I collaborated with Caroline Lin on this video. This was a good lesson because I tend to code by myself, and that won't work for Oil. It's too big a project!
• I learned more about the geometry of regular polytopes in higher spatial dimensions.
• I refreshed my linear algebra skills. Wikipedia helped!
• I effectively used Python's numerical computing ecosystem. Despite being a long-time Python programmer, I haven't used NumPy, SciPy, or matplotlib very much. This project used all three.

### Back to Oil

I didn't take a full break from Oil this summer: I worked on it with others and even made a release.

But the break was enough to renew my enthusiasm for the project!

#### Release of OSH 0.6.pre1

I just released OSH 0.6.pre1:

It's almost identical to OSH 0.5.0, but I ran the benchmarks on my personal machines instead of Recurse Center machines. (A side benefit of RC was forcing me to fully automate and decouple the release process from particular machines.)

#### Goal: More Frequent Releases

I want to make more frequent Oil releases going forward, and I plan to number them as follows:

```0.6.pre1
0.6.pre2  # a regular time-based release
0.6.pre3  # could be a few weeks later, or even a day later
...
0.6.0     # When enough significant functionality has piled up,
# change the last digit to 0.

0.7.pre1
0.7.pre2
...
0.7.0     # More significant functionality.
0.7.1     # A patch release fix a bug.
# Patch releases are not likely before 1.0.
```

I think this scheme is nicer for frequent releases. I just finished re-reading the Cathedral and the Bazaar, and more than one passage made me think about Oil.

In the chapter Release Early, Release Often, there's an anecdote about the release cadence of Linux:

In those early times (around 1991) it wasn't unknown for [Linus Torvalds] to release a new kernel more than once a day!

In the chapter The Importance of Having Users, there's an assertion about parallelizing software development:

Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging.

Caveat: I'm not sure how parallelizable Oil development is due to its unusual metaprogrammed style, but I welcome comments on this topic.

In any case, it can't hurt to release more often, and the new numbering scheme facilitates that.