Storytelling through aspect ratios

I work in the tech­ni­cal video field, so when watch­ing dig­i­tal video, I often notice things. Macroblocking, smear­ing, edge ring­ing, blurred edges. They’re the type of things that most “video mug­gles” don’t notice, so I tend to let them slide. This week­end I watched Grand Budapest Hotel and chuck­led a lit­tle at the open­ing slate:


As if. I thought it was a lit­tle joke. Pretty much every­thing capa­ble of dis­play­ing video these days does 16x9. I thought it to be some­thing like “in stereo, where avail­able.” I watched the whole thing, front to back, in one sit­ting, get­ting totally sucked in to the story. I don’t think it was Wes Anderson’s best, but it was still a great movie.

It wasn’t until later, when I went back to review a scene that I noticed. The aspect ratio was... odd... And that I didn’t notice the first time through just shows how strongly the story pulled me in.

It took a bit of fast-forwarding and rewind­ing, but I even­tu­ally con­cluded that the film uses FOUR dif­fer­ent aspect ratios — one for each time period depicted. Okay, tech­ni­cally, three (but two dif­fer­ent sizes of one ratio), and then the open­ing slate itself is a fourth or a fifth, depend­ing on what you’re count­ing.

Widescreen tele­vi­sions these days are 16:9. For every 16 pix­els across, you get 9 pix­els down. That’s a ratio of 16:19, or 16 ÷ 9 which is 1.78:1. (Laptops are a funny thing and have all sorts of dis­play ratios. Mine hap­pens to be 16:10 or 1.6:1.)

The open­ing slate itself is a lit­tle weird in that it’s 16:8, or 1.871:1.

The movie is book­ended by pre­sum­ably modern-day shots of a girl vis­it­ing a memo­r­ial to “The Author.” These shots are the same 16:8, but they’re let­ter­boxed down to a smaller size. They’re 1.85:1, or Academy widescreen. This is one of a cou­ple of dif­fer­ent non-proprietary widescreen for­mats that cam­era mak­ers, stu­dios, and the­aters agreed upon in the 50s. The image size is the same as the “please set your mon­i­tor...” slate above, but I’ve high­lighted the let­ter­box­ing in green.


We get a few quick scenes of The Author speak­ing about his past, address­ing the audi­ence, nar­rat­ing the story. These scenes end up being the same ratio, but on a smaller area of the print.


He talks of vis­it­ing the hotel in the 60s. The hotel has seen bet­ter days, but the reluc­tant owner has a few sto­ries to tell.


This is a full edge-to-edge aspect ratio, 2.31:1. It’s a dif­fer­ent acad­emy widescreen stan­dard that’s a bit more wide than the other.

When we delve into the hotel owner con­vey­ing sto­ries of his days as a Lobby Boy in the grand hey­day of the hotel, we switch to a very odd 4:3 aspect ratio. You’d rec­og­nize it from older standard-definition TV. You might even rec­og­nize it from the orig­i­nal Edison movie equip­ment.


Each era, each with a dif­fer­ent res­o­lu­tion or aspect ratio, all a sub­tle part of sto­ry­telling. And yet, oddly, the sto­ry­telling was strong enough that I missed it the first time through.


Posted in: Movies


17 years of Netninja

Today turns 17. It’s been a long jour­ney through sev­eral dis­tinct phases. The early his­tory is a lit­tle fuzzy in my mind. This lit­tle nar­ra­tive is my best-effort attempt at recall­ing the details, to bet­ter doc­u­ment them for the future.

defcon-2-logo-8My first glimpse into web­pages was at DefCon 2, the hacker con­ven­tion in Las Vegas in 1994. That was after com­mu­nity col­lege, just as I was get­ting set­tled in to a four-year uni­ver­sity. I’d been using the inter­net (through school) for some time. It was all mail­ing lists, usenet groups, FTP, and gopher sites. I’d either not heard of web pages, or I had but they hadn’t reg­is­tered solidly on my radar. At DefCon, there was some talk about using the inter­net to order pizza. The archi­tec­ture was some­thing dumb and hacked together, like a web­page hooked to a fax­mo­dem. But I didn’t quite get it. The colon-slash-slash and all that. I hadn’t seen URIs before. They were a com­bi­na­tion of for­eign and famil­iar. I could see how they might be use­ful short­hand for, but this “http” thing was new. I learned quickly. It wasn’t too log after that that I ran my own lit­tle web page from the tilde-home direc­tory of the school’s com­puter. It was about as cheesy and bad as you’d expect.

