Geek Girl Joy

Artificial Intelligence, Simulations & Software


June 2020

Happy Summerween 2020

Oops, did I say Halloween before? I meant Summerween! 😉

And let me just say that it’s nice to finally have something to celebrate with the year we’ve all been having!

For those who and not familiar, Summerween is the best holiday of the year… right after Halloween! 😛

And it’s basically the summer equivalent of Halloween with the notable exception that since pumpkins aren’t ripe yet people carve Jack O’Melons instead!

Google it, Jack O’Melons are totally a thing! 😛

Which is just happens to be the subject of one of today’s wallpapers! 🙂

The Summerween Wallpapers

Here’s a picture I took last night of the front of our house with our Jack O’Melon next to the gate.

Xavier decided he didn’t want this one to have teeth but insisted that the ones in the backyard all needed to have teeth! I guess he didn’t want to risk it biting any of the trick or treaters.   😛

Summerween 1920 x 1080 Wallpaper Color
Summerween 1920 x 1080 Wallpaper Color

And since some of you fine art critics like your expensive graphic novel artwork in black and white…

Summerween 1920 x 1080 Wallpaper Black & White
Summerween 1920 x 1080 Wallpaper Black & White

Bonus Summerween Wallpapers

Summerween only comes but once a year so this is truly a special occasion and warrant’s a little extra effort from me so I’ve painted another set of wallpapers for you.

It depicts hands holding a stylized dodecahedron and it will make sense by the end of the post.

First Version

Summerween Tricksters Hands 1920x1080 Wallpaper
Summerween Tricksters Hands 1920×1080 Wallpaper

International polling determined that the first version is preferred by 7 out of 10 viewers with the remaining 30% preferring the second version.

Alternate Version

Alternate Summerween Tricksters Hands 1920x1080 Wallpaper
Alternate Summerween Tricksters Hands 1920×1080 Wallpaper

Which do you prefer? Let me know in the comments!

The Tricksters Hands

So after I took that photo of our Jack O’Melon out front, I went around back to get the trashcans and put them out before it got any later since I knew I would get too tired to take them out. 😛

I left the cans and started walking toward my front door when the transformer on the pole down the street blew and arced sending sparks to the ground and one by one a procession of streetlights went out.

The flame in the Jack O’Melon flickered from the cool evening breeze and it was the only remaining light on the entire block.

The hairs on the back of my neck stood up!

Suddenly, a pair of hands just appeared out of nowhere directly in front of me and when I say “just appeared”, I mean they just seemed to materialize out of thin air! They weren’t connected to a body as far as I could tell, but it was really dark and I wasn’t about to reach out and touch nobody!

The hands seemed to be a conglomeration of old melted candies of all colors and types.

These must be the hands of the The Summerween Trickster, I thought! An ancient being of pure fused sugar. The spirit of Summerween and punisher of all children who lack a “spirit of respect” for the hallowed holiday!

Had I not shown enough enthusiasm when carving the melons, I wondered?

An otherworldly voice spoke as though the wind was whispering words directly in my ears…

“You show the true spirit of Summerween. Take this enchanted confectionery and use it’s power to spread the spirit and cheer of Summerween!”

The Tricksters sticky decaying and hands were holding what looked like a dodecahedron with a glowing lump of ancient green jaggery in the center.

I reluctantly took it and at that moment, firecrackers started popping down the street and I looked away.

When I looked back the hands had vanished and mysteriously all the streetlights were lit up once again and there was no sign that the transformer had ever blown.

I went inside and decided to powder the jaggery, I added it to a cup of coffee, then drank the potion.

The jaggery bestowed upon me the power to control the Jack O’Melon army and the title of The Duchess of Summerween!

In honor of my new status I declare this entire week, a week of Summerween jubilee and may a commensurate number of cavities be formed before the week is out!

Happy Summerween everyone and be safe while trick or treating this week!

You will not find more informative and entertaining content than you will right here…

If you agree, I invite you to consider supporting my content through Patreon.

But, if all you can do is Like, Share, Comment and Subscribe… well that’s cool too!

Once again, Happy Summerween and Much Love,



The Contrast-a-tron

Today we’re going to continue my introduction to creating your own data sets series by building Contrast-a-tron.

Now, I know what you are thinking:

“We already did that, like… a while ago!”

Here’s the thing though… we didn’t! 😉

And besides, it wasn’t that long ago!

What we built before was a Contrast-inator and a Contrast-inator and a Contrast-a-tron are not the same things! 😛

Let me explain…

  • The Contrast-inator: Learned how to “predict/classify” if a single input color was to the left (darker) or to the right (lighter) in an imaginary red line in the exact center of a 2D gray-scale gradient representation of the 0-255 RGB 3D color space.
  • The Contrast-a-tron (this bot): Is a much smarter and more interesting bot. It will learn how to “predict/classify” two input colors as “darker” and “lighter” or “the same” compared with each other. Which is a much more challenging task for the bot to learn.

But before we get into that I think I owe you a wallpaper.

A Wallpaper

Don’t mind the title, it’s definitely not a template placeholder! 😛

