Final Report - discolemur/biobrainstorm GitHub Wiki

Names: Taylin Anderson, Ryan Hillary and Nick Jensen

Date: December 11, 2014

Instructor: Dr. Zappala

Document: Final Report

Regarding our website: biobrainstorm.com

-Description-

With the increased emphasis on genetic analysis, next generation sequencing and the continuing curiosity about how living things function and operate there has been a sharp rise in the need to analyze the data these scientific pursuits generate. In the growing field of bioinformatics there are thousands of methods to generate and understand electronic genetic data and information. Each year the algorithms become more sophisticated, new ideas arise, and more efficient methods to process genetic data motivate new programs and software. The purpose of our website, biobrainstorm.com, is to provide a forum dedicated to bioinformatics and the many questions that can and will surface as we move forward in studying biology and its many facets. The website serves each client who has questions and would like to see if other scientists have posed the same questions.

The main page is simple, introducing the user to a search bar.

Even without signing in, the user may search and browse all questions. Curious users may read about the website, on the /about page. Distraught users may send comments to the developers on the /contact page. Unfortunately, our server ignores these comments.

To access the posting features of the website a user must create an account. All that is needed is a username, password and a email address.

To sign in the user must provide a valid username and password. Various error and stupidity checking occurs as a user signs up and signs in.

The user may type a keyword into the search bar and a list of question threads that contain that keyword will be displayed. With complete functionality, the user would be able to click on the question title and see what other individuals have been saying about it. A signed in user may delete his or her own posts.

If the user wishes to ask a new question they can simply write a new question. What is required is a question title, keywords that generalize the subjects and topics of their particular question, and the message body of their question.

With full functionality, a signed-in user would be able to comment on a question thread.

There are many ways to solve a particular problem, some may be better than others. If the user agrees with a given question or response and found it useful they can vote for the question. Likewise if the user disagrees with a given question or response the user can also down vote a particular suggestion with the voting feature. Voting is a feature that we almost completed, but never quite surfaced on the front end.

-Database Schema-

We decided to use MongoDB as the method of storing our websites information. We found it effective to use its document based methods to be ideal for our particular needs. To store the data we used two different Schema models, one stored the user’s information while the second schema stored the questions and responses. The two schemas used to store the information are displayed below:

The messages schema was designed to serve both the question and response documents to be stored in the database. The username is used by both the questions and responses and displays the username of the individual who authored the question/response. The tagTopics variable allows the user to provide single word topic words, like biology, c++ or Illumina so that other users can identify what is being addressed in the question. The tagTopics variable is used only by the question type and is empty for responses. The title variable is used only by question types to allow the user to provide a condensed statement of what the question is about, or can be used to display the general question at hand. The messageType variable stores the entire body text of the user as they elaborate an go into detail in explaining the question or problem they are experiencing, or if the user is providing a response the messageBody variable stores the users suggestions and instructions on how to possibly resolve the question at hand. The associatedIds variable is unique in that it serves both the Question and Response types. For the question type the associatedIds stores the ID’s of the responses to that question so that the reponses for the given question can quickly be accessed and displayed. For the response type the associatedIds variable stores solely its parent question’s ID. The voteNum variable stores the current votes the question/response has received.

var messageSchema = new Schema({ userName: String, tagTopics: [String], title: String, messageType: String, messageBody: String, associatedIds: Array, voteNum: Number });

The user Schema is simple. It stores the information related to each user, namely their given username, password and email address. The username and password are queried when a user logs in.

var userSchema = new Schema({ userName: String, passWord: String, emailAddress: String, });

-Future Work-

Current functionality provides signing up, signing in, posting, removing posts, and searching. We had planned to add commenting and voting, but were not able to finish those components. We had added ssl security, but we removed it when Firefox kept complaining about self-signed certificates. In the future, we could get a properly distributed ssl certificate from a CA for the site. We also were actively working to implement the response feature of the website, thus allowing users to respond to the questions asked.

Since the features we have implemented are quite basic, we recognize that further effort may enhance the user experience and provide a more robust service. We had planned to develop the user profile, providing a reputation measurement of a user's performance in answering questions. This would use voting stats to determine the amount of up votes or down votes a user's posts have received. Typically if a user has a good reputation, their recommendations and advice can carry more weight vs an individual with a low reputation.

Another feature that we wished to implement was a more friendly home screen, complete with images of biological research and a small, perhaps one-line, daily news post about current experiments and studies being conducted in the world of bioinformatics.