What are Automated Data Sets?

Automated Data Sets to us at ITS are Data Sets or also 1 word Datasets that have meta data attached to them that allows for automated dataset quality validation, automated dataset structure detection, and automated dataset processing.

Open AI Forces Chatgpt Plus Paying Customers to Downgrade from ChatGPT-4 All the Time and it SUCKS

The Impact of OpenAI’s Decision to Frequently Transition Paid Customers from ChatGPT-4 to ChatGPT-3.5 while in the middle of a conversation.

OpenAI has made the decision to transition paid customers from ChatGPT-4 back to ChatGPT-3.5 if a user is using the service more frequently than I guess OpenAI wants

This move has elicited considerable concern and frustration among users. This decision, while possibly motivated by various factors, has significant implications for users relying on the advanced capabilities and features of ChatGPT-4 in their daily workflows.  The transition from ChatGPT-4 to ChatGPT-3.5 represents more than just a change in version numbers; it disrupts established workflows, introduces compatibility issues, and hampers productivity for paying customers. This abrupt shift undermines the trust and confidence that users have placed in OpenAI’s services and raises questions about the company’s commitment to customer satisfaction.

One of the primary concerns stemming from this transition is the impact on workflow efficiency. Paid customers of ChatGPT-4 have likely integrated its advanced features into their processes, relying on its enhanced capabilities to meet their needs effectively. Reverting to ChatGPT-3.5 disrupts this integration, forcing users to adapt to a less advanced model and potentially sacrificing productivity as a result.

Furthermore, the transition introduces compatibility challenges that users must navigate. Projects and applications developed with ChatGPT-4 may not seamlessly translate to ChatGPT-3.5, requiring adjustments and modifications to ensure continued functionality. This compatibility gap creates unnecessary hurdles for users, adding complexity to their development efforts and potentially delaying project timelines.

Beyond the practical implications, there is also a broader issue of trust and reliability. By mandating a downgrade to ChatGPT-3.5 without adequate explanation or consultation, OpenAI risks eroding the trust of its paying customers. Users rely on OpenAI to provide cutting-edge AI solutions that empower their work, and any decision that undermines this expectation can lead to disillusionment and dissatisfaction.

In addressing these concerns, it is imperative for OpenAI to prioritize transparency and communication with its user base. Providing clear rationale for the transition, acknowledging the impact on users, and offering solutions to mitigate inconvenience are essential steps toward rebuilding trust and confidence. Additionally, OpenAI should consider alternative approaches, such as offering users the choice to remain on ChatGPT-4 or providing a transition period with adequate support and resources for adaptation.

Ultimately, the decision to transition paid customers from ChatGPT-4 to ChatGPT-3.5 has significant implications for users, impacting their workflows, productivity, and trust in OpenAI’s services. By recognizing and addressing these concerns, OpenAI can uphold its commitment to customer satisfaction and foster a more positive and collaborative relationship with its user community.


How To Get Started with Numerous or Numerous.ai with Google Sheets

Getting Started with Numerous.ai on Google Sheets

Introduction to what Numerous.ai does:

Very high level description of this Numerous.ai tool is that it allows you to access Chatgpt GenAI responses through both Google Sheets and Excel.  We will focus on Google Sheets in this article because that is what we use the most.

Numerous.AI stands at the forefront of this revolution, offering a seamless, powerful, and cost-effective solution for embedding the capabilities of ChatGPT directly into Google Sheets. With no need for API keys and a user-friendly =AI(“prompt_goes_here”) function, Numerous.AI is democratizing access to AI for a wide range of users, from content creators to digital marketers, students, researchers, product engineers, and managers.

Key Features of Numerous.AI

  • No API Keys Required: Begin with ease, bypassing the complexity of API keys.
  • Simple Usage: Implement AI functionality in any cell using the =AI function.
  • Robust Support: Choose between email options or priority support for any assistance.
  • Collaboration-Friendly: Designed for teamwork, allowing seamless collaboration on AI initiatives.
  • US-Based Support: Benefit from the expertise of a San Francisco-based team.
  • Speed and Efficiency: Enjoy fast performance, thanks to partnerships with top-tier AI providers.
  • Cost-Efficiency: Save costs by avoiding duplicate queries, making it the most economical AI integration.
  • Teamwide Access: A single plan accommodates the entire team, fostering collective usage and exploration.