Anyway, just due to me being me, I have a lot of old robots and parts laying around and I was out in the o’l boneyard and I found this really beat up Krypto mining bot for us to play with.

I built it back when I was going to launch my own currency (A long time ago when it was still a cool thing to do and not everyone was like “my ICO is next week, you should mine sum!!!!” 😉 😉 ), yeah… no thanks!

Anyway, the bot’s memory is completely corrupt, but… the optical circuitry and hardware are still functional and since mining bots are built to operate deep under miles of data in extreme low light conditions at high speed, it’s visual acuity is top-notch and it even supports infrared mode!

So don’t let it’s tiny eyes fool you, they are incredibly sensitive which is perfect for today’s project! 🙂

Contrast_a_tron 1920 x 1080 Wallpaper
Contrast_a_tron 1920 x 1080 Wallpaper

I should add that not all posts get a theme song but today’s is Night Business by Perturbator (not a sponsor), I love the little vocoded? robotic voice about two minutes and twenty seconds in. It’s definitely what this bot’s voice sounds like! 😛

Also before we proceed, I’d just like to set the record straight and confirm that I’m definitely not Satoshi Nakamoto!

The Contrast-a-tron

To begin, let’s first look at what our Contrast-inator does:

Is this pixel brighter or darker than the red line?
Is this pixel brighter or darker than the red line?

It takes a color/shade as an input and then tries to determine which side of the red line it falls on.

Not that useful but it’s good for operating inside a known range that never changes. Like, was the light red or green kinda stuff, or conceptually like a line following robot.

Anyway, what if you wanted to start comparing two colors at the same time and to make things even more complicated, what if the gradient wasn’t always facing the same direction (meaning the “brighter/darker” pixel could be on the left or the right)?

For most of you that task is trivial and you could do it almost unconsciously or with minimal mental effort, not the Contrast-inator though!

To compare two pixels the Contrast-inator must evaluate each separately and because the red line (which you can imagine is “where the robot is standing” on the gradient when it’s evaluating a color) doesn’t change, if both colors are to it’s left or right (the bot’s vantage position / the red line), then it is completely unable to compare them.

Because these colors are on the same side of the red line, the Contrast-inator cannot compare them but the Contrast-a-tron can.
Because these colors are on the same side of the red line, the Contrast-inator cannot compare them but the Contrast-a-tron can.

Just to be clear, the Contrast-inator will say that both pixels/shades are “brighter/to the right” of zero (where it stands / it’s anchor) but it cannot figure out which of the two colors are brighter and the same is true if both colors are darker (to the left of the red line).

Further, there is also no guarantee that we will always present the colors to the bot in the order of darker on the left and lighter on the right meaning that sometimes the gradient will be lighter on the left and darker on the right and we will need the bot to notice that difference and accommodate that circumstance.

How the Contrast-a-tron Works Differently

The Contrast-a-tron isn’t anchored to zero (the center of the gradient) and instead we can think of it moving around the gradient to try and find the “center” of the two colors (whatever color that might be) and from there it can evaluate which side (input color / shade) is brighter and which is darker.

In the event that the input colors/shades are the same then both Input A & B will be in the same place which means that it will be neither to the right or to the left of the bot.

How the Contrast-a-tron works differently.
How the Contrast-a-tron works differently.

How the Neural Networks Differ

I didn’t spend a lot of time discussing the structure of the neural network when we built the Contrast-inator but now that we have something to compare it against let’s look at a visual representation of each network.

How the Contrast-inator and the Contrast-a-tron neural networks differ.
How the Contrast-inator and the Contrast-a-tron neural networks differ.

On the left you see the Contrast-inator with it’s single input neuron, a hidden layer containing two hidden neurons and an output layer with two output neurons.

Additionally you see two “Bias” neurons represented in yellow that help the network learn what we want by “biasing” the output of that layer to the next so that it is never “none” (zero or no output).

What this means is that bias neurons add their value to the output signal of each neuron from their layer so that the signal is never no “activation signal” and some value propagates forward.

All layers except the output layer will always have a single bias neuron. There is no need of a bias neuron on the output layer because there is no signal to propagate beyond the output neurons so it wouldn’t serve any purpose.

Bias neurons have no inputs.

In practice we don’t have to concern ourselves with the bias neurons and the ANN will manage them itself but I like draw them because they do exist and they are part of the network, however it’s common for people not to include them in diagrams because they are so easy for us to ignore since we don’t really need to do anything with them and they are just there to help the signal propagate.

In any case, the Contrast-a-tron differs by including a second input neuron (for the second shade/color) and a second hidden layer which helps the Contrast-a-tron to be a little “smarter” and learn what we want it to.

I have a post about how to create diagrams like this called Visualizing Your FANN Neural Network and you can download a copy of the open source visualization software I wrote for free from my GitHub account here:

Training The Contrast-a-tron

When we created the Contrast-inator, I walked you through each training example and how it was derived because it was a very small data set requiring only three examples however this data set is a bit longer with thirteen examples and it will be a lot easier to show you the data set and then draw you a picture than to type a description but before we look at the training data, lets make sure we understand the outputs.

Understanding the Contrast-a-tron output.
Understanding the Contrast-a-tron output.

There are two outputs and we’ll call them A & B and they are in that order.

