Wednesday, 11 May 2011

Final Year Project - Completed

Unfortunately I was unable to keep on top of blog writing and my project recently and so the blog writing had to stop. On the plus side, having now almost completed my degree I will hopefully aim to write several posts relating to:
  • User authentication;
  • Password Encryption;
  • How to use drag and drop (so that you don't have to go through the pain I did!).
Due to my project not actually being my own property, I am unable to publish my report myself or my work online: but, that's not to say I won't refer back to my original sources.

During my final year at University, I also picked up some knowledge of how to incorporate 3rd party API's into web applications. I also plan to write a couple of blogs about the benifits of doing this. Also how it can be done, and what I personally used it for.

Tuesday, 14 December 2010

Research into technologies that could be used

Once research had been conducted into existing systems and behaviours of the new system identified. The next step was to research and identify technologies and languages that could be used to easily create a system which met the requirements outlined.

It was necessary to decide on: a server-side language; a client side scripting language; a version of HTML to conform to; a version of CSS to use.
Server-side language:
I chose to use PHP as it is: free to use; compatible on most web servers including MS; familiar to myself as I have used it before. During the beginning stages of development the university only employed an Apache web-server, thus not being capable of supporting ASP .NET.

ASP .NET
This language is only usable on a Windows web-server (IIS), therefore requiring MS licences which could incur additional costs.


Client-side language:
Javascript
Compatible with all main browsers and platform independent. An obvious choice for most web-developers.

VBscript
Only compatible with IE making any code written restricted to IE and Windows based machines

HTML:
HTML4: Finalised standard and supported by all browsers.

HTML5: The HTML5 standard at present is not finalised (due to be finalised in 2020) and is still undergoing updates and not all browsers support all features. The latest versions of all major browsers support the majority of features outlined in the draft specification of HTML5. New features of HTML5 include the support of localstorage, drag and drop among a few.

CSS:
http://webdesign.about.com/od/css3/a/differences-css2-css3_2.htm
CSS2:
Most features supported by all browsers. However some browsers behave differently with certain properties.
CSS3:
Standard still being developed, not all properties supported by older browsers, most recent releases of popular browsers support most features. Some browsers require a pre-fix to a property to insure it is recognised and handled correctly.

To conclude, I have chosen to use; PHP for the server side scripting language; JavaScript for the client side scripting language; HTML5 for the HTML due to new features may provide helpful; CSS3 as it allows for the creation of improved visual effect, and many browsers that support HTML5 will also support CSS3.

Research into exsisting systems

Once the decision had been made to undertaken based on the idea mentioned in my previous post. It was only logical to begin researching into existing systems that performed the same/similar functions as my app would.

I began by considering products that I was already familiar with. Such products included:
  • Google Wave
  • Google Docs
  • TreePad
  • Microsoft OneNote

I then began to search the internet for products that performed the same/similar functions that I was not aware of. This searching revealed a couple of products that companies had produced.

After using some of these products to get a better understanding of the way they performed certain actions that I believed may be useful in the development of my app. I began to draft an outline of the requirements I would want my app to meet. This was divided into, functional and non-functional requirements.

Functional requirements:
  • Save edits to a note in real-time
  • Display edits to a note in real-time when being viewed
  • Display the data a tree structure with a node at the end of a branch storing the data
  • Store the following properties for each note: title; creator; contributors; date created; date last modified
  • Store the users log-in details
  • Keep a user logged in until log out selected
  • Provide a method for a user to view all of their note’s
  • Allow for notes to be sorted by a property of the users choice
  • Allow for the user to choose to open notes in a new window/tab or the same window
  • Prompt the user to enter the notes properties when creating a new document
  • Allow for the owner to view or edit the properties of a note from the main window
  • Allow for notes to be viewed by selected other users
  • Allow for notes to be edited by selected other users
  • Handle multiple users attempting to edit a note simultaneously
  • Allow for images etc. to be uploaded as part of a node to a note
  • Allow for a list of links to be saved as part of a node
  • Allow for links to be made between two nodes in addition to those between the node and its predecessor
  • Allow for a node and its successors to be moved to another node

Non-functional requirements:
  • Not store the users password in clear text
  • Not allow unauthorised access to a document
  • Be accessible from the web
  • Be independent from: Device; Browser; Platform
The next stage of the project was is to research technologies and languages that can be used to best implement "the artefact".

Final Year Project

This post and many preceding it will discuss my final year project undertaken in 2010.

The purpose of these posts will be to document the steps I have undertaken, problems encountered and steps taken to overcome.

The first stage of the project was to decide on a broad topic my project would be about, as the technology world involves rapidly, not just hardware but software as well. The world is becoming "more connected", most of us walk round carrying not just a phone but a smart-phone, we are connected to the internet almost 24/7.

Because of this always connected way of living, the web is starting to develop to meet a greater need. I am inspired by this and wanted to develop a better understanding of existing technologies, and new technologies that are being developed at present. For this reason I decided to pick a web based topic.

After this decision had been made, I had to pick a specific idea, to reach this decision I trawled through ideas recommended by lecturers at my university until I found one that caught my eye.

"Treepad/Hyper-pad/Webpad (some possible names for the idea) [Project identifier kit.lester_104]

A program (combined editor and viewer) for taking and organizing notes.

When I'm collecting and classifiying information, in preparation for writing (say) some course notes, I need to collate all sort of scraps, and organize them. Usually, I want to organize them as a tree, with each node of the tree being a list of items, each item being either text or a sub-node. I often need to move information (= a subtree) easily from one node to another. Sometimes I need cross-links that go beyond the tree structure. The sort of dynamic navigation found in MS-Windows "favourites", or Netscape/Mozilla's booklists would be one possible organization, though adding to the organization would need to be much easier than those examples.

No doubt many of you have had the same need when preparing essay-type courseworks.

Just such a program, on it's own, would be a limited project topic, lacking the scope for a high grade: the degree-worthiness would come from extras. A very obvious "extra" these days would be making the resulting notes file available on the web: with the file in html or xml, browsable (read-only) and directly editable on the web. That last issue would imply "protection" issues, to ensure that two clients do not get into a mess by trying to edit the same part of the same notes at the same time. Other degree-hard "extras" could be imagined.

All that to be done with a nice windows interface. Ideally, platform independant."

http://userweb.port.ac.uk/~lesterk/projects/index.html

I chose this idea as it would allow for the creation of a web app with possibilities only limited by the time I have allocated, and the limitations of the languages I planned to use.

The next stage for the project was to research into existing products that performed a similar task