I was very lucky to be able to attend C++ On Sea this week. It’s been an absolute blast. Let’s see:
Everyone I interacted with was so interesting and pleasant.
The talks I attended were engaging and thought-provoking.
I got to meet a whole bunch of new people I’d never met before and people I’d only ever met or followed online and discover what a nice lot they all are in real life.
It wasn’t too big! (Although the venue was definitely at capacity.)
There were at least 10 other game developers there (of different stripes). I expected fewer, so I was very glad to not be alone. Fun to talk about our silly jobs.
Travel was nice and straightforward.
I ate a lot of good food.
I felt very safe and… #included… there was a strong emphasis on the Code of Conduct and being nice and inclusive and all that good stuff, and there were discussions and talks that weren’t just about purely technical issues.
I’ve never been to any other C++ conferences, but I still think I can safely say this was a very good one.
I found it very difficult to choose which talks to go to, so I ended up making snap decisions. Thankfully all the ones I didn’t go to should be up on YouTube in a few weeks. Here are some quick things about the ones I did attend:
TODO: Update these summaries with YouTube links/embeds
Kate Gregory: Keynote: Oh! The Humanity!
Kate spoke about how to recognise the different emotions we can feel in codebases, like fear in commented-out sections, or happiness in well-maintained, readable code. Well worth a watch, and not just because of what a great speaker Kate is.
Juanpe Bolivar: Postmodern Immutable Data Structures
You like to work with values. You like to write pure functions. But how do you reconcile this with a world in which copying big blocks of data around is expensive and wasteful? Well, you figure out a way for mutations of an array to share data with the original copy of the array, like a god damn wizard.
I need to re-watch this and read through the library to understand it better. I could totally use it, or at least apply the ideas, in a little personal project I was working on recently. I think it’s really cool.
Adi Shavit: What I Talk About When I Talk About Cross-Platform Development
Stuff to think about when writing libraries. I think I read a blog post about the approach outlined in this talk a while ago.
Jason Turner: Practical Performance Practices Revisited
Compilers are cool. And Jason is a very good speaker. Lots of good insights into performance pitfalls.
Patricia Aas: Deconstructing Privilege
It bums me out that some people still need to hear about the idea that everyone is coming to the table from different situations, and that some of those situations come with disadvantages, and that’s all that the idea of ‘privilege’ means!
Good talk though.
Simon Brand: How to Write Well-Behaved Value Wrappers
Rainclouds interspersed with rays of hope. The language is very complicated.
I think we probably want things like optional and variant to be in the language rather than in the standard library. They’re that fundamental. And then nobody would have to fight all the battles Simon outlines when they try to implement them as library components.
Viktor Kirilov: The Hitchhiker’s Guide to Faster Builds
Really thorough overview of different ways builds can be slowed down and, happily, how they can be sped back up. Also a brief and inconclusive talk about modules at the end.
Guy Davidson: A linear algebra library for C++23
Guy is doing great work. I hope more games people become as engaged with the standardisation process as he is. C++ could really do with an out-the-box way to talk about vectors, matrices, and the library he’s working on seems like a really good approach.
Clare Macrae: Quickly Testing Legacy Code
I found the insights in this talk very interesting but I’ve been struggling to think about how to apply them to my world. What hope is there for we whose applications are totally non-deterministic in so many ways? Woe is us.
Matt Godbolt: Keynote: What Everyone Should Know About How Amazing Compilers Are
Wow. Compilers are COOL.
I learned so much assembly in this talk. Admittedly I know very little assembly and keep forgetting what I learn, but Matt’s enthusiasm for investigating the low-level stuff is infectious. And he’s excellent at explaining.
I am extremely grateful to those who made it possible for me to come, especially Simon, and Philip for organising such a great event. I really hope I get to see the people I met again sometime soon.
I come away feeling refreshed, energised, inspired about the language, the community, and where we’re headed. A much-needed morale boost.
They represent my second, much more successful attempt at the technique I said I wanted to get the hang of in my hobby goals post.
First, I primed them black using my airbrush. Then I airbrushed a very light grey from above. Then I left them in a drawer for a month or so. When I was finally ready to paint them, I started by completing the ‘value sketch’. This just meant going in with black paint in recesses the airbrush had missed, while bringing up the brightness on areas like the face with white paint. I also did all my edge highlighting in white at this stage – it’s really nice to be able to do this step earlier on, when the cost of mistakes is much lower. At the end of all this I had a greyscale representation of the final result.
Then I began glazing, that is, applying paint that has been thinned down to the extent that it only tints the layer beneath. In my previous attempts at glazing I used Citadel Lahmia Medium, but this time I tried out Vallejo Glaze Medium. I was able to do this for most of the models apart from the skin and metal parts. Both required a thicker application, and I had trouble mixing the medium with these paints without them getting runny. Finally I needed to apply washes and highlights to these areas the old-fashioned way for them to look right.
Having done these I strongly want to do more minis this way. It’s so fast and freeing. No painstaking application of basecoats, no time-consuming layering process. I estimate each model took little more than an hour of painting by hand. Amazing.
Also painted this weekend: a tracker and her dog! I’d zenithal primed the dog and it’s quite small and simple, so it went quickly, but the tracker longer. I’m really pleased with how my colour choices turned out, especially the lovely warm crimson-shaded leather parts. (Skrag Brown, shaded with Carroburg Crimson.)
The North Star Frostgrave range is fantastic. Diverse and characterful, even the wonkier sculpts have a certain charm. And it keeps getting better - there’s a plastic Wizards kit on the way :D
Other than these I’ve painted a few scraps of terrain, made a start on the Chosen Axes, magnetized some bases, organised my bits and pieces, and invested in a spraying booth for my airbrush. 2019 is off to a flying start.
Last year I went hard into miniatures; the hobby grabbed me and just would not let go. I painted a tonne of stuff! And this year I’m going to try to paint just as much, if not more. Yet, my actual goals for the year aren’t to paint X amount of minis or a list of certain things1, they’re all about gaining confidence with techniques I haven’t gotten the handle of.
My main aspiration is to get to grips with the process of painting minis by first doing a zenithal highlight, and then using glazes and washes to paint stuff fast. Vince has a good tutorial on this system:
The zenithal highlighting stage consists of painting the model black (or the shadow colour of your choice), then applying a mid-tone grey from about 45 degrees, then the lightest colour (white) from directly above. You can do this with rattlecans, or airbrush, or even by drybrushing.
See also: value sketching. I’m confident enough with my airbrush now to use it for this kind of thing. It’s glazing that I’m still figuring out.
The idea with glazing is to apply a layer of paint that is so thin as to be partially/mostly transparent2. In the video he uses an airbrush to apply the glaze, but it can be done with a normcore brush.
My next goal is to up my airbrush skills. At the moment I can just about get a miniature primed and zenithal highlighted, but I want to be able to actually get some of the base colours down on larger areas to avoid needing to do painstaking multi-coat brush application.
Other than that, I’d like to be able to wet blend, magnetize parts of miniatures for easy weapon-swapping3, and take better photos of my minis. And spread my disease around by trying to get more of my friends into the hobby.
What I’m not going to do is devote much time to learning how to make terrain, much as it fascinates me. I’ll leave that for 2020.
Oh, and, final resolution: No buying new stuff until I’ve cleared most of my backlog!
What are your hobby goals for this year?
God knows I have an enormous amount of stuff to paint, though. ↩
Things are a bit subdued in my life at the moment. I had major surgery less than 3 weeks ago and am very much just beginning my recovery. While I feel better nearly every day (in more ways than one), it’ll be a good few weeks before my life is back to something resembling normal.
In the meantime I’ve been reading plenty, watching lots of YouTube, and getting some hobby done when I’m feeling good enough to sit at a table.
I haven’t really had much of the right kind of energy for programming or writing, which seems like a shame because of all the free time, ideas and motivation I have bursting from my seams, but that’s okay. I suppose it’s best to save my thinky-energy for dealing with real problems should they arise and keeping myself comfortable.
Natalie is being a great help, getting shopping, cooking and generally providing morale support. I feel incredibly grateful to have such a good companion around. My mum has also been excellent, helping us return to Edinburgh from the hospital and doing some shopping for us when she can. I’ve also received a lot of nice messages and visits from friends and family members that have really helped to keep me happy and comfy.
If this upward trend continues my time in the recovery doldrums will pass by like nothing.