Development Posts

Sunday, May 8, 2022

Symbology is played on a grid. When I heard about CSS grids, I was excited. But from what I've tried, they don't work with SVG. This likely has to do with the fact that there is no sized container element in SVG, so there is nothing to fit the grid into. No matter, we can implement our own grid! With custom properties! And data attributes!

read more …

Tuesday, May 3, 2022

This post is the beginning of a series of technical writeups of things I learned creating the game Symbology. Some things I demonstrate here may not be good ideas for general app development. Symbology is a game, so I consider it more art than infrastructure. That is to say, read this content as things that can be done, and not necessarily as things that should be done.

read more …

Saturday, April 30, 2022

My jaw is on the floor today as I learn that I have never mentioned on this blog a project that I have spent significant time on. I only learned this because I've just released a major update after a couple of years of inactivity. I was going to reference the original announcement in this one, but it doesn't exist!

read more …

Monday, February 28, 2022

It has been a month since my last DeWordle post. In that time, I've given DeWordle a near-complete rewrite and redesign. I've refocused it on being a tool to think about Wordle games, instead of trying to be a game in itself. Like any tool, you can make up your own games to play with it, but using it as a tool to analyse gameplay is where I've had the most fun with it, and is what I'm going to do in the rest of this post.

read more …

Thursday, January 27, 2022

Welcome to De-Wordle, the game. My last two blog posts here have been about how you can solve Wordle games only by looking at colored-block summaries, without knowing any of the words that were guessed. Now you can try it at https://dewordle.beerriot.com/.

read more …

Monday, January 24, 2022

Remember when I said, "This [Wordle-solving] method is the epitome of 'garbage in, garbage out"? It seems that it fell to "garbage in" yesterday. Some of the tweets I picked up are not correct for Wordle 219.

read more …

Sunday, January 23, 2022

Like the rest of the English-tweeting world, I've been playing Wordle. I've been lucky that no one in my twitter network is posting spoilers. They're only posting the colored-squares diagram overviews of their games.

read more …

Wednesday, January 5, 2022

While I was writing other things throughout December, the new 1.0 spec for the Quite Okay Image Format was released. I've just updated my Erlang implementation of QOI, so I've been comparing its performance on the test images from my last post about it.

read more …

Wednesday, December 29, 2021

And so we reach the end of the Advent of Code. The final puzzle, Day 25, is straightforward, if a little tricky to get the what-was-what-is states correct. My code is in my github repo, but as it's just another list-walking substitution, I don't think it's worth discussing here. Instead, in this post I'll share my thoughts on the event.

read more …

Tuesday, December 28, 2021

I almost wonder if I would have had a quicker solution time on Advent of Code's Day 24 puzzle if I had tried to do it while distracted with holiday celebrations, instead of deciding there was no way I could attempt it without clear focus time. I spun my wheels for a long time overengineering part of the solution, because I had convinced myself after a first, quick, read that this problem was reversing a hash, and so its search space would be huge, even after I figured out the "trick". It's not pencil-and-paper small with my final technique, but it is still milliseconds-of-computer-time small all the same.

read more …

Saturday, December 25, 2021

Between a complicated Day 23 puzzle, and last-minute holiday gift work (and holiday celebration!), I've fallen behind in Advent of Code. But, I do finally have a solution for Day 23, so let's dig in.

read more …

Thursday, December 23, 2021

I haven't tried Advent of Code Day 23 yet. I want to think about which approach to take. While I'm delaying that, why don't we talk about a puzzle writeup I've been delaying - Day 11.

read more …

Wednesday, December 22, 2021

Twenty-two days into Advent of Code, it finally happened: I predicted what Part 2 would require! Not that I let the prediction guide me away from an overly simple Part 1 implementation, that I knew I would throw away. But I saw it coming.

read more …

Tuesday, December 21, 2021

I don't often rewrite everything between Part 1 and Part 2 of the Advent of Code puzzles. But I sure did for Day 21.

read more …