In an ideal world the bot will give us -1 & -1 to mean they are the same, 1 & -1 to mean that A is Brighter and B is Darker and -1 & 1 to mean A is Darker and B is Brighter.

In reality… what we get is a number that comes close but isn’t -1 or 1 called a “floating point number” in computer science but most people just call them a decimal number like for example 0.123.

In practice this means that as long as A & B are not both negative, then whichever has the higher positive value is the “brighter” color and whichever has the lower positive value is the “darker” color otherwise they are the same (A==B).

Let’s look at the training data and visualize it.

This is the complete Contrast-a-tron training data.

The first line is the “FANN Header” which consists of: the Total_Number_of_Example_Sets the Number_of_Inputs the Number_of_Outputs\n

Note the spaces between the values on the header line as well as between the inputs and the output values.

Line 2 (-1 -1) is an input example. Line 3 (-1 -1) is an output example and the pattern of Input_Example\nOutput_Example\n continues to the end of the document.

13 2 2
-1 -1
-1 -1
-0.5 -0.5
-1 -1
0 0
-1 -1
0.5 0.5
-1 -1
1 1
-1 -1
1 -1
1 -1
0.5 0
1 -1
0 0.5
-1 1
-1 -0.5
-1 1
-0.5 -1
1 -1
1 0.5
1 -1
0.5 1
-1 1
-1 1
-1 1

Let’s visualize this training data which should hopefully give you a more intuitive sense for how these numbers translate to information the Contrast-a-tron ANN can use to learn.

Visualizing the Contrast-a-tron training data set
Visualizing the Contrast-a-tron training data set

The Code

Here’s the code used to train. I have other tutorials covering what this all means available on my Topics and Posts page so I won’t go into what all of this means but basically it sets up a training environment and trains the Contrast_a_tron ANN and saves the results to a FANN .net network file.



$num_input = 2;
$num_output = 2;
$layers = array($num_input, 2, 1, $num_output);
$ann = fann_create_standard_array(count($layers), $layers);

$desired_error = 0.0000000001;
$max_epochs = 900000;
$epochs_between_reports = 10;

if ($ann) {
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    $filename = dirname(__FILE__) . "/";
    if (fann_train_on_file($ann, $filename, $max_epochs, $epochs_between_reports, $desired_error)){
        echo 'Contrast_a_tron trained.' . PHP_EOL;

    if (fann_save($ann, dirname(__FILE__) . "/")){
        echo ' saved.' . PHP_EOL;



We next need to test the ANN so I use two “for loops” with one counting down to -1 and one counting up to 1 and each incrementing by -0.2 each iteration of the loop as the inputs to test with.


$train_file = (dirname(__FILE__) . "/");
if (!is_file($train_file))
    die(" has not been created! Please run TrainContrast_a_tron.php to generate it" . PHP_EOL);

$ann = fann_create_from_file($train_file);

if ($ann) {
    foreach(range(1, -1, -0.2) as $test_input_value_a){
        foreach(range(-1, 1, -0.2) as $test_input_value_b){
            $input = array($test_input_value_a, $test_input_value_b);
            $result = fann_run($ann, $input);

            $a = number_format($result[0], 4);
            $b = number_format($result[1], 4);
            // What answer did the ANN give?
            $answer = NULL;
            $evaluation = '';
            if($a <= 0 && $b <= 0){
                $evaluation = 'Neutral/Same';
                $answer = 0;
            elseif($a > $b){
                $evaluation = 'A is Brighter';
                $answer = -1;
            elseif($b > $a){
                $evaluation = 'B is Brighter';
                $answer = 1;
                $evaluation = ' OOPSIES!!!!!!!';

            echo 'Contrast_a_tron(' . $input[0] . ', ' . $input[1] . ") -> [$a, $b] - $evaluation" . PHP_EOL; 
else {
    die("Invalid file format" . PHP_EOL);


The Results/Output of the test code.

Contrast_a_tron(1, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, -0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, 0) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, 0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, 0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, 0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(1, 0.8) -> [0.9986, -1.0000] - A is Brighter
Contrast_a_tron(1, 1) -> [-1.0000, -0.1815] - Neutral/Same
Contrast_a_tron(0.8, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, -0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, 0) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, 0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, 0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.8, 0.6) -> [0.9992, -1.0000] - A is Brighter
Contrast_a_tron(0.8, 0.8) -> [-1.0000, -0.2218] - Neutral/Same
Contrast_a_tron(0.8, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.6, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, -0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, 0) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, 0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.6, 0.4) -> [0.9995, -1.0000] - A is Brighter
Contrast_a_tron(0.6, 0.6) -> [-1.0000, -0.4005] - Neutral/Same
Contrast_a_tron(0.6, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.6, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.4, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, -0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, 0) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.4, 0.2) -> [0.9996, -1.0000] - A is Brighter
Contrast_a_tron(0.4, 0.4) -> [-1.0000, -0.6543] - Neutral/Same
Contrast_a_tron(0.4, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.4, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.4, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.2, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.2, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.2, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.2, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.2, -0.2) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0.2, 0) -> [0.9996, -1.0000] - A is Brighter
Contrast_a_tron(0.2, 0.2) -> [-1.0000, -0.8580] - Neutral/Same
Contrast_a_tron(0.2, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.2, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.2, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0.2, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0, -0.4) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(0, -0.2) -> [0.9996, -1.0000] - A is Brighter
Contrast_a_tron(0, 0) -> [-1.0000, -0.9557] - Neutral/Same
Contrast_a_tron(0, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(0, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.2, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.2, -0.6) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.2, -0.4) -> [0.9995, -1.0000] - A is Brighter
Contrast_a_tron(-0.2, -0.2) -> [-1.0000, -0.9878] - Neutral/Same
Contrast_a_tron(-0.2, 0) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.2, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.4, -0.8) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.4, -0.6) -> [0.9994, -1.0000] - A is Brighter
Contrast_a_tron(-0.4, -0.4) -> [-1.0000, -0.9965] - Neutral/Same
Contrast_a_tron(-0.4, -0.2) -> [-1.0000, 0.9997] - B is Brighter
Contrast_a_tron(-0.4, 0) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.4, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, -1) -> [0.9998, -1.0000] - A is Brighter
Contrast_a_tron(-0.6, -0.8) -> [0.9990, -1.0000] - A is Brighter
Contrast_a_tron(-0.6, -0.6) -> [-0.9999, -0.9989] - Neutral/Same
Contrast_a_tron(-0.6, -0.4) -> [-1.0000, 0.9996] - B is Brighter
Contrast_a_tron(-0.6, -0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 0) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.6, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, -1) -> [0.9981, -1.0000] - A is Brighter
Contrast_a_tron(-0.8, -0.8) -> [-0.9999, -0.9995] - Neutral/Same
Contrast_a_tron(-0.8, -0.6) -> [-1.0000, 0.9993] - B is Brighter
Contrast_a_tron(-0.8, -0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, -0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 0) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-0.8, 1) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, -1) -> [-0.9998, -0.9998] - Neutral/Same
Contrast_a_tron(-1, -0.8) -> [-1.0000, 0.9982] - B is Brighter
Contrast_a_tron(-1, -0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, -0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, -0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 0) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 0.2) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 0.4) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 0.6) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 0.8) -> [-1.0000, 0.9998] - B is Brighter
Contrast_a_tron(-1, 1) -> [-1.0000, 0.9998] - B is Brighter


