Ever changing communication

There was a time (really, the past 15 years or so) where responding to things with an animated GIF was so perfect and encapsulated so much (e.g., if a picture is worth 1,000 words, what is a series of pixelated images moving a 8 frames per second worth?).

For example. see the rise of services like Giphy. I even have a random 10 year old project myself that involves animated GIFs!

Now though, it’s becoming generative AI all the way down.

For example, I just received a meeting invite that increases the frequency of meetings I’m having related to a certain project to… every single day.

Me: Hey, robot! Please create a meme image of a programmer jumping up on a desk and excitedly cheering “MOAR MEETINGS!”

Robot:

Now to figure out a way to send it in my place…

Hometown tidbits: The first modern hydroelectric plant

I’m currently reading California: An American History, by Jack Mack Faragher. There is an interesting historical tidbit that calls out the area where I grew up.

A robust economy pulled migrants to California. That had not always been the case. The economy had grown slowly in the last quarter of the nineteenth century, held back in part by the absence of coal deposits on the Pacific coast. In the 1890s, however, Californians began exploiting other forms of energy that would power a takeoff into sustained economic development.

They first harnessed the power of the water that coursed down the watercourses draining the state’s many mountain ranges. In 1893, utilizing technology developed for the mining industry, the first modern hydroelectric plant in the nation began operation on a fast-flowing creek near the southern California town of Redlands. Local orange growers needed a source of power that would enable them to pump water up into the hills, where they wanted to lay out more groves. The Redlands generating station became the model for dozens of others, many in the Sierra Nevada, designed to provide power for both domestic and industrial use.

Hey, that’s neat! I grew up on a property with a creek near the town of Redlands (and have even done a small bit of research on it back in the ‘ol university days).

I wonder… is it the same creek (or rather the bigger creek near this small creek I grew up on). To the Google machine!

Search: “redlands first hydroelectric plant

Yup!

Built by the Redlands Electric Light and Power Company, the Mill Creek hydroelectric generating plant began operating on 7 September 1893. This powerhouse was foremost in the use of three-phase alternating current power for commercial application and was influential in the widespread adoption of three-phase power throughout the United States.

[…]

The success of the 3-phase generators at the Mill Creek No. 1 was apparent, for these original generators were used until 1934. Although the original units have been replaced, this plant is still in operation to this day. Today, more than 100 years after Mill Creek’ completion. 3- phase generators are still the primary form of power generation around the world.

Hah, that is pretty cool! I distinctly remember this building from playing nearby and exploring the “wash” (as we called the area). You can see it via Google Street View, here, just to the north of Highway 38.

This is just one of the many wonders about this area.

See also:

DNS issues days after moving domain registrars

(Writing this for my future self and for future people that might have similiar problems)

Quite awhile ago, I made the decision to move all my domains from GoDaddy to a mix of Google Domains and Name.com. I enjoyed managing my domains through the Google interface and thought it was one of the better UIs available. It made things easy!

Sadly, like most beloved Google projects (RIP Google Reader), they decided to shut it down and transfer all domains to Squarespace. Well, I didn’t really want to use them. So, I decided to transfer many of my domains to Name.com.

The process to transfer was pretty easy. I figured I’d have to wait a day or two before I could see the changes.

One day goes by. Two days go by. Three days go by. It’s been four days and I’m still getting this when attempting to view my blog and a few other domains of mine from my home network.

What the heck is going on! If we check some domain propogation tools, I see that my site is pretty much unreachable throughout most of the world.

Interestingly, if I popped off my home network and used my phone, I could reach the site.

Okay! Now we’re getting somewhere. Sort of.

After much Googling, I found a post on the Cloudflare forums where someone had a similiar issue. The solution was that the “DNSSEC” settings were incorrect. I don’t use Cloudflare, but it seemed like something that was in the right direction.

2-3 days ago I changed the nameservers towards those of cloudflare, and since I cannot reach the website anymore. I’ve added all the DNS records that should be relevant. However in the dashboard it keeps saying pending nameserver update and the website can’t be reached. After 2-3 days still… The hosting company says that the NS points to those of cloudflare, and I’m at a loss at what I did wrong to make it go through cloudflare…and be able to be reached again. 

