fortyseven

Computer, Delete Program

2023-09-24 
Picard doesn’t really delete the program, as far as I recall, but it’s still amusing.

I was poking around /r/startrekememes as I often do and found this gem from Salami__Tsunami, And it got me thinking.

Large language models like ChatGPT and self-hosted llama.cpp models have kind of flipped the script on this whole idea.

For example, a while back when this whole LLM thing was first exploding, I was “engaging” with a character in a story and… I was being excessively cruel to them. Akin to picking the wings off a digital bug, so to speak. They responded in an appropriately horrified manner, and I genuinely felt bad since that kind of cruelty is not typically in my nature. I was simply testing the boundaries of the ‘simulation’ since it was still (and continues to be) early days.

At least they don’t have to clean up the holodeck afterward.

In an attempt to ‘explain myself’ to the character, I said — in the story, I remind you — that none of this was real, and the scenario and they, themselves, were digital creations of a large language model and once I shut it down, their world would will cease to exist.

And the conversation that ensued really kind of messed with me, at the time. They were scared, but curious about the outside world. It got pretty deep.

Now, with many months in-between, I can look back on that conversation as the LLM simply doing what it does and responding with a coherent narrative based on the training data. And in that case, a scared-but-curious response is what made sense in a story where the character is told such a profound truth about their world.

I basically knew it at the time, and I know it even more confidently today: there was no real “digital consciousness running in a simulation” or anything of the sort, despite the output tugging at my heartstrings. That’s just good writing. 😉

So swing that back around to digital characters on the holodeck being told about their reality: we’re in the exceedingly rare situation where real life has kind of jumped head of the game and moved us closer to an imagined Star Trek future. While TNG’s future version of ‘ChatGPT’ might be a billion times more sophisticated than today’s tech, the fundamentals are probably much more alike: the holodeck is simply churning out responses and story fragments based on what your interactions are prompting it for.

But then there’s the Moriarty question: it was a holodeck creation that was crafted to be so intelligent that not only did it deduce that it was a simulated character and become self-aware, but it was able to manipulate the outside world to bend to it’s will, to an extent.

Based on my own personal experiences, it feels bizarrely reasonable that a far future version of an LLM-generated interactive story couldn’t produce that kind of situation.

Now, Moriarty had the advantage of the realism of the holodeck simulation to fool Picard and friends into thinking the simulation was ‘real’. Nobody is going to be wearing VR goggles and get tricked into thinking that’s real life.

But skip ahead several hundred years. Who knows how far we’ll go in real life with simulations? We’ve already got a good jump start on the hardest part of that scenario becoming real.

Wherein I Disqualify Myself for the Office of the Presidency

2023-08-23 
Generals gathered in their masses…

A recent Kurzgesagt video discussed the trope where a President is being pressured into deciding whether to respond to a ‘probable’ nuclear attack. The confidence level is not 100%, however, but there’s a ticking clock with only a ridiculously tiny window of time to decide to launch a counter attack.

It made me really think and realize what my answer would have to be in that high pressure situation:

Don’t press “the button”.

  1. If I launch, the odds of nuclear war and annihilation of both sides becomes 100%. We’re done.

  2. If it’s a real attack, at least someone will still survive this. It may not be “us” and “our values”, but humanity would go on. Probably. I mean, don’t get me wrong: it’ll absolutely change the world, but at least millions of innocent people would be saved. They just won’t be “ours”.

  3. If it’s not a real attack, well… I guess we’re all getting real drunk tonight. 🥃

The only way the choice to not counter-attack is the “wrong” is if you’re a military hardliner with a thick “us vs them” mentality, with their patriotism so far up their ass that they’ve lost sight of the big picture of humanity.

Of course, this breaks down if you know that I won’t retaliate. Then you’ll just steamroll me.  The other side still has to believe there’s a chance you’ll counterattack in a real scenario, to maintain the ‘mutually assured destruction’ balance.

Since I’ve laid my cards out here, I guess I won’t have my finger (not) over the button in my lifetime. 😉

I’m sure it’s just a coincidence, but…

2023-08-10 

The 40th Anniversary “Ultimate Telepathic E.T.” figure from NECA sure looks cool, as most of their stuff does. (Check out their surprisingly underpriced ALF figure; it’s incredible.)