netNinjaFast-forward three years. Between hacker talk and lit­tle plas­tic ninja toys dis­pensed from vend­ing machines, “net ninja” had become a reg­u­lar part of my vocab­u­lary. In the inter­ven­ing time, I had also learned a lot about writ­ing and host­ing web pages, includ­ing the fact that a nor­mal Joe — not directly asso­ci­ated with an edu­ca­tional facil­ity or cor­po­ra­tion — could pur­chase and use a domain name. This would have been the sum­mer lead­ing up to DefCon 4. June 1997, specif­i­cally. I grabbed the domain name and put up a web­site. I don’t have any imme­di­ately avail­able archives of that site. You can rest assured that it had a black back­ground and hor­i­zon­tal rules ani­mated with drip­ping blood and torches.

Since the begin­ning, I had a robots.txt file block­ing it from being indexed by search engines (and’s way­back machine, for that mat­ter). My line of think­ing was that you had to know about the site through some­one or some other site. You couldn’t just dis­cover it on Yahoo or AltaVista. Unfortunately, that also blocked it out from being archived. I think I may still have a cvs repos­i­tory some­where around here with the early his­tory, but it’s likely on a CD that is slowly dete­ri­o­rat­ing. Although I care enough about Netninja’s anniver­sary to write this post, I don’t care enough to find and dig through an old source con­trol sys­tem. The ear­li­est cap­ture on was from 1998, a year and a half after start. This was the sec­ond or third major revi­sion of the site.


spin_ninja21998: black was the new black and webrings ruled the inter­net. The site was basi­cally a col­lec­tion of sta­tic pages. I think there might have been a lit­tle bit of PHP glue to main­tain a nav­i­ga­tion, but it was mostly hard-coded web con­tent. The major­ity (or pos­si­bly entirety?) of the site was devoted to hack­ing and friends. You’ll note that “Brian Enigma” and “The Ninja” are two sep­a­rate entries. It’s been clear in my mind from the start that they are two sep­a­rate enti­ties.  I am not “a” or “the” Netninja. Netninja is either a gum­ball machine toy or a mys­te­ri­ous entity, depend­ing on con­text. And yet, the major­ity of email I received usu­ally equated the two.


smallbutton2_blinkBy 2000, I’d upgraded from Notepad.exe to vi. And hand-tested every­thing in Netscape and Lynx. Screw Internet Explorer. <hipster>You’ll note that I was steam­punk before steam­punk was cool.</hipster> I even 3D mod­eled and ani­mated the glow­ing but­tons myself. And yet, I hadn’t yet learned that webrings were lame.


By 2002, I’d writ­ten an honest-to-goodness blog­ging engine. We have the same bad steam­punk stylings, but all the pages switched from html to php, with a com­mon nav­i­ga­tion.

netninja-20040402 netninja-20050403

We go through a cou­ple iter­a­tions of the same, 2004 and 2005, improv­ing nav­i­ga­tion and adding a side­bar.


The biggest change (in infra­struc­ture and con­tent) was about 2007. I moved from my cus­tom site code to run­ning an instance of WordPress. This meant I could import a bunch of LiveJournal con­tent (of ques­tion­able qual­ity) going back to 2001. Typical LJ con­tent was what I did that day, navel-gazing intro­spec­tion, and angsty posts about music, movies, and tele­vi­sion. Existing hacker-related con­tent from the “old” site had to be man­u­ally migrated. The impor­tant stuff did, but I left a lot out. The new site for­mat also meant it was much eas­ier to post new con­tent. Adding a page to my cus­tom site frame­work usu­ally involved writ­ing HTML files that the tem­plate would pick up, pos­si­bly mak­ing changes to the tem­plate itself, and sync­ing the whole thing from my desk­top to the web­site. With WordPress, of course, you just open the edi­tor page and start typ­ing. Easy.