A solution to this issue stated:

Your domain’s DNSSEC setup is broken

Interesting. I hadn’t touched anything related to DNSSEC settings at all, as Name.com said it would auto import all settings during the transfer process. In fact, I couldn’t see anything related to DNSSEC management at all.

Oh, wait. It turns out, it’s waaaaaayyyy down at the bottom of the page when managing your domain!

Let’s see what happens if we click on it.

Oh! There is a value there:

Interestingly, there is an option to remove this entry. Let’s see what happens. I mean, the site is already broken and unreachable right. So, I click remove and wait a few minutes.

And then…

the websites are accessible again!

Wow. Lesson learned — double check everything when transferring domain registrars.

Implementing and testing a “poor man’s prompt expansion” model for Stable Diffusion

Various Stable Diffusion models massively benefit from verbose prompt descriptions that contain a variety of additional descriptors. Much recent research has gone into training text generation models for expanding existing Stable Diffusion prompts with relevant and context appropriate descriptors.

Since it isn’t feasible to run LLMs and text generation models inside most users’ web browsers at this time, I present my “Poor Man’s Prompt Expansion Model“. It uses a number of examples I’ve acquired from Fooocus and Hugging Face to generate completely random (and absolutely not context appropriate) prompt expansions.

(For those interested in following along at home, you can checkout the gist for this script on GitHub).

How does it work?

We iterate through a list of an absolute crap ton of prompt descriptors that I’ve sourced from other (smarter) systems that tokenize user prompts and attempt to come up with context appropriate responses. We’re not going to do that, because we’re going to go into full chaos mode:

  1. Iterate through a list of source material and split up everything separated by a comma.
  2. Add the resulting list to a new 1-dimensional array.
  3. Now, build a new descriptive prompt by looping through the list until we get a random string of descriptors that are between 175 and 220 characters long.
  4. Once that’s done, return the result to the user.
  5. Create a new prompt.

For our experiment, we’re going to lock all image generation parameters and seed, so we theoretically get the same image given the exact same parameters.

Ready?

Here is our base prompt and the result:

Happy penguins having a beer

Not bad! Now, let’s go full chaos mode with a new prompt using the above rules and check out the result:

Happy penguins having a beer, silent, 4K UHD image, 8k, professional photography, clouds, gold, dramatic light, cinematic lighting, creative, pretty, artstation, award winning, pure, trending on artstation, airbrush, cgsociety, glowing

That’s fun! (I’m not sure what the “silent” descriptor means, but hey!) Let’s try another:

Happy penguins having a beer, 8k, redshift, illuminated, clear, elegant, creative, black and white, masterpiece, great power, pinterest, photorealistic, award winning, vray, enchanted, complex, excellent composition, beautiful composition

I think we just created an advertisement for a new type of beverage! It nailed the “black and white”, though I’m not sure how that penguin turned into a bottle. What else can we make?

Happy penguins having a beer, volumetric lighting, Digital, intricate, awesome, futuristic, cartoon artstyle, vector, solid, detailed, dramatic light, realistic photograph, wonderful colors, dramatic atmosphere

The dude in the middle is planning on having a good night. Definitely some “wonderful colors”. Not so much realistic photo or vector, but fun! One last try:

Happy penguins having a beer, 35mm, surreal, amazing, Trending on Artstation HQ, matte painting hyperrealistic, full focus, very inspirational, pixta.jp, aesthetic, 8k, black and white, reflected on the matrix studio background, awesome

As you can see, you can get a wide variety of image styles by simply mixing a bunch of descriptive elements to an image prompt.

I’ve wanted to implement a feature like this on ArtBot for a long time. (Essentially, if the user allows it, automatically append these descriptions behind the scenes when an image is requested). Perhaps this will come soon.

Banned from Facebook Marketplace without a reason and without recourse

As much as technology improves our lives (and is integrated into literally everything we do), it really fucking sucks when the algorithm gets it wrong.

Earlier this summer, I posted a shop vac for sale, as I’ve done a number of times before (err, posting things for sale, not specifically shop vacs).

