The Honeybadger

6 October, 2018

So, The Bachelor. Why do I care? Because I don’t dare browse my usual internet content at my new job, I limit myself to news.com.au because there’s a link to it in the SOE setup, and news.com.au is loaded with crap about The Bachelor.

Seems The Honeybadger knocked back all the ladies. What a bastard! So many to pick from – he owed it to Australia to marry one of ’em!

Here’s what I think.

We can all agree, I’m sure, that it would be unreasonable to pick a girl and tell a dude he has to marry her. I’d say it would also be unreasonable to pick a dozen mostly identical girls and tell a dude to pick one. And all those bachelorette hopefuls were mostly identical.

“Identical?” you exclaim? “Identical? Why – some were blonde, and some weren’t!”

Were any of ’em – for instance – short? Maybe Mr Badge deep down yearns for a little pocket rocket to make his life complete. Were any of ’em – say – thicc? A little cushion for the pushin? Or: did any of ’em have truly big tits?

Nope, nope, and nope. They were all tall-ish, skinny models.

Were any of ’em asian? Maybe Mr Cummins has yellow fever. Maybe he has a thing for dusky temptresses from the subcontinent, so: were any of ’em Indian? How about black? Or – going the other way – were any one of these bachelorettes a milky-translucent-skinned green-eyed ranga? Molly Ringwald had her fans, you know.

But let’s get away from the merely physical.

Were any of ’em shy? Or demure? Or were all of them perfectly comfortable in a dress with a “neckline” plunging all the way to the navel?

Were any of ’em – oooh, I dunno – a fiery Mediterranean type? Maybe Mr Cummins has a thing for women who yell in Spanish or Italian, or Maltese women who truly believe in revenge.

Were any of ’em sincerely religious?

Naaah. There very format of the show makes it impossible. They were all models looking to get their faces and bodies on TV.

Were any of them really financially smart, a self-made millionairess from her own investments? Was any of them a waify, distracted art-girl? A nose-ringed anarchist? Or how about a country girl that can butcher a whole pig, no worries?

I’m sure at least some of them wanted children. So: how many of them could cook a family meal? Do a roast like it’s not really a big deal, it’s just what we usually have on a Sunday?

See what I’m saying? Don’t get me wrong: don’t accuse me of saying that a girl must be all of these things. Being one of them, or one of the millions of other types of individual is perfectly fine. There’s nothing in the least wrong with being a skinny cookie-cutter model with a white girl ass and no hips and I’m sure all of these women have their admirers. But insisting that Nick is obliged to marry a girl like that? When that’s just not what he happens to be into?

Hell no.

At least he takes marriage somewhat seriously. Seriously enough, at least, to not commit to someone because a TV producer tells him that Australia expects it.

It’s a stupid TV show. Its premise is bonkers. And it’s mainly some of the worst kinds of people who would want to be on it. They’ll never put an honest man on the show again – they’ve learned their lesson. From now on, every bloke playing the season’s bachelor will be an impossibly handsome gay guy with a wholly invented and scripted back story.

Advertisements

Living Green

8 September, 2018

A while ago, Make Hack Void was contacted by a certain Tracey B, who was interested in a collaborative art project thingy involving, hopefully, some LED lights evoking waves on a sea shore. I had been fooling about with Arduinos and NeoPixels, and I mostly approve of art in general, so I stuck my hand up. The result was – well, not as grand as I might have hoped. But it did work, at least.

Anyway. It seems someone in Norway wants to try something similar, on a slightly bigger scale, so I’ll write down here some stuff which hopefully might be useful to her. I belive she already works with breadboards and arduinos, so this will not be a detailed how-to.

Initial Impressions

Tracey had already sourced a couple of strings of individually addressable LEDs off the internets, which she brought to our initial meeting. But, had no idea how to go about making them light up, much less do some kind of seascape-y thing. With the aid of a magifying glass app, I examined them and determined that each led was powered by a WS2811 driver chip and that the string had three conductors: power, ground, and data. So, my initial reaction was “yep, I think I can make these things go”. I took one of the two strings home with me to see if I could make them at least light up.

This proved to be no problem.

There were other possibilities that might have made the project different. For instance, there are RGB strings of LEDS with four conductors: ground, R, G and B. Another possibility is common-anode. Instead of ground, there’s a +5v. This works well with a ULN2003A. You use a PWM arduino output to switch the ULN2003A, which supplies the power that the lights need. The disadvantage is that you only get one colour for the whole string, which limits what you can do. The advantage is that some of these strings are 12v and quite a bit brighter than what we had.

In any event, I found that the neopixel library that adafruit makes for the arduino worked perfectly fine, except that this particular string did not have the standard RGB arrangement. That also is perfectly fine: the library comes with 6 constants for the 6 possible permutations of RGB. It meant that mixing these particular lights with a string of the more standard variant would be awkward … but we weren’t planning to do that.

Making them light up

So, with the aid of a loupe I worked out which end of the string was in and which was out. Or maybe I just tried it both ways and found which one worked 🙂 . Ground and power off the arduino board itself into red and black and one of the standard adafruit demo sketches into pin 6 and from there into the white conductor on the string, and the thing lit up just fine. I discovered the RGB/BGR thing about this particular strand at that time, but this was no problem.