As always you can download a copy of this code on GitHub for free and if you have any questions or comments please leave them below.

Contrast-a-tron on GitHub:

If you find yourself thinking…

“Joy you’re the best!”

I’d say….

If you support the resistance against Big AI then consider supporting my efforts through Patreon.

But, if all you can do is Like, Share, Comment and Subscribe… well that’s cool too!

Much Love,


Pandemically Atomic Protests

Summer is upon us and many of you have probably started thinking about usual summer time stuff like… Bellinis, Bikinis and of course, Betty White!


Oh… no, uh… no, no! Not like that!

What I mean is, contemplating her… closely guarded secret to longevity can be fun year round! 😛

I wonder what it could be?

So, I was watching YouTube the other day… an abrupt and awkward transition but go with me here… and an ad for like this mask headgear thing called a “VYZR” played… oh, uh… not a sponsor!

You can tell this isn’t a sponsored post because I’m not including a picture of it! 😛

Anyway, I’m just saying the name so you can look it up if you want to… but… let’s just say it looks a lot like this:

Regular readers will note my general skepticism and reluctance with masks.

I’m not saying fabric masks don’t work when they are properly manufactured with concern to mesh & thread sizes coupled with a sufficient number of layers (which can be calculated for any fabric).

In fact I know it’s possible because I wrote a sneeze into fabric simulation to test the efficacy of fabric masks.

Turns out, the math shows it’s totally possible but probably a few more layers than people seem to want because all I ever see anyone wearing are those single layer low thread count bandannas which my simulation shows are almost basically worthless!

Sorry, it’s not the time for that rant. 😛

I’m also not saying that masks aren’t appropriate to wear in some cases, like… right now in the middle of a pandemic where it could absolutely save someones life!

I just think that kind of “permanent” cultural change, which some people have called for, isn’t the kind of thing you just rush into without weighing the pros and cons a little… I mean… maybe sleep on it for a fortnight or two!

In any case, I had decided that once the pandemic subsided and it was generally safe, I would resume life without wearing a mask in public.

Well… that is until I saw that VYZR thing (I swear not a sponsor)!

Seeing that ad totally changed my view and made me realize that our humble beginnings as a species have been building to this very moment!

I believe we have now entered into the civilization stage “The Future” and culturally become “Space People”!

This means that going forward everyone really ought to wear a spacesuit at all times!

Because you see, it now occurs to me that for the longest time the uninformed art critics of the world have looked at “retro” scifi art and remarked in their most valley girl accent…

“Why are they wearing space suites when they are on earth? How can that be the fashion?” HAHAHA! etc…

~Smarty-pants Retro Scifi Art Critics

I’ll tell you why smarty-pants, the entire year of 2020, that’s why!

Your spacesuit serves triple duty as a pandemic-radation-bio-hazard garment and general purpose cyberpunk 2020 emergency “civil unrest” body armor!