Soon after, I was banned for “violating community standards.” I have literally no idea what happened. But! Apparently you could appeal the decision if you felt it was incorrect.

So I did.

And was rejected.

So I appealed again.

And was rejected.

I appealed again. And now it looks like I am permanently banned from Facebook Marketplace. And there’s no way to appeal the decision. No way to contact customer support. Cool.

 

Anyway, here’s an image of Mark Zuckerberg wearing clown makeup, created using Stable Diffusion.

ArtBot mentioned again in PC World!

ArtBot got another callout in PC World in the article: “The best AI art generators: Bring your wildest dreams to life.”

Though a bit of (fair) criticism at the end of the blurb though:

Why use Artbot? The vast number of AI models, and the variance in style those images produce. Otherwise, generating images via Artbot can be a bit of a crapshoot, and you may expend a great number of kudos simply exploring all the options. Since there’s no real setup besides figuring out the API key, Stable Horde (Artbot) can be worth a try.

Hey, I’ll take it!

ArtBot written up in PC World!

Hah! This is pretty awesome. My nifty side project, ArtBot, has been written up in PC World as part of a larger article about Stable Horde (the open source backend that powers my web app):

Stable Horde has a few front-end interfaces to use to create AI art, but my preferred choice is ArtBot, which taps into the Horde. (There’s also a separate client interface, with either a Web version or downloadable software.)

Interestingly enough, ArtBot just passed 2,000,000 images generated!

Woe is Twitter…

To the tune of R.E.M’s “End of the World”:

“It’s the end of the (Twitter) as we know it, and I feel fiiiiiiinnnnneeee!” via… me.

I don’t have high hopes for the future of Twitter, pending Elon’s acquisition. It’s a service I’ve long loved, been frustrated with, but also found immense value in.

I’ve gotten jobs because of it, made new friends because of it, learned a lot because of it. Granted, it’s gotten much more toxic and I long for the days when it was fun.

But I don’t think having this service in control of a self-proclaimed internet troll who has lurched evermore rightward is going to improve things. Alas.

Punk Rock Obama

I think it’s time to end my AI art career on this high note. Generated with Stable Diffusion, running on my local machine.

The prompt:
“beautiful portrait painting of Barack Obama with a purple mohawk on top of his head shredding on an electric guitar at a punk rock show, concept art, makoto shinkai, takashi takeuchi, trending on artstation, 8k, very sharp, extremely detailed, volumetric, beautiful lighting, wet-on-wet”

Punk Rock Obama

MidJourney – AI Art Madness

A few short weeks ago, I had downloaded a simplified model for generating AI-created images on your local machine. The internet (myself included) had a lot of fun with it, but the quality was definitely lacking, especially when compared to the more serious AI image platforms being created by some big companies.

I recently received my invite to the MidJourney beta and I am just blown away!

For now, I’ve just been putting in ridiculous prompts that simulate styles for various artists (oh, man. I have a feeling this is going to piss off a lot of artists in the future…)

For example: “Apocalyptic wasteland with crumbling buildings and debris, thomas kinkade painting”

The potential here is pretty crazy — for people who aren’t artistically inclined, they can start generating images and scenes based on what they come up with. Some people can probably use this as a base to get to rapidly start iterating on new ideas. And of course, others are going to be mad.

A lot of the detail in creating these images is how you create the prompt. You’re already seeing the phrase “prompt engineering” being used in various places — check out this Twitter search.

For me though, I’m excited about this new technology and it’s something I’ve been eager to play with.

Generating art using AI

Earlier this year, OpenAI announced DALL-E 2, the latest version of their AI tool that can generate images by simply providing text input.

For example, “people in togas taking a selfie in front of a volcano”, and it will get to work attempting to create an image that includes all these elements.

The Verge has an interesting article with more details. You can see an example of what is possible on the DALL-E 2 subreddit. It’s honestly insane.

For now (sadly), the service is invite only.

More recently, an ambitious engineer named Boris Dayma created an open source version of the service called DALL-E mini. While it isn’t able to generate results as impressive as DALL-E 2, it’s still pretty crazy!

It’s recently taken the internet by storm and you can see people post DALLE-mini generated images and memes everywhere. The official website has been under heavy load, so it’s been pretty tough to try out the service.

