commit 22b0abdba76061c5f8de4b2e10cb32eabce715be Author: agh Date: Mon Oct 16 14:48:04 2023 +0100 chore: started working on the report 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}