For the first phase of our project development, we excluded the connectivity of our SNS to other SNS. However based on our project vision, this is defined in our plan.
By use of Facebook API, we would like to bridge our SNS to Facebook allowing students to find their Facebook friends in SOTON Student Connect system. Also, we would like SOTON Student Connect users to be able to post their activities in our system in Facebook system.
We would like to connect our system to Twitter allowing users to interact more with their friends.
We also want to connect our system to some other RSS and news server in order to import relevant news for users.
If we had enough permission from the University of Southampton, we could connect our system to resources of university such as iSolution or SUSSED. In this Mashup, we could also import notes of all modules to academic section of our website providing an area for user to put their own personal notes on course materials and allowing other students to see those notes and interact more. At first, this was our vision. However we noticed that this is not possible.
First of all, we considered MVC architecture in our system. View layer is separated from logic layer and we have a complete separate POJO classes to model the domain. Furthermore we have a database controller in order to connect to the database.
For our database, we decided to choose MySQL Server as it is both easy and powerful database server. It integrates well with Java, our programming language, and performs very well on web-based systems.
We choose Java for our programming language. The reason of choice is that we have portability defined in our non-functional requirements so we did not want our system to be depended to an operating system. Java has a lot of resources and as the team members were familiar with Java, we did not have any problem in this aspect.
In this post, I would like to highlight some of the implementation features of the application:
I have used a MVC architecture to develop the application in Java Programming Language
Controller layer was implemented via Servlets and the database controller is pure Java with the help of POJO classes
For data storage and retrieval, I have used MySQL Database server
I also did feasibility study in order to make sure this project is feasible and then implement this project. By domain analysis, interviews, and questionnaire, we extracted a list of functional and non-functional requirements. Feasibility study shows that this project is feasible regarding the time we have.
I would like to draw your attention to a demo from some parts of our system:
As specified in the project schedule, I implemented the Search module and Public Profile Module:
Search Module: This module is very crucial to our domain as the users can find their friends via this module. This module is in its first cycle and hence it only supports limited features. However the goal of this module is the user will enter a search query which might be anything related to our domain. The system gets the search input and will retrieve all the related entries in the database and shows them in a central space. This can be anything such as other users, accommodation, field of study, study threads, groups and events, and others.
Public Profile Module: Public profile module is in its first cycle and also supports limited features. The user clicks on another user’s public profile page link which he finds by searching, navigating, or that user is in his friend list. After that the system will show the public profile page of that user.
Although these two modules should improved in order to meet our requirements, in this stage, they seem to be sufficient. So, I will just finalize that and apply them to the whole system and I will start working on other modules. Later in the project cycle, I can come back and add other features.
Furthermore, all the pages have been improved. For instance, all the codes that were required in all pages, have been moved to another public page and in those pages that I need them, I included that public page.
As specified in the project schedule, I worked on Accommodation Module and it is now finished.
This module needs more work. Specifically, I have to add ranking and photo abilities later.
This module is able to:
By entering into this module, the user is able to see a list containing all the accommodation of the University of Southampton and their address.
Then, they can choose either to see more photos, ranks, or reviews. They first two options have not implemented yet and I will work more on them later.
The review section is finished. The user is able to read all the reviews of accommodation.
At the moment, and mainly because of time limitation, the user is unable to edit or add anything and he is only able to read information. For instance, in this module, the user is able to read reviews or accommodation detail information. I decided to first focus on reading of materials and then add editing and writing section to all modules. For now, we do have sample data in our database.
But what’s good about this approach?
This approach will help us to design and implement the system very rapidly and then show it to our users and get updates and feedbacks. Furthermore we can ask their opinions throughout the work. This approach seems to be more rapid and we can design and implement the system quickly. After we get the final approval of users, I will add the editing and add features so they are able to modify information.
Now about the next module. I would like to work on search section and viewing friends profile as these two seems to be the most important thing in a successful social site. I have to think about whether the system is going to have two different kinds of profile (one for the user himself, and the other one which could be like a public profile). If I go with the second approach, later in the project life cycle, I can add security module easier. For instance I can have a trust module in which the public profile would be dynamic to different friends and people.
The implementation phase has been initiated a few days ago and I am following our use case and database schema in order to develop our social networking web-based application. These days, I have worked on profile module and was able to implement the following sections. One good thing about this system is flexibility, adaptability, and scalability. Whenever a change is necessary, or there is a need to add something else, the system is really flexible.
For now, a simple login mechanism has been implemented. The user will provide her username, password, and university email address in order to login into the system.
Almost all sections of this module have been implemented:
Friend Section: User is able to see all his friends, and when they form a friendship.
Accommodation Section: System notify the user where he currently lives.
Previous Education Section: User is able to see his previous educations.
Currently Education Section: User is able to see his current field of study and all his modules.
Friend Request Section: This section notify the user about friend requests he has and also the requests he has sent to others.
Message Section: This section shows all the messages that the user has
Tricky ones (Hardest ones)
Event Section: This section notify the user about the events he is going to participate, and all the events that he has been invited to.
Group Section: System will notify user about all the groups he has created and all the members of that specific groups, all the groups that the user is in, and all the groups he has been invited to.
Thread Section: This might be the trickiest one in this module. System will notify the user about all the module threads he has created, all the answers other people have posted for his question, and all the threads that user has participated in.
I am going to focus more on other modules. The next module will be accommodation.
These modules and their sections are basic and play like notification. However as the fundamentals have been implemented, the rest will be easier.
Through the implementation of profile module, I asked my friends’ opinion and I considered their opinion as well. Fortunately, due to earlier considerations (the database, the use case, the code and etc), it was so easy and flexible to consider their opinions and there was no need to change something. It was like add more features to a module.
We have a long way to go, however we truly think this system is able to help the University of Southampton and the students in their social and educational life.
Now that we have our final version of database and it is in MySQL Server Database, we can start coding. We decided to choose Java Enterprise Edition and implement a web-based system with JSP and Servlet. We will also use different libraries and tag code as necessary which we will note later.
The implementation will be followed base on a roadmap which we will upload it shortly. The first section of this roadmap is user registration. As we noted earlier, there will be no normal registry form like other websites because the user will login into her account by her university email address and a chosen password. However, after she logins into the system, and only for the first time, she has the opportunity to enter her personal information into the system. This registry process consists of nine steps which helps her in the process. After the system acquires the information, the user will be redirected to her own personal page in which she can see her profile and personal information.
This nine step process has been implemented and works fine in acquiring information (with some minor difficulties which will be solved later).
We investigate about the domain and our use case diagram and we come up with a general schema of our database which we published the result and the schema in previous posts. We decided to choose MySQL Server database as our main database. The main reasons are following:
However, we are concerned about followings which MySQL Server seems to have short-commings:
We generate all the SQL codes necessary to have our database and import them in the MySQL Database Server. We consider all the primary keys and data types as well. However there are some improvements that we can consider them later, such as:
One of the tables which are responsible for storing user personal data has way too many columns and all the focus are on this table which is like a main table with a lot of links. Later in the way, we can divide this table into two tables. Half of columns will go with table 1 and the rest will be stored in the second table. We could also mirror the table and store records in more than one table ordered alphabetically.
We do not consider index in our SQL code which might be essential later for the sake of performance and search speed. Later, it would be a good idea to add index to all tables.
This document, Idea Development Version 2, is available to download from DropBox. In case of any modification, please update all the versions. You have to update word document, PDF document in DropBox Folder and Also this post.
By: Amir Sezavar Keshavarz
Idea Development Document – Version 2
After our meetings with our mentor and different group meetings, we agree upon the problem domain and what we are going to do exactly. We did all the review literature and we checked some relevant similar project in order to see how they propose a solution and whether we can any weakness there.
After that, we started working on different sections such as Questionnaire, Prototype Design, Use Case, and Database Design. At this stage, we have a good overview of the structure of the system. The following diagram depicted our first general architectural diagram:
The first thing we did and agreed was the distinction between 3-Tier and 3-Layer Architecture. Tiers indicate a physical separation of components on the same server or multiple servers, but layers refers to a logical separation of components, such as having distinct namespaces and classes for the Database Access Layer (DAL), Business Logic Layer (BLL) and User Interface Layer (UIL). Therefore, tier is about physical separation and units of deployment, and layers are about logical separation and units of design. Due to estimated future use of this system, we decided to develop our system in different tiers so later load balancing, request-response management and database transaction would not be a problem.
We have three different tiers here:
Topmost level of the application
Communicates with other tiers.
Technologies involved: HTML, CSS, jQuery, Ajax
Controls an application’s functionality
Detailed data processing
Technologies involved: JSP, Servlet, Tag Libraries
Stored and Retrieved
Keeps data neutral and independent from application servers or business logic
Improves scalability and performance.
Technologies involved: MySQL, Hibernate
In next diagram, and in the next Idea Development document, we will be more specific about the details of this architecture so later we have a bright road map. We will be also more specific about the future technologies that we are going to utilize in this project.
This document, Tools and Technologies, is available to download from DropBox. In case of any modification, please update all the versions. You have to update word document, PDF document in DropBox Folder and Also this post.
By: Amir Sezavar Keshavarz Dropbox allows us to sync our files online and across all resources and documents. We have over 2GB of online storage for free and we can sync our files.
Also file sharing is very simple in DropBox. By sharing folders in DropBox, we can collaborate on the same files and access to everyone’s works. Furthermore we can see all the changes instantly and there is no manual need to update anything. We created a public folder and put all our documents and resources there. By doing this everyone can see all the resources, modify them and add to those shared files.
DropBox has both web and desktop access.
Another tool that we use almost every day is Facebook. We created a group in Facebook and in this group we share our thoughts and any problems that we encounter. Besides all the meetings with our mentor and other meetings with each other, this group in Facebook helps us a lot in improving the project.