Six Months of Women Writers

January 22, 2017

Last spring, I was taking a look at what I’d been reading recently. I read a lot of novels. Reading a novel seems to be my default state. I read a lot of science fiction, some crime novels, some historical fiction, some “straight” fiction (whatever that really is). But what I noticed was that the authors I tend to read skew very male. I decided I needed to do something about that, if only because I was probably missing some great stuff. So for six months I decided to read only novels written by women.

And I was right! I was missing some great stuff. I read about 60 novels in those six months, and discovered some amazing things that I really wish I’d known about before. Here are a few of the stand-outs.

First, I now have five (count them, five!) new crime series to read, all engaging and quite superb in different ways.

First, there are the Medicus novels by Ruth Downie, set in Britain (and in later novels other places too) in the late(-ish) Roman Empire, which hit both the “crime” and “historical” spots. Equally enjoyable, and also in the historical crime mould are the Crowther & Westerman novels of Imogen Robertson. (I derived slightly nasty enjoyment from the inversion of the “gallant seaman has adventures while faithful wife keeps the home fires burning” trope here. The “gallant seaman” even gets fridged in the second [?] book in the series…)

The other three series are all contemporary, but each has a different flavour. First are Kate Atkinson’s Jackson Brodie stories, which are huge fun. After the first book, the titular character appears mostly incidentally, which is unsettling, but makes for a very particular effect. I don’t know what it is she does, but Atkinson has this very delicate control of mood, a control that I can’t quite describe: you just have to read the books…

Then there are Sophie Hannah’s Culver Valley books, usually described as “psychological thrillers”, but which for me sometimes edge into “weird fiction” territory. Hannah superlatively shows the unknowability of the other in her characters: many of them are very strange, their motivations unclear, their actions difficult to explain. The two central figures in the books (the Zailer and Waterhouse of the series title) have a relationship that’s very hard to characterise: they clearly love each other, as well as they can given their insecurities and quirks, but they constantly talk past each other, keep secrets, misunderstand one another. There’s a lot to Hannah’s books. Sometimes there’s a feeling that things are going to veer into the supernatural, but they never do. There are mundane, if strange, explanations for everything that happens. Sometimes very strange, given the strangeness of her characters. (Oh, and the families. Oh god, the families. Terrifying. I do hope that Hannah didn’t model them on her own. If so, she should get help.)

Finally, for crime, there are Tana French’s Dublin Murder Squad novels. These are just brilliant. I was hooked from the start, just by the language of the first novel, In The Woods. There’s an elegiac feeling to it, and French’s evocation of the far-off summers of childhood is perfect in tone. The cadences of her writing made me think of Dylan Thomas. Beautiful and powerful. French, like Atkinson, avoids the common pattern of having a single protagonist or pair of protagonists in each novel, moving the focus between different members of an ensemble cast. It works really well, mostly because French has the skill to write an apparently endless stream of engaging characters. And this skill allows her to do some special things. The central premise of the second book in the series is so unlikely, requires such a huge suspension of disbelief, that, if you laid it out as a bare description of the plot of a book, no-one would believe it. French makes it work, makes the unbelievable completely believable, and does it (apparently) effortlessly. Some writers, you read their work and you think “Hmmmm. I could probably write something like that.” I read French’s work and think “No way could I ever be that good, not in a hundred years.”

The rest of what I read was mostly fantasy or science fiction. Some fluff, but some other things that take a bit more processing. On the fluffier side, Genevieve Cogman’s Invisible Library books are a lot of fun, for instance.

On the “more processing” side though, Becky Chambers’ two novels (The Long Way to a Small, Angry Planet and A Closed and Common Orbit) are really good. The first book feels very much to me as being about “found family”, an idea I like a lot.

Emma Newman has written two “hard-ish” science fiction novels set in the same universe, Planetfall and After Atlas, plus a series of stories (Split Worlds) that might at first glance look like fluff, faeries and Regency manners and such silliness. As you get into them, they’re anything but fluff, and work as a sort of eerie psychological horror. As well as the four existing novels (one more to come, I think), there’s a sequence of short stories set in this world that you can get sent by email, one per week. I’m on about number seven or eight now, and some of them are downright disturbing. As for the science fiction novels, Planetfall took me a little while to get into (I had a lot of other books lined up to read!), but once it got going, it was hard to put down. The protagonist is very damaged, hiding herself from herself as well as the others in the community where she lives. The sequence where her secrets are uncovered is extremely uncomfortable to read, and is one of the better depictions of obsession and mental illness that I’ve read. I found After Atlas to be less good, but that may just be because Planetfall set the bar unreasonably high.