The code

The code – legal arrangement

When doing Arduino projects, I do so with the agreement that the code will be released into the public domain and published on github.

Even for paid projects, the code is released publicly. My position is that you are not paying for proprietary code, you are paying for getting me to write the code that you want. No contracts, no legal nonsense. When I accept jobs on the ‘gigs and collaborations’ board, I just ask that the fee be remitted to my PayPal if the code works for my client and they are happy with it. I think I have been done out of my fee only once.

For a weekend job, I typically charge $50 AUD. It’s my hobby, I do it for fun. I think I did Tracey’s job for free (pretty sure), and just asked her to cover the cost of parts. I do confidential, proprietary code at my real actual job. Any sort of confidentially requirements mean that you have to pay me real actual money, which for me is $100/hr.

Tracey was perfectly happy with the Living Green code being released to the public domain, which is what I expected, and we could proceed.

The code – design of the effect

The code is here.
.

The only design spec I was working with was “something something waves on the sea shore, it can be pretty abstract”. I didn’t know at the time how the strings were going to be mounted or arranged. The string itself was 50 lights long, and Tracey had two of them. I wrote a sketch that would power 100 lights.

Neopixels work by chaining the data. Data is sent to the lights in a stream, and each light removes the head of the stream and sends the rest of the data down to the next light in the chain. If the data falls off the end of the chain – this is no problem. That meant that I didn’t need to worry about the exact number of lights we would be working with.

So, I set up a system of sine waves that would be added together. It’s hideously over-engineered, of course, because that’s just how I roll.

The heart of the system is a C++ class named ‘Sine’. Sine has a wavelength and a frequency (fixed values), and a current theta position. Frequency is rotations per second, wavelenght is how many pixels long the wave is. When advanceMicros() is called, theta is updated. The v() method gets the current value of the sine wave at a given position along the strand, adjusted to a 0-1 range. v_for_mul gives a value of -1 to +1, which I decided to include when I wanted to multiply sine waves together.

There is additional code in there to permit the creation of a static ‘advanceAllMicros’ method. When the Sine objects are instantiated, they automagically add themselves to a static linked list of Sine objects. This means that if you simply create a Sine object and the code periodically invokes advanceAllMicros, that Sine object will move with correct timing without you having to do anything further.

With that class written, it was a matter of coming up with a pleasing effect.

I created a sine wave that moved in one direction (waveIn), and another that moved in the opposite direction (waveOut). I gave these a slightly different wavelenght and speed so that it wouldn’t look too regular. I decided that one of them would be green-ish, and the other kinda cyan. The rgb value of each pixel becomes an average of these two values.

I then decided that it would be nice if these two effects sort of took turns – the wave would move one way and then the other. So I created another sine wave, waveInOut, which moves a bit slower. Rather than taking an average of waveIn and waveOut, I took a weighted average, the weight being taken from waveInOut. This weight doesn’t vary by position along the string – I just use waveInOut.v(0). I could have used position along the string, but you want the effect to be ordered enough that a viewer can see a pattern, but no so ordered that it’s predictable. Another issue is that people aren’t going to be looking at it for very long, so it’s can’t be too visually chaotic.

Finally, I decided that it would be nice to have some sparkly highlights simulating ripples. So I made rippleBase and rippleMul. These run fairly quickly, and the effect is difficult to describe. But I was happy with it. I add this as a pure blue component to the final result, just to mix it up a little.

Finally, I felt that maybe a high-tide/low-tide component would be nice, so I added a tide Sine object with a frequency of ‘once every half hour’, which would adjust the overall effect of the main wave components.

The point of all this being: once you have defined an object that does something definite and simple, playing about with it is reasonably easy. With the Sine object defined, fooling about with different frequencies, different intensities, different combinations of waves is simpler.

What I would do differently

I’m pretty happy with the effect I eventually got. The main issue was the ‘tide’ thing. Having a half-hour cycle is kinda cool, but no-one is standing there looking at them for that long, so it was a bit pointless. The lights were not bright enough for the site, and having them slowly go dim over time didn’t work well on the day. My clients addressed this by rebooting the whole thing periodically, which isn’t ideal.

The code – overall control

Well, with all those parameters to play with, you’d like your client to be able to play with them. I built a mounting box for the project out of a small plastic food container and put a potentiometer and a couple of buttons in it. This allows you to get numbers into the sketch.

Ultimately, I rigged it up so that you could control the overall speed of the effect and the hightide/lowtide brighness. As I mentioned, the whole ‘tide’ thing was a bad idea, so ultimately this control box was pretty useless. I stuck the Arduino itself into it, but that’s all it turned out to be good for.

What I would do differently

These days, I’d provide a web interface. Several ways to do this.

Alternative ways to do sketch control

Don’t bother.

Why bother? It’s some background lights for the real show, which is the art stuff and art words. Relax! Just because I’m doing up some blinkenlights, doesn’t mean it’s the most important thing in the world. Get it right and put that in the code. Of course: this means that you really need to see the final result installed so that you can perform final code tweaks.

