chore: started working on the report

This commit is contained in:
agh 2023-10-16 14:48:04 +01:00
commit 22b0abdba7
10 changed files with 1050 additions and 0 deletions

96
.drone.yml Normal file
View File

@ -0,0 +1,96 @@
---
kind: pipeline
type: exec
name: Build and deploy
steps:
- name: Linting
commands:
- bash linting.sh
- name: Build UPDS-1
commands:
- cd upds-1
- pdflatex UPDS12-1.tex
# Prepare bib
- /usr/bin/vendor_perl/biber UPDS12-1
# Compile twice for the table of contents and for bib text
- pdflatex UPDS12-1.tex
- cd -
- name: Build UPDS-2
commands:
- cd upds-2
- pdflatex UPDS12-2.tex
# Prepare bib
- /usr/bin/vendor_perl/biber UPDS12-2
# Compile twice for the table of contents and for bib text
- pdflatex UPDS12-2.tex
- cd -
- name: Build Report
commands:
- cd report
- cp ../upds-1/UPDS-content.tex UPDS-1-content.tex
- cp ../upds-2/UPDS-content.tex UPDS-2-content.tex
- pdflatex report.tex
# Prepare bib
- /usr/bin/vendor_perl/biber report
# Compile twice for the table of contents and for bib text
- pdflatex report.tex
- cd -
- name: Build Poster
commands:
- cd poster
- echo -e "\n\n\nFirst 1\n\n\n"
- pdflatex poster.tex || cat poster.log
# Prepare bib
- echo -e "\n\n\nFirst 2\n\n\n"
- /usr/bin/vendor_perl/biber poster
# Compile twice for the table of contents and for bib text
- echo -e "\n\n\nFirst 3\n\n\n"
- pdflatex poster.tex
- cd -
- name: Generate text
commands:
- pnpm i
- pnpm ts-node main.ts report/report.tex
- name: gitea_release
environment:
TOKEN:
from_secret: token
commands:
- tea login add --url https://git.andr3h3nriqu3s.com --token "$TOKEN"
- tea r rm -y current || echo "Release not found"
- tea r c --title "Latest Report" --asset report/report.pdf --asset upds-1/UPDS12-1.pdf --asset upds-2/UPDS12-2.pdf --asset results.txt --asset poster/poster.pdf current
- name: Remove current on failure
environment:
TOKEN:
from_secret: token
commands:
- tea login add --url https://git.andr3h3nriqu3s.com --token "$TOKEN"
- tea r rm -y current || echo "Release not found"
trigger:
status:
- failure
when:
status:
- failure
#- name: latest
# environment:
# TOKEN:
# from_secret: token
# commands:
# - tea r rm -y "3rd-metting" || echo "Release not found"
# - tea r c --title "Last Metting Report" --asset report/report.pdf --asset upds-1/UPDS12-1.pdf --asset upds-2/UPDS12-2.pdf "3rd-metting"
trigger:
branch:
- main
node:
lights: builder

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*.pdf
.DS_store
!report/Placement Report and Presentation Company Confidentiality (Required).pdf
node_modules

31
linting.sh Normal file
View File

@ -0,0 +1,31 @@
#!/bin/bash
if grep "codding" -R . --exclude=linting.sh; then
echo 'Found codding'
grep "codding" -R . --exclude=linting.sh
exit 1
fi
if grep " sky " -R . --exclude=linting.sh; then
echo 'Found " sky " this is probably wrong'
grep " sky " -R . --exclude=linting.sh
exit 1
fi
if grep " devolving " -R . --exclude=linting.sh; then
echo 'Found " devolving " this is probably wrong'
grep " devolving " -R . --exclude=linting.sh
exit 1
fi
if grep " prof " -R . --exclude=linting.sh; then
echo 'Found " prof " this is probably wrong'
grep " prof " -R . --exclude=linting.sh
exit 1
fi
if grep " codded " -R . --exclude=linting.sh; then
echo 'Found " codded " this is probably wrong'
grep " codded " -R . --exclude=linting.sh
exit 1
fi

289
main.bib Normal file
View File