I could sell T-Shits with that hashed tag but nobody would buy them because everyone is out of work!

And before we proceed, we should get this weeks edition of Joy’s Colorful Scribblings over with!

Joy’s Colorful Scribblings

Obviously the bubble helmet with the antennas is a retro scifi reference to the helmet thing I mentioned above. 😛

The protestors on the left should more or less be self explanatory by now and as for the nuke… well, we’ll get into all that soon enough I promise! 😉

Pandemically Atomic Protests 1920x1080 Wallpaper
Pandemically Atomic Protests 1920×1080 Wallpaper

Here’s an old Polaroid of the Peaceful Protestors in the background on the left.

Peaceful Protestors Polaroid
Peaceful Protestors Polaroid

Pandemically Atomic Protests

Okay so anyway… uh… where were we?

“The Future Space People”

Right…. well I guess I always kinda figured the future would be mildly retro-future like a Peaches music video… no, not “Fuck the Pain Away” in Andy Griffith’s Mayberry jail cell…. or even the Peaches and Chilly Gonzales collaboration, ‘Red Leather‘.

Well… maybe just a little… okay, okay “red leather trendsetter, always, always…” and that does lead me wonder if what Rihanna sang is true??

“Sticks and stones may break my bones, but chains and whips excite me!”


Hmmm… what I mean to say is, that’s improprietous, beside the point and now we’re completely off topic! 😛

Anyway, I was thinking the future would be more along the lines of her “I Feel Cream” video.

And more or less, it has been… but lately, reality has seemed lot more like this one… WATCH IT damn it! 😛

Can I just say… the three “Dirt People” dancers toward the end of the video, well… I could just watch their hilariously filthy gyrations over and over… I did when writing part of this post! 😛

I mean… just look at the dust cloud that comes off these”very relaxed” free loving stone age tribal hedonists!

Perhaps it is a dance-off for a leadership roll among the tribal elders?

But, I like to think they are performing some kind of purification/marriage ritual.

I call the one on the left “Sunwatcher – The Shaman” for… mildly obvious Kubrickian meets Clarkeian reasons that you would understand if you watch the video and mung the imagery and lyrics symbolically with some of the details of A Space Odyssey 2001.

The burnt ashes of what’s left over after the munging… that’s what I’m think of. 😉

The one in the middle I call Pink Bright-Eyes and her energetic companion to the right I’ve affectionately named, Pig-Pen after The Penunts Gang namesake he clearly resembles!

Certainly their union is made possible by a successful recent hunt of large game, perhaps even a mammoth!

Such a fortunate turn of events for the tribe will allow them to grow their numbers and expand their territory across the entire Los Angeles basin and as far as all the way through the San Gabriel valley!

That will of course mean dispossessing the existing tribes of their homes and lives but… such are the libertine hill people of Los Angeles, in summer circa 10,000 BC!

It’s almost as if these semi-evolved hominids haves accepted their meaningless position in the universe as the top predator creature that roams the surface of a large blue and green rock that is gravitationally bound to indefinitely float around a gigantic, naturally occurring, self-perpetuating nuclear explosion in the sky like some kind of “Black Sabbath Planet Caravan” and some of those simple tribal creatures, like Sunwatcher, even worship the explosion in the sky because it brings light and safety to the terrifying darkness.

Now, it seems that despite hundreds if not thousands of generations… hundreds of billions of those oh so sexy Rhianna S&M genetic material swapping/recombination events that humans are ever so fond of having passed since the union of Pink Bright-Eyes and Pig–Pen and still…. evolution has managed not one iota to blunt the human species predatory nature!





Which has left me agreeing with Professor Hubert J. Farnsworth, “I don’t want to live on this planet anymore“!


Oh where to begin?!

Hmmm… well in the middle of a pandemic a bad cop murders a man in broad daylight and the assisting murderers don’t even attempt to step in to aid the man despite protests from people observing!

I mean… how is that not murder?

Look, I’ve watched enough episodes of Cops and Reno 911 to know that when the po-po feels the need to take control of a situation that means “escalation” (even if it’s just a DUI Test) and that means they will want you to get your hands up, in front of you or stretched out to the sides and depending on the situation they may further escalate from there by using handcuffs if they feel the need for that extra warm blanket feeling security of knowing they have “the situation under control”.

Here’s the thing though… once the p.o. has “the situation” on-lock (as in… not the pink and fluffy kind with the key you can never seem to find) said po-po has a duty to “de-escalate” immediately!

Now, that po-po did appear to have Mr. Floyd well in non-fluffy cuffs so I fail to understand why all four p.o. didn’t think to de-escalate by safely moving him to his knees so he could get a breath of fresh air while they search his pockets for anything dangerous or… better yet… to the safety and comfort of the backseat of the police vehicle they were right next to!

Not only was it full of clean fresh breathable air, it’s equipped with air conditioning for that extra bit of crispy-fresh relaxation exercise-breathing all Americans refreshingly need right now!

See that thing you just did? That’s what they didn’t let him do for a very long time. 😦

And I want to know, was he even read his Miranda Rights before being executed?!

