This page lists some of the things that I've been up to lately. I try my best to keep it up-to-date.

# Reading

At any moment I have a handful of books that I'm currently reading. I find that I don't have trouble keeping track of each, thanks in part to keeping notes, and having a set of books allows me to switch to something else temporarily if a particular book falls into a lull. I also keep a page of reviews of books that I've finished.

  • The Wise Man's Fear --- After finishing the first book in the series and liking it enough, I decided to continue on to the sequel. Where Sanderson is well known for his so-called "worldbuilding," Rothfuss is well known for his very beautiful prose. In a genre increasingly filled with books containing complex worlds and multiple POVs, The Kingkiller Chronicle is a refreshing change of pace.

    In other books, the world-at-large is not really explored and is largely incidental; the aspects we glean about it are usually only those that are somehow related to the characters. This is only natural, but Kingkiller Chronicle is more or less a story about the everyday life of the main character, Kvothe. This affords a level of familiarity with the world that I haven't seen in other books that I've read.

  • Mastering Bitcoin --- I just now began studying Bitcoin, but from the moment I learned of its existence I recognized that there was clearly something revolutionary about the fact that this was a decentralized monetary system which was used---and presumably by extension trusted---by people.

    I continue to be amazed at the foresight of Satoshi and sheer ingenuity of the solutions employed in Bitcoin. This book---and Bitcoin in general---triggered an epiphany in me: I realized that cryptography can be used for more than just maintaining user privacy, but also as a way to enforce conformance with a system.

  • On China --- China has always interested me as seeming like a world within a world. I had previously seen some edX courses about China that seemed to be very good, but I tend to prefer reading rather than watching when it comes to learning.

    This book by Henry Kissinger goes over the historical perspective that informs China's current state of affairs. Henry Kissinger is the one that orchestrated the opening of relations with China when he served as Secretary of State during the Nixon Administration, so he's no stranger to the country. The book seems to go over parts of Chinese history chronologically leading up to modern day, and it is simply engrossing.

  • Parallel and Concurrent Programming in Haskell [notes] --- It's well known that Haskell makes it very easy to reason about concurrent and parallel programs, and this has proven true in my experience so far. The software transactional memory package provides transactional concurrency primitives that make writing safe, concurrent programs very simple.

    One of the more common difficulties in reasoning about Haskell programs is the property of being non-strict, which in GHC is handled via lazy evaluation. What this means is that one has to be careful about how expressions are evaluated, particularly with when they will be evaluated. This is especially important in parallel evaluation contexts, where the parallel evaluation can end up only evaluating the expression to weak-head normal form, i.e. the outer-most constructor. For this reason, this book starts out with thorough coverage of so-called evaluation strategies, which decouple a given algorithm from the way in which it's to be evaluated (e.g. in parallel or not).

  • Programming Erlang [notes] --- Erlang was the first functional programming language I attempted to learn. The combination of foreign (to me) programming paradigm and actor concurrency model was enough to prevent me from seeing the bigger picture, and so I never finished learning it, instead opting for Haskell.

    I don't like to leave things like these unfinished, so now that I have a solid understanding of functional programming and the actor concurrency model, I'm attempting to give Erlang a second chance. I don't particularly see myself using Erlang; I think Haskell is a superior language and Scala has access to a more vibrant and robust package ecosystem. However, Erlang and its OTP library are known to be very robust, so my intention with learning it is to see what ideas I can pick up from them.

  • Java: The Complete Reference --- I've always "known" Java through my use of it in school where it was sometimes required, but I never formally learned it. With the release of Java 8 and the many new languages that are targeting the JVM, I felt it would be a good idea to sweep through a Java book to ensure that I understand the nook and crannies of Java.

    I was specifically looking for a book that served more as a reference instead of a beginner-oriented book that which I would have to sift through to find the nuggets of actual information, past the exercises and code examples. This book seems well regarded and has so far served that purpose.

# Studying

# Working On

  • A game I've been wanting to work on for a while now. It's being developed with CMake, C++11, LuaJIT, and architected from the beginning to facilitate cross-platform development.

  • An audio player, though it'll ultimately be used for something else other than general audio playback. I'm decoding audio frames using ffmpeg's libavcodec, libavformat, libavutil, and libswresample. Playback is currently done using PulseAudio although I intend to switch to a cross-platform library like PortAudio. It works with any format/container/codec supported by ffmpeg. Source will be up soon. Update: Ported to PortAudio, now runs on Windows!