And then, and then! There’s N. K. Jemisin. I read the second book of her Broken Earth trilogy (the last book is due out this year, and will be one of the publishing events of the year as far as I’m concerned). There is so much to say about these books. Go and read them. I might re-read them later in the year when the third book is out and write a proper review. But just go and read them, OK? Regrets, you will have none. (And if you like them, read the Dreamblood books too.)

Speaking of publishing events for 2017, the absolute top of the list for me is Winter Tide by Ruthanna Emrys, which comes out some time in the spring. If you’ve read any (or a lot of) H. P. Lovecraft and have always been suspicious of dear Howard’s horrifying racism and sexism, and have been led to wonder what else he got wrong by looking through his twisted little lens of bigotry, read Emrys’s short story The Litany of Earth, which is a sort of prologue to Winter Tide.

Oh, and in the same vein, you could do worse than have a read of Kij Johnson’s The Dream-Quest of Vellitt Boe, another “reimagining” of Lovecraft. (And then read her short stories collected in At the Mouth of the River of Bees, especially Names for Water, which might have brought a little tear to my eye when I read it…).

So, a successful experiment? Oh yeah. Why had I not read any of these things before? I could blame Amazon’s recommendation engine, but I think it mostly just comes down to habit and laziness. This was a really good way to bump me out of that.

Setting up dual boot Arch Linux/Windows 10

January 14, 2017

I had to do a slightly weird bit of system admin recently, and there was one step that was kind of sneaky and not something I’d seen mentioned anywhere else. So I thought I’d better write it up…

What I wanted to do was make my desktop machine dual boot Arch Linux and Windows 10 (I needed Windows to use some CAD software). That’s not so unusual, but the recommended procedure seems to be to start from a clean machine, install Windows, then install Linux. I was starting from a pre-existing Arch Linux installation and didn’t want to lose anything. I also had things set up using syslinux in BIOS mode, which wasn’t going to work with Windows. So I needed to switch to UEFI booting first.

New Job with Memcachier

January 7, 2017