It’s like their po’ brains crashed in an infinite loop of stupid!

Mr. Floyd did not deserve to die! He and his family deserve justice and his murderers deserve to be held responsible to the fullest extent possible under the law!

When any one of our rights are stripped away from us, we are all hurt by it!

On behalf of Mr. Floyd and his family and for all of us who remain to mourn him, we must seek changes that will prevent anything like this from ever happening again!

That means pulling together as a community and working WITH the honest men and women of law enforcement, because I’ll tell you right now… #NotAllCops!

I believe there are two kinds of people who choose law enforcement as a career:

  1. People who genuinely want to help the community.
  2. People with the scholastic and athletic requirements and also the need to feed their egos with a destructive power trip.
  • In the first case we call those “Good Cops” and I believe there are many more of them who we cannot turn our backs on because we need them to help us fix things!
  • In the second case we call them “Bad Cops” and it’s people like them who rob us of a safe community! They kill and destroy what peaceful law abiding people hold dear!

So, Floyd’s tragic murder was followed by protests, then looting, assaults and more murders!

You know what they say though, if two wrongs make a right then thousands of wrongs can remake society!


I believe there are two kinds of people who choose to protest:

  1. People who genuinely want to help the community.
  2. People with the scholastic and athletic requirements and also the need to feed their egos with a destructive power trip.
  • In the first case we call those “Protestors” and I believe there are many more of them who we cannot turn our backs on because we need them to help us fix things!
  • In the second case we call them “Looters” and it’s people like them who rob us of a safe community! They kill and destroy what peaceful law abiding people hold dear!

…Ish Came Home To Loot Lead

Not a joke.

So all this ish is going on and one of those second case, second cases from above came to my house while I was wide asleep.

It was about 4 in the morning but I don’t know the exact time because I was a little shook up at the time and I only looked at a clock after everything happened.

I woke up from pounding that was quickly moving along the side of the house.

Later I thought about it and I guess they were checking for a dog or occupant?

Now… the thing is I’m more paranoid than David Duchovny listening to a paranoid Shirley Manson song, so once I was awake enough to understand someone was banging, my training kicked in and I forced myself to keep breathing and remained quite to assess what was happening.

I next heard the back door being forced and my heart started racing with dread.

For a brief moment I thought of my son and I was so thankful he was spending the night at grandmas! Still makes me cry to think about it! 😥

I jumped from bed and ran to my closet to get the Mossberg that I bought years ago just in case something like this ever happened.

I was terrified and my hands were trembling so bad that I struggled to remove the cable lock… I just couldn’t get the key in to unlock it!

Thankfully my back door has one of those heavy outer iron security doors which bought me enough time.

I ran right up to the door and hit the shotgun butt against it to get their attention.

There was a couple of seconds of silence, so just to make sure I had their attention I pumped the action to load a shell which makes a universally understood sound.

That’s when I heard them run away.

Imagine that, chaotic little me was able to scare away some big bad looters all by myself with the aid of a little technology!

Don’t try this at home! Past performance does not guarantee future success! Your results may vary!

Okay look, I’m NOT advocating violence, but I’m not a pacifist either!

Someone was breaking into my home to do… logic knows what and I’d seen videos of looters assaulting people so I was honestly afraid for my life at that moment!

In the end they made off with bicycle and broke a flower pot. Jokes on them though because that bike had two flat tires and bad brakes so… somehow that gives me a mild tingle of schadenfreude! 😛

Anyway, I haven’t been sleeping very well since this happened and it’s why I haven’t been posting or even on social media at all really… I’ve just been very unsettled lately.

Now, you might be wondering if I never opened the door, how do I know my looters are with the other group of of losers… er, excuse me, I mean looters?

Well I guess I don’t actually know they were directly associated exactly, but then again… why is it necessary to make such distinctions?

Whether we call them looters, robbers, invaders, marauders, raiders, super-mutants… they are all the same!

War… War Never Changes!

In the year 1945, my grandfather, serving in the navy, wondered when he’d get to go home to his wife and daughter and the infant son he’d never seen.

He got his wish when the US ended World War II by dropping atomic bombs on Hiroshima and Nagasaki.

The World awaited Armageddon… instead, something miraculous happened. We began to use atomic energy not as a weapon, but as a nearly limitless source of power.

People enjoyed luxuries once thought the realm of science fiction. Domestic robots, electric self-driving cars, portable computers, free wifi at Mcdonalds!

But then… in the 21st century, people awoke from the American dream.

Years of consumption without reinvestment lead to shortages of every major resource.

A global pandemic spread to every corner of the earth and the entire world unraveled.

Peace became a distant memory.

It is now the year 2020 and we stand on the brink of societal unrest, global economic depression and total war!

I am afraid. For myself, for my spouse, and for my young son… because if time has taught me one thing: it’s that war, war never changes… and last year I said “sounds mostly like saber rattling to me…”, yeah well… I was wrong.

The ashes of the nuclear treaties are basically smoldering in the waste basket as we speak and some Americans are calling for a strong “show of force” (meaning a live fire detonation of a Nuke on American soil) to “send a message” to Americas possible “enemies” that “we still have them and WILL use them”, which is just.. a stupid and inflammatory idea!

