% !TEX root = master.tex
\subsection{Software Tools}

Team collaboration is key for any project, and the tools chosen can greatly reduce possible pain points. The tool selected allow for a large range of interactions and collaborations on the common components. Their is a focus on accountability, flexibility, and simplicity.

\subsubsection{Communication}
Communication is a key element with any task involving more then one person. Having reliable platforms for messaging, assigning tasks, and sharing information enables accountability and maneuverability during all phases of development.

\paragraph{Slack}
The tool chosen for general communication is Slack. This tool is a team based web chat service offered by Slack Technologies, Inc. Once a team is created users have to be invited or have an organization specific e-mail. Users are given permissions to create public/private groups, join public groups, notify other users, add new emojis, send direct message to other users, and request to add new slack integrations. Administrators have all permissions users have plus the ability to invite new people, delete user posts, disable accounts, and add/remove slack integrations. This platform promotes users to organically build groups for different tasks, and separate work from play. File-transfers are also included for free with a 5 GB storage limit simplifying the feedback process for quick questions. The supplied integration system gives developers the ability to add notifications for external services, or expose commands to the users. For example integrations with GitHub to see commit notifications, Trello to see task changes, and Google Calender to see new events and notification for upcoming events. All these features supported the decision to use Slack for our day to day communication.
\cite{SoftwareConsiderations:Slack}

\paragraph{Trello}
Project task planning, assigning, and scheduling can be another paint point for team projects. This can especially be true when people are working in different locations and a physical Scrum/Kanban board can not be used. Trello by Trello, Inc. offers a virtual task board and grants a high level of flexibility with how a team can interact with the boards. Given this amount of flexibility allows the team to decide if a Scrum approach should be take, Kanban, or a combination based on team dynamics. Each person creates their own Trello account, and one user will create a new team. The person who created the new team will need to invite the other members and grant them access to the team boards. All users can create new boards and view existing boards. Boards are made up of lists that can be given any names, e.g. To-do, In Progress, Ready for QA, Blocked, Finished. Each list can have a collection of cards and each card has a short description. The cards can also have people, deadlines, tags, task lists, attachments, comments, and card history. To move a card to another list you can simply drag the card over, and you can always edit cards. Given the characteristic of Trello it filled the project management gap.
\cite{SoftwareConsiderations:Trello}

\paragraph{Google Drive}
For more general record keeping Google Drive and Google Docs, by Google, Inc. are used. This project has had the need to evaluate various LEDs, microcontrollers, power regulators, and communication modules. The need to centrally record purchases to monitor budget, parts, sources, and shipping status. Google Sheets granted a clean way to organize all transactions. Taking and storing meeting notes, for future reference, individual accountability, being able to justify time spent on various parts, and tracking problems/solutions. Google Docs made it easy to create new files for each formal meeting. During research datasheets are found and collected for the components that are evaluated, along with forms, templates, and instructional documentation. These Google products unify the general storage and management for small or slow changing documents.
\cite{SoftwareConsiderations:GoogleDocs}

\paragraph{GitHub}
For centralized source code GitHub by GitHub, Inc is used. GitHub is a Git hosting provider that offers a centralized place to sync Git branches. GitHub also has a student pack which includes free private repositories while a user is a student.\cite{SoftwareConsiderations:GitHubStudent} Each repository shows commits, contributers, source, and offers some basic reports. One of the reports is a contributions graph showing how many commits, and a general idea of how much a member has contributed to the project. Being centrally hosted, and free grants this project a powerful tool for source code management.
\cite{SoftwareConsiderations:GitHub}

\subsubsection{Development}
Taking a project from vision to reality is made simpler with the right tools. Having to build individual parts and combining them into a final product requires that the development cycle promotes collaboration. These ideologies help to determine the tools that will be used to bring this project to completion.