corporate_americaBy 2009, my pri­mary blog­ging engine was WordPress run­ning on Netninja. Everything got auto­mat­i­cally cross-posted to LiveJournal and a lot of the com­ment dis­cus­sion lived there, but the con­tent was mine. It lived here. I also did some tem­plate cus­tomiza­tion (though the css is a bit glitchy in the cap­ture) to make my site feel a bit more like LiveJournal, with cus­tom per-post user icons (such as the bar­code flag here).


We next go through a few more wood-grain iter­a­tions while the con­tent sub­tly shifts from per­sonal diary to things other peo­ple might actu­ally care about. That lat­ter ver­sions add a bit of parch­ment paper.


By 2011, is much more focused on tech and Portland and less about my daily life. We’re also in the graphic design phase I lov­ingly call “I can’t read this thin serif text on that Apple-inspired linen back­ground.”


We then, of course, have today’s Netninja. And that ret­ro­spec­tive con­cludes our digres­sion back to navel-gazing.

Posted in: Dear Diary

2014-05-26 16.48.57-2

On accurately measuring 2oz

I picked up some lab­o­ra­tory glass­ware, specif­i­cally for kitchen use, the other week. It’s all borosil­i­cate, so it’s effec­tively the same as Pyrex. Some of it will get used for drink­ing glasses but one item I picked up was a grad­u­ated cylin­der. My plan is to use it for mixed drinks. With a cock­tail jig­ger, it is easy to mea­sure out 1 or 2 ounces. But with a strong ingre­di­ent like cel­ery juice, 1oz may already be too much. Accurately exper­i­ment­ing with small vari­ances in vol­ume felt like the right way to go.

I did some math and found that 2oz ≈ 59mL. A 100mL cylin­der should work well. I ordered, it showed up, and I started to doubt my math. Or my abil­ity to order the cor­rect cylin­der. That doesn’t look quite right. I double-checked the mark­ings. Yep, it’s the right size cylin­der.

2014-05-26 16.48.57-2

In this pic­ture, the cylin­der is filled with col­ored liq­uid for bet­ter con­trast and there is a rub­ber band at the 59mL mark. Next to the cylin­der is my mea­sur­ing jig­ger: 2oz up top, 1oz down below. Even tak­ing into account that the jig­ger is a misleading-to-estimate cone whose open end is a lit­tle wider than the cylin­der, it feels like 59mL is way too much. Like maybe 30 would be more accu­rate.

I double-checked my math, asked Google and Wolfram Alpha, and it all worked out. 2oz = 59.15mL.

Of course, I then went the other direc­tion: I filled the jig­ger and dumped it into the cylin­der. That’s when things became a bit more clear.

2014-05-26 16.37.19-2

2oz as 60 mil­li­liters feels more accu­rate, but now I’m left to dis­cover that the unmarked jig­ger that I pre­vi­ously assumed was 2oz was really 50mL or 1.7oz.

I’ve been mak­ing weak drinks this whole time! (Well, admit­tedly, I often pur­posely make weaker-than-bar drinks because I often find myself look­ing for liq­uid refresh­ment more than I’m look­ing to get toasted.)

And, oddly enough, the 1oz jig­ger clocks in at roughly 31.5mL, or 1.1oz.

2014-05-26 17.13.42-2

Posted in: Dear Diary Food Projects

2014-05-26 16.03.11-2

Designing a fair 3-sided coin

A cou­ple of week­ends ago I played Betrayal at House on the Hill with a few friends. One of the stranger fea­tures of the game are the dice. They’re 6-sided die that act as 3-sided. They have pips for 0, 1, and 2 — two faces with each value.

2014-05-26 16.03.11-2

During the game, Jonathan brought up the fact that Von Neumann worked out a fair 3-sided “coin” of a dif­fer­ent geom­e­try that could work the same for this game. Instead of the coin being a cylin­der so short you don’t think of it as a cylin­der any­more, it’s extruded to have a sig­nif­i­cant height. There’s a num­ber on each end (the heads and tails of a tra­di­tional coin) plus a third option on the now-not-insignificant edge.


In my research, I have also run across a design that looks a lit­tle more like a Toblerone: a tri­an­gu­lar prism that’s either so long you couldn’t land it on either end (which seems too long for a sat­is­fy­ing roll) or one that is a lot shorter, but whose ends taper to a point. I am going to skip this vari­ant dur­ing this dis­cus­sion. It’s triv­ial to see how to make this one fair: start with an equi­lat­eral tri­an­gle and extrude it to a prism.


