Go, Avro, Singletons, and Templates

July 4, 2016

I've written a lot of Scala over the past eight months. It's not my favorite language, but it's up there, and it's done a lot to shape my view of software architecture and patterns in that time. More recently, I've been writing Go. As languages go, Go really could not be more different from Scala. There's good and bad aspects to the choices each of the languages have made, but what I'm interested in today is design patterns, not language comparisons. In fact, today's pattern is that old demon - the Singleton. Also, code generation with text/template.


Deploying a Rust App to Google App Engine

April 1, 2016

I love the Rust Language. The trade-offs Rust has chosen work really well for me. I like static typing, powerful type systems, functional programming, and control over memory. Those last two, in particular, often seem at odds with one another, and I really appreciate Rust's particular combination of theory and pragmatism. I also like Google App Engine, and the general Google cloud ecosystem. This wasn't true originally, but the more I've learned, the more I've grown to like it. This blog is served statically from Google Cloud Storage, and I use GAE to back my consulting web-apps, when I choose the stack, at any rate. While I find many things in technology quite interesting, server maintenance is not really one of them, so GAE's managed instances are perfect for me. For my first real application in Rust, I'm writing the back-end to a Disqus-like commenting system for this blog, which I want to host on GAE. Which means I want to run Rust apps on GAE, which is precisely what we'll do.


New Games Section and Articles

March 17, 2016

TLDR: New Section! Games!

I'm adding a new section to the site and planning on starting a new series of articles on game development. Specifically, for now at least, I'm going to be writing about my own experiences writing HTML5 games. I've done a decent bit of work in data visualization, both static layout and dynamic visuals in C++ and JavaScript, in the past as part of my scientific work (plus the usual graphing tools in Python). In my copious free time (/s), I've gotten interested in learning to make games. The combination of technical challenge and creative expression is hard to resist, although I'll still be positing about non-game related stuff; in particular I started working on a Discus-like commenting system in Go, even writing a multi-thousand word post describing it, and then dropped it in favor of re-writing in Rust because, honestly, I just don't like Go that much. I'll post that development story once I've done the re-write, though it took a backseat to my recent game-endevor, some long days at the day job, and SXSW (ugh).


Using the iOS Keychain from RoboVM in Scala

Feb 15, 2016

At work we use RoboVM to cross-compile Scala onto iOS for our iPhone app. In theory this is great because we can keep the codebase in just Scala, limiting the required language knowledge to just Scala and preventing context-switching costs. In practice, I'm skeptical of the benefits. Maybe it's our collective lack of knowledge of Scala, I picked up the language explicitly for this job, but Java inevitable leaks into the project regardless, so there goes the 'only one language' part. I don't think this is a necessary consequence of using a JVM language; certainly JVM details leak out much like machine architecture leaks into non-trivial C programs, but Clojure does a pretty good job of preventing major Java leakage. Similarly, I'm wary of Scala-to-JavaScript transpiling for the front-end, in part because calling into APIs in the target language inevitable involves a lot of boilerplate wrapping and/or details of the calling language leak into the code. For me, at least, this breaks the context-switching promise. In fact, it's worse, as I'm now keeping two language models in my head at the same time.