All the States of Tic-Tac-Toe

Screenshot 2016-03-12 15.06.34.png

NOT the most elegant Mathematica, but trying to do clever things with NestList was a pain. And my math was creating duplicate transitions, which is why the other graphs were so dense – and the layer size needed to be tweaked a bit to show both the starting and ending states more clearly. But, after some cleanup, it worked, after a bit of churning (click the image for a larger size):

All the States of Tic Tac Toe.png

Visualizing Cellular Automata

cellular-automata-v1.png

SO, why’s an urban fantasy author digging into the guts of Mathematica trying to reverse-engineer how Stephen Wolfram drew the diagrams of cellular automata in his book A New Kind of Science? Well, one of my favorite characters to write about is the precocious teenage weretiger Cinnamon Frost, who at first glance was a dirty little street cat until she blossomed into a mathematical genius when watered with just the right amount of motherly love. My training as a writer was in hard science fiction, so even if I’m writing about implausible fictions like teenage weretigers, I want the things that are real – like the mathematics she develops – to be right. So I’m working on a new kind of math behind the discoveries of my little fictional genius, but I’m not the youngest winner of the Hilbert Prize, so I need tools to help simulate her thought process.

And my thought process relies on visualizations, so I thought, hey, why don’t I build on whatever Stephen Wolfram did in his groundbreaking tome A New Kind of Science, which is filled to its horse-choking brim with handsome diagrams of cellular automata, their rules, and the pictures generated by their evolution? After all, it only took him something like ten years to write the book … how hard could it be?

Deconstructing the Code from A New Kind of Science, Chapter 2

Fortunately Stephen Wolfram provides at least some of the code that he used for creating the diagrams in A New Kind of Science. He’s got the code available for download on the book’s website, wolframscience.com, but a large subset is in the extensive endnotes for his book (which, densely printed and almost 350 pages long, could probably constitute a book in their own right). I’m going to reproduce that code here, as I assume it’s short enough to fall under fair use, and for the half-dozen functions we’ve got here any attempt to reverse-engineer it would end up just recreating essentially the same functions with slightly different names.
Cellular automata are systems that take patterns and evolve them according to simple rules. The most basic cellular automata operate on lists of bits – strings of cells which can be “on” or “off” or alternately “live” or “dead,” “true” and “false,” or just “1” and “0” – and it’s easiest to show off how they behave if you start with a long string of cells which are “off” with the very center cell being “on,” so you can easily see how a single live cell evolves. And Wolfram’s first function gives us just that, a list filled with dead cells represented by 0 with a live cell represented by 1 in its very center:

In[1]:= CenterList[n_Integer] := ReplacePart[Table[0, {n}], 1, Ceiling[n/2]]


In[2]:= CenterList[10]
Out[2]= {0, 0, 0, 0, 1, 0, 0, 0, 0, 0}


One could imagine a cellular automata which updated each cell just based on its contents, but that would be really boring as each cell would be effectively independent. So Wolfram looks at what he calls “elementary automata” which update each cell based on their neighbors. Counting the cell itself, that’s a row of three cells, and there are eight possible combinations of live and dead neighbors of three elements – and only two possible values that can be set for each new element, live or dead. Wolfram had a brain flash to list the eight possible combinations the same each way every time, so all you have are that list of eight values of “live” or “dead” – or 1’s and 0’s, and since a list of 1’s and 0’s is just a binary number, that enabled Wolfram to represent each elementary automata rule as a number:

In[3]:= ElementaryRule[num_Integer] := IntegerDigits[num, 2, 8]

In[4]:= ElementaryRule[30]
Out[4]= {0, 0, 0, 1, 1, 1, 1, 0}


Once you have that number, building code to apply the rule is easy. The input data is already a string of 1’s and 0’s, so Wolfram’s rule for updating a list of cells basically involves shifting (“rotating”) the list left and right, adding up the values of these three neighbors according to base 2 notation, and then looking up the value in the rule. Wolfram created Mathematica in part to help him research cellular automata, so the code to do this is deceptively simple…

In[5]:= CAStep[rule_List, a_List] :=
rule[[8 – (RotateLeft[a] + 2 (a + 2 RotateRight[a]))]]


… a “RotateLeft” and a “RotateRight” with some addition and multiplication to get the base 2 index into the rule. The code to apply this again and again to a list to get the history of a cellular automata over time is also simple:

In[6]:= CAEvolveList[rule_, init_List, t_Integer] :=
NestList[CAStep[rule, #] &, init, t]


Now we’re ready to create the graphics for the evolution of Wolfram’s “rule 30,” the very simple rule which shows highly complex and irregular behavior, a discovery which Wolfram calls “the single most surprising scientific discovery [he has] ever made.” Wow. Let’s spin it up for a whirl and see what we get!

In[7]:= CAGraphics[history_List] :=
Graphics[Raster[1 – Reverse[history]], AspectRatio -> Automatic]


In[8]:= Show[CAGraphics[CAEvolveList[ElementaryRule[30], CenterList[103], 50]]]
Out[8]=

rule-30-evolution.png

Uh – oh. The “Raster” code that Wolfram provides is the code to create the large images of cellular automata, not the sexy graphics that show the detailed evolution of the rules. And reading between the lines of Wolfram’s end notes, he started his work in FrameMaker before Mathematica was ready to be his full publishing platform, with a complex build process producing the output – so there’s no guarantee that clean simple Mathematica code even exists for some of those early diagrams.

Guess we’ll have to create our own.

Visualizing Cellular Automata in the Small

The cellular automata diagrams that Wolfram uses have boxes with thin lines, rather than just a raster image with 1’s and 0’s represented by borderless boxes. They’re particularly appealing because the lines are white between black boxes and black between white boxes, which makes the structures very easy to see. After some digging, I found that, naturally, a Mathematica function to create those box diagrams does exist, and it’s called ArrayPlot, with the Mesh option set to True:

In[9]:= ArrayPlot[Table[Mod[i + j, 2], {i, 0, 3}, {j, 0, 3}], Mesh -> True]
Out[9]=

checkerboard.png

While we could just use ArrayPlot, it’ s important when developing software to encapsulate our knowledge as much as possible, so we’ll create a function CAGridGraphics (following the way Wolfram named his functions) that encapsulates the knowledge of turning the Mesh option to True. If later we decide there’s a better representation, we can just update CAMeshGraphics, rather than hunting down every use of ArrayPlot. This function gives us this:

In[10]:= CAMeshGraphics[matrix_List] :=
ArrayPlot[matrix, Mesh -> True, ImageSize -> Large]

In[11]:= CAMeshGraphics[{CenterList[10], CenterList[10]}]
Out[11]=

lines-of-boxes.png

Now, Wolfram has these great diagrams to help visualize cellular automata rules which show the neighbors up top and the output value at bottom, with a space between them. The GraphicsGrid does what we want here, except it by its nature resizes all the graphics to fill each available box. I’m sure there’s a clever way to do this, but I don’t know Mathematica well enough to find it, so I’m going to go back on what I just said earlier, break out the options on ArrayPlot, and tell the boxes to be the size I want:

In[20]:= CATransitionGraphics[rule_List] :=
GraphicsGrid[
Transpose[{Map[
   ArrayPlot[{#}, Mesh -> True, ImageSize -> {20 Length[#], 20}] &, rule]}]]


That works reasonably well; here’ s an example rule, where three live neighbors in a row kills the center cell :

In[21]:= CATransitionGraphics[{{1, 1, 1}, {0}}]
Out[21]=

Screenshot 2016-01-03 14.19.21.png  

Now we need the pattern of digits that Wolfram uses to represent his neighbor patterns. Looking at the diagrams and sfter some digging in the code, it seems like these digits are simply listed in reverse counting order – that is, for 3 cells, we count down from 2^3 – 1 to 0, represented as binary digits.

In[22]:= CANeighborPattern[num_Integer] :=
Table[IntegerDigits[i, 2, num], {i, 2^num – 1, 0, -1}]

In[23]:= CANeighborPattern[3]
Out[23]= {{1, 1, 1}, {1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0,
1}, {0, 0, 0}}


Stay with me – that only gets us the first row of the CATransitionGraphics; to get the next row, we need to apply a rule to that pattern and take the center cell:

In[24]:= CARuleCenterElement[rule_List, pattern_List] :=
CAStep[rule, pattern][[Floor[Length[pattern]/2]]]


In[25]:= CARuleCenterElement[ElementaryRule[30], {0, 1, 0}]
Out[25]= 1


With all this, we can now generate the pattern of 1′ s and 0′ s that represent the transitions for a single rule:

In[26]:= CARulePattern[rule_List] :=
Map[{#, {CARuleCenterElement[rule, #]}} &, CANeighborPattern[3]]

In[27]:= CARulePattern[ElementaryRule[30]]
Out[27]= {{{1, 1, 1}, {0}}, {{1, 1, 0}, {1}}, {{1, 0, 1}, {0}}, {{1, 0, 0}, {1}}, {{0,
   1, 1}, {0}}, {{0, 1, 0}, {1}}, {{0, 0, 1}, {1}}, {{0, 0, 0}, {0}}}


Now we can turn it into graphics, putting it into another GraphicsGrid, this time with a Frame.

In[28]:= CARuleGraphics[rule_List] :=
GraphicsGrid[{Map[CATransitionGraphics[#] &, CARulePattern[rule]]},
Frame -> All]

In[29]:= CARuleGraphics[ElementaryRule[30]]
Out[29]=

Screenshot 2016-01-03 14.13.52.png

At last! We’ ve got the beautiful transition diagrams that Wolfram has in his book. And we want to apply it to a row with a single cell:

In[30]:= CAMeshGraphics[{CenterList[43]}]
Out[30]=

Screenshot 2016-01-03 14.13.59.png

What does that look like? Well, we once again take our CAEvolveList function from before, but rather than formatting it with Raster, we format it with our CAMeshGraphics:

In[31]:= CAMeshGraphics[CAEvolveList[ElementaryRule[30], CenterList[43], 20]]
Out[31]=

Screenshot 2016-01-03 14.14.26.png

And now we’ ve got all the parts of the graphics which appear in the initial diagram of this page. Just to work it out a bit further, let’s write a single function to put all the graphics together, and try it out on rule 110, the rule which Wolfram discovered could effectively simulate any possible program, making it effectively a universal computer:

In[22]:= CAApplicationGraphics[rule_Integer, size_Integer] := Column[
{CAMeshGraphics[{CenterList[size]}],
   CARuleGraphics[ElementaryRule[rule]],
   CAMeshGraphics[
CAEvolveList[ElementaryRule[rule], CenterList[size],
   Floor[size/2] – 1]]},
Center]

In[23]:= CAApplicationGraphics[110, 43]
Out[23]=

Screenshot 2016-01-03 14.14.47.png

It doesn’ t come out quite the way it did in Photoshop, but we’ re getting close. Further learning of the rules of Mathematica graphics will probably help me, but that’s neither here nor there. We’ve got a set of tools for displaying diagrams, which we can craft into what we need.

Which happens to be a non-standard number system unfolding itself into hyperbolic space, God help me.

Wish me luck.

-the Centaur

P.S. While I’ m going to do a standard blogpost on this, I’ m also going to try creating a Mathematica Computable Document Format (.cdf) for your perusal. Wish me luck again – it’s my first one of these things.

P.P.S. I think it’ s worthwhile to point out that while the tools I just built help visualize the application of a rule in the small …

In[24]:= CAApplicationGraphics[105, 53]
Out[24]=

Screenshot 2016-01-03 14.14.58.png

… the tools Wolfram built help visualize rules in the very, very large:

In[25]:= Show[CAGraphics[CAEvolveList[ElementaryRule[105], CenterList[10003], 5000]]]

Out[25]=

rule-105-a-lot.png

That’s 10,000 times bigger – 100 times bigger in each direction – and Mathematica executes and displays it flawlessly.

Effective Beverages

So after a gut punch, one of the most important things to do is to take time out to recuperate.

effectivesangria.png

But funny thing is, the highly effective sangria above wasn’t the thing that broke me out of my funk. When something bad happens, I try one of the following strategies to feel better:

  • Take a nap. Or just go to bed. Sleeping can sometimes reset your emotional state. When I had my big crisis of faith in the 90’s, converting from Catholicism to Episcopalianism, I slept for like a day and a half, rethinking my whole life. Of course, if you can’t fall asleep, that’s no good – I was up to 5:50AM this morning, so blech.
  • Take a walk. This can also provide metaphorical distance from your problems. During my crisis of faith, I walked around my apartment complex again and again, taking an inventory of my whole life, weighing and evaluating everything I could think of. Today, when I tried the same strategy, I was snarling at the air, so blech.
  • Change your scene. Talking to uninvolved humans, not connected with your dramas, really can help. I had an interview with a candidate, a technical conversation about deep learning with a TL, and, later, after my mood was lifted, another technical conversation with my waitress at Opa! about the econometrics of developing nations.

As for why that last conversation happened …

20160211_192947.jpg

Which goes to the next item on the list …

  • Try shopping therapy. Doesn’t work for everyone, but I’m a bookhound. I ended up going to the Stanford Bookstore to try to pick up a book on large scale machine learning (it had sold out). The books themselves weren’t the solution, but I’m getting to that – but it did involve the books in a tangential way.
  • Get some coffee. The inventor of the idea of separation of powers, Montesquieu, reportedly once said “coffee renders many foolish people temporarily capable of wise actions” and I’ve found that to be true – which perhaps suggests that we should install a Starbucks in the Congress and change the structure of our political debates, but nevermind. It helped.

You’ll note that nowhere in here is “get a drink.” That’s a terrible idea – if you think you need a drink, you probably shouldn’t have one, as needing a drink is the road to alcoholism. For that reason, and many others, I always stop at one drink per day – period. No matter how strong the drink, it’s almost impossible for a one hundred and eighty pound male to get drunk on just one.

Having a drink after you feel better, on the other hand, can be a great relaxer. But how do you get to that relaxed state? Well, one thing I try is, well, trying to resolve the problem.

  • Talk to the people involved. I have a theory that if you have a problem with a person and leave it alone, your emotional reaction will be frozen, even intensified over time – a theory based on my personal experience, but backed by cognitive emotional theories which say your emotions are derived from your stance, your relationship to the people, actions and events in the world – which doesn’t change if you don’t give yourself the chance to have new experiences with those people. Thanks to the fact that it’s the twenty-first century, this can be done via text, even when people don’t have time to talk.

But the point at which it turned wasn’t when I got a drink. It wasn’t after I took a nap, took a walk, talked to people, changed the scene, got a book on political economy, got coffee, or texted the involved parties to finalize the resolution of yesterday evening’s gut punch. It happened at very strange place, as I was drinking coffee, as I was reading, as I was texting with my friends to resolve the problem, I got sucked in to the problem that prompted me to get the book, a question I heard in an unrelated political debate from last night. As is usual in these cases, I found that the debate followed the rule of thirds: on a third of the topics, my buddy was definitively wrong, on a third, I was definitively wrong, and on the middle third, there were open unresolved questions worthy of debate. And as I started to look at those questions … I had a brainflash on how to solve them.

And then on a meta-brain-flash, as I realized what tacking the problem was doing to my mental state: it was fixing it.

  • Do the work. Find something you love, and cultivate the ability to throw yourself into it. If you’ve had a gut punch, you might have a bad taste in your mouth about a lot of the projects you were working on … but get your brain into a new space, and all those behavior programs will execute … and give you something new to fall (intellectually) in love with.

The particular question I was tracking – how to evaluate economic policies – is something I’m going to be working on for a while, but I can give you a flavor for it: how do you know whether a political candidate’s economic policies will work? Sometimes that’s easy: for example, Democrats like to spend when the economy’s doing well, and Republicans like to cut when the economy is doing poorly – and both sides are dead wrong. An economy is not a household – cutting spending in a slump will cut the state’s tax revenues and cause an austerity spiral and increased debt; spending in a boom incurs obligations that the state can’t sustain in the next slump and increased risk. These are pretty close to ironclad laws, that operate whether you believe in big government or small or low taxes or high; those are just the dynamics of economies whether you like it or not – whether you believe it or not, suck it up.

But looking long term, some policies promote growth, and some don’t; and it isn’t always clear which is which. What’s worse, exogenous factors – those pesky world events like wars and plagues and wardrobe malfunctions – throw an unavoidable amount of static on top of whatever we’re trying to measure.

The book I’m reading gives me, so far, the impression that individual outcomes are, roughly, helped by a country’s growth, and a country’s growth is affected by things it can’t control, like the luck of history and geography, and things it can, like culture and institutions, with evidence strongly suggesting that institutions matter more than culture, since some countries have kept their cultures but changed their institutions and shown amazing growth. The factors that seem to affect this most are protecting private property, having enforceable contracts, reducing barriers for investment, having a level playing field for businesses, and creating equality of opportunity for citizens … but …

But how much of this is noise, and how much is reality?

And that got me thinking: if you assumed some randomness affecting growth, could you tell apart policies that caused 1 percent growth, or 2 percent growth, or 3 percent growth?

Turns out … you can.

The Promise of Growth v1.png

The central red line is 2% growth, projected out over 20 years. The dotted lines above and below it are 1% and 3% growth … and the grey range is the max and min of a stochastic simulation of ten different histories, each with 5% random variation from year to year, which looks something like this:

The Alternatives to Growth v1.png

The point is, if you get a gut punch – like in the bottom trajectory above – it can look like you’re running a bad policy on a time range of a decade or more before things start to get back on track. On twenty year time horizons, however, you really can start to see an affect. On even longer time horizons, having the right polices can be the difference between a country like Nigeria – rich with oil wealth, yet having a flat growth range – versus a country like the US or Japan or even Botswana or South Korea.

This doesn’t show whether I or my buddy is right – in fact, this model, even as an abstract model, would need to be augmented greatly, to get a proper range of growth rates, of randomness, of the types of exogenous influences and their timescales. But even in its current state, it shows that under a very broad set of assumptions … I and my buddy were right to wrestle over this problem.

What we do now matters, not just in the next election, but twenty years down the road.

And doing that work took me out of my slump. It connected me to an earlier conversation, to earlier problem solving skills not engaged with what I’d been doing just prior to the gut punch. The gut punch still needs to be dealt with – but now it’s just an event, not a thing that causes random spikes of rage and anger when I’m trying to drink my coffee.

effectivecoffee.png

And that’s how I learned a new way to deal with a gut punch.

-the Centaur

Appendix. The graphs above were generated via the following Mathematica code:

RandomGrowth[initial_, rate_, fuzz_] :=
initial (1 + rate) (1 + RandomReal[{-fuzz, fuzz}])

ProjectGrowth[initial_, rate_, fuzz_, years_] :=
NestList[RandomGrowth[#, rate, fuzz] &, initial, years]

InterpolateGrowth[initial_, rate_, fuzz_, years_] :=

Interpolation[ProjectGrowth[initial, rate, fuzz, years]]

FuzzyGrowth[initial_, rate_, fuzz_, years_] :=
Table[InterpolateGrowth[initial, rate, fuzz, years], {iterations, 10}]


fuzzyTwoPercent = FuzzyGrowth[1, 0.02, 0.05, 100]

Plot[{
Min[Map[#[x] &, fuzzyTwoPercent]], Max[Map[#[x] &, fuzzyTwoPercent]],
InterpolateGrowth[1.0, 0.02, 0.0, 100][x],
InterpolateGrowth[1.0, 0.01, 0.0, 100][x],
InterpolateGrowth[1.0, 0.03, 0.0, 100][x]},
{x, 1, 20},
Filling -> {1 -> {2}},
AxesOrigin -> {1, 1},
AxesLabel -> {“Years Downrange”, “Growth Rate”},
PlotStyle -> {Thin, Thin, Thick,
   Directive[Thick, Dashed],
   Directive[Thick, Dashed]}]

The Promise of Growth v1.png

and

Plot[{InterpolateGrowth[1.0, 0.02, 0.0, 100][x], Map[#[x] &, fuzzyTwoPercent]},
{x, 1, 20},
AxesOrigin -> {1, 1},
AxesLabel -> {“Years Downrange”, “Growth Rate”},
PlotStyle ->
{Thick,
Thin, Thin, Thin, Thin, Thin,
Thin, Thin, Thin, Thin, Thin}]

The Alternatives to Growth v1.png

I hope you enjoyed this exercise in computational therapy.

Welp, we missed it, but that’s OK

20160107_210119.jpg

One way to make yourself feel overwhelmed is to take on too many projects; the other is to take on too many responsibilities; the best way is to do the same thing at the same time. We missed our blogpost for yesterday; file it under (a) “you need to work a little bit harder than you want to” and (b) “best laid plans sometimes need to be set aside” again, as I ended up (a) trying to finish a bit of documentation, succeeding, but leaving work an hour late, and (b) having an hour and a half of conversations at the local coffeehouse, with only thirty minutes work time. Add to this a weekend mostly spent trying to solve my wife’s Audible problem and working on small press stuff, and I am so far behind on my writing.

The good news is, I got the first of my puzzles done for my proposed Cinnamon Frost puzzle book. The bad news is, that’s about eight projects deep on the stack of things I should be working on now. Hm, is that an accurate estimate? There’s the revised CLOCKWORK opener, the SPECTRAL IRON revision, the HEX CODE revision, the THIRTY DAYS LATER publishing tasks, edits for the 24HCD Survival Guide, first draft of PHANTOM SILVER, first draft of BOT NET first draft, and the rough draft of FAERY NUMBERS, plus the math groundwork for FAERY NUMBERS, not to mention a whole host of other small writing tasks we’ll lump into one, plus blogging – so I’m working on a pointer to something twelve items deep in my stack.

A proper computer scientist would be appalled, as might my editor for CLOCKWORK (it’s progressing, I promise! but it’s got to be awesome). But the good news is that I got a start on a wholly new project, seizing the inspiration before it evaporated.

And that’s how you catch lightning in a bottle. That and lots of caffeine.

-the Centaur

Best Laid Plans Sometimes Must Be Set Aside

20160104_204640.jpg

So I started off this year with all sorts of big plans – blogging every day, hitting the ground running at work – and it’s kind of funny to stumble so close to the starting gate. I missed blogging yesterday, and I missed today at work entirely due to bleah.

But things happen for a reason, I think; the world looks deterministic and impersonal down at the level of the laws of physics, but there’s a structure to it at a higher level which, if not real, is at least something we can take advantage of.

Case in point one: I’ve been pushing hard to finish a revision to the first chapters of my novel, THE CLOCKWORK TIME MACHINE, but it’s slow going as I’ve had to rethink my whole approach to the book. Digging through my other Jeremiah material for inspiration, I found an almost-finished novella, which my obssessive-compulsive tendencies sucked me into trying to finish. (Procrastinating on one project with another project is worth further discussion, I think, but that’s another blogpost for another time, if I haven’t already blogged on it, that is). But I made myself stop after I took a pass, and tried to tackle my daily blogpost.

At which point a friend dropped by to talk. I was at Coupa Cafe, a hot spot for great Venezuelan coffee and Silicon Valley’s startup culture, which isn’t just about startups, but is actually a hotbed for intellectual discussion. In thirty short minutes, my buddy and I dove far into the intricacies of deep learning, something which affects me a lot at work – and just as that was winding down, one of his other friends dropped in, and started quizzing me about the mathematics in my urban fantasy novels. Turns out he’s an expert in precisely the same areas of mathematics that my young protagonist Cinnamon Frost is – so I see more conversations in our future.

Definitively, that conversation was worth more than the schedule of my blogposts, so it was the right thing to do to fully engage with the human beings right in front of me rather than sticking mechanically to my plan. It’s really important to take advantage of these opportunities and to capitalize on them when they happen. That’s what this world is structured for.

Now, I’m not sure how I’m supposed to capitalize on catching my wife’s flu and waking up feeling like someone pummeled me with a half ton of bricks, but I’m sure there’s some lesson or opportunity in there. At least I … uh, dunno, got to drop off my dry cleaning on my way to the local restaurant for some hot chicken soup? Not sure what’s the lesson in there. (Though it’s probably a sign that I need to sit down with my laptop and catch up on writing documentation, which I can easily do from home).

-the Centaur

Welcome to 2016

20151219_063113.jpg

Hi, I’m Anthony! I love to write books and eat food, activities that I power by fiddling with computers. Welcome to 2016! It’s a year. I hope it’s a good one, but hope is not a strategy, so here’s what I’m going to do to make 2016 better for you.

First, I’m writing books. I’ve got a nearly-complete manuscript of a steampunk novel JEREMIAH WILLSTONE AND THE CLOCKWORK TIME MACHINE which I’m wrangling with the very excellent editor Debra Dixon at Bell Bridge Books. God willing, you’ll see this come out this year. Jeremiah appears in a lot of short stories in the anthologies UnCONventional, 12 HOURS LATER, and 30 DAYS LATER – more on that one in a bit.

I also have completed drafts of the urban fantasy novels SPECTRAL IRON and HEX CODE, starring Dakota Frost and her adopted daughter Cinnamon Frost, respectively. If you like magical tattoos, precocious weretigers, and the trouble they can get into, look for these books coming soon – or check out FROST MOON, BLOOD ROCK and LIQUID FIRE, the first three Dakota books. (They’re all still on sale, by the way).

Second, I’m publishing books. I and some author/artist friends in the Bay Area founded Thinking Ink Press, and we are publishing the steampunk anthology 30 DAYS LATER edited by Belinda Sikes, AJ Sikes and Dover Whitecliff. We’re hoping to also re-release their earlier anthology 12 HOURS LATER; both of these were done for the Clockwork Alchemy conference, and we’re proud to have them.

We’re also publishing a lot more – FlashCards and InstantBooks and SnapBooks and possibly even a reprint of a novel which recently went out of print. Go to Thinking Ink Press for more news; for things I’m an editor/author on I’ll also announce them here.

Third, I’m doing more computing. Cinnamon Frost is supposed to be a mathematical genius, so to simulate her thought process I write computer programs (no joke). I’ve written up some few articles on this for publication on this blog, and hope to do more over the year to come.

Fourth, I’m going to keep doing art. Most of my art is done in preparation for either book frontispieces or for 24-Hour Comics Day, but I’m going to step that up a bit this year – I have to, if I’m going to get (ulp) three frontispieces done over the next year. Must draw faster!

Finally, I’m going to blog more. I’m already doing it, right now, but one way I’m trying to get ahead is to write two blog posts at a time, publishing one and saving one in reserve. This way I can keep getting ahead, but if I fall behind I’ve got some backlog to fall back on. I feel hounded by all the ideas in my head, so I’m going to loose them on all of you.

As for New Year’s Resolutions? Fah. I could say “exercise more, blog every day, and clean up the piles of papers” but we all know New Year’s Resolution’s are a joke, unless your name is Jim Davies, in which case they’re performance art.

SO ANYWAY, 2016. It’s going to be a year. I hope we can make it a great one!

-the Centaur

Pictured: The bookshelves of Cafe Intermezzo in the Atlanta airport, one place where I like to write books and eat food.

Eight Hundred Fifty Thousand Words

Nanowrimo 2015-11-30a.png

So another Nanowrimo draws to a close. The title says HEX CODE, but today’s writing was finishing out a few details in scenes in BOT NET (the second part of the Spellpunk trilogy manuscript I’m working on) and then a new beginning for ROOT USER (book 3). That new beginning, which played out a scene I’ve had in my head a long time, was very easy to write.

“That’s a damn shame,” says a distant voice, “so large an animal, in so small a cage.”

Muzzily, I grogs awake. What the fuck? Can’t they see I’m sleepin’? But then the words they’ve spoken starts to set in, balls in a Pachinko machine, rattlin’ in through the Pascal’s Triangle patterns in my brain to rack up a score of maximum annoyance.

The cage, you see, is large, for its type—a safety cage. Eight by thirty, made of elaborate wrought-iron vines, fashioned special from a welder we knows in Little Five Points, the safety cage is the largest and nicest I’ve ever been in—and the largest we could fit on our front porch.

The porch is big, and Southern, in front of a house big, and Southern, a third of the way down Fairview from Moreland, not three blocks from L5P. Pretty big even by Atlanta standards, but county code sez leave the front door unblocked, so thirty feet wide is was the cage limit.

Not that it feels limiting; there’s lamps and books and ferns and an ahw-SOOOME sectional sofa we found at an outdoor patio store, which stretches almost from the porch door on the left to the <regulation width with code #> stair down to my den.

It’s a full fourteen feet of sofa, fully twelve feet of it usable—which is a good thing, because stretched over it right now, covering just about its full length this very instant, is the enormous animal that the annoying interpopers have named.

Me.

That’s why the last day of Nano has that spike: let your inspiration flow!

Nanowrimo 2015-11-30b.png

That brought me to over 65,000 words, the most I’ve done in Nano, as far as I know, ever:

Nanowrimo 2015-11-30c.png

SO I have a new record to beat. But I also cracked 700,000 words on my spreadsheet … which means, since I’ve done Nano at least three times before, my total Nano total is 850,000 words.

Nanowrimo 2015-11-30d.png

I feel pretty happy about that. Nano has brought so many creative ideas to the table, I can’t even begin to describe it. Easily a half dozen completely new ideas came to me this month – one even within the final writing session just before midnight tonight. I have to credit Nano for giving me this inspiration.

Now, onward to the next round of edits on THE CLOCKWORK TIME MACHINE … and the 50,000 other projects I’ve been putting off, like my library … though I *might* take out a little time to play a video game, or, perhaps, read a book … you never know …

-the Centaur

Recordbreaking

Nanowrimo 2015-11-28a.png

So today I passed my all-time record (for as long as I’ve kept records) at Nano, completing 60,900 words at Nanowrimo. The key I think is not just taking this week off, not just keeping going, but daydreaming about my characters—then, whenever I get inspired, writing that scene. Almost all of the huge spurts you see below came out of that:

Nanowrimo 2015-11-28b.png

Today, it was pretty easy to write. I got about 500 words finishing up a few loose ends. Then I wrote a longer scene with Cinnamon and her fae mentor the Huntswoman, and almost a day’s worth of writing popped out of my keyboard. Then I decided to write another scene, one from ROOT USER (the third book in the trilogy, of the large manuscript I’m working on) and got 2000 words in about 30 minutes (!), all from choosing to write this:

But no matter how I tries to ignore it … I can’t ignore what they says next.

“And if they lose a hunt,” the jerkboy says, “guess what? They eat the loser—”

“You take that back!” I shouts, poppin’ to my feet. I hops over the nearest table and barrels down on the boy, who’s hoppin’ to his feet as well, his buddies standin’ to come to his aid, actin’ like I’m neither a girl he should play nice with nor a monster who could rip his throat out. “You take that back this instant!”

“What?” the boy says, eyes gleaming at me. “The part where they eat the loser—”

“We are not cannibals!” I screeches, snarlin,’ my whiskers comin’ in, my fur comin’ out.

“I bet she’s eaten her share,” one of the other boys says. “Like, weregazelles and shit—”

“The herbivores are our friends! We runs together! Nobody eats nobody on my hunt!”

“Your hunt,” he says. Everyone’s circled around us now, the boy standin’ out front. He’s big, so, I guesses, he guesses he can take me in a fight. Good fuckin’ luck. He grins with a nasty smile. “Like anyone would follow you—”

“I had twelve followin’ me on my last hunt,” I says. “Thirteen, actually—”

“I thought you could count,” he says. “What, you lose one? Eat one?”

I snarls and steps forward, and he leans back, fists up. I raises mine.

Then I turns away. “Not worth it,” I mutters, lookin’ at the huge crowd around us. He swings and clocks me behind the ear, and I kinda shrugs and shakes him off. “Not worth it at all,” I mutters, boltin’ through the crowd, walkin’ fast towards the exit. “At all—”

“Where are you going, Miss Frost,” says the proctor.

“The deans’s office,” I says. “I just picked a fight.”

“Wait just a minute,” he says, hand reachin’ for me, but I shrugs him off.

“Get off me, or I go to the safety cage,” I says, snarlin. “And call for my Mom.”

“Yeah, call your mother,” says the jerkboy, who followed me.

“Christopher, I see your mouth is open,” the proctor says coolly. “Close it.”

And the scene which follows, in which Cinnamon goes to see the Dean of the Claremont Academy, who’s more cool than even I anticipated — I mean, drill sergeant in a former life? Really? Makes sense. And helped me crack 60,000 words:

Nanowrimo 2015-11-28c.png

But the point is, never give up on Nano. It will continue to reward you, all the way to the end.

-the Centaur

Giving Thanks for a Post-Nano Surge

Nanowrimo 2015-11-27.png

I normally take off the week of Thanksgiving to finish Nanowrimo, and if you look at the stack of seven hundred thousand words that I’ve written in Nanowrimos, you can see the surge there clearly. (I bet it would be even more clear if I only counted the November Nanos, but I’m doing this graph in Excel, not Mathematica or Processing or R, so sue me for laziness).

Nanowrimo 2015-11-27b.png

But even so, it’s easy to see (if you are me) that I’m perilously close to beating my all time record for November, set in 2010 with THE CLOCKWORK TIME MACHINE with 60,164 words. And there ARE four days of Nano left, so I just may keep pushing on. My record per day that I’ve kept records is over 7000 words (almost certainly the mad scramble to finish LIQUID FIRE in 2009 after getting edits on BLOOD ROCK early in the month), so that’s easily doable. And my average for these four days is close to 4000 words. One year I even made 5300 words today, on the 27th, so keep your fingers crossed.

20151126_161455-ANIMATION.gif

But as much as I like to take this week off – as much as antisocial me doesn’t want to accumulate obligations on my time, which I freely admit made the first half of this week miserable from the temporal anticipation – I really do enjoy hanging out with my friends and family, and even though I don’t get the chance to fly home to see my blood family over this holiday, I loved having the chance to get together at the house of my “brother from another mother” and his wife and to join them on their Thanksgiving.

thanksgiving-at-dereks.png

Family, friends, and good times aren’t the only important things in life. But they sure do make life a lot better.

-the Centaur