Showing posts with label Notes. Show all posts
Showing posts with label Notes. Show all posts

Wednesday, 15 June 2011

Human Computer Interaction Exam

Hi all,

tl;dr: That's Ok. This post is more for myself then you guys. Just watch the video, I bet you get it wrong. Silly noobs. Foo, I have used you as my reasoning examples, for lulz. See way below.

Today is the day I am sitting my Human Computer Interaction exam. I'm such a bullshit topic really. Talks about how people interact with a computer. Though it is quite useful for design purposes, most of the thing they teach are ridiculous.

I'm putting these here to show to myself I haven't forgot the random ass acronyms we came up with the remember everything.

Nielson's Heuristics: VMUCERFAHH: These are the things that every website should have, for ease of use.
Visibility of system status
Match between the system and the real world
User control and freedom
Error prevention
Recognition over recall
Flexibility and efficiency
Aesthetics
Help and documentation
(H something that means)Error recovery
NOTE: My blog fits all of these requirements :D

Gestalt's Principles of Perception: CAPS 3123: The way humans perceive things.
(Good) Continuity
Closure
Common Fate
Area
Proximity
Pragnanz
Similarity
Symmetry
Surroundedness

Usability Testing: MESELF: What we test when we are testing usability of a website.
Memorability
Efficiency
Subjective satisfaction
Error frequency and severity
Learning
Fit for use

Principles of Aesthetics: PUBE PCI: Three things that relate to aesthetics on a computer.
(P is for principle of aesthetics)
Unity
Balance
Emphasis
    -Placement
    -Contrast
    -Isolation

Principles of Interaction Design: FUSSness and SiMPiVity: Things that we want for good interaction design.
FUSSness
Effectiveness/Usefullness
    -Flexibility
    -Utility
    -Safety
    -Stability
SiMPiVity
Efficiency/Usability
    -Simplicity
    -Memorability
    -Predictability
    -Visibility

Other non acronym notes:
Colour
    -Hue - the colour
    -Saturation - the amount of colour in the colour
    -Value - brightness
Monochromatic - one colour scale
Analogous - colours next to each other
Complimentary - opposite colours
Dissonant - clashing colours (disgusting)
Triadic - three colours where any two are dissonant (and it looks good some how)

Sound
Earcons - synthesised sounds.
Auditory icon - natural noises.

Gulfs and Distances
Gulf of Execution - hard to do what you want to do in a system.
Gulf of Evaulation - hard to see what a system does.
Semantic Distance - distance between what you want to do and what the system actually does.
Articulatory Distance - distance between what you think a system does and what it actually does.

Affordance - expectations from the look of a system - a door with a handle you expect to pull

Analysis Techniques
    Brain storm - obvious - quick, easy - can go beyond problem space
    Card sort - label cards and group card together - quick, easy, in problem space - your interpretation might be different from anothers
    Persona - create a person on paper - easy, fast, give an idea of the users - may not be a good indicator of the systems users
    Scenarios - create a scenario of what could happen - fast, shows potential system flaws, allows an ease of use study - may not be a good indicator of what the users are using the system for

Interaction Styles
Command Line - CLI
Menu Based - iPod
Form Fill-in - Sign up sheet
Question and Answer - Windows install wizard
Direct Manipulation - drag and drop
Metaphors - Desktop, trashcan
Web Navigation - web nagivation...
3D Environments - Games, decent games
Zoomable Interface - Google Maps
Natural Language - Car GPS talk to you thingys

Human
Hearing 20Hz - 15kHz
Touch - Haptics - Reaction time depends on stimuli
Fitt's Law - Time taken to click a button - a + b binarylog(D/S + 1)
Memory
    -Sensory - moved to short with attention - visual = iconic - aural = echoic - haptic = tactile
    -Short Term - moved to long with rehearsal - 7 +-2 chucks of information
    -Long Term - little to no decay - overriden by interferance - uses:
    Semantic network - a tree

    Frame - data structure
    Script - walkthrough guide of assuming what happens
    Procedural - condition and action


 Reasoning
    -Deductive - if x then y - Foo wears shorts on Wednesday. It is Wedsnesday therefore Foo is wearing shorts.
    -Inductive - hypothesis therefore conclusion (generalisation) - I have only seen pink pigs therefore all pigs are pink.
    -Abductive - conclusion therefore hypothesis - Foo drives fast when drunk. I have seen Foo driving fast, therefore, Foo is drunk.

Errors
Slips - Knowing you should always be making probes.
Mistake - Intentionally stopping probe production to mass army

Standards and Patterns
Standards - cost money - ISO - you must follow
Patterns - free - guidelines



END:
Ok that's all I'm doing.
I hope you didn't actually read all of that.
If you are doing an HCI course this might come in handy.
Otherwise I will see you all tomorrow.
Phase One from this post should be happening today (15th).
Will report on that when the time comes.

cheers,
Milk

Wednesday, 22 December 2010

miNote

Problem:
University requires we keep some form of log book. Physical or virtual. As I am doing software a virtual one sounded good. Now, I'm not rich so I use Open Office. Compatibility and laziness meant I didn't want to use any word editting software like Microsoft Word or Open Writer. Using notepad is also pretty lame. Now I don't need to know all the crap I had written in earlier; don't need to correct spelling mistakes; CLI is fine; all I need is a time stamp with each post. Didn't want an online thing, like this blog, incase I couldn't get online when I needed it. So I decided to create my own note taking program.

tl;dr Need a program to take notes and timestamp.

Solution:
Decided to go with Java for this one. Just because I was using it at the time. This would probably be much better had it been written in C or something equiv. Since there is no need for high performance the language speed is irrelevent. I went with a basic CLI interface that logs each 'post' with a timestamp on an enter key press. Having seen a friend make a similar GUI version and struggle with clicking a button for each post, he was trying to include multiline posts, it seemed the CLI was a good plan. The posts are only timestamped if the times differ by more than a minute. This will probably be increased later on as up to the minute is a bit over the top for recording information in this case.

Code:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
 * @author Michael Standen
 * Saves my notes, with appropriate time stamp.
 */
public class MiNote {

 /**
  * @param args
  * @throws IOException
  */
 public static void main(String[] args) throws IOException {
  // Initialise things.
  Scanner scanner = new Scanner(System.in);
  System.out.println("Please enter the path of the notes file:");
  File notes = new File(scanner.nextLine());
  // Checks file exists.
  while (!notes.exists()){
   System.out.println("File does not exist. Create new? Y/N");
   if (scanner.nextLine().equalsIgnoreCase("y")){
    // Creates a new file with the name provided.
    if (!notes.createNewFile()){
     // Error in creation, get new file name.
     System.out.println("Error in file creation. Please enter new file path:");
     notes = new File(scanner.nextLine());
    } else {
     new BufferedWriter(new FileWriter(notes, true)).append("Created " +
       new SimpleDateFormat("(d MMM yyyy 'at' HH:mm z)").format(new Date())
       + '\n').close();
    }
   } else {
    System.out.print("Please enter the path of the notes file:");
    notes = new File(scanner.nextLine());
   }
  }
  // Success. Outputs the current date.
  System.out.println("Success. The current time is: " +
    new SimpleDateFormat("(d MMM yyyy 'at' HH:mm z)" + '\n').format(new Date()));
  // Write the opening date and time.
  new BufferedWriter(new FileWriter(notes, true)).append("" + '\n' + "Opened " +
    new SimpleDateFormat("(d MMM yyyy 'at' HH:mm z)" +
      '\n').format(new Date())).close();

  while(true){
   String line = scanner.nextLine();
   if (line.equalsIgnoreCase("q")){
    // Quits the program.
    break;
   } else if (line.equalsIgnoreCase("r")){
    // Outputs the entire file.
    readNotes(notes);
   } else {
    writeNotes(notes, line);
   }
  }
 }
 /**
  * Appends the note to the file and adds appropriate time and date stamp.
  * @param notes the file to be writen to.
  * @param line the String to be added.
  * @throws IOException
  */
 private static void writeNotes(File notes, String line) throws IOException{
  // Make the file writable.
  notes.setWritable(true);
  // Create the file writer.
  BufferedWriter writer = new BufferedWriter(new FileWriter(notes, true));
  // Create date variables to see if time stamp is applicable.
  Calendar now = Calendar.getInstance();
  now.setTime(new Date());
  Calendar edit = Calendar.getInstance();
  edit.setTime(new Date(notes.lastModified()));
  // Create formatter for the time stamp
  SimpleDateFormat formatter;
  // Appends the date if it is different then the last edited date.
  if (now.get(Calendar.DAY_OF_MONTH) != edit.get(Calendar.DAY_OF_MONTH)){
   formatter = new SimpleDateFormat("(d MMM yyyy 'at' HH:mm z)");
   writer.append("" + '\n' + formatter.format(new Date()) + ": " + '\n');
  } else if (now.get(Calendar.HOUR_OF_DAY) != edit.get(Calendar.HOUR_OF_DAY) ||
    now.get(Calendar.MINUTE) != edit.get(Calendar.MINUTE)){
   formatter = new SimpleDateFormat("(HH:mm z)");
   writer.append("" + '\n' + formatter.format(new Date()) + ": " + '\n');
  }
  writer.append(line + '\n');
  writer.close();
 }
 /**
  * Reads the file and prints the standard output.
  * @param notes the file to be read.
  * @return false if unable to read, true otherwise.
  * @throws FileNotFoundException
  */
 private static void readNotes(File notes) throws FileNotFoundException {
  // Outputs the file.
  notes.setReadable(true);
  Scanner scanner = new Scanner(notes);
  while(scanner.hasNext()){
   System.out.println(scanner.nextLine());
  }
 }
}


Notes:
CLI programming is cool. If someone has no idea what's going on, they will be impressed. Also comments are important. Remember that.