Post mortem - marcusbillman/prg2-final-project Wiki

Original URL: https://github.com/marcusbillman/prg2-final-project/wiki/Post-mortem

Post mortem

Marcus Billman • 7 juni 2021

Inledning

Mitt slutprojekt i Programmering 2 är ett fjärrstyrningsprogram i Java. Programmet heter CAT och består av två underprogram: en klient för fjärrstyraren (Viewer) och en server för den fjärrstyrda (Remote). Viewer ansluter till Remote med IP-adress och port, och sedan öppnas ett grafiskt gränssnitt som fjärrstyraren använder. Programmet på den fjärrstyrdas sida håller sig dolt utan användargränssnitt. Programmet byggs objektorienterat med MVC-struktur.

Fjärrstyraren kan

Jag inser att CAT kan framstå suspekt likt ett slags malware som kallas Remote Access Trojan (RAT). Jag tänker inte kommentera den punkten.

Bakgrund

Jag började med att skapa en projektbeskrivning och ett kanban-bräde där jag satte upp delmål och planerade vilka funktioner som skulle implementeras. Jag ritade också ett klassdiagram för att hålla koll på klasserna i MVC-strukturen.

Därefter utvecklade jag Viewer och Remote parallellt, en funktion i taget. Under projektets gång uppdaterade jag kanban-brädet med problem som uppstod, samt uppdaterade klassdiagrammet när jag behövde göra justeringar i strukturen då behoven förändrades oväntat.

Positiva erfarenheter

Det gick bra att utforma nätverkskommunikationen. Min idé av en Parcel-klass som innehöll en payload fungerade väl i slutändan. Jag blev också nöjd över hur Parcels hanteras av klient och server, med enskilda handler-funktioner för varje sorts Parcel. En anledning till att det gick så lätt var nog att jag lärt mig om nätverkskommunikation från hur information skickas med API:er på webben.

Det var också kul att se strömningen av skärmdumpar fungera. Jag stötte på vissa utmaningar med att starta och stoppa tråden (till exempel att dataströmmen blev korrupt om tråden stoppades medan data skickades över nätverket), men lyckades lösa problemen. Även terminal-funktionen hade samma förvånande effekt på mig, även om den funktionen behövde förenklas lite. Båda dessa funktioner krävde viss efterforskning för att ta reda på vilka klasser jag behövde använda, men jag blev nöjd med hur väl det fungerade i slutändan med tanke på att jag aldrig försökt göra något liknande förut. Jag hade en klar bild av hur jag ville att dessa funktioner skulle fungera, vilket bidrog till att jag lyckades med dem.

Negativa erfarenheter

Jag hade svårigheter att få till terminal-funktionen och specifikt kvarvarande av terminal-sessionen. Jag hade från början tänkt att fjärrstyraren skulle kunna fortsätta skriva kommandon i en och samma session, men jag lyckades inte implementera detta eftersom det inte går att köra koden som ska skicka utmatningen förrän terminal-sessionen har returnerat och avslutat. För att undvika detta skulle jag ha experimenterat i ett skräp-projekt i förhand så att jag hade haft mer tid att söka runt och testa olika lösningar.

Från början var Viewer min server och Remote var klienten, vilket innebar att det var fjärrdatorn som anslöt till fjärrstyraren med IP-adress. Jag insåg en bra bit in i projektet att det borde vara tvärtom, särskilt eftersom jag vill att programmet ska vara dolt på fjärrsidan, så jag behövde refaktorisera en hel del kod för att rollerna för Viewer och Remote. Detta var inte det roligaste, men det gick vägen till slut. För att undvika detta borde jag ha kollat upp hur andra liknande programvaror hanterar server-klient-förhållandet och gjort rätt från början.

Sammanfattning

Det var ett lärorikt projekt med en halv-användbar slutprodukt. Jag lärde mig mer om nätverkskommunikation, att arbeta med flera trådar, att starta processer i Java samt att paketera program i JAR-format. Om jag skulle vidareutveckla projektet skulle jag låta Viewer skicka flera terminal-kommandon i samma session, samt låta Viewer ansluta igen efter att anslutningen stängts utan att behöva starta om Remote. Precis som jag har skrivit i tidigare post mortem så är jag nöjd med att detta känns som ett ganska "riktigt" program, särskilt med att det finns att ladda ner som JAR från en hemsida.