duncangmstuart.com Open in urlscan Pro
2606:4700:3035::ac43:d544  Public Scan

Submitted URL: https://www.duncangmstuart.co.uk/
Effective URL: https://duncangmstuart.com/
Submission: On November 12 via api from US — Scanned from US

Form analysis 2 forms found in the DOM

GET https://duncangmstuart.com/

<form role="search" aria-label="Search for:" method="get" class="search-form" action="https://duncangmstuart.com/">
  <label for="search-form-1">
    <span class="screen-reader-text"> Search for: </span>
    <input type="search" id="search-form-1" class="search-field" placeholder="Search …" value="" name="s">
  </label>
  <input type="submit" class="search-submit" value="Search">
</form>

GET https://duncangmstuart.com/

<form role="search" method="get" action="https://duncangmstuart.com/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search"><label class="wp-block-search__label" for="wp-block-search__input-2">Search</label>
  <div class="wp-block-search__inside-wrapper "><input class="wp-block-search__input" id="wp-block-search__input-2" placeholder="" value="" type="search" name="s" required=""><button aria-label="Search"
      class="wp-block-search__button wp-element-button" type="submit">Search</button></div>
</form>

Text Content

Skip to the content
Search


DUNCAN G M STUART

Some of my thoughts and ideas on swing dancing, board games and more
Menu
 * About

Search
Search for:
Close search
Close Menu
 * About


Categories
Board Games Swing Dance


WHAT WOULD A SOLO JAZZ CARD GAME LOOK LIKE?

 * Post author By
 * Post date 2015-02-12
 * No Comments on What would a Solo Jazz card game look like?

I’ve recently started getting into board games and I’ve become obsessed with the
excellent review site Shut Up & Sit Down. In one of their podcasts (I can’t
remember which one) they talked about an interview with video game designer Sid
Meier. He was asked “which comes first: the theme or the mechanics?”

It’s a good question. Games seem to work well when the theme and mechanics
complement and reinforce each other, but this must be a hard balance to strike.

His answer was something along the lines of this: first you pick a topic that
you enjoy (mediaeval sieges, competitive winemaking, beehive management), then
you identify what’s fun about it, and base your mechanics on that.




SO WHAT’S A TOPIC I ENJOY?

I spend quite a lot of time dancing to Swing and Hot Jazz from the 20’s and 30s.
The solo dance form to that music is variously referred to as Solo Jazz, Jazz
Roots, Solo Charleston or Authentic jazz.

Sometimes it’s just social, sometimes it’s for formal or informal competition.
You can dance it on your own, simultaneously with other people, or one at a time
showing off in a jam.

But my favourite form is one-on-one, face-to face: trading one phrase at a time
– showing your own ideas about the music but also taking what the other guy did
and improving on it: duplicate and elaborate.

…which I realised a few days ago sounds like a pretty interesting concept for a
game.

If I took what is fun about solo jazz dancing, and expressed that in terms of
game mechanics: what would that look like?



Continue reading “What would a Solo Jazz card game look like?”


--------------------------------------------------------------------------------

Categories
Board Games


SETTLERS OF CATAN – UNDERSTANDING THE BALANCE OF RESOURCES

 * Post author By
 * Post date 2014-05-03
 * No Comments on Settlers of Catan – Understanding the balance of resources

Part of what makes Settlers of Catan such a great game is how well balanced it
is. Part of that balance is the way in which the importance of various resources
changes throughout the game, requiring players to adapt their strategies
accordingly.



by Jessy Roos on Flickr

Continue reading “Settlers of Catan – Understanding the balance of resources”


--------------------------------------------------------------------------------

Categories
Code


PATHS IN OSX 10.6 (SNOW LEOPARD)

 * Post author By
 * Post date 2013-09-15
 * No Comments on Paths in OSX 10.6 (Snow Leopard)

I’ve recently being doing a cleanup of my dotfiles (more on that later). In the
process I commented out all of the “export PATH=...” statements in the profile
and rc files in my home directory, but my path was still getting set to this:

/bin:/usr/bin:/sbin:/usr/sbin:usr/local/bin:/usr/local/git/bin:/usr/X11/bin