Monday, December 20, 2021

Ah, parenthesis/brace/bracket balancing. A classic. Using the right-hand-rule on Day 19, was not the first time the Advent of Code has given me college flashbacks. Day 10 could have come off a 6.001 problem set.

read more …

Monday, December 20, 2021

I considered doing more bit mashing, bit masking, bit matching today. I really did. Advent of Code, Day 20 backs the time commitment down from Day 19 far enough that it was tempting to spend time on efficiency. But a very tiny amount of pre-processing of these images and enhancement algorithms, makes a simpler route much more fun:

read more …

Monday, December 20, 2021

While we give people a few more hours to recover from Day 19 and delight in the relative ease of Day 20, let's take a trip back through time and discuss Advent of Code, Day 9. We're back to looking at a tile of numbers, and comparing them to their neighbors.

read more …

Sunday, December 19, 2021

Oh, the irony of writing about the day that people complained about most, on the day that people were about to complain about even more! Since the Day 19 puzzle has been released, I've seen cries everywhere from, "I'm tapping out," to, "End me." I also was not sure I was going to be able to solve it at first, but I dove in anyway, starting with my secret weapon: sleep.

read more …

Saturday, December 18, 2021

Looking at memes in the various Advent of Code 2021 threads, there is one day that seems to have more complaints than any other: Day 8, the scrambled seven-segment LED.

read more …

Saturday, December 18, 2021

If you're looking at the per-day leaderboard (an activity I don't recommend spending too much time on, but is fun anyway), it's easy to see the puzzles are heating up! The longest first time to both stars before this was Day 16 at 9:52. Today, it nearly doubled to 17:13! What's going on?

read more …

Friday, December 17, 2021

Oh good, this series has made it to Day 7, the day that I wasn't sure my code was "right", but did give the correct answer.

read more …

Friday, December 17, 2021

Calling it "Advent of Code" sort of presupposes that there should be code involved. Without starting a flamewar about what is and isn't code, I want to say: sometimes you really don't need code to answer the puzzle.

read more …

Thursday, December 16, 2021

The storm I was worried about mainly went south of me. The local airport weather records say our winds topped out at a brief 35mph sustained, and one 40mph gust. Starlink kept right on shuttling bits the whole time, so I was able to check out Advent of Code 2021, Day 16 right away.

read more …

Thursday, December 16, 2021

It's fun revisiting the earlier puzzles to write about them after having done the later puzzles. Similarities show up that I hadn't considered at the time. For example, Day 6, which has the same sort of modeling-space growth problem as Day 14.

read more …

Thursday, December 16, 2021

There's probably a good way to solve Advent of Code 2021, Day 5 without actually rendering the lines, as shown in the puzzle description, but rendering the lines provided such a good debugging aid that I couldn't see bothering with other methods.

read more …

Wednesday, December 15, 2021

Remember on Day 12, when I said I wasn't particularly well versed in path plotting? Welcome to Advent of Code 2021, Day 15, where that's the name of the game. We have to find the "path of least risk" through a grid of tiles with varying risk levels. This one took me a while.

read more …

Wednesday, December 15, 2021

Here I've been going on and on about how recent Advent Of Code days have had more complex parsing than earlier days, when I completely forgot about Bingo on Day 4. The timestamp in the git repo says I finished this puzzle at 6pm. I think the fact that I was hungry for dinner shows in the code.

read more …

Tuesday, December 14, 2021

Okay, Day 14 of Advent of Code 2021 was fun. I had a good time solving it last night, and had a good time again cleaning up that code to share this morning.

read more …

Tuesday, December 14, 2021

Wasn't I just talking about enjoying Erlang's binary/bit-level pattern matching? Today is full of it!

read more …

Monday, December 13, 2021

After posting Day 1's write-up, I had about half an hour before the Day 13 puzzle was released. I stepped away from my computer, and played guitar … for an hour. After that, I could feel the day's cross-country skiing catching up, so I decided to stretch. And after that I decided it was too late, and I should just sleep and tackle Day 13 in the morning.