Russia too is apparently changing it’s public stance on live atomic weapons testing and as I understand it, China… well they never actually stopped apparently!

Proving once again the magical truth that stupid knows no national boarders!

Stupid hands across the water, Stupid hands across the sky!

Here’s the thing though Uncle Albert… As long as we maintain adherence to the M.A.D. doctrine, everything is more or less an uneasy okay… um.. fingers crossed! 😛

Look… I know it’s unpleasant but it’s in the news and somebody has to talk about these things!

M.A.D. stands for “Mutually Assured Destruction” and in practice that looks like what’s called “second strike” capability.

Usually this takes the form of nuclear armed submarines which can submerge and disappear beneath the waves.

What that means is that no matter if “they” (whomever that is) nukes you first, you still have a “second strike” ready even if “they” manage to destroy all your “primary” targets i.e people, cities and military installations etc..

This grisly strategy results in what in mathematics is called a game of “Nash Equilibrium“.

Put simply, once your country has nukes or is covered by those of an ally, you basically lose all motivations to use them (because whoever you use them against will return your gift in kind) while simultaneously reaching a state where you have zero reason to ever completely disarm because fully disarming means destabilizing the equilibrium which is the thing that ensures that even if your enemies want to… they are not going to invade or attack.

OK, so back to this idea that doing that stupid live test to stupidly “send a stupid message” to stupid people the world over.

It is completely stupid to think that the United States has to send anyone “a message” because absolutely nobody has any reason whatsoever to ever doubt America’s stupidly M.A.D. resolve!

Why? Well sweetie because, some Americans are willing to go so far as to burn their own cities down when they get M.A.D!

So… what chance would there be that when the U.S. Government gets M.A.D. it wouldn’t return nukes for nukes? Like none!

And if that doesn’t convince you, how about the fact that out of all of human history, for as long as humans have had the ability to make nuclear s’plosions… there has been only ONE country to ever actually deploy and use nuclear weapons in war time against another country!

It wasn’t Hitler or China or even Soviet Russia… let alone North Korea…

No that grim tiara is worn only by The United States!

Now, I’m not saying their use at that time was or was not warranted.

Truth is, I wasn’t there and I don’t know!

But what I can say is that as a result of their use we know what the aftermath of these weapons looks like and I don’t ever want to see that happen to another person! 😥

Here’s the thing though… I believe that Russia believes full well that when push comes to shove the U.S. would get M.A.D.!

Why do I believe this?

Outside of the reasons I list above, it’s simple. Russia has an unspoken cultural fear of “The Invader” because they have a history of being invaded.

So much so, there’s even a Wikipedia page called Invasion of Russia listing all the times Russia has been invaded.

I took two minutes and the information available on that page and turned it into a chart so we can better visually analyze that information.

Invasions of Russia

Invasions of Russia
Invasions of Russia

The information is arranged in years going left to right beginning in 1000 AD (just a nice round number to start with) to present.

Blue means a single invasion was occurring at that time, the orangeish red color means a second invasion was occurring in or around the same time and the yellow color as you probably guessed means that the Russians were truly not having a good time!

Anyway, as someone who is highly paranoid herself, it’s easy to somewhat understand Russia’s cultural “invasion paranoia” based on their history of being invaded.

So in some sense… it isn’t entirely “paranoia”… though that doesn’t really justify crossing fingers when agreements are signed, now does it? :-/

Now I know you are probably thinking, that was fun! Analyze China next!

My answer is China is way to complicated for me to analyze. 😛

I believe it was Winston Churchill who said:

“I cannot forecast to you the action of China. It is a riddle, wrapped in a mystery, inside an enigma; but perhaps there is a key. That key is Chinese national interest.”

Something like that, 😛 anyway back to the topic.

I believe the Russian desire to sign a nuclear treaty does seem genuine from the perspective that they genuinely don’t want to be invaded or have their people and cities nuked.

Now here’s where it becomes a soap opera plot twist: The U.S. also wants the #Don’tNukeMeBro treaty!

So why all the talk about using atomic s’plosions to “send stupid messages”?

Well… America wants China to also agree there won’t be any like… “preemptive strikes” or something, plus like some limits on what can be developed and how they can test nuclear weapons… but I only know what I read in the news and I can’t know all the details! 😛

Anyway… China and Russia are frenemies and America is like “Hey Russia, tell your boy China to trilaterally agree we wont use nukes to cap each other in the streets… then we’ll talk.”.

Now as I said, I don’t know the mind of Beijing, but their position seems to be that they only have enough nukes to end all life on the planet like two or three times over whereas the U.S. and Russia are maybe a little closer to being able to annihilate everything fifteen or twenty times over…  Which, like a magic 8 ball… too bad, so sad. Try again later!

Which leaves us, the good people of earth wondering just what the hell to do about it!

The truth is that no side is truly acting very calmly or rationally!

Ultimately, I believe everybody just wants assurances of a more peaceful and successful tomorrow.

As for whether or not its a good idea to test a nuke, not as “a message” but as a means of ensuring that all the circuits still work… well, there might actually be some justification for that.

