Geek Girl Joy

Artificial Intelligence, Simulations & Software

Chromatrons Juxtaposition

Well… I’ve more or less finished the Chromatron now so you can all not use it at your latest major inconvenience… yay!

When I published Hue Going My Way, I added the ability for you to play with a single color using rotating 3D cubes, kinda like a bad Johnny Mnemonic knock off and at the end you get a fully customized report like one of these:

Note that I added the background after the fact cuz um…  so perdy!

But now, due to mass underwhelming demand, though still upon a request… 😉 I’ve also added the ability to compare colors by selecting them from images.

Groundbreaking?? Most definitely not!

Still, it kinda works and as prototypes go… that ain’t half bad!

Now, I hear some of you crying:

“But I don’t have a picture to compare with and I don’t even know where to get one!!”

~Some of You

Well don’t worry, because as always I’ve got you covered! 😉

Given the incredibly rare nature of digital images and the extreme difficulty in obtaining them I have created some imitation digital images that you can use with this prototype.

Obviously, if these were a real digital images I’d have to charge you like… a whole bunch but since they’re just imitations I can manufacture them cheap enough that I can just give them away to everyone!

So, here are your complementary genuine imitation digital images, chew carefully because there are sharp points.

Genuine Imitation Digital Image
A Genuine Imitation Digital Image

I was going for a “Cyberpunky” feel and clearly, I half-assed it, but only so I could have the time to half-ass the graphic novel version as well!

Genuine Imitation Digital Graphic Novel Image
A Genuine Imitation Digital Graphic Novel Image

And while I was half-assing those two images above I decided to half-ass a background for the color analysis group image too, really making those two images together two-thirdly-assed and what follows then is one-thirdly-assed… but perhaps now I’m getting too technical.

Anyway, I figured some of you might want the background for the analysis image too so here’s that as well:

A One-Thirdly-Assed Background
A Chromatic One-Thirdly-Assed Background

Consequently and thusly certainly as a result of the aforementioned triadic-assery such that, ergo, under the circumstances that being the inevitable subsequent case on account of all the things whence came before and because of this, you can now see that to be the truth.

Damn!! I must have a floating point error again?!

No worries though, I’ll correct that later with a strong neodymium magnet to the head but right now I feel like it’s time to talk a little about the Chromatron before I wrap things up here and yell at all you filthy kids to get the hell off my lawn!

Hmmm… yep!! Definitely a floating point error…

The Chromatron

Here’s the link to the Chromatron App which is hosted through Github Pages:

A link to the Chromatron prototype live preview on Chromatron.
Click for a live preview Chromatron on GitHub Pages.

It will remain available going forward / indefinitely unless I managed to piss-off somebody over there due to my expressing some of my opinions about receiving that award they gave me in which case… I guess I’ll be gettin’ canceled soon?

In any case and while supplies last, if you click the second button (the unassuming gray one with red and blue on it) in the main menu you get a screen like this:

Clicking the “Browse” buttons will let you select images to use for the comparison and you can use the imitation digital images I provided above or you can use your own real digital images if you can find them.

If you want to compare two colors in the same image, just load it twice.

Once the images are loaded the cursor will show a reticle over the image allowing you to select a color from each and when you do, the rectangle element above each image that shows the name will change to a gradient to black of the selected color.

Also once both images have a color selected, a green “Continue” button will magically appear out of thin air at the top of the page as if by the power of digital pixies wreaking havoc in your web browser… click it and the Chromatron will analyze the selected colors and generate an image like this:

You can use the “Save Image” to download the image and use the “Copy as Text” to get something similar to the following:

Your Favorite Colors:

RGB: 2, 219, 255
HSL: 188.538, 100.0%, 50.4%
HEX: #02dbff
Analogous Colors: #02ffa5, #025cff
Split Complementary Colors: #02dbff, #ffa402, #ff025c
Triadic Colors: #dbff02, #02dbff, #ff02db
Tetradic Colors: #02dbff, #2602ff, #ff2602

RGB: 132, 28, 28
HSL: 0.000, 65.0%, 31.4%
HEX: #841c1c
Analogous Colors: #841c50, #84501c
Split Complementary Colors: #841c1c, #1c5084, #1c8450
Triadic Colors: #1c1c84, #841c1c, #1c841c
Tetradic Colors: #841c1c, #84841c, #1c8484

Created By:

How It Works

To keep it simple, the way these color values are derived is by converting your selected color as RGB color space values to the HSL color model… which admittedly is kinda like slathering a cube in rainbow paint made from mathematical unicorn puke and then hanging it up to dry so you can use it’s hexagonal shadow and a wand made out of a vector to scry hidden truths about the mysterious nature of color…HSL-HSV hue and chroma What follows is the typical “Oh Freyja we beseech thee…” and a human sacrifice, super boring technical stuff but why this is useful is because once you arrange color like this it’s easy to “rotate” the color using the wand er… vector and get a new but related hue or “compute” different colors that share luminosity or keep the same color and alter the saturation etc… just mix in a little color theory  and when you are done, convert back to RGB and poof your green eggs and ham are now nachos! Mmmm nachos!

Anyway, all fun stuff for sure but I’m not going to bother to explain it any further because if you care about the details, here’s the wiki article on it:

Here’s some code in PHP & JS that demonstrates how I did it:

And as for the Chromatron, there are three main files involved:


This file is what is loaded by your web browser first and it starts the whole process that results in a running app.


This file contains most of the “style” information that makes buttons have a certain size and color etc.


This file contains most of the real code that makes the Chromatron work.

And with that… please enjoy the Chromatron.

Would you like more free and open source apps like Chromatron? Consider supporting my through Patreon.

I’d like to thank Marcel for his generous and ongoing support!

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

Much Love,


Los Angeles Lights Out

Like many good bed time stories, this one also begins with a mysterious woman.

It’s late and she is holding a burning torch in her hand as she makes her way along a sandy Los Angeles beach.

A ghostly skyline sits dark in the background and zombie groans can be heard off in the distance… the scene pulls back to reveal the cover of a book (Los Angeles – Lights Out) bathed in a flashlight beam.

Los Angeles Lights Out Wallpaper
Los Angeles Lights Out Wallpaper

Oh… it seems story time is over.

The little guy was already asleep and we didn’t even make it to the part where the zombie shark attacks!

Anyway, I was looking forward to nuking my dinner and working on the Chromatron Prototype and… maybe a little 7 Days after. 😛

I began feeling that soothing calm sensation you feel when your beloved little one is asleep and for the first time that day… you are finally your own person once again.

That’s… when the power went out and let’s say that Joy was not very joyful! 😛

The sun had set and the outside temperature was still ~112F (~44C) and I knew my artificially climate controlled bubble would not remain comfortable for very long.

Cut to a few hours later in the night and a few vodka on the rocks for my personal entertainment… What? It was pitch black even with the curtains open and there wasn’t much else to do! 😛

I stood there fanning my sleeping child using his Imperial Stormtrooper shield that my sister got him (it was a whole costume actually) as a present for his um… birthday?

I don’t remember, anyway… I found myself cursing the names Garcetti & Newsom and swearing that if I wasn’t already running for galactic empress… er… I mean, running for U.S. President,  I would probably be planning my run for a local office, though I think we can all agree that my unique set of skills and talent are best employed at the galactic level.