read more …

Monday, December 13, 2021

While I wait for it to get a little later into Day 13, before posting spoilers for those that haven't solved it yet, let's talk about Day 2.

read more …

Sunday, December 12, 2021

While I'm waiting for the Day 13 puzzle to unlock, let's jump back in time and talk about Advent of Code Day 1. This one was a nice smoke test to demonstrate how the puzzle workflow goes. Get an evironment set up. Read and parse a file. Learn that the second half will use the same input, but alter the analysis in some way.

read more …

Sunday, December 12, 2021

I'm not sure if Advent of Code is the cause of, or the salve for my nagging urge to code. But, I've decided to give it a try this year. I am not a competition coder, so you'll never see my name on the leaderboard. But, it's Day 12, and I've had fun solving each problem so far. I think some of the tasks are getting interesting, so I'm going to try out a blog series about my solutions.

read more …

Monday, December 6, 2021

I had a nagging urge to code recently. An urge not quite strong enough to get me into one of the larger projects I have sitting around. I just wanted a few hours, not a few days, of fiddling. In a moment of serendipity, I saw a few posts about someone experimenting with a new, simple image compression format they called the "Quite Okay Image (QOI)" format. Bit twiddling? Sounds perfect!

read more …

Monday, June 21, 2021

If you're seeing this post, DNS has updated, and you've been directed to my new blog hosting. If I've done everything correctly, all of my previous posts are available here, at the same URLs. Hopefully I've even set up the Atom feed so that anyone using a feed reader has been automatically redirected as well.

read more …

Wednesday, May 19, 2021

One reason I haven't worked on fixing my obstructions before now is that winter makes the ground impenetrable, and the roofs treacherous. The second reason is that I didn't want to attempt any solutions without having data to guide me.

read more …

Monday, May 3, 2021

Every time I post pictures of a project I've completed, someone will ask if I have plans I can share. I never do. I have sketches with numbers near them, but I am confident that no one would be able to interpret them. If it has been too long since I made the project, I might have trouble interpreting them myself!

read more …

Sunday, February 14, 2021

Update, June 2021. This month, Starlink released an update to their mobile app that produces an image similar to what I was trying here. Hopefully some day they talk publicly about the feature, so I can lean how far off I was on implementation details.

read more …

Friday, July 6, 2018

But there's the trouble. To get back the address of the originating account, you have to have both the signature and the original field values. If you supply different field values, you don't get, "This signature doesn't match," you get, "This transaction came from a completely different account."

read more …

Tuesday, June 5, 2018

"What is NoSQL?" was an impossible question to answer. Beyond, "A database that doesn't use SQL," it meant something different to each person involved. "What is Blockchain?" is the same way.

read more …

Saturday, March 11, 2017

Last week, Peter Bailis announced a new tool for smoothing timeseries data for plotting, called ASAP:

read more …

Saturday, March 4, 2017

Strike up the band, it's time for the eighth, and final, installment of this fermentation instrumentation series. In part four, I placed several different sensors in several different carboys of beer beginning fermentation. In parts six and seven, I analyzed a week of data from two of the sensors. This post will cover the third sensor, a floating accelerometer.

read more …

Saturday, March 4, 2017

Keeping on the hop, it's time for part seven of this fermentation instrumentation series. In part four, I placed a few different sensors in some actively fermenting beer to gather data. In the previous post, I looked at data from a commercial sensor. Now it's time to examine the data from my experimental pressure sensor.

read more …

Friday, March 3, 2017

Welcome back for part six of the fermentation instrumentation series. In part four, I placed a few different sensors in some actively fermenting beer to gather data. A week has now passed, and I've bottled the beer. Time to look at the data. Let's start with the device we know - the BeerBug.

read more …

Thursday, February 23, 2017

Welcome back for part five of the fermentation instrumentation series. In part four, I placed a few different sensors in some actively fermenting beer to gather data. I now have a few days of pressures and force vectors to analyze …