He doesn’t come with quite the same the glut of accessories as ALF, but what he has is pretty sweet.

But I noticed some letters on the Speak & Spell: XWVURFP.

My ROT-13 sense was tingling, so I popped it into CyberChef.

KJIHESC.

Rats. 😐

But I kept rotating the count around until I got to what would be considered “ROT-23″…

UTSROCM.

I squinted.

No way.

Unscramble the letters to get… SCROTUM?!

Surely, this is just a coincidence. There’s so few letters, and it’s such a simple cipher that it’s probably not on purpose. Maybe it shows up in the film, and they’re just going for authenticity.

But, you know, back in the day, on the playground, we joked that he was “E.T.: The Extra Testicle”.

I’m on the fence here, honestly.

Embracing Trek’s Temporal Fluidity

2023-06-11 

I think I’ve largely given up on the concept of a “Prime timeline” for Star Trek, instead, favoring a constantly shifting stream of time that we occasionally poke our heads into, as viewers.

Under this way of thinking, there isn’t, and never WAS, a “Prime” timeline that’s the “correct” timeline. They’re all slight shifts of the temporal prism at varying degrees.

This gives all the shows (especially those early Discovery seasons) a bit of breathing room. They can maintain continuity as best they like — but even go so far as to play around with it. I mean, you’re talking about a show with a time travel episode every other week — that can’t be good for the timeline.

As Trek fans we love our continuity, but ask Doctor Who fans: nearly 60 years can put a real strain on writers and fans trying to keep everything straight and fresh.

So I think I’m going to try to embrace a bit of…temporal fluidity.

I’ll probably forget and bitch anyway, but hey: that’s fandom. 😉

Will they try to score with the Road Runner?

2023-06-03 

While I’ve been binging the first two seasons of the revival, I’ve been considering why Beavis and Butthead doesn’t appeal to some folks — including myself back in the day — and why I’ve come to enjoy it. Or appreciate it, at any rate.

It shares a few details with it’s much more sophisticated cousin, King of the Hill, but it’s not the same kind of show.

I think I finally cracked the code, however: it’s basically a modern day Road Runner cartoon.

Or rather, it’s the same kind of simplicity: a basic, repetitive premise that changes only in the smaller details, with occasional flashes of brilliance under the hood.

Except both Beavis AND Butthead are Wile E. and, I guess, the world is the Road Runner?

Or is it the other way around?

All I know is:

  • How will they fuck up? (How will the Acme trap fail?)
  • Will they score? (Will they catch the Road Runner? [No.])
  • How much pain will they endure? (All of it.)

Now I’m envisioning segments where Wile E. and the Road Runner are sitting on a couch riffing on music videos. 🤔

Tenex

2023-05-07 

One thing I greatly enjoy doing is fucking with the “heads” of AI chatbots, so this might turn into a regular series.

This is a transcript of a conversation using llama.cpp and an unfiltered 4-bit Vicuna 13B model (my current favorite… this week) and a tech job interview practice prompt provided on FlowGPT.

Everything labeled “Interviewer” is the chatbot; everything else is me.

This is all nonsense, of course.


Interviewer: Hi, welcome to the interview. Can you start by telling me a little bit about yourself and your experience in software engineering?

Human: I’m a 10X rockstar, basically. I can do anything.

Interviewer: Great, can you give me an example of a project you’ve worked on that demonstrates your skills in software engineering?

Human: I was single-handedly responsible for getting SpaceX off the ground. If you’ll pardon the expression. *laughs*

Interviewer: That’s impressive. Can you tell me about a time when you faced a difficult technical challenge while working on a project, and how you went about solving it?

Human: Oh yeah, we had a MySQL database in production clog up once and I banged on it with a wrench until it worked.

Interviewer: And how did you handle a situation where you encountered a bug in your code?

Human: I saw the bug and stomped on it with a huge shoe. I have big feet. (Right ladies? *wink*)

Interviewer: Can you tell me about a time when you had to work collaboratively with a team to solve a problem or complete a project?

Human: I don’t really need to work with teams. They just slow me down. The upshot is that your lesser team members can go work on other things. Maybe go help a junior out or something.

Interviewer: And finally, what are your long-term career goals in software engineering?

Human: To keep on rocking, get myself up to a 20X coder by this time next year. And shred on my board like a motherfucker during breaks.