\paragraph{Code Composer Studio}
Early on the decision to use a Texas Instruments microcontroller was made, and this dictated the choice of integrated development environment (IDE). Code Composer Studios by Texas Instruments is a fork of eclipse by The Eclipse Foundation. Code Composer Studios is purpose tuned to develop and debug applications for Texas Instruments microcontrollers and embedded processors. It includes libraries to simplify the development for supported devices; such as URAT configuration, system clocks, timers, interrupts, and process scheduling. A compiler optimized specifically for these embedded platforms is also included, although restrictions are placed in terms of maximum compiled size, and a soft limit for the industries it can be used for. If these restrictions are hit a precompiled version of GCC is included, and can be used without the size restriction. For Code Composer Studios the free version is meant to be used with the Launchpad series of development boards. This is limitation will reduce the range of microcontrollers that can be considered without purchasing additional licenses. Using the manufactures suggested development environment should reduce the problems that can be experienced, and create a simpler path for porting.
\cite{SoftwareConsiderations:CCS}

\paragraph{Git}
Working with source code can be a temperamental processes. Allowing multiple people to work on one code base can be challenge. Loosing changes to people overwriting files, having objects renamed, and accounting for who made what change is a nightmare. Modern tools have been created to try and alleviate these problems. One of these tools is Git; a version control system released under the MIT license. Git aims to simplify the head aches of working with a team on development tasks by supplying a solid set of tools to merge, comment, view revisions/blame, and can integrate with other services to further simplify the sharing process. Git operates primarily with branches, every time a central repository is cloned a new branch is created to represent the remote copy locally. As changes are made they must be committed to the local branch. When the new feature is complete it can be pushed back to the centralized repository. If the central repository has changes that are not present on the local system, they must be pulled to the local machine and merged in before being pushed.
\cite{SoftwareConsiderations:Git}

\paragraph{Putty}
Working with serial based communications having a serial client is a must. The development boards used have a USB to Serial interface. The external Bluetooth module uses UART for communication with the microcontroller. This UART signal can be monitored with the development boards USB to Serial interface, a DSA (Digital Signal Analyzer), or a Bus Pirate. Only the Digital Signal Analyzer is a standalone system, but they typically cost \$3,000 for an entry level model. The USB to Serial Interface and Bus Priates are either included or relatively cheap solutions. The down side with them is that you need to have software that can access the COM device that they create. This is where Putty comes in, Putty is a terminal emulator that supports multiple communication protocols for example RAW TCP, Telnet, SSH, and Serial. Putty allows you to specify different options for a Serial connection like specify baud rate, data bits, stop bits, parity, and flow control. Putty supplies a clean interface for interacting with Serial devices, and is our preferred terminal emulator.
\cite{HardwareConsiderations:RN42}
\cite{SoftwareConsiderations:Putty}

\paragraph{Eagle}
PCB design is a required component of this project, and finding a program that is not to expensive and capable can be challenge. Eagle by AutoDesk is a PCB Schematic, layout, and autorouter editor. Students with an EDU e-mail are eligible to receive a free non-commercial Premium license a \$820 value per person. 
%TODO: Get Ryan to write more
\cite{SoftwareConsiderations:Eagle}

\subsubsection{Documentation}
Creating documentation with a team and maintaining a unified feel can be hard with out someone working on integrations. Steps were taken early in the project life cycle to reduce the need of manual integration. Early on it was decided to standardize the document folder structure, general writing style, and formating. The documentation is also stored in a GitHub repository, which grants us the ability to audit work done, and it helps with merging changes.

\paragraph{LaTeX}
Typical document writing is very much what you see is what you get (WYSIWYG), but LaTeX takes a very different approach to document creation. LaTeX has been described as a programming language for documentation writing. The general idea is that you write what you want to say, but you don't worry about formating it as you write. The visual aspect is defined with a set of directives at the beginning of the document. These directives can import plug-ins to grant new functionality, change how sections are formated, and dictate where supporting files will be stored. Document writing is very straight forward, you put \textbf{\textbackslash SectionType\{Name\}} at the beginning to represent different sections. Then you can just write your document like you normally would without thinking about indenting paragraphs, double spacing, or image positioning. Images are added using a figure directive, and you have the option to attach a label for references, captions, and preferred location. When you want to reference an image you add an autoref directive to your writing and an automatic link will be created with the correct name. LaTeX simply takes all the tedious work of keeping figure numbering correct, and automates it. The Citation system is just as simple. All these features greatly helped drive the decision to use LaTeX.
\cite{SoftwareConsiderations:TexStudio}