Fortunately, you can download the model from Github and get the service setup on your local machine (providing you have a graphics card beefy enough to run the models).

Who has two thumbs and a graphics card just begging to be used? Hello.

I was able to get the service setup on my machine and start playing around with it.

In this example, I used a prompt to essentially create a Bob Ross painting generator. “Alpine forest with river running through the middle, snow capped peaks in the background, Bob Ross style painting.”

Dalle mini forest

Pretty neat! The images that services like DALL-E 2 and Midjourney can create are miles better and I’ve applied to both services.

While I anxiously await my acceptance, I’ll have to continue generating various memes on my own machine.

Monkeys

Book Review: Deep Work by Cal Newport

The pandemic forced a change in the way many knowledge workers work. Many of us have shifted to working from home — some roles are permanent.

I’m fortunate to be in such a position, but it’s been both a blessing and difficult to adjust to.

Distractions are frequent. From regular Zoom meetings, Slack messages and various alert notifications, to email. I think a number of people (myself included) are over compensating in our communication styles.

For software engineers, this causes a lot of context switching. And that’s generally a bad thing.

Context switching can lower productivity, increase fatigue, and, ultimately, lead to developer burnout. Switching tasks requires energy and each switch depletes mental focus needed for high cognitive performance. Over an entire workday, too many context switches can leave developers feeling exhausted and drained.

The impact of context switching lingers even after switching tasks. Cognitive function declines when the mind remains fixated on previous tasks, a phenomenon known as attention residue.

I’ve recently felt myself feeling drained and less productive that usual. While browsing a thread on Hacker News, a comment on Hacker News suggested that someone should read Deep Work by Cal Newport for ideas on how to regain focus and minimize distractions. It was the first I’d heard of that book.

It was pretty enlightening and I was pretty hooked!

It has a number of self-help style steps (that are somewhat obvious, in hindsight) that you can take to improve your situation and increase productivity (e.g., carve out set times when no one can bother you, like early in the morning or late at night, keep consistent times, set reasonable expectations and have a plan, don’t wing it).

But it also had shared some interesting research on how our brains have been rewired to have shorter attention spans, thanks to all our fancy pants technology.

“Once your brain has become accustomed to on-demand distraction, Nass discovered, it’s hard to shake the addiction even when you want to concentrate. To put this more concretely: If every moment of potential boredom in your life—say, having to wait five minutes in line or sit alone in a restaurant until a friend arrives—is relieved with a quick glance at your smartphone, then your brain has likely been rewired to a point where, like the “mental wrecks” in Nass’s research, it’s not ready for deep work—even if you regularly schedule time to practice this concentration.”

Yeah… guilty.

Anyway, definitely want to put some of these ideas into practice. It was a quick read and had some concrete steps on how to improve attention and focus that I can start using immediately. Excited to try it!

Deep Work by Cal Newport

Experimenting with parallel computing using node worker_threads

I’ve wanted to play around with worker threads in Node JS, so I put together this little repository that demonstrates how it all works. Check it out here.

In order to simulate multiple threads that are each processing data, each worker thread uses a randomly generated timeout between 100 to 700 milliseconds. In addition, it has a random number of loops (between 10 and 1000) that must be completed before the worker is terminated.

It’s kind of fun to watch the tasks run and automatically complete inside the terminal (check out the screenshot of the output up top).

Troubleshooting a (Royal) Kludge (RK G68): Sleep issues with my swanky new mechanical keyboard

TL;DR After a lot of testing and isolating devices, I’ve determined that the RK G68 RF receiver for my swanky new mechanical keyboard causes my Windows 10 machine to wake up immediately after putting it to sleep. And I’m not sure how to fix it.

Join me on an epic journey of heartbreak, anger, loss, triumph and sadness as I try to diagnose some sleep issues.

—-

So, the issue is that if I manually put my computer to sleep (Start Menu -> Power -> Sleep), the machine goes to sleep, fans turn off, and all that. Sweet! Then, after about 5 seconds, it wakes right back up. Uh, what?

I’ve done a number of debugging and testing steps which I’ll outline below (hopefully, this helps some folks in the future).

