Chromebook Pixel

:: Google, Linux, Racket

I’m writing this blog post on a Chromebook Pixel. In Emacs. On Ubuntu, as a chroot, thanks to crouton.

Why do I have a Chromebook Pixel? Google gave one to every Google I/O 2013 attendee.1

Although I was happy to get such a cool new gadget, I honestly wasn’t sure what I’d do with the thing. I really like my MacBook Pro Retina and wasn’t looking for an alternative. Also, although I love web apps and 45% of my day is in the web browser, another 45% is in Emacs using Racket — what about that?

The ~> Threading Macro

:: Racket, Clojure, macros

Although I prefer Racket, there are a few idioms from Clojure I like. I’m particularly infatuated with the threading macros, -> and ->>.

I was surprised how little documentation I could find for these. So although I’m writing this for Racketeers, it’s possible a few Clojure folks might find it interesting, too.

feeds2gmail

:: Google, Racket, Atom, RSS

Recently I wrote about my my Google Reader successor, using rss2email to push feeds to Gmail.

In the month since, I was still running it on my laptop. To make it work best, it should run on a dedicated server. That way, it would push emails even if I’m away from my laptop, and I could read them on e.g. my phone. But before committing to setting this up on Amazon EC2, I wanted to be sure I liked the approach.

A guide for infrequent contributors to Racket

:: Racket, Git

Do the following apply to you?

  • Maybe you want to contribute something to Racket: You’d like to improve the documentation, or you’d like to add a small feature.

  • Maybe you’re comfortable with Git, but haven’t made a pull request before.

  • Maybe you’ve made a one-off pull request, but haven’t tried to contribute to the same project over time and stay in sync with the upstream project.

If so, you may find my guide helpful. I was hopelessly confused about how to handle the branches and merging. After I figured it out, I wrote this down in a Gist as a note to my future self. Today I figured I’d dust it off and make it into a blog post.

Planet vs. the new package system

:: Racket

Recently I’ve shared some new libraries using the new package manager, but not uploaded them to Planet.

What about my existing Planet libraries? Yesterday Danny Yoo pointed out a bug in the Dynamo module of my Amazon AWS library on Planet.

The bug wasn’t present in my GitHub repo—I’d neglected to go through the steps of making a new version and uploading to Planet.

By contrast, with the new package manger, it would have been automatically up-to-date.

Roger Ebert, not engines

:: technology

I’ve owned a couple TiVos over the years. The first thing I do on setup? Turn off the suggestions.

The HBO series Mind of the Married Man joked about this a decade ago: “My TiVo Thinks I’m Gay”.

Although I love NetFlix I also find their recommendations underwhelming.

About the only film recommendations I ever find valuable are from a friend or someone like Roger Ebert, who sadly just passed away yesterday.

Why? Precisely because the recommendations aren’t limited to what I already like.

Parameters in Racket

:: Racket

Racket parameters let you manage stateful global variables in a way that feels more functional and is also thread- and continuation-safe. A convenient parameterize form lets you change and restore them. I’ll discuss this and show how I map parameters to a configuration file.

My Google Reader successor

:: Google, Atom, RSS

Just a brief update about what I’ve settled on as my replacement for Google Reader. I’m using Rss2Email, following the instructions in Turning Gmail into Google Reader.

I tried Feedly, NewsBlur, and Reeder. Each of them wasn’t bad, but each felt “heavy” compared to Google Reader. So W. Caleb McDaniel’s post really clicked with me.

Host your own web apps?

:: software

In general I’m a big fan of web apps for many reasons:

  • You don’t need to migrate data when you buy a new computer or mobile device.

  • You don’t spend a bunch of time updating apps for security or improvements. Doing so may be easier on a mobile device than on a desktop. But there are days when my phone does more work updating apps than me actually using it.

  • Synchronization sucks. Using multiple native apps with local stores requires synchronizing state. Essentially this is N/A with a web app because the data is stored in one place. (Note: Caching doesn’t suck; just synchronizing.)

  • Developers can iterate and experiment — “release constantly”. This may sound like it’s an advantage for devs, but to the extent it makes better apps and saner feature accretion, it’s good for us, too.

  • Easier to hack, by which I mean customize for individual needs and preferences.

  • Easier (and generally safer) to use hacks created by others (in the form of browser extensions).

So great. But obviously the Google Reader shutdown brought me up short. Shook my faith. Am I wrong to prefer web apps?

On reflection, there are two reasons why it’s still OK to prefer web apps.

Serve static files

:: Racket

I wanted Frog to provide a “preview” feature: Launch a local web server with a version of the site, and open a web browser.

This local web server simply needs to serve static files. No server-side applications. (Not even features you’d likely want in a production static file server like gzip compression or If-Modified handling.) It just needs to start quickly, and preferably not be a lot of work to code.