Hey all, I'm not gonna ask for help with code or anything. What I would like is some help with an idea for a project I have, it's for college. Basically the spec for it is: Design a new keypad for a phone, to type sms' with one finger, and to minimise the distance travelled by the finger. I don't really want to discuss my ideas for it on here, incase anyone from the course on this. I had a problem with that on another programming forum. So if anyone on this is willing to discuss the idea with me, I'd be grateful. PM me.

Cheers,
Mick

Recommended Answers

All 25 Replies

Oh yeah, and it is a Java implementation, just incase your wondering, the Java implementation isn't what I'm asking for help with.

This is not a programming problem at all. It's a user interface design problem, and if you have to build a prototype an electronics problem (though I guess you could build a simulator for it first as a proof of concept).

Solve it using pencil and paper, later making nice glossy pictures of it for your presentation in some graphics software like Photoshop.

Minimising the distance travelled by the finger would simultaneously increase the number of hits that you have to make with the finger. Frankly speaking, I don't think this project has any practical application, unless it is a compulsory question given for your homework.

well, new keyboards are constantly being tried for applicability.
For example Nokia fielded (and I think still sells) several phones where the numeric keys are situated in a circle around a central empty space.
This in theory makes it easier to use, faster to type. In practice it's confusing as it's non-standard (which is the problem with all innovative layouts of course), and takes up valuable space, thus making the phone larger than it could be for the same size screen and keys.

Yep thats true, i was working on that asppect of it, as far as i know those keyboards are standard letter lay out, ie 'abc', 'def', what I was thinking of doing was redesigning the letter layout according to the frequency of the individual letters in the english language?!? ie. e & t are the most common letters, so on the 5 key, middle of keypad, i would have ' ', 'e', 't' and then just work the keypad out around that, with the next most common combinations to the left, right, above and below, and then the least used combinations, on the diagonals above left, above right, below left, below right, and then the least used letters on the 0 key. Make sense?

There are many patents on this problem, just search in some patent sites.

patent isn't what Im looking for, I want to develop my own idea on it, and present my own stuff on it, not someone else's. Thx tho!

Make sense?

It makes perfect sense. But, as jwenting has said, innovative designs are confusing as they are non-standard. That is, your customers would take some time in being swift at using it and utilising the speed advantage you have given to them. So, people will be reluctant to use it. I hope I'm clear.

yeah, e.g take the computer keyboard, it could have such a better design but if they changed it, no-one would be able to type fast (thats why they based the keyboard on typewriter ones in the first place)

and typewriter keyboards ironically were standardised on a design that slows people down when typing in order to avoid technical problems in the construction of mechanical typewriters.
Initially every typewriter manufacturer had their own keyboard layout. This caused massive confusion among users so they called for standardisation.
Many of those layouts were designed to give a speed advantage to users, but at a price: the metal arms with the letters would often get tangled up during typing when specific keys were typed in rapid sequence (due to their relative positions).
The current layout was decided upon in a study which designed the layout in such a way that keys people need together frequently are positioned such that they'll never cross each others' arcs when used from a mechanical typewriter, while at the same time slowing typing down by increasing the distance the fingers have to travel between letters to make entanglement of the mechanics of the typewriter even less likely.

After a hundred years or more of this layout, everyone has it in their fingers (no pun intended) and changing it is very hard.
There are experiments but they're no more than niche markets, just as they weren't successful in the typewriter era when most of those alternative layouts were thought up (though not all, there are some layouts people have thought up that are impossible with a mechanical structure).

commented: Hopefully this will be the last time I see a sentence beginning without a capital letter! -2
commented: whats with the neg reps +21
commented: Don't tell people about alternative layouts. -1

Who gave a negative reputation for this response?

Anyone should be thankfule to read it, as it explains a lot about the problem.

My God, some people are just not sensible.

who do you think? It's lardmeister, the guy's on a personal vendetta against me after I deleted a post in which he called me a Nazi and a personal friend of Heinrich Himmler...

commented: There. Get a little back. ;-) +4

i know, its going too far.

who do you think? It's lardmeister, the guy's on a personal vendetta against me after I deleted a post in which he called me a Nazi and a personal friend of Heinrich Himmler...

I didn't know about this (I must be blind or something ;-) ). But, sad, just sad.

i saw it

there was definately the phrase "your nazi buddies" used

Wow, little bit off topic there lads, and ladies (?) , thanks for the help... Heres the actual Project Spec:

This is the most challenging option and should be carefully considered before being chosen. Design an
optimum letter-number assignment on a mobile phone keypad which minimises the movement of a
single finger used to write text messages. You should include minimum distance paths in your
research. As it is unlikely that a complete implementation is possible within the suggested time, a solid
design, or exploration of solutions and partial implementation (i.e. implementation of one or more key
components) is likely to gain full marks.

Does that make it any clearer what I'm trying to do?

Again, all your advice is seriously appreciated.

I didn't know about this (I must be blind or something ;-) ). But, sad, just sad.

You didn't see it because it happened in a thread in the Geeks Lounge and whatever disagreements or rep slinging that happen there have no business in the technical forms.

OK. You chose an assignment which has little to do with software and a lot with hardware.

At most you can try to simulate hand movement during the typing action, thus trying to find a layout that minimises such movement for commonly used phrases and words (keeping in mind that phones are marketed worldwide and thus you will need to ideally keep many languages into account).

Yeah,i its really a good idea

This is a Data Structures and Algoritms through Java assignment!!! :D

if it is it's an extremely poorly conceived assignment as it has very little to do with data structures, algorithms, or Java.

I never said it wasn't lol, the lecturer's a joke. But still it has to be in Java, so.....

I'm assuming that he is wanting you to treat the problem like a minimum spanning tree over a weighted graph. Assigning the inverse of the key frequencies as the weights might give you something to go on if you can find any statistics on the grouped key frequencies.

(This may be of use also: http://en.wikipedia.org/wiki/Bigram)

Thanks I'll have a look at that later hen I get home, here's what I have for now, just a prog to analyse the frequencies letters of a text file, and a Letter data type, which holds a letter and its frequency, I can kinda see it coming together in my head at the same time!!!

FrequencyAnalyser.java

import java.util.Scanner;
import java.io.*;

public class FrequencyAnalyser
{
      //Dictionary found: http://java.sun.com/docs/books/tutorial/collections/interfaces/examples/dictionary.txt
      //291/11/07 15:15

   Scanner in;
   String alphabet;
   double letterCount;
   double [] letterFrequency;
   Letter [] letters;
   
   public FrequencyAnalyser( )
   {
      in = null;
      alphabet = "abcdefghijklmnopqrstuvwxyz ";
      letterCount = 0;
      letterFrequency = new double [27];
      letters = new Letter [27];
   }
   
   public FrequencyAnalyser( String fileName )
   {
      try
      {
         in = new Scanner( new BufferedReader( new FileReader( fileName ) ) );
         alphabet = "abcdefghijklmnopqrstuvwxyz ";
         letterCount = 0;
         letterFrequency = new double [27];
         letters = new Letter [27];
      }
      catch ( IOException e )
      {
         e.printStackTrace( );
      }
   }
   
   
   /**
   * Counts the letters in the supplied text file.
   */
         
   public void countLetters( )
   {
      while ( in.hasNext( ) )
      {
         String temp = in.next( );
         for ( int i = 0; i < temp.length( ); i++ )
               letterFrequency[ alphabet.indexOf( temp.charAt( i ) ) ]++;
         if ( in.hasNext( ) )
         {
            letterFrequency[26]++;
            letterCount++;;
         }
         letterCount += temp.length( );
      }
   }
   
   /**
   * Calculates the frequecy of the letters read from the text file.
   */
   
   public void calculateFrequency( )
   {
      for ( int i = 0; i < letterFrequency.length; i++ )
         letterFrequency [i] = ( letterFrequency[i] / letterCount ) * 100.0;
   }
   
   /**
   * Populates a Letter array with the letters read and their respective frequencies,
   * and then sorts them according to ascending frequency.
   */
   
   public void assignLetters( )
   {
      for ( int i = 0; i < letterFrequency.length; i++ )
         letters [i] = new Letter( alphabet.charAt( i ), letterFrequency [i] );
      Letter.sort( letters );
   }
}

Letter.java

public class Letter implements Comparable<Letter>
{
   public char letter;
   public double frequency;
   
   public Letter( )
   {
      letter = ' ';
      frequency = 0;
   }
   
   public Letter( char _letter, double _frequency )
   {
      letter = _letter;
      frequency = _frequency;
   }
   
   /**
   * Checks whether or not this Letter precedes another Letter, based on it's alphabetical frequency.
   * @param another The letter to check against.
   * @return -1 If it does precede another.<br>0 If they are equal.<br>1 It this letter is greater than another.
   */
   
   public int compareTo( Letter another )
   {
      if ( frequency < another.frequency )
         return -1;
      else if ( frequency == another.frequency )
         return 0;
      else
         return 1;
   }
   
   /**
   * Returns a String representation of this Letter, notifying the user of this Letter's frequency.
   * @return The String representation of this Letter.
   */
   
   public String toString( )
   {
      return "The letter " + letter + " has a frequency of " + frequency + "%.";
   }
   
   /**
   * Sorts an array of Letters, according to increasing frequency.
   * @param letters The array of Letters to be sorted.
   */
   
   public static void sort( Letter [] letters )
   {
      for ( int i = 0; i < letters.length - 1; i++ )
         for ( int j = i + 1; j < letters.length; j++ )
            if ( letters [i].compareTo( letters [j] ) > 0 )
               swap ( letters , i, j );
   }
   
   /**
   * Swaps the specified Letters around in a Letter array.
   * @param letters The array of Letters in which two Letters are to be swapped.
   * @param i The index of the first Letter to be swapped.
   * @param j The index of the second Letter to be swapped.
   */
   
   private static void swap( Letter [] letters, int i, int j )
   {
      Letter temp = letters [i];
      letters [i] = letters [j];
      letters [j] = temp;
   }
}

Im back again!!! Right my frequency analysis program works. So based on this, I have a Button class that takes an [] of letters, and assigns them to a [][]. Now my frequency analysis works, and based on simple testing my redesigned keypad does actually works on average of 1/8 the distance :D!!! Now I just need to figure out a way of searching the buttons properly! Any ideas, I was thinking of using Huffman encoding?!?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.