Skip to content
This repository has been archived by the owner on Jan 21, 2025. It is now read-only.

Commit

Permalink
Merge branch 'develop' of https://github.com/Derkje-J/programming-life
Browse files Browse the repository at this point in the history
…into develop
  • Loading branch information
SleeplessByte committed Jun 15, 2013
2 parents cbd08a6 + 6ccab47 commit 9aee385
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 25 deletions.
30 changes: 17 additions & 13 deletions docs/deliverables/ead/Emergent Architectural Design.tex
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@

\subsubsection{Views and ERB}
The views are in ERB\cite{erb} which is an HTML template system. It comes with the Rails framework, so it does not require any extra software. Rails controllers written in Ruby can expose data to these views. Using a templating system such as this allows for quick translation from model to display.
\begin{figure}[htb]
\begin{figure}[h!]
\begin{center}
\includegraphics[width=\linewidth]{SequenceDiagramLife.png}
\caption{Sequence Diagram}
Expand Down Expand Up @@ -126,54 +126,58 @@
\subsubsection{Models}
\begin{figure}[htb]
\begin{center}
\includegraphics[scale=0.675]{models.png}
\includegraphics[scale=0.95]{models.png}
\caption{Client Models}
\label{fig: cmodels}
\end{center}
\end{figure}
In the figure above you can see the model classes. Each JavaScript class maps to one ModuleTemplate and associated ModuleParameter entries on the server. When a cell or module JavavaScript class is instantiated, it can save the instance data as ModuleInstance and associated ModuleValue entries on the server.

\clearpage

\subsubsection{Views}
\begin{figure}[htb]
\begin{figure}[h!]
\begin{center}
\includegraphics[scale=0.675]{views.png}
\includegraphics[scale=0.55]{views.png}
\caption{Client Views}
\label{fig: cmodels}
\end{center}
\end{figure}

\clearpage
In the figure above there are two basic types: Raphael or HTML. All views can have children and display a single model. Raphael typed views use SVG to display their contents. The views only have display functionality. They do not add interaction. Each view keeps track of changes to the displayed module. Through controllers, views can interact with the models. This is explained and displayed later on. \\
To keep the figure above from cluttering, a few associations are left out. The Module view has a ModuleProperties popover and Cell, Main and Module views have Notification views. Graph views are contained in a Graphs view, which is just a Collection.
\clearpage
\subsubsection{Controllers}
\begin{figure}[htb]
\begin{center}
\includegraphics[scale=0.675]{controllers.png}
\includegraphics[scale=0.7]{controllers.png}
\caption{Client Controllers}
\label{fig: cmodels}
\end{center}
\end{figure}
Controllers add interaction to views and models. Controllers can have children. Parent controllers can alter a child controllers behaviour. This way there is no need for a large set of controllers, e.g. a MainCell controller and a ReportCell are now combined into one Cell controller. \\
For collections of elements, views can use unobtrusive JavaScript to enlist those elements for interaction. A view might add data-xxx attributes to elements. Controllers may or may not bind Javascript to elements with these attributes. This keeps the HTML clean and the interaction in the controllers hand.
\clearpage
\subsubsection{Integration (example)}
\begin{figure}[htb]
\begin{figure}[h!]
\begin{center}
\includegraphics[width=\linewidth]{cell_struct.png}
\includegraphics[scale=1.4]{cell_struct.png}
\caption{Displaying a Cell}
\label{fig: cellstruct}
\end{center}
\end{figure}
\clearpage
In the figure above you can see how models, views and controllers come together to display a cell. By creating a cell controller, the subsequent children are added automatically. References are only traversable down the structure, meaning a controller can access its view, but a view can't directly access its controller. The figure shows how displaying a cell is achieved by different components. Editing a cell adds additional views - ModuleProperties - which are yielded from the Module Controller. \\

\begin{figure}[htb]
\begin{figure}[h!]
\begin{center}
\includegraphics[width=\linewidth]{main_struct.png}
\includegraphics{main_struct.png}
\caption{The MVC structure for the main page}
\label{fig: main struct}
\end{center}
\end{figure}
In the figure above you can see how the main page is structured. Displaying a cell is not the only functionality, so a new controller and view supply the glue between the cell and other functionality. The main controller adds interaction to the action buttons on the main page and it holds a main view and that in turn holds a pane view with the undo view. This is an example of how views can have children, but controller don't need to interact with the children of views. For the undo view a separate controller does the interaction.

\subsubsection{Local storage}
Javascript determines the local storage engine that is available and uses that to maintain an offline copy of the application and the created cells/modules. This makes it very easy to design new cells or edit saved cells even when the user isn't connected to the internet. This is communicated to the user, but requires no further interaction. Synchronization is completely transparent, but if it fails for whatever reason and the fallbacks that are in place don't kick in, a notification is displayed.

Expand Down
6 changes: 3 additions & 3 deletions docs/deliverables/final-report/final-report.tex
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
During this project we have built Gigabase, an application to create the virtual cell. The creation of this application was not without its challenges, but we managed to overcome these challenges while growing as a group and on a personal level.

This document reflects on these challenges, the teamwork and what the project itself means to us.
\clearpage

\section{Key challenges and Solutions}
The project itself had some challenges that were conceived as difficult. Apart from these challenges, the process itself had some as well, which are listed under 'Reflection on the teamwork'.
Expand Down Expand Up @@ -82,7 +83,6 @@
\end{lstlisting}

The outer while block was deferred. Deferring in JavaScript is achieved by pushing a function to the end of the call-stack, using a time-out (setTimeout).
\clearpage

\subsection{Concurrency}
The database operations themselves are atomic i.e. isolated, however since users can edit the same cell, or might have a copy on their local storage which is not updated back into the database, consistency between data is a problem. We offer two solutions to the problem.
Expand All @@ -104,7 +104,7 @@
In implementing this, it becomes evident that the interface to the entity consists of its basic functions; namely undoing (\emph{undo}), redoing (\emph{redo}), and adding (\emph{addAction}) an action. Any action that can be undone and redone is stored a tree structure, each point in time containing a reference to the previous point and all the future point that emerged from that specific snapshot in time. This allows for multiple possible time lines, and makes this functionality more powerful without adding much complexity to the use of it, because everything complicated is contained within the entity.

In addition to creating an easy to use implementation, it is also required that the functionality remains simple even when the cell model is very complex. To easily maintain the time line of the entire application, each module keeps track of it's own history and future and makes this data available. The cell also track changes made to it and makes its time line available. Because of this separation, any part of the cell model can be adapted without having to think about the consequences of the changes to other parts of the model, allowing for easier development and generally higher quality software.

\clearpage
\section{Reflection on the teamwork}
This section covers the reflection as a group on the teamwork during the development of the software. The reflection is divided in different subsections.
\subsection{Preparation}
Expand Down Expand Up @@ -155,7 +155,7 @@
The code was also actively commented and documented to further improve code understanding.
\subsubsection*{Programmer's block}
To help overcome the occasional programmer's block, pair programming was introduced to the group. One member is responsible of writing the code, while the other observes and reviews the written code. This way, both members are actively coding and can come up with new ideas when the other member is stuck.

\clearpage
\section{Individual reflections on the project}
This section of the report contains the personal reflections of each of the team members. It contains every member's perspective on the project, rather than the global experience of the group.
\subsection{Derk-Jan Karrenbeld}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
This project was really a great part of my life during the past half year. Because I had already completed most lab assignments of the second year courses, I had a lot of time to spare to work on the application. This resulted in many longs nights of debugging, refactoring and more debugging, most of the times along with one or more of my fellow group members. For me, this was basically a fun way to spend my time, because the group is one of the greatest groups I have ever worked with, and their dedication and motivation motivated me to return that favor, creating an in my opinion allround positive experience.
This project was really a great part of my life during the past half year. Because I had already completed most lab assignments of the second year courses, I had a lot of time to spare to work on the application. This resulted in many longs nights of debugging, refactoring and more debugging, most of the times along with one or more of my fellow group members. For me, this was basically a fun way to spend my time, because the group is one of the greatest groups I have ever worked with, and their dedication and motivation motivated me to return that favor, creating an in my opinion allround positive experience.\\

The context of the project didn't invoke much of a reaction in me at first, mostly because I've never worked much in any area to do with Biology, but the title of the project and the idea of `Programing Life', actually influencing life by programming, did and still does sound quite cool. It's made me wonder about the possibilities that exist with the technoligies we have used and contributed to, and I think I would enjoy a career in Bioinformatics, even though it would never have guessed it would be one of my choices to begin with.
The context of the project didn't invoke much of a reaction in me at first, mostly because I've never worked much in any area to do with Biology, but the title of the project and the idea of `Programing Life', actually influencing life by programming, did and still does sound quite cool. It's made me wonder about the possibilities that exist with the technoligies we have used and contributed to, and I think I would enjoy a career in Bioinformatics, even though it would never have guessed it would be one of my choices to begin with.\\

One peculiar side effect that working on the project seemed to cause, was that I would find myself going to sleep with my head full of ideas on how to create new functionalities for the application or just ideas about cool software in general. This of course threw me into an upwards spiral of spending time working on the project, becoming more excited and as such spending even more time on the project. Overall I think this was a first for me, because usually in projects I get excited about it, but not this much.
One peculiar side effect that working on the project seemed to cause, was that I would find myself going to sleep with my head full of ideas on how to create new functionalities for the application or just ideas about cool software in general. This of course threw me into an upwards spiral of spending time working on the project, becoming more excited and as such spending even more time on the project. Overall I think this was a first for me, because usually in projects I get excited about it, but not this much.\\

Another effect of the project was that suddenly everything even remotely related to bacterias or cells or products reminded me of our application, resulting in me showing and explaining what we had been working on recently to anybody fortunate enough to share in the conversation. All that explaining made me understand the context of the project better, making my interests in Biology and especially Bioinformatics grow.
Another effect of the project was that suddenly everything even remotely related to bacterias or cells or products reminded me of our application, resulting in me showing and explaining what we had been working on recently to anybody fortunate enough to share in the conversation. All that explaining made me understand the context of the project better, making my interests in Biology and especially Bioinformatics grow.\\

All in all, I have had a great time the past weeks, and I attribute that mostly the project. I learned a lot of new things and I had a lot of fun doing it, not to mention that in my opinion the end result was worth every bit of time put into it. I think it ultimately made me a better programmer and someone who is a little more informed on the inner workings of cells than most people.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Despite the fact Biology has always been one of my fields of interest I didn't do a lot with it up until this project. The context seminars definitely spiked my interest, especially because it brought biology and informatics together in the form of Bioinformatics. I never thought much about the application of informatics in other fields of study, so this was almost entirely new to me. I really enjoyed the modelling of a cell by means of programming, this shows the opportunities and capabilities of Bioinformatics, definitely something to remember and take into account when choosing a master.
Despite the fact Biology has always been one of my fields of interest I didn't do a lot with it up until this project. The context seminars definitely spiked my interest, especially because it brought biology and informatics together in the form of Bioinformatics. I never thought much about the application of informatics in other fields of study, so this was almost entirely new to me. I really enjoyed the modelling of a cell by means of programming, this shows the opportunities and capabilities of Bioinformatics, definitely something to remember and take into account when choosing a master.\\

Before the project started I had limited to no experience\footnote{Limited working experience with Git, no experience with Ruby, Rails, Coffeescript (for Javascript)and SASS (for CSS), no working experience with model-view-controller (MVC) architecture, no working experience with SCRUM} with almost all of technologies used during the project and knew it was going to be an interesting run. This had some drawbacks as well as it's advantages. A drawback was, especially at the beginning of the project, a lot of tasks took a lot more time than actually necessary. This was because I had to invest a lot of time learning these new technologies. At the same time there were also courses to keep up with, so this increased the workload. Nevertheless, learning all these new things has been a wonderful opportunity and I have by no means any regret of choosing this project and the way in which we worked on it.
Before the project started I had limited to no experience\footnote{Limited working experience with Git, no experience with Ruby, Rails, Coffeescript (for Javascript)and SASS (for CSS), no working experience with model-view-controller (MVC) architecture, no working experience with SCRUM} with almost all of technologies used during the project and knew it was going to be an interesting run. This had some drawbacks as well as it's advantages. A drawback was, especially at the beginning of the project, a lot of tasks took a lot more time than actually necessary. This was because I had to invest a lot of time learning these new technologies. At the same time there were also courses to keep up with, so this increased the workload. Nevertheless, learning all these new things has been a wonderful opportunity and I have by no means any regret of choosing this project and the way in which we worked on it.\\

During the project we made use of Planbox for agile project management, it's a great way to manage the product and it's yet to be implemented features. However, it took me a while to figure out how to use it properly. For instance, at the beginning of the project when I was working on a task I would forget to start the timer and when finishing the task would just roughly guess the amount of time it took me. The same problem I had with using git, when working on some tasks I would just do my work and sometimes not even commit, this led to some problems when others were also working in the same branch. It took me a while to get used to the work-flow of recording the time when working on a task, committing after completing a task and then discuss changes made. Now I have a much better grasp on how to work with these kind of tools and use them to my advantage when working on other projects in the future.
During the project we made use of Planbox for agile project management, it's a great way to manage the product and it's yet to be implemented features. However, it took me a while to figure out how to use it properly. For instance, at the beginning of the project when I was working on a task I would forget to start the timer and when finishing the task would just roughly guess the amount of time it took me. The same problem I had with using git, when working on some tasks I would just do my work and sometimes not even commit, this led to some problems when others were also working in the same branch. It took me a while to get used to the work-flow of recording the time when working on a task, committing after completing a task and then discuss changes made. Now I have a much better grasp on how to work with these kind of tools and use them to my advantage when working on other projects in the future.\\

Without a lot of experience and trying to make up for that by showing what I could do just by myself, I sometimes got in my own way. I would get stuck somewhere and would be frustrated if things weren't working out. However, there was always some group member to help me out in the end, this showed me the importance of communicating problems early and not to make a big deal about having to ask someone for help.
Without a lot of experience and trying to make up for that by showing what I could do just by myself, I sometimes got in my own way. I would get stuck somewhere and would be frustrated if things weren't working out. However, there was always some group member to help me out in the end, this showed me the importance of communicating problems early and not to make a big deal about having to ask someone for help.\\

Overall, this has been an amazing project with a lot of invaluable lessons, not only from the assistants/teachers but also from the other group members.\\
Binary file added docs/deliverables/product-vision/mockup.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 9aee385

Please sign in to comment.