I have inten­tion­ally only skimmed the papers that talk in detail about the design of this 3-sided coin and how to arrive at the cor­rect ratio of diam­e­ter to height. I thought I might work it out for myself before run­ning off to view the spoil­ers.

The tall extreme (height)

If feels like the tallest you could pos­si­bly go would be to match the diam­e­ter of the cir­cle to its height. You effec­tively take a 6-sided die and lathe it down to a cylin­der.

h = 2r

But this intu­itively feels wrong. On the uni­form cube of a 6-sided die, you have one face at each end, but around the out­side (the edge of the cylin­der in this case) are four faces. It feels like you’d have a much higher prob­a­bil­ity of hit­ting the edge. Looking at a 3D model, it even looks dif­fi­cult  to hit either end:


The short extreme (sur­face area)

On a stan­dard 6-sided die each face has the same sur­face area, so maybe that’s the best way to go? If we try to match the sur­face area of one end to the sur­face area of the edge, we get to use a bit more math:

\text{end surface area} = \text{edge surface area} \\ \pi r^2 = 2\pi r h \\ \frac{\pi r^2}{r} = \frac{2 \pi r h}{r} \\ \pi r = 2 \pi h \\ \frac{\pi r}{\pi} = \frac{2 \pi h}{\pi} \\ r = 2 h \\ h = \frac{r}{2}

That makes the height half the radius. That’s a quar­ter of the diam­e­ter. Intuitively, that feels pretty darn short. In fact, it feels like the short­est pos­si­ble extreme. In a 3D ren­der, the edges look impos­si­ble to hit, like more of a 2-sided coin than a 3-sided one:


Conclusion (so far)

There is some middle-ground between the two extremes that I’m miss­ing. So far, I have been unable to come up with a good hypoth­e­sis that fits between the extremes. If I don’t come up with a good hypoth­e­sis in a week or so, I’ll “cheat” and dig into the papers for the cor­rect solu­tion (and hope it doesn’t involve any of the cal­cu­lus I’ve for­got­ten since col­lege).

Posted in: Games Projects

2014-05-11 11.42.03

And introducing: Cornelius

I real­ized that I’ve men­tioned this on Instagram and to a few friends, but have not yet made any ref­er­ence on this blog: I have a new kit­ten! His name is Cornelis!

He was born on February 21st at Enchanted Sphynx. I vis­ited him and his brother about a month ago.


And he came home two week­ends ago. It was an inter­est­ing road trip:

2014-05-03 14.29.28-1

We’re still get­ting fully set­tled in. He absolutely adores Norman, the indoor/outdoor tuxedo that showed up semi-feral on our doorstep. He shad­ows Norman around and tries to play with his tail. For the most part, Norman is indif­fer­ent (except for the tail-playing, which he dis­likes). The Precious is a dif­fer­ent story. She hates change and doesn’t like him. She’s warmed up to him slightly over the past cou­ple of weeks, but is still pretty frigid. It took her a few months to get used to Ebenezer, but they even­tu­ally became best bud­dies.


Posted in: Dear Diary


Building light-up R2D2 mouse ears (May the Fourth)

I basi­cally grew up at Disneyland. As a kid, my fam­ily lived about 20 min­utes away and we’d get to go twice a year: once on my birth­day and once on my sister’s.  In my 20s, I had an annual pass and would go on the week­ends, or just pop by for an hour after work to have din­ner, peo­ple­watch, and maybe catch a ride or two. My last 10 years have been in the pacific north­west, with only two or three Disneyland trips.

But I had a ran­dom thought last year. After play­ing with the Adafruit Neopixel strips on other projects, I thought I might attach them to some Disneyland mouse ears. I might even have the guts to wear those ears to the park next time I vis­ited.


I started with some mouse ears. I wasn’t totally cer­tain that offi­cial Disneyland mouse ears would be avail­able out­side of the park, but Google brought me to The Mouse Shoppe. Furthermore, I had no idea that there was such ear-hat vari­ety. Given that I was going to drop some elec­tron­ics into and onto the hat, I opted for R2D2.


The elec­tron­ics pack­age I came up with is nearly iden­ti­cal to Adafruit’s “Cyberpunk Spikes,” only wrapped around the ears rather than under some sil­i­cone spikes. My bill of mate­ri­als looks a bit like this:

The elec­tron­ics part of the build was fairly easy — the same as the Cuberpunk Spikes project, except with a gap between two LED strips. Getting every­thing attached to the hat in a way that looks decent was, for me, the chal­lenge.

My plan was this:

  • Wire the LEDs through the hat with enough slack wire to make them work­able.
  • Using tem­po­rary sol­der joints, ver­ify the LED’s wiring against the (unmounted) micro­con­troller and bat­tery. Unsolder the tem­po­rary joints.
  • Use small zip­ties to take in the slack between the LED strips.
  • Create a slip-out bat­tery har­ness using elas­tic.
  • Trim and sol­der the LED wires to the micro­con­troller.
  • Sew in the micro­con­troller.
  • Glue down the LEDs.
  • Sew down any other assorted loose wires.

The ear hat is made of a strange sort of rub­ber­ized fab­ric. Using a hobby knife, I made inci­sions, enough for three wires (power, ground, data) to fit through. A strip of 16 LEDs fit per­fectly around the cir­cum­fer­ence of an ear so I sol­dered leads to either end. I didn’t want them too short, as that would mean a lot of rework, and fig­ured I could eas­ily trim them later, so they were longer than nec­es­sary.

Using a hobby knife, I made an incision
Using a hobby knife, I made an inci­sion
The wires passing inside the hat. The big plastic thing is the backside of the ear mounts.
The wires pass­ing inside the hat. The big plas­tic thing is the back­side of the ear mounts.

Label the wires! This is impor­tant. I used black wire and wrapped the ends of the LED strips in elec­tri­cal tape to bet­ter con­ceal and pro­tect the sol­der joints. Without labels, it is easy to mix up your lines.

Label your wires. Relabel them if the labels don't fit through the incisions — and only pass one through at a time so you don't mix them up.
Label your wires. Relabel them if the labels don’t fit through the inci­sions — and only pass one through at a time so you don’t mix them up.

Pass the nice long wires through an inci­sion up near the next ear and care­fully wire them to the next strip of 16 LEDs. Once the two sets of LEDs were wired through the inci­sions, sol­dered in series, passed my ini­tial test­ing (but weren’t yet glued down), I pulled in some of the slack between the two strips and bun­dled it with a zip­tie.

Take in the excess wire
Take in the excess wire

I then held the bat­tery where the elas­tic har­ness would go: at the inside top cen­ter of the hat. The bat­tery is the heav­i­est piece, so I didn’t want it throw­ing off the hat’s cen­ter of grav­ity. I used per­ma­nent marker to mark its spot, then sewed in elas­tic strips.

Mark the battery's location.
Mark the battery’s loca­tion.

Mark the battery's position.
Mark the battery’s loca­tion.

Elastic sewn in.
Elastic sewn in.

Blue thread and strategic positioning helps the sewing blend in.
Blue thread and strate­gic posi­tion­ing helps the sewing blend in.

I then sewed down (gray thread this time) the leads between the first LED strip and the micro­con­troller, as well as the micro­con­troller itself. There was a spot on the out­side graph­ics that looked per­fect for the board.

The microcontroller sewn down. I went through the unused holes as well as around the wires.
The micro­con­troller sewn down. I went through the unused holes as well as around the wires.

The next step was to glue down the LED strips. I used clear sil­i­cone sealant then tem­porar­ily held every­thing in place with binder clips.


Finally, I sewed down the excess slack wire

Take in the slack.
Take in the slack.

This design has no power switch. You just snake the power exten­sion wire from the bat­tery to the micro­con­troller and connect/disconnect as needed.

Programming is easy. The USB port is exposed. Plug in and upload. I started with the sam­ple code for the Cyberpunk Spikes project, but tweaked it sig­nif­i­cantly to get those inward-spinning rain­bow wheels.

Br5s 2014.05.04_5

Posted in: Code Projects

shaving cylinders

A close shave

I started shav­ing, way back in the day, with an elec­tric razor, then switched to dis­pos­ables in my mid twen­ties. Four years ago, I switched to a safety razor. (See: My per­sonal devo­lu­tion in shav­ing) It was the pop­u­lar hip­ster thing to do at the time. The razor was, maybe $40, but the blades were pen­nies.

shaving cylinders

