From f94675723f5a9ffce1fc4b0c603d17cd1337a073 Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Fri, 3 May 2019 13:25:42 +0100 Subject: [PATCH] Create example report --- .gitignore | 282 +++++ .gitmodules | 3 + build | 106 ++ lantern-build-engine | 1 + report/chapters/1-introduction.tex | 7 + report/chapters/2-example.tex | 9 + report/chapters/7-appendix.tex | 12 + report/hull.bst | 1559 ++++++++++++++++++++++++++++ report/report.bib | 319 ++++++ report/report.pdf | Bin 0 -> 49753 bytes report/report.tex | 62 ++ report/title_page/UoH_Logo.pdf | Bin 0 -> 51628 bytes report/title_page/page.tex | 33 + 13 files changed, 2393 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100755 build create mode 160000 lantern-build-engine create mode 100644 report/chapters/1-introduction.tex create mode 100644 report/chapters/2-example.tex create mode 100644 report/chapters/7-appendix.tex create mode 100644 report/hull.bst create mode 100644 report/report.bib create mode 100644 report/report.pdf create mode 100644 report/report.tex create mode 100644 report/title_page/UoH_Logo.pdf create mode 100644 report/title_page/page.tex diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5d355a --- /dev/null +++ b/.gitignore @@ -0,0 +1,282 @@ + +# Created by https://www.gitignore.io/api/latex +# Edit at https://www.gitignore.io/?templates=latex + +### LaTeX ### +## Core latex/pdflatex auxiliary files: +*.aux +*.lof +*.log +*.lot +*.fls +*.out +*.toc +*.fmt +*.fot +*.cb +*.cb2 +.*.lb + +## Intermediate documents: +*.dvi +*.xdv +*-converted-to.* +# these rules might exclude image files for figures etc. +# *.ps +# *.eps +# *.pdf + +## Generated if empty string is given at "Please type another file name for output:" +.pdf + +## Bibliography auxiliary files (bibtex/biblatex/biber): +*.bbl +*.bcf +*.blg +*-blx.aux +*-blx.bib +*.run.xml + +## Build tool auxiliary files: +*.fdb_latexmk +*.synctex +*.synctex(busy) +*.synctex.gz +*.synctex.gz(busy) +*.pdfsync + +## Build tool directories for auxiliary files +# latexrun +latex.out/ + +## Auxiliary and intermediate files from other packages: +# algorithms +*.alg +*.loa + +# achemso +acs-*.bib + +# amsthm +*.thm + +# beamer +*.nav +*.pre +*.snm +*.vrb + +# changes +*.soc + +# comment +*.cut + +# cprotect +*.cpt + +# elsarticle (documentclass of Elsevier journals) +*.spl + +# endnotes +*.ent + +# fixme +*.lox + +# feynmf/feynmp +*.mf +*.mp +*.t[1-9] +*.t[1-9][0-9] +*.tfm + +#(r)(e)ledmac/(r)(e)ledpar +*.end +*.?end +*.[1-9] +*.[1-9][0-9] +*.[1-9][0-9][0-9] +*.[1-9]R +*.[1-9][0-9]R +*.[1-9][0-9][0-9]R +*.eledsec[1-9] +*.eledsec[1-9]R +*.eledsec[1-9][0-9] +*.eledsec[1-9][0-9]R +*.eledsec[1-9][0-9][0-9] +*.eledsec[1-9][0-9][0-9]R + +# glossaries +*.acn +*.acr +*.glg +*.glo +*.gls +*.glsdefs + +# gnuplottex +*-gnuplottex-* + +# gregoriotex +*.gaux +*.gtex + +# htlatex +*.4ct +*.4tc +*.idv +*.lg +*.trc +*.xref + +# hyperref +*.brf + +# knitr +*-concordance.tex +# TODO Comment the next line if you want to keep your tikz graphics files +*.tikz +*-tikzDictionary + +# listings +*.lol + +# luatexja-ruby +*.ltjruby + +# makeidx +*.idx +*.ilg +*.ind +*.ist + +# minitoc +*.maf +*.mlf +*.mlt +*.mtc[0-9]* +*.slf[0-9]* +*.slt[0-9]* +*.stc[0-9]* + +# minted +_minted* +*.pyg + +# morewrites +*.mw + +# nomencl +*.nlg +*.nlo +*.nls + +# pax +*.pax + +# pdfpcnotes +*.pdfpc + +# sagetex +*.sagetex.sage +*.sagetex.py +*.sagetex.scmd + +# scrwfile +*.wrt + +# sympy +*.sout +*.sympy +sympy-plots-for-*.tex/ + +# pdfcomment +*.upa +*.upb + +# pythontex +*.pytxcode +pythontex-files-*/ + +# tcolorbox +*.listing + +# thmtools +*.loe + +# TikZ & PGF +*.dpth +*.md5 +*.auxlock + +# todonotes +*.tdo + +# vhistory +*.hst +*.ver + +# easy-todo +*.lod + +# xcolor +*.xcp + +# xmpincl +*.xmpi + +# xindy +*.xdy + +# xypic precompiled matrices +*.xyc + +# endfloat +*.ttt +*.fff + +# Latexian +TSWLatexianTemp* + +## Editors: +# WinEdt +*.bak +*.sav + +# Texpad +.texpadtmp + +# LyX +*.lyx~ + +# Kile +*.backup + +# KBibTeX +*~[0-9]* + +# auto folder when using emacs and auctex +./auto/* +*.el + +# expex forward references with \gathertags +*-tags.tex + +# standalone packages +*.sta + +### LaTeX Patch ### +# glossaries +*.glstex + +# End of https://www.gitignore.io/api/latex + +# Created by https://www.gitignore.io/api/libreoffice +# Edit at https://www.gitignore.io/?templates=libreoffice + +### LibreOffice ### +# LibreOffice locks +.~lock.*# + +# End of https://www.gitignore.io/api/libreoffice diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ecc03d9 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lantern-build-engine"] + path = lantern-build-engine + url = https://gitlab.com/sbrl/lantern-build-engine.git diff --git a/build b/build new file mode 100755 index 0000000..cc8b29b --- /dev/null +++ b/build @@ -0,0 +1,106 @@ +#!/usr/bin/env bash +# Make sure the current directory is the location of this script to simplify matters +cd "$(dirname $(readlink -f $0))"; +################ +### Settings ### +################ + +# The name of this project +project_name="Example latext templates"; + +# The path to the lantern build engine git submodule +lantern_path="./lantern-build-engine"; + +### +# Custom Settings +### + +# Put any custom settings here. + + +############################################################################### + +# Check out the lantern git submodule if needed +if [ ! -f "${lantern_path}/lantern.sh" ]; then git submodule update --init "${lantern_path}"; fi + +source "${lantern_path}/lantern.sh"; + +if [[ "$#" -lt 1 ]]; then + echo -e "${FBLE}${project_name}${RS} build script"; + echo -e " by Starbeamrainbowlabs"; + echo -e "${LC}Powered by the lantern build engine, v${version}${RS}"; + echo -e ""; + echo -e "${CSECTION}Usage${RS}"; + echo -e " ./build ${CTOKEN}{action}${RS} ${CTOKEN}{action}${RS} ${CTOKEN}{action}${RS} ..."; + echo -e ""; + echo -e "${CSECTION}Available actions${RS}"; + echo -e " ${CACTION}setup${RS} - Perform initial setup"; + echo -e " ${CACTION}render${RS} - Render the LaTeX exmaples"; + echo -e ""; + + exit 1; +fi + +############################################################################### + +task_setup() { + task_begin "Setting up"; + + check_command git true; + check_command pdflatex true; + check_command bibtex true; + + subtask_begin "Initialising submodules"; + git submodule update --init; + subtask_end $?; + + task_end 0; +} + +task_render() { + _render-latex-pdf "report/report.tex"; +} + +# $1 - Location of top-level LaTeX file +_render-latex-pdf() { + task_begin "Entering directory"; + latex_filename="$(basename "$1")"; + latex_directory="$(dirname "$1")"; + + execute cd "${latex_directory}"; + execute echo "${PWD}"; + task_end $? "Failed to enter directory (does it exist?)"; + + task_begin "Cleaning up"; + find -iname "*.aux" -delete; # Ref: https://tex.stackexchange.com/q/381057 + find -iname "*.bbl" -delete; + find -iname "*.blg" -delete; + find -iname "*.out" -delete; + task_end $? "Error: Failed to clean up after last build"; + + # task_begin "Rendering images"; + # # FUTURE: Do this in paralell? + # for svg_filename in $(find "images/" -type f -iname "*.svg"); do + # execute inkscape -e ${svg_filename%%.svg}.png ${svg_filename}; + # exit_code=$?; + # [[ "${exit_code}" -eq 0 ]] || break; + # done + # task_end "${exit_code}"; + + task_begin "Building Report"; + set -e; + pdflatex --output-directory=. "${latex_filename}"; + bibtex "${latex_filename%.*}"; + pdflatex --output-directory=. "${latex_filename}"; + pdflatex --output-directory=. "${latex_filename}"; + bibtex "${latex_filename%.*}"; + pdflatex --output-directory=. "${latex_filename}"; + pdflatex --output-directory=. "${latex_filename}"; + set +e; + task_end $? "Error: Failed to build report"; +} + + +############################################################################### + +tasks_run $@; diff --git a/lantern-build-engine b/lantern-build-engine new file mode 160000 index 0000000..617fcdb --- /dev/null +++ b/lantern-build-engine @@ -0,0 +1 @@ +Subproject commit 617fcdb5b9df7f57ccb6639a87be68238f99b9ed diff --git a/report/chapters/1-introduction.tex b/report/chapters/1-introduction.tex new file mode 100644 index 0000000..6ffb8a7 --- /dev/null +++ b/report/chapters/1-introduction.tex @@ -0,0 +1,7 @@ +\chapter{Introduction} + +% \comments{This is a comment} + +Example section 1 \citep{McGooganEtAl2017} + +TODO: Replace this with actual content \citep{Dixon2012,Mulholland2013,Walsh2010} diff --git a/report/chapters/2-example.tex b/report/chapters/2-example.tex new file mode 100644 index 0000000..9dbd991 --- /dev/null +++ b/report/chapters/2-example.tex @@ -0,0 +1,9 @@ +\chapter{Example Section} +\label{section:aims-and-objectives} + +\section{Section} +Example + +\subsection{Subsection} + +More text here diff --git a/report/chapters/7-appendix.tex b/report/chapters/7-appendix.tex new file mode 100644 index 0000000..ab309c0 --- /dev/null +++ b/report/chapters/7-appendix.tex @@ -0,0 +1,12 @@ +\begin{appendices} + + +\chapter{Appendix A: Example Appendix} +\label{chapter:appendix-a} + +\begin{lstlisting} +Some code +\end{lstlisting} + + +\end{appendices} diff --git a/report/hull.bst b/report/hull.bst new file mode 100644 index 0000000..a7b73c0 --- /dev/null +++ b/report/hull.bst @@ -0,0 +1,1559 @@ +%% +%% This is file `hull.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,pres,nm-rev,ed-rev,blkyear,dt-beg,yr-par,yrp-x,note-yr,trnum-it,volp-com,num-xser,bkpg-x,add-pub,pre-edn,edparxc,blk-tit,ppx,ed,ord,amper,and-xcom,etal-xc,url,url-nt,em-it,plntx,') +%% ---------------------------------------- +%% *** Harvard Referencing Style for University of Hull *** +%% +%% Copyright 1994-2011 Patrick W Daly + % =============================================================== + % IMPORTANT NOTICE: + % This bibliographic style (bst) file has been generated from one or + % more master bibliographic style (mbs) files, listed above. + % + % This generated file can be redistributed and/or modified under the terms + % of the LaTeX Project Public License Distributed from CTAN + % archives in directory macros/latex/base/lppl.txt; either + % version 1 of the License, or any later version. + % =============================================================== + % Name and version information of the main mbs file: + % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % This bibliography style file is intended for texts in ENGLISH + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % The form of the \bibitem entries is + % \bibitem[Jones et al.(1990)]{key}... + % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... + % The essential feature is that the label (the part in brackets) consists + % of the author names, as they should appear in the citation, with the year + % in parentheses following. There must be no space before the opening + % parenthesis! + % With natbib v5.3, a full list of authors may also follow the year. + % In natbib.sty, it is possible to define the type of enclosures that is + % really wanted (brackets or parentheses), but in either case, there must + % be parentheses in the label. + % The \cite command functions as follows: + % \citet{key} ==>> Jones et al. (1990) + % \citet*{key} ==>> Jones, Baker, and Smith (1990) + % \citep{key} ==>> (Jones et al., 1990) + % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) + % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) + % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) + % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + edition + editor + eid + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + } + {} + { label extra.label sort.label short.list } +INTEGERS { output.state before.all mid.sentence after.sentence after.block } +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {date.block} +{ + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{ \textit{" swap$ * "})\/}" * } + if$ +} +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {capitalize} +{ "u" change.case$ "t" change.case$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + % Here are the language-specific definitions for explicit words. + % Each function has a name bbl.xxx where xxx is the English word. + % The language selected here is ENGLISH +FUNCTION {bbl.and} +{ "and"} + +FUNCTION {bbl.etal} +{ "et~al." } + +FUNCTION {bbl.editors} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edition" } + +FUNCTION {bbl.volume} +{ "volume" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "number" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "" } + +FUNCTION {bbl.page} +{ "" } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.techrep} +{ "Technical Report" } + +FUNCTION {bbl.dissertation} +{ "Dissertation" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +FUNCTION {bbl.first} +{ "1st" } + +FUNCTION {bbl.second} +{ "2nd" } + +FUNCTION {bbl.third} +{ "3rd" } + +FUNCTION {bbl.fourth} +{ "4th" } + +FUNCTION {bbl.fifth} +{ "5th" } + +FUNCTION {bbl.st} +{ "st" } + +FUNCTION {bbl.nd} +{ "nd" } + +FUNCTION {bbl.rd} +{ "rd" } + +FUNCTION {bbl.th} +{ "th" } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +FUNCTION {eng.ord} +{ duplicate$ "1" swap$ * + #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ + duplicate$ "1" = + { pop$ bbl.st * } + { duplicate$ "2" = + { pop$ bbl.nd * } + { "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + pop$ + } + if$ + } + if$ +} +INTEGERS { nameptr namesleft numnames } + + +STRINGS { bibinfo} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, jj}{, f.}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + "\&" + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } if$ +} +FUNCTION {format.names.ed} +{ + format.names +} +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.note} +{ + url empty$ + 'skip$ + { "\urlprefix\url{" url * "}" * output } + if$ + note empty$ + { "" } + { note #1 #1 substring$ + duplicate$ "{" = + 'skip$ + { output.state mid.sentence = + { "l" } + { "u" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + } + if$ +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check +} +FUNCTION {format.full.names} +{'s := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal * + } + { + "\&" + space.word * t * + } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in capitalize + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +FUNCTION {format.btitle} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { + emphasize + } + if$ +} +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.volume volume tie.or.space.prefix + "volume" bibinfo.check * * + series "series" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +FUNCTION {convert.edition} +{ extract.num "l" change.case$ 's := + s "first" = s "1" = or + { bbl.first 't := } + { s "second" = s "2" = or + { bbl.second 't := } + { s "third" = s "3" = or + { bbl.third 't := } + { s "fourth" = s "4" = or + { bbl.fourth 't := } + { s "fifth" = s "5" = or + { bbl.fifth 't := } + { s #1 #1 substring$ is.num + { s eng.ord 't := } + { edition 't := } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + t +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + convert.edition + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + n.dashify + } + { + } + if$ + "pages" bibinfo.check + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + ", " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} +FUNCTION {format.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ", " * + } + if$ + swap$ * + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + number "number" bibinfo.check duplicate$ empty$ 'skip$ + { + swap$ duplicate$ empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + swap$ + "(" swap$ * ")" * + } + if$ * + eid empty$ + { format.journal.pages } + { format.journal.eid } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.booktitle} +{ + booktitle "booktitle" bibinfo.check + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ format.booktitle duplicate$ empty$ 'skip$ + { + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + " " * + get.bbl.editor + "(" swap$ * ") " * + * swap$ + * } + if$ + word.in swap$ * + } + if$ +} +FUNCTION {format.thesis.type} +{ type duplicate$ empty$ + 'pop$ + { swap$ pop$ + "t" change.case$ "type" bibinfo.check + } + if$ +} +FUNCTION {format.tr.number} +{ number "number" bibinfo.check + type duplicate$ empty$ + { pop$ bbl.techrep } + 'skip$ + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ "t" change.case$ } + { tie.or.space.prefix * * } + if$ +} +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.book.crossref} +{ volume duplicate$ empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + pop$ word.in + } + { bbl.volume + capitalize + swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * + } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + address empty$ t empty$ and + 'skip$ + { + address "address" bibinfo.check * + t empty$ + 'skip$ + { address empty$ + 'skip$ + { ": " * } + if$ + t * + } + if$ + } + if$ +} +FUNCTION {format.publisher.address} +{ publisher "publisher" bibinfo.warn format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.note output + fin.entry +} +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.sentence + format.number.series output + format.edition output + format.publisher.address output + } + { + new.sentence + format.book.crossref output.nonnull + } + if$ + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.sentence + format.number.series output + format.edition output + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.sentence + format.book.crossref output.nonnull + } + if$ + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.edition output + format.chapter.pages output + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + new.sentence + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.sentence + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.note output + fin.entry +} + +FUNCTION {dissertation} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.sentence + bbl.dissertation format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.sentence + howpublished "howpublished" bibinfo.check output + format.note output + fin.entry +} +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.sentence + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.note output + fin.entry +} + +FUNCTION {presentation} +{ output.bibitem + format.authors output + author format.key output + format.title output + new.sentence + format.organization.address "organization and address" output.check + month "month" output.check + year "year" output.check + format.note output + new.sentence + type missing$ 'skip$ + {"(" type capitalize * ")" * output} + if$ + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + format.tr.number emphasize output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } +READ +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} +INTEGERS { len } +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} +FUNCTION {format.lab.names} +{ 's := + "" 't := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ + " " * bbl.etal * + } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { " \& " * s #2 "{vv~}{ll}" format.name$ + * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.short.authors} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'short.list := +} + +FUNCTION {calc.label} +{ calc.short.authors + short.list + "(" + * + year duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" 't := } + 'skip$ + if$ + t sortify * + } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := + "a" chr.to.int$ #1 - 'last.extra.num.blank := + last.extra.num.blank 'last.extra.num.extended := + #0 'number.label := +} +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num "z" chr.to.int$ > + { "a" chr.to.int$ 'last.extra.num := + last.extra.num.extended #1 + 'last.extra.num.extended := + } + 'skip$ + if$ + last.extra.num.extended last.extra.num.blank > + { last.extra.num.extended int.to.chr$ + last.extra.num int.to.chr$ + * 'extra.label := } + { last.extra.num int.to.chr$ 'extra.label := } + if$ + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ + number.label #1 + 'number.label := +} +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := + extra.label + duplicate$ empty$ + 'skip$ + { "{\natexlab{" swap$ * "}}" * } + if$ + 'extra.label := + label extra.label * 'label := +} +EXECUTE {initialize.extra.label.stuff} +ITERATE {forward.pass} +REVERSE {reverse.pass} +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} +ITERATE {bib.sort.order} +SORT +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * + write$ newline$ + "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\expandafter\ifx\csname url\endcsname\relax" + write$ newline$ + " \def\url#1{{\tt #1}}\fi" + write$ newline$ + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `hull.bst'. diff --git a/report/report.bib b/report/report.bib new file mode 100644 index 0000000..078d1ea --- /dev/null +++ b/report/report.bib @@ -0,0 +1,319 @@ +ARTICLE{Canny1986, + author={J. Canny}, + journal={IEEE Transactions on Pattern Analysis and Machine Intelligence}, + title={A Computational Approach to Edge Detection}, + year={1986}, + volume={8}, + number={6}, + pages={679-698}, +} + +Book{Stroustrup2013, + author = {Bjarne Stroustrup}, + title = {The C++ Programming Language}, + publisher = {Addison-Wesley}, + year = {2013}, + edition = {4th}, +} + +inproceedings{Kazhdan2006, + author = {Kazhdan, Michael and Bolitho, Matthew and Hoppe, Hugues}, + title = {Poisson Surface Reconstruction}, + booktitle = {Proceedings of the Fourth Eurographics Symposium on Geometry Processing}, + series = {SGP '06}, + year = {2006}, + location = {Cagliari, Sardinia, Italy}, + pages = {61--70}, + publisher = {Eurographics Association}, +} + +Misc{Vulkan2016, + author = {{The Khronos Vulkan Working Group}}, + title = {Vulkan 1.0.31 - A Specification}, + howpublished = {Available online: \url{https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html}} [Accessed 15/10/2016]}, + year = {2016}, +} + +Misc{Hull2016HarvardRef, + author = {{University of Hull}}, + title = {Harvard Referencing}, + howpublished = {Available online: \url{http://www2.hull.ac.uk/lli/referencing/harvard.html}} [Accessed 15/10/2016]}, + year = {2016}, +} + +@Misc{Atom2018, + author = {{Github, Inc.}}, + year = {2018}, + title = {Atom}, + howpublished = {Available online; \url{https://atom.io/} [Accessed 2/05/2018]} +} + +@Misc{Bison2015, + author = {{Free Software Foundation, Inc.}}, + year = {2015}, + title = {GNU Bison Manual}, + howpublished = {Available online: \url{https://www.gnu.org/software/bison/manual/} [Accessed 19/04/2018]} +} + +@Misc{BroMonitor2018, + author = {{Bro Project Team}}, + year = {2018}, + title = {The Bro Network Security Monitor}, + howpublished = {Available online: \url{https://www.bro.org/} [Accessed 17/01/2018]} +} + +@Misc{ByronJ2017, + author = {{Byron, J.}}, + year = {2017}, + title = {MIDI Tutorial - learn.sparkfun.com}, + howpublished = {Available online: \url{https://learn.sparkfun.com/tutorials/midi-tutorial/all} [Accessed 18/01/2018]} +} + +@article{Cole1988, + author = { W. A. Macdonald and B. L. Cole }, + title = {Evaluating the role of colour in a flight information cockpit display}, + journal = {Ergonomics}, + volume = {31}, + number = {1}, + pages = {13-37}, + year = {1988}, + publisher = {Taylor & Francis}, + doi = {10.1080/00140138808966646}, + note ={PMID: 3359985}, + URL = {https://doi.org/10.1080/00140138808966646}, + eprint = {https://doi.org/10.1080/00140138808966646} +} + +@Misc{DaveMarshall2001, + author = {Dave Marshall}, + title = {MIDI Messages}, + year = {2001}, + howpublished = {Available online: \url{https://users.cs.cf.ac.uk/Dave.Marshall/Multimedia/node158.html} [Accessed 18/01/2018]} +} + +@Book{DickGrune2008, + author = {Dick Grune and Ceriel J.H. Jacobs}, + title = {Parsing Techniques}, + publisher = {Springer US}, + year = {2008}, + edition = {2nd}, + isbn = {9781441919014} +} + +@mastersthesis{Dixon2012, + author = {{Dixon, J. W. D.}}, + title = {Sound Based Network Analysis Tool}, + school = {University of Hull}, + year = {2012}, + howpublished = {Available online: \url{https://hydra.hull.ac.uk/assets/hull:6391a/content} [Accessed 10/13/2017]} +} + +@Book{DragonBook2006, + author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.}, + title = {Compilers: Principles, Techniques, and Tools}, + edition = {2nd}, + year = {2006}, + isbn = {0321486811}, + publisher = {Addison-Wesley Longman Publishing Co., Inc.}, +} + +@Misc{FluidSynth2017, + author = "Tom Moebert and Contributors", + title = {FluidSynth | Software synthesizer based on the SoundFont 2 specifications}, + year = {2017}, + howpublished = {Available online: \url{http://www.fluidsynth.org/} [Accessed 13/10/2017]} +} + +@manual{grep, + title = {{GREP(1) - User Commands}}, + author = "Free Software Foundation, Inc.", + edition = {3.1}, + year = {2017} +} + +@manual{iftop, + title = {{IFTOP(8) - System Manager's Manual}}, + author = {Paul Warren}, + edition = {1.0pre4}, + year = {2014} +} + +@Misc{IpsumDump2017, + author = {Eddie Kohler}, + year = {2017}, + title = {Ipsumdump and Ipaggcreate}, + howpublished = {Available online: \url{https://web.archive.org/web/20170909151053/http://www.read.seas.harvard.edu/~kohler/ipsumdump/} [Accessed 17/01/2018]} +} + +@Misc{Naudio2018, + author = "Mark Heath and Contributors", + year = {2018}, + title = {naudio/NAudio: Audio and MIDI library for .NET}, + howpublished = {Available online: \url{https://github.com/naudio/NAudio} [Accessed 17/01/2018]} +} + +@Misc{Kampe2012, + author = {{Mark Kampe}}, + year = {2012}, + title = {Guidelines for Command Line Interface Design}, + howpublished = {Available online: \url{http://www.cs.pomona.edu/classes/cs181f/supp/cli.html} [Accessed 27/04/2018]} +} + +@manual{man, + title = {{MAN(1) - Manual pager utils}}, + author = "Colin Watson and Contributors", + edition = {2.7.6.1}, + year = {2016} +} + +@Misc{ManagedMidi2018, + author = {{Atsushi Eno}}, + title = {atsushieno/managed-midi: Cross-platform MIDI processing library for mono and .NET}, + year = {2018}, + howpublished = {Available online: \url{https://github.com/atsushieno/managed-midi/} [Accessed 17/01/2018]} +} + +@Misc{McGooganEtAl2017, + author = "McGoogan, Cara and Titcomb, J. and Krol, C.", + year = {2017}, + title = {What is WannaCry and how does ransomware work?}, + howpublished = {Available online: \url{http://www.telegraph.co.uk/technology/0/ransomware-does-work/} [Accessed 13/10/2017]} +} + +@Misc{MidiAssociation2017, + author = {{The MIDI Association}}, + year = {2017}, + title = {About MIDI-Part 3:MIDI Messages}, + howpublished = {Available online: \url{https://www.midi.org/articles/about-midi-part-3-midi-messages} [Accessed 07/05/2018]} +} + +@Misc{MidiAssociationSummary2017, + author = {{The MIDI Association}}, + year = {2017}, + title = {Summary of MIDI Messages}, + howpublished = {Available online: \url{https://www.midi.org/specifications/item/table-1-summary-of-midi-message} [Accessed 07/05/2018]} +} + +@Misc{MidiToolkit2007, + author = {{Leslie Sanford}}, + year = {2007}, + title = {C\# MIDI Toolkit - CodeProject}, + howpublished = {Available online: \url{https://www.codeproject.com/Articles/6228/C-MIDI-Toolkit} [Accessed 17/01/2018]} +} + +@dissertation{Mulholland2013, + author = {{Mulholland, D. C.}}, + year = {2013}, + title = {Sound Based Network Intrusion Detection.}, + school = {The University of Hull}, + howpublished = {Available online: \url{https://hydra.hull.ac.uk/assets/hull:7736a/content} [Accessed 13/10/2017]} +} + +@Misc{PacketNet2018, + author = "Chris Morgan and Contributors", + year = {2017}, + title = {antmicro/Packet.Net: Forked from \url{http://sourceforge.net/projects/packetnet/}}, + howpublished = {Available online: \url{https://github.com/antmicro/Packet.Net} [Accessed 17/01/2018]} +} + +@Misc{Pygame2018, + author = {{Pygame contributors}}, + year = {2018}, + title = {{Pygame Front Page — Pygame v1.9.2 documentation}}, + howpublished = {Available online: \url{http://www.pygame.org/docs/} [Accessed 14/01/2018]} +} + +@Misc{Roos2008, + author = {{Roos, D.}}, + year = {2008}, + title = {How MIDI Works}, + howpublished = {Available online: \url{http://entertainment.howstuffworks.com/midi1.htm} [Accessed 13/10/2017]} +} + +@Misc{SharpPcap2018, + author = "Chris Morgan and Contributors", + year = {2017}, + title = {chmorgan/sharppcap: Official repository - Fully managed, cross platform (Windows, Mac, Linux) .NET library for capturing packets}, + howpublished = {Available online: \url{https://github.com/chmorgan/sharppcap} [Accessed 17/01/2018]} +} + +@Misc{Snort2018, + author = {{The Snort Project}}, + year = {2018}, + title = {{Snort - Network Intrusion Detection \& Prevention System}}, + howpublished = {Available online: \url{https://www.snort.org/} [Accessed 17/01/2018]} +} + +@manual{tcpdump, + title = {{TCPDUMP(8) - System Manager's Manual}}, + author = {tcpdump.org}, + edition = {4.9.2}, + year = {2017} +} + +% The url is here is causing an error because of the tilde +% TODO: Ask Brian about it +@Misc{TheodoreNorvell1999, + author = {Theodore Norvell}, + year = {1999}, + title = {Parsing Expressions by Recursive Descent}, + howpublished = {Available online: \url{https://www.engr.mun.ca/~theo/Misc/exp_parsing.htm} [Accessed 19/04/2018]} +} + +@Misc{TiMidity2004, + author = {{Masanao Izumo et al.}}, + year = {2004}, + title = {TiMidity++}, + howpublished = {Available online: \url{http://timidity.sourceforge.net/} [Accessed 17/01/2018]} +} + +@Misc{TonalSoft2005, + author = {{Tonalsoft Inc.}}, + year = {2005}, + title = {Midi Note-on Message, Midi Note-off Message}, + howpublished = {Available online: \url{http://www.tonalsoft.com/pub/pitch-bend/pitch.2005-08-31.17-00.aspx} [Accessed 18/01/2018]} +} + +@Misc{USCERT2016, + author = {{US-CERT}}, + year = {2016}, + title = {OpenSSL 'Heartbleed' vulnerability (CVE-2014-0160)}, + howpublished = {Available online: \url{https://www.us-cert.gov/ncas/alerts/TA14-098A} [Accessed 13/10/2017]} +} + +@dissertation{VictorvanderHelm2016, + author = {{Victor van der Helm}}, + year = {2016}, + title = {Sound Based Network Intrusion System}, + school = {The University of Hull} +} + +@Misc{VisualStudioCode2018, + author = {{Microsoft Corporation}}, + year = {2018}, + title = {Visual Studio Code - Code Editing. Redefined}, + howpublished = {Available online: \url{https://code.visualstudio.com/} [Accessed 02/05/2018]} +} + +@dissertation{Walsh2010, + author = {{Walsh, S. K.}}, + year = {2010}, + title = {Sound Based Network Intrusion Detection}, + school = {The University of Hull}, + howpublished = {Available online: \url{https://hydra.hull.ac.uk/assets/hull:2817a/content} [Accessed +13/10/2017]} +} + +@Misc{Wireshark2018, + author = {{Wireshark Foundation}}, + year = {2018}, + title = {Wireshark · Go Deep.}, + howpublished = {Available online: \url{https://www.wireshark.org/} [Accessed 18/01/2018]} +} + +@Misc{WiresharkUsersGuide2014, + author = {{Wireshark Foundation}}, + year = {2014}, + title = {Wireshark User’s Guide}, + howpublished = {Available online: \url{https://www.wireshark.org/download/docs/user-guide-a4.pdf} [Accessed 18/01/2018]} +} diff --git a/report/report.pdf b/report/report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b9ac7d1e7d1188809b3651235491d0cf940570d0 GIT binary patch literal 49753 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 literal 0 HcmV?d00001 diff --git a/report/report.tex b/report/report.tex new file mode 100644 index 0000000..c70a366 --- /dev/null +++ b/report/report.tex @@ -0,0 +1,62 @@ +\documentclass[a4paper,headings=small,11pt,oneside,bibliography=totoc]{scrreprt} +\addtokomafont{disposition}{\sffamily} +\renewcommand\familydefault{\sfdefault} +\usepackage[utf8x]{inputenc} +\usepackage[english]{babel} +\usepackage{amssymb} +\usepackage{amsthm} +\usepackage{amsmath} +\usepackage[dvipsnames]{xcolor} +\usepackage{graphicx} +\usepackage{pdfpages} +\usepackage{microtype} +\usepackage{palatino} +\usepackage[round,colon]{natbib} +\usepackage[hidelinks]{hyperref} +\usepackage[titletoc]{appendix} +\pagestyle{headings} +\usepackage{parskip} +\usepackage{listings} +% From http://tex.stackexchange.com/questions/121601/ddg#121618 +\lstset{ + basicstyle=\small\ttfamily, + columns=flexible, + breaklines=true +} + +\newcommand{\comments}[1]{\textcolor{OliveGreen}{[\emph{#1}]}} + +\newcommand{\reporttype}{Final Report} + +% % Fill out the following information to customize your title page +\title{Report Title} +\author{Name} + +% % Uncomment one of the following lines according to your degree title +\newcommand{\degreetitle}{BSc} +%\newcommand{\degreetitle}{BSc Ordinary} +%\newcommand{\degreetitle}{MEng} + +% % Fill your degree programme name here +\newcommand{\progname}{Degree Program} + +% % Fill in your word count here +\newcommand{\wordcount}{XYZW} + +\begin{document} + +\input{title_page/page} + +\clearpage + +\tableofcontents + +\input{chapters/1-introduction} +\input{chapters/2-example} + +\input{chapters/7-appendix} + +\bibliographystyle{hull} +\bibliography{report} + +\end{document} diff --git a/report/title_page/UoH_Logo.pdf b/report/title_page/UoH_Logo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..76310e86387af2c5de722fda14de9bae64c4a3e9 GIT binary patch literal 51628 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 z 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