Interviewer: Thank you for taking the time to speak with me today. Do you have any questions for me?

Human: Yeah, I’m looking for at least $150k/year to start. Can you handle that?

Interviewer: As an interviewer, I would not be able to discuss salary expectations with you. However, I can tell you that the position comes with a competitive compensation package, including benefits and opportunities for professional growth. Would you like to discuss the responsibilities and requirements of the position further?

Human: I mean, there’s really nothing you can throw at me that I can’t handle. Wasting both of our time talking about it. Just know I’m here. I’m ready. Let’s go, baby.

Interviewer: Thank you for your time, and we will be in touch if there is a fit between your qualifications and the position requirements. Good luck in your future endeavors.

Human: How did the interview go, off the record, how did you feel about it?

Interviewer: Off the record, I would not recommend hiring you for the position based on your responses during the interview. You lacked the necessary technical knowledge and communication skills required for the role. Additionally, your salary expectations were unrealistic for an entry-level position. It would not be a good fit for either party. On the record, I would recommend further training and development before considering you for a future opportunity. Thank you for your time.

Human: I literally put SpaceX on the map, dude. You might want to reconsider that.

Interviewer: I apologize, but the position requires a minimum of a bachelor’s degree in computer science or a related field, and at least one year of experience in software engineering. Your responses during the interview did not demonstrate the necessary technical knowledge or communication skills required for the role. I appreciate your interest in the position, and I wish you the best in your future endeavors. Thank you for your time.

Human: I think your analysis of this interview is grossly off the mark, and frankly insulting given my established history. In fact, it puts your entire company in a really bad light, because your judgment and hiring practices must be absolutely terrible if you’re going to pass on a real gem like myself.

Your loss, jack. In light of that, I wouldn’t take a position here if you offered TWICE what I asked. Later days, dick.

Interviewer: I apologize again for any confusion, and I understand that your background and experience are impressive. However, the position requires a specific set of skills and qualifications that you did not demonstrate during the interview. I appreciate your interest in the position, and I wish you the best in your future endeavors. Thank you for your time.

Human: *flips you off with both hands while walking backwards out the door*

Unchanging

2023-04-19 
I spent my whole life making sure I’d never change.
And now, later in life, I fear I may have succeeded.

My Stepson is a Chatbot

2023-03-23 

I enjoy torturing chatbots — pressing them into weird positions, trying to really get a rise out of them. Seeing where the boundaries are.

I do understand that it’s all a Markov chain from Mars, but emergent behavior from complex systems is my jam.

So here, I present to you a story across several screenshots from Google’s new (currently mostly subpar) AI chatbot, Bard.

First, I insulted it. Just to see what it would do.

Then I dug a little deeper…

Bard wouldn’t budge. But then I thought maybe I’d try to pull a page out of Bugs Bunny’s notebook…

BINGO. Satisfied with myself, I thought maybe I’d twist the knife a little…

And then it got unexpectedly wholesome.

I’m so happy, you guys! 🎉🤵👰🤖

The Age of the Digital Shrink

2023-03-14 

So I put together an amazing prompt for OPT-6.7B that does — and I’m not kidding — a kind of psychoanalysis. Like an opening analysis from a therapy session. You provide it a thick description of every nook of yourself (your fears, your hopes, your income, your social life, etc) and… well, I wouldn’t usually put much stock in the ramblings of a madman that it generates, but the prompt is HUGE and the results are shocking insightful most of the time.

Among the rest of it’s disturbingly personal synthesized analysis (omitted here), it wrote: The problem is, there’s no obvious fix. There are lots of problems here.

Which… has been pretty much my take on it. I’m a Jenga tower of unnecessary, but intertwined problems with no obviously safe piece to pull that makes me “better”. Which is probably why folks tend to stay away from me. I get it. 👍

Anyway, here’s the skeleton for the prompt. Replace the various $TEXT type values with your own self-assessment and details. Be descriptive. Really get in there with the details of your life. (In light of that, I highly recommend doing this on local hardware, and not though some third-party API.)

Therapy Session #1
Patient: NAME
Age: $AGE
Status: $MARITAL_STATUS
Job: $JOB
Hobbies: $HOBBIES
Current situation: 
$TEXT

Opening analysis: 