Let’s do a couple of finger stretches, put on our hacker pants, and open up PowerShell (with admin access). We can run a nifty command called powercfg /requests

I see the following output:

DISPLAY:
None.

SYSTEM:
None.

AWAYMODE:
None.

EXECUTION:
None.

PERFBOOST:
[DRIVER] Legacy Kernel Caller
Power Manager

ACTIVELOCKSCREEN:
None.

Great! But not really super helpful. We visit our friend, Google, and I see that there is a command to disable this:

powercfg -requestsoverride Driver "Legacy Kernel Caller" System

You haven’t lived until you’ve copy and pasted random commands from the Internet into your terminal. Let’s do it! I run that and make the computer go to sleep again. Monitor turns off, fans spool down. Yes! Yes?

Obviously, it immediately wakes up. No dice.

Ah, ha! Maybe read the command first, dude? The issue here is that the Legacy Kernel Caller is in the PERFBOOST category, not SYSTEM category. That’s easy to fix.

…but it isn’t.

Of course, you can’t actually disable the driver for items in the PERFBOOST category. Of course.

Hey, Google…

Next up: A suggestion to check waketimers. I have no idea what that is, but sure: powercfg -waketimers

There are no active wake timers in the system.

Okay.

Yo, Goooooooogle… again!

Ah, another command! powercfg -lastwake

Now we’re getting somewhere. We see that this is a USB device that is waking the computer:

Wake History Count - 1
Wake History [0]
  Wake Source Count - 1
  Wake Source [0]
    Type: Device
    Instance Path: USB\VID_25A7&PID_FA70\8&e5ec113&0&4
    Friendly Name:
    Description: USB Composite Device
    Manufacturer: (Standard USB Host Controller)

But… how do we determine what it is? Looking at the path, we see VID and PID. That means:

Vendor ID: 25A7
Product ID: FA70

Let’s Google those: It turns out, the vendor is Areson Technology Corp and it looks like they make RF receivers for various input devices, such as wireless mice. Interesting! No hits for the product ID. That’s fine, there’s probably more types of RF receivers on planet Earth than there are people.

But that gives me a starting point.

I decide to start unplugging various devices and put my computer to sleep.

  • Unplug Logitech USB receiver: Still wakes up.
  • Unplug Anker USB Bluetooth receiver / transmitter: Still wakes up. I feel like I’m not having much fun anymore.
  • Unplug this random, unlabeled RF receiver: Hey, my keyboard input stopped working from my mechanical keyboard! Ah well. Go to sleep computer…

IT DOESN’T WAKE BACK UP!!!!

Victory. Party dance. Switch out the hacker pants for party pants. Now we’re getting somewhere!

I plug the receiver back in and open device manager. I go to the keyboard section (randomly, there are like 4 different devices listed there). I open the properties dialog box for each of them, go to the Power Management tab and uncheck “Allow this device to wake the computer.

I got you now, pesky sleep problems! :blow-smoke-off-gun-gif-dot-com-dot-net:

I put the computer to sleep.

IT IMMEDIATELY WAKES BACK UP!

I’ll be honest. There was a lot of screaming, kicking, swearing. My dog got up and left the room (he never does that). I almost knocked over a coffee cup onto my keyboard and I DIDN’T CARE.

Okay, fine.

No big deal, really. I’m not okay, you’re okay.

On a hunch, I expand the Universal Serial Bus controllers section inside the device manager. Sure enough, there are a bunch of things that say USB Composite Device. You might remember from earlier (but probably not), that a “USB Composite Device” was called out using the --lastwake command.

If you open up the properties for each USB Composite Device and go to the events tab, you will see the device ID in the information section. Keep looking until you find the device ID that was called out: USB\VID_25A7&PID_FA70\8&e5ec113&0&4

Click. Close. Click. Close. Click. FOUND IT!

Device USB\VID_25A7&PID_FA70\8&e5ec113&0&4 was configured.

