Hacker School day 15

:: Hacker School

I spent most of late Thursday and Friday working on open source projects that pre-date Hacker School.

  • Racket wanted to accept a pull request from me to fix a bug with small bit-vectors. But because I had stumbled around before finding the correct solution, and discussion on the PR, I’d accumulated about 8 commits on the PR branch that needed to be squashed. Also, the PR had been open for about 8 weeks, so I needed to fetch Racket HEAD and build in order to test properly. Finally I needed to wait for Travis CI to finish (the full builds of Racket there take ~30 minutes). In all, a fair amount of busywork, but that’s an important part of the process.
  • I fixed a bug in my markdown parser. After boiling it down to the minimal example, the problem was obvious; the parser was sometimes returning an x-expression at a stage where a raw string? was expected — in the case of an <!-- HTML comment --> inside a list item. The fix was simply deleting the check for the HTML comment. Which made me suspicious. Had there been some intent behind the check, even though it now seemed crazy? Or had the check just been a brain fart? I decided it was the latter, after thinking it through, and also seeing that all the unit tests (of which I have many) still passed. So I added the fix, plus a couple regression tests, committed, pushed, and commented/closed the issue on GitHub.
  • I fixed a bug in my racket-mode for Emacs. Turns out it wasn’t treating Unicode characters as symbol constituents, causing a problem with some paredit operations. Fortunately I had inherited the problem from scheme-mode, and knew that the problem did not occur in lisp-mode. As a result, it was straightforward to track down. The fix was simply setting multibyte-syntax-as-symbol to t.
  • I reviewed a pull request for #lang rackjure regarding how a Racket #lang could install a readtable for the REPL, without doinking the readtable for other modules.

Of the three bugs, two turned out to be one-line fixes — even though they took some time to figure out and to do “paperwork” like bug trackers and regression tests. On the one hand, such bugs feel like a low signal:noise ratio. On the other hand, they’re satisfying because they make you feel like the overall design/assumptions were good.

Also I did some work implementing Racket variants of some Clojure map-related functions like get, get-in, assoc-in, update-in, partition, take,1 and juxt. More trivially, alias things like every?, some, assoc, and dissoc to their Racket equivalents. Although I haven’t yet pushed these to #lang rackjure I may do so over the weekend.

That was day 15 of about 60. On the one hand, it feels like a very long 3 weeks (in a good way). On the other hand, I can’t believe I’m already 25% through.

Time perceptions, how do they work?2

  1. Unlike Racket’s, this doesn’t raise an exception when there are fewer than N elements left, it just returns them. Which IMHO is more useful; in the past I’d written a take<=

  2. Also: Magnets.