An Interesting Review of ChatGPT and Other AIs

I’ve written in the past about limitations of AI from a number of perspectives. In Effects of the Mistruths of Data on Model Output I discuss how the data fed to a model must necessary affect its output in a number of ways, including bias and other unwanted effects. Considering the Four Levels of Intelligence Management tells why it’s not possible for an AI to approach human intelligence today. In Fooling Facial Recognition Software I provide a detailed discussion of why it’s so easy to fool certain types of AI-powered applications. And you learn about why some types of occupations are reasonably safe from AI in Automation and the Future of Human Employment. However, I haven’t really done a detailed investigation of AIs like ChatGPT that seem almost human-like in their understanding, but fall remarkably short in many simple areas. On Artifice and Intelligence is one of the more detailed analysis I’ve found to date on the subject and what it reveals will surprise you. There are a lot of simple problems that ChatGPT and other Large Language Models (LLMs) can’t solve.

What I found interesting in the article is that the author, Shlomi Sher, was able to show that one area where an AI should be strong, math, actually isn’t all that strong at all. He talks about Euclid’s proofs. The artifice is that ChatGPT 4 and other AIs can tell you all about prime numbers and even provide seemingly creative output about them. However, depending on how you ask some basic questions, ChatGPT 4 either gets the answer wrong or right, when the answer is pretty much apparent to any human who knows what prime numbers are. What I liked most about the article is that the author takes time to explain why humans can understand the problem, but the AI can’t.

If it seems as if I have a continuing desire to dissuade others from anthropomorphizing AIs, I most certainly do. When it comes to AI, it’s all about the math and nothing more. However, that doesn’t mean that AIs lack functionality and ability as tools to augment human endeavors. It’s likely that the use of AIs will continue to increase over time. In addition, I think that as we better understand precisely how AIs work, we’ll also come to realize that they’re amazing tools, but most definitely not humans in the making. Let me know your thoughts on ChatGPT at [email protected].

Getting the Most from Your Technical Reading Experience

This is an update of a post that originally appeared on July 20, 2011.

There are many ways to work with books. However, in all cases, there is some work involved. No book, no matter how well researched and written, will simply spit out answers without any effort on the reader’s part. It’s true that the author can employ techniques to make the reading experience more pleasurable, productive, or efficient, but in the end, it’s the reader who decides just how much information a book conveys with regard to a specific need.

Of course, the first step is to ensure you get the right book. I’ve already discussed this issue in the Techniques for Choosing a Technical Book post. So, let’s assume that you have possession of a book that’s the best possible match to your needs. It may not be a perfect match, but it offers more than any other book you’ve checked.

Now you have to decide on how to interact with the book. That may seem simple, but many readers fail to discover what they need from a book, even when the book contains the required information in several places. Let’s face it, books are relatively large and it’s easy to lose track of a required bit of information. Without some guideline, the mind wanders and tends not to work very hard.

To obtain the most from a book you need a goal. The goal determines how you approach the book. Someone who is trying to learn a new skill will probably begin at the front of the book and work toward the end. Skipping chapters is akin to skipping classes in college—you can’t expect good results if you don’t obtain all of the information. As a contrast, someone who is trying to fix a specific problem under the watchful eye of a boss, probably doesn’t want to waste any more time than necessary finding the required information. This sort of reader will want to locate the section of the book containing the answer quickly. There are some readers though, who really don’t know what they want to do—they lack a goal and are thwarted when the author can’t guess what the reader wants. So, ask yourself why you’re reading the book and create a goal for that particular session. In some cases, you may very well want to wander through the book randomly looking for something interesting, but few people have the time or need to perform this sort of reading with a technical book.

Depending on your goal, you’ll want to determine where to start. Someone who is learning a skill will start in the Introduction—not in Chapter 1. If you don’t read the Introduction, you’ll discover that your educational experience is going to be less helpful. The Introduction is where the author conveys book goals, knowledge requirements, and required training aids. For example, you might not be able to use the educational version of the product you have to learn a new skill with this particular book—it may be necessary to get the released version of the product instead. Researchers and those who simply need the book for reference would do well to check both the Table of Contents and the Index. A book intended solely for reference may include tables in an appendix that provide additional ways to locate information, so you’ll want to find these tables as well.

You’ve likely heard all of the advice for creating a good study environment before, such as turning off the radio. A good study environment also requires focus on your part and the availability of the required equipment. Simply reading about how to perform a task isn’t nearly as good as actually performing the task. Reinforcing the information by putting it into your own words is helpful as well. Everyone learns differently, so it’s important that you take time to discover how you learn. Whatever it takes for you to create a good study environment, you won’t get much out of a book until you create it.

Everyone seems to be in a hurry today, but being in a hurry won’t help with technical information. Hurrying only creates errors. Take time to actually read and understand the material—read it several times if necessary. Work through the material before you act. Yes, I realize that the boss is ready to pound little knots all over your head, but he’s simply going to have to wait. A good solid answer that produces results often requires a little more time up front to create. The book probably has the information you need, but you have to take time to find it.

One of the most important things to remember is that the author isn’t clairvoyant. You won’t find a precise answer to any given question in any book. It’s possible to find an answer that’s close, but in most cases you’ll have to create a solution based on the information the book provides—quick answers are rare.

I wish it were possible to create some form of instant mental transfer of precise data. Perhaps someday it will become the norm to do so, but I hope I’m not around. Part of the joy of technical reading is obtaining the author’s point of view and then creating your own permutations of that information. Working through problems creatively is a challenge—one that I hope people working in technical areas continue to enjoy. If you have any pointers to getting more from a technical reading experience, let me know at [email protected].

Making Soup

One of the things I do during the winter months is make soup. However, I don’t make just a small amount of soup in a small pot, in a small way. Years ago I bought a large restaurant-quality aluminum soup pot that weighs a ton and holds at least four gallons of soup. Making soup in large batches seems to produce a much better result and the large, thick, heavy soup pot works so well that nothing seems to burn in it. Well, I guess if I tried really hard it would burn, but I don’t try really hard.

Most of my soups start out with meat of some sort (beef, pork, chicken, venison, or lamb), but I normally use soup bones, lots of them. Sometimes I use a whole chicken, a large one. No matter what kind of meat I use, I start out with at least five pounds of it, sometimes more. I start the cooking early in the morning and cook the meat very slowly (never ever boiling it), scooping off the blood that rises to the surface and adding spices and salt afterward. I favor using more spices than salt. In fact, I just barely add salt to taste. I use spices that you normally wouldn’t think of in my soups such as, cinnamon, nutmeg, and cloves, which helps me keep salt to a minimum. You don’t add a lot of these spices, the effect is meant to be subtle. In some cases, such as with beef, I use pickling spice (but make sure to remove the tea ball containing the pickling spice after no more than 20 minutes or it gets bitter). Favorites with chicken include sage, rosemary, and thyme. Sometimes I add orange or lemon peel. A common addition are onions and I sometimes add a bit of fresh garlic (minced fine) as well.

I like my soup to be really nutritious, so I add plenty of vegetables. Most of my soups contain corn, carrots, and potatoes. However, I don’t stop there. The soup I made the other day also contains turnips, Holiday Soup Mix, and celery. I’ve been known to add things like green beans, kohlrabi, rutabagas, turnips, and all sorts of other odd assorted vegetables. In fact, if something in the larder or freezer is getting a bit old, it goes into the soup pot. The point is that the soup is far from plain. It contains good nutritional value from a wide variety of wholesome vegetables.

In addition to all of the vegetables, I sometimes add mushrooms. As with the vegetables, I normally get a better quality mushroom, not those canned kind. My personal favorites are baby portabella, shiitake, and oyster mushrooms, but I’ve used others as well. Even a good quality button mushroom can be a nice addition. I’ve never had much success using morels in soup. Besides, morels were meant for cooking in butter and garlic, with a bit of salt.

To top my soup off I usually add pearled barley. Using pearled barley gives the soup that finishing touch, a kind of nutty flavor that you find in only the best soups. As an alternative, I sometimes use half and half wild and brown rice. I generally don’t add noodles to my soup; they fall apart quickly, don’t have much nutritional value, and tend not to freeze or can well.

Speaking of freezing and canning, there is no way one person can eat four plus gallons of soup before it goes bad and that’s the point. I either can or freeze the excess soup for later. Soups that are a little more broth get canned in one quart containers, while robust soups get frozen in one gallon bags. A word of advice, don’t overfill your gallon bag. I put three quarts of soup at most in my gallon bag and sometimes less depending on the soup. Lay the bags flat in the freezer as they freeze and you’ll find that your bags of soup stack well. If I’m having a really busy time, I simply get out a quart or a bag of soup and I have a nutritious meal I don’t have to cook. Soup is comfort food. Let me know your thoughts about soup at [email protected].

IDE Screenshot Usage in Books

There are cases where it’s very tough to figure out the correct presentation of material in a book, which is made more difficult by some readers preferring one presentation and other readers another. It comes down to how people learn in many cases. Visual learners prefer screenshots, abstract learners prefer text. Of course, there are all sorts of learners between these two extremes. So, what seems like a simple question can become quite complex.

The question at hand is whether to present screenshots of an IDE in a book with the associated example code and its output. The problem is that vendors now assume that developers have very large displays and so have made use of all of that extra screen real estate. In addition, book publishers don’t want books where a single image consumes an entire page. The result is that it’s very hard to get a screenshot where the text is completely readable. It can be done, but the text will generally still be smaller than the print in the book. Older readers complain that they need a magnifying glass to see the text at all.

However, there are benefits to using screenshots. The most important benefit is that, even if the text isn’t completely readable, visual learners can see what their IDE should look like as they follow the progress of procedures in the book. This feedback lets the visual learner know that they are doing things correctly and are getting the correct result. Another benefit is that an example tends to stay in one piece. The graphical output of an example doesn’t end up several pages away from the source code that produces it. Sometimes, textual output is wider than the page will allow using the normal font size. So, the options are to print the output in the book at the normal font size, but in a truncated form, which means that it’s no longer complete. A screenshot can show the complete textual output, but at a smaller font. For beginner readers, the second form, while not optimal, is preferred because truncating the output produces questions in the reader’s mind.

So, how do you feel about IDE screenshots in books? Are they more helpful or more confusing? Part of the reason for posts like this is to get your opinion and discover more about you as a reader. Obviously, a book author wants to use the communication techniques that work best overall for everyone, book space often not allowing for the investigation of every presentation alternative. Let me know your thoughts at [email protected].

Tribute to a Friend

Most of you know that I rely on beta readers to help me hone the content of my books. After all, more eyes and more opinions often means fewer mistakes and a better balance to writing. My friend Eva Beattie has been a beta reader for longer than any other beta reader at over 25 years. That’s right, for the past 25+ years she has reviewed every one of the books I’ve written and never asked for anything more than a thank you, making her one of the most selfless people I’ve ever known.

Over the years we developed a friendship and would send cards and gifts to each other. I visited her with my wife during our 30th anniversary trip to Washington state in 2010. Our weekly emails kept each other informed and we’d often discuss matters too private for others to hear. On the holidays we’d take time out for a long gab session on the phone. So, it was with deep regret that I heard of her passing this past week.

I’m glad that I was able to provide her with a well-deserved dedication in Machine Learning Security Principles and that we did have some nice email exchanges prior to her passing. However, I wanted to take this one last opportunity to present a public thank you to her for all of her hard work over all of those years. She really was quite extraordinary and I’ll greatly miss her.

Jupyter Notebook vs JupyterLite

There seems to be some confusion for readers of   Algorithms for Dummies, 2nd EditionBeginning Programming with Python For Dummies, 3rd Edition, Machine Learning for Dummies, 2nd EditionPython for Data Science for Dummies, and Machine Learning Security Principles lately due to the similarity of names of two Integrated Development Environments (IDEs) available now. Even though I’m sure that JupyterLite is a very good product, even the website states, “Not all the usual features available in JupyterLab and the Classic Notebook will work with JupyterLite, but many already do!” This lack of support becomes a problem when you try to run the downloadable source using JupyterLite. In addition, Luca and I haven’t tested the downloadable source with this product, so we can’t even tell you what will and won’t work.

The two supported IDEs for our books are Google Colab (recommended for those of you who want to use a mobile device) and Jupyter Notebook (recommended for those of you who have a desktop system). It’s actually preferred that you get Jupyter Notebook as part of the Anaconda toolset because Anaconda makes it very easy for you to perform some advanced setup tasks found in some of our books. For example, you gain access to the Anaconda prompt and the associated Conda utility that definitely makes it easier for you to manage some of the machine learning packages found in our books. Using either Google Colab or Jupyter Notebook makes it very much easier for Luca and I to help you with your book-specific questions.

Please let me know if you have any questions or concerns about how to setup your programming environment for our books at [email protected]. Remember to use the version of the products listed in the book for optimal results in working with the downloadable source. In addition, always remember to use the downloadable source to enhance your learning experience.

Programming Languages Commonly Used for Data Science

The world is packed with programming languages, each of them proclaiming their particular forte and telling you why you need to learn them. A good developer does learn multiple languages, each of which becomes a tool for a certain kind of development, but even the most enthusiastic developer won’t learn every programming language out there. It’s important to make good choices.

Data Science is a particular kind of development task that works well with certain kinds of programming languages. Choosing the correct tool makes your life easier. It’s akin to using a hammer to drive a screw rather than a screwdriver. Yes, the hammer works, but the screwdriver is much easier to use and definitely does a better job. Data scientists usually use only a few languages because they make working with data easier. With this in mind, here are the top languages for data science work in order of preference:

  • Python (general purpose): Many data scientists prefer to use Python because it provides a wealth of libraries, such as NumPy, SciPy, MatPlotLib, pandas, and Scikit-learn, to make data science tasks significantly easier. Python is also a precise language that makes it easy to use multi-processing on large datasets — reducing the time required to analyze them. The data science community has also stepped up with specialized IDEs, such as Anaconda, that implement the Jupyter Notebook concept, which makes working with data science calculations significantly easier. Besides all of these things in Python’s favor, it’s also an excellent language for creating glue code with languages such as C/C++ and Fortran. The Python documentation actually shows how to create the required extensions. Most Python users rely on the language to see patterns, such as allowing a robot to see a group of pixels as an object. It also sees use for all sorts of scientific tasks.
  • R (special purpose statistical): In many respects, Python and R share the same sorts of functionality but implement it in different ways. Depending on which source you view, Python and R have about the same number of proponents, and some people use Python and R interchangeably (or sometimes in tandem). Unlike Python, R provides its own environment, so you don’t need a third-party product such as Anaconda. However, R doesn’t appear to mix with other languages with the ease that Python provides.
  • SQL (database management): The most important thing to remember about Structured Query Language (SQL) is that it focuses on data rather than tasks. Businesses can’t operate without good data management — the data is the business. Large organizations use some sort of relational database, which is normally accessible with SQL, to store their data. Most Database Management System (DBMS) products rely on SQL as their main language, and DBMS usually has a large number of data analysis and other data science features built in. Because you’re accessing the data natively, there is often a significant speed gain in performing data science tasks this way. Database Administrators (DBAs) generally use SQL to manage or manipulate the data rather than necessarily perform detailed analysis of it. However, the data scientist can also use SQL for various data science tasks and make the resulting scripts available to the DBAs for their needs.
  • Java (general purpose): Some data scientists perform other kinds of programming that require a general purpose, widely adapted and popular, language. In addition to providing access to a large number of libraries (most of which aren’t actually all that useful for data science, but do work for other needs), Java supports object orientation better than any of the other languages in this list. In addition, it’s strongly typed and tends to run quite quickly. Consequently, some people prefer it for finalized code. Java isn’t a good choice for experimentation or ad hoc queries.
  • Scala (general purpose): Because Scala uses the Java Virtual Machine (JVM) it does have some of the advantages and disadvantages of Java. However, like Python, Scala provides strong support for the functional programming paradigm, which uses lambda calculus as its basis. In addition, Apache Spark is written in Scala, which means that you have good support for cluster computing when using this language — think huge dataset support. Some of the pitfalls of using Scala are that it’s hard to set up correctly, it has a steep learning curve, and it lacks a comprehensive set of data science specific libraries.

There are likely other languages that data scientists use, but this list gives you a good idea of what to look for in any programming language you choose for data science tasks. What it comes down to is choosing languages that help you perform analysis, work with huge datasets, and allow you to perform some level of general programming tasks. Let me know your thoughts about data science programming languages at [email protected].

Shards of Glass

Oh how sweet,
What a treat!
Shards of shining glass.

Nice and shiny,
Grains so tiny.
Shards of sparkling glass.

Oh so thirsty,
Feel so hungry.
Shards of wayward glass.

Destroys your health,
Consumes your wealth.
Shards of broken glass.

Sores appearing,
Disease nearing.
Shards of toxic glass.

Eyesight failing,
Time of wailing.
Shards of dark’ning glass.

Time’s a flying,
Soon you’re dying.
Shards of deadly glass.

Inspired by Barbara McPherson.
Dedicated to all who suffer from diabetes.
Copyright 2011 John Paul Mueller

Ongoing Education

This is an update of a post that originally appeared on April 7, 2011.

In looking at a lot of my previous posts, I try to see the truth value in them. Did they hold up to the test of time? When it comes to ongoing education, it doesn’t matter how old you get, you still need to learn new things. I encountered a friend at the library the other day, long retired, he’s still feeding his brain with new things and doing so makes him a very interesting person to talk to.

There are only 24 hours in each day, making it impossible for any one human to know the sum of human knowledge or even a small portion of it. The 24 hour limit means we must actually choose carefully and depend on others to have knowledge we don’t possess. Anything that isn’t growing is dead and a form of growth is the increase of both knowledge and wisdom.

Of course, I do obtain daily increases in knowledge. The art of writing technical books is embracing a strategy of learning all the time. I read voraciously, subscribe to word builders, and conduct experiments to see just how things really work (as contrasted to the theoretical discussions in the books and magazines I read). The very act of writing involves learning something new as I discover new ways to express myself in writing and convey information to readers. I’ve picked up books I wrote early in my career and am often appalled at what I considered good writing at the time, but it was good writing given my experience, even though it would be unacceptable today.

Learning is part of every activity in my life and I relish every learning event. So it was on this particular weekend twelve years ago that my wife and I packed our lunch and sent to Get Ready…Get Set…Garden! We looked forward to it every year. This year we took classes on hostas (for fun) and horseradish (as part of our self-sufficiency).

Before we went to class though, we just had to spend a little time looking at some of the displays. A personal favorite of mine was the gourds:

A display of interesting things made with gourds.
A display of interesting things made with gourds.

I’ve always wanted to make some bird houses, but never quite have the time. They actually had a class on the topic this year and I was tempted to take it, but that would have meant missing out on the horseradish class, which I considered more important. Here’s Rebecca and me standing in front of one of the displays:

John and Rebecca standing in front of one of the displays.
John and Rebecca standing in front of one of the displays.

Well, onto the classes. I found out that there are over 2,000 varieties of hostas, which I found amazing. They originated in Japan, Korea, and China.  It takes five years on average to grow a hosta to full size, but it can take anywhere from three years to ten years depending on the variety. I found out our place for growing them is perfect, but our watering technique probably isn’t, so we’ll spend a little more time watering them this summer. Our presenter went on to discuss techniques for dealing with slugs and quite a few other pests. Most important for me is that I saw some detailed pictures of 50 of the more popular varieties that are easy to get in this area. I’ll be digging out some of the old hostas in my garden and planting new as time allows.

The horseradish session was extremely helpful. I learned an entirely new way to grow horseradish that involves laying the plant on its side for the first six weeks, digging it up partially, removing the suckers, and then reburying it. The result is to get a far bigger root that’s a lot easier to grind into food. I can’t wait to try it out. Of course, our instructor had us sample a number of horseradish dishes while we talked. I’m not sure my breath was all that pleasant when we were finished, but I enjoyed the tasty treats immensely.

So, what are your educational experiences like? Do you grow every day? Let me know at [email protected].