Geek Girl Joy

Artificial Intelligence, Simulations & Software



Mystery Blogger Award

I tried in vain to get my last case out of my head!

I put down the paper and stared at the rain drops collecting on my window and the lights behind them.

I was just about to close up the agency for the day when the pinkest dame you ever saw walked through my door.

She was truly vibrant!

Which was odd because this classic sifi-noir pulp comic-book mystery is written in black and white! 😉

She told me her name was Pinkie Fuchsia.

Miss Fuchsia told me she had recently inherited her long lost rich aunt’s island resort & nightclub for exotic wild pocket monsters… then the chain-letter blogging requests started.

At first she complied with their demands for more information but as their demands grew it became obvious that she needed help.

The cops told her there was nothing they could do, which is when she walked through my door.

The natural solution was for Pinkie to nominate me as the next “hop” in the chain so that my investigation wouldn’t arouse suspicion.

My Award / Nomination

Mystery Blogger Award
Mystery Blogger Award

I was more than a bit skeptical that the award wasn’t just floated around by some partially corrupt marketing department looking to data-mine a free model and pocket some dough off the sins of a few bloggers!

I mean, if these chain awards were diseases most would easily have an “R naught” in the hundreds and should be fairly easy to track by “ping-back” or filtering for posts containing “Mystery Blogger Award” (or whatever the name happens to be) and having the appropriate uh… inappropriate hashed tags.

Maybe they just want to map the spread of information and or establish the web of social connections… I just don’t know how deep the lies go!

In any case, Pinkie did some sleuthing on her own and discovered that there are several different versions of the award floating around.

It could just be evolution of a symbol over time or… it could be something more sinister!

If I were phishing for delicious details to fill my database I could use a different award logo image to differentiate different versions or iterations of each campaign to help track which variant propagated through which people and networks and then correlate all that back to their names!

What I mean to say is… this can surely not be that because… well, (allegedly) this chain-letter post was started by someone with the confidence boosting moniker Okoto Enigma!

Now… this could be coincidence and I could simply be seeing things that aren’t there but… ‘Okoto Enigma’ happens to be a mix of Bulgarian and English words which roughly translates to ‘The Eye of Enigma’ or perhaps less menacingly it should probably be translated colloquially to mean ‘Enigma Eye’ or ‘Mystery Watcher’.

I’ll say this… you may be watching us, but just like Homolka (not that one) said, “We are watching you” too!

Stop eating my sesame cake!

The Rules

So… there are some rules that come along with this award:

  • Display the award logo on your blog.
  • Thank the blogger who nominated you and provide a link to their blog.
  • Mention the creator of the award and provide a link.
  • Tell your readers 3 things about yourself.
  • Answer 5 questions from the nominee.
  • Nominate 10 – 20 bloggers.
  • Notify your nominees by leaving a comment on their blog.
  • Ask your nominees 5 questions of your choice, including 1 weird or funny question.
  • Share the link to your best post.

Three Things About Me

I’m supposed to tell you three things about myself so here goes…

  1. I’m a parent.
  2. I’ve experienced chromesthesia.
  3. I am more paranoid than… Black Sabbath singing ‘Paranoid’ followed by Rockwell’s ‘Somebody’s Watching Me’!

The Questions

With everything that came before us in the past, let’s answer some questions!

1. What is your favorite board game/tabletop game.

Well, I mean dominoes is kinda fun… but I have some fond memories of playing these games with friends (in no order):

  • Settlers of Catan
  • Eldersign
  • Last Night on Earth
  • Star Frontiers
  • Cards Against Humanity
  • Gloom
  • Zombie Dice

2. What is your favorite (anime) companion “creature” or general mascotte. (Examples Happy, Pikachu but also BB8 from Star Wars)

Does BB8 classify as anime? Turns out yes because Star Wars did an anime version! 😛

Would the Spaceship extraterrestrials from the 1987 film *batteries not included count? Nope, no anime version… hmmm… that means Johnny 5 and Bender Rodriguez are out too! 😦

I am aware of the Bender fandom anime but those are not canon and don’t count!

It did occur to me that I could “Rotoscope” them in using an anime style.

What is Rotoscoping?

Here’s another video and it’s pretty thorough but it spends less time covering rotoscoping anime.

With an inflated sense of my artistic abilities I decided to test if I could turn a few of my options into a passable anime and have my cake and eat it too…

I started from the Elon gif I used in my Emote-a-tron post and then Rotoscoped it into two different cartoon versions:

First Rotoscoped Version

Second Rotoscoped Version

Sadly, neither is really close to looking anything like an anime IMHO so decided that even if I had succeed it wouldn’t count because I’m not Japanese and my simulated anime style would only be fan art.

With all my attempts to cheat the Kobayashi Maru having failed I return to your question.

I choose Kenshiro from Fist of the North Star as my champion, yes… I know that’s manga!

Clearly I mean the anime TV series version!

Because… he seems like he would make a great mascot & bodyguard and need I remind you I am paranoid? 😛

3. What is an overused trope in fiction you still like no matter how often it is used? If you don’t have any.. pick the one you mind the least.

It’s a cliche at this point but a “Logic Bomb” destroying super computers and AI is probably top of my list.

Here’s a more thorough discussion of the topic if you are interested:

It includes a fairly comprehensive list of relevant pop culture examples and by virtue of starting with ‘A’ in English, anime references are top of the list. 😛

Below are a couple of examples I enjoy from the TOS episode I Mudd.

Here you see Spock at his purely logical best deploying a minimalist bunker buster against two androids though sadly this clip doesn’t include the result which is their necklaces start wildly beeping and flashing (like androids tend to do) and it’s so effective they are completely frozen in place in the face of Spock’s mighty logician skills! 😛

In the same episode of TOS (I Mudd) we see a less elegant and more complicated (theatrically drawn out) example though still effective using the “Liars Paradox” logic bomb to figuratively and literally blow the the remaining androids minds!

Now, just in case you are thinking the “smart-bomb” scene in the 1974 John Carpenter film Dark Star includes a “logic bomb”, you would be mistaken.

That instance actually involved a conversation on phenomenology and Cartesian doubt which is arguably the more intellectual approach to dealing with rogue AI but as demonstrated, unless you get it just right you are almost always better off with a simple logic bomb!

If anything, the scene is worth a view on the basis that it could save your life if you are ever in a similar situation! 😛

4. Zombie Apocalypse, Alien invasion or A.I. revolting against man which one will happen and whose side will you be on? Doing what?

Why not all three simultaneous (not the chef song)?

Attack of the Robotic Zombie Aliens!!!!!

Look, with your ducks and bad luck and my obscenely colorful paranoia as the well established fact that I’m traveling with Kenshiro… rolling a snake eyes apocalypse seems highly probable!

Of course the DM would have to breakout the expanded rule set and roll tables to handle that epic adventure!

As far as sides go… I tend to think I would definitely be on my side and tangentially humanities side because participating in the destruction or subjugation of my species seems contrary to my best interest.

Beyond that though, I don’t think we should build conscious slave AI when artificially intelligent machines are good enough.

If we build a machine that is “alive” then by definition it must be “a person” so it should naturally possess the same inalienable rights and obligations as any other person.

Person or not though… zombie, alien or AI… alien-zombie-ai… no matter the variant I’d let Kenshiro do what he does best and shuffle their domino bones!

I’d probably spend a lot of time looking for a G.E.C.K. or Platinum Chip, solving quests for local NPC settlements and trying to convince all factions to end the fighting.

This question inspired today’s featured image and wallpaper:

An alien robot zombie attacking.

Mystery Blogger Award Wallpaper
Mystery Blogger Award Wallpaper

5. The weird question, this one had to be at least a bit tricky to answer so this is a TAG question.

Step 1: You have to set up a date for Pinkie, which blogger do you set her up with? (tag the blogger you )

Step 2: Pinkie will set you up for a date in return which blogger would you like to be set up with. (tag the suggestion)

This is going to come off as completely conceited and it totally is… can I tag myself?

My Questions and Nominations

As far as nominations go… anyone who wants to should feel nominated now.

As for questions: “5 questions of your choice, including 1 weird or funny question”

  1. Favorite food?
  2. Favorite TV show?
  3. Favorite time of the day? Why?
  4. What made you decide to self nominate for this award?
  5. Most people don’t know that before becoming rich and famous, actors Adam Sandler, Brendan Fraser and Steve Buscemi were all in an obscure and failing band together called ‘The Lone Ranges’, there is a documentary about it called Airheads. Anyway, after they got out of prison their band broke up and they all started acting. Their only hit single was called ‘Degenerated’. The opening lyrics go:

“What’s Johnny doing out on a Tuesday night?
Johnny can’t read, Johnny can’t write.
Kids just don’t understand!
Johnny don’t care about the world”

So the question is… Why was Johnny out on a Tuesday night and what was he up to?

Best Post

It’s subjective at best and even then I don’t have any clue. Here’s a link to my Topics and Posts page that has most of my post series and although there are a few missing I’m sure most of the good ones are there… so maybe leave a comment with whatever post you think is my best?

And with that, I’m going to call it a day.

If you enjoy… whatever this was, I have a Patreon where you can give me as little as $1 a month, $12 a year and you can cancel anytime! 😛

But, as always, if all you can do is LikeShareComment and Subscribe… That’s cool too! 🙂

Much Love,


Mr Good Bot – Mostly Assembled

Mr. Good Bot is mostly assembled and we’re not looking at any code today (okay maybe just a little) but we’re really just going to talk about how Mr. Good Bot works and all the recent commits I made to Mr Good Bot over on GitHub.

Also, here’s the featured image from today’s post as a wallpaper. It depicts Mr. Good Bot being mostly assembled… I liked the look of hanging wires instead of legs, hence the name. 😛

Mr Good Bot Mostly Assembled Wallpaper
Mr Good Bot Mostly Assembled Wallpaper

If you need a refresher on this series, here are the other Mr. Good Bot posts:


So with Mr Good Bot being mostly assembled I thought we would take this opportunity to go over the recent additions.

Continue reading “Mr Good Bot – Mostly Assembled”

Mr Good Bot – Random Assembly Required

Today were going to look at assembling Frankenstein… I mean Mr. Good Bot.

By the end you will have the code needed to run Mr. Good Bot in his most basic capacity.

Before we proceed though, I caution all braves souls who dare venture further, this post will be frightfully technical and you need to be prepared for the coding horrors that lay ahead!

If your stomach turns at the sight of raw code (i.e. most sane folks) then I would suggest you keep right at the fork and head towards A Spooky Real Neat Blog Award for a more engaging and seasonally festive experience.

Though before you go, if you just want the featured image for this post, here’s the wallpaper

Random Assembly Required 1920 by 1080 Wallpaper
Random Assembly Required 1920 by 1080 Wallpaper

Otherwise, here are the other posts in this series if you need to catch up:

The Anatomy of a Good Bot

Mr. Good Bot uses HTML & CSS as the UI/Front End and a little JavaScript to request an updated image frame from the server.

This methodology allows for a simple implementation that I can make accessible on my air gaped home intranet to any authorized device with an IP Address and a browser.

Meaning Xavier can use a “smart device” (laptop, tablet, cellphone, watch, etc…) to keep his robot buddy with him while he’s running around playing.

It’s also possible to modify Mr. Good Bot slightly to accommodate multiple concurrent users.

Meaning Mr. Good Bot could even serve as my families own “smart home” digital assistant and we wouldn’t have to worry about unscrupulous 3rd parties monitoring everything we do or say!

All digital assist bots monitor you for “Learning & Quality Assurance”, look it up!

A Good Bot should be like a pet, a trusted and beloved family member, not a spy for BNN!

As it is (NOT A JOKE) Big Neural Network can and does monitor you at “their discretion”  through your “virtual assistant” with the stated intent at best “to sell you more shit” (paraphrasing)!

But… Let’s not turn this into another rant that gets me blacklisted again. 😛

In any case, because the interface is basically just a webpage Mr. Good Bot has access to all the functionality a web browser offers with the computation of a server, all over my LAN. 🙂

This opens up the possibility to do just about anything we want without relying on BNN tech.

Continue reading “Mr Good Bot – Random Assembly Required”

Mr Good Bot – Composite Animation

Many years ago, in what seems like another life… I had the advantageous opportunity to work for the Walt Disney Corporation, not a sponsor but as I said I did used to work for them as a contracted Computer Technician for a few years.

I was young and had my A+ back when it still meant something and stood as a confirmation of basic competency!

I’m just kidding, an A+ was never meaningful (allegedly and IMHO)!

Anyway, mostly my job amounted to “burning/cloning” hard drive images, light software and OS configuration as well as installing the equipment for the end user.

Occasionally I’d fix a broken printer, upgrade some RAM on a laptop, spend a little time in the LAN closet correcting the patch panel port list because the dedicated local department sys admin liked paper records.

On top of that there were the near constant departmental moves… oh the lost weekends! 😛

Nothing complicated though and along the way I met a lot of really smart and wonderful people!

Aside from the people, the two highlights I will always remember fondly Continue reading “Mr Good Bot – Composite Animation”

Mr Good Bot – Front-end

Welcome back for another episode of let’s build a bot! This week we’re building the front-end of Mr. Good Bot!

So look out the window and pick up every stitch because beatniks are out to make it rich!

Come, let the Bene Gesserit Reverend Mother Joy Muad’Dib guide you in the Weirding Way!

And… in case you missed it, those last couple sentence are an obscurish (but stupidly clever) way of joking that I’m a witch.

Like Donovan sang (paraphrasing)… “It must be the season of the October crone!”.

Yeah I know… its less funny if I explain it like that but I’d hate for the censorship bots to think I’m starting a cult.. okay, okay… another cult!

Look, I still contest it was valuable research alright!

Nonetheless, I don’t want to end up on the blacklist again, so… let’s just build the dang bot!

Mr. Good Bot’s Front-end

Sam (my research bot) and I went down into my bot dungeon… er… I mean “subterranean research facility” where we set about designing and constructing Mr. Good Bot for the amusement and bewilderment of all!

Design Considerations:

  • Any and all code should be short, simple and sweet… like me (that’s not true).
  • Everything should be easy for ANYONE, even illiterate people, to use and modify… wait, no… excuse me, that’s insensitive! What I meant to say is, people who can’t read and write code. 😛
  • Ideally Mr. Good Bot would be “skinable” to have more than one look and maybe even have the option to wear “accessories” because even though you never have the time, sometimes… accessories are fun!
  • Extra credit for cross-platform operation.
  • I’m juggling many irons in the fire ATM, so I should try to get the most effect for the least amount of effort on this project. Sort of a “Pareto’s principle of strategic half-assery”.