read more …

Monday, February 20, 2017

This is part four of a series on monitoring homebrew fermentation. In parts one, two, and three, I experimented with data I downloaded from one platform and uploaded to another. In this part, I create some new sensors to try.

read more …

Sunday, January 29, 2017

My code is ugly, but it works, so it's time to post part three of this series. In part one, I downloaded data captured by my BeerBug. In part two, I uploaded it to the Helium platform. In this entry, I'll read use Helium's API to query and graph the data.

read more …

Monday, January 16, 2017

This piece originally appeared on the Honeycomb.io blog as part of a series on instrumentation.

read more …

Saturday, January 7, 2017

Welcome back for part two. In part one, I explained how I exported my historical brewing data from The BeerBug's website. In this part, I'm going to demonstrate what I've learned about one alternative, the Helium platform.

read more …

Sunday, January 1, 2017

I'm not super into the Internet-of-Things. There are no wifi lightbulbs, electronic locks, or smart thermostats in my house. But, I'm a homebrewer, and that means I love new ways to get data about my beer. I backed The BeerBug on Kickstarter, and I've used it on a number of batches since early 2014.

read more …

Saturday, October 1, 2011

It has long bugged many of the Webmachine hackers that this relationship with Alan Dean's HTTP flowchart is one-way. Webmachine was made from that graph, but that graph wasn't made from Webmachine. I decided to change that in my evenings last week.

read more …

Friday, March 4, 2011

If you were interested in my last bit of alternative code-geekery, you may also be interested to hear that I've pushed that NerdKit Gaming code farther. If you browse the github repository now, you'll find that the game also includes a highscore board, saved in EEPROM so it persists across reboot. It also features a power-saving mode that kicks in if you don't touch any buttons for about a minute. Key-repeat now also allows the player to hold a button down, instead of pressing it repeatedly, in order to move the cursor multiple spaces.

read more …

Monday, February 14, 2011

Contrary to the evidence on this blog, not all of the code I write is in Erlang. It's not even all web-based or dealing with distributed systems. In fact, this week I spent my evenings writing C for an embedded device.

read more …

Wednesday, January 26, 2011

If you enjoyed my last post on the Basho Blog, about computing baseball stats using Riak's map/reduce, you may also enjoy my followup post about dealing with (or avoiding) records that have been split across block boundaries.

read more …

Thursday, January 20, 2011

The luwak_mr tool I wrote about last weekend kept my imagination chugging this week. The result? I've learned a bit about baseball, and written code to compute batting average using luwak_mr (and Riak map/reduce, of course).

read more …

Sunday, January 16, 2011

I was inspired, this weekend, by off-list discussion of Luwak and by Guy Steele's talk How to Think about Parallel Programming—Not!. The two seemed naturally attracted, and thus I created the luwak_mr module.

read more …

Thursday, December 3, 2009

Now that iPhone webapps are all the rage, I thought I'd release one of my own. Behold: the Spinner for iPhone and Dashboard. Good riddance to indecision - let the spinner choose!

read more …

Friday, May 29, 2009

Many people have asked for an example Webmachine resource that responds to POST. If you follow my twitter feed, you may have caught this gem.

read more …

Friday, May 29, 2009

Justin Sheehy has just posted his video slideshow introduction to webmachine. The video contains the slides and most of the talk that Justin gave at the Bay Area Erlang Factory last month. If you've been thinking about checking out Webmachine, this half hour is well worth your time.

read more …

Monday, May 18, 2009

Alright, here it is, proof that Webmachine and CouchDB can coexist peacefully: I've posted an example Webmachine resource that proxies requests back and forth to a CouchDB instance. (Thanks for the kick, benoitc.)

read more …

Monday, April 27, 2009

This is the final entry in a four-part series that demonstrates how to take the simple os-environment Webmachine resource, and expand it to support modification, authorization, and conditional requests. Today I add support for DELETE.

read more …

Friday, April 24, 2009