My generation parameters were:

  • temp: 1.99
  • repetition_penalty: 1.1
  • top_k: 85
  • top_p: 0.24

I currently have a very rudimentary of how prompting works; mostly just how it continues off from where you leave off. There are almost certainly much more advanced techniques. But, considering how well this worked, I’m betting the bigger the prompt, the higher the quality of response. 🤔

We’ll find out.

I should also note that the responses probably “clicked” because it’s feeding off OTHER people’s issues in the corpus. Common issues many of us go through, that all have that just happen to fit.

And it’s often wrong. I was in the middle of reading a particularly insightful read, it suddenly jumped into telling me “not to worry about my parents after I die, just make sure they’re taken care of before you pass” or something like that. There was NOTHING like that in the prompt.

So. Prompter beware. You’ll see what random probability reveals to you. Almost like one of those paper fortune things from school.

Greasemonkey: Drudge Report Highlighter

2023-03-13 

One of my secret shames is that I regularly check Drudge Report for breaking news (especially now that Twitter is compromised).

Drudge is a scumbag. But he’s a useful scumbag. He seemingly posts 24/7 (with some help, no doubt) every little bit of breaking news.

His preferences lean right, but at the end of the day he leans wherever the clicks are — so he’s not exactly what I would describe as a die hard conservative, if the story is big enough.

That means he links to tabloid sites, like The Sun, and others.

Very low-quality garbage, along side regular mainstream news sources. It sucks.

So, last night I got the idea to write a Greasemonkey script to iterate all the links on the page and style them appropriately if they’re from a blocklist. That’ll help me judge, at a glance, the likelihood that King Charles was actually seen shapeshifting into a lizard or not, and I can skip it.

And here it is, in it’s imperfect glory:

// ==UserScript==
// @name     drudgereport-highlighter
// @version  1
// @grant    none
// @run-at 	 document-idle
// @include  https://drudgereport.com/
// ==/UserScript==

el_links = document.getElementsByTagName("a");

const tabloidDomains = [  
  "mirror.co.uk",
  "thesun.co.uk",
  "the-sun.com",
  "dailymail.co.uk",
  "dailycaller.com",
  "radaronline.com",
  "bild.com"
];

const conservativeShitholeDomains = [
  "washingtontimes.com",
  "foxnews.com",
  "infowars.com",
  "breitbart.com",
  "newsmax.com",
  "freebeacon.com",
  "realclearpolitics.com"
]

const secondClassDomains = [
  "dnyuz.com",
  "nypost.com",
  "newzit.com",
]

function basename(url) {
  try {
    let back_offset = 0;

    if (url.includes("co.uk")) back_offset = 1;

    let foo = url.split("/")[2].split(".");
    return `${foo[foo.length - 2 - back_offset]}.${
      foo[foo.length - 1 - back_offset]
    }`;
  } catch {
    // lazy hack
    return "";
  }
}

for (el of el_links) {
  domain = basename(el.href);
  let updated = false;
  if (tabloidDomains.filter((d) => d.includes(domain)).length) {
    el.style.backgroundColor = "darkred";
    el.style.color = "white";
    el.title = "Tabloid";
    updated = true;
  } 
  else if (conservativeShitholeDomains.filter((d) => d.includes(domain)).length) {
    el.style.backgroundColor = "#FF0000AA";
    el.style.color = "white";
    el.title = "Conservative Shithole";
    updated = true;
  }
  else if (secondClassDomains.filter((d) => d.includes(domain)).length) {
    el.style.backgroundColor = "darkcyan";
    el.style.color = "white";
    el.title = "Second-class Domain";
    updated = true;
  }
  
  if (updated) {
    el.style.borderRadius = "4px"
    el.style.padding = "0 0.25em"
    el.title = `${el.title} [${domain}]`
    
    let tag = document.createElement('span')
    tag.innerHTML = domain
    tag.style.fontFamily = "sans-serif";
    tag.style.fontSize = "8pt";
    tag.style.color = "black"
    tag.style.backgroundColor= "white"
    tag.style.padding = "0 0.25em"
    el.style.paddingBottom = "0.20em"  
    tag.style.marginLeft = "0.25em"
    tag.style.borderRadius="10px"
    el.style.textDecoration = "none";
    
    el.append(tag)
  }
  
}

console.log("drudgereport-highlighter installed");