@ -0,0 +1,289 @@
@misc{confluence,
author = {Atlassian},
title = {{C}onfluence | {Y}our {R}emote-{F}riendly {T}eam {W}orkspace | {A}tlassian --- atlassian.com},
howpublished = {\url{https://www.atlassian.com/software/confluence}},
year = {},
note = {(Accessed 26-Jun-2023)},
}
@misc{jira,
author = {Atlassian},
title = {{J}ira | {I}ssue \& {P}roject {T}racking {S}oftware | {A}tlassian --- atlassian.com},
howpublished = {\url{https://www.atlassian.com/software/jira}},
year = {},
note = {(Accessed 26-Jun-2023)},
}
@misc{ldap,
series = {Request for Comments},
number = 5058,
howpublished = {RFC 5058},
publisher = {RFC Editor},
doi = {10.17487/RFC5058},
url = {https://www.rfc-editor.org/info/rfc5058},
author = {Dirk Ooms and Nancy Feldman and Yuji Imai and Wim P. Livens and Dr. Richard H. Boivie},
title = {{Explicit Multicast (Xcast) Concepts and Options}},
pagetotal = 35,
year = 2007,
month = nov,
abstract = {While traditional IP multicast schemes (RFC 1112) are scalable for very large multicast groups, they have scalability issues with a very large number of distinct multicast groups. This document describes Xcast (Explicit Multi-unicast), a new multicast scheme with complementary scaling properties: Xcast supports a very large number of small multicast sessions. Xcast achieves this by explicitly encoding the list of destinations in the data packets, instead of using a multicast group address. This document discusses Xcast concepts and options in several areas; it does not provide a complete technical specification. This memo defines an Experimental Protocol for the Internet community.},
}
@misc{sky,
author = {},
title = {{S}ky {G}roup - {E}uropes leading direct-to-consumer media and entertainment company --- skygroup.sky},
howpublished = {\url{https://www.skygroup.sky}},
year = {},
note = {(Accessed 26-Jun-2023)},
}
@misc{gitlab,
author = {},
title = {The DevSecOps Platform | GitLab},
howpublished = {\url{https://about.gitlab.com/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{jenkins,
author = {},
title = {Jenkins},
howpublished = {\url{https://www.jenkins.io/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{ansible,
author = {},
title = {Ansible is Simple IT Automation},
howpublished = {\url{https://www.ansible.com/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{grafana,
author = {},
title = {Grafana: The open observability platform | Grafana Labs},
howpublished = {\url{https://grafana.com/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{ffmpeg,
author = {},
title = {FFmpeg},
howpublished = {\url{https://ffmpeg.org/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{keepass,
author = {},
title = {KeePassXC Password Manager},
howpublished = {\url{https://keepassxc.org/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{cyberark,
author = {},
title = {Identity Security and Access Management Leader | CyberArk},
howpublished = {\url{https://www.cyberark.com/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{docker,
author = {},
title = {Docker: Accelerated, Containerized Application Development},
howpublished = {\url{https://www.docker.com/}},
month = {},
year = {},
note = {(Accessed on 06/26/2023)}
}
@misc{opsview,
author = {},
title = {Opsview > Monitoring},
month = {},
year = {},
% TODO check this later
note = {Image generated, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{grafana_charts,
author = {},
title = {Grafana - Files in Flight Dashboard Graphs},
month = {},
year = {},
% TODO check this later
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{actual-intake,
author = {},
title = {Dashboard [Jenkins]},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{test-intake,
author = {},
title = {Dashboard [Jenkins]},
howpublished = {},
month = {},
year = {},
note = {Screenshot of the page locally hosted page, (Accessed on 06/29/2023), not accessible}
}
@misc{spoglight-api,
author = {},
title = {Swagger UI},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{spotlight,
author = {},
title = {Spotlight},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{spog,
author = {},
title = {Spog},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{spog-report,
author = {},
title = {Spog},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{launchpad,
author = {},
title = {Launchpad page},
month = {},
year = {},
note = {Screenshot of the page, (Accessed on 06/29/2023), not accessible outside Sky UK}
}
@misc{launchpad-code,
author = {Andre Henriques},
title = {Screenshot of the Code},
}
@misc{devops-vault,
author = {},
title = {Devops Vault},
howpublished = {},
month = {},
year = {},
note = {Screenshot of the page locally hosted page, (Accessed on 06/29/2023), not accessible}
}
@misc{typescript,
author = {},
title = {TypeScript: JavaScript With Syntax For Types.},
howpublished = {\url{https://www.typescriptlang.org/}},
month = {},
year = {},
note = {(Accessed on 08/07/2023)}
}
@misc{react,
author = {},
title = {React},
howpublished = {\url{https://react.dev/}},
month = {},
year = {},
note = {(Accessed on 08/07/2023)}
}
@misc{prisma,
author = {},
title = {Prisma | Next-generation ORM for Node.js \& TypeScript},
howpublished = {\url{https://www.prisma.io/}},
month = {},
year = {},
note = {(Accessed on 08/07/2023)}
}
@misc{postgres,
author = {},
title = {PostgreSQL: The world's most advanced open source database},
howpublished = {\url{https://www.postgresql.org/}},
month = {},
year = {},
note = {(Accessed on 08/07/2023)}
}
@misc{nginx,
author = {},
title = {Advanced Load Balancer, Web Server, \& Reverse Proxy - NGINX},
howpublished = {\url{https://www.nginx.com/}},
month = {},
year = {},
note = {(Accessed on 08/07/2023)}
}
@misc{dockerlogo,
author = {},
title = {Press and Media Resources - Docker},
howpublished = {\url{https://www.docker.com/company/newsroom/media-resources/}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{jenkinslogo,
author = {},
title = {jenkins.png (742×1024)},
howpublished = {\url{https://www.jenkins.io/images/logos/jenkins/jenkins.png}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{typescriptlogo,
author = {},
title = {TypeScript: Branding},
howpublished = {\url{https://www.typescriptlang.org/branding/}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{ansiblelogo,
author = {},
title = {logos/logos/ansible.svg at main · gilbarbara/logos},
howpublished = {\url{https://github.com/gilbarbara/logos/blob/main/logos/ansible.svg}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{reactlogo,
author = {},
title = {React},
howpublished = {\url{https://react.dev/}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{gitlablogo,
author = {},
title = {Press kit | GitLab},
howpublished = {\url{https://about.gitlab.com/press/press-kit/}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{atlassianlogo,
author = {},
title = {Logo library - Resources - Atlassian Design System},
howpublished = {\url{https://atlassian.design/resources/logo-library}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{flasklogo,
author = {},
title = {Welcome to Flask — Flask Documentation (1.1.x)},
howpublished = {\url{https://flask.palletsprojects.com/en/1.1.x/}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}
@misc{skyaboutus,
author = {},
title = {About Us | Sky Group},
howpublished = {\url{https://www.skygroup.sky/about-us}},
month = {},
year = {},
note = {(Accessed on 08/10/2023)}
}

400
main.ts Normal file
View File

@ -0,0 +1,400 @@
import process, { stdout } from 'node:process';
import fs from 'fs/promises';
import { FileHandle } from 'node:fs/promises';
import nPath from 'node:path';
type Command = {
type: 'command'
start: number;
text: string;
name: string;
options: Text[];
inner: Text[];
};
type Comment = {
type: 'comment'
start: number;
text: string;
};
type Range = {
type: 'range'
start: number;
text: string;
};
type Token = Command | Range | Comment;
type Text = {
start: number,
tokens: Token[];
};
function processComment(data: string, start: number): {comment: Comment, i: number} {
let comment: Comment = {
type: 'comment',
start,
text: "",
};
for (let i = start; i < data.length; i++) {
const char = data[i];
comment.text += char;
if (char == '\n')
return {comment, i};
}
return {comment, i: data.length - 1};
}
function isValid(test: string) {
return test.match(/[a-zA-Z_\\*]/);
}
function processCommand(data: string, start: number): {command: Command, i: number} {
let command: Command = {
type: 'command',
start,
text: "/",
name: "",
options: [],
inner: [],
};
start++;
for (let i = start; i < data.length; i++) {
const char = data[i]
if (char == '[') {
if (!command.name)
command.name = data.substring(command.start + 1, i);
const {text, i: tempI} = processText(data, i, ']', true)
i = tempI;
command.options.push(text);
}
if (char == '{') {
if (!command.name)
command.name = data.substring(command.start + 1, i);
const {text, i: tempI} = processText(data, i, '}', true);
i = tempI;
command.inner.push(text);
}
if (!isValid(char)) {
if (!command.name)
command.name = data.substring(command.start + 1, i);
return {command, i: i - 1};
}
command.text += char;
}
return {command, i: data.length - 1};
}
function processText(data: string, start: number = 0, delimiter: string = "", exclude = false): {text: Text, i: number} {
let text: Text = {
start,
tokens: [],
}
let range: Range = {
type: 'range',
start,
text: "",
};
if (exclude)
start++;
for (let i = start; i < data.length; i++) {
const char = String(data[i]);
//process.stdout.write(char);
if (delimiter == char) {
if (delimiter && !exclude)
range.text += char;
if (range.text.length > 0) {
text.tokens.push(range);
}
return {text, i: i + 1};
}
if (char == '%') {
if (range.text.length > 0) {
text.tokens.push(range);
}
let {comment, i: tempI} = processComment(data, i);
i = tempI;
text.tokens.push(comment);
range = {
type: 'range',
start: i,
text: "",
};
continue;
}
if (char == '\\') {
if (range.text.length > 0) {
text.tokens.push(range);
}
let {command, i: tempI} = processCommand(data, i);
i = tempI;
text.tokens.push(command);
range = {
type: 'range',
start: i,
text: ""
};
continue;
}
range.text += char;
}
if (delimiter) {
throw new Error(`Delimiter '${delimiter}'`);
}
return {text, i: data.length - 1, };
}
async function main() {
if (process.argv.length < 3) {
console.error("Not enogh arguments");
process.exit(1);
}
const path = process.argv[2];
const basePath =nPath.dirname(path);
const stat = await fs.stat(path);
if (!stat.isFile()) {
console.error(`'${path}' is not a file`);
process.exit(1);
}
const data = (await fs.readFile(path)).toString();
let {text} = processText(data);
const file = (await fs.open('results.txt', 'w'));
await printText(text, file, basePath);
}
function printItemize(text: Text, file: FileHandle, start: number): number {
for (let i = start; i < text.tokens.length; i++) {
const token = text.tokens[i];
if (token.type == 'range') {
file.write(token.text);
continue;
} else if (token.type == 'command') {
if (token.name == 'item') {
file.write('- ');
} else if (token.name == 'end') {
const inner = token.inner[0].tokens[0].text;
if (inner == 'itemize') {
return i;
}
console.log('Do not know how to handle!');
console.log(token);
process.exit(1);
} else {
console.log('Do not know how to handle!');
console.log(token);
process.exit(1);
}
} else if (token.type == 'comment') {
continue;
} else {
console.log('Do not know how to handle token type!');
console.log(token);
process.exit(1);
}
}
throw new Error('Did not find end at itemize!');
}
async function printText(text: Text, file: FileHandle, basePath: string, foundStart: boolean = false, start: number = 0) {
for (let i = start; i < text.tokens.length; i++) {
const token = text.tokens[i];
if (!foundStart) {
if (token.type === 'command') {
if (token.name === 'begin') {
const inner = token.inner[0].tokens[0].text;
if (inner === 'document') {
foundStart = true;
continue;
}
}
}
continue;
}
if (token.type === 'command') {
let inner: string | undefined = undefined;
switch (token.name) {
case 'includepdf':
case 'maketitle':
case 'newpage':
case 'tableofcontents':
case 'printbibliography':
case 'supercite':
case 'includegraphics':
case 'vspace*':
continue;
case 'cref':
file.write('Fig. 1');
continue;
case 'section':
case 'section*':
inner = token.inner[0]?.tokens[0]?.text;
if (!inner) {
console.log(token);
process.exit(1);
}
file.write('# ' + inner + '\n');
continue;
case 'subsection':
case 'subsection*':
inner = token.inner[0].tokens[0].text;
file.write('## ' + inner + '\n');
continue;
case 'subsubsection':
inner = token.inner[0].tokens[0].text;
file.write('## ' + inner + '\n');
continue;
case 'input':
inner = token.inner[0].tokens[0].text;
const path = basePath + '/' + inner + '.tex';
const nData = (await fs.readFile(path)).toString();
const {text: nText} = processText(nData);
await printText(nText, file, basePath, true);
continue;
case 'begin':
inner = token.inner[0].tokens[0].text;
switch(inner) {
case "figure":
case "minipage":
case "tabularx":
i = findEnd(inner, text, i);
continue;
case "itemize":
i = printItemize(text, file, i + 1);
continue;
}
console.log('Do not know how to handle begin', inner);
process.exit(1);
case 'end':
inner = token.inner[0].tokens[0].text;
if (inner === 'document') {
continue;
}
console.log('Do not know how to handle end', inner);
process.exit(1);
case 'verb':
const nextToken = text.tokens[i + 1];
const pText = nextToken?.text;
if (!pText) {
console.log('Something wrong!');
console.log(token);
console.log(nextToken);
process.exit(1);
}
let j = 1;
for (;j < nextToken.text.length;j++) {
if (nextToken.text[j] == '+') {
break;
}
}
i++;
file.write(nextToken.text.substring(1, j));
file.write(nextToken.text.substring(j + 1));
continue;
}
console.log("Don't know how to handle", token.name);
process.exit(1);
}
if (token.type === 'range') {
file.write(token.text);
}
}
}
function findEnd(target: string, text: Text, start: number): number {
for (let i = start; i < text.tokens.length; i++) {
const token = text.tokens[i];
if (token.type === 'command') {
if (token.name !== 'end') {
continue;
}
const inner = token.inner[0].tokens[0].text;
if (inner == target) {
return i;
}
}
}
throw new Error('Could not find end for ' + target);
}
main();

12
notes.txt Normal file
View File

@ -0,0 +1,12 @@
Change title to Sky -> Sky UK Limited
Say something about diferent devisions at Sky
Add pictures of campus
Change pictures to make readble
Make sure the images have references
Subscript images
Make better distigisable bettween projects and case sutdies
new pages bettween sections
more details in the case studies less in the naratives
in cases studies talked about problems that I had to over come
https://www.youtube.com/watch?v=PKfR6bAXr-c

16
package.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "placement-year-docs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@types/node": "^20.4.8",
"ts-node": "^10.9.1"
}
}

132
pnpm-lock.yaml Normal file
View File

@ -0,0 +1,132 @@
lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
dependencies:
'@types/node':
specifier: ^20.4.8
version: 20.4.8
ts-node:
specifier: ^10.9.1
version: 10.9.1(@types/node@20.4.8)(typescript@5.1.6)
packages:
/@cspotcode/source-map-support@0.8.1:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
dependencies:
'@jridgewell/trace-mapping': 0.3.9
dev: false
/@jridgewell/resolve-uri@3.1.1:
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
dev: false
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
dev: false
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
dev: false
/@tsconfig/node10@1.0.9:
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
dev: false
/@tsconfig/node12@1.0.11:
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
dev: false
/@tsconfig/node14@1.0.3:
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
dev: false
/@tsconfig/node16@1.0.4:
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
dev: false
/@types/node@20.4.8:
resolution: {integrity: sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==}
dev: false
/acorn-walk@8.2.0:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
engines: {node: '>=0.4.0'}
dev: false
/acorn@8.10.0:
resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: false
/arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
dev: false
/create-require@1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: false
/diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
dev: false
/make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
dev: false
/ts-node@10.9.1(@types/node@20.4.8)(typescript@5.1.6):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.4.8
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 5.1.6
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: false
/typescript@5.1.6:
resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==}
engines: {node: '>=14.17'}
hasBin: true
dev: false
/v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
dev: false
/yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
dev: false

5
report/.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.log
*.aux
*.toc
UPDS-1-content.tex
UPDS-2-content.tex

65
report/report.tex Normal file
View File

@ -0,0 +1,65 @@
%%% Preamble
\documentclass[11pt, a4paper]{article}
\usepackage[english]{babel} % English language/hyphenation
\usepackage{url}
\usepackage{tabularx}
\usepackage{pdfpages}
\usepackage{float}
\usepackage{graphicx}
\graphicspath{ {../images for report/} }
\usepackage{hyperref}
\hypersetup{
colorlinks,
citecolor=black,
filecolor=black,
linkcolor=black,
urlcolor=black
}
\usepackage{cleveref}
%%% Custom headers/footers (fancyhdr package)
\usepackage{fancyhdr}
\pagestyle{fancyplain}
\fancyhead{} % No page header
\fancyfoot[L]{} % Empty
\fancyfoot[C]{\thepage} % Pagenumbering
\fancyfoot[R]{} % Empty
\renewcommand{\headrulewidth}{0pt} % Remove header underlines
\renewcommand{\footrulewidth}{0pt} % Remove footer underlines
\setlength{\headheight}{13.6pt}
\usepackage[style=numeric,sorting=none,backend=biber]{biblatex}
\addbibresource{../main.bib}
\title{
\normalfont \normalsize \textsc{University of Surrey} \\ %[25pt]
\Huge Final year project \\
}
\author{
\normalfont \normalsize
Andre Henriques\\[-3pt] \normalsize
\today
}
\date{}
%%% Begin document
\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage
\section{Introduction}
\newpage
\section{References}
\printbibliography[heading=none]
% TODO add my job title
\end{document}