Aarni Annanolli / ohjelmistokehittäjä
English

Aarni Annanolli

Hei, olen Aarni. Rakennan kokonaisia järjestelmiä asiakasohjelmasta ja palvelimesta tuotantoympäristöön asti.

Asuinpaikka
Järvenpää
Opinnot
Ohjelmistokehitys Keudassa, toinen vuosi
Etsin
Ohjelmistokehittäjän työtä, jossa koodaan päivittäin
Linkit
Sähköposti  ·  GitHub  ·  CV

Minusta

Opiskelen ohjelmistokehitystä Keudassa toista vuotta ja asun Järvenpäässä. Teen mielelläni kaikkea järjestelmän suunnittelusta ja koodauksesta testaukseen ja käyttöönottoon.

Isoin projektini on YHDE, reaaliaikainen yhteistyöpalvelu Godot-pelimoottorille. Olen tehnyt sitä tammikuusta 2026 asti. Siinä on C++-asiakasohjelma, .NET 10:llä tehty C#-palvelin, PostgreSQL-tietokanta, Reactilla tehty ylläpitosivu ja tuotantoympäristö, ja olen kirjoittanut ne kaikki. Sitä tehdessäni opin event sourcingia, rinnakkaisohjelmointia ja kuormitustestausta, ja dokumentoin suunnittelun samalla.

Työskentelen myös web-kehittäjänä neljän hengen tiimissä koulun kautta saadussa asiakasprojektissa. Etsin ohjelmistokehittäjän työtä, jossa pääsen koodaamaan päivittäin ja oppimaan kokeneemmilta kehittäjiltä.

Projektit

YHDE tammikuu 2026 – nyt

Reaaliaikainen yhteistyöpalvelu Godotille, tällä hetkellä betavaiheessa. Useampi ihminen voi työskennellä samassa projektissa yhtä aikaa, ja jokainen muutos, kursori ja valinta lähetetään muulle tiimille heti. Siihen kuuluvat natiivi asiakasohjelma, jokaisen muutoksen tarkistava palvelin, tietokantaan tallennettava loki kaikista muutoksista ja tuotantoympäristö.

  • 800editoria yhtä aikaa kuormitustestissä tuotantopalvelimella, ei yhteyskatkoja
  • 40 msp95-viive muutoksen tallennuksessa ja välityksessä 800 editorilla
  • 517 Mtmuistin huippukäyttö 1 000 simuloidulla editorilla
  • 154palvelintestiä ajetaan jokaisen muutoksen yhteydessä
  • 30 000riviä C#- ja C++-koodia

Rakenne

Laatikoita voi raahata

Operaatioloki

Jokainen projekti tallennetaan PostgreSQL:ään operaatiolokina, johon vain lisätään rivejä ja jonka rivit on ketjutettu toisiinsa tiivisteillä. Tallennettuja operaatioita ei koskaan muuteta. Editorit rakentavat scenet lokista, ja samaa lokia käytetään historiaan, undo-toimintoon, uudelleentoistoon ja auditointiin. Asiakasohjelmat lähettävät muutosehdotuksia palvelimelle. Palvelin tarkistaa ne, järjestää ne ja tallentaa ne tietokantaan ennen kuin lähettää ne eteenpäin.

Kuormitustestaus

Ensimmäinen kuormitustesti kaatui 500 editorin kohdalla. Jokainen muutos käytti omaa transaktiotaan ja tietokantayhteyttään, ja ruuhkahuipuissa PostgreSQL:n yhteydet loppuivat. Muutin tallennuksen niin, että jokaisella haaralla on yksi kirjoittaja, joka tallentaa kaikki odottavat muutokset yhdessä transaktiossa. Lisäksi rajoitin yhteyspoolin koon PostgreSQL:n yhteysrajan alle ja enkoodasin jokaisen kursoripäivityksen vain kerran kaikille vastaanottajille. Muutosten jälkeen tuotantopalvelimella pyöri 800 editoria 40 ms:n p95-viiveellä ilman yhteyskatkoja.

Asiakasohjelma

Asiakasohjelma on C++:lla tehty GDExtension, joka toimii Godot-editorin sisällä Windowsilla, macOS:llä ja Linuxilla. Editori ei kerro, mitä muuttui, joten aina kun undo-historia muuttuu, asiakasohjelma vertaa scenejä viimeksi synkronoidun tilan kopioon ja lähettää erot. Lähettämättömät muutokset tallennetaan levylle ja lähetetään uudelleen, kun yhteys palaa, ja palvelin poistaa kaksoiskappaleet tunnisteen perusteella. Skriptien yhteismuokkaus perustuu operational transformation -menetelmään, ja palvelin päättää muutosten järjestyksen.

Käyttöönotto

YHDE pyörii Docker Composella Hetznerin palvelimella Caddyn takana, ja tietokannasta otetaan varmuuskopio päivittäin. Jokainen palvelinpäivitys alkaa varmuuskopiolla ja palautuu automaattisesti edelliseen versioon, jos uusi versio ei käynnisty. GitHub Actions kääntää natiiviytimen Windowsille, macOS:lle ja Linuxille ja ajaa 154 palvelintestiä jokaisen muutoksen yhteydessä.

Käyttäjätilit ja ylläpito

YHDE on betavaiheessa oleva verkkopalvelu. Käyttäjät voivat kirjautua sähköpostilla, GitHubilla tai Googlella, myös suoraan Godotista. Tiimeillä on tilaustasot, roolit ja kutsulinkit. Käyttäjillä on oma hallintasivu, ja ylläpitosivulla on ylläpitäjien roolit ja tapahtumaloki. Palvelin jakaa lisäosan päivitykset, kun ne on hyväksytty ylläpitosivulla.

Kuka sen teki

Suunnittelin ja rakensin YHDE:n kaikki osat itse. YHDE julkaistaan avoimena lähdekoodina.

Aatra kesäkuu 2026 – nyt

Grand strategy -peli, jota teen yksin Godotilla. Jokaisessa pelissä generoidaan uusi maailma. Maailmageneraattori on kirjoitettu C++:lla suorituskyvyn takia, ja pelilogiikka on GDScriptiä. Peli on vielä kehitysvaiheessa.

Koulutus

Keuda heinäkuu 2025 – nyt

Tieto- ja viestintätekniikan perustutkinto, ohjelmistokehityksen osaamisala. Opiskelen toista vuotta.

Työkokemus

LuppaSoppi 2025 – nyt

Työskentelen web-kehittäjänä neljän hengen tiimissä Keudan kautta saadussa asiakasprojektissa. Teimme LuppaSopille WordPress-sivuston yhdessä asiakkaan kanssa, ja nyt laajennamme sitä verkkokaupaksi.

Osaaminen

OhjelmointiC#, TypeScript, C++, Python, JavaScript, SQL
Backend.NET, PostgreSQL, Dapper, WebSockets, MessagePack
FrontendReact, Vite, Tailwind CSS, WordPress
DevOpsDocker, Docker Compose, Caddy, Ubuntu-palvelimet, GitHub Actions
PelitGodot ja GDScript, C++, editorin lisäosat
Kielitaitosuomi (äidinkieli), englanti (sujuva)

Klikkaa nimeä, niin se vaihtuu logoksi. Rivejä voi raahata otsikosta.

Yhteystiedot

Jos etsit ohjelmistokehittäjää, otathan yhteyttä.

[email protected]

Tämä on portfolioni ohjelmistokehitysversio. Katso myös pelinkehitysversio.