Using shav­ing soap with a brush is far supe­rior to foam from a can. The razor itself? The shave wasn’t as good at first, but I thought I would get more skilled at it over time. I did get bet­ter, but not really enough to match the multi-blade dis­pos­able. Cheeks and neck, no prob­lem. Chin and under the nose, it either didn’t get close enough or would get too close (blood!).

A few weeks ago, I picked up a Quattro razor as an exper­i­ment — my razor of choice back when I used dis­pos­ables. I find that the mul­ti­ple flex­i­ble blades give a remark­ably close shave, even in the prob­lem areas. But because I shave only a cou­ple of times a week and because my scruff doesn’t grow long, but thick, it clogs like crazy.


Based on this exper­i­ment, I think I have a new rou­tine: a first rough pass with the Merkur safety razor to get the major­ity of the scruff fol­lowed by a sec­ond detail pass with the Quattro. I like the old-timey and money-saving aspect of the safety razor, but I think I’ve finally learned that it just doesn’t *ahem* cut it for me as my one-and-only razor.


Posted in: Dear Diary


3D Printed Medieval Barbie Armor

I don’t have kids, don’t want kids, but I do have a cer­tain fas­ci­na­tion with toys. It prob­a­bly stems back to the ’80s when the toy sup­ple­ment to the Sears cat­a­log arrived each year, con­ve­niently timed to show up a few months before Christmas. I would comb through every page of that thing — well, every page that was not for girls or babies — think­ing and dream­ing and mem­o­riz­ing all the specs. All the kids looked so happy play­ing with their new Transformers and the Star Wars fig­ures and vehi­cles. I wanted all of them. I ear­marked the pages con­tain­ing the taller-than-a-kid Space Warp mar­ble track, and espe­cially the Omnibot 2000. (Neither of which I ever received.) But my favorite toys were always related to build­ing and learn­ing.

As an adult I do not buy very many toys (and by exten­sion, gad­gets), but I always have to stop at the sci­ence museum gift shop. I keep up to date on the lat­est giz­mos. It is no coin­ci­dence that most stuff com­ing out of my 3D printer tends to be toys, trin­kets, puz­zles, and geo­met­ric odd­i­ties.

Certain toys jump out at me more than oth­ers. Since becom­ing aware of STE[A]M (Science, Technology, Engineering, [Art,] and Math), I now pay spe­cial atten­tion to toys that try to break girls out of the pink aisle at Toys-Я-Us. Last year that was Goldie Blox, which com­bines sto­ry­telling with engi­neer­ing. Just this week it is Faire Play: Barbie-Compatible 3D Printed Medieval Armor from an inter­net friend, Zheng3, on Kickstarter. I have men­tioned him a few other times on this blog. Notably, he devel­oped Seej, the 3D print­able table­top bat­tle game that reminds me of another favorite 80s game, Crossbows and Catapults. My own small con­tri­bu­tion to the game was a mod­u­lar penny cat­a­pult I designed two years ago.

Zheng3’s Kickstarter project is to design 3D print­able medieval armor for Barbie dolls. I see this as being a great tran­si­tion to help girls ease their doll play from “let’s go shop­ping,” “let’s cook din­ner,” or even “some day Prince Charming will come” to a much more active and kick-ass “let’s fight that nasty dragon and save the vil­lage.” In addi­tion to the straight-up cos­tume play, I would hope the 3D-printed aspect might be an extra inspi­ra­tion. Maybe the kids have direct access to a 3D printer — be it a parent’s, at a friend’s house, or the Cube printer at the local Office Depot — and see the armor being printed, hope­fully lead­ing to curios­ity into how the 3D printer works. Or maybe they’re inspired to see they can mod­ify toys in their own cus­tom ways, whether it is by invent­ing their own 3D mod­els or more low-tech, like mold­ing in Fimo clay.

barbie_armor barbie_athena


He’s already devel­oped and released The Athena Makeover Kit (pic­tured on the right), which includes spear, shield, and winged boots. The thing I find kind of inter­est­ing is how strangely mis­shapen and bloated the boots look. Go ahead — click through to the Thingiverse page and select the boot model thumb­nail image. Careful eyes will see that Barbie’s feet are pre-molded for high-heel shoes. The out­stretched foot is not very com­pat­i­ble with boots, so the boots had to adapt, had to become more bulky at the ankle.

