-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConstitution.tex
105 lines (76 loc) · 7.26 KB
/
Constitution.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
% Do not edit this f{}ile unless you know what are doing ;)
% The following line def{}ines the type of printing paper and the size of the font along with the type of the file "article"
% It's possible to choose different document types check out the official latex documentations http://tobi.oetiker.ch/lshort/lshort.pdf
\documentclass[titlepage,a4paper,11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[margin=1.0in]{geometry}
%defining authors
\author{Abdulrahman Alotaibi and Abdulaziz Alsaffar}
\title{KISR Development Constitution}
\begin{document}
\maketitle
\pagebreak
\thispagestyle{empty}
\tableofcontents
\pagebreak
\pagestyle{plain}
\setcounter{page}{1}
\pagenumbering{arabic}
\newpage
\section{Introduction}
This constitution aims to def{}ine the work f{}low of any development projects undertaken in the future. We hope that it will make a dif{}ference to the way you develop software. Universities have their rules of teaching, and most of them want to make students understand basic algorithms and code syntax. This paper is a guide for real world development geared towards producing programs that work for ever. This paper emphasises development projects undertaken by a whole team of developers, not a single coder that is sitting in a basement somewhere.
%Most of the tools in the next few sections can be divided into two main categories development tools and system level tools. The development tools are those that you need to while developing a program or application e.g. . System level tools are elements that you need to do a specif{}ic job e.g. web servers or databases. %Not sure about the clarity of that last sentence.
In the following sections we will discuss several tools, most of them built on top of Unix like operating systems. The following sections will put emphasis on the importance of using \textbf{Free} and \textbf{Open Source} software. We admit that there is occasionally a steep learning curve, but after passing it things will make a lot more sense, and you will be a faster, more productive developer.
\section{Virtual Machine}
Some projects may require you to work in a specif{}ic environment. You might need to develop and run your application in specif{}ic operating systems, using specif{}ic tools, set up in a very specif{}ic way (e.g. a webGIS service running off a GeoServer with an Oracle Spatial database).
One way to do this is to have a whole new physical development machine for every project type that you work on. As you can imagine this can get very expensive and wasteful very fast. Another way would be to force development to adhere to one specif{}ic environment and setup but this is very limiting to a developer.
With a virtual machine (VM) you can run an emulation of an entire computer on your host system. This allows you to create very specif{}ic development environments where you have the OS that you need, loaded only with the very specif{}ic tools and software that you need for the project that you are currently working on. You can take snapshots of your VM, mess around with it, and if anything goes wrong, you can scrap it and reload it from the snapshot. When you're done and your application has been moved to production, you just scrap the VM.
\subsection{VirtualBox}
\subsection{Virtual Machine Management Software}
\subsubsection{Vagrant}
\section{Useful commands}
There are many many many Command Line Interface (CLI) tools out there. Some universities dedicate months to teaching CS and CE students how to use them effectively. They are extremely useful for helping you setup, navigate, and manipulate your development environment.
We recommend using the CLI as much as possible. It will make you faster and more efficient and as a bonus you feel like you're commanding a spaceship or like you're a supercool hax0r!! %this is what happens when I edit things at 3:30am
\subsection{Regex}
\subsubsection{grep, egrep and fgrep}
\subsubsection{Sed}
\subsection{AWK and Unix F{}ilters}
\subsection*{Automake, make, Autoconf{}ig, conf{}ig, Cmake}
\subsection{ssh}
\subsection{ftp vs scp}
\section{Package Managers}
\section{Version Control Systems}
An absolutely critical part of any group development setup is version and revision control. If you setup a repository of f{}iles for your project and you have multiple people working on these f{}iles then it becomes absolutely critical to track the changes that are taking place in the f{}iles. You need to know what was changed, when it was changed and who changed it. Luckily there are existing version control systems (VCS) that can manage all of this for you.
\subsection{Git}
\subsubsection{Tutorial}
\section{Integrated Development Environments}
IDEs are your best friend. Any time you adopt a new language or framework to work with one of your f{}irst priorities should be to f{}ind an IDE that you love. It will be your home for the life of the project.
Like the name suggests, an IDE creates a convenient environment in which you can develop your software/application. You'll have a complete view of your project; its directories, packages, and libraries; and the many f{}iles that make it up. IDEs give you the ability to edit, develop, test, analyse, run and debug your project all in one convenient place. They are also often packed full of tonnes of tools and features designed specif{}ically to make your job easier and more convenient.
\section{Databases}
A database is a system level tool. Most databases run as a server on the system and you can access them by using the CLI or you can install a GUI (graphical user interface) to interact with the database.
\subsection{PostgreSQL}
PostgreSQL is a database that has a lot of features and it's used by many companies\cite{http://www.postgresql.org/about/users/}
\subsubsection{PostGIS}
\subsection{MySQL}
\subsection{ORM}
Object Relational Mapping is a library that a developer would use to abstract the SQL statement and optimise the calls to the database. Previously, developers needed to know what type of database they were going to use and try to model the database on their problem and construct the relations between tables using 'INNER' and 'JOIN' statements to get to the tables and traverse the tables. By using the ORM developers would move all this complex code and install a middle library to write the SQL statements in his programming language.
A good use for ORM would be if the managers switched from one kind of database to another the developer would only change the driver from one vender to another (Postgres to Oracle). Using hand crafted SQL statement would complicate and delay the switch because the developer has to change some of the SQL statement to match the vender implementation of the SQL.
\subsubsection{SQLAlchemy}
SQLAlchemy is a python framework that abstracts the SQL interaction. Developers can now write python classes to model the database table.
\section{Webserver}
\subsection{Nginx}
\subsection{Apache}
\section{Testing Framework}
% no example here because it's a language dependent
\section{Documentation and Reporting}
\subsection{Doxygen}
\subsection{Sphinx}
\subsection{\LaTeX}
\section{Logging Software and Issue Tracking Software}
\subsection{example software}
\section{RESTful}
\section{General Programming Advice}
\section{Glossary of Abbreviations}
%is there a way to build glossaries using LaTex?
\section{Agile Software Development}
\end{document}