Sunday, 18 February 2018

Return of Notes from a Gaming Table

It's back!

A million years ago, before I started posting my writing on Twitter, I used to write a gaming blog. For the last two years "restart gaming blog" has been on my list of New Year's Resolutions. Well, today I am restarting it. Behold: a new post on Notes from a Gaming Table.

And that is all.

Saturday, 27 January 2018

From the darkest depths

I very rarely talk about my mental health. This isn't because I don't think it's important - when it comes to other people, I encourage them to talk and will happily lend a friendly ear if one is desired. I am, however, a hypocrite. Over the last year have I dabbled in burn-out, depression and what was, on reflection, probably chronic stress. At this stage I could probably write a book about how these things manifest for me, however this post is about climbing up after pulling myself clear. Apologies for the turns of phrase - I'm not a doctor and everyone's experiences with mental health are different. One of the reasons I don't talk about myself is the fear that someone who suffers with "proper" depression will call me out for just being a bit sad. I don't think that's the case, but I'm certain other people have a harder time with it than I do.

Anyway, this is about recovery. At rock bottom I needed a trigger to realise quite how bad things had become. For me, this was an argument with someone I hold very dear. It made me re-evaluate what was important in my life and decide that pushing ever onward was not an option - that I was threatening something inviolable. By this stage I had already put at risk my physical and mental health - neither things I am happy to lose for sure, but the slippery slope is not steep and it's easy to put something "at risk" without realising quite how much so. At this point several things happened at once, but the main thing is I pulled myself out of life and work. I then spent a week more or less asleep.

It took a month of doing almost nothing to start feeling vaguely right and slow the destructive cycles. Some of that was spent at home, some was spent with my parents and family. During this time I started programming again. Weird statement for someone with my job, but my role no longer revolves around making things. This is fine and acceptable, but one of the difficult parts of shifting into more strategic work is that you lose the emotional kick of being able to look at that thing you built today. Starting it again in my spare time gave me the chance to set goals and achieve them. I could look at my work and be proud of the progress I was making. I could give myself little kicks of positive emotion.

I wrote a lot of code over Christmas.

With some kind of positive feedback loop in my life, I started asking myself what makes me happy. If I walked away from my current life and started again, what would I do? Why do I want to get up in the morning? When I managed to pull back and analyse my life I was still lacking any real reason to want to engage with the world. My way of dealing with that is to directly face that question and pick it apart until I have the beginnings of an acceptable answer. I'm a middle class human living in an affluent country - I am aware that I have done well in the lottery of life and so I have options that are not available to others. I should be able to find a positive place.

I'm not going into the details of this, but suffice to say I am still working for the Civil Service. For the moment, my long-term goals are still in-line with working there. There are plenty of interesting challenges which will keep me engaged and enthused and which I hope I will approach in an effective and useful way. As an aside, this is the point I want to remind people that "no feedback is good feedback" is a terrible way of treating your colleagues. By all means say if something is bad, but if someone is doing a good job make sure they know. We shouldn't find our sense of self-worth through our work but while we seek enlightenment many of us do. Admittedly, I feel a bit of a rat writing that here as I know a few of my colleagues occasionally read my blog so if that's you tune this bit out and mutter something about fishing for compliments.

That gives me a direction for my life for the moment, however it doesn't help me much in the immediate future. For the short term I need to put some positive things in my life or remove some negative things. These need to be short-term, or at least have tight feedback loops. I'm not in a position to start a six month project that will only make me happy at the end. One of the key things that makes me unhappy at the moment is the deterioration my physical well-being, a combination of my weight and fitness. This is dangerous as losing weight can be soul-destroying. Given I'm living in London I decided to adopt something of a Londoner mentality and throw some money at the problem so I'm giving Alevere a try and so far I'm pleased to say that it is working. I can use my goals within this programme as a framework to trigger other nice things. I'm not sure what yet, but I've just started writing D&D again so I may well treat myself to props or whatever at key milestones.

I can also use the same milestones as a trigger for new, positive behaviours. Deciding these up front means that when the time comes I don't have to think so much and make it far more likely I'll get on and do. Hopefully that will let me ride any emotional wave and keep going, instead of stopping, losing momentum and having to restart again. For instance, I'm going to go back to Yoga when I reach a particular target weight. I haven't decided all of these things yet, but just thinking about what I can do is a positive exercise in and of itself. The timescale for all this is about three months so hopefully by the end I'll have rebuilt a positive life and figured out how to make myself happy in a non-destructive way.