So I thought about writing a long tirade criticizing the existing stewardship for their total lack of having addressed the pre-exisiting power issues in California during their tenure but I honestly don’t feel like complaining as much as the issue deserves! 😛

I will say though that I am very disappointed with the planned premature decommissioning of the Diablo Canyon Power Plant which provides 8.6% of California’s total power generation however since it operates without producing any greenhouse gasses it is singularly responsible for generating 23% (~1/5th) of California’s carbon-free power.

So in what universe does it make sense to decommission California’s last operating nuclear clean energy producing asset? Especially when it’s said that California is the 5th largest economy on the planet?!

Yet… we suffer from power outages!?? Seems like unmitigated malarkey to me!

And not to get all tin-foil hat crusader but it almost seems like California politicians like having natural disasters and other types of “unforeseen emergencies” to use as tools to acquire more political clout by acting as though they are addressing our needs but are actually just using their office as a stepping stone to achieve higher office.

You know what?! Screw it, we’re doing this!

Hats on everybody!

If our government reduces the power generation capacity of California any further they can squeeze our population just that much tighter and when our people are begging and gasping for air er.. power, the California politicians will simply humiliate us further by calling us names and saying we don’t care about preserving our environment and will insist that “green” energy like wind, solar and batteries (which are all great but not viable for ALL our power needs) are what we need.

Why then isn’t nuclear energy first on that list?

“It’s because it isn’t clean energy, it’s dirty!!! What about the nuclear waste?!”

Well, according to (not a sponsor)

“The nuclear industry has developed – and implemented – most of the necessary technologies required for the final disposal of all of the waste it produces. The remaining issue is one of public acceptance, and not of technological feasibility.”

And if you are worried about the safe transport of nuclear materials, Curious Droid (not a sponsor) posted a video on it recently:

Building more nuclear power plants in California would solve our power generation needs and may even help reduce the cost of purchasing a kilowatt hour of energy (cheaper electricity) while also enabling us to meet our clean energy production goals.

Isn’t it funny that the power companies and the politicians don’t seem to want that?

Why isn’t California investing in more clean nuclear power generation facilities when in one to two decades we could solve all our power problems indefinitely?

Surely, it isn’t because it’s more convenient for certain people to have power be as expensive as possible for the average Californian?

Surely, power isn’t something that will be held over our heads or used as a talking point come an election year?

SURELY, the fifth largest economy on the planet should be able to keep the lights on?!!!!

Clean and affordable electricity generation is a key issue I am going to be voting on in the coming years and I have no problem replacing our representatives at all levels with people who will address this issue properly!

And don’t get me started on the fires and “California’s Fire Abatement Procedures” (or the lack there of) because even though logic forbid you let the grass and trees grow a little shaggy around your property, before too long some dope with a pad of paper will start citing you for fire safety (maybe rightly so in some cases 😛 ) but then… why can’t the State keep it’s own yard clean?

You do realize that the Mt. Wilson Observatory almost burned down and it still might, right?

My step grandfather was a local fire chief and he explained to me the value of doing “Controlled burns” which is something California should probably do more of.

Additionally, there was also a local program in place where forestry and fire services would keep track of high fire hazard zones and would go out and tag/mark diseased and dead lumber, then the local population would go out and remove the marked trees and brush for their own purposes, usually for firewood because some places in California do get snow during the winter and sometimes for building/craft purposes.

This resulted in many more hands (unpaid/paid in lumber) working to solve the yearly fire hazard than the local government could otherwise afford to provide. This is also something California should probably do more of.

“But what if some greedy capitalist turns that into a business?”

Oh, you mean like if somebody goes out and removes all the properly marked fire hazards and freely disposes of it on behalf of the United States of California for the betterment of its citizens due to the resulting decrease in fire hazard…. (deep breath)… while simultaneously also figuring out they can sell all the wood they freely acquired as fire wood by the cord or even as carved wooden statues for people to put in their gardens for early morning joggers to admire as they energetically shamble past?

I’m totally fine with it! That’s called a “two birds, one stone” situation and in most cases it’s a good thing!

The current law is they will pay a sales tax when they unload those bags of all natural & fully organic wood mulch in Hollywood’s finest rose gardens!

Don Californy gets it’s yard cleaned for free every year and even charges them for the economic activity it generated within it’s hacienda.

And… I truly lack the energy to begin arguing about California’s on-again/off-again droughts (mostly on)! Why hasn’t California built water desalination plants along our shoreline to solve this issue once and for all?

Don’t tell me that takes too much power because even if I didn’t think nuclear energy was the way to go (and I do), we could budget additional power for the desalination process by possibly employing “Wave Energy Converters” along the second largest coast line in the United States.

My point is, it’s not like nobody has thought of things to try to solve our problems here in California, it’s that our politicians never actually try to meaningfully solve our problems because then they wouldn’t have a tragedy or disaster to base their reelection campaign on!

Now, it’s scientifically proven that adding a George Orwell quote to a conspiracy theory practically proves it so, here goes…

George Orwell wrote in 1984:

This is not solipsism. Collective solipsism, if you like. But that is a different thing: in fact, the opposite thing. All this is a digression,’ he added in a different tone. ‘The real power, the power we have to fight for night and day, is not power over things, but over men.’ He paused, and for a moment assumed again his air of a schoolmaster questioning a promising pupil:


Winston thought. ‘BY MAKING HIM SUFFER,’ he said.

‘Exactly. By making him suffer.’


Power is in tearing human minds to pieces and putting them together again in new shapes of your own choosing.

Do you begin to see, then, what kind of world we are creating?

It is the exact opposite of the stupid hedonistic Utopias that the old reformers imagined.

A world of fear and treachery and torment, a world of trampling and being trampled upon, a world which will grow not less but more merciless as it refines itself. Progress in our world will be progress towards more pain.

The old civilizations claimed that they were founded on love or justice. Ours is founded upon hatred.

…always there will be the intoxication of power, constantly increasing and constantly growing subtler.

Always, at every moment, there will be the thrill of victory, the sensation of trampling on an enemy who is helpless.


~George Orwell

The Tag on George Orwell’s Jackboot reads: 3D Printed in California!

Okay look, I promise I will get back to coding bot projects soon and I want to thank Marcel for his support through Patreon!!

It would be great to have your support as well but all you can do is like, share, comment and subscribe… well that’s cool too!

Much Love,


Vote For Love

I missed last week’s performance… and it only stood to prove Simon Cowell’s harsh criticisms of me correct!

The rain could have excused away the trails of cracked mascara that jutted from my eyes yet I made no effort to hide my shame.

I sat outside the closed venue on my hands and knees while the mizzel and spit lashed against my face and hid the deluge of failure I was feeling… I’ll never be anything, I cried!

The camera slowly ascended and retreated far, far away from me while Fraunhofer Diffraction’s “…Into Nothingness” drowned out the sounds of my painful full-snot sobbing…

Is… what my “Writer Bot” suggested I should say is the reason why I didn’t write a post last week! 😛

I mean, not bad… and that intro did get you interested in reading this post, right? 😉

Personally, that’s not quite the “tone” I was going for and I’m a little worried about the implications and consequences for my future having effectively taught a machine how to lie… I fear, is murder next? History will certainly not look kindly upon me and I’ve doomed all of humanity!

Sorry, Writer Bot also told me to say that too! 😛

