Keyvan Nayyeri

Musings of a Ph.D. student in Computer Science

The Vision of an Educational iPhone Application

In the first post of this series I wrote about the educational project that we’re going to build on top of the iPhone/iPod Touch platform for our graduate Software Engineering class and gave a quick overview of the elements of iPhone development.

An infancy of our project was to choose a good idea regarding the requirements defined by our instructor and some other requirements that we had in our team. In this post I’m going to describe this idea and different aspects of its implementation in regards to the educational nature of this project.

Overview

We formed up a group of four students for this project. Apparently, we didn’t know each other and were not aware of the level of knowledge and experience of other team members. Our instructor, Dr. Shonle, requested us to work on the idea of this project after putting some general requirements on what we can do. We also had our own limitations as individuals and as a team. This part of the project was a critical part because we had to be careful and choose an idea that can meet the requirements and can be implemented in a timely manner with the effort that we could put into that.

Requirements

We had two types of requirements: those imposed by our instructor and those imposed by our internal limitations.

Our instructor had defined the following limitations for our project:

  • Do not implement games unless they are educational.
  • Do not implement projects that need to maintain a third-party server.
  • Do not implement any idea that can be implemented as a single web-page or as a spreadsheet. Basically, this implies that we have to avoid some regular data-in/data-out ideas.
  • Implement your project in an incremental approach, that is, build a simpler core and then add additional features as time goes.
  • Implement your project as a team by splitting the work into smaller modules.
  • Deliver the project by the end of the semester by documenting everything as weekly blog posts to share your knowledge, experiences, resources, and tips.

Besides, we had our own limitations as individuals or as a team:

  • We are all novices in iPhone development and Objective-C. Choosing an ambitious idea could be challenging in the limited time that we have.
  • Initially, we’re not aware of the availability of third party libraries and different APIs provided in Cocoa. For example, choosing an internet-based idea could become tricky as we had no idea how powerful the built-in APIs are in helping us to implement the networking/communication aspects.
  • As graduate students, we have many responsibilities and we have limited time to dedicate to this project. This is one of the aspects of the Software Engineering knowledge that we have to earn in this class.
  • The idea chosen had to be familiar to everyone in the group because we didn’t have time to spend on learning the idea, itself. For example, we could work on a Twitter client or a MetaWeblog API implementation but these could involve learning the idea itself, and even learning some other concepts.
  • We also came to the agreement that it’s better to avoid using databases in our project because it could enforce us to learn new stuff as well.

Ideas

Having the abovementioned requirements in mind, we decided to share our ideas and describe them, so each team member submitted an idea to our internal Wiki. We received eight ideas:

  • Secure PIN: Applying the concepts introduced in another graduate class, this provides a more secure and alternative mechanism for authorization of users to login to their device. The default PIN is not very secure and everyone watching the owner of the device can get the PIN code and use it.
  • Reverse Polish Notation calculator: The basic idea is to implement a calculator using the postfix notation.
  • 3D Tic-Tac-Toe game: The implementation of Tic-Tac-Toe game in 3 dimensions that requires some tricks in Data Structures.
  • Instant Messenger: A simple open source instant messenger.
  • Step Counter: A helper tool for patients or weight watcher to monitor their steps.
  • Programmable Time Schedule: An scheduler to assist the person to manage his timetable with reminders.
  • Medicine Database: A quick reference of medicines by symptoms so the user can enter the symptoms and get the related medicine.
  • Contact Reminder: A tool to display reminders regarding different tasks and events for some contacts such as birthday reminders.

We discussed pros and cons of each idea and nominated two ideas for our project: Secure PIN and Reverse Polish Notation calculator.

The Secure PIN had a sweet and noble idea that had a good level of flexibility and had a very sweet nature that could replace the default PIN authentication mechanism in iPhone/iPad Touch but the implementation of the user interface and algorithm could become challenging somewhere in the middle. Fortunately, one of the team members had implemented this in C# as a Windows Forms application but we had no idea how difficult it can become if we try to implement the same APIs in Objective-C with Cocoa. One drawback for this idea was that it’s very difficult to replace the default PIN mechanism in iPhone operating system, so the idea couldn’t become practical.

The Reverse Polish Notation was a straightforward idea that was known to all team members and all the team members seemed to have a good level of knowledge and background to understand and implement it, and we couldn’t find any major drawback for that except the fact that there were many other calculators with different implementations available for the platform.

One advantage of this idea was its nature to be split in different modules to be implemented by different team members. This was an important point for our course.

Reverse Polish Notation

The Reverse Polish Notation (abbreviated as RPN) is one of the common notations used in mathematics and Computer Science to represent mathematical expressions. RPN uses a postfix notation for expressions to evaluate them. In some circumstances, this notation is handy in calculating mathematical expressions.

This notation is common in Data Structures and many other aspects of Computer Science such as Programming Languages and Compilers. The basic idea is to push operands in a stack and pop them to apply an operator to them.

How Does It Serve the Community?

First we have to define the community that this application serves to. This community can be either as wide as all iPhone/iPod Touch users or as limited as the group of developers interested in learning the programming for this platform by reading examples and codes.

As a calculator, this idea can be helpful for those who want to use the Reverse Polish Notation in their calculations on iPhone and this is the practical aspect of this idea.

As an educational project that may be released as an open source work, it can help others learn some aspects of iPhone development by reading the code. This project is specifically a good showcase of data structures implementation in Objective-C and iPhone.

Points for Future Expansion

One of the advantages of this idea is that it can be started as a simple core by implementing arithmetic expressions and then can be expanded in an incremental manner to have other mathematical operations and/or memory storage features.

Modules

This project can be broken to smaller modules in various ways, but one of the simplest and most straightforward ways for our group was to divide it in the following modules to be assigned to our group members:

  • The user interface
  • The stack display
  • The stack and its management
  • The calculation engine

This is a very good separation that can help our team members work on their assigned parts individually and then combine them in a single application easily.

Prototype

We built an initial prototype of a horizontal user interface for this system.

Prototype

Basically, the user interface consists of two half: the left half is the user input area to get numbers and operators, and the right half is the output area to show the stack and the result of calculations.

Implementation

Hopefully, we start implementing this project this week and we will use a source control system along with FugBugz as our bug tracking software. Our plan is to build and test our initial modules then combine and test them as a whole. After that, we are going to expand these core features by adding the future expansion points described above.

8 Comments

Fahrenheit Marketing is your resource for Search Engine Optimization in Austin.

Pingback from Dew Dump - February 16, 2010 | Alvin Ashcraft's Morning Dew

Keyvan Nayyeri
Feb 22, 2010 5:10 PM
#
Trackback from Deployment Process of an iPhone Application.

Keyvan Nayyeri
Mar 19, 2010 8:38 AM
#
Trackback from Getting Started with Xcode IDE for iPhone Development.

Keyvan Nayyeri
Apr 08, 2010 10:14 PM
#
Trackback from Functional Specifications of CrunchTime.

Keyvan Nayyeri
Apr 19, 2010 3:13 PM
#
Trackback from An Overview of Objective-C - Part 1.

Keyvan Nayyeri
Apr 30, 2010 10:33 PM
#
Trackback from An Overview of Objective-C - Part 2.

Keyvan Nayyeri
May 03, 2010 12:42 PM
#
Trackback from An Overview of Objective-C - Part 3.

Keyvan Nayyeri
May 06, 2010 10:42 AM
#
Trackback from CrunchTime - Concluding Remarks.

Leave a Comment





Ads Powered by Lake Quincy Media Network