Arduino serves up web pages

This is not ideal if you want the general public to be able to fool with the settings, because network interaction will interfere with the display. It will freeze or get choppy while pages are being served.

There’s issues with storage, too. Web pages are bulky, especially if you want images. So we are talking SD cards. It’s really not worth it.

Arduino communicates via HTTP/JSON

Put the webpage elsewhere, have the arduino accept JSON packets from the HTML forms. I have had some sucess using AngularJS for this. The NodeMCU connects to the household web router, with the SSID and password being given to the arduino over a serial connection and stored in EEPROM. Most of the web page content is on wordpress or something.

For the ‘art installation in a shipping container’ situation … perhaps you’d want to set up a router.

Arduino communicates via serial

That is, you have a computer hidden behind a cushion somewhere and an app running on it talking to the arduino over USB. I’m tending to think this would be the best option if you want to let the system communicate with the general public, simply because it allows you to use a domain name. Have the domain name point at a server on that computer, and have it connected via serial to the microprocessor. To keep people from fooling with the exhibit remotely, have a password that changes periodically.

In general

In general, it helps if you have a fairly definite idea of what you want a system to do. “It should have public interaction” needs to be narrowed down a bit.

Any system that involves serving up web pages is going to need something better than a microprocessor to actually serve them up. A microprocessor can do it, but not well.

I would not be inclined to attempt this remotely, communicating via skype or email.

Physical installation

So, the big day came. We were going to actually mount these lights into Tracey’s art thing.

The art thing turned out to be a fabric covering over some seashell forms made of bubble-wrap. (Which doesn’t do the art side of things justice, of course. Is the Mona Lisa just some pigment on a board? If your job is maintaining the Lourve climate control, then yes.)

The lights themselves – I should mention – were more like christmas lights than like the neopixel strips available from adafruit. Attached to the forms, they did not lay down in neat rows, which was good.

We decided to lay the lights on top of the forms under the fabric. We tried laying them under the bubblewrap, but the light was a bit too diffuse and dim. In the end, we simply stuck them down with tape.

Strings of neopixels can be cut. To operate, all that needs to happen is that they need to be supplied with 5v power, and a data line needs to come out of the out of the last pixel on one string and into the in side of the other. I was concerned that chopping the strings up into fragments might ruin the effect, but this turned out to be not the case. For the ‘nautilus’ shell, we attached a string in a spiral. For the scallop, we cut a length of string into five strips, lad them next to each other, and connected them. The ‘wave’ effect was still evident, or evident enough. Enough that you could say ‘yep, that is totally meant to be the sea’, which is all you need really.

Connections were done from the arduino to the pieces and between each piece using brown automotive wire and automotive ‘bullet’ connectors. This was very horrible, bulky, and ugly. I have since looked at using modular phone handset connectors for the same job, but these are also pretty horrible and the socket for a modular phone connector is bulky.

In retrospect, a three-conductor stereo audio cable with 1/4″ jacks might have been better. An issue might be capacitance, which would limit the length of the the data line.

You cannot power lights like this off the microprocessor pin. We used a separate power supply. The arduino and the neopixels both use 5v USB power, so any USB power-pack is suitable and proved adequate. Power was taken out of this for both the lights and the microprocessor.

Speaking of which, originally I had a UNO-3 set up for all this, but during installation I decided it was a little bulky. I had a leostick clone in my parts box, and soldered connections onto that. Much smaller.

So, how did it go?

It was just not bright enough. Originally, the exhibit was outdoors. Outdoors on an Australian spring day. It’s just not feasible to do any sort of light show it a situation like that. The Australian sun is not just bright, it’s full of UV which physiologically makes it even brighter. Fireworks are not bright enough on an Aussie spring day. 5v LEDs? They never had a chance.

The exhibitors managed to get it moved inside, which at least made the display visible. As I mentioned, the tidal stuff was a mistake, making the lights dim in comparison to ambient.

But, it was rather pretty overall. The power supply worked just fine, and the thing was nicely in context. A couple of people stopped and looked for a moment, which is mostly all you can hope for. Unappreciated art is almost proverbial.

I’m thinking of doing something like this, but in a shipping container. Do you have any advice?

Jeez. Shipping container eh?

I’m pretty sure a string of 50 5v LEDs isn’t going to cut it there, either. Not if it’s a major part of the installation. Here’s some 12v neopixels. Here’s some more. On the plus side, they’re 12v and bright as. On the minus side, it’s $50-$60 for 20 of them. You are not going to get away with much change from a thousand bucks if you want to have an effect encompassing the whole container, no matter how you do it.

You’ll want to inject power into them at intervals – don’t just try powering them from one end. The current will set fire to something. Power each strand of 12 individually. Data is less of a concern. You can daisy-chain everything you have, or run separate logical strands. Adafruit will happily sell you a power supply, but if you’re in Norway then you’d be better off just going to an electronics shop. The nice thing about 12v is: car battery.