I mean, it’s like leaving a car sitting unused for a while or a Nintendo left on a shelf for six months while you are away at college… when you come back there is a halfway decent chance it might not start.

It has been almost 30 years since the last U.S. test and if the systems don’t work then M.A.D.’s horrifically stabilizing effects are not in play and the equilibrium of “Global Nuclear Roulette” is unstable.

A test wouldn’t be done in the open on land, air or sea because we can test the missiles without warheads or conventional s’plosives if that’s necessary for some reason.

If they do a test it would likely be deep underground like they used to do so… sadly that means no 4K live streams on YouTube of a real mushroom cloud any time soon… unless… Russia you have a YouTube account right?

Though preferably a nuclear detonation test would be done in space far enough away from earth that it doesn’t interfere with global satellite networks not to mention the I.S.S..

#SpaceForce could use it’s X-37b robotic mini-space-shuttle to deploy one of those old “Senator Davy Crockett’s” the army has kicking around in a museum somewhere with a piston drive and some sensors strapped on to send that “probe” hurling away from earth!

The US gets it’s test and maybe we can do some materials science and engineering research on “Pusher Plate Drives“.

Sensors have changed a lot since the days of the analog 90’s, let alone the 1960’s when the research was first done, so just imagine the high bandwidth digital signals of the event we can record and how that information could help improve nuclear propulsion designs!

One successful test of an atomic piston drive in space is all it takes to prove people can get to Mars in 1 – 2 weeks with 1 G gravity the whole way, not that 9 month ocean voyage “transfer orbit slingshot assist” crap that people take seriously for some reason!

I mean think about it… a comfortable 1 – 2 week cruise with “zero G hour” every evening.

Your journey on the Orion space cruiser starts from a SpaceX space port on earth aboard a Starship with a 2-3 day zero G cruise to meet up with the Orion in lunar orbit.

Your Starship will birth with the Orion in one of the four internal hangars and you can then enjoy the comfortable amenities and accommodations aboard the Orion for the duration of your cruise.

You can see an early design here:

After about a week and a half to two weeks of cruising, depending on the captains discretion, you will arrive in Martian orbit.

Columbus Day 2034 Wallpaper - 3 Orion Pusher-Plate Ships

You will descend to the surface aboard the Starship that brought you onboard the Orion which will remain in orbit.

Once on the surface you will enjoy the highest of luxuries in our 5 star base camp resort and archeological dig in the caldera of Olympus Mons.

Relax and pamper yourself in a real Martian mud-bath with minerals extracted from ancient Martian lava flows just like in the Peaches video… but on Mars!

For the more adventure seeking earthlings you can set out across the Martian desserts with one of our exploration teams and participate in actual scientific research that will get your name in Martian history books for centuries to come!

And if you’re lucky enough to find a new previously uncatalogued Martian dinosaur fossil, we’ll even let you name it! We can’t let you keep though! 😛

If you elect to stay on the Orion for the entire cruise you’ll enjoy a week of gorgeous multiple daily Martian sunrises and sunsets in orbit, truly an astro-photographers dream!

Though sometimes you will be in for a real treat because occasionally someone will pay to have the Orion deliver or pickup supplies and or crew from their mining operation, in which case you’ll enjoy a free round trip out to the asteroid belt where few humans have ever ventured out, so each cruise where that happens is truly historic!

Also, occasionally someone will pay to have the ship “nudge” a rock of their choice out of the belt on a slow lunar orbital trajectory where it will show up in 30 or 40 years for the sintering and processing facilities on earth’s moon to convert the raw materials into the iPhones and transparent shoes of tomorrow.

I hear the return on those investments easily beat the stock market and even government bonds but you have to wait 30 – 40 years for the mineral rights to mature. Then again, you probably could speculate and sell someone your mineral rights for an early payout of a “lump sum” of the eventual estimated value of the raw materials but… now we’ve digressed again!

So after 1 week of surface fun in the Martian sun you will once again ascend to orbit in your designated Starship and board the Orion for the journey home, filled with a lifetime of adventure and stories to tell everyone back home!

That’s about as far as I feel comfortable revealing my plans for the Orion Cruise line to Mars without my lawyer present and a signed NDA… well, at least for now anyway. 😉 😛

Anyway, I should probably just wrap this up so in summary… don’t loot and be a good person… um… and petition your governments not to nuke each other!

But also… to create a regulatory framework that enables me to build my nuclear powered space cruise line because it’s the only real way we will ever actually be able to get off this rock and survive and in the event that you earthlings start firing nukes at one another I don’t want to be anywhere near this gravity well!

And… don’t let them say that space based nuclear propulsion is M.A.D. destabilizing because it isn’t!

They already have nuclear submarines and can annihilate all of us whenever they want so it makes no difference if properly trained and licensed civilians use atomic propulsion off world!

Further, I believe that a peaceful industrial and commercial (perhaps even internationally operated) atomically powered cruise ship in the sky… well, that’s just something we can all get behind!

Roll the end credits!

Hope you enjoyed the art and my chaotic-useless nonsensical ramblings, if so I have a Patreon.

100% of the funds will go to helping get humanity off this planet, er… you know what I mean!

Much Love,


Blog at

Up ↑

%d bloggers like this: