Thursday, January 25, 2018

Plan a Production Logo

If I was starting my own photography or video business, I might think about some general names:

  • Griffith Enterprises
  • Campbell County Studios
  • AskGriff Productions
  • Jellico Photography
So looking at those, there are a couple of problems.  First, names like Griffith Enterprises are a little obscure.  If you heard someone say, "I went to Griffith Enterprises" you would have no idea why.  Campbell County Studios is a little better, but people aren't really going to know what sort of studios it is -- and it will limit you if you ever want to do work in another county or state.  AskGriff Productions is also too vague. Jellico Photography is pretty straightforward, but what if you want to do video?  Web design?  What if someone is in LaFollette or Rocky Top and they would rather hire someone from their home town?

When choosing a business name, keep the following tips in mind:
  • Choose a name that appeals not only to you but also to the kind of customers you are trying to attract.
  • Choose a comforting or familiar name that conjures up pleasant memories so customers respond to your business on an emotional level.
  • Don't pick a name that is long or confusing.
  • Stay away from cute puns that only you understand.
  • Don't use the word “Inc.” after your name unless your company is actually incorporated.
  • Ask family or friends if it makes sense -- and then ask them, "Could it be seen as offensive in ANY way?"  (Sometimes these little things will pop up and kill a business)
  • Avoid new or trendy words (i.e. bae, fam, etc.) because they will soon be unpopular.
Logo Design:

The Next thing to think about when starting a business is what sort of logo would your business have?  Nike has a swoosh.  Disney has a castle with a Disney signature.  Playboy has a rabbit.  What would YOUR business have?  Today we will begin planning out a logo.  These can be on signs, billboards, clothing, on a letterhead or on business cards.  Logos are also used to develop company branding.  The Oakland Raiders shield, the Nike swoosh, The Vols "T", or the Chevron standard are examples of known brands.  It becomes the symbol by which a company is identified.

A good logo should be easily recognizable, fairly simple, and be able to be reproduced with limited colors -- including black and white.  When I taught graphic design before, I drew a whiteboard full of logos (see below) which are easily recognizable (or were at the time) and I used only one color -- black.  
Here are some color examples of logos:
Once you have a basic logo in black and white, it's easy to use Photoshop to create a variety of modifications of your logo.  The "Espresso A-Go-Go" logo (below) demonstrates that.
Another example is the NBA logo (below) showing black and white, 2 colors, and 2 colors with an effect.  Note the differences between the heads/ears of the three examples.  Even though they are slightly different, they are still recognizable as the NBA logo.
Your logo should be describable ("It's a big golden M"), effective without color, memorable, and scalable.
Remember, it's okay to keep it simple -- and stick to what works.  This example shows two similar companies and their different approaches to logo design and corporate branding:

I want you to conceive a logo that depicts you, your style, your business, etc.  Begin sketching ideas on paper for now and turn in your final business papers on Friday.  Don't over-complicate things or be too literal -- look at all of the most recognizable logos and you will notice that very few demonstrate what the company actually does.  For example, if your company was called Sun Beach Productions you don't have to use a sun shining on a beach.

Still confused about what makes a good logo?  Check out this logo design tips article or from a professional logo designer for some extra information.  

Here's a demonstration of the logo development process:
Finally, I would like you to find some examples of well-designed logos [and poorly designed logos] and bring them in to class.  Check newspapers, junk mail, catalogs, etc.  I will use the examples to showcase the differences.
And speaking of "The Bad" and "The Ugly"... here are some more examples of logo design gone wrong:












Here are some examples of black and white logo's [these are for car companies, obviously] to show you that it's possible.
Click Image to Enlarge
A few more well-known logos in black and white:
This was a tribute to Apple founder Steve Jobs after his passing:
Finally, here are some examples of student-created logo's:










There are many websites and blogs out there that focus on logos and logo design.  I will list some as I discover them:

Now, although logo's need to be able to be depicted in black on white, the color selection is critical as well.  Psychologically, we all react to colors in a similar way.  Red tends to excite us, for example -- which is why a lot of kids cereal boxes focus on red, while healthy cereal aimed at adults tends to be focus on green which makes us envision health or peace.

Here's a great color chart relating to logo design.
Here's another great psychology-based chart for logo design and color:

Sometimes logo's can even include some subliminal imagery:
This is saying that Amazon has everything from a-z... but also demonstrates a smile.
In 2005 B&R changed their logo include the embedded 31 from the number of flavors they offer.
This one is really only noticeable if you're a nerd -- the top row is the binary for 80 and the bottom, the binary for 20.
In this case, the negative space between the E and the x shows an arrow.  This psychologically makes people envision them as moving forward or being fast.
The Milwaukee Brewers embedded the M and B in the mitt.
Sun used an ambigram (can be read from any direction) -- even though the logo doesn't include any "S's".
If you look in the mountain's negative space, you'll see a dancing bear.
Some have said that the word "tit" appears here -- but if you look at that section, it's two people sharing a chip and a bowl of salsa.
As you look at their logo, picture the yellow circle as the front wheel of a bicycle.

And here are some more.  Note in the beginning the Disney logo (the castle) was relatively simple in design.  They have now moved to a fully 3D rendered castle with a river in front at the beginning of their movies.

I ran across these applications while researching movie company names:
Also, here is a list of existing film production company names:
Obviously if you're just starting out in photography or web page design or independent movie production, a logo's not a huge deal... but it potentially could be.

Sometimes a logo comes out that is iconic.  Bad Robot made a big name in television and is now doing motion pictures.  The "Bad Robot" doesn't really have anything to do with movies or television or anything else... but it's memorable.


Tuesday, December 5, 2017

Looking at Java Examples

CASE STUDY #1:  Movie Tickets

Let's look at this code for a movie ticket program:
import java.util.Scanner;
class TicketPrice {
public static void main(String args[]) {
Scanner myScanner = new Scanner(System.in);
int age;
double price = 0.00;
System.out.print("How old are you? ");
age = myScanner.nextInt();
if (age >= 12 && age < 65) {
price = 9.25;
}
if (age < 12 || age >= 65) {
price = 5.25;
}
System.out.print("Please pay $");
System.out.print(price);
System.out.print(". ");
System.out.println("Enjoy the show!");
}
}

First of all, what is the name of this Class?

  • What are we bringing into the Class from Java that is already built for us?
  • What does "Scanner" do?
  • What does "double" mean in Java?
  • What variables are we using in this code? (I see three)
  • What are some of the things that are missing in this code?
  • What would the ticket price be for an 8 year old?  A 14 year old?  A 66 year old?
  • Draw a flow chart indicating the flow of this program.
  • Next, let's update the source code:
  • Begin by formatting the source code to be more readable -- add line breaks, indent (Tab) some of the lines, etc.  (See the next case study for an idea of how to format it)
  • Add some comments to the code.  Remember that every Class needs a title, author(s), and version (number or dates) and maybe some comments describing what a formula or function does.

CASE STUDY #2: Divide Equally

Next let's look at this strange code for a program that will divide the total number of gumballs equally among a varied number of children:
import java.util.Scanner;

class EquallyDivide
{

    public static void main(String args[]) {
        Scanner myScanner = new Scanner(System.in);
        int gumballs;
        int kids;
        int gumballsPerKid;

        System.out.print("How many gumballs? ");

        gumballs = myScanner.nextInt();
        System.out.print("How many kids? ");

        kids = myScanner.nextInt();
        gumballsPerKid = gumballs / kids;

        System.out.print("Each kid gets ");
        System.out.print(gumballsPerKid);
        System.out.println(" gumballs.");
    }
}

So let's work with this code:
Add some comments / labels.
What is the difference between:
 System.out.println
 System.out.print
With variable names like "gumballs" or "kids" or "gumballsPerKid", this program is pretty specific.  What sorts of names could we use for variables to make this program usable for other purposes?  The "gumballs" variable might be more useful as "items", for example.  Remember, however, that you can change all instances of "gumballs" but "gumballsPerKid" is a completely different variable name.
Draw a flowchart indicating the flow of this program.
What code could we add to figure out how many gumballs are left over after they have been divided equally?

CASE STUDY #3:  Magic Cue Ball

For case number 3 we have "The Magic CueBall" -- okay, so it's ripped off... but it works... sort of:
import java.util.Scanner;
import java.util.Random;

class MagicCueBall {

    public static void main(String args[]) {
        Scanner myScanner = new Scanner(System.in);
        Random myRandom = new Random();
        int randomNumber;
        System.out.print("Type a Yes or No question: ");
        myScanner.nextLine();
        randomNumber = myRandom.nextInt(10) + 1;
        if (randomNumber > 5) {
            System.out.println("Yes. Isn’t it obvious?");
        } else {
            System.out.println("No, and don’t ask again.");
        }
    }
}

Let's do some playing with the code again:

  • Again, begin by adding comments/labels to the code.
  • What Java utils are we bringing in this time?
  • When you run this program, how does the output text differ from the text written in the code?
  • Before the "if" statement, randomNumber can be what possible numbers?  Why is there a +1 at the end of the line?
  • Add some variation to the possible responses:
  • 4 different "Yes" answers
  • 4 different "No" answers
  • 2 different "Ask Again" answers

At the beginning of the program (before asking the user to type a yes or no question), add a title text graphic.  For example:

*********************************
* Magic Cue Ball 1.0 ~ by Your Name  *
*********************************

What else could we add to make this application more usable?

CASE STUDY #4:  A Number Guessing Game -- Building a Program Step By Step

Step One: Let's try a different method for finding a random number -- this time from 1 to 1000.
public class NumberGuessingGame {
      public static void main(String[] args) {
            int secretNumber;
            secretNumber = (int) (Math.random() * 999 + 1);
            System.out.println("Secret number is " + secretNumber); // to be removed later
      }
}

Step Two: Getting a Guess (import the Scanner and reply with the guess)
import java.util.Scanner;

public class NumberGuessingGame {
      public static void main(String[] args) {
            int secretNumber;
            secretNumber = (int) (Math.random() * 999 + 1);
            System.out.println("Secret number is " + secretNumber); // to be removed
            // later
            Scanner keyboard = new Scanner(System.in);
            int guess;
            System.out.print("Enter a guess: ");
            guess = keyboard.nextInt();
            System.out.println("Your guess is " + guess);
      }
}

Step Three: Checking Your Answer

import java.util.Scanner;

public class NumberGuessingGame {
      public static void main(String[] args) {
            int secretNumber;
            secretNumber = (int) (Math.random() * 999 + 1);
            System.out.println("Secret number is " + secretNumber); // to be removed
            // later
            Scanner keyboard = new Scanner(System.in);
            int guess;
            System.out.print("Enter a guess: ");
            guess = keyboard.nextInt();
            System.out.println("Your guess is " + guess);
            if (guess == secretNumber)
                  System.out.println("Your guess is correct. Congratulations!");
            else if (guess < secretNumber)
                  System.out
                             .println("Your guess is smaller than the secret number.");
            else if (guess > secretNumber)
                  System.out
                             .println("Your guess is greater than the secret number.");
      }
}

Step Five: Add Tries.
import java.util.Scanner;

public class NumberGuessingGame {
      public static void main(String[] args) {
            int secretNumber;
            secretNumber = (int) (Math.random() * 999 + 1);
            System.out.println("Secret number is " + secretNumber); // to be removed
            // later
            Scanner keyboard = new Scanner(System.in);
            int guess;
            do {
                  System.out.print("Enter a guess: ");
                  guess = keyboard.nextInt();
                  System.out.println("Your guess is " + guess);
                  if (guess == secretNumber)
                        System.out.println("Your guess is correct. Congratulations!");
                  else if (guess < secretNumber)
                        System.out
                                   .println("Your guess is smaller than the secret number.");
                  else if (guess > secretNumber)
                        System.out
                                   .println("Your guess is greater than the secret number.");
            } while (guess != secretNumber);
      }
}

Step Six: Remove the Debug Script.
import java.util.Scanner;

public class NumberGuessingGame {
      public static void main(String[] args) {
            int secretNumber;
            secretNumber = (int) (Math.random() * 999 + 1);         
            Scanner keyboard = new Scanner(System.in);
            int guess;
            do {
                  System.out.print("Enter a guess (1-1000): ");
                  guess = keyboard.nextInt();
                  if (guess == secretNumber)
                        System.out.println("Your guess is correct. Congratulations!");
                  else if (guess < secretNumber)
                        System.out
                                   .println("Your guess is smaller than the secret number.");
                  else if (guess > secretNumber)
                        System.out
                                   .println("Your guess is greater than the secret number.");
            } while (guess != secretNumber);
      }
}

Step Seven: Suggestions for Continuing to Upgrade Your Code

  • Add comments and labels [obviously]
  • Create a little title text graphic to display at the beginning of your program.
  • Display "Guess #" in front of [or behind] each "Enter a guess" prompt.
  • Limit the number of guesses a user gets -- and you might even have it display something like "Guess 3 of 10".

Pseudocoding, Variables and Flowcharting: Flipping a Coin

A simple task like flipping a coin is a good start in pseudocoding and flow charting.

Beginning Pseudocode:

Pseudocode is just like writing out what you want your computer program to do.  A simple program (flipping a coin, for example) might look something like this:
  1. Print the title on the screen (“Heads or Tails Game”)
  2. Ask the user, “Heads or Tails?”
  3. Flip the coin (get a random number -- either 0 or 1 with 0 being heads)
  4. Tell the user what the toss was
  5. Tell the user “You win!” or “You lose!”
  6. Say “Thank you for playing!”

Now, where would you put extra instructions that asked, “Do you want to play again?”  What about adding a score counter?  What if you wanted to display a picture of a Head or Tail?  Pseudocode is really that easy.

Looking at Programming:

If we look at a more extensive example, this one is interesting because it tallies up the number of heads and tails we get out of 100 coin flips.  This code involves using a counter, a Math.random number generator (0 or 1 is the result), a counter for the results of each of the sides of the coin, and a "do while" loop.  Study the code and see if you can figure out what the code pieces are doing.

class Toss {
        public final int HEADS = 0;
        static int countH = 0;
        static int countT = 0;
        static int counter = 0;
        private static int face;

        public static void flip() {
                face = (int) (Math.random() * 2);
        }

        public String toString() {
                String faceName;
                counter++;
                if (face == HEADS) {
                        faceName = "Heads";
                        countH++;
                } else {
                        faceName = "Tails";
                        countT++;
                }
                return faceName;
        }

        public static void main(String[] args) {
                System.out.println("Outcomes:");
                do {
                        flip();
                        System.out.println(new Toss().toString());
                } while (counter < 100);
                System.out.println("Number of Tails: " + countT);
                System.out.println("Number of Heads: " + countH);
        }
}

Monday, November 27, 2017

Artificial Intelligence and Following Instructions

Artificial intelligence isn't true intelligence.  Computers do not yet have the ability to think; to learn.  A computer is only able to do what it is told.  If you're playing a game, the character in the game basically follows a flow chart to know what to do.  If you walk into the virtual room, the character you encounter will react in certain ways -- if you have already found the magic sword the guard may attack... or if you are a magician the guard may run afraid... or if you have joined a guild the guard may welcome you in and show you the attack plans.  The guard will only follow the instructions given.  The guard will never think of something on his own... or be in a bad mood and act a certain way...  or decide to take the treasure for himself.

As a programmer, you have to think of all of the possibilities and program for those choices.  We aren't [yet] making a cool video game where characters are interacting with each other, but we will be creating programs with logic problems.  Flowcharting helps, but we have to remember to be specific.  If you have ever used Siri on an iPhone or iPad, you're probably encountered this.

You may have also played with "bots" in "shooter games" (like Counter Strike or Team Fortress) where the bots get confused over simple situations.  Sometimes you'll find them running at full speed, but they are stuck in a corner or behind a box.  The programmer neglected to write a "what if" scenario for whatever got them stuck.  Computers (and "artificial thinkers") can only do what you tell them to do.

For example, there's an old joke about a man who discovers a Genie in a bottle.  For one of his wishes, the man says, "Genie -- make me a chocolate milkshake."  Poof -- the Genie turned him into a chocolate milkshake.

Here's an example [from a JAVA for Dummies book] illustrating this principle:

Just yesterday, I was chatting with my servant, RoboJeeves. (RoboJeeves is an upscale model in the RJ-3000 line of personal robotic life-forms.) Here’s how the discussion went:
Me: RoboJeeves, tell me the velocity of an object after it’s been falling for three seconds in a vacuum.
RoboJeeves:
All right, I will. “The velocity of an object after it’s been falling for three seconds in a vacuum.” There, I told it to you.
Me:
RoboJeeves, don’t give me that smart-alecky answer. I want a number. I want the actual velocity.
RoboJeeves:
Okay! “A number; the actual velocity.”
Me:
RJ, these cheap jokes are beneath your dignity. Can you or can’t you tell me the answer to my question?
RoboJeeves:
Yes.
Me:
“Yes,” what?
RoboJeeves:
Yes, I either can or can’t tell you the answer to your question.
Me:
Well, which is it? Can you?
RoboJeeves:
Yes, I can.
Me:
Then do it. Tell me the answer.
RoboJeeves:
The velocity is 153,984,792 miles per hour.
Me:
(After pausing to think . . .) RJ, I know you never make a mistake, but that number, 153,984,792, is much too high.
RoboJeeves:
Too high? That’s impossible. Things fall very quickly on the giant planet Mangorrrrkthongo. Now, if you wanted to know about objects falling on Earth, you should have said so in the first place.
Your Challenge: Write Exact Instructions for Making a Peanut Butter & Jelly Sandwich:

  1. Get a piece of paper and a writing implement ready.
  2. Create a list (set) of instructions for making a PB&J
  3. Label your instructions "PB&J Alpha"
  4. Exchange instructions with a partner and exchange feedback for possible problems.
  5. Create a new list (set) of instructions to fix any possible problems from before.
  6. Label your instructions "PB&J Beta"
  7. Exchange instructions with a new partner and exchange feedback.
  8. Create a new list (set) of instructions to fix any possible problems from before.
  9. Label your instructions "PB&J Beta 2"
  10. Watch the following video:


  11. Make adjustments to your previous instructions to eliminate potential issues.
  12. Label your instructions "PB&J 1.0"
Here's an interesting video from a game developer doing "AI":