Creating Code Using ChatGPT

Artificial Intelligence can generate reasonable code; it is up to you to make it shine. I gave ChatGPT two assignments, the first to write a Connect Four program. This one has extensive instructions. The second was to create a Checker game. where I needed only two sentences. Both games work well.

Caveat

People are starting to realize that Artificial Intelligence is a tool. Use it as a tool to improve productivity. Students need to learn how to code and use AI to help. If you notice the detail I use on the Connect 4 instructions, this told the code created what I wanted. It was not perfect at first. Maybe knowing the Scrum methodology of good story telling would help. Take a look at this video and let me know what you think.

Connect Four

I developed my Connect 4 Code in two steps. The first was to create a description of what I thought I wanted. ChatGPT made a decent program, but then had an offer to add the features describe in my description but not implemented on the first try.

Instructions

  1. Create a Java program using Java Swing for the Graphical User Interface.
  2. Create a Player class with private variables String name, Color color, int wins, losses, and ties.
  3. Player has a constructor with two parameters: Player(String name, Color colorID). From the user input, set name and colorID, Set the variables wins, losses, and ties to 0.
  4. The Player constructor checks to see if there is a file <name>.txt. If there is a file by that name, the first line of the file is a name. It should match the name passed into the constructor. The second line of the file contains the wins, the next line is the losses, and the last line contains the ties. Update these variables.
  5. Method closeFile() makes sure the file <name>.txt is written with the player’s name, wins, losses, and ties each written on its own line.
  6. The destructor for Player should call closeFile().
  7. Create a Connect4Board class with 6 rows of 7 empty circles. Give each empty circle depth using shadows. Have a light blue background. The disks that drop need to look like 3D checkers.
  8. Have three private variables of class Player called player1, player2, and currentPlayer.
  9. Have a choosePlayers() function that asks the users to type in their names and allows them to select their favorite color from a color list. There needs to be verification that the two chosen colors do not match.
  10. In the Connect4Board constructor, call choosePlayers().
  11. Create a two-dimensional array with 6 rows and 7 columns which matches the display rows and columns.
  12. Have a Menu bar across the top with a Game menu and a Help menu.
  13. Based on currentPlayer. Have a line under the menu displaying who goes next.
  14. Under the Game menu, have a Choose Players Button. Under that is a Scores button that will open a dialog box with each user’s name and their wins, losses, and ties. Under the Scores button is a Reset button that calls the reset() method.
  15. Under the Reset button is an Exit button which calls each players’ closeFile().It then deallocates any memory for that player.
  16. The Choose Players Button calla each players’ closeFile() method. It then calls the choosePlayers() method.
  17. Have the help button bring up a dialog box with the rules for Connect 4.
  18. Have a reset() method that will empty all the circles on the board and empty the array also. It randomly chooses whether player1 or player2 starts the game.
  19. Have a method called drop(int column). It would place the proper disk at the top of the selected column and animate the drop until it sits in the position just above any precious drops in that column. Update the two-dimensional array to match the display board for each player in each position. In this routine, after the repaint, call checkWinner().
  20. Allow a user to click on the desired column and call drop(column).
  21. The method checkWinner() checks if either player has four in a row, either vertical, horizontal, or diagonal. Check for the winner, put the winning checker in each of the four winning locations with a darker version of the user color. Highlight the squares around the winning four checkers with a dark blue. Increment the appropriate win and loss counts. Check for any empty cells in the array. If none, there is no winner, increment the tie variable for each player. Pop up a dialog box and say which player won or with both players’ names and declaring a tie.

Code

I copied the above instructions into ChatGPT. I then allowed ChatGPT to put in the 3D features I had requested. This is the generated c ode.

Msin.jsva

// Program to start Connect 4
// AI (ChatGPT) generated with modifications by Wayne Cook
// 5 April 2025
// Purpose: Start up the Connect 4 program.

public class Connect4Game {
    public static void main(String[] args) {
        new Connect4Board();
    }
}

Player.java

// Player.java
// AI (ChatGPT) generated with modifications by Wayne Cook
// 5 April 2025
// Purpose: Store information needed to define one player, save and restore all information.
import java.awt.Color;
import java.io.*;

public class Player {
    private String name;
    private Color color;
    private int wins, losses, ties;

    public Player(String name, Color color) {
        this.name = name;
        this.color = color;
        wins = 0;
        losses = 0;
        ties = 0;

        loadFromFile();
    }

    private void loadFromFile() {
        File file = new File(name + ".txt");

        if (file.exists()) {
            try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                String fileName = br.readLine();
                if (fileName.equals(name)) {
                    wins = Integer.parseInt(br.readLine());
                    losses = Integer.parseInt(br.readLine());
                    ties = Integer.parseInt(br.readLine());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void closeFile() {
        try (PrintWriter pw = new PrintWriter(new FileWriter(name + ".txt"))) {
            pw.println(name);
            pw.println(wins);
            pw.println(losses);
            pw.println(ties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // No real destructor in Java → use finalize (not recommended, but per assignment)
    @Override
    protected void finalize() throws Throwable {
        closeFile();
        super.finalize();
    }

    public String getName() { return name; }
    public Color getColor() { return color; }

    public int getWins() { return wins; }
    public int getLosses() { return losses; }
    public int getTies() { return ties; }

    public void addWin() { wins++; }
    public void addLoss() { losses++; }
    public void addTie() { ties++; }
}

Connect4Board.java

// Connect4Board.java
// AI (ChatGPT) generated with modifications by Wayne Cook
// 5 April 2025
// Purpose: Manage board play, gather and update players information.
// Fully upgraded Connect 4 with 3D graphics, gradients, animation, and highlights

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;

public class Connect4Board extends JFrame {

    private Player player1, player2, currentPlayer;
    private int[][] board = new int[6][7];
    private JLabel statusLabel;
    private BoardPanel boardPanel;

    private java.util.List<Point> winningCells = new ArrayList<>();

    public Connect4Board() {
        setTitle("Connect 4 3D");
        setSize(800, 650);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        choosePlayers();

        boardPanel = new BoardPanel();
        add(boardPanel, BorderLayout.CENTER);

        statusLabel = new JLabel("", JLabel.CENTER);
        statusLabel.setFont(new Font("Arial", Font.BOLD, 16));
        add(statusLabel, BorderLayout.NORTH);

        createMenu();

        reset();
        setVisible(true);
    }

    private void choosePlayers() {
        String name1 = JOptionPane.showInputDialog("Enter Player 1 Name:");
        Color color1 = JColorChooser.showDialog(this, "Choose Player 1 Color", Color.RED);

        String name2;
        Color color2;

        while (true) {
            name2 = JOptionPane.showInputDialog("Enter Player 2 Name:");
            color2 = JColorChooser.showDialog(this, "Choose Player 2 Color", Color.YELLOW);

            if (!color1.equals(color2)) break;
            JOptionPane.showMessageDialog(this, "Colors must be different!");
        }

        if (player1 != null) player1.closeFile();
        if (player2 != null) player2.closeFile();

        player1 = new Player(name1, color1);
        player2 = new Player(name2, color2);
    }

    private void createMenu() {
        JMenuBar bar = new JMenuBar();
        JMenu game = new JMenu("Game");
        JMenu help = new JMenu("Help");

        JMenuItem choose = new JMenuItem("Choose Players");
        JMenuItem scores = new JMenuItem("Scores");
        JMenuItem reset = new JMenuItem("Reset");
        JMenuItem exit = new JMenuItem("Exit");

        choose.addActionListener(e -> {
            player1.closeFile();
            player2.closeFile();
            choosePlayers();
            reset();
        });

        scores.addActionListener(e -> JOptionPane.showMessageDialog(this,
                player1.getName() + " W:" + player1.getWins() + " L:" + player1.getLosses() + " T:" + player1.getTies() + "\n" +
                        player2.getName() + " W:" + player2.getWins() + " L:" + player2.getLosses() + " T:" + player2.getTies()));

        reset.addActionListener(e -> reset());

        exit.addActionListener(e -> {
            player1.closeFile();
            player2.closeFile();
            System.exit(0);
        });
        game.add(choose);
        game.add(scores);
        game.add(reset);
        game.add(exit);

        JMenuItem rules = new JMenuItem("Rules");
        rules.addActionListener(e -> JOptionPane.showMessageDialog(this,
                "Connect 4: Get 4 in a row horizontally, vertically, or diagonally."));

        help.add(rules);

        bar.add(game);
        bar.add(help);
        setJMenuBar(bar);
    }

    public void reset() {
        winningCells.clear();
        for (int[] row : board)
            Arrays.fill(row, 0);

        currentPlayer = new Random().nextBoolean() ? player1 : player2;
        updateStatus();
        repaint();
    }

    private void updateStatus() {
        statusLabel.setText("Turn: " + currentPlayer.getName());
    }

    public void drop(int col) {
        new Thread(() -> {
            for (int row = 5; row >= 0; row--) {
                if (board[row][col] == 0) {
                    for (int anim = 0; anim <= row; anim++) {
                        repaint();
                        try { Thread.sleep(40); } catch (Exception ignored) {}
                    }

                    board[row][col] = currentPlayer == player1 ? 1 : 2;
                    repaint();

                    if (checkWinner()) return;

                    currentPlayer = currentPlayer == player1 ? player2 : player1;
                    updateStatus();
                    return;
                }
            }
        }).start();
    }
    private boolean checkWinner() {
        for (int r = 0; r < 6; r++) {
            for (int c = 0; c < 7; c++) {
                int p = board[r][c];
                if (p == 0) continue;

                if (checkDir(r, c, 0, 1) || checkDir(r, c, 1, 0) || checkDir(r, c, 1, 1) || checkDir(r, c, 1, -1)) {
                    Player winner = p == 1 ? player1 : player2;
                    Player loser = p == 1 ? player2 : player1;

                    winner.addWin();
                    loser.addLoss();

                    JOptionPane.showMessageDialog(this, winner.getName() + " wins!");
                    return true;
                }
            }
        }

        boolean full = true;
        for (int[] row : board)
            for (int cell : row)
                if (cell == 0) full = false;

        if (full) {
            player1.addTie();
            player2.addTie();
            JOptionPane.showMessageDialog(this, "Tie game!");
            reset();
            return true;
        }

        return false;
    }

    private boolean checkDir(int r, int c, int dr, int dc) {
        int p = board[r][c];
        winningCells.clear();
        winningCells.add(new Point(r, c));

        for (int i = 1; i < 4; i++) {
            int nr = r + dr * i;
            int nc = c + dc * i;

            if (nr < 0 || nr >= 6 || nc < 0 || nc >= 7 || board[nr][nc] != p) {
                winningCells.clear();
                return false;
            }
            winningCells.add(new Point(nr, nc));
        }
        return true;
    }

    class BoardPanel extends JPanel {

        public BoardPanel() {
            addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    int col = e.getX() / (getWidth() / 7);
                    drop(col);
                }
            });
        }

        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;

            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            GradientPaint bg = new GradientPaint(0, 0, new Color(120,180,255), 0, getHeight(), new Color(30,90,200));
            g2.setPaint(bg);
            g2.fillRect(0,0,getWidth(),getHeight());

            int w = getWidth()/7;
            int h = getHeight()/6;

            for(int r=0;r<6;r++){
                for(int c=0;c<7;c++){
                    int x=c*w;
                    int y=r*h;

                    g2.setColor(new Color(0,0,50,80));
                    g2.fillOval(x+8,y+8,w-10,h-10);

                    Color diskColor = Color.WHITE;
                    if(board[r][c]==1) diskColor = player1.getColor();
                    if(board[r][c]==2) diskColor = player2.getColor();

                    RadialGradientPaint rg = new RadialGradientPaint(
                            new Point2D.Double(x+w/2,y+h/2),
                            w/2,
                            new float[]{0f,1f},
                            new Color[]{Color.WHITE,diskColor.darker()});

                    g2.setPaint(rg);
                    g2.fillOval(x+5,y+5,w-10,h-10);

                    if (winningCells.contains(new Point(r,c))) {
                        g2.setStroke(new BasicStroke(4));
                        g2.setColor(Color.BLUE);
                        g2.drawOval(x+5,y+5,w-10,h-10);
                    }
                }
            }
        }
    }
}

Game Board

This is what the gameboard looks like after one player wins.

Game Board after Fred wins, notice blue around the four in a row.

Checkers

I wanted to create a game with as few instructions as possible. Checkers is a well-known game, and should be easy to generate.

Instructions

Using Java Swing, create a checker game. Have red and black checker pieces with a contrasting board. Allow Kings to jump backwards. Look for multiple jumps and allow them.

ChatGPT Rely

Creating a simple checker game in Java Swing involves several steps, including building the game board, implementing the rules for checker movement (including jumping and multiple jumps), and providing an interface for the user to interact with the game. Below is a basic outline of how you can implement a checker game with the requested features:

  1. Board Setup: A checkerboard with alternating red and black pieces.
  2. Movement: Regular pieces can move forward, while Kings can move both forward and backward.
  3. Jumping: Pieces can jump over opponent pieces, and multiple jumps are allowed in one turn.
  4. Kings: When a piece reaches the opponent’s back row, it becomes a King and can move both forward and backward.
  5. User Interaction: Mouse events to select and move pieces.

Here’s a simple version of a Checkerboard game using Java Swing. This implementation includes the basic features, but it’s not a fully polished game. You can further enhance it with more sophisticated rule validation, GUI enhancements, and game-over logic.

Code

// CheckerGame.java
// AI (ChatGPT) generated with no modifications by Wayne Cook
// 5 April 2025
// Purpose: Allow two people to play checkers. There is no winner declared or 
//      score kept.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class CheckerGame extends JPanel {
    private static final int BOARD_SIZE = 8;
    private static final int TILE_SIZE = 80;
    private static final Color DARK_SQUARE = new Color(139, 69, 19); // Brownish for dark squares
    private static final Color LIGHT_SQUARE = new Color(255, 222, 185); // Light brown
    private static final Color RED_PIECE = new Color(255, 0, 0);
    private static final Color BLACK_PIECE = new Color(0, 0, 0);

    private CheckerPiece[][] board;
    private CheckerPiece selectedPiece;
    private boolean redTurn = true; // Red goes first

    public CheckerGame() {
        this.setPreferredSize(new Dimension(BOARD_SIZE * TILE_SIZE, BOARD_SIZE * TILE_SIZE));
        board = new CheckerPiece[BOARD_SIZE][BOARD_SIZE];
        initializeBoard();

        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int row = e.getY() / TILE_SIZE;
                int col = e.getX() / TILE_SIZE;

                if (selectedPiece == null) {
                    selectPiece(row, col);
                } else {
                    movePiece(row, col);
                }
                repaint();
            }
        });
    }

    private void initializeBoard() {
        // Set up initial pieces
        for (int row = 0; row < BOARD_SIZE; row++) {
            for (int col = 0; col < BOARD_SIZE; col++) {
                if ((row + col) % 2 == 1) { // Only dark squares get pieces
                    if (row < 3) {
                        board[row][col] = new CheckerPiece(row, col, BLACK_PIECE, false); // Black pieces
                    } else if (row > 4) {
                        board[row][col] = new CheckerPiece(row, col, RED_PIECE, false); // Red pieces
                    }
                }
            }
        }
    }

    private void selectPiece(int row, int col) {
        CheckerPiece piece = board[row][col];
        if (piece != null && (piece.isRed() == redTurn)) {
            selectedPiece = piece;
        }
    }

    private void movePiece(int row, int col) {
        if (selectedPiece != null) {
            if (isValidMove(selectedPiece, row, col)) {
                // Move the piece
                board[row][col] = selectedPiece;
                board[selectedPiece.getRow()][selectedPiece.getCol()] = null;
                selectedPiece.setRow(row);
                selectedPiece.setCol(col);

                // Check if it's a king
                if ((selectedPiece.isRed() && row == 0) || (!selectedPiece.isRed() && row == BOARD_SIZE - 1)) {
                    selectedPiece.setKing(true);
                }

                // After a valid move, it's the other player's turn
                redTurn = !redTurn;
            }
        }
        selectedPiece = null;
    }

    private boolean isValidMove(CheckerPiece piece, int newRow, int newCol) {
        // Ensure move is on the board and the target square is empty
        if (newRow < 0 || newRow >= BOARD_SIZE || newCol < 0 || newCol >= BOARD_SIZE) {
            return false;
        }
        if (board[newRow][newCol] != null) {
            return false; // The square is occupied
        }

        // Determine the direction of movement
        int rowDiff = Math.abs(piece.getRow() - newRow);
        int colDiff = Math.abs(piece.getCol() - newCol);

        // Check for normal move or jump
        if (rowDiff == 1 && colDiff == 1) {
            return true; // Normal move
        } else if (rowDiff == 2 && colDiff == 2) {
            // Check for a valid jump (over a piece of the opposite color)
            int midRow = (piece.getRow() + newRow) / 2;
            int midCol = (piece.getCol() + newCol) / 2;
            CheckerPiece middlePiece = board[midRow][midCol];
            if (middlePiece != null && middlePiece.isRed() != piece.isRed()) {
                // Can jump over the opponent's piece
                board[midRow][midCol] = null; // Remove the jumped piece
                return true;
            }
        }
        return false;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Draw the board
        for (int row = 0; row < BOARD_SIZE; row++) {
            for (int col = 0; col < BOARD_SIZE; col++) {
                Color color = (row + col) % 2 == 0 ? LIGHT_SQUARE : DARK_SQUARE;
                g.setColor(color);
                g.fillRect(col * TILE_SIZE, row * TILE_SIZE, TILE_SIZE, TILE_SIZE);

                // Draw the piece (if any)
                CheckerPiece piece = board[row][col];
                if (piece != null) {
                    g.setColor(piece.getColor());
                    g.fillOval(col * TILE_SIZE + 10, row * TILE_SIZE + 10, TILE_SIZE - 20, TILE_SIZE - 20);
                    if (piece.isKing()) {
                        g.setColor(Color.YELLOW);
                        g.drawOval(col * TILE_SIZE + 10, row * TILE_SIZE + 10, TILE_SIZE - 20, TILE_SIZE - 20);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Checker Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new CheckerGame());
        frame.pack();
        frame.setVisible(true);
    }

    private static class CheckerPiece {
        private int row, col;
        private final Color color;
        private boolean isKing;

        public CheckerPiece(int row, int col, Color color, boolean isKing) {
            this.row = row;
            this.col = col;
            this.color = color;
            this.isKing = isKing;
        }

        public int getRow() {
            return row;
        }

        public int getCol() {
            return col;
        }

        public void setRow(int row) {
            this.row = row;
        }

        public void setCol(int col) {
            this.col = col;
        }

        public Color getColor() {
            return color;
        }

        public boolean isKing() {
            return isKing;
        }

        public void setKing(boolean isKing) {
            this.isKing = isKing;
        }

        public boolean isRed() {
            return color.equals(RED_PIECE);
        }
    }
}

Checker Board

The checkerboard looks good. I would like to get it to do double jumps and to keep score over multiple plays. It is not bad for such a brief description.

Checkerboard after each side earned kings (notice the yellow circle)

Conclusion

These were fun games to create. I spent about three hours on the Connect4 game, as compared to three weeks when I used JavaFX and did all the coding without AI help. The Checker game took me less than an hour.

Artificial Intelligence is helpful, but you must know how to program the code so you can check what it is doing and improve the code.

Posted in Uncategorized | Comments Off on Creating Code Using ChatGPT

Embrace Artificial Intelligence

Note: This is a placeholder until I can fully write the article.

Artificial Intelligence is here to stay. I worked in industry and taught Computer Science classes for over 20 years. I am seeing a tremendous shift in what industry wants from Computer Science majors. AI, like ChatGPT, can write most of the basic programs we assign our students in Java, C++, or Python. We need to train students, so they know how to use and control AI. All subjects are being affected.

Computer Science

Artificial Intelligence has developed in Computer Science. Therefore, it is the first area being affected. A good overview of the effects is in this video. It is an advertisement, but it has good content.

Mathematics

Mathematics is also being affected by Artificial Intelligence. Teaching mathematics is evolving to better help our students thrive in a changing world. On e proposal to improve mathematics is “The 8 Standards for Mathematical Practice.”

Questions from a student

I received a set of questions from a student. I will answer them here for a second time. I had them all answered and I did not hit the save button frequently, so all edits were lost. Do not make that same mistake, ever! Save often.

  1. In your opinion, how will AI most significantly impact everyday life in the next 10–20 years? Please look at the first video posted in this article. It has a lot of good insights. Coding and entry level computer jobs will not be available. They will be done by AI. I have a friend who uses AI to generate his company’s code. He specifies the language to sue and what tests it should perform. He then asks AI to identify any other corner case that needs to be tested. He then has AI generate t=hose cases also. The one area I would emphasize is logic. Take the Discrete Structures course. Don’t memorize formulas, look for the underlying principals and know how to apply them to diverse problems. Improve your ethics and language skills
  2. What careers do you think AI will create, and which jobs will be most affected? Basic coding and entry level programming jobs will disappear. Logic and high-level planning positions will be more in demand. How well can you use AI to produce what is wanted? Can you ask the correct questions to produce what is desired? Can you se what is different than the desired program and specify what needs to be changed? Knowing how to program and the capabilities of different languages is still important. People using AI usually want programs written in specific languages. I personally would always inspect the generated product to verify that no backdoor was put into the code. Know various AI systems, so you are more useful. In general, knowing how to properly use AI will be critical to future careers. You want to control AI and not the reverse.
  3. Do you believe AI will be more beneficial or more harmful to society long term? Why? This depends on how it is used and who is using it. AI is a new tool. All tools are used for both good and for evil. If it is used for good, it will be of great befit and create far more jobs than it eliminates. Developers need to use ethical rules for AI creation. Look at Three laws of robotics | Definition, Isaac Asimov, & Facts | Britannica for one set of guidelines. Learn and go out and make Artificial Intelligence useful and beneficial.
  4. What ethical concerns about AI do you think young people should be paying attention to? Here people who create Artificial Intelligence need to work closely with the humanities and logic disciplines. Review these articles to get some idea of the importance of ethics and morality:
  5. What advice would you give to high school students who are interested in preparing for an AI-driven future? Take Discrete Structures and any other logic course you can take. These courses can be in mathematics, philosophy, social studies, government, law, or many other disciplines. Look for unifying theories. Learn concepts that lead to the creation of formulas. If you understand the concept and can apply them, you do not need to memorize formulas. At this time, you cannot think faster than an AI system. But you can think more creatively. Use and developed your capabilities so you can continue to use AI effectively.

Conclusion

I wish you well with all of your studies and your future thriving in a world influenced by Artificial Intelligence.

Posted in AI, Artificial Intelligence, Computer Science, MAthematics | 1 Comment

Start Your Own Business

Author: Wayne Cook

I hope you are doing well in your career. Enjoying what you do makes the work go by quickly. There are many advantages to owning your own side-business. Choosing the proper one takes some planning.

Evaluating Business Opportunities

To evaluate a business, develop your own criteria. I listed a few criteria I have:

  1. What would you like to do to serve others? The only way to create income is to provide something that other people want. Be a servant leader in what you do.
  2. Are you going to create your products to sell or do you want to work with an established company?
  3. Are you more interested in providing a service and/or providing products?
  4. What is the cost of entry?
  5. What is the potential return on investment?
  6. You should look at existing companies and ask: How long have they been in existence? Are they a growing company in a growing industry with a large potential market? Are they in multiple countries?
  7. Do they have products or services you want to use?
  8. Does it have residual income? Monthly/yearly? Having something that creates passive income is ideal. Is there an auto-order feature? Is the product consumable?
  9. Will you be working with other people or working by yourself? Leveraging other people’s efforts is very beneficial to your business.
  10. Will your friends and acquaintances benefit from these products?
  11. Are the products and business opportunities shareable?
  12. Know your passion, and choose a business based on that passion. Are you going to use these products to help fund your passion and help others.

Choose Your Product or Service Wisely

The products or services you represent have to be of the highest quality. It is best that they have some consumable piece. Are they effective and something you want to use? To earn consistent income, consistent purchases are necessary.

For orally consumed products, make sure the manufacturing facility meets Good Manufacturing Practices (GMP) standards. For supplements to be effective, their content must match their label. This requires Pharmaceutical GMP. Food grade requires a clean facility and no contamination. Pharmaceutical grade requires a clean room environment. Consumers expect a match between what is on the label and what is in the product. Go with Pharmaceutical GMP where possible.

All businesses have an entry cost (both time and money) and renewal costs. Can you afford the cost? Are these straight fees or do you receive products or a service for that fee. Reputable companies supply products for both costs. The renewal costs, which should be minimal, keep your business in good standing. Are the fees low enough that you can easily cover them with your sales?

Mentors

There are two main types of mentors. Some people understand the general principals of running a business and being motivated to do your best. The second type are those who understand your business and have done well. If you are in network marketing, work with the person who brought you into the company. One of the primary ways they earn money is to help you succeed. If that person is fairly new, ask who they go to for help and guidance.

Tax Considerations

Choose a company based on how it will help you and help those around you. Explore the advantages of owning your own business.

Xero has a great description on what to claim and how to claim. You can claim the portion of all your office expenses you use for your home business. This includes the office space, furniture, equipment, and supplies (like paper and printer ink). Talk with a tax consultant about your purchases for the product you represent. A good account knows which required expenses to stay in good standing with the company are tax deductible. Always look at what the IRS says on deducting business expenses.

  1. Restaurants: Fifty percent of a business meal is deductible.
  2. Travel: The biggest deduction is travel. Travel costs for your business are deductible. All travel expenses in and outside the United States are deductible. The trip should be planned in advance. lt is important to know your itinerary and the people you plan to visit.

The company I work with has markets in Australia, New Zealand, Indonesia, India, Japan, Mexico, Canada, Europe, Hong Kong, Taiwan, Thailand, Philippines, Malaysia, Singapore, Columbia, and more for a total of 24 markets. Visiting relatives or friends can be tax deductible. A business meeting must be set up first. Use your own business to your advantage. Set up a meeting where you want to go. The appointment is the key. Do not push, keep the friendship. Lead by example, let them choose what they want to do. Not everyone will choose to join your business. Those who do join, be as supportive as you can be and help them be successful. Be supportive in all ways possible.

Time

Owning your own business should provide time for what you want to do outside of work. It requires work to get yourself established. One key is to enjoy what you are doing. That shows potential and current customers the business is rewarding. Listen to people, help people meet their needs and dreams. Be involved with something you love to do. For travel, find a company that encourages travel to where you would like to visit (or live). I have a good friend who is living in Indonesia and is managing her business from there. I have other friends who moved their business inside the United States, Canada, and Mexico.

What is wanted is satisfied customers who use and reorder your products. Your time is limited to 24 hours per day. You need to train others to do what you are doing. You need to have time outside of work to lead a fulfilling life. That way you earn the income from the work of several people. Be enthusiastic about what you are doing and take the time to enjoy yourself and your family. Use your time wisely. Spend the most time with those people you love. Spending more time with my two young sons was important to all of us. User your time wisely.

My Passions

I am passionate about Computer Science and Education. I see too many former students struggling to find good paying jobs. Currently, many first-level positions are being filled by Artificial Intelligence. I am forming a group to talk about the future of computing with the influences of AI. Gathering a group of like-minded people can make a business grow rapidly.

Whatever you choose, you need to Do Until You Become what you want to be. Sometimes it takes true Grit to accomplish what needs to be done.

Conclusion

I like owning my own business and use my products daily. I believe they are helping me maintain my health at the cellular level. Investigate different business opportunities. Please reply to the person who referred you to this article about their business. I would love to hear from you. Please leave a comment and I will get back in touch with you.

Posted in Challenges, Communication, Leader, Leadership, Manager, Mentor, servant leader, Serving, Team Member, Uncategorized | Tagged , , , , , | Comments Off on Start Your Own Business

Knowing My Personal Identity

I am writing this article as much to me as to everyuone else. An Identity is very personal. For you to relate to what I am writing, reading “I” and “my” should make it more personal. We each have a developed identity. It comes in three parts:

  1. My Identity to strangers
  2. My Identity to those close to me, usually family and co-workers, and close friends.
  3. My Identity to myself.

I can have influence on the first two, but I only have control over my personal identity. “I am” starts most identifications of myself. I need to be careful with how that sentence is completed. I Am refers to deity, so I need to be careful on how I refer to myself in that sentence.

My subconscious will go with whatever I say to myself. Unfortunately, it knows when I am lying to myself. I need to believe what I say to myself. For example, I I say “I will succeed in my business and help many people with their health.” If I truly believe this statement, I will reach my goal. If I have any doubt, I will not meet my goal. It is up to me to personalize this belif until it comes true. I am my own worst saboteur. It is like the final scene in
Somewhere in Time” where a simple coin brings back an unwanted “reality.”

The way to succeed is to be consistently in motion doing what is needed to achieve my goals. I must never stop believing I will succeed. The trap is when I start saying “Why me” and start feeling sorry for myself. I need to change that to “What now.” When I do feel sorry for myself, I look how others overcame obstacles in life. I am the author of my own life and do something to move myself closer to my goal. That is easiest when I have created a road map to where I want to be. I need to plan, do, and then reevaluate before I revise my plans and “do” again. This requires Grit, but it can be done.

Posted in Uncategorized | Tagged , , | 4 Comments

When is Good Enough Not Good Enough?

In our project team at Hewlett Packard, there was one question that often arose: “When is good enough not good enough? on any project, you can optimize two of the three parameters: Features, Defects, and Schedule. Defects always had to be driven as close to zero as possible. The debate always came down to what features will be in the next release, given a tight schedule. We could stretch out the schedule a bit, but customers expected clean releases on a known schedule. Engineers would push for as many features as possible. Managers would push for a known release date. Toward the end of SoftBench, I was Project Lead and had to come up with solutions that would make both sides not too upset. There was no way to make both sides thrilled by any final compromise.

It was a good team that worked well together. I sometimes think about the work that went into our products and then the reviews. Some were quite good, and some left a bit to be desired. We appreciated the good reviews and learned from the “not-so-good” reviews.

Those who do the Work

Theodore Roosevelt gave a speech in 1940 concerning “The Man in the Arena”

It is not the critic who counts, nor the man who points out how the strong man stumbles, or where the doer of deeds could have done them better.
The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood, who strives valiantly, who errs, who comes short again and again.
Because there is no effort without error and shortcoming; but who does actually strive to do the deeds, who knows great enthusiasm, the great devotions, who spends himself in a worthy cause
Who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly.....

Those who succeed at work were so who tried, those were courageous enough to propose bold ideas and do it with great hear.

Daring Greatly by Brene Brown

Brene Brown is a researcher/storyteller, as she calls herself. As a side note, storytelling is huge in the Scrum approach to software development. In order to succeed greatly, we must dare greatly. This means accepting ourselves to realize we have our vulnerabilities. There is a good TED talk vulnerability, of love and belonging.

Conclusion

We need to decide our own future. completing a task “good enough” will probably be a successful venture. But it is not satisfying. We need to Dare Greatly and reach for something a little more.

Posted in Challenges, Comfort, Do, Fulfilling Life, Goals, Growth, Uncategorized | Comments Off on When is Good Enough Not Good Enough?

controlled flight 1905 Santa Clara

There is recorded evidence that controlled flight is in Santa Clara, California. More will be added to this article later.

Posted in Uncategorized | Comments Off on controlled flight 1905 Santa Clara

Dance in the Rain

I must write my monthly article before 11:00 PM on the last day fo the month. There are so many great ideas, but it takes time to organize each idea and create a post about that topic. What inspired my thoughts for this article was a quote from Vivian Greene: “Life isn'[t about waiting for the storm to pass. It is about learning to dance in the rain.” We all go through tough times and sometimes feel isolated. I count my blessings when I feel this way and look for positive events that are happening in my life.

We all have opportunities to grow. We also have wonderfully blessed times in our lives. It is nice when those are the same occasions. Too often the learning experiences happen the most in the tough times. This is when I write down what I am learning and figure out a way to apply those lessons.

Another way I getr out of a “funk” is to serve others. Being a “professor” there are always students who could use a little extra help. That is always rewarding.

There is a story about people trying to move a piano a hosrt distance. The only way they found to do it was for everyone to stand in their place and then lift together. Life is a loot like this, we may be “stuck” in a place or situation. What can we do in the place that could help us and help others? Often a solution will appear if we dwell on positive options and avoid pitying ourselves or others. The question I try to ask myself is: “What can I do to make a difference?” That is a question I need to ask myself more often.

Posted in Uncategorized | Comments Off on Dance in the Rain

Be Kind To Yourself

This is my February placeholder until I have time to write something. I need to be kind to myself and develop a good message about this subject. We all have self-worth, and no one can take away from us. Do you have any suggestions?

A good article to read is with The Kindness Diaries – Cook Health Alliance. Great author. Go out and do something that makes you happy, whether it be something to help others or help yourself.

Posted in Becoming, Kindness Diaries, Planning, Self-Worth, Uncategorized | Comments Off on Be Kind To Yourself

Women Coders

Women are important in the history of coding. Recently, fewer are starting down this path. Besides teaching at Front Range Community College, my goal is to help more women become better coders. With the development of artificial intelligence, the need for better coders and software developers is increasing. We need more men and women of all backgrounds to understand how to design and implement software. Women have influenced coding throughout history, we need more right now. Some examples follow.

Ada Lovelace

Charles Babbage created a mechanical computer, considered the first “modern” computer. But without someone to program the instrument, it would be a “boat anchor.” Ada Lovelace described the basics of programming design. A lot of her work was lost until Alan Turing started using Ada’s material in his research and designs. Here is an interesting story about how they worked together: The Thrilling Adventures of Lovelace and Babbage – Wikipedia.

Ada Lovelace
Ada Lovelace, the inventor of programming calculating machines

BBC created a video about the life of Ada Lovelace and the vision she had for computing. See BBC DOCUMENTARY : Calculating Ada – The Countess of Computing 2015 – YouTube.

Joan Clarke

Joan Clarke’s work was vital to the British success in breaking the Enigma code.

Joan Clarke mathematician on Alan Turing's code breaking
Joan Clarke – mathematician who worked with Alan Turing to break Enigma Code

Joan Clarke was “just a mathematician.” Still, her cryptography work with Alan Turing helped break Germany’s Enigma Code. Joan Clarke, woman who cracked Enigma cyphers with Alan Turing – BBC News. Alan Turing depended on her intuition for a lot of his concept developments. Joan Clarke calculated complex equations quickly and intuitive, as shown in this movie clip.

Admiral Grace Hopper

Admiral Grace Hopper

Responsible for the invention of Cobol and many of the aspects of modern compilers. See Grace Hopper – Computer Coder, Education & Achievements for a good overview of her career.

Hidden Figures – Annie Easley, Group Lead

Annie Easley

Much of the orbit computing work for NASA started as women doing hand calculations for best launch and re-entry trajectories. When the first IBM computer was delivered to NASA. Annie Easley was the head of this group. Her goal was to guarantee her team’s members were trained to program the new IBM system. Her groups continued their orbit calculation work on the new NASA IBM computers. Much of the early NASA programming was designed and implemented by Annie Easley’s team. At this time, hardware was for men and programming was for women.

Margaret Hamilton

The Saturn V programming was exceptional. It flew men to the moon safely without any control of the people on the command module. When the Saturn V started orbiting the moon, the pilots were given control. The lunar lander also had control so the pilot would choose a safe place to land. The development of these computers was broken into two teams, hardware and software. Margaret Hamilton led the software development team. An excellent TED talk on her work explains the quality of the work.

There was not much room for error at this time. The hardware was more robust than what was on the Saturn V rocket. But the limitations were just as great. Margaret had to allow the pilot to fly the lunar lander and make decisions. It did have checks that warned the pilot of potential problems. If a check occurred, all auxiliary programs were stopped. This allowed the mission critical programs (like the landing controls) to execute.

Most Influential Women in Computer Science

These are but a few of the women that influenced Computer Science. For another person’s view of the women who have had the most influence, see the SCI Journal’s 18 Famous Female Computer Scientists That You Should Know 2025

Modern Opportunities

There are so many opportunities for good engineers. See some stories of modern men and women developing software together. Watch CODE: Debugging the Gender Gap (2015) Online for Free | The Roku Channel | Roku

Posted in Ada, Challenges, Computers, Planning, Software, Thinking, Uncategorized | Tagged , , , , , | Comments Off on Women Coders

Start Walking

Have you ever woken up and feel overwhelmed by all there is to do that day? I have. For me to accomplish something, and to do it well. I have to choose one task to complete and do it well. To accomplish something important, I choose a direction and just start walking. This morning, there were errands to run with Diana. This afternoon, I want to translate some notes I took at a Church conference to this blog.

We are all blessed with challenges. Some may be more difficult than others, but we are presented with challenges to help us grow. I personally would be bored not having opportunities to grow. In life, we have joyous times, challenging times, and growth times. It is great when joyous and growth come together. Too often it is the challenging times that bring about the growth.

“Wrong” choices lead to better choices

Early in his career, Kenny Rogers’ mother told him: “Always be happy where you are, but never be content to remain there.” Start walking. I know that God will never give up on us, if we do the same then there will always be a bright spot ahead. If you start walking, is there really a wrong decision? We may realize that we need to walk in a different direction, but if we had not started our journey, we would not know that. It is from our choices that we learn to make better choices.

Inspiration comes from Asking

We all come to roadblocks reaching our chosen destination. This may be in our studies as well as in our lives. Find trusted sources. Read and ask lots of questions. The only dumb question is the one that is not asked. I teach and I guarantee each of us will be thinking about a question we have and looking for the answer. We will not pay attention to what is happening around us and we may miss the answer. We can read textbooks, internet articles, scriptures, or a combination. Studying diligently helps us come up with our best ideas. Then we need to take those ideas to a trusted source, Family, teacher, God? It may not happen instantly, but a different perspective will help us develop a far better plan.

Start Dancing in the Rain

Many victories may come when you least expect it. As Vivian Greene said: “Lif isn’t about waiting for the storm to pass. It is about learning to dance in the rain.” Challenges come to all of us. Even in those trying times, we can choose out path and walk with the joy that grace will give us.

Develop Grit

Everything will not be easy. We need to develop our own grit to get through tough times. It is really nice when everything falls in place. I believe this will happen more often if we just start walking when we have choices to make. The more we make decisions, the better decisions we make. It is like hitting a fastball in baseball. The more you start walking the easier it is to choose the correct direction. Start walking. The baseball fastball video emphasizes the importance to reduce the number of decisions we make, hopefully down to only one. When we only have one decision to make, it is so much easier to start walking.

Posted in Uncategorized | Comments Off on Start Walking