\documentclass[11pt]{article}

\usepackage{setspace}
\usepackage[margin=1in]{geometry}

% Make table of contents look better
\usepackage{tabularx}
\usepackage{tocloft}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}

\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{hyperref}

% \usepackage[ngerman]{babel}
% \usepackage[T1]{fontenc}
% \usepackage[ansinew]{inputenc}
% \usepackage{lmodern}

% Times New Roman font
\usepackage{txfonts}

\begin{document}

\setlength{\parindent}{2em}

\begin{titlepage}
\clearpage
\thispagestyle{empty}

\begin{center}
{\bf Technical Communication for Computer Scientists: 15-221}\\
{\bf Spring 2015}\\

\vspace{25 mm}

{\bf Progress Report:}\\
{\bf C0 Debugger}\\
\vspace{25 mm}

Aaron Gutierrez\\
Mitchell Plamann\\
Shyam Raghavan\\
Suhaas Reddy\\

\vspace{25 mm}

{\bf Submitted to}\\
Thomas M. Keating\\
Assistant Teaching Professor\\
Computer Science Department\\
School of Computer Science\\

\vspace{25 mm}

{\bf Prepared and Submitted by}\\
Shyam Raghavan - April 14, 2015
\end{center}
\end{titlepage}

\pagenumbering{roman}
\tableofcontents
\newpage

\pagenumbering{arabic}

\section{Overview}
\subsection{Purpose of the Report}
This report serves as an update to the reader on the progress the c0db team has
made on the C0 Debugger during the first month of work. The report will detail
what has been accomplished so far, what is in progress, what is planned for the
future, and any changes that will be made to the original plan of action. In
addition, the report will detail new literature that has been gathered and
used.
\subsection{Purpose of the Project}
The purpose of this project is to build a web application that can debug C0
code and can aid in a student's understanding of fundamental computational
models. This project will benefit students in 15-122 Principals of Imperative
Computation at Carnegie Mellon University by helping them create correct
programs. The C0 Debugger will enable students to understand how their programs
execute and find where problems originate more easily than with existing tools.
In addition to debugging, students will have better knowledge for how the
underlying computation model works when evaluating their code.
\par
The C0 Debugger will also enable students to test simple programs with little
setup, using only a web browser. They will no longer have to set up and become
familiar with a Unix environment before they can program, making C0 accessible
to more people, more quickly.
\section{Literature Review}
Since the start of our project, we have found multiple new information sources;
the following are the most important ones.
\begin{itemize}
\item Nodeunit documentation \\
    https://github.com/caolan/nodeunit
    \par
    We are using nodeunit to test our virtual machine.
    Since the c0 bytecode has many different opcodes that it uses, it is very
    easy for mistakes in the virtual machine to go unnoticed.
    To prevent this, we are using the nodeunit library to write unit tests for
    our code.
    This has already helped us to find and solve multiple bugs in the VM, and
    having these unit tests will make sure that we can solve any bugs that
    occur as the result of future changes in the code.
\item c0vm Assignment Handout \\
    https://www.cs.cmu.edu/~rjsimmon/15122-f14/prog/c0vm-writeup.pdf
    \par
    This document details how each opcode in the c0 bytecode language works,
    as well as other important implementation details for the c0 virtual
    machine. It has been an important reference while developing a JavaScript
    version of the c0 virtual machine.
\item Common Gateway Interface Support Documentation \\
    https://docs.python.org/2/library/cgi.html
    \par
    This document explains the support module defined by Python 2.7.10 for
    common gateway interfaces. A common gateway interface script is usually
    invoked by a server to process user input submitted through an HTML
    element. This piece of documentation is an important reference for
    developing the flow of information from c0 code to c0 bytecode to a
    working virtual machine.
\end{itemize}
So far, the most important thing we have learned is that good unit tests are
vital for developing this sort of project. Without unit tests that verify
each opcode used by the virtual machine, many bugs would have gone unnoticed,
causing problems later down the line. If we only found these bugs by using
the frontend, they would have been much harder to debug, as there would have
been much more code to work through.
\section{Progress}
\section{Recommendations}
\begin{figure}[h]
  \centering
  \includegraphics[width=\linewidth]{old-gantt.jpg}
  \caption{Old Project Gantt Chart}
  \label{fig:old-gantt}
\end{figure}
\begin{figure}[h]
  \centering
  \includegraphics[width=\linewidth]{new-gantt.jpg}
  \caption{New Project Gantt Chart}
  \label{fig:new-gantt}
\end{figure}
There are three major changes to the project plan: the frontend and backend
deadlines have moved back several days, the user testing and revisions period
have shifted back accordingly and have shortened, the frontend goal categories
have been redefined. These changes can be identified in the above Gantt charts
by in shifts in the bars of the Gantt chart. The development bars have
increased in relative size while the testing and revising bars have shrunk.
\par
The frontend and backend periods needed to shift backwards simply due to the
group’s initial underestimation of the amount of time required to create a
reasonable product. The team believes additional development time on the
backend and frontend until the 20th of April will enable the creation of a high
quality product with a robust user interface and powerful c0 virtual machine.
Without this pushback the team currently has a working prototype with a basic
user interface and native function calls implemented, but the project has yet
to include several important features considered necessary for useful
application by students.
\par
The user testing and adjustments periods have shrunk due to the increased
development time. The team decided to avoid user testing and adjustments during
the main development phase, but due to the time pressure this caused the
testing and adjustment phases to shrink by several days each and overlap
significantly. The team hopes to consistently implement changes as students
provide feedback so that the overlap still provides time to implement
suggestions.
\par
The redefined goals within the frontend category reflect altered priorities of
the project as a whole. Rather than having the project work to explain topics
to the user, the project will be designed to simply run user code and step
through user code with the assumption that the user already understands how to
use the program. The instructors of 15-122 have already been informed of c0db,
so hopefully the TAs of the course could provide their students with brief
tutorials for c0db and its uses. This shift away from explanation allows the
team to focus more on providing user interface features which will more
directly aid in student code development. These features include code stepping
and highlighting as well as annotated bytecode as listed in the Gantt chart
above.
\end{document}