I’ve just finished my first week in a new job, which is looking like it’s going to be a lot of fun. I’m working for MemCachier, a small company (I’m employee #4) that offers a multi-tenant cloud-based memcache service. The code is mostly Haskell and Go (and maybe in the future some Rust), the people are all very smart and friendly and committed to trying to do things the right way. I’m still (obviously, after one week) in that initial state of confusion when dropping into a new codebase, but it looks very promising indeed.

The work should be a good mix of web programming, DevOps automation things and distributed systems problems. There’s going to be lots to learn, which is ideal for me! I’m also very happy to be back working in Haskell after a year-long (or a bit more) diversion into Python.

So, as far as I’m concerned, 2017 has started off very well.

Back again...

January 1, 2017

Well, that’s pretty poor. It’s a year and a half since I last wrote an article here. A lot has happened in that time, and I have some cool new things coming up that I want to write about, so I’d better dust this off.

Quick summary of the last 18 months:

I started a new job in September last year, and had my last day there on December 9. It was OK, but obviously not perfect, otherwise I wouldn’t have left. There were some great people there, but the management of the organisation left a lot to be desired. I’m starting something new tomorrow (!) which I’m quite excited about and that I’ll write about in the next couple of weeks.

We bought a house! It has some doer-upper aspects to it, but it’s pretty great. Very big garden, plenty of space (we have more rooms here than in all the places we’ve lived before now put together!), good dog walking nearby, quiet but handy for transport (we’re about two minutes drive from a motorway, but you don’t hear it much), work for Rita nearby, etc. We moved in in July and had an initial spasm of renovation work where we transformed the rather manky kitchen into something nice. We’re just finishing up renovating the living room, and have lots of ideas of more things to do. One thing is to build a separate office building for me to use, which is going to my big project for the spring. Lots of things to learn! (As well as having more rooms now than we’ve ever had before, we also have more power tools than I’ve ever owned in my life…)

A Haskeller in Pythonland

July 20, 2015

I recently did some work for Andy Ridgwell, an old colleague from Bristol, writing a build and configuration system and GUI for a medium-sized climate model called GENIE. GENIE is an EMIC, an Earth system Model of Intermediate Complexity. It’s about 55,000 lines of Fortran and includes models of the atmosphere and ocean plus models of atmospheric chemistry and biogeochemistry in the ocean and ocean sediments.

This model had been in use for some years by different groups, and the infrastructure around it had become quite baroque. Andy wanted this tidied up and made nice (i.e. rewritten…) to make the model easier to set up and use. He also wanted a cross-platform GUI for configuring and running the model, allowing you to keep track of the model state in real-time, to pause and restart model runs, changing the model configuration in between, and so on.

A major consideration for this work was that as well as being easy to use the new system had to be easy to install (on both Linux and Windows) and easy for scientists to hack on. That ruled out Haskell, my usual tool of choice. I decided to use Python instead, for a couple of reasons.

C2HS Tutorial Ideas

April 27, 2015

One of the things that C2HS is lacking is a good tutorial. So I’m going to write one (or try to, anyway).

To make this as useful as possible, I’d like to base a large part of the tutorial on a realistic case study of producing Haskell bindings to a C library. My current plan is to break the tutorial into three parts: the basics, the case study and “everything else”, for C2HS features that don’t get covered in the first two parts. To make this even more useful, I’d like to base the case study on a C library that someone actually cares about and wants Haskell bindings for.

The requirements for the case study C library are:

  1. There shouldn’t already be Haskell bindings for it – I don’t want to duplicate work.

  2. The C library should be “medium-sized”: big enough to be realistic, not so big that it takes forever to write bindings.

  3. The C library should be of medium complexity. By this, I mean that it should have a range of different kinds of C functions, structures and things that need to be made accessible from Haskell. It shouldn’t be completely trivial, and it should require a little thought to come up with good bindings. On the other hand, it shouldn’t be so unusual that the normal ways of using C2HS don’t work.

  4. Ideally it should be something that more than one person might want to use.

  5. It needs to be a library that’s available for Linux. I don’t have a Mac and I’m not that keen on doing something that’s Windows-only.

Requirements #2 and #3 are kind of squishy, but it should be fairly clear what’s appropriate and what’s not: any C library for which you think development of Haskell bindings would make a good C2HS tutorial case study is fair game.

If you have a library you think would be a good fit for this, drop me an email, leave a comment here or give me a shout on IRC (I’m usually on #haskell as iross or iross_ or something like that).

Q1 2015 Review

April 5, 2015

I’ve started doing a new thing this year to try to help with “getting things done”. I normally have a daily to-do list and a list of weekly goals from which I derive my daily tasks, but I’ve also now started having a list of quarterly goals to add another layer of structure. Three months is a good timespan for medium-term planning, and it’s very handy to have that list of quarterly goals in front of you (I printed it out and stuck it to the front of my computer so it’s there whenever I’m working). Whatever you’re doing, you can think “Is this contributing to fulfilling one of my goals?” and if the answer is “No, watching funny cat videos is not among my goals for this quarter”, it can be a bit of a boost to get you back to work.

So, how did I do? Not all that badly, although there were a couple of things that fell by the wayside.

Non-diffusive atmospheric flow #15: Wrap-up

April 3, 2015

OK, so we’re done with this epic of climate data analysis. I’ve prepared an index of the articles in this series, on the off chance that it might be useful for someone.

The goal of this exercise was mostly to try doing some “basic” climate data analysis tasks in Haskell, things that I might normally do using R or NCL or some cobbled-together C++ programs. Once you can read NetCDF files, a lot of the data manipulation is pretty easy, mostly making use of standard things from the hmatrix package. It’s really not any harder than doing these things using “conventional” tools. The only downside is that most of the code that you need to write to do this stuff in Haskell already exists in those “conventional” tools. A bigger disadvantage is that data visualisation tools for Haskell are pretty thin on the ground – diagrams and Chart are good for simpler two-dimensional plots, but maps and geophysical data plotting aren’t really supported at all. I did all of the map and contour plots here using UCAR’s NCL language which although it’s not a very nice language from a theoretical point of view, has built-in capabilities for generating more or less all the plot types you’d ever need for climate data.

I think that this has been a reasonably useful exercise. It helped me to fix a couple of problems with my hnetcdf package and it turned up a bug in hmatrix. But it went on a little long – my notes are up to 90 pages. (Again: the same thing happened on the FFT stuff.) That’s too long to maintain interest in a problem you’re just using as a finger exercise. The next thing I have lined up should be quite a bit shorter. It’s a problem using satellite remote sensing data, which is always fun.

Non-diffusive atmospheric flow #14: Markov matrix calculations

April 2, 2015

This is going to be the last substantive post of this series (which is probably as much of a relief to you as it is to me…). In this article, we’re going to look at phase space partitioning for our dimension-reduced Z500Z_{500} PCA data and we’re going to calculate Markov transition matrices for our partitions to try to pick out consistent non-diffusive transitions in atmospheric flow regimes.

C2HS 0.25.1 "Snowmelt"

March 30, 2015

I took over the day-to-day support for C2HS about 18 months ago and have now finally cleaned up all the issues on the GitHub issue tracker. It took a lot longer than I was expecting, mostly due to pesky “real work” getting in the way. Now seems like a good time to announce the 0.25.1 “Snowmelt” release of C2HS and to summarise some of the more interesting new C2HS features.