I’d get online and search “outdoor stage lighting”, or “DMX”, or I’d head over to “Capital Sound and Lighting” (or the equivalent wherever you happen to be) and talk to those guys. Rent something. I’d explain the them that gosh darn it I’m an actual computer programmer and I can make DMX-driven lights dance, which means actually getting one or two from somewhere and playing with them beforehand so you can justifiably claim that.

An arduino will talk to DMX lights. But there might be better options. Although it’s unlikely that there’s be an off-the-shelf effect box that does what you want, quite possibly there’s a way to get some python code or something talking to an attached peripheral.

In summary

  • The best is the enemy of the good.
  • Some lighting won’t amaze anyone, not in this day and age. Remember that it’s only a support for the actual content of the exhibit.
  • What you are thinking of is probably do-able. It’s going to cost some money.
  • Someone like me needs something concrete to work with first. Art usually happens within the constraints of some medium. The key moment was when Tracey handed me the strand of lights that she wanted me to work with.
  • Nothing is ever quite as good or quite as bad as it first appears to be.

Some minecraft

2 March, 2018

This post attempts to describe my setup for growing maxed-out astral sorcery crystals using integrated dynamics and integrated tunnels.

To make all this work, we use several ID channels. Each channel has a single chest or fluid tank. The components work by exporting and importing crystals between appropriate channels.

Starlight

Run fluid pipe from beneath your lightwell into a tank. If you are using Thermal Dynamics for this, it must be at least hardened or it will break (starlight is extremely cold). You will need a servo, because lightwells don’t auto-extract. Attach a fluid interface to the tank – my setup uses channel 0.

Channels

Add three chests to the network each with its own item interface on channels 1,2, and 3. Channel 1 will be for crystals needing to be grown, channel 2 for crystals needing to be cut, and channel 3 for completed maxed-out crystals.

Budding off new crystals

Create a spot for the budding pool. This spot will have an entity reader, a world fluid exporter, and an world item importer. Easiest way to to this is to place a solid block, put the components on that, then break the solid block.

Create a fluid variable from a bucket of starlight. This goes in the place fluids aspect of the fluid placer, using channel 0. This will keep the block full of starlight as it is used up.

Throw a celestial crystal with a purity of 100% in the pool. To get one of these, go through the process manually: you only need to do it once.

Make a variable from the ‘entities’ aspect of the reader. This will be of list type. Make an integer variable from the len of that list. Make a constant variable 1. Make a boolean variable that is true when the list length > 1. Put this in the ‘pick up all item entities’ aspect of the world item importer. Set the channel to 1 (or 2, that also works). The rate does not matter, because each crystal counts as its own stack.

The result is that the crystal in the pool will be grown, the starlight replenished as needed, and when a new crystal buds off, it will be put in the chest on channel 1.

Growing the crystals

Make another pool. This one needs a world fluid exporter exporting starlight from channel 0, an entity reader, a world item exporter, and two world item importers.

As with the budding-off pool, read the entities aspect to get a list variable and use the ‘is empty’ list operator to get a boolean variable (easier than len()==0). This goes in the ‘place all item entities’ aspect of the world item exporter, which must get its items from channel 1. The effect of this is that it will pick out a crystal from the ‘needing to be grown’ chest whenever there is no crystal in the pool.

And now it gets a little complicated. 🙂

Take a variable off the ‘entity’ aspect of the reader. Make a variable entity off this using ‘entity NBT’, to give an NBT object. Create String variables with the strings ‘Item’, ‘tag’, ‘astralsorcery’, ‘crystalProperties’, ‘size’, and ‘collectiveCapability’. These are probably case sensitive.

Using the NBT.tag function, create a series of variables drilling down the NBT tree -> ‘Item’, ‘tag’, astralsorcery’, ‘crystalProperties’, then on that final NBT create two integer variables using NBT.integer for ‘size’ and ‘collectiveCapability’. Use your labeller. In my setup, I label the ‘collectiveCapability’ variable to ‘cut’, and the ‘size’ variable to ‘size’, duh.

Create two integer variables with values 100 and 900 (assuming we are making celestial crystals. You’d use 400 for regular crystals … but why would you bother? You only need one to start with). Create three boolean variables size==900 (which I label ‘big’), cut==100 (which I label ‘perfect’), and cut!=100 (which I label ‘imperfect’).

Create a variable using the && operator for ‘big && perfect’. This goes in the ‘pick up all item entities’ aspect of one of the world item importers and should import into to channel 3. This is the output.

Create a variable for ‘big && imperfect’. This goes in the ‘pick up all entities’ aspect of the other world item importer and should import into channel 2.

The end result is that whenever this pool is empty, a crystal will be placed into it from chest #1 and the crystal will be grown until it has size 900. At that point it will get put either in chest 2 or 3 depending on whether is it properly cut or not.

Cutting the crystals

Place a grindstone. This will need 3 player simulators and a block reader. Place another chest with an inventory reader, an item interface, and an item exporter. The item interface will be on channel 4.

Take a variable from the ‘inventory empty’ aspect of the inventory reader. I label this ‘4empty’.