I'm not better yet, not by a long shot. I am, however, moving away from the dangerous place I was in a couple of months ago. The word "triggered" is used far too much in modern parlance, but I can definitely say I know some of my own trigger points and still see them affecting me. Less so now, but the road to recovery is not short. I'm incredibly grateful to the people who have supported me in various ways through this time.

I'm writing this as a note to myself in the future. Maybe it'll be a me who is having a difficult time again and needs to remember that there is a turning point. Or maybe it's a me who is thinking back and wondering what the fuss was about - hello future me, you were not overreacting. If anyone else finds it helpful then I'm glad and please do reach out if you'd like to talk.

Sunday, 31 December 2017

The year that was, 2017

Time to once again take stock of the last 12 months and that leads to an important question about 2017. Was it worse than 2016? For me, the answer is yes. Assorted burn-out issues have resulted in a significant decline in physical and mental health and a marked reduction in making things. That is something to fix for next year. Looking at the positives, I've survived a year in a new job and city and I've managed to catch up with a lot of friends from The Past. I've also managed to do Some Things, albeit Fewer Things than I'd have liked. Still, it hasn't all been Killing Floor 2 and Ultimate Chicken Horse.

  • 12 posts on this blog (13 including this one)
  • wrote a short story
  • another year of the Year in Pictures site, up to 15 photographers
  • over 385 contributions to various projects on github
  • completed GMing a 2 year 5th ed D&D game to great critical acclaim
  • got back in to playing D&D online
  • started planning a new regular game
  • created the university of bath RPG (post to follow on this)
  • went on a photography course to learn how to use my camera properly
  • 55+ pictures on my instagram account
  • loads of photos on my flickr stream
  • attended some cookery courses
  • updated my website and Gareth's website
  • lots of work with build pipelines and hosting
  • plenty of game recording, with sadly little to no video editing
  • a bit more voiceover work

I also hung up my abacus, finishing my time as a church treasurer and member of our church council with a financial presentation to the congregation. I've continued running the sound desk in the same church.

Resolution count: 3.5/10 - better than 2016. Still bad.

This coming year I'm going to try undoing the problems of this year - most notably fixing my health and writing more. I'm also starting a new role at work and I'm going to be spending more time going to see friends from university who have disappeared a bit. Here we go...

Thursday, 21 December 2017

Hosting a Rails App on Cloud Foundry - first impressions

From time to time I have been known to write a bit of code and whenever one writes a web application, there is always the question of hosting. I've done my time in Ops and I can certainly deploy an application to a VPS and run the surrounding infrastructure to make it work - however, that all sounds like more work than I'm willing to put in. This is the world of Cloud hosting and I'd like to spend my time writing applications, not deployment scripts. What I want is something I can throw code at and have it sort itself out but for my own projects the price needs to be low so I'm not spending a ton of money every month on my own games.

