From 22b0abdba76061c5f8de4b2e10cb32eabce715be Mon Sep 17 00:00:00 2001 From: agh Date: Mon, 16 Oct 2023 14:48:04 +0100 Subject: [PATCH] chore: started working on the report --- .drone.yml | 96 +++++++++++ .gitignore | 4 + linting.sh | 31 ++++ main.bib | 289 +++++++++++++++++++++++++++++++++ main.ts | 400 ++++++++++++++++++++++++++++++++++++++++++++++ notes.txt | 12 ++ package.json | 16 ++ pnpm-lock.yaml | 132 +++++++++++++++ report/.gitignore | 5 + report/report.tex | 65 ++++++++ 10 files changed, 1050 insertions(+) create mode 100644 .drone.yml create mode 100644 .gitignore create mode 100644 linting.sh create mode 100644 main.bib create mode 100644 main.ts create mode 100644 notes.txt create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 report/.gitignore create mode 100644 report/report.tex diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..0b80aa4 --- /dev/null +++ b/.drone.yml @@ -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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9187bd6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.pdf +.DS_store +!report/Placement Report and Presentation Company Confidentiality (Required).pdf +node_modules diff --git a/linting.sh b/linting.sh new file mode 100644 index 0000000..cd94b7f --- /dev/null +++ b/linting.sh @@ -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 diff --git a/main.bib b/main.bib new file mode 100644 index 0000000..a8abdec --- /dev/null +++ b/main.bib @@ -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}urope’s 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)} +} diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..e7d53da --- /dev/null +++ b/main.ts @@ -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(); diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000..7102a3e --- /dev/null +++ b/notes.txt @@ -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 diff --git a/package.json b/package.json new file mode 100644 index 0000000..e277081 --- /dev/null +++ b/package.json @@ -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" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..e5ce93f --- /dev/null +++ b/pnpm-lock.yaml @@ -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 diff --git a/report/.gitignore b/report/.gitignore new file mode 100644 index 0000000..bf31770 --- /dev/null +++ b/report/.gitignore @@ -0,0 +1,5 @@ +*.log +*.aux +*.toc +UPDS-1-content.tex +UPDS-2-content.tex diff --git a/report/report.tex b/report/report.tex new file mode 100644 index 0000000..2b2de16 --- /dev/null +++ b/report/report.tex @@ -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}