Take a variable from the Tile Entity NBT aspect of the block reader on the grindstone. Make string variables ‘tag’, ‘astralsorcery’, ‘crystalProperties’, ‘size’ and ‘collectiveCapability’ (or re-use the ones you already have).

As with the growth pool, descend the NBT tree on the grindstone to get integer variables for tag.astralsorcery.crystalProperties.size and .collectiveCapability . I prefix all the label names with gs_ for ‘grindstone’, and so these two variables get labelled ‘gs_size’ and ‘gs_cut’.

Use the NBT.hasKey(‘tag’) operator on the root tile entity NBT variable to make a variable named ‘gs_hasCrystal’, and the negation of this to make a variable named ‘gs_noCrystal’. This works because the ‘tag’ NBT entry on the grindstone is only present if there is a crystal in it (there is no ‘Item’ entry because the grindstone is not an inventory – that’s why you need player simulators).

Make a boolean variable labelled ‘gs_perfect’, from ‘gs_cut == 100’. Make another boolean variable ‘gs_imperfect’ from ‘gs_cut != 100’.

Make a boolean variable ‘gs_toosmall’ from ‘gs_size < 100'. I use 100 because a single pass of the grindstone takes less than 100 size off a crystal, and I already have an integer variable with a value 100, so I can re-use it 🙂 .

Make a boolean variable 'gs_done' from 'gs_toosmall || gs_perfect', and a variable 'gs_notdone' from '!gs_done'.

On the item exporter on the chest, have it 'export all items items' from channel 2 with the condition 'gs_noCrystal && 4empty'. This will place one and only one crystal needing to be cut in the chest when the grindstone is empty. Because the item interface on the chest is channel 4, and the item exporter takes from channel 2, the crystal is moved from channel 2 to channel 4 of the system.

Make an 'item' variable from any celestial crystal.

On the first player simulator on the grindstone, have it 'click item' using the celestial crystal item variable. Channel 4, right-click true, and check NBT to false (otherwise the crystal needing to be cut must be identical to the crystal you made the item variable with). This will place a single crystal from chest 4 into the grindstone, but because the chest only has a crystal when the grindstone is empty, it will not continuously right-click the grindstone and potentially ruin the crystal in there. In effect, what is happening is that chest #4 is used to overcome the problem that we cannot put a boolean on the 'right click with item' aspect of the player simulator. The presence or not of a crystal in chest 4 serves as that boolean.

I have just been watching direwolf’s youtube video. I was not aware of the tiny chest. Using one of these would make this system simpler, as you do not need the 4empty mechanism to ensure that the chest only has one item in it. You still need the gs_noCrystal so that it only gets filled when the grindstone has no crystal in it.

On the second player simulator, make a variable ‘gs_hasCrystal && gs_notDone’ and put it in the ‘click empty’ aspect. This will turn the grindstone until the crystal is too small to grind anymore or the cut is 100.

On the third player simulator, make a variable ‘gs_hasCrystal && gs_done’ and place it in the ‘click empty’ aspect with sneak == true. Set the channel to 1. This will pick up completed (or incomplete cut too-small) crystals and put them back in the bin of crystals to be grown.

The end result is that whenever the grindstone is empty, a crystal is right-clicked into it from chest 2 via chest 4. This gets empty clicked until the crystal is either perfect or too small to grind anymore. At that point, the third player simulator sneak-clicks it back into inventory #1, from where it will make its way to the growing pool.

General notes

And that’s it.

I use a separate variable store for each of the three processes – they’re not that expensive, and it helps with keeping things organised. Labelling the variables is also indispensably helpful when using the programmer. Label the strings, too.

Playing New Horizons III, I find that ID occasionally jams. This tends to happen when I reload the game, and when I AFK away at my main base which is several chunks away (my AS setup is in a sparkly star zone). To fix this, my variable stores are connected to the rest of the system via an extra length of logic cable. I find that breaking and then replacing it un-jams things.

I sometimes find that the World Item Importer on the budding pool fails to import an item. This leaves two crystals in the pool, and astral sorcery will only grow crystals if there’s just one. To fix, pick up both crystals and chuck one back in the pool. The other you can just put in chest 1.

Growing crystals is slow, but this system means you can AFK and come back to three or four maxed-out celestial crystals. One of these will make 11 lenses. The waste crystals that you got from creating your initial 100% pure crystal can be thrown into the lightwells.

And you can add more pools for growing and budding by making a new variable store, making a new set of variables for the pool, and importing/exporting to the existing chests. I’m finding that neither growing nor budding is obviously the critical path – budding is slow because once the crystal gets to 900, it will still be a couple more cycles before the crystal buds; but growing is also slow because after the crystal is grown to 900, cutting will reduce its size and it will need more growing anyway.

In the image at the top of this post, crystals are moving from right to left through the system, because that’s how I wound up building it.

The display reading 799 shows the size of the crystal in the budding pool. It will hit 900 and stay there until the crystal splits, at which point one of the smaller crystals will be removed and one will remain to be grown up to 900 again.

The displays reading 824 and 100 are the size and cut of the crystal in the growing pool.