This is an interesting niche as I don't have the same requirements for my own stuff as I would for professional hosting. Initially my requirements were:

  • Very low monthly cost
  • Rails 5
  • Database (probably postgres)
  • Ability to hook it into some kind of CI (ideally Codeship, as I'm already using that)

For my own projects I'm not that bothered about high capacity, or extensive DR. These are great, but are also expensive.

I'm going to end up on Heroku, because the free tier appears to do everything I want and more. However along the way I tried out Cloud Foundry so I thought it worth writing up how I got started.

Easy stuff first


signed up for an account then created an org and a space on the dashboard. I also created a database within the space (no binding - it's better to do that with a manifest). This was all achievable via the web interface. The postgres service has the option of a free database, limited to 20mb storage.

Next, I installed the command line interface and logged in (cf l), choosing the space as the default.

Preparing the application


A Rails 5 application needs no additional configuration, beyond migrating it from sqlite to postgres. The easiest way to tie the application to the production database is via a manifest file. Mine looks like this:

---
applications:
- name: yip-helper
  random-route: true
  memory: 128M
  instances: 1
  path: .
  command: bundle exec rake db:migrate && bundle exec rails s -p $PORT
  services:
    - yip-postgres

The name becomes part of the subdomain on deployment. The memory is kept low to keep the costs down for a personal project. The service listed should match the name of the database created in the space, above. Stick this in the repository so it can be used with the CI later.

Now the application should be ready to deploy with a simple cf push.

Continuous integration


I use Codeship, and their docs worked fine for me with two modifications:

  • I dropped the CF_APPLICATION envar from the script as it's defined in the manifest file
  • My first deploy failed as it couldn't find the required gems - subsequent deploys worked fine, despite a warning about including the .bundle dir in my repo (which I didn't)

Problems


This all works with minimal fuss, however I'm going to end up going back to Heroku. I originally discounted it because it didn't play well with Docker (a requirement I've since abandoned). Also:

  • Heroku encrypts traffic for free on their own domain, whereas Cloud Foundry doesn't have this option. I can pay $20/month to use my own domain and cert but this breaks my first requirement. I can understand them charging for additional domain hosting but honestly, securing their own subdomains should be a given.
  • The Cloud Foundry free tier database is tiny. Paying for a database adds a lot to the monthly costs - this is true of all the hosting options I looked at - so a useful free tier offering is important.
  • Heroku is better supported. In Codeship, for example, there is a plugin to support it whereas Cloud Foundry requires a custom script. It's a simple one, to be fair, but it's symptomatic.
  • The Heroku tooling and web interface are nicer. Again, unsurprising given how much longer Heroku has been around. The Cloud Foundry tools are fine, but the doing the same things with Heroku is just easier.

So there it is. These are just my experiences, based on not a lot of time and with the intention of hosting for a personal project.

Thursday, 30 November 2017

Remember remember

Let's talk about fire.

I've always loved bonfires. They are primal and evocative - beautiful pillars of light and movement shining bright in darkness. So what does that mean for photography? Taking a picture of a bonfire is both an interesting technical challenge and an exercise in trying to capture the emotion of the moment.

Breaking down the requirements in photographic terms, what do we have? The fire is moving so you need a fast shutter speed to capture the tongues of flame. The scene is dark, but with a bright light source so you need to control white balance. A fast shutter means a higher ISO, to make the camera more responsive to the available light. A wider aperture allows more light in, but also restricts the telephoto options. So a first guess leads to something like:

  • High shutter speed
  • High ISO
  • Wide aperture

So something like this:

Minch fireworks

Nice and warm, but the body of the fire is over-exposed.

What happens if we drop close the aperture and rely on a crazy-high ISO to capture the available light?

Minch fireworks

Loses the warmth, but now we can see into the body of the fire.

I wonder how important the ISO is in practice? What is we keep a wide aperture and fast shutter and drop the ISO?

Minch fireworks

There is more definition on the tongues of flame here when we zoom right in. Pushing the ISO distorts the image so this is a good change.

I started taking these pictures trying to logically get to some decent manual settings. Out of interest I brought out my phone and took a photo then looked at the results:

Minch bonfire

Huh. Seems nice. Settings?

  • Medium shutter speed
  • Tiny ISO
  • Wide aperture

So the phone decided aperture was the key to sorting out the light capture, and didn't think the movement of the fire was too much of a big deal. Next step was to try this collection of settings on my big camera:

Minch fireworks

Different again. More warmth, losing definition on the tongues of flame.

And for a last hurrah, how about a different framing - adding some zoom (which narrows the aperture) and correcting a bit with ISO and shutter:

Minch fireworks

I have my favourites. It's very interesting seeing the same fire depicted so differently just by fiddling with some settings. I'm still calibrating my mind - looking at the subject and trying to imagine the different photos possible with different settings. The first few here I can say I thought through logically but I'm not sure I'd have got to the settings chosen by the automatic mode on my phone. I suppose I'll have to go to more bonfires and keep practising. Such a shame.

All the photographs taken that evening, including some different attempts at fireworks, are in this album:

Minch bonfire 2017

Saturday, 21 October 2017

Getting off auto

I take a decent number of photographs and as well as running a monthly photograph website I am taking it increasingly seriously as a hobby. Most of my photographs are taken using a camera phone thanks to the convenience of it always being in my pocket and, although I've dabbled with manual settings and know (very roughly) what they do I've never really been able to get consistently decent shots on manual mode. Never one to have a hobby and not get nerdy about the details, this month I got myself a proper camera and went with my Dad on a course to learn how to get off auto.

Buying a camera is hard. There are a load of nearly identical models and so much comes down to personal preference at a time when one doesn't know enough to have a preference. Given how expensive lenses can be, this is also a decision about which ecosystem to buy in to. It's a similar lock-in to the Apple / Windows or iOS / Android world in that it's reversible, but change can be tricky, unfamiliar and expensive. I may write about this in the future, but for the moment my key learning was the big choice if buying an SLR is Nikon / Canon. I ended up choosing a Nikon 5600.

Not all the way off auto


I've played around with manual photography before and have a (very) basic understanding of what the various settings do. When switching to manual mode on the phones I've used, the interface has encouraged taking full control - that is handling aperture, shutter speed, ISO and white balance all at once. This has always been too many interconnected, unfamiliar settings to learn and embrace at the same time. Possibly the single most useful tip from this course was to view it differently - take control of one of these aspects and let the camera do most of the rest automatically. This gives priority to a particular setting and therefore set of techniques (indeed, the modes on a proper camera are called aperture or shutter priority so ... yeah).

Aperture


We focused on aperture, letting the camera adjust shutter speed automatically and making corrections for exposure with the ISO setting. A wider aperture (aka a smaller f stop setting) lets in more light, allowing a faster shutter speed. It also allows control of the depth of field, enabling the blurred background effect used to create useful negative space and draw attention to a specific area of a picture.

This is often seen in portraits. Some useful tips for portraits - the eyes are the most important bit and should therefore be in the sharpest focus. So far, fairly obvious. Less obvious is that the camera may well actually focus on the closest part of the face - the tip of the nose - so for a really good picture some manual adjustment is necessary.

Another counter-intuitive tip is that portrait pictures are best taken on maximum zoom or with a dedicated telephoto lens. This is because the longer focal length allows for a wider aperture and hence maximises the depth of field effect.

Results?


And lo, the results.

Or, for a particular example of the portrait stuff above:

Portrait
We had a lot of fun walking around Lacock and practising the specific techniques that fell out of playing with this one setting and the day did a wonderful job of demystifying the bewildering array of buttons on a decent camera. I'm looking forward to learning more.

Saturday, 30 September 2017

Hanging up my abacus - part 2

It has been a while, but here is part two of my reflections on being a church treasurer. If you missed it, here is part one. Last time was mostly about vision and strategy. This is about people.

Back to the things I learned and experienced.

Lesson 5: It's dangerous to go alone...


Time is finite. An Earth-shattering discovery. However, the important point here is about setting expectations - both in others in yourself. This kind of role can easily be a full-time job, and this is one of the reasons it's often picked up by a retired person. Limiting factors like Having a Job and Wanting a Life will severely cut into the amount of time available and hence what can be delivered. It took me a long time to get this straight in my head and stop beating myself up for how long everything seemed to take - especially since business as usual work ate up a significant amount of the time I could otherwise have used for improving things.

It's impossible to create more time, so if you want to get more done you need other people to help. I set up a team to help and together we achieved things I had initially discarded as impossible for me alone. It astonished me that creating a Finance Team wasn't standard - I had several conversations with members of other churches who took this revolutionary thinking back with them. Another lesson for me was that just because something seemed obvious, that didn't mean it is. It is worth sharing your thinking.

Lesson 6: ... but choose your companions wisely


Forming a team in a charity is an art in itself. The obvious approach is to simply ask for volunteers, however if you do that you'll find you get the same faces who appear over and over in other teams. These people are going to be busy already, and are the people pre-disposed to volunteering - not necessarily the folk with the most useful skills.

Volunteers are nothing like paid staff. Our motivation is based on enthusiasm for the cause of the charity, supporting each other and our interest in the task at hand and it is all too easy to destroy any or all of these if the group isn't pulling in the same way. In my case, I was forming a group which was to act under my authority as a treasurer so I needed people I could trust to behave with integrity and who I could ask to do things and believe they would actually do them.

I avoided asking for volunteers. I think it misses the opportunity to encourage folk who wouldn't normally put themselves forward and it makes it very likely the resulting team will struggle to gel. Instead, after consulting as many people as I could looking for likely victims, I approached a handful of people who I thought would have the right combination of skills and perspectives. Most were people who did little to no volunteering in the church. I was fortunate that all but one agreed to join my merry band and they did so with the confidence that The Leader (me, gosh) believed in them.

There are definitely pitfalls to be avoided. Exclusively approaching people relies on your own knowledge of the people available, and triggers all of your biases, conscious or unconscious. There is a balance to be struck but it's too easy to just ask for volunteers and miss an opportunity to encourage people who otherwise wouldn't put themselves forward.

Lesson 7: A shared vision brings a team together


Next, I needed to turn the group into a team. Providing a constant stream of brightly-coloured cake definitely helped.

We had several sessions discussing the direction of finance in St Swithin's and prioritising out work. I outlined the problems as I saw them and let the conversation take its course and by the end we all owned the resulting plan. This bound the team together as the strategy came from the team, not from me. Not only did this do wonders for the motivation, we also ended up with a more ambitious programme than I had originally had in mind. When discussing the problems, we collectively decided that we couldn't do anything without a new computer system - something I had previously discarded as I didn't have time to do it. However, others in the group saw it was the most important thing we could do and volunteered to take it on.

Lesson 8: Learn to predict the future (and convince others of your mystic powers)


Accurate crystal balls are hard to come by, but there are ways to peer into the future with some accuracy. Looking at trends in income / expenditure give a clear indication as to what is going to happen - if the budget is any good it's quite easy to start thinking about what happens next year and the year after.

By asking ourselves several "what if" questions we got a picture of the problems hidden in the heart of our finance. Some were real (trends which predicted issues further down the line) and some were potential ("what if the top three donors all moved away this year?") and they let us set policies which helped mitigate these risks. For instance, following an analysis of the profile of our donations we diversified our income and changed the way we solicited giving.

In theory, spotting difficulties ahead of time should have let us do something about them before they became major problems. The hard part is convincing other people in the organisation when there are problems ahead. I presented year on year on the challenges hiding in the heart of our budget, however those problems were not immediate and so generating the right response (immediate action without panic) was extremely difficult. This is partly the nature of this role - as noted before, the ingrained culture was that finance was my problem so solving these problems was also my problem.

Regardless of the difficulties, all this helped me learn the value of investing the time in using the data available to make predictions, not just validate (or otherwise) the decisions of the past. Obvious, maybe, but this was the experience that cemented it in my mind. In the business of day to day life it's easy to forget it and drift further and further into being just reactive.

Lesson 9: Volunteers are not staff


I've already mentioned this above, but it's something to pick up on again. I was a volunteer in a professional organisation (the Church of England). There were things I had to do, legally, to perform my role. There was also an awful lot that I didn't have to do, but was very helpful to the wider organisation. As noted before, time is finite and whether I did any of these things depended on my motivation to spend that time assisting the wider organisation rather than (or in addition to) working to improve my local church.

Motivation is a tricky beast. With a volunteer, it's the only thing that is making them keep giving their time to you and not someone else. It is very easy for a large organisation to forget when it is relying on the goodwill of volunteers over whom they have very little actual control. However, if this does happen it doesn't take long for all those extra voluntary jobs to stop happening.

The short version is - if you're in a paid position, remember when you're dealing with volunteers or you will lose them. They owe you nothing.

Lesson 10: The importance of process


Volunteer groups are often held together by the links between people. Indeed, professional organisations usually have back-channels for getting things done because person X is friends with person Y in another team, which means they hear about stuff that is going on over there.

This is natural, and inevitable unless we want a world where we behave like automatons fitted to a job description. However, there needs to be a plan in place for the people who come next.

When I took on my role as a treasurer, it was on the back of all the previous finance people stepping down. I inherited very little, and while the former volunteers were very helpful it still meant I had to re-solve a lot of problems. Had there been clear processes in place I could have slipped into the role far more easily.

I'm cheating a little here as this was actually a lesson I learned back during my time as part of the team running a student radio station. Back then we worked very hard to ensure there was no clique (encouraging new people to join) and we had established processes (allowing others to keep the station going when we were gone). During my time as a treasurer, we brought in all kinds of new practices and we always did our best to make sure they didn't rely on the specific people in post. We documented, handed over knowledge as best we could and generally tried to make sure the next lot would have a far easier time.

I hope my successor has inherited a working system and is getting as much from the role as I did.