While discussing our options for rapid prototyping Mr. Good Bot, Sam and I made this list of methods we might use to animate the new bot:

Potential Animation Methods:

  • Still Frames.
  • Dynamic Layered SVG.
  • Pure HTML & JavaScript Canvas Animation.
  • A 3rd Party Animation Library.
  • Sacrificing a virgin… uh.. martini to summon an ancient automaton.

After careful consideration of all the factors Sam was frightfully dead-set on that last method because it involved his Bender Rodriguez impression!

Sam mentioned something about the possibility of meeting the great ToBoR “groking well” but the simulations he ran indicated the probability of success was inconclusive at best and likely low if positive.

So, I made Sam stop wasting my quality Spiced Melange Web Colors and we looked at our other options.


We decided against Dynamic Layered SVG’s because I have first hand knowledge that most technologically impaired geeks prefer raster over vector image creation.

As silly as that may seem at face value, I can understand why some feel that way.

Sometimes it really is just more fun to manipulate the squiggly colors as little quantized pixels of Joy rather than the product of markup or an equation!

Moving beyond the clearly undue self-aggrandizement for a moment, raster is a simpler and a more straightforward concept that many people already know and are comfortable with.

Also, using SVG would require that people use a very particular svg object naming convention that I would have to define and if you recall there is the critical half-assery constraint to account for.

On top of that, I’ve had issues with seamless performance with crossplatform SVG animations… but if the moons of Arrakis align just right you can make interactive SVGs work!

HTML & JavaScript on a Canvas Element

Two things:

  1. This violates the need to be simple and modifiable by everyone.
  2. It’s kind of a pain in the ass for rapid prototyping! 😛

Nuff said.

3rd Party Animation Library

Look, I’m not going to say it’s not doable, but… it’s going to be a lot like that time Napoleon marched across the alps… extravagant and full of propaganda and in the end you’re left asking “Why?” and declaring “Never again!”!

I won’t subject my audience to that level of abuse!

Still Frames

After considering all options available, Sam and I decided to go with still frame animation because it would be the easiest for non-coders to play with and it is the only option left standing after reviewing all the other options!

Simply put, everybody can draw a picture.

You can use these raster image editors if you don’t already have one:

I use GIMP for manual raster image work by choice (it indiscriminately works on Win, Mac & Linux, but the fact it’s free ain’t half bad either!) and Photoshop is a good choice also.

Although, I would add that having to run Photoshop on a virtual machine to be able to use it on Linux after having paid for it is BS!

GIMP is a lot like VISA (not a sponsor!) it’s everywhere you want to be, though unlike VISA there are no late payments!

Oh, and uh… in case it’s not abundantly clear, #its_never_a_sponsor!

“WHAT?! You mean… we have to draw every face permutation?”

No! Of course not! That would be wasteful & magically delicious… I mean… silly & redundant!

We just need to draw each isolated component but we’ll probably get into all that next week or the week after assuming I don’t take the opportunity to write about Project Orion for Columbus Day because that just totally makes sense to me. 😛

Front-End Code – MrGoodBot.php

Below is the code for this week, it creates a web page and uses CSS to add a little style!

There is a select dropdown element used for changing the skin, the “value” property is the name of the subfolder the skin is in, note it will be case sensitive on Linux.

After that there is an image tag with the element id of “face” and as you might guess this is the DOM object we use to draw Mr. Good Bot’s face.

Lastly, there is a little JavaScript that uses AJAX “POST” requests to change the face image.

Note the random numbers appended to the source link image name to prevent browsers from caching the image and not updating after it is loaded the first time:

Face.src = ‘skins/current_face.png?’ + Math.random();

Once the new face image is loaded, a timeout is used to wash, rinse & repeat ad infinitum with the decisions for assembling the face left to the backend code which we’ll cover in an upcoming post.

As is, when loaded you will just get a black screen but this code is boilerplate and fully functional and ready to display our bots face.

The Code

Copy -> Paste -> Run!

