mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 19:47:32 +01:00
Running one directory (EADS) had already produced four bugs, so all of them
were run. 11 failed. Every one was real -- either in the coursework or in the
harness I had just written -- and the split was roughly even.
Coursework bugs:
- 15 .tex files use Polish ogonek characters with no fontenc, so pdflatex
dies with "Command \k unavailable in encoding OT1". Fixed where it was
actually needed, not blanket-applied.
- BSS had \documentclass{article}[12pt] -- options after the class name,
where they are not options at all.
- SDM's beamer deck had a stray } on an \item, which took out the frame.
- EOOP/Various/currency included "currency2.hpp"; the file is currency.hpp.
- ECRYPT_PROJECT had the SAME stdlib-shadowing bug as ECOTE: a package named
code/. Renamed to sieve/, and its 99 tests now run. With ECOTE's 26 that
is 125 tests that could not execute at all before today.
Harness bugs, which the run is what exposed:
- COURSE_ENTRY pointed at directories for PORR and ECRYPT_PROJECT, so python
looked for __main__.py and reported the wrong problem.
- main.py was auto-picked via find's first result. EARIN has six labs and
six main.py files, so that ran an arbitrary lab and called it the course.
Now only auto-picked when exactly one exists.
- Only the first requirements.txt was installed, which is why EARIN still
died on gymnasium after a venv was created for it. All of them now.
- The notebook probe accepted jupyter being on PATH. This machine's jupyter
is a pipx shim whose interpreter is gone, so "runnable" was a lie; it now
invokes jupyter --version and PBAD/twm_4 report blocked, honestly.
- Nothing ran a course's tests. Where a suite exists it is now the check,
which matters most for ECRYPT_PROJECT, whose program prompts on stdin and
cannot be run headlessly at all.
- Which directory pytest runs from is course-specific and unguessable, so
stubs pass --test-dir: ECOTE needs program/ for imports, ECRYPT_PROJECT
needs sieve/ because its fixtures open a CSV by relative path.
gates/known-incomplete.txt records the one file that genuinely cannot build:
EOOP/Various/set/set.cpp includes set.hpp, which `git log --all` shows has
never existed here. The course supplied it and only the .cpp was submitted.
That is a factual record with a stated check, not a lint allowlist -- and
fabricating the header would be inventing coursework.
Status is now 36 runnable / 5 no-code / 3 blocked.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
83 lines
3.8 KiB
TeX
83 lines
3.8 KiB
TeX
\documentclass{article}
|
|
\usepackage[utf8]{inputenc}
|
|
% T1 is required for Polish ogonek characters; without it pdflatex
|
|
% fails with "Command \k unavailable in encoding OT1".
|
|
\usepackage[T1]{fontenc}[11pt]
|
|
\usepackage{graphicx}
|
|
\usepackage{float}
|
|
|
|
\title{ERSMS, Group F, Project Documentation}
|
|
\author{Hubert Dwornik, Michał Łezka, Jakub Mazur \\ Michał Sar, Krzysztof Rudnicki}
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\section{System Architecture}
|
|
We have designed and implemented 4 microservices,
|
|
all of microservices are written in Python using Flask framework
|
|
\paragraph{AI recommendations}
|
|
Based on a list of movies ids, calculates and returns list of ids recommended for user who likes given movies
|
|
\paragraph{Analytics}
|
|
Holds information about number of
|
|
ratings, number of users,
|
|
average movie ratings, ratings of
|
|
given user which are later used in
|
|
webinterface to show data for admins
|
|
concerning website usage
|
|
\paragraph{Notifications}
|
|
Notifies user whenever there is a new movie recommend by AI recommender for them
|
|
\paragraph{Backend}
|
|
Updates database and mantains all ongoing and incoming communication between all microservices, both between microservies and from microservices to the webinterface
|
|
\paragraph{Caching}
|
|
We implemented two caches
|
|
\begin{enumerate}
|
|
\item Backend is cached inside Analytics Service \\
|
|
Analytics service holds tata about users and movies,
|
|
in order to not pull all the data from backend every time we update analytics
|
|
(for example every day), we keep the cache of backend date in our analytics
|
|
service
|
|
\item AI recommendations are cached inside Notification Service \\
|
|
AI recommendations can change whenever new movie appears, notification
|
|
service keeps the cache of ai recommendation service in order to not
|
|
pull all the data from the ai recommendation every time it wants to notify
|
|
the users about new movies to recommend
|
|
\end{enumerate}
|
|
\paragraph{Database}
|
|
We use postgresql database to contain data about users, movies and user ratings
|
|
|
|
|
|
\begin{figure}[H]
|
|
\caption{System architecture representation, webinterface although not part of microservices included to show relation with backend}
|
|
\centering
|
|
\includegraphics[width=\textwidth]{images/systemArchitecture.drawio.pdf}
|
|
\end{figure}
|
|
|
|
|
|
\section{Automated Infrastructure Management solution}
|
|
We use \textbf{Dockerfiles}
|
|
for each microservice, webinterface and database which
|
|
later get combined in docker compose file, after each commit on
|
|
\textbf{GitHub} main repository docker compose gets automatically run
|
|
on \textbf{Google Cloud} platform and deployed
|
|
\section{Federated authorization and authentication management in the project}
|
|
We use industry standard \textbf{OAuth} protocol in our webinterface,
|
|
user creates their account and logs in, we use user token to
|
|
authorize their access on backend to their ratings and
|
|
recommendations. We use \textbf{firebase} services to manage OAuth protocol.
|
|
\section{Threat model with mitigations}
|
|
Our single most important asset are user likes for specific movies \\
|
|
We expect either bots or human agents trying to access those likes for a specific users or to modify user ratings to improve or decrease certain movies ratings \\
|
|
To mitigate that we use:
|
|
\begin{enumerate}
|
|
\item Certificates on our frontend, which encrypt data transmitted between website and user
|
|
\item OAuth which is used to authenticate user and lower amount of bots accessing our Infrastructure
|
|
\item TLS encryption between our microservices so that even our inside communication is encrypted
|
|
\item Google cloud default security policies allowing us to monitor odd and potentially harmfull behaviours
|
|
\end{enumerate}
|
|
\begin{figure}[H]
|
|
\caption{Threat model}
|
|
\centering
|
|
\includegraphics[width=\textwidth]{images/threat_model.png}
|
|
\end{figure}
|
|
|
|
|
|
\end{document} |