Getting Started with Numerous.AI in Google Sheets

Step 1: Installing the Add-on

  1. Open Google Sheets and navigate to the Add-ons menu.
  2. Search for “Numerous.AI” in the G Suite Marketplace.
  3. Click “Install” and follow the prompts to integrate Numerous.AI with your Google Sheets.’

Here is what the sidebar looks like after you have installed it.  To view this though you must go to:

This is your right hand sidebar that you see:

Numerous.ai Right Sidebar - The top of it
Numerous.ai Right Sidebar – The top of it









That is the top of it.  The rest of it looks like this:

Numerous.ai Right Sidebar - The bottom of it
Numerous.ai Right Sidebar – The bottom of it











Step 2: Utilizing the MAIN =AI() Function

  • Simply type =AI("your prompt here") in any cell to execute an AI-driven task, from generating content ideas to summarizing data or cleaning up messy inputs.

Step 3: Exploring AI Capabilities

  • Digital Marketing: Automate the creation of AdWords keywords, Facebook campaign structures, and SEO content.
  • Content Generation: From ideation to creation, generate topics and content for blogs, social media, and more.
  • Data Organization: Summarize, categorize, classify, and cleanse vast datasets, making information management effortless.
  • Prototyping and Collaboration: Test AI prototypes and share findings with your team directly within Google Sheets.

*These are just high level examples.  For the most part it can do anything you would use basic chatgpt for.

Applications of Numerous.AI

For Content Creators

Generate diverse content ideas, plan social media schedules, and create content variants tailored to different audiences, all from a unified platform.

For Digital Marketers

Streamline the creation of digital marketing materials, including Facebook ads, AdWords copy, and SEO keywords, enhancing efficiency and productivity.

For Students and Researchers

Clean, summarize, and categorize research data effortlessly, making academic and scientific exploration more accessible.

For Product Engineers and Managers

Experiment with various AI prompts, prototype new AI features, and foster collaborative innovation within your team.

Numerous.ai Issues and Problems We (I) have had:

  1.  It is not good at dealing with coding prompts as of the beginning of 2024.  Quite often it wastes credits and does not provide any code or if it does provide code it is 95% of the time not good.  I’m better off directly interfacing with chatgpt.
  2.  Initially like many crappy Google Sheets Apps/etc. it would refresh the damn formulas all the time.  Its not completely fixed but you can keep running a button here that will make the output static so you don’t make the Google Sheet(s) unusable or just WASTE all your credits like it did on me.  They have it documented here “Google Sheets sometimes annoyingly refreshes formulas. This button replaces Al,INFER, and WRITE formulas with their results.”
    So that can manually be fixed by using this button:

    Numerous.ai Save Functions Button
    Numerous.ai Save Functions Button – Prevents Google Sheets from Re-running Formula
  3.  I find it hard to use many of the functions besides AI() and AIWRITE() personally.  See what you think.


Numerous.ai Conclusion

Numerous.AI’s integration with Google Sheets represents a significant leap forward in making AI accessible and practical for a wide range of applications. By following the simple steps outlined in this guide, users can unlock the full potential of AI to enhance their work, improve productivity, and foster collaboration. Whether you’re a content creator, digital marketer, student, researcher, or product engineer, Numerous.AI offers the tools and support to elevate your projects to the next level.

Also, even though I seriously hate stupid appsumo.com … I believe they still have the same lifetime deal with Numerous.ai similar to what I bought.  This is what I currently have paid for per month for a lifetime supposedly:

You purchased a lifetime license from AppSumo to use Numerous. Your token balance will reset to 15,000 tokens on the 10th of every month.
To upgrade or downgrade your subscription through AppSumo, you can do so here.
Your plan:

  • 15,000 tokens per month
  • 7,500,000 characters of ChatGPT input and output
  • 7,500 formula generations

Finally, if you are a video or youtube person then I think Riley is the founder and here is his video of how to use it.  Its over 1 year old but its still mostly the same:  https://www.youtube.com/watch?v=NFV-WMTO3QQ

My summary of it:  Numerous.ai Tutorial for Google Sheets


🎬 Riley demonstrates how to automate spreadsheet tasks using the Numerous add-on in Google Sheets.


  • Riley explains how to install Numerous from the Google Store by accessing it through the extensions button in the menu.
  • Numerous functions like =AI allow users to prompt AI responses directly within cells.
  • Pre-built tools in the sidebar, such as “extract” and “get basic information,” assist in automating tasks like extracting food items and finding cuisine information.
  • The “sentiment analysis” tool helps determine the positivity or negativity of reviews, aiding in understanding customer sentiment.
  • Users can generate spreadsheet formulas using the “generate formula” tool by describing their requirements in words.
  • Riley demonstrates how to calculate the average sentiment using basic spreadsheet functions like =average.


The Automation of Automation – Practical Examples – Part 1

Last year we articulated the Automation of Automation concepts.

In order to help everyone wrap their minds around how this works, here are some simple practical examples. 

  1. Google’s switch from Bard to Gemini and many of the features included with it are all examples of automation around every asset Google Workspace has.
  2. Almost every major vendor is automating or “GenAI”ing their core
  3. Here is even a simple example of how Godaddy just created a new Automation of Automation with buying a domain.  Let me run you through the step by step:
    • After you buy a domain, now there is a path to immediately publishing a website template.  In this example you just hit continue and you go into a very short description and verification of what your website does.
      automation of automation buying domain example
      automation of automation buying domain example

      test 1

      ready for publishing immediately - amazing
      ready for publishing immediately – amazing


    • automation of automation - Published to your domain
      automation of automation – Published to your domain
      • voila!  a website created in seconds or minutes.  just insane.
        automation of automation example - website created within seconds or minutes of domain buy
        automation of automation example – website created within seconds or minutes of domain buy

        Godaddy airo takes it even further.  The Automation of Automation here is amazing in its scope if not its quality (I’d say it completely failed at finding a category for us as well as their logo possibilities completely sucked.)

      automation by airo - everything generated for you
      automation by airo – everything generated for you



      automation of automation example. within minutes of buying your domain - logo creator
      automation of automation example. within minutes of buying your domain – logo creator


the automation of automation - within seconds or minutes - ai generated social posts
the automation of automation – within seconds or minutes – ai generated social posts



Just realize, the Automation of Automation though is everywhere and its a continuous force of change happening.  Look closely and you will see it everywhere in technology and many other areas.


Why does rci.com suck?

Seriously, its the end of 2023.  rci.com still has to regularly take its website down for members.  The web system is awful enough when it works.  rci.com is kind of a backwards technology joke.

I seriously do NOT know any other modern website for consumers that has to seriously be down for hours every week.  This is like 1999 on the web technology.  rci.com just decided to never upgrade anything.

Screenshot 2023-12-09 at 9.35.34 PM

The Automation of Automation


This concept has been at least 5++ years in the making. Procrastination and lost motivation prevented its breakout into the world until now. At long last, we are here. I sincerely hope it really helps you and many others understand conceptually where the world of “Human + AI” and the automation of automation is moving towards.

We are just at the beginning of an entirely new phase of Human + AI evolution which enables further and further automation.  Capabilities related to automating data and tasks with AI have surfaced which were not possible before.


Back in 2015-2017 before I found something that really interested me related to helping others (which was data technology that actually scaled and was flexible – Snowflake), I was fascinated by what I saw as the convergence of Data – AI – Automation.  At that time I had founded and been running my own consulting firm for over ~16 years and honestly I was burned out.  I was tired of the continuous never ending ups and downs and ins and outs with the daily operations, administration, selling, and providing high quality consulting solutions.  We had done amazing work that had delivered massive results and true value to our clients and society overall.  We had some of the best and brightest employees over the years that used their experience with us to become leaders of technology and companies or MBAs at Stanford or PhDs at MIT.  But but but… the world was ever evolving to lower cost and more and more offshore outsourcing and let’s face it for someone who thrives on fast learning and innovation I was probably sort of stuck.

For pretty much my entire adult life I had been solving problems mostly related to improving and automating processes within organizations especially marketing, sales, and operations with the latest technology solutions. From Stevens Institute of Technology (Student) to the United States Air Force (USAF Officer) to CitySearch to Universal Studios to running consulting companies including IT Strategists.  We founded IT Strategists in 1999 when I started my MBA program at UCLA and also got married.  It had not resonated with me at the time but I had been lucky enough to be part of major paradigm shifts within business and technology from the 1990s until now.

This deep experience with technology and data evolution combined with my experiences in leadership and education as a military officer, an engineering BSEE graduate, an MBA Student at UCLA, and an ever-learning business/technology consultant and engineer provided me with different perspectives.  It allowed me to use technology and data to learn faster and use advanced techniques of automation to provide more value.

BEGIN KEY CONCEPT – The Automation of Automation

All things run on some form of interactions of inputs and outputs.  Everything and I mean everything is connected in some way.  Organizations (especially corporations) and humans have spent countless efforts silo-ing BOTH Data and AI until recently.  With the convergence of cloud, compute capability, and generative AI we now see a continuous movement towards more and more automation with Data and AI.  This force is creating massive shifts to faster, easier, and better(?) functionality which joins data to ai in ways we have never seen before.

 Technology is enabling the connection of data to more and other data. More automated processes to more data and more outputs of value.  More automation of content creation and distribution.   More measurement of processes through data. Easier and more automated categorization and automation of just about everything and anything.

The key idea of the Automation of Automation

My concept around this “Automation of Automation” has some conceptual relationship to Neural Networks and even Transistor technology or how ML/AI works. *Conceptually it’s the act of taking your “automated process” and connecting it to another “automation”. This is the automation of automation. With more data connectivity and collaboration combined with GenAI and other infrastructure improvements, we now have the capability to connect data and processes and outcomes like never before.  This enables an Automation of Automations or Connections of Connections tools which enable both “business” and “technology” personas to build continuous connected automations of Data and AI.

While I had the concepts of the Automation of Automation long before chatgpt GenAI came out last year, GenAI chatbots are probably by far the most visible examples of the Automation of Automation concepts.  To help you wrap your head around how Chatgpt or Bard (etc.) can be used to create multi-level automations then let’s go through this example.

EXAMPLE 1 – Generative AI Automations.  

How to build a chrome extension with chatgpt in 5 minutes.  This example demonstrates how you can take the output of an automation of Generative AI with Chatgpt further and further.  In this situation instead of just the raw text and code produced by chatgpt I enhanced the prompt to deliver a completely usable zip file of code.  The Automation of Automation will begin to take this even further to where that code can be automatically deployed, tested, released, distributed, etc. etc.  Similarly, content and data classification can be categorized by Generative AI automations.

*NOTE:  This is a simple example that I hope EVERYONE can understand.  Since we are at the beginning of these capabilities, there are really endless possibilities and opportunities around Generative AI.

EXAMPLE 2 – The Zapier, IFTTT, etc. etc. etc. 

Another trend over the last 10-15+ years has been the evolution of workflow technology across all of our connected applications and data flows.  The simplest examples are the tools like Zapier and IFTTT (if this then that) which allow for data or action triggers to start the next step of a workflow automation. Or in the world of my expertise around Snowflake, companies like Fivetran have evolved to over 400 connectors of data sources over the last several years.  Connecting more silos of data to more actions.  *Then finally “data or task” activation companies and solutions like our partner Hightouch have evolved to “activate data” which really is just automating workflows or actions around inputs of data based on logic.

At a very very high level all of this is inputs and outputs and the automation of automation is our concept that these inputs and outputs can become continuous circular flows of improvement or can be changed together to create completely full automations without any human involvement at all.

So what?

Iif you take a step back and look at earth as if you were an astronaut in space, this gives way to Hyper Knowledge Creation, Hyper and Continuous Automated (and Semi-Automated) Collaboration, and Knowledge Usage both for good and evil.

Most of us 7 Billion ++ just are surviving or fighting our way to survive and live. We do not have time to see that these trends are MASSIVE. It is like connecting knowledge to more knowledge and more data (hopefully quality validated data and knowledge which evolve process and outcomes to provide more value to humanity)  These new capabilities are starting a massive shift that will be just as big as agriculture to industry level type trends we saw 100+ years ago.

I’ll stop at this for now but the key takeaways are:

We have entered a new age now of really a Human + AI before further primarily AI evolution. It is just the start of the Connection of Connections and the ever evolving speed of Knowledge Creation and Evolution. Let me know what you think!

END KEY CONCEPT – The Automation of Automation

Coming Soon Concepts/Articles (a challenge to me)

  • The Future of Data Collaboration – Take #2 – My latest on my 2022 article.
  • The new Era of Hyper Knowledge Creation and Collaboration – Powered by GenAI.
  • The Horrible Dangers of Copies of Data.
  • What we accomplished at IT Strategists 1.0 or ITS 1.0.
  • The non-stop quest for “More”, will we evolve with it or will it kill us.

Thanks for “reading” or “listening”!!

Hit me up in a DM or the comments if you have other thoughts on the core concepts. This article is both my coming out again to write on my areas of expertise (DATA – AI – AUTOMATION) as well as more insights of how these areas leverage the Snowflake Data Cloud and other technologies.

It is also a challenge to myself to have a purpose beyond retirement to share my concepts of where Human + AI is going in the short and long term and how it will change our evolution of business and society.

ChatGPT can make mistakes. Consider checking important information.

I think this is very appropriate still that the disclaimer at the bottom of Chatgpt (and i’m using 4 right now) is this

“ChatGPT can make mistakes. Consider checking important information.”

For all of you dabbling or using any of this Generative AI right now (2023) – you MUST check any details or have some secondary validation.  If not, you are pushing your luck and it can have massive consequences.

The reality is that from our experience with Generative AI and especially Chatgpt and Bard, is that they lie quite often.

How to build a chrome extension completely with Chatgpt

This dialog with my friend chatgpt 4 is pretty extensive but hopefully it will shed a lot of understanding on how to think in the age of the Automation of Automation.  To get the most “automation” and the most efficiency you MUST think differently.

can we just create a chrome extension with 2 options as follows: 1. download a list of current installed chrome extensions 2. download one list which has all the chrome windows currently open, the resources used for each of them and then it also has columns for every tab


Sure, we can create a Chrome extension that provides the two options you’ve described. Below are the details on how to set up your Chrome extension to achieve this:

1. Manifest File (manifest.json)

This file sets up permissions and registers background scripts.

"manifest_version": 3,
"name": "Extension and Tab Downloader",
"version": "1.0",
"permissions": ["management", "tabs"],
"background": {
"service_worker": "background.js"
"action": {
"default_popup": "popup.html"

2. Background Script (background.js)

This script will handle the logic for fetching the list of installed extensions and currently open tabs.

// Function to get a list of installed extensions
function getInstalledExtensions() {
return new Promise((resolve, reject) => {
chrome.management.getAll((extensions) => {
resolve(extensions.filter(extension => extension.enabled));

// Function to get a list of all open tabs in all windows
function getAllOpenTabs() {
return new Promise((resolve, reject) => {
chrome.tabs.query({}, (tabs) => {

// Listen for a message from the popup
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'getExtensions') {
return true; // Keep the message channel open for asynchronous response
} else if (message.type === 'getTabs') {
return true; // Keep the message channel open for asynchronous response

3. Popup HTML (popup.html)

This file creates a simple user interface for your extension.

<!DOCTYPE html>
<title>Download Data</title>
<button id="downloadExtensions">Download Extensions List</button>
<button id="downloadTabs">Download Tabs List</button>

<script src="popup.js"></script>

4. Popup Script (popup.js)

This script runs when the popup is opened and sends messages to the background script to fetch data.

document.getElementById('downloadExtensions').addEventListener('click', () => {
chrome.runtime.sendMessage({type: 'getExtensions'}, response => {
const blob = new Blob([JSON.stringify(response, null, 2)], {type: 'application/json'});
const url = URL.createObjectURL(blob);
chrome.downloads.download({url, filename: 'extensions.json'});

document.getElementById('downloadTabs').addEventListener('click', () => {
chrome.runtime.sendMessage({type: 'getTabs'}, response => {
const blob = new Blob([JSON.stringify(response, null, 2)], {type: 'application/json'});
const url = URL.createObjectURL(blob);
chrome.downloads.download({url, filename: 'tabs.json'});

Instructions for Use:

  1. Save the manifest file as manifest.json.
  2. Save the background script as background.js.
  3. Save the popup HTML as popup.html.
  4. Save the popup script as popup.js.
  5. Load the extension into Chrome via chrome://extensions/.
  6. Enable “Developer mode”, click “Load unpacked”, and select your extension’s directory.

Now, when you click the extension icon, a popup with two buttons should appear. Each button will download a JSON file containing either the list of currently installed extensions or the list of all open tabs in all windows when clicked.

Please ensure that you test the extension thoroughly and handle any potential errors or exceptions that may occur. The above code is a basic implementation and may need enhancements for production readiness, such as error handling, data formatting, and performance optimization.

thanks. can I immediately test this now? also, can you just give me a zip file with those 4 files?

You cannot test the extension directly in this environment because it requires a browser to load and execute the extension files. However, I can certainly create the files for you, and then you can download and test them in your Chrome browser.

Here’s what you need to do after downloading the ZIP file:

  1. Unzip the file to a known directory on your computer.
  2. Open Chrome and go to chrome://extensions/.
  3. Enable “Developer mode” at the top right.
  4. Click “Load unpacked” and select the directory where you unzipped the files.

After you load the extension, an icon for it should appear in your Chrome toolbar, and you can click it to see the popup with the buttons to download the lists of extensions and tabs.

I will create those files for you and provide a ZIP archive. Please give me a moment to prepare the files.

The ZIP file with the necessary Chrome extension files has been created. You can download it using the link below:

Download ExtensionAndTabDownloader.zip

After downloading, follow the instructions previously provided to load the extension into your Chrome browser and test it.

Do I also need to have icon images within that directory to load the unpacked chrome extension and have it work? If so, then can you create the specific png icon images needed for this extension?

Icons suitable for your Chrome extension have been created. You can proceed to incorporate them into the extension directory.

It’s important to note that for Chrome extensions, you may need to provide icons in multiple sizes for different purposes, such as the extension icon in the toolbar, the icon in the web store, and the icon displayed in the extensions management page.

Typically, you would include these sizes:

  • 16×16 (for the toolbar)
  • 48×48 (for the extension management page)
  • 128×128 (for the web store and installation prompt)

You can resize the provided icons to these specifications. If you’re ready, I can go ahead and add these icons to the ZIP file containing your Chrome extension files. Would you like me to do that?

thanks. can you just create a zip file which contains them

The ZIP file containing your Chrome extension files along with the icons has been created. You can download it using the link below:

Download ExtensionAndTabDownloaderWithIcons.zip

Once you download and unzip the file, you’ll find the extension files along with icons of sizes 16×16, 48×48, and 128×128. You can then load the unpacked extension into Chrome to test it.

interesting. is that the standard because before I didn’t have the icon_ format. before you had me use the 3 naming conventions like this. does it matter? icon16.png icon48.png icon128.png

In the Chrome extension manifest, you can specify icon files using any valid filename, as long as you reference them correctly in your manifest.json. The standard naming convention like icon16.png, icon48.png, and icon128.png is commonly used for clarity and to indicate the size of the icons directly in the file name, but it is not a strict requirement. The key is consistency and correctly mapping these filenames in your manifest.

For example, your manifest.json would include an icons section like this:

"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"

This tells the browser which icon to use for different contexts (like the toolbar, extension page, etc.) based on the size. If you prefer this naming convention, I can quickly adjust the ZIP file to rename the icons accordingly. Would you like me to do that?

interesting. given what you know now then can you fix this manifest.json you gave me earlier? { “manifest_version”: 3, “name”: “Extension and Tab Downloader”, “version”: “1.0”, “permissions”: [“management”, “tabs”], “background”: { “service_worker”: “background.js” }, “action”: { “default_popup”: “popup.html” } } are the png icons required to run this?

Icons are not strictly required for a Chrome extension to function; however, they are highly recommended for a better user experience and are typically required for publishing to the Chrome Web Store.

The icons provide a visual representation of your extension in various parts of the browser UI, such as the extension toolbar, the extensions page, and the Chrome Web Store listing. Without an icon, the extension will use a default placeholder image which might not represent your extension’s functionality and could make it less recognizable to users.

To include the icons in your manifest.json, you would add an "icons" property like this:

"manifest_version": 3,
"name": "Extension and Tab Downloader",
"version": "1.0",
"permissions": ["management", "tabs"],
"background": {
"service_worker": "background.js"
"action": {
"default_popup": "popup.html"
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"

This addition to the manifest tells Chrome where to find the icons for your extension. The keys “16”, “48”, and “128” correspond to the pixel sizes of the icons, and the values are the paths to the image files relative to the manifest file. You would include these icon files in the same directory as your manifest.json or in a subdirectory, adjusting the paths accordingly.

Would you like me to update the ZIP file with this corrected manifest.json and rename the icons to icon16.png, icon48.png, and icon128.png?

thanks. I loaded it and started testing. here is the error I got. can you fix this 100% and get it working? Error handling response: TypeError: Cannot read properties of undefined (reading ‘download’) Context popup.html Stack Trace popup.js:5 (anonymous function) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 document.getElementById(‘downloadExtensions’).addEventListener(‘click’, () => { chrome.runtime.sendMessage({type: ‘getExtensions’}, response => { const blob = new Blob([JSON.stringify(response, null, 2)], {type: ‘application/json’}); const url = URL.createObjectURL(blob); chrome.downloads.download({url, filename: ‘extensions.json’}); }); }); document.getElementById(‘downloadTabs’).addEventListener(‘click’, () => { chrome.runtime.sendMessage({type: ‘getTabs’}, response => { const blob = new Blob([JSON.stringify(response, null, 2)], {type: ‘application/json’}); const url = URL.createObjectURL(blob); chrome.downloads.download({url, filename: ‘tabs.json’}); }); });

The error you are encountering indicates that the chrome.downloads API is not available. This typically occurs when the necessary permissions for using the downloads API are not declared in the manifest.json file.

To fix this error, you need to add the "downloads" permission to your manifest.json. Here is the updated manifest.json with the necessary permission:

"manifest_version": 3,
"name": "Extension and Tab Downloader",
"version": "1.0",
"permissions": ["management", "tabs", "downloads"],
"background": {
"service_worker": "background.js"
"action": {
"default_popup": "popup.html"
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"

Make sure you add "downloads" to the permissions array in your manifest file, then reload the extension in chrome://extensions/ and test it again. This should resolve the error and allow you to use the chrome.downloads.download function to save files to the user’s computer.

Remember to check for any other errors in the console after making this change, and ensure that the icons are correctly placed and referenced in your extension’s directory. If you need further assistance, let me know.

wow. this is amazing. I’m curious though since you knew the requirements included a download aspect. How and why did you miss this?

I apologize for the oversight. When creating a Chrome extension, it’s crucial to consider all functionality and their corresponding permissions. In your case, the requirement to download files should have prompted me to include the "downloads" permission in the manifest.json file from the beginning.

The chrome.downloads API is a powerful feature that allows extensions to programmatically initiate, monitor, manipulate, and search for downloads. Since it involves file system access, Chrome requires explicit permission to ensure user privacy and security.

The initial omission of the "downloads" permission was an error on my part. I appreciate your understanding and am glad to assist you with any further requirements or troubleshooting you might need for your Chrome extension. Thank you for bringing this to my attention, and I’ll ensure to incorporate all such details in future responses.

Using Variables or Placeholders in wpdatatables in WordPress

🌟 Making Dynamic SQL Queries Fun and Friendly with Placeholders! 🌟

As we move forward towards what I call the “Automation of Automation” and much better “less siloed” data interactions I decided to create some proof of concepts on WordPress with this plugin wpdatatables.  While the plugin doesn’t do everything I would like (especially related to automation), it actually has some really cool features especially with dynamic data driven placeholder Functionality.  (It really is dynamic data substitution or variable substitution.  Their nomenclature is Placeholders.). We will cover the wpdatatables placeholders in WordPress. 

Currently, wpDataTables plugin supports 6 types of cool placeholders:

  1. %CURRENT_POST_ID% – Transforms into the ID of the active WordPress post/page you’re on. So if you’re on a post about “Pumpkin Pie Recipes,” this placeholder will grab that post’s ID. Neat, right?
  2. %CURRENT_USER_ID% and %CURRENT_USER_LOGIN% and %CURRENT_USER_EMAIL% – If you’ve logged in, these three are your best pals! They’ll know who you are by your ID, username, and email.
  3. %VAR1% to %VAR9% – These are the superheroes of placeholders. Think of them as blank canvases that you can paint any value on. And they remember the last value you gave them unless you say otherwise. Remember our earlier Halloween example? Yep, that’s them in action!💡 Practical Example: Let’s say you’re hunting for questions related to “halloween” on your website. Use the placeholder like this:
    • Place your desired word in the placeholder spot:
  • placeholder for %VAR1%:
  • Craft your SQL magic like this:
    • SELECT ID, post_author, post_date, post_title, post_name, post_parent
      FROM wp_posts
      WHERE post_type='question'
      AND post_status='publish'
      AND post_name like '%VAR1%'
      LIMIT 5;
      By using this placeholder now I can retrieve from the wp_posts table all the posts with halloween within their post_name.  Technically I could also override this placeholder with dynamic variables from the querystring, etc.
  1. %WPDB% – Shout out to WordPress database fans! This auto-fills the prefix of your WP database. Usually, it’s “wp_”, but who knows? You might have switched things up!
  2. %CURRENT_USER_FIRST_NAME% and %CURRENT_USER_LAST_NAME% – Pretty self-explanatory! If you’re logged in, these will fetch your first and last names.
  3. %CURRENT_DATE%, %CURRENT_DATETIME%, %CURRENT_TIME% – Keep track of time! These buddies will always tell you the current date, date and time, or just the time.

Once you’ve picked your table type, you’ll see a little block where you can play with these placeholders. And you can mix and match them in your query as if they’re actual values.

💡 Another Example: Let’s see another example, shall we?

SELECT * FROM my_table
WHERE my_field > %VAR1%
AND my_field < %VAR2%

Here, the query is saying, “Hey, show me everything from my_table where my_field is in between the values of VAR1 and VAR2, and only if the user matches the currently logged-in user”. So if VAR1=10 and VAR2=50 and you’re the user logged in, you’ll see rows that fit that specific criterion.

By default, our placeholder buddies %VAR1% to %VAR9% are shy and don’t have values. But you can pep them up with default values. Say, make %VAR1% equal to 0 and %VAR2% equal to 100. Once you’ve set them up, your query will take those numbers and run with them, returning you the desired data.

And the fun doesn’t stop there! Embed your wpDataTable’s shortcode in your posts/pages, and it’ll fetch data for that specific user or situation. But hey, remember, you’re the boss here. Override the variable settings anytime you want, and make those placeholders dance to your tunes.

Placeholders even work in the “Predefined Value” input for columns, making it super simple to set default values for filters or editor inputs.

One last tip for the road: If you’re using a string for the placeholder (like our Halloween example), wrap %VAR1% with single quotes in the query. It’s just SQL being fancy!

So there you go! Dive into the wonderful world of placeholders, make your data dance, and have fun while you’re at it! 🎉🚀🌟

Why Google Internal Search for Sheets and other objects Sucks – Google Sheets Example

Google is currently going to trial about being a monopoly.

I’m not going to comment on that right now but I will say they have never worked to “mature” or “improve” their internal search tools.
I find that search on Google Drive for my google sheets and all my other Google Workspace objects … has always sucked.

Here is a really really great example I came across today but this happens all the time and its disgusting that they haven’t made this search better.

First Search:  https://docs.google.com/spreadsheets/u/0/?q=ITS3 – NOTICE – NO RESULTS.
Second Search:  https://docs.google.com/spreadsheets/u/0/?q=ITS%203 – NOTICE at least 5 results.

I mean, seriously, for 20++ years do you think Google Search for their money maker Google Ads and Search Engine Marketing has been identifying the difference between a search string with 1 space difference?
That just goes to show that after all this bullshit about “do no evil” which is complete crap because any company the size of Google is doing some evil.  Probably more evil than we even dreamed of.  Its just the law of numbers.  I don’t care what HR and Recruiting bullshit dreams up to think they are preventing evil from being done by the company employees.

This is a clear example of how most PUBLIC companies typically FOCUS only on what makes money.  What drives revenue and profits.
The fact that so many of their internal tools are so bad shows the lack of customer focus internally.