Holger Dal Mogensen

Dentagra

Dentagra

Se på GitHub

Et online-multiplayer-spil lavet over 2 måneder. Skrevet i Python og Godot Engine's GDScript.

Koncept

Dentagra blev udviklet som et gymnasialt eksamensprojekt ud fra temaet 'online-multiplayer'. Spillet består principielt af 2 faser: Builder Mode og Player vs. Player Mode. I Builder Mode kan den enkelte spiller uforstyrret designe sin fæstning ud fra de ressourcer de har til rådighed. I PvP Mode dyster 2 spillere mod hinanden om at være den første til at infiltrere modstanderens base, finde deres flag og bringe det til den sikre zone.
Med opgavens mål for øje valgte vi at fokusere på PvP-fasen.

Arkitektur

Dentagras arkitektur

Projektet består af 3 dele: Client, Matchmaking Server og Game Server. Client er den brugervendte frontend. Matchmaking Serveren agerer gateway, og er ansvarlig for at parre spillere og viderestille dem til en Game Server. De enkelte Game Servere har ansvar for at facilitere de igangværende matches, som den er blevet tildelt af Matchmaking Serveren. Systemet kan skaleres op ved at tilføje flere Game Servere.

Teknologi

Både Client og Game Server er implementeret i Godot Engine - primært i det Python-lignende GDScript. Det gjorde det muligt at udnytte det indbyggede RPC-baserede 'High-level multiplayer' system.
Matchmaking Server er skrevet i Python og kommunikerer igennem WebSocket-Secure protokollen.

Freyr

Freyr

Se på GitHub

Vinder af InCommodities' case ved AUHack 2023: Genformidling af information fra en utilregnelig server. Skrevet i F#.

Case

The Freyr project

En server, A, leverer vejrdata fra 5 forskellige steder i Anchorage, Alaska med hver sit end-point. Dataene leveres i CSV-format med lokale timestamps. Nyt data udgives hvert minut, men det præcise øjeblik varierer fra gang til gang, samtidig med at den har et ganske konservativt rate-limit. Serveren er tilmed utilregnelig, og der er ingen garanti for at dataene er velformaterede.
Opgaven lyder herpå at udvikle en service, der genformidler disse data ved at sende dem til en server, B, i et givet JSON-format med UTC-timestamps. Dette skal naturligvis ske så konsekvent som muligt, med så lav forsinkelse som overhovedet muligt.

Polling-strategi

Vi valgte at tage den ekstra udfordring at implementere vores løsning i F#-sproget uden tidligere erfaring. Freyr udnytter F#'s async-features til at køre polling'en af hvert end-point på sin egen selvjusterende timer.
Timing-strategien er pragmatisk baseret på en analyse af A's opførsel, hvor udgivelsen af nye data fandtes til at falde indenfor visse trin. På den måde lykkedes det konsekvent at opnå en forsinkelse på under 600ms - ikke udsædvanligt i nærheden af de 200ms tilsvarende netværksforsinkelsen af en enkelt request i sig selv.

χ²

SHA-256 χ2

Se på GitHub

χ2 (Chi-i-anden) analyse af SHA-256-algoritmens output for nærtliggende inputværdier, skrevet i Python.

Formål

I forbindelse med SOP (StudioOmrådeProjekt) undersøgte jeg SHA-256, som er en kryptografisk hashfunktion brugt i alt fra SSL-certifikater til Bitcoin-transaktioner.
En god kryptografisk hashfunktion er bl.a. karakteriseret ved at den er svær at forudsige, og selv en lille ændring i inputtet burde resultere i et helt andet output.
χ2-testen kan bruges til at kvantificere dette, ved at opdele outputværdierne i en række intervaller, og praktisk set sammenligne antallet i hver kategori med et forventet antal.

Implementering

  • compute_hashes.py står for at beregne SHA-256 hashværdierne for en række nærtliggende inputværdier, inddele dem i en hyppighedstabel bestående af 216 = 65.536 forskellige intervaller og skrive den til en fil når scriptet afbrydes. Det er yderligere indrettet til automatisk at fortsætte fra den sidst evaluerede værdi når det startes igen.
  • inspector.py bruges eventuelt til overfladisk at inspicere dataene.
  • chi_square.py analyserer hyppighedstabellens afvigelser og sammenholder dem med den acceptable værdi.