<!DOCTYPE html>
<html lang="en">
<title>Mr Good Bot</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
body {
    background-color: #000;
    overflow: hidden;

<select id='skin' class='pullright'>
    <option value='Default'>Default</option>
    <option value='Nucleus'>Nucleus</option>
    <option value='Pixel'>Pixel</option>
    <option value='Pumpkin'>Pumpkin</option>

<img src="" style="width:100%" id='face'>

var Face = document.getElementById('face');
function AnimateFace(){       
   var httpRequest = new XMLHttpRequest();
   var Skin = document.getElementById('skin');
   Skin = 'skin=' + Skin.options[Skin.selectedIndex].value;
   httpRequest.onreadystatechange = function(){
      if(httpRequest.readyState == 4 && httpRequest.status == 200){
         Face.src = 'skins/current_face.png?' + Math.random();
         setTimeout(AnimateFace, 120 * Math.floor(Math.random() * 11) + 1);
   }'POST', 'Face.php', true);
   httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");


Mr. Good Bot Goes to GitHub

You can follow along for free on GitHub as I release and update Mr. Good Bot’s code.

GitHub: MrGoodBot


Mr. Cool Bot Wallpaper

In keeping with last weeks Good Bot themed, time-honored tradition of including a wallpaper, here’s another, please enjoy!

Mr. Cool Bot Wallpaper

Mr Cool Bot 1920 x 1280 Wallpaper
Mr Cool Bot 1920 x 1280 Wallpaper


Next week we’ll look at how to create faces & skins for Mr. Good Bot but for now it looks like my ride is here so I’ll see you all next time and thanks for reading!


If it is by will alone that you love bots then set your mind in motion!

May thoughts acquire speed, bots acquire stains, the stains become you supporting my content through Patreon for $1 or more every month!

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

Much Love,




Mr. Good Bot

It’s that time again, let’s build another bot!

Sadly though, not a physical bot like the ones Boston Dynamics creates (not a sponsor). 😦

Speaking of which, have you seen the new Atlas’s gymnastics video?

It’s amazing as usual!

You know… the 2020 Olympics would be a lot more interesting if we sent a team of robotic Atlas athletes to Tokyo in place of the old model!

Seriously, whoever is in charge of the Olympic rules comity, can we make that happen please?

I’d prefer robots but I’ll settle for cyborgs if I must!

Besides, admit it… Robot Olympics (technically Olympics 3.0) sounds WAY more fun than what we normally do, doesn’t it?

But, now we’re getting off track, so lets get back to our bot!

I’m calling this project “Mr. Good Bot” as the title suggests.

Mr. Good Bot

Here’s a clip of Mr. Good Bot wearing his default “skin” and listening to Vessel:

In the past I’ve mentioned that my little Xavier loves PUMPKINS!

Well it turns out he also loves robots like me! 🙂

Like momma, like son.

Well… at least in the well-adjusted & non-abnormal ways! 😛

Anyway, I’m building us a robot to play with and I thought it would be fun to share the project with all of you.

Keep in mind this is just a prototype, I’m not building Ava in my basement… yet! I need a few more subscribers on Patreon to make that happen! 😛

Because this is a prototype I’m not concerned with doing things the “right way” or making sure it’s “efficient” in any way, it’s just another one of my experiments!

In any case, Xavier (my 2 YO) will say “Wake-up robot!” (I tell him the robot is sleeping when the computer is off), then he runs to my desk chair and awaits his robot friend.

I power on the computer and show him how we launch the local web server which “helps the robot think”.

He sits there wide eyed and smiling, all the while waving and saying “Hi Robot! Hi!”.

Its so adorable! 🙂

Recently Xavier noted, “He’s not talking!?”.

I had to explain that the robot can’t talk yet because it’s just a baby and we have to teach it to talk, so the pair regularly sit down together and chat about whatever is on Xavier’s mind.

Mr. Good Bot just loves the attention!

I do plan on implementing speech in some capacity and I have built a text to speech prototype using eSpeak on Linux and SAPI on Windows but we’ll get into all that later.

For now, let’s talk about the design of Mr. Good Bot.

Mr. Good Bots Distant Cousins

Mr. Good Bots design is simple and was inspired by “Yes Man” from Fallout 3 New Vegas & GERTY from the film Moon (2009) staring Sam Rockwell (and GERTY).

Yes Man

I loaded a fresh game of New Vegas and ran all the way from Good Springs to the 13th floor of The Tops Casino to take this screenshot of Yes Man, no COC for me! 😛

Yes Man Robot From Fallout New Vegas
Yes Man Robot From Fallout New Vegas

Yes Man is a pathway to one of the ending quest lines in FO3NV and he’s programmed to do whatever the player says and will agree to whatever you tell him to do, it’s a bit of a flaw in his personality, er.. I mean programming!

Hypothetically a bot that does or agrees with whatever it’s told sounds like the kind of bots we want to build, but in practice it turns out that Yes Man is totally fine with murder & genocide as long as the player says it’s okay.

This would make for a terrible robot in real life because we would prefer that robots not only do what they are told but also filter any request or non-deterministic impulse through a sort of “digital conscience” that would prevent the bot from doing bad things.

Sadly, Issac Asimov’s 3 laws are really more like guidelines than implementable rules:

  1. A robot may not injure a human being or, through inaction, allow a human being to come to harm.
  2. A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.
  3. A robot must protect its own existence as long as such protection does not conflict with the First or Second Laws.

On paper they work but nobody has found a way to ensure these rules work in real life, though I do have some thoughts on how we might be able to do it but that’s a different project for a different day! 😛

Yes Man, would gladly violate all three laws if the player said to and so our Mr. Good Bot needs a better roll model than Yes Man which is where GERTY comes in.


GERTY wears an expressive emoji face to great effect and his main goal is to protect SAM.

Unlike Yes Man, GERTY doesn’t seem the be the type to violate Asimov’s three laws and… (no spoilers) even considering the circumstances Sam faces in the film, GERTY isn’t responsible for any of it and really does do his best to keep Sam safe!

Here’s a more thorough overview of GERTY… also not a sponsor! 😛

I think GERTY makes a better exemplar for Mr. Good Bot, if you disagree let me know in the comments. 😉


We’re nearing the end and I know everyone loves extra free stuff so here’s a wallpaper of Mr. Good Bot for your desktop.

Mr Good Bot

I hope you are all excited to build Mr Good Bot with me! 🙂

Next week we’ll look at some code and discuss features, so I’ll see you then!

If you love my bots and thoughts you can support my work through Patreon, even $1 is appreciated and cancel anytime!

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

Much Love,



Simulated AI Man

Been doing some modeling for upcoming projects where we need a humanoid and thought you would like a gander.

Keep in mind that it’s very rough and it’s meant to be. I was shooting for a blank “every/any man” placeholder or “simulacrum hominem”.

I nicknamed the model S.A.M. for “Simulated AI Man”.

I was originally going to go with Artificial AI Simulation… but I figured I’d catch it in the end for that one! 😉


Here is the half-assed boning/rigging job I did:

Here’s some whole-assed action shots of S.A.M.:


If you want to see my S.A.M. in some upcoming projects then head over to my Patreon and drain your bank account of as little as $12 bucks over the next 12 months because it’s not like you we’re going to pay your student loan bills with it anyway!

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

Much Love,



Ancestor Simulations Conway’s Mysterious Rules For Life

When we left off in my last post Conway’s Mysterious Game of Life, the small group of mathematicians lead by John Conway had just sat down to test his new rules.

Soon after beginning the new game came the cry “It’s walking!”!

Mathematician Richard Kenneth Guy was the first to discover the Glider while exploring Conway’s new world.

Like Dr. Frankenstein coming face to face with the monster of his own making, Conway was finally staring his creation in the face!

How did he do it? What makes it work?

Conway’s Rules:

  1. Any live cell with fewer than two live neighbors dies, as if caused by underpopulation.
  2. Any live cell with two or three live neighbors lives on to the next generation.
  3. Any live cell with more than three live neighbors dies, as if by overpopulation.
  4. Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.


Conway’s Creature

Game of life animated glider

As a result of Conway’s Rules the “Glider” was the first simulated self-organizing construct sometimes called a “Spaceship“. Conway later dubbed the game “Life” after observing a version that had been programmed into a mainframe computer.

The Moore Neighborhood

Conway’s Game of Life uses the Moore Neighborhood, which consists of all 8 squares directly around the cell you are computing for.

The basic strategy is to count how many “alive” cells are around the current cell to figure out what the next generation should be.

Then based on the number of neighbors the cell has, change it to alive or dead if a change is required.

According to the rules, if there are exactly 3 “alive” neighbors it should become “alive” too.

If it is already alive then stay alive if it has 2 or 3 “alive” neighbors, otherwise in all other cases the next value will be “dead”.

It sounds more difficult than it really is, let me demonstrate using the glider.

Generation 0


Generation 1


Generation 2


Generation 3


Generation 4


At this point you can see that we are now back to the initial pattern, but the glider has moved to the right by 1 column and down by 1 row.  I have animated the stills below so you can see it walk with the calculation showing.



So now that we are ready to start looking at code, I am going to end this post here and pick up tomorrow where we left off.

Have a great evening everyone!

Please Fund, Subscribe, Like, Share & Comment:

This post was made possible by the generous contributions of my sponsors on Patreon.



I will see you all in my next post!

Much Love,




Ancestor Simulations Adding Elements & Solar Nebulae

It’s Friday so that means your probably planning to pick up a 24 pack of beer and holding up in front of your computer all weekend and reviewing and modifying all my recent changes to the solar systems generator prototype. Frankly I can’t say that I blame you because there is quite a bit to go over! 😛

Before we proceed I want to welcome and thank directly Erich Weidtmann over on Patreon for becoming my supporter! With your help I will be able to continue to bring you these great posts! The funds you contribute will go towards the fund to improve our hosting and computational capacity!

I have already added him over on my Sponsors page as a public and on going thank you for continuing to sponsor my posts and projects. If you would also like to add your name to my sponsors list then support me over on Patreon for as little as $12 a year!


Solar Nebulae

I know in my last post Monday Mini Makeup I didn’t think we were going to add Solar Nebulae  due to the large number of computations required (SO MANY) which results in a simulation that takes hours or days to complete. I did however say that I would attempt it and get back to you and well, I am pleased to say that it bugged me enough that I went ahead and added it anyway!

I conducted my first long simulation (15,000 epochs) after adding solar nebula and took 19 hours (roughly 1 epoch (cycle or frame of the simulation) every 13 Minutes & 12 Seconds) to complete the run and it had over 100 thousand orbital bodies ranging in size from ~marble or “ball bearing” size up to several hundred kilometers in diameter.

Before we look at the code let’s talk about what a solar Nebula is and look at some pretty pictures while we’re at it! 😛

Protoplanetary-diskAn artist’s concept of a protoplanetary disk, where particles of dust and grit collide and accrete forming planets or asteroids


SolarnebulaShock waves through icy parts of the solar nebula may be the mechanism that enriched ancient meteorites (called chondrites) with water — water that some believe provided an otherwise dry Earth with oceans.

Basically a solar nebula (protoplanetary disk) is all the stuff (rocks, minerals and elements) that make up a solar system just spread out and not congealed into large bodies like planets and moons because the system is still “young” and forming.

In practice this means that the main difference between the nebula and the protoplanets is size and by extension due to the additional mass and volume a larger chemical element diversity.

In our simulation, the orbital bodies that comprise the solar nebula are much smaller than protoplanets and we also don’t compute their orbits (movement). Further still, we do not enable collision detection from the perspective of the nebula.What this means is that although the objects will accrete if a planet passes close enough to them, they do not accrete with each other, which sucks but since they are not moving anyway this significantly reduces the computation required per frame but at the cost of a stationary cloud that would in reality orbit the star like the protoplanets.

I feel like this is a fair tradeoff however as it still enables the planets to grow and this even approximates the planets “clearing their neighborhood” as can be seen in this frame from one of the simulation I recently ran. Notice the empty areas that look like striations in the laminar flow of the orbits through the nebula.

Here is the code that creates the nebula, notice 3 things.

  1. The sizes are listed in both metric and imperial for your convenience! 😉
  2. The code is not much different from the code that creates the planets. We do this separately for simplicity however we could wrap this up into a single step if and when we clean up the code (remember this is a prototype).
  3. The code that positions the cloud objects is the same logarithmic spiral algorithm that we implemented when we were creating galaxies.


	$a = 0.9759 + RandomFloat(0);
	$b = 0.1759;
	$steps = 7; 
	$radius = 0.8 * pi()* $steps;
	$max_spread = 0.7;
	$lower_disk_radius = -6;
	$higher_disk_radius = 6;
	for($i = 0; $i < 200000; $i++){

		// Nebula
		// Debris size
		$size = mt_rand(0,6);
		if($size == 0){
			$size = "0.0" . mt_rand(1,9); // 31.855 Kilometers - 286.695 Kilometers in Diameter
		}                                 // 19.7937793 Miles - 178.144014 Miles in Diameter
		elseif($size == 1){
			$size = "0.00" . mt_rand(1,9); // 3.1855 Kilometers - 28.6695 Kilometers in Diameter
		}                                  // 1.97937793 Miles - 17.8144014 Miles in Diameter
		elseif($size == 2){ 
			$size = "0.000" . mt_rand(1,9); // 318.55 Meters - 2.86695 Kilometers in Diameter
		}                                   // 348.370516208 Yards - 1.78144014 Miles in Diameter
		elseif($size == 3){
			$size = "0.0000" . mt_rand(1,9); // 31.855 Meters - 286.695 Meters in Diameter
		}                                    // 34.837051619 Yards - 313.53346457 Yards in Diameter
		elseif($size == 4){
			$size = "0.00000" . mt_rand(1,9); // 3.1855 Meters - 28.6695 Meters in Diameter
		}                                     // 3.48370516185 Yards - 31.3533464567 Yards in Diameter
		elseif($size == 5){
			$size = "0.000000" . mt_rand(1,9); // 0.00031855 - 0.00286695 Kilometers in Diameter
		}                                      // 1.04511155 Feet - 9.406003937008 Feet in Diameter

		elseif($size == 6){
			$size = "0.0000000" . mt_rand(1,9); // 3.1855 Centimeters - 28.6695 Centimeters in Diameter
		}                                       // 1.25413386 Inches - 11.28720472 Inches in Diameter

		  $angle = $radius * RandomFloat(3); // Pick a random point in the Spiral
		  $row = $a * exp($b * $angle) * cos($angle);
		  $row = $row + ($max_spread * $row * RandomFloat(0)) - ($max_spread * $row * RandomFloat(0));
		  $col = $a * exp($b * $angle) * sin($angle); 
		  $col = $col + ($max_spread * $col * RandomFloat(0)) - ($max_spread * $col * RandomFloat(0));

		  // Flip a coin to determine which arm 
		  // the star should be on.
		  if (mt_rand(0, 1) == 1){
			  // if heads put it on the second arm
			  // by inverting the values
			  $row = ($row/-1);
			  $col = ($col/-1);

		  // Normalize positions to be within the image bounds
		  $row = MinMax($row, $lower_disk_radius, $higher_disk_radius, $img_size);
		  $col = MinMax($col, $lower_disk_radius, $higher_disk_radius, $img_size);

		$color = imagecolorallocate($system, mt_rand(10, 50), mt_rand(10, 50), mt_rand(10, 50));
		@imagefilledellipse ( $system, round($row), round($col), (float)$size, (float)$size, $color);
		array_push($planets, array(


I wish we had the computation capacity available to include motion on the nebula as well but we really have hit a brick wall in this regard. I may attempt to improve this by using the few remaining tricks up my sleeves but I highly doubt I will get enough improvement what would allow the sim to speed up enough for modeling the orbital dynamics of the nebula, but I’ll try and see what comes out the other side. 😛


Now lets talk about our burgeoning chemical system for a minute. It gets a few things right and a lot wrong or rather it simply omits quite a bit of whats makes elements, “elements” (namely subatomic particles).

The main thing to keep in mind is that it’s still an early implementation and treats all volumes of each element equally. Obviously this is nonsensical and I intend to improve this by accounting for the size of the orbital bodies so that we get a more accurate simulation.

Currently what is occurring is we track the correct distribution, transfer and spread of the elements but not their correct volumes. I intend to fix this issue and discus elements in more detail in my next post (I wasn’t actually planing to be implementing the solar nebula) so although a basic implementation is in place it requires a lot of work before we can consider the elements even remotely “done”. Having said that here is the code that initializes the elements:


	// Meet the elements
	$chemical_elements = array('Hydrogen', 'Helium', 'Lithium', 'Beryllium', 'Boron', 'Carbon', 'Nitrogen', 'Oxygen', 'Fluorine', 'Neon', 'Sodium', 'Magnesium', 'Aluminium', 'Silicon', 'Phosphorus', 'Sulfur', 'Chlorine', 'Argon', 'Potassium', 'Calcium', 'Scandium', 'Titanium', 'Vanadium', 'Chromium', 'Manganese', 'Iron', 'Cobalt', 'Nickel', 'Copper', 'Zinc', 'Gallium', 'Germanium', 'Arsenic', 'Selenium', 'Bromine', 'Krypton', 'Rubidium', 'Strontium', 'Yttrium', 'Zirconium', 'Niobium', 'Molybdenum', 'Technetium', 'Ruthenium', 'Rhodium', 'Palladium', 'Silver', 'Cadmium', 'Indium', 'Tin', 'Antimony', 'Tellurium', 'Iodine', 'Xenon', 'Caesium', 'Barium', 'Lanthanum', 'Cerium', 'Praseodymium', 'Neodymium', 'Promethium', 'Samarium', 'Europium', 'Gadolinium', 'Terbium', 'Dysprosium', 'Holmium', 'Erbium', 'Thulium', 'Ytterbium', 'Lutetium', 'Hafnium', 'Tantalum', 'Tungsten', 'Rhenium', 'Osmium', 'Iridium', 'Platinum', 'Gold', 'Mercury', 'Thallium', 'Lead', 'Bismuth', 'Polonium', 'Astatine', 'Radon', 'Francium', 'Radium', 'Actinium', 'Thorium', 'Protactinium', 'Uranium', 'Neptunium', 'Plutonium', 'Americium', 'Curium', 'Berkelium', 'Californium', 'Einsteinium', 'Fermium', 'Mendelevium', 'Nobelium', 'Lawrencium', 'Rutherfordium', 'Dubnium', 'Seaborgium', 'Bohrium', 'Hassium', 'Meitnerium', 'Darmstadtium', 'Roentgenium', 'Copernicium', 'Nihonium', 'Flerovium', 'Moscovium', 'Livermorium', 'Tennessine', 'Oganesson');

	// initialize unique element spawn probability "weights" for this solar system
	$element_weights = array();
	$number_of_elements = count($chemical_elements); // count the elements
	for($i = 0; $i < $number_of_elements; $i++){
		array_push($element_weights, mt_rand(0, $number_of_elements));
	// combine the element names as keys and the weights as values
	$chemical_elements = array_combine($chemical_elements, $element_weights);


This code generates the elements for a protoplanet based on the probability distribution (weights) for this unique solar system (not all systems will have the same amount of elements):

$body_elements = array();
	if(isset($_POST['enable-elemental-simulation']) && $_POST['enable-elemental-simulation'] == true){
		// Add Elements
		$number_of_elements_to_spawn = mt_rand(10,15);
		for($elem = 0; $elem < $number_of_elements_to_spawn; $elem++){

			//select an element
			$select_element = mt_rand(1,array_sum($chemical_elements));

			// Find the selected element
			$num = 0;
			foreach($chemical_elements as $value=>$weight){
				if(($num += $weight) >= $select_element){
					//echo "$weight $value" . PHP_EOL;
					// push element onto the orbital body
					array_push($body_elements, $value);

And that’s it for today!

You can find the updated code for this project over on my GitHub profile.

Please Like, Comment below & Share this post with your friends and followers on social media.

This post was made possible by the generous contributions of my sponsors on Patreon.

As always, have a great weekend and I will see you all in my next post!

Much Love,



Create a free website or blog at

Up ↑

%d bloggers like this: