Images based on this blog…

Recently there has been quite a controversy related to AI generated art — Will it put artists out of a job? Is it even art?

I thought I’d give DALL-E a try at generating art for my blog site.

Here are a few interesting responses. To the requests:

1) An impressionist painting focused on moving beyond the intersection of technology and life, generating value at the crossroads of life and technology

2) An oil pastel focused on the concept of moving beyond the intersection of technology and life, generating value at the crossroads of life and technology

3) A cubist image focused on the concept of moving beyond the intersection of technology and life, generating value at the crossroads of life and technology

4) pixel art image focused on the concept of moving beyond the intersection of technology and life, generating value at the crossroads of life and technology

For each query, 3 images were generated.

I can’t say that any of these are something I would hang on my wall, but they are much better than I would have done on my own. I am sure I’ll be back to try it again sometime.

Experimenting with Bing Chat

Since I have been playing with ChatGPT, and Bing Chat came out, I thought I’d try it. I already had a baseline dealing with writing Python for dice rolling, so I thought I’d start with the same kind of query for Bing Chat.

I asked:

Using the Visual Studio Python IDE Python Development Tools to deploy an application for the Android platform?

The answer I got back was:

Hello, this is Bing. I searched the web for your query and found some results that might be helpful.

According to the search results, Visual Studio is a powerful IDE for Python language on Windows, and it provides open-source support for the Python language through the Python Development and Data Science workloads12You can use Visual Studio to edit, debug, and test Python code, and then publish an app3.

However, developing for Android using Python comes with some additional challenges, as Python is not “native” on those platforms, so you have to include Python with your app, and there are no “official” Pythons for either platform4You might want to use some tools or frameworks that can help you create Android apps with Python, such as Briefcase5Kivy5, or BeeWare5.

That was nice, and clear about the Android side of things but still left be wondering about the Visual Studio installation. I had to ask a follow up question:

What would I need to do on Windows Visual Studio to install kivy to develop for the android platform?

And the reply was:

I searched the web for your query and found some results that might be helpful.

According to the search results, to install Kivy on Windows Visual Studio, you need a compiler. On Windows, the Visual Studio Build Tools are required, and they are available for free1You can either download and install the complete Visual Studio IDE, which contains the build tools1, or download and install only the build tools1Then, you can use pip to install Kivy2.

To develop for Android using Kivy, you need to create a Python file and a Kivy file for your app. You can use Kivy’s widgets and layouts to design your interface, and use Python’s logic to implement your functionality3You can also use Kivy’s APIs to access Android features, such as vibration, sensors, texting, etc4To test your app, you can use the Kivy Launcher app, which allows you to run your Kivy app without a compilation step4To compile and publish your app, you need to use the Buildozer tool, which can create a fully signed AAB (Android App Bundle) for your app4.

That is different answer than the one from Chat GPT. It was more succinct but not quite as detailed.

So I thought I’d give it the first question I gave ChatGPT related to GUI development that really shocked me:

write a graphic user interface in python that rolls two dice using Kivy

The answer was a bit underwhelming:

I searched the web for your query and found some results that might be helpful.

According to the search results, to create a graphic user interface in python using Kivy, you need to import the Kivy library and create an App class that inherits from the App base class1The App class has a build() method that returns a widget that will be displayed on the screen1You can use various widgets and layouts from the Kivy library to design your interface, such as Label, Button, BoxLayout, GridLayout, etc2You can also use the Canvas instruction to draw shapes and lines on the screen3.

To create a graphic user interface in python that rolls two dice using Kivy, you need to import the random module and create a function that generates two random numbers between 1 and 6, and returns them as a tuple4You also need to create a Label widget that displays the result of the dice roll, and a Button widget that triggers the dice roll function when clicked5You can use a BoxLayout or a GridLayout to arrange the widgets on the screen2.

Here is an example of a Python file and a Kivy file for a graphic user interface that rolls two dice using Kivy:

# dice.py

import kivy

kivy.require('2.1.0')

from kivy.app import App

from kivy.uix.label import Label

from kivy.uix.button import Button

from kivy.uix.boxlayout import BoxLayout

from kivy.properties import StringProperty

import random

class DiceApp(App):

    # A property to store the result of the dice roll

    result = StringProperty('Roll the dice!')

    def build(self):

        # Create a box layout to hold the widgets

        layout = BoxLayout(orientation='vertical')

        # Create a label widget to display the result

        self.label = Label(text=self.result, font_size=50)

        # Create a button widget to trigger the dice roll

        self.button = Button(text='Roll', font_size=50, on_press=self.roll_dice)

        # Add the widgets to the layout

        layout.add_widget(self.label)

        layout.add_widget(self.button)

        # Return the layout as the root widget

        return layout

    def roll_dice(self, instance):

        # Generate two random numbers between 1 and 6

        dice1 = random.randint(1, 6)

        dice2 = random.randint(1, 6)

        # Update the result property with the dice values

        self.result = f'{dice1} + {dice2} = {dice1 + dice2}'

# Run the app

if __name__ == '__main__':

    DiceApp().run()

# dice.kv

<DiceApp>:

    # Define the appearance of the widgets

    label:

        color: 0, 0, 0, 1 # Black text

        size_hint: 1, 0.8 # Take 80% of the vertical space

    button:

        background_color: 0, 0, 1, 1 # Blue background

        color: 1, 1, 1, 1 # White text

        size_hint: 1, 0.2 # Take 20% of the vertical space

It did give me some code and it gave me references that were totally missing from ChatGPT but I was not as impressed.

I will need to try and go back and forth between the two and see what happens.

It did make me think about writing a paper with Bing Chat (to get the references) and then having ChatGPT make it better. So, I asked my question that started me down the path of looking at ChatGPT:

Write 500 words about the origin of computer aided design.

Even though it said it couldn’t do it, it produced a surprisingly good response:

I searched the web for your query and found some results that might be helpful.

According to the search results, computer aided design (CAD) is the use of computers to facilitate or assist design, especially in engineering and architecture1The term CAD emerged in the 1950s and is commonly credited to Douglas Ross, a computer scientist who was working at MIT when the acronym was coined23The origin of CAD can be traced back to the Second World War, when there was a huge wave of development in computing1.

One of the earliest examples of CAD was the Program for Numerical Tooling Operations (PRONTO), the very first Computer Numerical Control (CNC) programming system, developed by Patrick Hanratty in 19571PRONTO allowed the creation of numerical control programs for machining parts using a computer1Another pioneer of CAD was Ivan Sutherland, who developed Sketchpad in 1963, the first interactive computer graphics program that allowed users to draw and manipulate geometric shapes on a screen using a light pen4.

The development of CAD was influenced by the advancement of computer hardware and software, such as the invention of the transistor, the integrated circuit, the mouse, the graphical user interface, and the object-oriented programming25The first commercial CAD systems were introduced in the late 1960s and early 1970s, such as ADAM (Automated Drafting And Machining), DAC-1 (Design Augmented by Computer), and CADAM (Computer Augmented Drafting And Manufacturing)2These systems were mainly used for 2D drafting and design, and were expensive and limited to large corporations and institutions2.

The 1980s and 1990s saw the emergence of 3D modeling and rendering, parametric and feature-based modeling, solid and surface modeling, and computer-aided engineering (CAE) and manufacturing (CAM) integration24Some of the notable CAD systems of this era were AutoCAD, CATIA, Pro/ENGINEER, SolidWorks, and Unigraphics2These systems were more affordable and accessible, and enabled more complex and realistic design and simulation2.

The 21st century has witnessed the development of cloud-based, web-based, and mobile CAD systems, as well as the application of CAD in various fields, such as animation, gaming, biomedical, and fashion24Some of the current trends and challenges in CAD are artificial intelligence, virtual and augmented reality, additive manufacturing, and collaborative and distributed design24CAD has become an indispensable tool for designers and engineers, and has revolutionized the design process and the quality of the products24.

With references that were totally missing from the ChatGPT response.

So I went to Chat GPT and asked it to improve the essay. ChatGPT produced the following:

Computer-aided design (CAD) is a technology that has revolutionized the way that engineers and designers create and refine products. Simply put, CAD is the use of computers to facilitate or assist in the design process, particularly in the fields of engineering and architecture. From its humble beginnings in the 1950s to its current use in a wide range of industries, CAD has come a long way in terms of both capabilities and accessibility.

The term “CAD” is commonly credited to Douglas Ross, a computer scientist who was working at MIT when the acronym was coined in the 1950s. However, the origins of CAD can be traced back even further, to the Second World War, when there was a huge wave of development in computing. One of the earliest examples of CAD was the Program for Numerical Tooling Operations (PRONTO), which was the very first Computer Numerical Control (CNC) programming system. PRONTO allowed the creation of numerical control programs for machining parts using a computer. Another pioneer of CAD was Ivan Sutherland, who developed Sketchpad in 1963. This was the first interactive computer graphics program that allowed users to draw and manipulate geometric shapes on a screen using a light pen.

The development of CAD was influenced by the advancement of computer hardware and software, such as the invention of the transistor, the integrated circuit, the mouse, the graphical user interface, and the object-oriented programming. The first commercial CAD systems were introduced in the late 1960s and early 1970s, such as ADAM (Automated Drafting And Machining), DAC-1 (Design Augmented by Computer), and CADAM (Computer Augmented Drafting And Manufacturing). These systems were mainly used for 2D drafting and design, and were expensive and limited to large corporations and institutions.

The 1980s and 1990s saw the emergence of 3D modeling and rendering, parametric and feature-based modeling, solid and surface modeling, and computer-aided engineering (CAE) and manufacturing (CAM) integration. Some of the notable CAD systems of this era were AutoCAD, CATIA, Pro/ENGINEER, SolidWorks, and Unigraphics. These systems were more affordable and accessible, and enabled more complex and realistic design and simulation.

The 21st century has witnessed the development of cloud-based, web-based, and mobile CAD systems, as well as the application of CAD in various fields, such as animation, gaming, biomedical, and fashion. Some of the current trends and challenges in CAD are artificial intelligence, virtual and augmented reality, additive manufacturing, and collaborative and distributed design. CAD has become an indispensable tool for designers and engineers and has revolutionized the design process and the quality of the products.

A definite style improvement though now all the references disappeared.

A mixed bag of results from my perspective.

An opening to learn from my previous neon sign

Our model train group wanted a way to share when the trains are running, so those visiting the woodshop can know to stop by. To do this, I am going to approach the problem in two parts:

  1. Open sign
  2. Train sign (possibly with animated wheels…)

This post is going to cover the process of creating the open sign.

The first thing I needed was a good line art of the word ‘open’. Heck, we are on a modern computer so I might as well use a font that does what I want, rather than digging for clip art. I found the font Benella. It seemed to have the right flow and anything I didn’t like should be easy to fix. Now to make the 3D model in 10 easy steps:

1) I wrote out Open in a tool that could translate the text into an SVG file (Lightburn, Inkscape…). I had to do this at a fairly large size of font probably around 72.

2) After I had the SVG file, I opened up Fusion 360 and imported it into a sketch. I scaled the letters so the stroke lines were 5 mm wide.

3) Once I had the sketch, I edited it to attach the ‘O’ in open to the P.

4) Next, I extruded the sketch model to be 2 mm deep. This will form the back of the sign.

5) To make the sides of the sign, copied the initial solid into a new solid and hid the original one.

6) I turned on selection filtering to only capture the faces of my new solid and turned on select through, so I could get the faces I couldn’t see in my new solid. I then selected the entire model screen.

7) Once I had the faces selected, I could then use Modify -> Offset face to make the outer faces all 2mm larger. This made the foundation for the side walls of the model.

8) Now I had a solid that was the original design and one that was thicker. Then selected the new wider solid and combined/cut it with the original, while keeping the original.

9) Now I had a couple new solids that were only the foundation for the sides. I extruded those up 9mm.

10) Finally, I exported all the solids to STL to print. We’ll see what errors I made along the way, when I try and insert the LED neon strip.

A baseball dice and marble game

Since now I have access to a large format laser, one of the first designs made was a dice baseball game that uses marbles as the placeholders. I have seen a few of these on-line, but they all were not very playable. A few of my neighbors and I did some game testing and after 4 iterations, it is now very playable.

The batter controls the marbles for Outs, Strikes and Balls, so these marbles are handed over at the end of the inning. Hopefully, it is clear how to play.

The holes and the outside of the board are all cut through 1/4″ plywood. It takes about 25 minutes to reproduce the design on this laser.

What is needed to play?

Two or more people, and a variety of marbles (14 in total) and 4 dice:

  1. One color of marbles for the home score and bench (5)
  2. A different color of marbles is used for the visitor score and bench (5)

The following marbles can be the same or assorted colors (since they are not related to the team colors):

  • Count outs for batting team
  • Count balls for current batter
  • Count strikes for current batter
  • Inning counter which also indicates the team at bat

Starting the game

Roll one die to see which player is the visitor. Highest number is the visiting team, and they bat first.

Place the scoring markers in the visitor and home team zero locations.

Place four marbles in the bench locations.

Place four marbles in:

  • the ball, strike and out zero locations on the visitor side. These marbles will move over to the home locations when home is at bat.
  • the Inning marker in the hole for Visitor, inning 1.

Pitching:

The pitcher rolls one die. If the pitcher rolls a 1 or a 2, it is a ball. If the die is a 3 or a 4, it is a strike. If it is a 5 or a 6, the batter rolls their die – see batting.

If the batter gets four balls, they take a base, then move the Balls and Strikes indicators back to zero.

If the pitcher rolls a strike, the strike indicator advances, until there are three strikes, then the batter is out, reset the marbles for the next batter.

Batting

When the batting team rolls, follow the result shown on the game board. A runner does not advance unless it is forced. For example, if there is a runner on third and the batter hits a single, the runner position remains on 3rd and the new player moves to 1st. If there is a runner on first and there is a single, that runner moves to 2nd base and the new runner moves to 1st.

If a double play is rolled, and no one on base, it is just a single out. If there is more than one player on base, the player closest to home is out as well and the one who would have moved to 1st base. The player who was on 1st should advance to 2nd if they are not out.

If a sacrifice fly is rolled, the batter is out but any runners on base advance one base, unless there are already two outs, which would cause the inning to end.

If the batter is hit by a pitch, they advance like they hit a single.

If there is a foul tip, it is considered a strike, except if there is a runner on 1st base, they can advance to 2nd base, unless it is occupied.

When a foul is rolled, it is counted as a strike, unless the batter already has 2 strikes.

If there is a bunt and there is a runner on 3rd, they are thrown out. The batter advanced to 1st base,

If there is a fielding error, everyone advances a base. The batter is still at bat.

If a steal occurs, everyone advances a base, except the runner on 3rd base. They cannot steal home. If the bases are loaded, no one advances. The batter is still at bat.

When the batter’s ‘at bat’ ends, move the balls and strikes indicator back to zero.

Outs and innings

As in baseball, play continues in the inning until three outs are recorded. Once there are three outs, advance the inning marble and the next team begins their turn at bat. Remove all the players from the field at the end of the inning.

Runs

Move the players around the bases based on what is rolled. The game is over when the ninth inning has been played or one team reaches 17 runs.

Tie game

In the event of a tie game, play one extra inning. If it is still a tie, each team selects a player to roll one die, the first player to roll six wins.

High level flowchart

This is for those familiar with flow charts. The batter rolls are too complex to be shown, and it doesn’t cover the end of the game but hopefully this will be helpful:

Lightburn and OMTech laser

For the last month, I’ve been pounding away on a device that the shop purchased. An OMTech ZF2330-80 dual head 80W laser. There are many things about this laser that I find frustrating, but a company down the road has about 40 of the single laser version. So even if the vendor is not particularly supportive, there is at least someone to commiserate with. We exchanged ideas and each came away with value.

It took a while to figure out the device’s idiosyncrasies, but we’re finally to the point of having dry run training for the SIG membership.

The most interesting feature that I figured out utilizes the capabilities of Lightburn in a different way than what I can do on my home laser.

This device has a camera built in, so you can view the bed, both when it is working and when the cover is open.

Lightburn will allow you to lay an object on the bed, like a piece of paper with an image on it, like this one I found online and printed.

Then capture and trace the image, within Lightburn’s Laser tools menu.

Adjust the image as required and the image onto a material.

Though not that difficult to do through other means, it was painless to perform using the capture technique. It took less than 10 minutes from dropping the picture on the bed to having line art ready to burn. That wooden square shown is about 3 inches across.

Continuing to understand ChatGPT and its programming capabilities.

I saw a post yesterday in the media stating that ChatGPT is not particularly innovative. This statement was made by one of Meta‘s AI chief scientists. He said, “It’s nothing revolutionary, although that’s the way it’s perceived in the public. It’s just that, you know, it’s well put together, it’s nicely done.”

Guess what, a usable tool is innovative. Look at the Lisa (predecessor to the Macintosh). Did it have anything all that innovative compared to what Xerox was doing already? Not really, but it was well integrated and thought out. By the time it became the Macintosh, it was also accessible and easy to use.

The Meta AI chief scientist may have access to “what’s available at other labs.”, but I don’t, so I am continuing my path to discovery with what I have. Taking up where I left off in the previous post about ChatGPT’s ability to aid software development:

I got my Python environment setup to use the Python PyQt5 library. Now I have the following screen displayed and working:

Not too bad for someone who is barely functional in Python…

Now I need to determine how to move the software program over to Android, so I asked ChatGPT:

Using the Visual Studio Python IDE Python Development Tools to deploy an application for the Android platform?

The answer I got back was:

Deploying an application for the Android platform using the Visual Studio Python IDE and Python Development Tools (PTVS) is not a straightforward process and requires some setup and additional tools. Here's an overview of the steps you can take:

Install the Android SDK on your computer:

Download the Android SDK from the official website (https://developer.android.com/sdk)

Install the SDK and set the ANDROID_HOME environment variable to the path of the SDK

Install the Java Development Kit (JDK) on your computer:

Download the JDK from the official website (https://www.oracle.com/java/technologies/javase-downloads.html)

Install the JDK and set the JAVA_HOME environment variable to the path of the JDK

Install Python for Android (python-for-android) on your computer:

Run the command pip install python-for-android

Create a new project in Visual Studio using the Python Development Tools:

Open Visual Studio and create a new project

Select the "Python Application" template

Write your Python code for the application

Use python-for-android to create an APK file:

Open a command prompt or terminal window

Navigate to the directory where your Python code is located

Run the command python-for-android apk --private . --package org.test.myapp --name "My App" --version 0.1 --bootstrap=sdl2

This will create an APK file in the bin directory of the project

Install the APK file on your Android device:

Connect your Android device to your computer

Copy the APK file to your device

Open the file manager on your device and navigate to the location where you copied the APK file

Tap on the APK file to start the installation process

Note that this process may require some tweaking and adjustments to your script and settings to make it run well on mobile devices, also it's not as simple as using Kivy, which is a more complete framework for building mobile applications.

Kivy is an Open Source Python application development Framework to build and distribute Python cross-platform GUI apps. These instructions are going to have to wait to test out another day.

A Python dice implementation by ChatGPT

My first thought was what are the GUI options for Python, so I asked:

How to generate a gui interface from python code?

What resulted from this request was:

There are several libraries that can be used to generate a GUI interface from Python code, some of the most popular ones include:

Tkinter: This is a built-in Python library that provides a simple way to create graphical user interfaces. It is a powerful tool for creating desktop applications.

PyQt: This is a set of Python bindings for the Qt application framework and runs on all platforms supported by Qt including Windows, OS X, Linux, iOS, and Android.

wxPython: This is a set of Python bindings for the wxWidgets toolkit, which allows you to create graphical user interfaces that are compatible with Windows, OS X, and Linux.

PyGTK: PyGTK is a set of Python bindings for the GTK toolkit. It is the foundation for the GNOME desktop environment and is compatible with Windows, OS X, and Linux.

PySide: PySide is a set of Python bindings for the Qt toolkit and runs on all platforms supported by Qt including Windows, OS X, Linux, iOS, and Android.

Each of these libraries has its own strengths and weaknesses, so you should choose the one that best suits your needs.

That was a pretty useful overview of the options, so I thought I’d just let it take a crack at it and asked:

write a graphic user interface in python that rolls two dice

What I got back definitely worked:

import tkinter as tk
import random

def roll_dice():
    dice1 = random.randint(1, 6)
    dice2 = random.randint(1, 6)
    result_label.config(text=f"Dice 1: {dice1}\nDice 2: {dice2}")

root = tk.Tk()
root.title("Dice Roller")
result_label = tk.Label(root, text="Welcome to Dice Roller", font=("Helvetica", 20))
result_label.pack()
roll_button = tk.Button(root, text="Roll Dice", command=roll_dice)
roll_button.pack()
root.mainloop()

This GUI has a button labeled "Roll Dice" and a label that displays the results of the dice roll (e.g. "Dice 1: 4\nDice 2: 5"). When the button is clicked, the roll_dice() function is called, which generates random numbers between 1 and 6 for each dice and updates the label with the results.

This is just a simple example, you can customize it as you like and add more functionality, for example you can add a history of rolls or a picture of the dices, etc.

No comments, but when I ran it, the GUI generated showed:

And when I clicked Roll Dice it displayed a window:

And new random numbers were displayed every time I clicked Roll Dice. Not too bad with the level of direction I gave it. So, I asked it to improve upon the design, by stating:

add to the GUI the ability to have pictures of the dice

It already knew about the previous program so I was hoping it would just build upon that result. This was what was generated.

import tkinter as tk
from PIL import Image, ImageTk
import random

def roll_dice():
    dice1 = random.randint(1, 6)
    dice2 = random.randint(1, 6)
    dice1_image = ImageTk.PhotoImage(Image.open(f"dice{dice1}.png"))
    dice2_image = ImageTk.PhotoImage(Image.open(f"dice{dice2}.png"))
    dice1_label.config(image=dice1_image)
    dice2_label.config(image=dice2_image)
    dice1_label.image = dice1_image
    dice2_label.image = dice2_image
root = tk.Tk()
root.title("Dice Roller")
result_label = tk.Label(root, text="Welcome to Dice Roller", font=("Helvetica", 20))
result_label.pack()
dice1_label = tk.Label(root)
dice1_label.pack(side=tk.LEFT)
dice2_label = tk.Label(root)
dice2_label.pack(side=tk.RIGHT)
roll_button = tk.Button(root, text="Roll Dice", command=roll_dice)
roll_button.pack()
root.mainloop()

Here, I'm using the PIL library to open and display images of dice. I'm assuming that the images are in the same folder as the script, and are named dice1.png, dice2.png, etc.

In the roll_dice() function, I'm generating random numbers between 1 and 6 for each dice, and then creating PhotoImage objects for each dice using the ImageTk.PhotoImage method. I'm then configuring the dice1_label and dice2_label to display the corresponding images and updating the labels' images.

You can use your own images of the dices, just make sure that the images are in the same folder as the script and the name of the images match the code, for example if you have a dice with the number 3, the image should be named dice3.png

Keep in mind that the images must be in a format that the PIL library can open, like PNG, JPG, etc.

I now had to find some dice images for it to display, which I just pulled off the internet into the folder with the file names stated. I dropped those into the folder, so now the display looked like:

This is better, so now I realize it is not compatible with Android, one platform where I would like this to run. I asked it:

write a graphic user interface in python that rolls two dice PyQt

and the following was generated:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget
from random import randint

class DiceRoller(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Dice Roller")
        self.initUI()
        
    def initUI(self):
        self.dice1_label = QLabel()
        self.dice1_label.setAlignment(Qt.AlignCenter)
        self.dice2_label = QLabel()
        self.dice2_label.setAlignment(Qt.AlignCenter)

        roll_button = QPushButton("Roll Dice")
        roll_button.clicked.connect(self.roll_dice)

        layout = QVBoxLayout()
        layout.addWidget(self.dice1_label)
        layout.addWidget(self.dice2_label)
        layout.addWidget(roll_button)
        
        self.setLayout(layout)

    def roll_dice(self):
        dice1 = randint(1, 6)
        dice2 = randint(1, 6)
        self.dice1_label.setPixmap(QPixmap(f"dice{dice1}.png"))
        self.dice2_label.setPixmap(QPixmap(f"dice{dice2}.png"))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DiceRoller()
    window.show()
    sys.exit(app.exec_())

This GUI has a button labeled "Roll Dice" and two labels that displays the results of the dice roll (dice images). When the button is clicked, the roll_dice() function is called, which generates random numbers between 1 and 6 for each dice, loads the images using the QPixmap class and updates the labels with the images.
As in the previous example, I'm assuming that the images are in the same folder as the script, and are named dice1.png, dice2.png, etc. and you can use your own images, just make sure the name of the images match the code, for example if you have a dice with the number 3, the image should be named dice3.png.
Keep in mind that the images must be in a format that PyQt can open, like PNG, JPG, etc.

If this code is error free (and it should be), that definitely took some of the grunt work out of learning GUI programming with Python. I’ll have to get back to this tomorrow though.

Finally got around to playing with chatGPT

I finally got access to ChatGPT after hearing about it for a while. I have worked with folks in the AI space since the 1990s (back when I worked at Artificial Intelligence Services at GM), so when ChatGPT was released for testing in December, I was a bit skeptical. I needed to give it a test.

I am working on a presentation for our woodshop on an introduction to CAD, so I thought getting a short discussion from the Chatbot about the origins of CAD would provide an interesting result, since I have just done some research on this space.

I asked the ChatGPT the following:

Write 500 words about the origin of computer aided design.

The results started coming back instantaneously. They were:

Computer-aided design (CAD) is a method of using computers to assist in the creation, modification, analysis, or optimization of a design. The origins of CAD can be traced back to the early 1960s, when the first computer-aided design systems were developed.

One of the earliest forms of CAD was sketching programs, which allowed engineers and architects to create basic 2D drawings using a computer. These early systems were limited in their capabilities and were primarily used for basic drafting and design tasks.

In the 1970s, the development of more powerful computers and the creation of computer graphics technology allowed for the development of 3D CAD systems. These systems allowed for the creation of more complex and accurate designs, and they quickly became popular among engineers and architects.

The 1980s saw the introduction of parametric design, which allowed for the creation of designs that could be easily modified and updated. This was a major breakthrough in CAD technology and it greatly increased the efficiency and flexibility of the design process.

In the 1990s, the widespread adoption of personal computers and the development of more powerful and affordable computer hardware allowed for the widespread use of CAD among small businesses and individuals. Additionally, the development of the Internet and the creation of online design communities made it possible for designers to collaborate and share their work with others from around the world.

Today, CAD systems are used in a wide variety of industries, including architecture, engineering, construction, manufacturing, and product design. They are used to create everything from buildings and bridges to cars and electronics.

CAD systems have become an essential tool for many design professionals and are used to create accurate and detailed designs, as well as to analyze and optimize the performance of a design. With the help of computer aided design, it becomes easier for the designer to communicate their ideas to other members of the team.

Overall, computer-aided design has come a long way since its origins in the 1960s. Today, it is an essential tool for many industries and is used to create a wide variety of products and structures. With the advancement of technology, the future of CAD is looking bright and promising.

Not too bad, I wish it referenced specific examples of the systems in the 60s,70s, 80s and 90s that were the milestones. So, I asked it:

write 500 words about the milestones of CAD solutions

I am hoping that I can get specific examples this way. I didn’t really come back with specific system names… but it did provide more rational about the topic:

Computer-Aided Design (CAD) solutions have come a long way since their inception in the 1960s. Over the past several decades, CAD technology has undergone significant advancements, making it an essential tool for many industries today. Here are some of the key milestones in the evolution of CAD solutions:

The 1960s: The Origins of CAD
The first computer-aided design systems were developed in the 1960s. These early systems were limited in their capabilities, and were primarily used for basic drafting and design tasks. They were mainly used in the aerospace, automotive, and shipbuilding industries.

The 1970s: 3D CAD Systems
The development of more powerful computers and the creation of computer graphics technology in the 1970s allowed for the development of 3D CAD systems. These systems allowed for the creation of more complex and accurate designs, and they quickly became popular among engineers and architects.

The 1980s: Parametric Design
The introduction of parametric design in the 1980s was a major breakthrough in CAD technology. This feature allowed for the creation of designs that could be easily modified and updated. This greatly increased the efficiency and flexibility of the design process.

The 1990s: Widespread Adoption
With the advent of personal computers and the development of more powerful and affordable computer hardware, CAD systems became widely adopted by small businesses and individuals in the 1990s. The development of the internet and online design communities further facilitated collaboration and sharing of designs.

The 2000s: Building Information Modeling (BIM)
The early 2000s saw the advent of Building Information Modeling (BIM) which is a process for creating and managing building data during its lifecycle. BIM enables professionals to share, collaborate and use data in a common format, which leads to more efficient and effective delivery of projects.

The 2010s: Cloud-based and Mobile CAD
The 2010s saw the rise of cloud-based and mobile CAD solutions. Cloud-based CAD systems allow users to access and collaborate on designs from anywhere, while mobile CAD solutions allow users to access and edit designs on the go.

The 2020s: Artificial Intelligence and Machine Learning
With the development of Artificial Intelligence and Machine Learning in the recent years, CAD solutions have become even more powerful. AI-based CAD systems can analyze designs, identify patterns, and optimize performance, while machine learning-based CAD systems can learn from past designs and improve their design recommendations.

In conclusion, CAD solutions have undergone significant advancements throughout the years, evolving from basic 2D drafting tools to advanced 3D design software that incorporates artificial intelligence and machine learning capabilities. These developments have made CAD an essential tool for many industries, including architecture, engineering, construction, manufacturing, and product design. The future of CAD looks bright, with continued advancements in technology expected to lead to even more advanced and powerful solutions.

This answer had a few additional grammatical anomalies, but not too bad. I thought I’d try one more time to get specific system names, so this time I asked:

write 500 words containing the specific system names that defined the milestones of CAD solutions since 1960

The answer this time was closer to what I was looking for:

Computer-Aided Design (CAD) solutions have come a long way since their inception in the 1960s. Over the past several decades, CAD technology has undergone significant advancements, making it an essential tool for many industries today. Here are some of the key milestones in the evolution of CAD solutions and the specific system names that defined them:

The 1960s: The Origins of CAD
The first computer-aided design systems were developed in the 1960s, some of these early systems include Sketchpad by Ivan Sutherland, which was developed at MIT in 1963. Sketchpad was a 2D drawing program that could be used to create simple sketches and drawings. Another early system was Sketchpad III which was developed by Ivan Sutherland in the late 1960s. It was one of the first systems to use a light pen for input, allowing users to draw and create designs on the screen.

The 1970s: 3D CAD Systems
The development of more powerful computers and the creation of computer graphics technology in the 1970s allowed for the development of 3D CAD systems. One of the first 3D CAD systems was AutoCAD, developed by Autodesk in 1982. AutoCAD is a computer-aided design software that enables the creation of 2D and 3D designs. Another early 3D CAD system was Pro/Engineer, developed by PTC in the late 1970s. Pro/Engineer was one of the first 3D CAD systems that could be used to create complex designs and models.

The 1980s: Parametric Design
The introduction of parametric design in the 1980s was a major breakthrough in CAD technology. One of the first parametric design systems was Unigraphics, developed by EDS in 1983. Unigraphics was a 3D CAD system that allowed for the creation of designs that could be easily modified and updated. Another parametric design system that was developed in the 1980s was SolidWorks, which was developed by SolidWorks Corp. in 1995. SolidWorks is a 3D solid modeling computer-aided design software.

The 1990s: Widespread Adoption
With the advent of personal computers and the development of more powerful and affordable computer hardware, CAD systems became widely adopted by small businesses and individuals in the 1990s. One of the most popular systems during this time was AutoCAD, which was widely adopted by architects, engineers, and construction professionals. Another popular system was SolidEdge which was developed by Intergraph Corp in 1996, it was a 3D CAD system that provided advanced modeling capabilities.

The 2000s: Building Information Modeling (BIM)
The early 2000s saw the advent of Building Information Modeling (BIM) which is a process for creating and managing building data during its lifecycle. One of the most popular BIM systems that was developed during this time was Revit, developed by Autodesk in 2002. Revit is a BIM software that enables architects, engineers, and construction professionals to collaborate and share building data in a common format.

The 2010s: Cloud-based and Mobile CAD
The 2010s saw the rise of cloud-based and mobile CAD solutions. One of the most popular cloud-based CAD systems that was developed during this time was AutoCAD 360, developed by Autodesk in 2011. AutoCAD 360 is a cloud-based CAD system that allows users to access and collaborate on designs from anywhere. Another popular mobile CAD system that was developed during this time was AutoCAD mobile app, developed by Autodesk in 2010. AutoCAD mobile app is a mobile CAD system that allows users to access and edit designs on the go.

The 2020s:

This time it ran out of words to get all the details and stopped. I am not sure those were the best examples of groundbreaking system — they were commercial impactful examples, once they got into the 70s and beyond. What I learned is that you can shape the interaction with follow-up questions to get more of what you want.

Overall, I was impressed with what it was able to produce.

Next, I’ll tackle a graphic user interface for a text only implementation I wrote a while back on the dice version of the Settlers of Cataan game, as an experiment in learning Python. Based on what I’ve seen, it should really facilitate that process and since I’ve never written a GUI is Python, it should be an interesting test of how the tool can aid a developer.

I am sure the code will not be great, but good enough is good enough,

Neon holly is working

A few weeks back I mentioned that I was going to make a ‘neon’ holly sign. It took a while for the red and green ‘neon’ to arrive from China but it got here.

I 3D printed out the frame and then started pushing the LEDs into it. I determined where the splice had to take place and spliced the red to the green LED strips and voila… I now have a working ‘neon’ holly sign, which looks great from a few feet away.

The picture is a bit over exposed, but it gets the point across. You cannot see the underlying LEDs in normal usage. I have a feeling this is just the start of the possibilities.

I did have to update my 3D model to be a bit deeper than it was originall and I placed a hole for the wires to go down through the frame.