There are three problems with this:

 1. I’d prefer my /usr/local/bin to be first
 2. I don’t want/need either of those git/x11 paths
 3. I don’t like not understanding where things are getting set!

I eventually worked out that it came down to some files in my /etc directory :

#/etc/paths
/bin
/usr/bin
/sbin
/usr/sbin
/usr/local/bin

#/etc/paths.d/git
/usr/local/git/bin

#/etc/paths.d/x11
/usr/X11/bin

The paths.d method actually makes a lot of sense for a certain kind of
application: it’s a nice clean way of adding bin files to the path nice and
early (before any local modifications to the path).

Here’s the full order in which my paths were getting loaded in (I’m using
zshell):

/etc/profile
/etc/profile.d/*
~/.zshrc (which loads in ~/.profile)

Apparently /etc/profile can come into play as well, but mine doesn’t set the
path so I’m not sure what the ordering is. Indeed it looks like /etc can have
it’s own set of shell-specific configs as well (mine seems to have a default
bashrc), but that’s a whole other ballgame.


MY SOLUTION

Now that I properly understand how my path is getting generated, I’m comfortable
setting it from scratch in my local profile:

#~/.profile
export PATH=/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin

I prefer to have /usr/local/bin first, because this means that I can install
things in /usr/local and symlink them into /usr/local/bin without conflicting
with any old versions which came bundled with the operating system (and thus
live in /usr/bin)

I could have achieved the same effect by editing /etc/paths, but I’d like to try
and make my dotfiles as portable as possible

The following posts really helped me understand all this:

http://craiccomputing.blogspot.co.uk/2010/10/etcpathsd-as-way-to-configure-paths-in.html

http://superuser.com/questions/69130/where-does-path-get-set-in-os-x-10-6-snow-leopard



--------------------------------------------------------------------------------

Categories
Code


REMOVING DUPLICATED RVM LINES FROM ZSH CONFIG FILES

 * Post author By
 * Post date 2013-09-07
 * 1 Comment on Removing duplicated rvm lines from zsh config files

I’ve just been cleaning up my zshell config files. I noticed that the following
lines were at the end of both my .zshrc and .zprofile files:

# Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

I’m not sure how I got into that situation, but this duplication was an itch
which had to be scratched.

Removing this from .zshrc gives the following error when trying to use rvm:

Warning! PATH is not properly set up, '/Users/duncanstuart/.rvm/gems/ruby-2.0.0-p247/bin' is not at first place,
usually this is caused by shell initialization files - check them for 'PATH=...' entries,
it might also help to re-add RVM to your dotfiles: 'rvm get stable --auto-dotfiles',
to fix temporarily in this shell session run: 'rvm use ruby-2.0.0-p247'.

This is fair enough: for reasons I don’t fully understand, rvm needs a bunch of
paths to be at the very beginning of PATH – that’s why the lines in question
need to be at the end of the .zshrc file. Looking at my path (echo $PATH), those
paths are in the middle somewhere – presumably being added by .zprofile. No
good.

On the other hand, removing this from .zprofile gave me a couple of  errors from
rvm on opening a new terminal:

/Users/duncanstuart/.rvm/scripts/initialize:42: __rvm_cleanse_variables: function definition file not found

…and also something like curl (6) Couldn't resolve host 'rubygems.org' (I’ve
lost that actual error message).

A search on stackoverflow suggested the thing to do was to remove
 ~/.zshcompdump

As far as I can understand from the zshell docs, this is something to do with
autocompletion:

> To speed up the running of compinit, it can be made to produce a dumped
> configuration that will be read in on future invocations; […] The dumped file
> is .zcompdump in the same directory as the startup files

Fine – sounds very deletable. And indeed, deleting it removes the errors, so I
can happily leave those lines out of my .zprofile. Also, as expected, a fresh
.zcompdump got generated.

One final thing: I noticed that opening a new terminal was taking slightly
longer than before. Compiling the new .zcompdump seems to shave off a couple of
milliseconds and makes it feel nice and responsive again:

% zcompile .zcompdump



--------------------------------------------------------------------------------

Categories
Uncategorized


COMPUTER SYNESTHESIA?

 * Post author By
 * Post date 2012-12-07
 * No Comments on Computer synesthesia?

I just realised something: when I have copied text to paste elsewhere (as I do
tens of times every day) I experience the fact that I ‘have’ text as a physical
sensation, like I’m actually holding on to an object, which I then release by
pasting.

Given how much and how regularly I use a computer it’s in no way surprising that
it should have effects on my psychology.



--------------------------------------------------------------------------------

Categories
Uncategorized


JABBERWOCKY IN GERMAN

 * Post author By
 * Post date 2012-06-15
 * No Comments on Jabberwocky in German

Following up on my previous post about recitals of Jabberwocky, here’s my
friend Muriel (of Dating blog ‘I Wish There Were A Manual For Life’) reciting in
her native German:

DER JAMMERWOCH:

German text, English text



--------------------------------------------------------------------------------

Categories
Music


ON HOW THINGS CAN WORK OUT PRETTY WELL SOMETIMES

 * Post author By
 * Post date 2012-06-11
 * 2 Comments on On how things can work out pretty well sometimes

“OMG SO MANY GREAT BANDS!”

Kai Wong’s gorgeous programme design

I somehow stumbled across the existence of No Direction Home Festival about a
week before the gates opened, fell in love with the lineup (Rachael Dadd, Wave
Pictures, Laish, Veronica Falls) and felt the familiar craving to be out in a
field in beautiful sunny surroundings with a pint of cider and a band playing.


Continue reading “On how things can work out pretty well sometimes”


--------------------------------------------------------------------------------

Categories
Code


CACHING WITH VARNISH ON HEROKU (RAILS)

 * Post author By
 * Post date 2012-05-14
 * No Comments on Caching with Varnish on Heroku (Rails)

I’ve had a bit of trouble understanding how to get Heroku to cache pages from
Swing Out London, so here’s my explanation – hopefully it’ll help someone.


THE TL:DR

Varnish Caching on Heroku IS as simple as the docs state but because Heroku has
multiple Varnish servers, any given request is unlikely to return a cached copy
unless your site has a lot of traffic, or you set max-age to a large number.


THE BASICS

Some of the Heroku stacks (currently Aspen and Bamboo) support basic caching
using Varnish – a service which sits in front of your application server and
serves up cached content. It essentially works in the same way as your browser
cache, except that when the varnish cache serves up your content, it

Telling Varnish to cache your content is the same as telling a user’s browser to
cache content for a limited time:

class WebsiteController < ApplicationController

  def index
    response.headers['Cache-Control'] = 'public, max-age=300'
    ...
  end

In this case it says “this page won’t change in the next 5 minutes (300
seconds), so you don’t need to request it again from the App”.

For further info, check the Heroku docs.


THE PROBLEM

When I first tried this, it didn’t seem to be working at all – the response
header was being set on the page, and Varnish was being used, but the request
was reaching the application. Here are some example http headers:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 14 May 2012 14:59:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: public, max-age=1200
Etag: "913fba41febb1c5111ac375f09e88f46"
X-Ua-Compatible: IE=Edge,chrome=1
X-Runtime: 7.055496
Content-Length: 45804
Accept-Ranges: bytes
X-Varnish: 878887772
Age: 0
Via: 1.1 varnish

Note that Age is 0, indicating that this is a fresh page retrieved from the
application rather than the cache. Also worth noting is that the X-Varnish
header is the ID that Varnish assigns to the request.

After making about 10 requests I found one which was returned from the cache:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 14 May 2012 14:59:17 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: public, max-age=1200
Etag: "913fba41febb1c5111ac375f09e88f46"
X-Ua-Compatible: IE=Edge,chrome=1
X-Runtime: 1.824720
Content-Length: 45804
Accept-Ranges: bytes
X-Varnish: 793821349 793811181
Age: 40
Via: 1.1 varnish

This says “This page is 40 seconds old, and was originally cached as part of
request 793811181”.

So it seemed like Varnish was caching, but only intermittently. A number of
other people seemed to have the same problem.


THE EXPLANATION

It looks like Heroku has multiple Varnish instances running independently, so
when you request a page you could be hitting any of those instances. Here’s a
likely scenario for a site with low traffic:

Let’s assume there are 3 varnish instances: A, B and C (Heroku maybe has 10) and
represent the age of the cached pages on those instances as [a, b, c]. Now if
the max-age is set to 25 seconds, and I make a number of repeated requests, I
might see the following:

 1. [-, -, -] On the first request I get sent to A. A doesn’t have a cached copy
    so requests the page from the server and caches it:
 2. [10, -, -] Ten seconds later I make another request and get sent to B.
    Ditto.
 3. [20, 10 , -] Ten seconds later I make another request and I get sent to C.
    Ditto.
 4. [30, 20 , 30] Ten seconds later I make another request and I get sent to A
    again, it has a cached copy, but it’s older than the max-age so I discard it
    and request the page again from the server.

If on the other hand those requests were made every 5 seconds (i.e. if the site
had higher traffic) then on the fourth request the cached copy would only be 15
seconds old so would be returned.


THE SOLUTION

Increasing the max-age makes a big difference – I’ve set mine to 20 minutes for
the time being. In slow periods not many pages will be served from the cache,
but when traffic increases, the number of requests to the server will remain
relatively similar.

The thing to understand is this: if the number of varnish instances is N and
you’ve set the max age to A, then of the requests made in any period of A
seconds, on average N of them will hit your server.

Many thanks to Garry Shulter for helping me understand.

Caveat: my understanding may not be entirely correct – if I’ve made any
mistakes, please let me know in the comments!



--------------------------------------------------------------------------------

Categories
Swing Dance


ANALYSIS OF SPOTLIGHT ENTRANCES – ILHC CHAMPIONS STRICTLY FINAL 2010

 * Post author By
 * Post date 2012-04-09
 * No Comments on Analysis of Spotlight entrances – ILHC Champions Strictly
   Final 2010

I’m entering a few divisions at the London Jitterbug Championships in May, and
one of the things I really need to work on is getting on and getting off in a
Ninja fashion.

To that end I’ve been watching some big international competition clips trying
to work out what’s what. In this post, I analyse the spotlight entrances of the
Champions Strictly Final at ILHC in 2010:



Continue reading “Analysis of Spotlight entrances – ILHC Champions Strictly
Final 2010”


--------------------------------------------------------------------------------

Categories
Uncategorized


JABBERWOCKY RECITED

 * Post author By
 * Post date 2012-03-10
 * No Comments on Jabberwocky Recited

UPDATE: Jabberwocky in German

UPDATE: My own recital – a bit panto

Jabberwocky by Lewis Carroll is one of my favourite poems. Widely regarded as
the greatest nonsense poem ever written, it has stuck in my head from an early
age and I love reciting and performing it.

Slithy Toves and Borogoves – Illustration by John Tenniel for Lewis Carroll

This evening I’ve found a number of great recitals of the poem on YouTube. First
up is voice de jour Benedict Cumberbatch


Continue reading “Jabberwocky Recited”


--------------------------------------------------------------------------------


POSTS NAVIGATION

← Newer Posts1 2 Older Posts →
Search
Search


RECENT POSTS

 * What would a Solo Jazz card game look like?
 * Settlers of Catan – Understanding the balance of resources
 * Paths in OSX 10.6 (Snow Leopard)
 * Removing duplicated rvm lines from zsh config files
 * Computer synesthesia?


RECENT COMMENTS

 1. Brian on Removing duplicated rvm lines from zsh config files
 2. dgmstuart on On how things can work out pretty well sometimes
 3. Kate Parkinson on On how things can work out pretty well sometimes
 4. dgmstuart on 4 reasons why Imperial College Swing Dance will be good for
    London
 5. Jasmine on 4 reasons why Imperial College Swing Dance will be good for
    London


ARCHIVES

 * February 2015
 * May 2014
 * September 2013
 * December 2012
 * June 2012
 * May 2012
 * April 2012
 * March 2012
 * November 2011
 * October 2011
 * September 2011
 * July 2011


CATEGORIES

 * Board Games
 * Code
 * Music
 * Swing Dance
 * Uncategorized

© 2023 Duncan G M Stuart

Powered by WordPress

To the top ↑ Up ↑