Okay, putting Writer Bot’s unfounded and overly melancholic lies and accusations towards me aside, it’s true I didn’t write a post last week because I didn’t end up having the time to finish the “ChroMyGoodness” color “analysis” portion until late in the week and although I might have been able to squeak out a post with Writer Bot’s help like I am this week, instead I opted to use the extra free time to further Xavier’s homeschooling, he can now count by fives and say the numeric values for numbers up to 1 million (i.e. 314159 – “Three hundred fourteen thousand one hundred fifty-nine”) and basically has the alphabet down with the occasional letter prompt here and there (usually N or O which he sometimes skips, which might explain why he selectively ignores me sometimes when I tell him no… 😛 ) as he rushes to the end as proudly and quickly as he can. 🙂

So now we’re working on word recognition and simple addition and subtraction problems. Subtraction is still not his thing and although he now sees value in the alphabet he still prefers numbers over letters learning-time.

Additionally, I’m constantly working on expanding his vocabulary!

Also, I used the time to do some self-care.

I got a little extra (okay any/some) exercise 😛 , I fasted a little and made a few nutritional improvements to my diet.

I slept more and believe it or not, the perma-dark bags under my eyes even disappeared for a couple of days, though that DIY coconut oil hydration mask I MacGyverly fashioned out of a spare paper towel probably helped a little and in any case… you guys and gals didn’t get a post but I got just a little taste of Xanadu! 😛

Well, that is until I looked at the news recently and saw Jackie Chan’s house got repoed!

Oh and also all the rioting… and looting… and raping… and murders… and guillotines being erected… along with more calls to “defund the police”, which to me seems like a really stupid idea at this point because all that’s going to do is make everyone less safe!

Like… I just saw a report the other day that a woman stepped off the subway onto an above ground station platform and she was immediately thrown to the ground, groped and almost raped in broad daylight!

That’s so fucking horrible!

Thankfully bystanders had the thought to grab their phones and record videos of her attack rather than, you know… stepping in to stop it! Oddly enough that did have the effect of causing the attacker to climb off her and the attacker was arrested, so I guess there’s that. :-/

But, how about we contemplate “the next time” something like this happens.

Let’s say you, your spouse/significant other/child/parent/grandparent are the target/victim… and we do/did indeed “defund the police”.

Let’s say the attacker is armed and nobody is coming to your or their aid… do you still feel so confident about the sentiment “defund the police”?

It doesn’t matter what gender or race you are, you are vulnerable and logic forbid someone target’s a child!!!

I think that it is reasonable to say that we need to figure out how to better to train and employ “law enforcement” to meet our needs as a civil society and that might mean completely new ways of solving the types of problems and situations police face.

I don’t see anything inherently wrong with that.

But our conversations should be about how to make things better, not worse and I firmly believe reform is better than abolition and before you go accusing me of being too one way or the other, I am not a Democrat or a Republican, though I am not criticizing you if you are.

I’m something a lot more interesting and at times confusing, called a “Libertarian”.

Sometimes we’re broadly described as being “culturally liberal and fiscally conservative”, i.e. sometimes politically I will fall to your “left” and sometimes I will fall to your “right”.

I said it was confusing! 😛

But, if you ask me to imagine myself in that “what I think I do” meme…, I would say that my political leanings mean that I expend a lot of effort in trying to have as little power and control over other people as possible and I desire the same for myself where they are concerned.

At this point you may be tempted to assume that statement means that I am careless, selfish and want to screw everyone to get my way, but that’s not the case!

What I tend to strive for is the ideal of I’ll leave you alone if you are not hurting anyone and in return please leave me alone if I’m not hurting anyone.

Here’s a quote from the official Libertarian party preamble that I think sums up my general political philosophy:

“We believe that respect for individual rights is the essential precondition for a free and prosperous world, that force and fraud must be banished from human relationships, and that only through freedom can peace and prosperity be realized.

Now, of course I don’t walk lockstep with the party on all issues but I generally believe in human interactions that involve no use of any form of coercion or force whenever and wherever possible, with the exception of self defense and in the defense of others… or, you know… in video games where you should feel free to “roll play” to your weaselly dark hearts content! 😛

So please do not assume you automatically know what I think or make me out to be something that I am not!

I have friends and readers on “the left” & “the right” who agree that we must cooperate to find solutions to our problems and not simply tear each other down.

Whitney Huston magnificently sang:

“Oh, I wanna dance with somebody!”

~Whitney Huston

But she also sang…

“I believe the children are our future, teach them well and let them lead the way”

~Whitney Huston

Now I do agree that the children are our future, however I also believe that we are the future children of the past and that makes us the present and WE must lead the way to build a more peaceful and prosperous future FOR EVERYONE and it will not come through the use of violence!

Further, I believe it’s time we all stand together and demand peace and an end to all the senseless violence we see at home and in communities around the world!

Every day in the news it’s something new and horrible, but we can all do something about it!

Soon, the United States will vote for President and whether you intend to re-elect President Donald Trump or you intend to vote for a President Kamala Harris I’d just like to say that now you have an alternative, because I am officially announcing today my candidacy for President of the United States!

My campaign slogan is:

“A Vote For Joy Is A Vote For Love!”

Isn’t that just wonderful?!

And… sure, I’m totally abusing all my skillz as a propagandist to unauthorizedly take advantage of some seriously convenient lyrics in the TIAMAT song “Vote For Love”:

#PleaseDontSue!!! 😛

Further… the answer is yes, that is a bit kitschy, however my internal campaign polls indicate that sort of thing is really “YEET” with all the key demographics!


Oh yeah, so also… before I end this shorter than usual post in favor of my sanity and to plan my campaign, I updated the Chromatron prototype and you can still view a live version on while I am developing it and it will continue to be available once it’s finished.

As I mentioned above somewhere I finished the “ChroMyGoodness” section at the end of the “Carousel of Colors” which allows you to save an image or copy as text the color info that the app generates.

I also added a “Main Menu” so that I can add additional features though currently the only additional feature I have planned is a color comparison of a selected pixel in two images.

Here’s the links to view the Chromatron app:

A link to the Chromatron prototype live preview on Chromatron.
Click for a live preview Chromatron on GitHub Pages.

Chromatron on GitHub Pages:

You can get the code in the GitHub repo.

Chromatron on GitHub:


And in any case, this coming November do as the Babylonian sea dragon goddess sang, “It’s about time we all get out and vote for love”… vote for Joy in 2020!

I pledge four years of no malarkey while we work together to keep making America great again, again… again!

Vote For Love 1920x1080 Wallpaper
Vote For Love 1920×1080 Wallpaper

If you’d like to NON-tax-deductibly “support the cause”, I have a Patreon account.

Now, I can’t say that he “supports the cause” but he likes some of my code and I’d like thank Marcel over on Patreon for continuing to value and support my ongoing contributions to the PHP-FANN community.

But if all you can do is like, share, comment and subscribe, well… that’s cool too!

Much Love,


Hue Going My Way

So last week I chose to unleash my Machiavellian side against myself by issuing a challenge that I knew that skill-less hack would be unable to complete: Build a Chromatron and edutain the masses!

Live Preview