Not visible in the image are two more displays showing the size and cut of the crystal in the grindstone. These are normally 0, because grinding happens very fast and the grindstone is usually empty.

The displays are not necessary, but they are kinda cool. They are also helpful in that you can see if the system is jammed or not – when it becomes jammed, the displays read 0 even though there should always be a crystal in the budding pool.

If you don’t want to build the full system, I’d suggest that the grindstone displays make it so much easier to grind crystals. Player simulators are expensive, so doing the grinding manually is an option – just come back to the setup every now and again and grind the crystals in chest 2. The displays make it a simple matter to just right-click that grindstone until the numbers are improved, and then it’s back into chest 1.

Personally, I think AS should be nerfed with the rule that if you bud off a new crystal from a celestial crystal, the new, purer crystal should just be a regular one. But as it is, with this system you can have a chestful of maxed crystals AFK.


Environmentalism, Tony Abbot, and Satan.

11 October, 2017

A friend asked me for my perspective on this:

“Primitive people once killed goats to appease the volcano gods. We’re more sophisticated now but are still sacrificing our industries and our living standards to the climate gods to little more effect,”

Tony Abbot, reported by The Age.

My reply (which could stand a little editing):

I expect you are asking me specifically because of my past religious background, so I’ll add a perspective from that POV.

Some fundamentalist Christians see in environmentalism a strand of nature-worship. This may be understood as a philosophical pantheism, or a more naive tree-worship. There’s also an equivocation between the “paganism” of the modern hippie and ancient greco-roman “paganism”. They aren’t really the same thing at all, but we call them the same thing. And a person who isn’t a terribly clear thinker easily conflates pantheism with worship of the greek god Pan.

But so what? So what if Greenies think trees are nice? So what if some of ’em have Viking rune tattoos?

It’s important to understand that a fundamentalist christian believes that demonic spirits are literally real. Jesus cast demons out of people. Now, either Jesus was wrong, or demons are actually a thing. There a story of Jesus fasting for 40 days in the desert and being personally tempted by Satan. The story is clearly, clearly allegorical, but the biblical literalist takes the position that if this story was meant to be understood allegorically, God would have told us so.

The ancient Christians believed that the miracles of the pagans were perfectly real, and accomplished by demonic power. Fundies more-or-less regard anything in the least bit “spiritual” that isn’t christian to be of the devil. Whether the gods of Greece and Rome, or the vague woo-woo of the hippies, it’s all demons. When a hippie talks about a sense of connection with nature, they are being connected to the devil.

Fundamentalist Christians see “spirits” everywhere. This modern notion that we ought have a care for the natural world is probably spirits, which is to say demons. It’s all part of the same old big ball of wax that Jesus came to deliver us from. We know it’s spiritual because it’s about values. The abstract idea that values like environmentalism are spiritual and the more concrete idea that the Druids were in literally contact with actual, real demons gets all muddled up and stuck together in a big tangled mess of worrying ideas. (A person who believes in devils is afraid all the time, despite their protestations that their faith in Jesus keeps them safe from them. It’s a constant undercurrent of worry, especially for parents.)

The general notion that science is a good thing, also, is a spiritual force in our society. “Science” itself is a spirit, perhaps. Or perhaps blind trust in science – scientism, if you like – is a spirit, a great evil spirit sort of hovering in the air over humanity. An evil spirit clearly of the devil, because we should be putting our trust in Jesus alone. From it springs a multitude of lies, perhaps the greatest being that we don’t really have eternal spirits and that the devil is not real.

I appreciate that none of this makes much sense, that there’s a truckload of non sequitur in all this mess. But it doesn’t have to make sense. These are fragmentary ideas in the minds of (many? most?) Christians and especially fundamentalist Christians. Remember that most people are not terribly bright. [edit – perhaps what I really meant here was that most people are intellectually lazy, and perhaps what I mean by that is that I was]

This next bit is important, and perhaps I should edit this mail to make it more central:

Fundamentalist, biblical literalist Christians are creationists. The bible says what it says about where the world came from. In order to believe in creationism, you must conclude that the theory of evolution is wrong, or a lie. Consequently, creationists must and do believe that the scientific community is committing a fraud against all of humanity. And has been for hundreds of years. The idea that “science” is actually a vast conspiracy to deceive humanity is not new. It was not invented recently in reply to this latest climate science business. It’s as old as Gallileo and Newton. I mean, sure – not every scientist is an active conspirator. Some are misinformed by other scientsts (we all know that those white-coats are intelligent only in their specific area, and outside that they are absent-minded fools, unlike us reglar folks who have common sense). Some are mistaken. Most are just going along with the general consensus. But “the general consensus” is, of course, a spirit. The bible speaks of a “spirit of the age”. And it all comes back to The Devil.

Now, not all fundies take the whole thing as seriously as all that. And many who do literally belive this stuff don’t really spend a lot of time thinking about the implications of it all. But these ideas are all part of the package, the big old mess of ideas sloshing around in the Hillsonger’s brain pan.

So we get to Tony Abbot, who is not a Hillsonger but is a Roman Catholic. There’s what the americans call a “dog-whistle” in this message – something that is heard by the people that it’s intended for, and is inaudible to anyone else. And that dog-whistle is the charge that environmentalism and the climate science establishment is literally Satanic. Literally motivated and orchestrated by The Devil. Ol’ Scratch. Lucifer himself. Really.

Sure, it’s a long stretch to cast coal-fired electricity plants as fighting the good fight on the side of God against the general corruption of the age. Ludicrous, when you think about it, particularly given Jesus’ views on excessive wealth. The trick, as always, is not to think about it, but to know it. What Orwell called “bellyfeel”, what Steve Colbert calls “truthiness”, what the average Christian calls “knowing it in your heart”. You just know by faith that those greenie ideas are all from the devil, and so we should dig up and burn more coal just to spit in the devil’s eye as much as for any other reason.


Not exactly Cinderella

7 June, 2017

“Captain Mallard! What a delight to see you here! I hardly hoped you would come, so pleased you could make it.”

But let’s rewind a few hours.


The Dairy King had been something of a shock for poor James. I mean – one hears of that kind of thing. But being thrown into the thick of it with Uncle Ben – the Black Duck of the family – took a little coping with. James had managed to foist him off onto Tarry, and had also managed to find a relatively quiet and up-market casino. The word being “relatively”. Decent gin in the martinis, and the hookers were almost fully clothed – although the practised eye might have noticed the lack of fussy buttons, catches, and laces on the dresses.

The Dairy King hosts a non-stop Mardi-Gras with laser lighting and pumping EDM. Andrew described various milk and dairy-product-related shenanigans which … you had to be there.

The Diary King is a big, proud, magic and steam-powered vessel, and utterly unsinkable.

As for the hookers … I assure you that the main thing a hooker looks for in a working dress is something easy to get out of. Bra, but no panties.

James decided that grandfather Lancet had put him here for some reason or other, and that he probably ought to make some sort of a showing. A little drinking, a little gambling (he even won – a pleasant surprise), and someone still with all her teeth to take back to the cabin for some afternoon delight.

James isn’t me. James is from good family, is a junior officer in the Imperial Army, and has a Charisma of 16 – which easily puts him in the top 10% of attractive people. He’s tall, slim, good-looking, clear headed and clean shaven, and has no difficulty in social situations. Sure, sometimes that makes role-playing him difficult. I have to guess what his life would be like, lucky bastard.

After they were done, the girl left, and Uncle Benjamin stepped in – hearty, backslapping, and more than a little drunk. Let’s say “moderately”.

“James! James! Trust you to find the good ones, the apple doesn’t fall far from the tree, I see.”
“Uncle. Our credit is good?”
“Of course! Of course! Porsche is one of the good ones, lad – smart and discrete. She works for the Dairy King, you know. Now, if you can take a little advice from your uncle, then take this to heart: never fuck the same girl twice in a row. Not until you are married.” Benjamin Lancet’s face flickered for a moment – the bluff, red-faced, careless sot replaced by that of a shrewd and serious man who had seen a little of the world, a genuinely concerned relative. James answered with a look and a small nod, and the mask slipped back in place.

I got the impression that Benjamin is actually a Lancet and kinda sorta got some sort of Mallard family title as part of the same deal in which Ducalis married Frances. The Mallards are book-smart wizards and courtiers – politically savvy public servants. The Lancets are shrewd bankers and businessmen. I am informed that Uncle Ben is the “Black Duck” of the family. I suspect that someone is a Game of Thrones fan.

“Well! We should invite your friends aboard! All Griffinsheart’s merry heroes together again. It’d be a shame to break up the group.”

And so they wrote a note inviting the party to travel westward on the Dairy King. The “King” would embark midday tomorrow. Eight berths were booked. Left unsaid was that at least one of those berths would be unoccupied, Cannis Lashley having perished in the defense of Santa Cora. Benjamin watched, a little bemused as James summoned sprites to make copies of the notes and Arcane Marked each one.

Out of game – eight berths because Dref has a new character. In game, however … how did whoever booked this know we needed eight? They would have to have done it before Cannis died. Oh – of course. I think this was all set up by granddad Lancet.

In the end, James decided that for his one night remaining in Santa Cora he should accept at least one of the dozens of invitations he had been sent. “A ball? You are going to a ball?”, asked uncle Benjamin. “Well, somebody should”, replied James, “and nobody else really can. Nacelle, perhaps, but she may make certain people uncomfortable and that’s not really the point of the evening. Mal is dwarvish nobility, which really wouldn’t do at all right at present.”

Nacelle is a female drow paladin of the Great Gold Wyrm. She has a strength of 16 and is not to be trifled with. What can I say? Peeps be raycis.

James had sorted through the various invitations he had been given. One or two caught his eye, and one of those was being held tonight. Isabella, the Countess Lorraine, was holding a charity ball in aid of the displaced and homeless of Santa Cora. Countess Isabella packed rather more clout than one might suppose. The count was also a colonel commanding the Regiment Lorraine, one of the older and better-respected units, and the countess herself was quite the society matron. That she was here in Santa Cora at all was interesting in itself. There would most certainly be news from the west.