So whether you have kids who play with Barbies or whether you just like the spirit of the project, I’d encour­age you to con­tribute a few dol­lars to his kick­starter:

Posted in: MakerBot


Calca: the notepad calculator

For years, I’ve been search­ing for a good free-form sym­bolic cal­cu­la­tor pro­gram that works across mul­ti­ple desk­top oper­at­ing sys­tems. I think I’ve finally found one worth men­tion­ing. My goals:

  • Be able to enter expres­sions sim­i­lar to what I could do on a TI-85, back in the day, for exam­ple: 2^2+(2*10)
  • Be able to eas­ily edit and copy previously-entered expres­sions.
  • Input/output hex. I work in hex a lot. This includes expres­sions (0x48+0x16) as well as base con­ver­sion (0xC3 as decimal or 0b110101 as decimal) and bit­wise math (0xFC AND 0x7F).
  • Lightweight. Quick to load, quick to cal­cu­late. Get in, get out. Or leave it run­ning in the back­ground with­out eat­ing a ton of resources. I don’t need or want Mathematica or Maxima.
  • It needs to min­i­mally run on Windows and Mac. Ideally a Linux ver­sion would be avail­able, too. I write code on Linux (work) and Mac (home), but my office Windows box ends up being my doc­u­men­ta­tion ref­er­ence, scratch­pad, cal­cu­la­tor, and every­thing else non-coding because I typ­i­cally run my Linux IDE full-screen (bridged with Synergy, nat­u­rally).

I’d pre­vi­ously got­ten hooked on Soulver. It’s great on the Mac, but there are not Windows or Linux ports. There is an iOS port, but I can’t stand the data entry. SpeedCrunch is avail­able for all plat­forms, but like many Open Source pro­grams, the oper­a­tion and user inter­face is clunky.

A few months back, I found Calca, “the text edi­tor that loves math,” for Windows and Mac. It lit­er­ally is a text edi­tor. The trick is that it looks for “=” and inter­prets these as def­i­n­i­tion state­ments and it looks for “=>”, and treats these lines as prob­lems to solve. Everything from “=>” to the end of the line is rewrit­ten to become a read-only answer. For exam­ple:


I don’t come close to using all the fea­tures in Calca: func­tions, unit/currency con­ver­sion, matrix math, deriv­a­tives, and so on. My needs are small, but with the pieces I do use, it per­forms extremely well.

A few things I don’t like about Calca:

  • There are no bit­wise shifts or inver­sions. I some­times run into cases where a 32-bit inte­ger is com­posed of sev­eral unaligned bit fields. For instance, bits 5..7 might be one field. It would be great to say: 0x1234 >> 5 & 0b111
  • I fre­quently get con­fused with base con­ver­sion syn­tax. Is it “as dec” or “in dec”? I fre­quently pick the wrong one.
  • Having to type “=>” at the end of each line is typo­graph­i­cally awk­ward. I appre­ci­ate Soulver hav­ing a sec­ond col­umn that auto-updates as you type.
  • It would be nice to have a “pre­vi­ous answer” sym­bol. The TI cal­cu­la­tors auto­mat­i­cally insert an “Ans” vari­able (a place­holder for the pre­vi­ous line’s answer) if you start a new line with an oper­a­tor instead of an operand.

For me, it was worth buy­ing both a Windows and Mac license. I use it all the time.

Posted in: Software Work


Puzzled Pint Portland heat map

In response to the pre­vi­ous post (Puzzled Pint sur­veys and met­rics), some­one had sug­gested build­ing a heat map. I built a fairly prim­i­tive one with Google Earth and a short Ruby script. The radius of each cir­cle is pro­por­tional to the num­ber of atten­dees. The height is random-ish and only varies to help dis­tin­guish over­lap­ping cir­cles.


It’s hard to really to pull any great con­clu­sions from the 25 data points. Most impor­tantly, I don’t know of a way to nor­mal­ize for our growth over time or how fac­tor in the sea­sonal atten­dance flux. In an ideal data set, those could be fac­tored in and we’d track strictly attendence-for-location with­out also track­ing attendance-for-{other vari­able}. Still, it’s a nice look­ing chart and I learned a thing or two about KML.

Posted in: Code Portland Puzzle Games