Nettsiden Min
Drømmen
Jeg ønsket min egen nettside hvor jeg kunne dele prosjektene mine og tankene mine. Nettsiden skulle være enkel og serveren skulle være lett å kjøre; sidene skulle kun være standard HTML og CSS, ingen JavaScript. Jeg kjenner Java best, og ønsket derfor å skrive prosjektet i Java. For å laste opp innhold til serveren ønsket jeg å lage et enkelt API slik at jeg kunne lage en klient for å laste opp innhold.
Reisen
Jeg brukte litt tid på å finne ut hvilken teknologi jeg ønsket å bruke for å skrive web-serveren. Jeg visste at jeg ønsket å bruke Java, og hadde hørt om Spring Boot, så det var det jeg begynte med. Men jeg merket raskt at dette ikke passet prosjektet jeg ønsket å lage. Bruk av annotations gjorde at jeg ikke forsto programflyten helt, og jeg følte at jeg måtte lære å bruke Spring Boot mer enn å lære å programmere en web-server. Dessuten er Spring Boot et tyngre rammeverk en det jeg så for meg å bruke.
Jeg gikk derfor ganske fort vekk fra Spring Boot og forsøkte meg heller med HTTP-serveren som er en del av standard Java API-et. Dette var morsommere å jobbe med enn Spring Boot, og det var også enklere å forstå. Jeg fikk laget noen enkle statiske endpoints og også dynamiske endpoints med en SQLite database, noe som kunne brukes til en blogg eller en wiki type side. Men etter hvert som behovet for økt funksjonalitet meldte seg, kom programmeringsferdighetene mine til kort. Koden ble rotete og ting ble mer avansert enn de trengte å være.
Jeg valgte å endre bibliotek enda en gang. Jeg ønsket en mellomting mellom en full Spring Boot-applikasjon og den ganske enkle Java API HTTP-serveren. Jeg endte da opp med Javalin. Javalin er kanskje enkelt å forstå, og er relativt lett å kjøre. Denne gangen brukte jeg også tid på å lage en enkel Wire-Frame av nettsiden jeg ønsket, noe som gjorde utviklingsprosessen mindre kaotisk enn de tidligere forsøkene.
Jeg la til en hjemmeside, en blogg og en side for prosjekter. Serveren lagrer blogginnlegg og prosjekter i en SQLite database. Blogginnleggene er lagret i standard Markdown og blir oversatt til HTML fortløpende. For å spare serveren for litt arbeid har jeg lagt til en cache for HTML sidene. For å kunne bruke mine egne bilder i blogginnleggene mine, kan man laste opp bilder til serveren.
Nederlaget
Jeg hadde laget en web-server jeg var fornøyd med. Den hadde all den grunnleggende funksjonalitet jeg ønsket, og jeg hadde den i drift på serveren min. Men, for å laste opp innholdet til serveren måtte jeg bruke jeg curl fordi jeg ikke hadde laget en klient enda. Neste steg var derfor klart: å lage klienten. I løpet av sommeren har jeg begynt å lese "The Book" for Rust programmering. Derfor ønsket jeg å skrive klienten i Rust. Kun et enkelt CLI program.
Det er tungt å starte nye prosjekter. Dessuten var det serveren jeg ønsket å lage og hadde gledet meg til; klienten var mer en nødvendighet enn noe jeg ønsket å lage. Fristelsen ble for stor. Det eneste jeg ønsket var å begynne å bruke nettsiden min og skrive dette innlegget! Alle gratis tokens man får fra Chat-GPT sin Codex og Google sin Antigravity ble brukt opp på én dag. Da de var brukt opp installerte jeg Copilot sin CLI og gjorde ett godt innhugg i de gratis tokens man får der òg. Når jeg allerede hadde satt i gang med vibe-kodingen ble det fort fristende å implementere flere av idéene mine, også for selve serveren.
Da det hele var over satt jeg igjen med dårlig selvtillit og samvittighet. Jeg hadde skuffet alle som hadde troen meg. Troen på at jeg skulle bruke dette prosjektet til å endelig få litt praktisk erfaring med Rust. Men mest av alt skuffet jeg meg selv. Dette prosjektet skulle jo være gøy! Men hva er moro med å la noen "andre" gjøre arbeidet? Hva er moro med å ikke lære noe Rust i det hele tatt? Til gjengjeld har nettsiden min nå en RSS-strøm, støtte for å laste opp, endre og slette innlegg, bilder og prosjekter fra en Rust-klient, et mer robust API med dokumentasjon. Dessuten er blogginnlegg ikke lenger avhengig av sluggen, men heller en id. Dette gjør at jeg kan endre slug til et innlegg uten at eksisterende lenker slutter å virke.
Avslutning
Målet for prosjektet var å lage meg en personlig nettside, samt å lære. Jeg får vel være fornøyd med det jeg har gjort. Jeg har jo faktisk utforsket flere ulike teknologier for å lage en web-server i Java, designet en nettside og implementert den med HTML og CSS. Jeg har også fått mer erfaring med det å gjennomføre egne programmeringsprosjekter, og jeg har fått erfaring med HTTP. Dessuten har jeg også gitt meg selv en plattform hvor jeg kan vise frem det jeg lager, og for å dele tankene og erfaringene mine.
Sett i retrospekt kunne nok prosjektet hatt godt av et litt mindre scope. Jeg burde heller ha fokusert på å definere et robust API helt i started, slik at jeg kunne utviklet nettsiden og klienten parallelt. Dette med scope creep er en kjent fenomen, og noe jeg ofte blir et offer for selv, så denne erfaringen tar jeg med meg videre. Dokumentasjon og planlegging er ikke nødvendigvis det morsomste helt i starten av et nytt prosjekt, men kanskje det kan gjøre utviklingen mer givende på sikt?
Per nå er web-serveren som er i drift på v1.0.0-SNAPSHOT, så jeg sier meg i grunn ferdig for denne gang. Det som gjenstår er grundigere testing før jeg går over til v1.0.0. Videre kommer jeg til å legge til nye funksjoner etter hvert som jeg ser et behov eller får lyst. Jeg tar også gjerne imot innspill. :)