Driver Name: usb.inf
Class Guid: {36fc9e60-c465-11cf-8056-444553540000}
Driver Date: 06/21/2006
Driver Version: 10.0.19041.488
Driver Provider: Microsoft
Driver Section: Composite.Dev.NT
Driver Rank: 0xFF2003
Matching Device Id: USB\COMPOSITE
Outranked Drivers: 
Device Updated: false
Parent Device: USB\VID_0BDA&PID_5411\7&b8f002b&0&2.

Sweet, now to just open up the Power M…. THERE IS NO POWER MANAGEMENT TAB.

My dog came back. He immediately left again. You can probably guess why.

Back to Google again:

“Ensure drivers are updated”.

Okay. Sure. Blah, blah. But maybe it’ll work. It won’t though. I already know. Who am I kidding?

The best drivers for your device are already installed.

Fine. I’ll just uninstall the driver.

Oh, cool, now my keyboard doesn’t work.

BUT YOU KNOW WHAT?! MY COMPUTER STAYS ASLEEP!

Head, meet Desk. Desk, meet Head.

—-

A few other things to note.

    • If I have a USB-C cable plugged into the keyboard, it will stay asleep (even though the RF receiver is still plugged in).
    • If I turn off the keyboard itself, it will stay asleep.
    • If you just walk away from the computer, it will go to sleep (according to my power plan settings — 15 minutes). I suspect this is because the RK software (I’m on version 2, by the way, which I think just came out and the latest firmware) is setup to put the keyboard to sleep after about 5 minutes or so. I really haven’t tried to experiment with this because I DON’T CARE ANYMORE.

(I do care. Deeply. I just can’t right now.)

3 weeks of GOES-17 imagery: hurricanes, wildfires and more

I recently built a side project recently that automatically downloads GOES-17 imagery every 10 minutes and then compiles it into a video.

The result is pretty darn awesome! Here is 3 weeks of GOES-17 imagery sourced from NOAA / CIRA / RAMMB. The video begins the night of August 15th, 2020 as lightning storms rolled through Northern California and runs until the afternoon of September 10th, 2020.

Almost immediately, you begin to see smoke plumes from fires created due to lightning strikes.

Note: The blue and yellow blocks that you see periodically flash on screen are the result of corrupted image data downlinked from GOES-17. I’m not sure exactly what causes this, but these errors are present within the original images files hosted on NOAA’s CDN.

(Be sure to bump up the video quality — YouTube’s default compression really ruins the image)

We are all just algorithms…

I’ve long joked that “we’re all just algorithms in some engineer’s machine.”

But it’s kind of true.

I recently finished reading Homo Deus: A Brief History of Tomorrow by Yuval Noah Harari, which imagines what the lives of our children, grandchildren, and beyond will be like and how technology will affect them.

We generate copious amounts of data each day and give our personal electronic devices and social networks almost unfettered access to all of it. Everything from how long we sleep, how often we exercise, where we go each day to the types of songs, movies and books we like.

There was one passage from the book that I found both amazing and frightening:

A recent study commissioned by Google’s nemesis – Facebook – has indicated that already today the Facebook algorithm is a better judge of human personalities and dispositions than even people’s friends, parents and spouses. The study was conducted on 86,220 volunteers who have a Facebook account and who completed a hundred-item personality questionnaire.

The Facebook algorithm predicted the volunteers’ answers based on monitoring their Facebook Likes – which webpages, images and clips they tagged with the Like button. The more Likes, the more accurate the predictions. The algorithm’s predictions were compared with those of work colleagues, friends, family members and spouses.

Amazingly, the algorithm needed a set of only ten Likes in order to outperform the predictions of work colleagues. It needed seventy Likes to outperform friends, 150 Likes to outperform family members and 300 Likes to outperform spouses. In other words, if you happen to have clicked 300 Likes on your Facebook account, the Facebook algorithm can predict your opinions and desires better than your husband or wife!

This is one of the main reasons why both Google and Facebook have some of the largest (and most effective) advertising networks on the internet.

They fundamentally know who you are and what you like and know us better than we know ourselves.

Indeed, in some fields the Facebook algorithm did better than the person themself. Participants were asked to evaluate things such as their level of substance use or the size of their social networks. Their judgements were less accurate than those of the algorithm.

Excerpts from “Homo Deus: A Brief History of Tomorrow” by Yuval Noah Harari.