Attending a ball is actually a rather expensive business. One is expected to arrive and to dress in style. James would be attending in his dress reds, of course, and the whole point of a uniform is that it be uniform. But details matter. James flew about the city. A little help from Uncle Ben and a visit to the Mallard unit turned up a family brooch to be pinned to a sash – the three mallards, of course – a tastefully expensive swordbelt, and James outright rented a jeweled dagger for the evening. For his sword, however, James decided that his plain working shortsword would perhaps send the right message. Likewise, rather than arrive in a carriage he would arrive on horseback – a splendid glossy-coated chestnut courser borrowed from the Mallard unit. With some misgiving, his cloak and wand remained behind. Last but by no means least, he organized an eyepatch to conceal his necromantic stone eye. Then, with his dress uniform crisp and immaculate, his boots polished to a mirror shine, and with invitation in pocket, and he was ready.

He arrived and made his way along the receiving line. “How d’you do”, “Enchanted”, as appropriate. He was relived to see that his rig had hit the right notes. In particular, his was not the only uniform in attendance, and he not the only one who had brought his working sword along. A plain sword, he guessed, would be something of a badge of honour for the next few months.

And finally, the countess herself. A brightly intelligent midddle-aged woman. James felt instantly at home.

“I could hardly miss the entire season”, he replied, “and such a good cause.” The countess smiled and nodded, and James moved on. He had reluctantly financed the evening from the Lancet treasury via his magic pouch, but that was small beer compared to what faced him now. Oh – did you think that these things were free? Before James was the guest book, and against each name was an amount in support of the Countess’ charity. James wrote his family name “Mallard”, and a number that made him wince a little. Not extravagant by any means, quite correct really, and father would understand. But still.

That done with, he made his way into the ball.

This charity ball will raise – in our money – hundreds of thousands, perhaps millions. It’s a major city, after all, and there are quite a few very wealthy people knocking about. Charity and noblesse oblige is how the nobility tax themselves. A million bucks isn’t actually a lot of money these days … but it isn’t nothing.

Peeps, I am going to stop this here, because I have Dwarven Forge castle pieces that need painting, and really I just wanted to talk about the idea of attending a ball.

James got a little intel: seems the Emperor himself has sailed with the fleet. Maybe we will have some sort of party meeting next week on the Dairy King. I don’t know what else may have happened at the ball. Some dancing, some canapes, perhaps some brandy and cigars and good advice later on. James is a little young to hang out with the true veterans, but “hero of Santa Cora” and all that. Perhaps there will be retcon 🙂 . Presumably James scored various other info as well, but that’s all part of maintaining his “Minor Nobility” background.


Seeing is believing

11 February, 2017

I haven’t been blogging RotW, but tonight’s little bit of ingenuity deserves a mention.

So, we are in the Ivory Labyrinth  – part of The Abyss. The Ivory Labyrinth has several … places. Connected in strange ways. All are mazelike – a simple maze of bones, a swamp of mazelike streams, a lightless maze of caverns. You get the idea.

We were in the slums of Blackburg – a maze of twisy, winding alleyways. A sprawling favella. We needed to get to The Breathless Mountains – a maze of treacherous mountain passes (avalanches, rope bridges, gales – you get the idea). But how?

We dealt with an inhabitant of the Labyrinth. After speaking to it, it descended into a pit. We determined that the pit led to The Lightless Maze. We put some light down there, but on doing so discovered that as soon as we did, the pit no longer connected to that place. Why?

Because we had lit it. Affinity – that was the key. To get to the Breathless Mountains, all we had to do was to create a little piece of those mountains here in the favella. A big ask – the mountains are cold, snowy, mountainous, and uninhabited.

We hatched a plan, and it was awesome. I don’t know if the module permitted it specifically, or if the DM invoked the Rule of Cool.

First, we needed an open area without so many buildings. Our cleric refused to earthquake the slums, but we located a battle in progress – the slums were on fire. We wandered over and earthquaked that whole area. The demons that could fly, scattered. The ones that couldn’t died in the rubble.

While one of us put the nearby fires out with Create Water, our cleric proceeded to use Wall of Stone and Stoneshape to make a mini-mountain, maybe 20 ft high. Craggy. Treacherous.

We then used Obscuring Mist and Sleet Storm to turn it into a cold, sleety, foggy mountainside.

And then – this is the cool bit – we used a Limited Wish to reproduce the effect of an epic Mass Reduce Person. A Limited Wish is more than enough to reduce a party of six by two size categories for a few minutes or so, which is all we needed.

We then proceeded to climb our sleety, foggy, dangerous mountainside. Roped together, hands and feet crawling up the slope. We didn’t know whether it would work or not. We crested a ridge, and found a twisty, dangerous track on the mountainside. The fog cleared a little, and it seemed the maze had obliged us. The air was thin, our breting laboured, and we saw a range of peaks, separated by impossibly deep ravines.

The Breathless Mountains. We are not going to be able to survive for long here. We must find or create a portal to somewhere even worse.


Baphomet

19 December, 2016

Like a boss. The code for this is mainly on thingiverse.

20161219_021143.jpg