A link to the Chromatron prototype live preview on Chromatron.
` Click for a live preview Chromatron on GitHub Pages.

I defined these goals:
  • Functional enough to help the cherry-blossom find her favorite pink.
  • Challenge the blossom to find her color using the prototype.
  • Display relevant info at the end like… the RGB values, the hex color code and what the name of the closest color with a name is.
  • Simple enough that anyone could use it without being overwhelming.
  • Even though it’s just a prototype, epic mega geek points if I can do it in 3D.
  • Bonus points if I can make it run on mobile and desktop.
  • Additional bonus points will be awarded for unnecessary (but tasteful) skeuomorphic ornamentation and chromatic theatrics.

And… over the last week I managed to add some of the functionality required by the project which has “checked off” some of these goals and I am definitely setting myself up for a thumbs up from Simon Cowell!

Oh… wow?!, uh… tell me what you really think Simon?!

Okay, okay… well… I appreciate the constructive criticism! Also, maybe fake some impartiality as a judge next week because I’ll be here to win!


Anyway, let’s take a look at the Chromatron prototype. 😛

Chromatron: Hue Going My Way?

So the basic premise and reason for the Chromatron to exist is to “help you find your favorite color”.

With that in mind, I figured why not take inspiration from 20 Questions and get as close as possible to your favorite color by asking you to narrow down the list of possibilities by selecting a color that is already somewhat close to it.

It’s important to note that this doesn’t preclude you from achieving any color in the next step, but it’s a lot easier if we start closer to the desired color.

During testing I found that it was a little difficult to select a specific color on a mobile screen, so I slowed the rotation of the “Carousel of Color” a bit and then I added a color confirmation step using rotating cubes as buttons.

It’s interesting to note that these “cube buttons” specific rotation always show us their same set of sides.

Also, as they rotate, the text arrows on the buttons for the side facing us will always point opposite directions from each other.

Initially I used 3D text objects attached as “child objects” of the cube buttons but this meant that an additional 6 mesh objects per button were being rendered per frame and that isn’t mobile friendly so instead I switched to drawing text on the color gradient texture that is applied to the cubes to reduce the complexity of of the scene.

This has one unfortunate side effect though… sometimes, occasionally… the font doesn’t load when you first start the app so it substitutes Pacifico with a default font.

I should probably just build a pre-loader to fix that but let’s be honest and say I’m not going to do that for this prototype because once it’s built its highly unlikely that anyone will ever use it again, so instead I’ll just complain. 😛

“Why JavaScript? Why!? I want to like you right up until your asynchronous proclivities get in the way of our having some synchronous font loading fun!”


Actually, lets be fair and acknowledge that HTTP also shares some responsibility here. 😛

Anyway, if it bugs you, press F5 on your keyboard or swipe to reload the prototype page and the font will work properly. 😛

Hmm… maybe I could try instantiating a cube button with text off screen during the Carousel interaction to insure that the font has been cashed by the time the confirmation screen is presented? That might achieve the same effect of a pre-loader without the formalism of having to build an actual pre-loader… I’ll think about it.

In any case, once you select a color you are presented with this weird scene of color and rotating cubes.

It’s probably not immediately obvious at a glance what each cube does to everyone which is likely a personal failing of my own but basically…

There are three columns and they represent Red, Green & Blue (in that order).

In the RGB color model we have white and black at the ends of the spectrum with [0,0,0] being black and [255, 255, 255] being white.

All other colors are represented as a combination of these “color channels” with a range between 0 – 255.

The thee first rows of cube buttons “increment” (add) MORE to it’s color column and the bottom three rows “decrement” (subtract) TAKE AWAY color from it’s column.

The colors of each cube represent what your color will become if you click it but it is a gradient from that color to white (first three rows) and black (bottom three rows) signifying the direction that will take the color.

This is combined with rotation, UP (first three rows) visually implying an increase in value and DOWN (bottom three rows) implying a decrease in value.

The magnitude of changes are 1, 15 and 30 in both positive and negative directions and the cube buttons are labeled as such with the color of the text being the color of the channel that the button adjusts.

These magnitude changes means that given the largest change possible (+/- 30):

255 / 30 = 8.5

So, “worst case” you can “traverse” an entire color channel from either end (0/255) in just eight clicks of a 30 cube button with a value of 15 (1/2 or 0.5 of 30) remaining.

That is why the second largest value is 15, it keeps things clean and easy with the 1 value adjustments allowing for very slight changes and when a value change would result in a number greater than 255 or less than 0 those buttons are hidden.

That mostly wraps up this week’s post other than the wallpaper but once again, here’s the links to the Chromatron prototype.

Chromatron on GitHub Pages:

And you can get the up to date code in the GitHub repo.

Chromatron on GitHub:

A Wallpaper

So… it’s not hard to see why Simon wasn’t thrilled… and yet… I will continue to try!

Here’s the wallpaper for today’s post, it represents the Chromatron Hue Going My Way scene more like how I envision it. 😛

Hue Going My Way 1920x1080 Wallpaper
Hue Going My Way 1920×1080 Wallpaper

I want to thank Marcel for continuing to support my work through Patreon.

(Note to Self: Respond to his message! 😛 )

Anyway, do you like free apps?! Because supporting me over on Patreon is how you get free apps!

But if all you can do is like, share, comment and subscribe, well… that’s cool too!

Much Love,


Carousel of Color

Somewhat recently I was speaking with a certain cherry-blossom who lives on a far away tropical island where strange pocket sized monsters roam freely.

The little cherry-blossom knew that when she finally bloomed she would wear the most beautiful shade of pink the islanders had ever seen!

However, she hasn’t yet figured out what exact shade of pink to dye her petals.

Now, I thought about how I could help the little bud by running a simulation or training an artificially intelligent color bot, but I just couldn’t think of anything that could surpass a “color wall of swatches” / a gradient with some color channel plus/minus toggle buttons/sliders.

What I mean is, consider how one of Quentin Tarantino’s more bizarre characters does color:

How GIMP does color
How GIMP does color

At first glance it might seem a little intimidating but just a click on a gradient or an adjustment to a slider conveniently labeled for their RGB color channel and you can easily find just about any color you are looking for!

You can even type in a number between 0 – 255 in any of the fields or even cooler still, you can change the hex color “HTML notation” and it will change the RGB color values for you.

Don’t worry so much about the LCh sliders, they stand for Hue, Chroma & Lumanance (not in that order 😛 ) and they are a somewhat more advanced color space model that you need not concern yourself with unless you are curious, but almost everyone kinda grasps the RGB color model since most of us learn it as children so it will probably be easier for most people to use those.

The thing is, this is really unsatisfying as a recommendation to give the blossom because that’s more of a technical tool than a fun app to help you find your favorite petal color.

Now… as I said I am unsure if I can improve that process, however I am willing to take crack at simplifying it!

But, me being the one duck short of a full box of quacker jacks that I am, I couldn’t bring myself to post the simple HTML RGB color picker prototype I assembled because… it just came off as so… BASIC!

As such, I resolved to challenge myself to build a better prototype!

But I needed a set of project goals & design principles…

Prototype Goals
  • Functional enough to help the cherry-blossom find her favorite pink.
  • Challenge the blossom to find her color using the prototype.
  • Display relevant info at the end like… the RGB values, the hex color code and what the name of the closest color with a name is.
  • Simple enough that anyone could use it without being overwhelming.
  • Even though it’s just a prototype, epic mega geek points if I can do it in 3D.
  • Bonus points if I can make it run on mobile and desktop.
  • Additional bonus points will be awarded for unnecessary (but tasteful) skeuomorphic ornamentation and chromatic theatrics.

These seem like lofty goals but I am confident that I can achieve at lease a few of them because I have already started building this prototype. 😛

I’m calling it Chroma-tron and although it’s far from finished (or even functional), I am hosting the code online using GitHub Pages (not a sponsor but I do have a free account) where you can see a live demo:

A link to the Chromatron prototype live preview on Chromatron.
Click for a live preview of the Chromatron prototype on GitHub Pages.

Currently it just spins and highlights the sections of the conic color model your mouse is over but the idea is that as I update the code on GitHub you will be able to follow along by previewing the updates live allowing you to see what has changed, though due to my schedule I cannot guarantee I will update the project daily but I will try to work on it as frequently as I can.

Here’s three bits of trivia about the Chromatron prototype:

  • There are 48 different colors on the “Carousel of Color”.
  • Each color does have a name.
  • When we’re finished, our prototype will be capable of representing about 16,581,375 different colors.

One other bit of information is that if this prototype works out well, I will use similar techniques to build a 3D version of my FANN Neural Network Visualizer and depending on how successful I am and how much trouble it is, we might even be able to watch the ANN “think” in real time 3D but I still have much experimentation before we get there, anyway lets talk about a wallpaper.


Sadly, no wallpaper today because I’ve been super busy and haven’t had the time to finger paint something nice for you but that won’t always be the case. As a condolence prize you win a fully 3D animated rotating conic color model to enjoy instead! 😛

Also, if you just want the featured image, here you go:

The lines in the image remind me of iron filings in a magnetic field. 😛

And before I forget, here’s a link to the Chromatron prototype that you can revisit from time to time to see updates to the app.

Chromatron on GitHub Pages:

You can get the code in the GitHub repo.

Chromatron on GitHub:

Anyway, I’m going to be kind to myself and keep today’s post short. 😛

Feel free to make suggestions about the app if you want to. 🙂

All my content is sponsored by my patrons over on Patreon who help make free software, art and tech tutorials possible.

Today I would like to thank Marcel for their generous ongoing support but as I always say, if all you can do is like share comment and subscribe, well… that’s cool too! 😉

Much Love,


My Transcendent Badge

So… it’s no secret that I haven’t been posting lately which has more to do with minor health problems, no it wasn’t the C or the T viruses, more than anything else it’s mostly been me just letting life get in the way of my propagandist hobby!

And before we begin I would just like to say that I am saddened to hear about electrical engineer/mythbuster/roboticist Grant Imahara’s death. 😦

But setting that sad news aside, I started working today by checking the comments on my blog to clear out all the spam and one shining gem stood out among the crowd of coprolite.

One spammer put in just that little extra bit of effort to troll me about not posting and it’s so perfectly executed I just have to share it, though I’m not exceedingly stupid so I’m going to remove the phishing link (NEVER click the phishing links!!!).

The spammer trolled on:

“Reliable postings. Regards. home loans”

Note that the “home loans” part was the phishing link.

This level of attention to detail could possibly mean that it came from My Dear Spammer Creep but it’s not quite their style… in any case, I do feel such exquisite warmth and love from the community of spammer trolls who have clearly taken up permanent residence near my blog!

Also of note, though changing topics, is I recently got the chance to consult with a friend on some PHP code, and he claims I “saved him some time”/”he owes me a soda!!”.

Personally, I think I probably should have suggested using the existing “rest” function rather than writing a separate security token “auth” function but I guess that’s what missing too much sleep will do to you!

I only hope that the duct tape holds well enough to muffle all the screams!

Anyway, during my unannounced hiatus I was awarded a “badge” on GitHub, which was an unexpected surprise! 🙂

I didn’t even know GitHub had badges! 😛

But, if you’re gonna receive one, this one seems like a mildly interesting one to get!

It’s called the “Arctic Code Vault Contributor” merit badge / award thingie.

The “Arctic Code Vault” is a backup of “all of its (GitHub’s) public open source code” which means it is a little like a “participation trophy” so I guess I shouldn’t be too smug about it even though I do feel a little twinge of the o’l narcissism flaring up!

What it means is that some of my code was deemed moderately useful enough by someone, who isn’t myself, a friend or family, to be preserved for at least 1000 years in a secure, remote underground nuclear hardened facility as insurance against the unfortunate event of, (cough)… “Total Atomic Annihilation” for you know… posterity sake.

Actually, it’s not a half bad idea because IF “world leaders” decide to start a nuclear war and obliterate modern society and there are survivors… they can rise from the stone age when they reacquire the information and technology contained within the cache.

Think Vault-Tech “Prepared for the Future!” but “real” and without the evil experiments… hopefully!

I imagine in a thousand years someone will crack that sucker open and Joan Wilder/Jack T. Colton blow the dust off of El Corazón and uncover my code.. oh, uh… and everyone else’s too and review it as like a digital time capsule. Indiana Jones will probably go along just to make sure things stay above board!

I will say that It is kinda nice to know that something I’ve done will be preserved at least as far as 1000 years into the future, even if it’s not me personally surviving cryogenically preserved like Walt Disney in the vault until 3020ish, though now I’m having an idiocracy flash back! 😛

And not to be resting on my laurels or anything but… sure seems like I can now die with the greatest sense of accomplishment knowing that no matter what happens going forward in this nihilistic universe we all live and do other things in, my name and accomplishments will certainly outlast EVERYTHING, most if not all of you, will EVER do!

#GameOverIWin 😛

Granted, that shouldn’t stop all of you from trying to beat my score, but let’s be honest… that’s hard to do and your ass feels pretty warm and comfy right where it is!

Also, it amuses me to no end because some programmers look at PHP code like a cockroach (for only somewhat valid reasons), but now thanks to me (oh and the archivists too I guess)… like a cockroach,  PHP is going to survive global nuclear fallout and it could even become the technological bedrock that all “future code” is derived from!

Just think of it, PHP 10,000 AD…

Now that’s a VR experience I’d pay to play!

Here’s the thing though, if I’m being totally honest, I always expected that this blog would be the thing of mine that would be archived and preserved (probably by law enforcement but possibly also by historians) to enlighten the future masses… at the very least so future generations could study my bizarre ramblings for wisdom and insights into inferior primitive human physiology, if not my physical brain as well!

Oops, my narcissist is showing again, thought I tucked that in.

In any case, it’s notable that the subterranean vault/bunker that my code is being stored in is like right next to the “Svalbard Global Seed Vault” which is essentially the same thing but with seeds for foods and textile crops and probably like trees and grass and some flowers and stuff.

Anyway… most likely, almost everyone will eventually get one badge or another on GitHub which means badges could become some kind of “status symbol” that quadfurcates the coding community into “the haves” and “the have nots” vs “the wants” and “the want nots”.

And sure, they give you the option of not displaying them but even the choice of not displaying them is just information that will feed back into the primitive gamified online social interaction mechanisms of hominids in 2020, yielding more stratification when the more radical members of the “the want nots” group argue that “badges” are “inherently divisive” and possibly even “evil” due to the discord (not the app) they cause and the more centrist “the haves”+”the wants” will say they are just jealous and “the have nots”+”the wants” will sympathetically agree while “the haves”+”the want nots” will empathetically not give a damn leaning towards possibly agreeing with the more radical faction of the “the want nots”!

But see, the quadchotomy isn’t so simple because the choice to NOT show a badge “says something” just as much as the inverse and opposite, which might be “the opt-in to participate/receive an accolade”+”the choice to display it” (as opposed to being forced to have to receive and display it) and of course we can’t forget the “NULL results” where despite active participation (willful or not), some folks just wont get any!

Making this a quintchotomy? Hmmm… actually, it’s starting to feel more like an octochotomy but likely that’s just me over analyzing things again. 😛

I simply do not have the time and energy to parse the complex tree resulting from such a model of human interaction but I’ll tell you this, what it feels like is a drug and a dealer!

Of course we all know the first few badges are free but uh… once you need the poison you’re addicted and you’ll do anything for the yummy reinforcing taste of that sweet “social feedback”!

This Could Be You!:

It hurts real bad man! I’m Jonsin’ here! I just need a little LIKE to hold me over till I write my next post or publish my next script on GitHub so I can earn another badge!”

It could only be a matter of time before they roll out “the paid subscription shiny badges”!

Oh its “totally cosmetic” but WE ALL KNOW the “shiny badges” get all the cool “extra perks” that are fundamentally NOT cosmetic!

Ha! What about the mostly intangibles?!

Like, after receiving the “Arctic Code Vault Contributor” badge, I’ve noticed a totally undeserved non-insignificant bump in the appreciable average annual starting salary for the job offers I receive via email… oh uh… not that I’m complaining though! 😛

So, multiply that effect by a factor of paid badges like “Professional Hoopajooper” & “Expert in Foo’Barification” (I happen to be both), which of course would only be accessible behind a paywall because “there’s a test and we TOTALLY verify all the blah blah…” (I’m having CompTIA A+ flashbacks here), that establishes that you are an #AOkayNumber1SuperCoder or you know… whatever the thing is and as a result of the fact that those badges could become “status symbols” of being “qualified/elite” they could also become hiring markers that indicate “fitness” for employment!

“We WOULD hire you BUT… you’re not a member of the “Green Check Mark Badge” group on GitHub and in our experience, check mark members are simply the bestest best!”

Now… despite my serious concerns over a gamified scifi apocalyptic future where digital badges are as good as or better than currency and are counterfeited en masse in back alleys and in old boarded up warehouses the world over… after much thought and deliberation, though not wishing to feed the zeitgeist and also genuinely not wishing to throw my lot in with the more radical faction of the “the want nots”… I have decided follow the path of least resistance and leave the badge displayed on My GitHub page because in the end, it takes more effort than I care to exert to disable it and then have to defend that decision.

And… if you think about it, it is kind of a cute little asterisk / literal special snowflake badge thingie… or maybe… an  “arctic north star”?

I’m not really sure actually and in any case, my thoughts keep returning to the phrase…

“The first one is free…”

The whole thing feels a little Skinnarian or possibly Pavlovian, and its hard to say if the bell rings therefore I salivate, or if I salivate so therefore I ring the bell?!

Though this will compute…

if ($badges == $carrots){

$Joy->IsStillUncertainOf(‘What the stick might be’);


Certainly such things are above my pay grade and would likely mean I’d have to find someway to break the fourth wall and view the universe from the perspective of the simulation creators looking in… on the other hand… that might just be me being solipsistic again!

Anyway, my source code says I owe you all a wallpaper.

A Transcendent Space Girl Wallpaper

So… today’s wallpaper is inspired in part by the Code Vault award and by the background image in the video or Kotovsky86’s – Space Traveller:

I love the image of the girl with the alien sky background with her sort of scifi “designer canvas” look.

I imagine that she isn’t actually on that planet, it’s an animated digital wallpaper that lines the walls of the corridor she’s in.

She arrived a little earlier than her water ice hauling contract required and her Orion was securely moored with the docking pylon.

She crossed the airlock in the mooring tether to board the station while the bots offload the ice and a few dozen tons of food and industrial supplies.

First stop is of course the system famous Atomic Spacer’s bar and grill, best grub you’ll find 800 million miles from earth! Their name and slogan are probably a little on the nose but they sell Florps and that’s good enough for everyone!

The lights and colors in the bar make it seem like a familiar future. Just sitting there you’d never even know you were millions of miles from earth.

As she sat down,  a notification from corporate about a bonus of 75 Kryptos being deposited into her digital wallet displayed the top right corner of her gamified Kiroshi contact lenses hud.

The company likes it when you make them look good to their customers.

She received another notification that an “Early Bird” badge was added to her permanent record.

She mentally swiped left on both and brought up the news feed from Earth while she waited for the robot to come take her order…

“In other news… Ms. Crystalline Actinide from the Global Archivists Guild tweeted today that the 2019 Arctic Code Vault time capsule has finally been opened after 1000 years and archeologist computer scientists are reviewing the code now…”

As the broadcast continues, for one brief nanosecond, my name flashes across the video feed in her contact lenses and at that moment, centuries long past my death, I will step forward in time and transcended my death, even if is just for a blink of an eye!

My Transcendent Badge Wallpaper
My Transcendent Badge Wallpaper

If you are wondering, yes I have a Patreon, if not, no worries!

Much Love,



Sunshine Blogger Award

I was nominated for the Sunshine Blogger Award recently and I assumed that it meant like a “cheery” blogger and just being honest here… some of my recent posts just haven’t been chock-full of all that sun shinny goodness! 😛

It’s not that I’m not appreciative, really! I was just confused. 😛

Though after minimal investigation it seems that my assumption about the Lesley Gore prerequisite that everything be…

“Sunshine, lollipops and rainbows, That’s how this refrain goes…”

Didn’t exist, so I resolved myself to accept the challenge… er, I mean… award!

Later I did find that some people do associate this award with “positivity” but… well, I’ll try my best but no promises! 😛

Now you may recall I have been nominated for several other awards already and as I said, the gauntlet has been laid, I will do them.

It’s just… those are more complicated posts to write from my perspective since I actually have to formulate opinions n’stuff and these questions are a little more straight forward and so are easier to do today and will require less of my organic CPU which is already heavily multithreading these days so… guess which one is getting done?

Hint: this one 😛

Hey look, Mysteriously you all got that one right! We should celebrate! What’s the modern day politically correct version of “Cigars All Around!”?

I mean, I guess there is the old “High Five Everybody!” but that seems so pre-pandemic, doesn’t it?!

There is of course the hands free, tried and true, social distancing “Proud of you Nod”:

But that seems… “grizzly regressive” and I said before, I believe we’ve become “The Space People” and I’m totally sticking by that! Also, almost certainly that would get awkward and maybe even a little creepy with everyone wearing masks and spacesuits these days!

No… in Cyberpunk 2020 the logicality of the Vulcan wave now makes sense!

For your health… consider all the cooties floating around… don’t you agree it’s time we start flipping people the “Live Long and Prosper” in addition to the “Bird”?!

Thank you Spock!

So I guess with that, we should move on to the wallpaper before we do the award ceremony!

A Brain In A Digital Jar

So I like to challenge myself, it’s how we grow and today’s challenge is find a way to combine/bridge the gap between Solipsism and the Sunshine Blogger Award.

I’m not saying I will be successful but if I succeed, not only will I level up but also presenting this wallpaper with today’s post will totally make sense! 😛

A Brain In A Digital Jar 1920x1080 Wallpaper
A Brain In A Digital Jar 1920×1080 Wallpaper

Wish me luck NPC’s!

Sunshine Blogger Award

sunshine blogger award

I was nominated for this award by Megan who also goes by A Geeky Gal and let me tell you, that name is descriptive! She writes about geek culture and mental health (other geeky stuff) and she’s active and attentive with her reader community.

She also does “let’s play” and geek fashion videos over on her YouTube Channel and I’m sure you will enjoy her content as much as I do! 🙂

Thank you Megan for nominating me for the Sunshine Blogger Award and giving me this opportunity to showcase some of my content to a wider audience!

This award comes with some rules so here they are:

  • Thank the blogger who nominated you and link back to their blog (done).
  • List the rules and display the Sunshine Blogger Award logo in your post and/or on your blog (done).
  • Answer the 11 questions the blogger asked you (soon).
  • Write 11 new questions (after soon).
  • Nominate 11 new blogs to receive the award (no).

So… let’s answer some questions! 🙂

What are 3 interesting facts about yourself?

Interesting facts? Hmmm… I’m actually pretty boring but here goes…

  1. I think the Myers-Briggs “Personality Type” stuff seems like pure astrology while also possibly being useful for creating a “best-seller” Writer Bot… uh… no offense if you believe in astrology. 😛
  2. I am an autodidact in the truest sense. I was home-schooled and the very first book I read on my own was the large leather bound Webster’s dictionary that seemed like it was a foot thick to me at the time and I read it from cover to cover, followed by a much thinner thesaurus… I still can’t spell worth a damn tough! 😛
  3. My memory isn’t perfectly “photographic” but is both highly aural and visual.

Where would you like to be in 10 years?

Honestly? Preferably off world!

Governor of the Moon or Mars sounds about right, though on the Moon I’d still occasionally have to worry about the crazy earthling neighbors so… given my ultimate druthers… probably riding aboard the Orion. 😉

Baring that… I’ve got this whole “world domination” plot in the works and yeah… ten, eh maybe twelve years should do it if things go exactly according to plan and I meet my funding goals.

What are your goals for the next month?

You mean besides the whole moon “laser” world domination plot thing?  Oh wait did you mean like “personal / life” goals?

Well… I guess if I had to come up with a list just here on the spot… In no particular order mind you…

  • Complete the design and 3D print the prototype I’m working on.
  • My Xavier is 3 years old and can count to 100 by 1’s and to 1000 by 100’s and he has a basic grasp of addition though I’m sure some of it is rote. He is also just starting to get single number multiplication. I’d like to work more on subtraction with him as well as the concept of the number line and negative numbers. Additionally we need to continue expanding his vocabulary and although he needs a little prompting with the alphabet he gets better every day and I would like to see him get from A-Z without any prompting but numbers are far more his thing right now than letters.
  • Find time to work on the MANY programming projects I have in the works.
  • Continue prioritizing more and better sleep.
  • Continue my exercise routine, eating healthy, get all my vitamins… all that sort of health improving and maintaining kinda stuff.
  • Reclaim the industrial boarder territory known as “The Kitchen” (specifically Dish Mountain) from it’s recent secession attempt and restore law and order among The Nation of Flatware!
  • I’d put this one higher on the list but I did say these weren’t in order… Convince a billionaire to write me a blank check… coincidentally I’m taking applications in the comments and don’t let the “billionaire” prerequisite stop you… millionaires feel free to apply and in fact any applicant willing to just hand over a blank check to yours truly should also feel confident about their odds that I will accept their generous no strings attached gift!

How has your blog changed since it was first created?

Well… I mean… I troll my audience (with love) a lot more than I used to or probably should. 😛

Yes… sometimes that means I have bizarre existential conversations with myself while writing some posts regarding what’s the “smartest stupid thing” / “stupidest smart thing” I can say in some situations because in the end, it’s all for the lolz (yours and mine). 🙂

Sometimes for the sake of your intellectual stimulation and argument I may leave you unsure of what I mean or what my actual opinions are.

Mostly, I’ve just expanded out from doing “programming projects/tech content” (though I still do technical posts fairly regularly), which has a small number of regular readers who follow me specifically for that content.

Though lately my posts are about any topic that interests me or that is on my mind and I try to make my writing as entertaining and informative as possible.

Some of my work is satirical but look, you have to understand… I do all this for my personal amusement! It’s a hobby. 😛

I have also started adding a 1920×1080 wallpaper to almost all posts because… who doesn’t love having a new background every now and then?

If someone wanted to understand you, what game would they play?

Well… as a highly skilled propagandist, I would probably say Conway’s Game of Life because it’s great advertising for the series of posts I did about it! 😉

Though regular readers might note my preoccupation with the Fallout franchise and might say I’m something of a regular “Radiation Baby!”… you know, just your typical “Teenage Fallout Queen”, uh… sans the teenage part! 😛

Though if you wanted to understand my general philosophical sense of the universe you might play the old Infocom text based adventure “A Mind Forever Voyaging” because sometimes I get the inclining that things are not quite what they seem and after experiencing 2020 I think the probability that I am some kind of advanced AI/Brain in a vat built to answer some question is growing in likelihood!

Put simply, what that means is that there is a possibility all or many of you may be NPC’s from where I’m sitting and I could be an NPC from where the simulation creator is sitting and this blog may simply be the method of communication they felt would be most convenient for analyzing my thoughts… but… I am reminded of what Sheldon Allman sang:

“Be circumspect and discrete, Stay light on your mental feet, One slip and you know you’re through…”

Truly those are words to live by!

But… surely such thoughts will raise the ire of the simulation builders!? Too far down that rabbit hole and almost certainly the brain wipes begin!

Uh…. what was I saying?

Ultimately I think if you had to sum up my existence in a single game it would probably be… the game of random chance…. Solitaire, because much like the incorrect and frequently misheard solipsistic Nirvana lyrics sung by Kurt Cobain in the MTV Unplugged Version of All Apologies states:

“All alone is all we are”

What else should I write? I don’t have the right! What else should I be? All apologies!

Hmmm…. that joke is kinda hard to hit home and way to obscure to make sense to anyone!

See, there is a repeating lyric in All Apologies that goes:

“In the sun, In the sun I feel as one, In the sun….”

And via the Kevin Bacon separation equation of six degrees (A.K.A. “Bacon’s Law”)… it kinda bridges together all of this weird “Solitary AI Mind in a Jar” B.S. with the “Sunshine” Blogger Award nicely and it even ties a pretty bow on top, especially if you don’t think about it too hard! 😉

What is your favorite video game quote?


“Halt! Halt! Halt!”

~The guards in Daggerfall

What game are you most looking forward to?

I’m on pins and needles for the Cyberpunk 2077 RPG. Everything about it looks amazing and I’m sure to be playing it for many years to come and creating new characters to explore every cranny in Night City’s nook!

I’ve settled on these three character origin stories to play first but I’m torn between which character I wanna to play first of the first.

  • A tatted up and cyberwared Harley Quinn meets Tank Girl, “Street Kid” (big-gun toting gangsta doll) eager to follow in the “Rockerboy” Johnny Silverhand’s anarchistic footsteps and is ready, willing and able to “burn Night City to the ground!” just like Johnny-S suggests in one of the game trailers. Not exactly an evil character (at least to start), more… highly impressionable. Because of her… lets say “naive” nature she is able to justify any and all her horrific acts in the name of “social progress” and sees herself as dispensing “vigilante justice” on anyone who gets in her way. I see her using anything that goes “pew pew” or “boom”. Ultimately, whoever she sides with be be shaped by the beliefs of the faction that convinces her their cause is most worth fighting for and then gets out of her way while Night City quakes in the aftermath.
  • A fallen from grace, transgender “Corpo” Netrunner (Hacker)/Mnemonic Courier (like Johnny Mnemonic) with a soft heart and a hard, uh… set of wits, that she used to climb the ranks of the Arasaka Corporation. Even though she is soft at heart, morally she is quite gray and has no problem using her abilities to cause havoc as well as inflict non-lethal harm when the situation demands a more forceful approach, though I’m going to try for a deathless play through… okay, maybe not the bosses. She will seek the most expensive and top of the line cyberware and equipment with the justification that better tech means accomplishing her goals easier and with fewer bodies however she risks “cyberpsychosis” with every additional implant. She is a hedonist and won’t be afraid of spending her hard earned €ddies on all of Night City’s finer pleasurable experiences. She will side with whoever makes her the best offer she can live with and then doesn’t double cross her.
  • A post apocalyptic psycho “Nomad” / “biker tribal” / merc-theif (think Wez from Mad Max or members of The Great Khans from Fallout). His nomadic tribe doesn’t openly admit to cannibalism but… well, “the road gets pretty long sometimes!”. Due to prevailing economic conditions he has been forced to leave the lawless nomadic lifestyle he loves and migrate to live and work in Night City and because of his lack of a moral compass and willingness to kill for the right price he makes a living as a well paid mercenary doing… “Whatever you pay him to do!” however his individualist nature and tribal “Luddite” upbringing cause him to spurn all but but the most absolutely necessary cyberware, preferring instead to “remain human” and he sees anyone with extensive cyber implants as less than truly human and he takes great pleasure in spilling the blood/lubricating oil of his “technological superiors”. While not an exclusive melee-only play through, this character enjoys the thrill of combat and likes to get up close and personal with his enemies as much as possible. Like the Corpo play through, this character will also side with the “best offer” he receives, but unlike the Corpo play through, he will not factor in minimizing the harm he causes to others with his choice of allegiance.

What game are you currently playing?

Well I’m currently “saving myself” for Cyberpunk 2077 so I’m not playing anything “heavy” but Xavier loves to sit and play Space Engineers with me every now and then and we have a moon base right now which is mildly unfortunate because Keen Software House just released their “weather” update so planets now have dynamic weather which seems awesome (I can’t wait to aerobrake into a Martian sandstorm) but since we’re on the moon, no cool weather effects for us yet. :-/

Now… if Keen would only get off their asses and implement liquid water! Again, just saying… Minecraft and 7 Days to Die did it! 😛

Speaking of 7D2D, when I have a little time, I play single player 7 Days to Die because you can pick a direction and in the span of thirty minutes have a fun zombie adventure every time! And since the entire world is voxel based you can break or build anything and I enjoy the building/crafting elements in addition to surviving the zombies.

7D2D Alpha 19 is about to drop (or already has) and it’s supposed to come with lots of cool new feature’s including hints at elements of the “story mode” and overall visual improvements, lots of new zombie models and possibly even a flying robotic turret companion, which obviously excites me, though that might get pushed back to Alpha 20 (6-8 months from now). 😦

Additionally, I’ve been meaning to give Alien Isolation another go. It’s a horror RPG where you play Amanda Ripley (the Daughter of Ellen Ripley (Sigourney weaver) from the Alien movies) and due to a series of unfortunate events you explore Sevastopol Station during it’s final hours as it’s orbit slowly decays into the gas giant it’s circling. All while trying to avoid the alien, murderous androids and other scared (sometimes dangerous) survivors.

There is minimal “gun play” with a heavy focus on survival horror, exploration, puzzle solving, stealth and roll playing. You literally almost never have a weapon and most of the time you are running and hiding under tables and in lockers even if you do. 😛

The concept of hiding is similar to the game you are currently playing (Haunting Ground) but it’s played from a first person perspective and sadly Hewie doesn’t come along for the adventure though there are a few parts where you do have companions.

Though unlike that game, there is no running away. If the Alien sees you, you’re toast!

Also similarly there are predefined save locations which I don’t actually care for as a mechanic because I swear that damn alien cheats despite protests from the developers who claim the AI in the game is “fair”! 😛

Depending on my schedule before Cyberpunk is released (now pushed back to November 19th) I may give Alien Isolation another play through if I ever have the time.

Lastly, a friend in a different state has recently suggested we play “Don’t Starve Together” as a sort of “pandemic group playdate/social activity” but we’ll see. Lock down or not, it’s difficult to get responsible adults to commit to that sort of thing. 😛

If your favorite character had a modern song as their theme, what song would it be?

This is the hardest question to answer because I’m not sure I really have a “favorite character” actually… I’ve never really thought about it.

Accounting for my narcissistic form of solipsistic tendencies… It’s hard to say who my favorite character is because I tend to like open world flexible backstories like Bethesda games, like Cyberpunk 2077 and if I’m being truly “modern” then I might say V From Cyberpunk 2077 and the song would be… My Name is Dark by Grimes:

Damn! I should have said We Appreciate Power, also by Grimes and it totally would have gone better with today’s wallpaper too! 😛

Anyway, I haven’t played CP2077 yet and if we’re being a little liberal with the “modern” requirement it could be “Stubbs the Zombie”:

With the song”Resurrection” by Mr. Kitty for… obvious undead/zombiotic reasons!

Mmmm… good kitty! 😛

What is one thing you want to change about your blog?

Well, that billionaire blank check thing sounds pretty good!

Baring that… migrating to my own “top-level domain” (TLD) and a “virtual private server” (VPS) hosting package offers interesting possibilities… but eh I dunno… should I want to change something about my blog?

Are people saying things? What have you heard? Tell me damn it!

I guess… this is probably supposed to be where I turn to the camera, smile and the mature me is says something like “more readers” and that “you guys inspire me and… stuff!”.

Hmmm, I probably should have only wrote most of that last part, oh well… too late now! 😛

What blog posts do you read the most?

Isn’t it obvious? The good ones! 😉


Here’s a list of questions I’m asking:

  • What is your favorite color?
  • Why did you start your blog?
  • What has been the most challenging part of blogging for you?
  • Do you like eggnog?
  • “Never have I ever… BLANK”, fill in the blank.
  • Cashews are clearly the superior nut… If the answer cannot be “almonds”, what is cashews runner up?
  • What’s the best “complaint comment” or spam you ever received?
  • What is socially acceptable/unacceptable today that you think will/won’t be in 10-15 years?
  • Consider your blog/community needs an app? What would it’s features be?
  • If at the end of a long life with an old and worn out body, it was possible to transplant your brain into a robotic body that looked/felt/behaved like a human body in their mid 20’s-30’s and it would last for at least another 100 years… would you?
  • On my way to St. Ives, I met a man with seven wives, Each wife had seven sacks, Each sack had seven cats, Each cat had seven kits. Kits, cats, sacks, and wives. How many were there going to St. Ives?


If you would like to answer these questions then I nominate you!

So as I said I am accepting blank checks from all who want to give them to me but if you’d rather just give me a small set amount, maybe like a dollar, I have a  Patreon.

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

Much Love,


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,


Blog at

Up ↑

%d bloggers like this: