%% -*- mode: latex; coding: utf-8 -*-
\documentclass[a4paper, 10]{article}
% This document is (C) and ©, Mahindra École Centrale, 2014,15
% Written by Lilian Besson (https://bitbucket.org/lbesson/) for the MA 101 course (2014).

%% Well understand input, and nice output
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[T1]{fontenc}

\usepackage{cmap,enumerate,multicol} % {fixltx2e}
\usepackage{amsmath,amsfonts,amssymb,amsthm,bbm,mathabx}
\usepackage{mathrsfs,graphicx,xcolor,color,float,framed,scrextend}
\everymath{\displaystyle}
\usepackage{enumitem} % use {enumerate} if enumitem is not available

\usepackage[scale=0.78]{geometry}

\newcommand{\inv}[1]{\frac{1}{#1}}
\newcommand{\mytitle}[0]{Instructions for the programming project}

\usepackage{fancyhdr}
\pagestyle{fancyplain}
    \renewcommand{\headrulewidth}{0.2pt}
    \renewcommand{\footrulewidth}{0.2pt}
    %% If necessary, change here the header and footer
    \lhead{\it{\mytitle{}}} %% Left header
    \chead{\fancyplain{}{\href{http://www.MahindraEcoleCentrale.edu.in/portal/course/view.php?id=27}{\textbf{CS101}}}} %% Center header
    \rhead{\it{\today}} %% Right header
    \lfoot{\small{Please, report any issue to \href{mailto:CS101_at_crans_._org}{\texttt{{CS101}{@}{crans.org}}}}} %% Left footer
    % \cfoot{\thepage/\pageref{LastPage}} %% Center footer
    \rfoot{\tt{\href{http://www.MahindraEcoleCentrale.edu.in/}{Mahindra École Centrale}}, 2015} %% Right footer

\usepackage[plainpages=false,pdfcenterwindow=true,
    pdftoolbar=false,pdfmenubar=false,backref,
    pdftitle={\mytitle{}},
    %% If necessary, change here the default PDFAuthor value
    pdfauthor={Mahindra École Centrale, Hyderabad, Telangana},
    linkcolor=black,citecolor=black,filecolor=black,urlcolor=black]{hyperref} %% Allow to add URL hyperlink with the command \href.

\begin{document}

\numberwithin{equation}{section} %% Option to number equations
\DeclareGraphicsExtensions{.pdf,.png,.jpg,.svg} %% Order to load the images
\title{\mytitle{}} %% Define Title of the document

%% -*- coding:utf8; mode:latex -*-
%% LaTeX file automatically generated with [strapdown2pdf](https://bitbucket.org/lbesson/bin/src/master/strapdown2pdf)
%% from /home/lilian/cs101/projects/index.html, the jeudi 12 mars 2015, 15:36:29 (UTC+0530).
\section*{Instructions for the programming project}

This document is here to explain to you what you will have to do (and how you will do it) for the CS101 programming project in $2014/15$ at Mahindra Ecole Centrale.

% \hspace{\fill}\rule{.6\linewidth}{0.4pt}\hspace{\fill}


\subsection*{What to do for this project?}

\begin{framed}
    \underline{In one sentence :} \textbf{you (and your team-mates) now have about 2 weeks to write one or more program to solve a scientific problem, as detailed in the other document.}
\end{framed}
% \vspace*{-1em}

\subsection*{Be extremely cautious that$\dots$}
\begin{itemize}
    \item \underline{Cheating will be severely punished}. Do not even try to cheat, neither between 2 teams with the same project nor from Internet.
    % \item Be sure that they learn useful skills, and use \textbf{open-source and free tools} (they will have to submit through Moodle and email, by uploading a 7z/zip archive, containing a certain numbers of documents following the standard of open-source projects, see below)
    % \item The CS lab is open everyday until 8pm, and you can use your own laptop.
    \item \underline{The deadlines have to be respected!} Each day of delay after the $24^{\text{th}}$ will reduce your grade by $4/20$.
    \item \textbf{\underline{Each member} of the team have to participate to the project}.
    \item \underline{Your Python program(s) must work well, and produce correct results}, as asked on the project assignment paper you received. The marks for the project team depend significantly on the output and behaviour of the program(s). During the viva part of the project, the team members should demonstrate that the program(s) work as expected.
\end{itemize}


\subsection*{Important dates to follow}
\begin{enumerate}[leftmargin=8mm]
    \item Monday $6^{\text{th}}$ of April, you will receive the project paper\footnote{ There is 6 different projects: $1)$ FFT, $2)$ Time Table, $3)$ Tic-Tac-Toe, $4)$ Edge Detection, $5)$ Matrices, or $6)$ Numerical Integration.}, explaining what you have to work on,
    \item During these $3$ weeks, you will work regularly with your team-mates and work on your various task, as quickly and efficiently as you can,
    \item \textbf{Deadline is} \underline{Friday $24^{\text{th}}$ of April, you send by email the zip archive} (as described below) to the professor in charge of your project (\underline{before $21:59$ pm}),
    \item During the last week of April (Monday $27^{\text{th}}$ to Friday $1^{\text{st}}$ of May), you will have a short meeting with your professor, to ask \emph{subtle questions} about concepts and \emph{tricky parts} of your code. Each member of the team have to know ``everything'' about each programs your team have submitted.
    \item Grades will be displayed during the first week of May. The best team in each of the 6 projects will get extra marks. \emph{You are competing with the 7 other teams working in the same project}, keep this in mind if you thought of cheating or helping them!
\end{enumerate}


% \hspace{\fill}\rule{.6\linewidth}{0.4pt}\hspace{\fill}

\subsection*{What does your team have to produce and give back?}

\begin{enumerate}
    \item You will have to submit one \texttt{zip} archive\footnote{ If you do not know how to do that, please read \href{http://www.wikihow.com/Make-a-Zip-File}{www.wikihow.com/Make-a-Zip-File}.} named \texttt{SectionSS\_\_TeamYY\_\_Project\_CS101\_2015.zip}, with \texttt{SS} being the section ($A1$ to $B4$) and \texttt{YY} being your project number ($1 \dots 6$).
    \item That \texttt{.zip} archive has to be sent by email to the professor in charge of your project (email ID is given on the team list). \textbf{Only one submission by team is possible}: you will have to agree on which version you decide to send, and who takes care of it. % (team coordination).
\end{enumerate}

\subsubsection*{Content of the zip file:}

\begin{quote}
\underline{Hint:} a complete example of what you have to produce will soon be available on Moodle, based on a ``dummy'' project (solution of Mid-Term Exam Problem III).
\end{quote}

\begin{enumerate}
    \item One small text file named \texttt{AUTHORS.txt} with a list of students in your team, with one name, roll number and email by line, \textbf{like this}:
    \begin{verbatim}
    Wonder Woman, 14XJ00327, wonder.w@gmail.com
    ... (2 or 3 more students here) ...
    Bat Man, 14XJ00365, bruce@batman.com
    \end{verbatim}
    \vspace*{-2em}  % reduce vertical spacing

    \item one text file named \texttt{LICENSE.txt}, containing the {entire} copy of the \href{https://en.wikipedia.org/wiki/Open-source\_license}{Open-Source license} under which your project could be released\footnote{ Do not worry, nothing will be publicly released. We just pretend it could be.}. This license will have to be chosen in one of these lists: \href{http://opensource.org/licenses/alphabetical}{\texttt{OpenSource.org/licenses}}, or \href{https://www.gnu.org/licenses/license-list.html}{\texttt{GNU.org/licenses}}. I recommend one of these: \href{http://mit-license.org/}{the MIT license}, \href{https://gnu.org/licenses/gpl.html}{the GNU GPLv3 license}, \href{http://opensource.org/licenses/BSD-2-Clause}{the BSD license}, or \href{http://www.wtfpl.net/}{the WFTPL license}.

    \item one small text file named \texttt{README.txt} explaining \textbf{in a few lines} what is the project about (what you had to do, \emph{summed up with your own words}),

    \item one file named \texttt{INSTALL.txt} explaining \emph{briefly} how to use the project. You have to list the modules/packages required by your program (if you used any), and any special manipulations required to use and test your program(s),

    \item an \emph{optional} file name \texttt{TODO.txt}, that can contain a list of point that still need to be worked on. Can be used to assess how advanced the team was on their subject. And if you tried some bonus questions or extra methods, but have not been able to complete the job, this document will state what would be required to conclude the extra ideas.

    \item one file named \texttt{SectionSS\_\_TeamYY\_\_Project\_CS101\_2015.pdf} (\textbf{in the PDF format}, \underline{not} Word \texttt{.doc} or \texttt{.docx}) containing a \textbf{report of your entire work process} (more details are given below),

    \item and finally, a list of Python programs (at least one), that solve the problem(s) given to you.
    % Your project paper will maybe specify a certain number of programs/modules that are required.
\end{enumerate}


\hspace{\fill}\rule{.6\linewidth}{0.4pt}\hspace{\fill}

\subsubsection*{About the report}

The goal of such document is for you to be \emph{trained on technical communication}, in order for you to explain what was your task(s);
specify what approaches you considered and tried to implement.\\
Optionally, the report can also contain remarks of any kind about the project (was it interesting? can we improve it for next year? have you tried any extra example?).


\paragraph{Outline ?}

The suggested outline is the following:

\begin{enumerate}
    \item Introduction (one paragraph), about the general domain and subject, the task, and the solution that you implemented.

    \item The first part can give details about the task(s), what model did you chose, what convention did you follow. The mathematical and scientific notations has to be explained here. Reference books and website can be given here (or at the end of the report),

    \item The second part will give details about your Python programs: which function/class does what (in each \texttt{.py} file), and how (quickly, no need to write too much). You also have to specify how to use each program (if it is a command line program, is there arguments to give to the script? if not, is there something to change inside the program? If the program is asking any \texttt{input} or \texttt{raw\_input}, are they explicit enough to be understood easily?).

    \item You also have to clearly say what \emph{non built-in modules}\footnote{ \underline{Remark:} each of the 6 project can (and should) be done without using any extra package that not included in Anaconda (for some project, you can use \texttt{numpy}, \texttt{scipy}, \texttt{matplotlib}).} you used. If your program requires any external module that is not included in Anaconda, you need to include a link to the official web-page from where that module(s) can be downloaded (freely).

    \item An optional third part If you answered any bonus question or achieved any task additionally to what we ask, please explain what you did, how (and why).

    \item Finally, a global conclusion\footnote{ You can send a personal conclusion directly to your professor if you want.}, summing up quickly what you learned and what have been achieved.
\end{enumerate}


\paragraph{Tool to write your report ?}

The suggested way to write this report is either:

\begin{itemize}
    \item The more common solution: to use \href{https://simple.wikipedia.org/wiki/Microsoft\_Word}{Microsoft Word} (or any word processing software, like the free clone \href{https://www.libreoffice.org/}{LibreOffice}), and to convert the document to PDF before sending it.

    \item You can also try to start using \LaTeX{}, the \href{https://simple.wikipedia.org/wiki/LaTeX}{standard for technical and scientific documents}. An excellent tool your team could use is the free website \href{https://www.sharelatex.com/register}{\texttt{www.ShareLaTeX.com}}, to collaboratively write your report,

    \item You could be interested about \href{http://sphinx-doc.org/}{the Sphinx documentation generator for Python}, if you have time.
\end{itemize}


\hspace{\fill}\rule{.6\linewidth}{0.4pt}\hspace{\fill}

\subsection*{Style to follow for your programs:}

\subsubsection*{Conventions}

You have to follow the \href{https://www.python.org/dev/peps/pep-0008/}{usual Python typing conventions}, as we do in lectures, labs and exams, from January.\\
Your programs will be automatically read by the \href{http://www.pylint.org/}{pylint tool} (\texttt{http://www.pylint.org/}), which assess the quality of you code\footnote{ 
\underline{Warning:} a too important number of syntax or style warnings or errors in one of your Python program might reduce your final mark for the project.}.
\texttt{pylint} can be \href{http://docs.pylint.org/installation.html\#note-for-windows-users}{downloaded freely}\footnote{ On Windows, type \texttt{conda install pylint} or \texttt{pip install pylint} on a DOS console, \emph{when being connected to Internet}.} and \href{https://pythonhosted.org/spyder/pylint.html}{use easily within Spyder}.


\paragraph{\texttt{@author} in the doctstring of each program}
As Spyder is doing it automatically, we ask you to include a line like this one in each of the \emph{docstring} (the big string between triple quotes \texttt{"""}) in the beginning of each Python program you submit\footnote{ In case one file is lost, we need to know to whom it belongs.}: \texttt{@author: Team 1 Section A3}

% \begin{lstlisting}[language=python]
% @author: Team 1 Section A3
% \end{lstlisting}


\hspace{\fill}\rule{.6\linewidth}{0.4pt}\hspace{\fill}

\subsection*{Last advices}
\begin{itemize}
    \item Stay in touch with your professor, and \underline{contact him if needed}.
    \item Do not mess up this project, its is the only serious programming task of your first year!
    \item Try to \underline{enjoy the project}, and work efficiently with your friends.
    \item DO NOT CHEAT ! You are competing with the other teams (there will be prizes for the best projects!).
    \item \underline{Respect the deadlines}, any delay will be severely punished.
    \item Good luck :)
\end{itemize}

% END

\end{document}
%% End of the document CS101_Programming_Projects__What_to_do__and_how_to_do_it.tex