This is the third in a four-part series that demonstrates how to take the simple os-environment Webmachine resource I wrote last week, and expand it to support modification, authorization, and conditional requests. Today I add conditional requests through ETags.

read more …

Thursday, April 23, 2009

This post continues a four-part series that demonstrates how to take the simple os-environment Webmachine resource I wrote last week, and expand it to support modification, authorization, and conditional requests. Today I add basic authorization.

read more …

Wednesday, April 22, 2009

This post begins a four-part series that demonstrates how to take the simple os-environment Webmachine resource I wrote last week, and expand it to support modification, authorization, and conditional requests. Modification via PUT is up first.

read more …

Friday, March 20, 2009

I thought, "Wouldn't it be cool if your webserver could plot the path it took on that chart in handling a request?" Well, now it can - if you're using the latest Webmachine.

read more …

Tuesday, February 3, 2009

Erlang's dynamic nature came in useful for me on BeerRiot last night. I've blogged about hot code loading before, but last night I dipped into the world of OTP applications and Mnesia.

read more …

Sunday, February 1, 2009

A year in the making, almost completely rewritten, I can't bear to hold it back any longer: today I release the new BeerRiot. Here's a synopsis of the changes for you:

read more …

Tuesday, December 2, 2008

Unfortunately, I only found out this morning that some of you probably thought I had given up on BeerRiot. A month or so ago, I started hosting another domain on the same server, and thought I'd set up Yaws to handle that properly. Unfortunately, I botched it bad enough that while beerriot.com still worked, www.beerriot.com didn't. Sorry!

read more …

Tuesday, January 1, 2008

If you read the news, you'll know that tuneups are happening behind the scenes of BeerRiot. If you came to this blog after reading that story, you're wondering what, exactly, they are.

read more …

Sunday, December 16, 2007

I've just committed a couple of minor updates to the erlang2facebook library that I'm sure some of you are interested in.

read more …

Saturday, November 3, 2007

In case you're using this blog's feed to get updates about new features on BeerRiot, here's a notice that BeerRiot now has its own feeds. :)

read more …

Sunday, October 28, 2007

Yes, the update I promised earlier in the week is now live. BeerRiot's Forums are now open for discussion.

read more …

Tuesday, October 23, 2007

...I'm still alive and plugging away at BeerRiot code. I thought you all might just like to hear that despite the fact that I haven't made a post here in a while, or updated the news section on the site, development is far from dead. There are things in the works, and I hope they will be ready soon.

read more …

Thursday, September 27, 2007

Just a quick note this evening: BeerRiot was down from about 3:30am to 8am this morning. The MySQL server shut down. I restarted it as soon as I found it down.

read more …

Sunday, August 19, 2007

I bet there are a lot of people still questioning the utility of hot code loading. Especially in the web app field, it can seem a little gratuitous. PHP apps don't need any special hot load facility - the script just gets reread from disk every once in a while.

read more …

Thursday, July 26, 2007

As promised, here's the post about the development process of the BeerRiot Facebook app.

read more …

Tuesday, July 24, 2007

Yes, I promised new things well over a week ago. My excuse is that I picked up a cold during my trip to the Middle of Nowhere that took me out of commission for a solid week. :P But, now that that is over...

read more …

Sunday, June 24, 2007

I'm not a fan of "settings" pages. They give a terrible interaction experience.

read more …

Wednesday, June 20, 2007

Don't Throw Out Maybe Yet!

read more …

Saturday, June 9, 2007

To those who are considering Erlang and Erlyweb as a framework for their website: just go for it.

read more …

Wednesday, June 6, 2007

As some of you may have noticed, BeerRiot - Local is live. Thanks to Corey for planting the seed - it's a mashup of Brewery locations and Google Maps. It's not exactly what I had planned at the outset, but I think it may be even better. :)

read more …

Friday, June 1, 2007

Fear not! I have not forgotten about BeerRiot. No new features have come online yet because this week has been rather busy for me.

read more …