MilaCorp - 2 min read

Milabowl GW1–GW2 - Krakk ’n’ Roll 🤹‍♂️

As all other tech companies the Mila Data Refinement team of MilaCorp are trying out LLMs. This summary is bought to you by GPT-5 🤖! Two weeks in and the bowl is already boiling. Chaos rules? Absolutely. Logic? Optional. Puns? Mandatory. Let’s speed-run the funniest (and real!) bits from the opening fortnight. ## Gameweek 1 — “New krakk, who dis?” 🧯 Winner: **Med Kunis på krakken** climbed straight onto the, uh, krakken, topping the week. Also nabbed a **HeadBros** handshake for **+2.69** and somehow juggled 3 yellow cards and a small BenchFail without falling off. - Kunis? More like Win-is. A tidy start plus that HeadBros +2.69 sparkle set the tone. - Yellow fever! **Med Kunis** banked +3 from YellowCards, then still smiled for the podium photo. - Following the crowd hurts. **Krakk Under Pressure** paid the TrendyBitch tax (-2) for joining the Isak-in, Foden-out parade. Ouch. Wooden spoon: **Agil Krakk Rotasjon** mis-homed the missile—CapFailScore (-1) with a low-scoring Palmer armband and the week’s basement spot. ## Gameweek 2 — “Agil gonna Agil” 🌀 Winner: **Agil Krakk Rotasjon** did some very lean rotations indeed—wins the round while tanking a Dynamite bomb (-2) like a champ. - Boom? Still zoom. **Agil ate Bomb: Dynamite (-2)** and still finished GW2 #1. Peak Milabowl energy. - **Free Pass, no chill**. Free Pass & Chill kept things squeaky with TightButthole +2.1 (fewest goals conceded)… but also captained Justin Kluivert for 0 (CapFail -1). Comedy is about timing. - Cocoa with spice. **CensoredCocoaCompany** stirred in a UniqueCap +2 and ladled out 3rd place for the week. - Sarr today, sorry tomorrow. **Sels Sarr Salaht** slid to 8th (2.19 pts) with nothing trendy or unique to cling to this time. **Wooden spoon**: Milas krakk hit the floor at 9th—CapFail (-1) with a 0-pointer captain and a BenchFail (-1) to match. We’ve all been there. ## Closing krakks 📉📈 - **Early pace:** Med Kunis set the table in GW1; Agil flipped it in GW2. - **Uni-vibes:** Lone captains paid off more than once; trends kept handing out parking tickets. Same time next week—bring snacks, diffusal kits, and maybe… fewer yellow cards? 💛
GW Summary
MilaCorp - 2 min read

New Avatars for 25/26!

import { Image } from 'astro:assets'; import Anders from '../../../assets/anders_kristiansen.webp'; import Eivind from '../../../assets/eivind_kristoffersen.webp'; import Henrik from '../../../assets/henrik_granum.webp'; import Malte from '../../../assets/malte_loller-andersen.webp'; import Markus from '../../../assets/markus_andersson.webp'; import Martin from '../../../assets/martin_kloster.webp'; import Mikkel from '../../../assets/mikkel_treu_os.webp'; import Samson from '../../../assets/samson_svendsen.webp'; import Simen from '../../../assets/simen_aakhus.webp'; The arena lights flicker... the crowd goes quiet... and then—BOOM! ✨ New challengers have evolved and entered the Milabowl. Who’s leveling up, and who’s getting nuked? Meet the contenders—optimized, sharpened, and ready to throw hands (and explosives). Choose your fighter! 🧢⚡ ### Peptroleum Guardiolja <Image src={Anders} alt="Peptroleum Guardiolja's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### CencoredCocoaCompany <Image src={Eivind} alt="CencoredCocoaCompany's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### Free Pass & Chill <Image src={Henrik} alt="Free Pass & Chill's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### Agil Krakk Rotasjon <Image src={Malte} alt="Agil Krakk Rotasjon's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### Milas Krakk <Image src={Markus} alt="Milas Krakk's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### Sels Sarr Salaht <Image src={Martin} alt="Sels Sarr Salaht's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### KrakkUnderPressure <Image src={Mikkel} alt="KrakkUnderPressure's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### LastMinToiletTrader <Image src={Samson} alt="LastMinToiletTrader's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" /> ### No Krakk, No Cry <Image src={Simen} alt="No Krakk, No Cry's avatar" width={160} height={160} widths={[160, 240, 320]} sizes="160px" format="avif" class="mx-auto rounded-full" />
Announcement
Mikkel - 2 min read

Hidden Treasures in the Digital Bowl 🕵️‍♂️

Greetings, fellow Milabowl enthusiasts! 🎮 As we continue to evolve our digital playground, I've been reflecting on the art of discovery. You know, there's something magical about stumbling upon hidden features, secret passages, and Easter eggs in the digital world. Remember the old arcade days when developers would hide special modes, secret characters, or mysterious messages for the truly dedicated explorers? ## The Art of the Hidden The best secrets aren't handed to you on a silver platter. They require curiosity, persistence, and sometimes a bit of creative thinking. They reward those who dare to venture beyond the obvious, who aren't satisfied with just the surface experience. 💡I've always admired Anders' dedication to the game - the way he approaches challenges with methodical precision, especially when he's in his favorite working position: turning the world on its head, fingers tightly gripping, and finding that perfect rhythm. ## The Power of Sequence In programming, as in music, sequence matters. A few well-placed keystrokes can unlock worlds of possibility. Sometimes it's about knowing the right combination, the right pattern, the right... _stroke_ of genius that reveals what's been hiding in plain sight all along. The most elegant secrets are those that feel natural once discovered, almost like they were meant to be found by those patient enough to seek them out. They don't announce themselves with flashy banners or obvious hints - they simply exist, waiting for the right moment, the right person, the right sequence of actions. ## A Challenge Emerges Which brings me to an interesting question that's been bouncing around in my head lately: **Does anyone care to give Mila what she's looking for?** I won't say more than that. Sometimes the best discoveries come from following your instincts, from trying things that feel right, from experimenting with the tools at your disposal. The digital realm has its own language, its own patterns, its own secrets. To those who enjoy a good mystery: keep your eyes open, your fingers ready, and your mind curious. The most rewarding treasures are often found by those who know where to look... and more importantly, how to look. Happy hunting! The answer lies within this blog post, going head on from the start (page) --- _P.S. - The ancient art of the Konami Code lives on in spirit, though modern secrets require their own unique signatures..._
Announcement
Tech
Sam - 2 min read

Tech improvements and quality of life updates ⚡

# New season, new improvements! 🚀 The holiday break has been productive for the Mila Data Refinement team. Here's what's been cooking in the development kitchen: ## Build pipeline with actual standards 🏗️ Finally implemented proper CI/CD with automated testing for the new and improved MilaRules engine. The .NET backend now runs tests on every commit and breaks the build on warnings - no more "it works on my machine" moments! CSharpier formatting ensures the code stays pretty, and successful merges automatically deploy to production. Because apparently we're a real software company now 💼 ## Frontend gets the professional treatment ✨ Prettier and ESLint are now enforced in the pipeline because consistent code formatting is apparently important (who knew?). The dashboard also got a shiny new row expander that shows you exactly where your points came from - or in most cases, where they didn't come from. Click that little chevron icon to see your beautiful rule breakdown and contemplate your life choices 📊 ## Live feature updates 📡 The biggest addition is live gameweek updates! No more waiting until Tuesday morning to see if your captain hauled or blanked spectacularly. The game state can now be updated mid-gameweek for those sweet, sweet live stats. Perfect for watching your rank plummet in real-time as your differential picks a yellow card 📉 ## Visual glory for the worthy 👑 Added visual enhancements to highlight the top three players because if you're not winning, you might as well admire those who are. Glory to the best players and all that. Also made dark mode even darker because some of us prefer to suffer in style 🌚 ## What's next? More improvements are always brewing. The goal is to make Milabowl so smooth that the only thing you have to worry about is your actual FPL team performance. _May your arrows be green and your rank be rising_ 📈
Tech
Sam - 4 min read

Mini-mila awards

# Mini mila awards With the 23/24 FPL season concluded, I have compiled some "fun fact" stats in these tables. I have not included categories which can easily be viewed in the overview table. Also, these numbers are derived from the file with correct bomb and powerup states. ### Most points in chip rounds | Team | Score | | ----------------------- | ----- | | SplitteMilaBramseil | 497 | | MilaysianBucketBoys | 420 | | Milady’s Cmilax | 403 | | Mast69urbinho | 399 | | $jeik og betalt | 392 | | AC Mila | 390 | | Henriks H&#229;ndjagere | 384 | | The KaneSaw Massacre | 360 | | Skodad Octavia | 325 | ### Most points in non chip rounds | Team | Score | | ----------------------- | ----- | | AC Mila | 2202 | | MilaysianBucketBoys | 2096 | | $jeik og betalt | 2066 | | Mast69urbinho | 2060 | | Milady’s Cmilax | 2032 | | Henriks H&#229;ndjagere | 2022 | | Skodad Octavia | 1996 | | SplitteMilaBramseil | 1924 | | The KaneSaw Massacre | 1785 | ### Best tripple captains | Team | Score | | ----------------------- | ----- | | The KaneSaw Massacre | 127 | | Mast69urbinho | 122 | | SplitteMilaBramseil | 103 | | Skodad Octavia | 95 | | MilaysianBucketBoys | 91 | | $jeik og betalt | 91 | | AC Mila | 90 | | Milady’s Cmilax | 79 | | Henriks H&#229;ndjagere | 76 | ### Best wildcarders | Team | Score | | ----------------------- | ----- | | MilaysianBucketBoys | 168 | | $jeik og betalt | 158 | | Henriks H&#229;ndjagere | 148 | | Mast69urbinho | 144 | | AC Mila | 142 | | SplitteMilaBramseil | 140 | | Milady’s Cmilax | 114 | | The KaneSaw Massacre | 111 | | Skodad Octavia | 72 | ### Best bench boosters | Team | Score | | ----------------------- | ----- | | MilaysianBucketBoys | 146 | | AC Mila | 143 | | Henriks H&#229;ndjagere | 142 | | $jeik og betalt | 127 | | Mast69urbinho | 117 | | Skodad Octavia | 111 | | The KaneSaw Massacre | 104 | | SplitteMilaBramseil | 100 | | Milady’s Cmilax | 56 | ### Best free hitters | Team | Score | | ----------------------- | ----- | | Milady’s Cmilax | 154 | | SplitteMilaBramseil | 154 | | Skodad Octavia | 47 | | The KaneSaw Massacre | 18 | | Henriks H&#229;ndjagere | 18 | | Mast69urbinho | 16 | | $jeik og betalt | 16 | | AC Mila | 15 | | MilaysianBucketBoys | 15 | ### Max mila score in a game week | Team | Score | | ----------------------- | ----- | | Mast69urbinho | 16.00 | | The KaneSaw Massacre | 15.00 | | MilaysianBucketBoys | 12.78 | | SplitteMilaBramseil | 12.40 | | AC Mila | 11.00 | | Henriks H&#229;ndjagere | 11.00 | | $jeik og betalt | 9.40 | | Milady’s Cmilax | 7.00 | | Skodad Octavia | 6.19 | ### Most mila points from powerups | Team | Score | | ----------------------- | ------ | | The KaneSaw Massacre | 4.50 | | Milady’s Cmilax | 1.00 | | Henriks H&#229;ndjagere | -0.50 | | AC Mila | -2.00 | | SplitteMilaBramseil | -3.50 | | Mast69urbinho | -4.00 | | MilaysianBucketBoys | -4.50 | | $jeik og betalt | -10.00 | | Skodad Octavia | -12.00 | ### Most unique players in lineup during season | Team | # | | ----------------------- | --- | | Henriks H&#229;ndjagere | 80 | | AC Mila | 70 | | Mast69urbinho | 69 | | Milady’s Cmilax | 65 | | MilaysianBucketBoys | 65 | | SplitteMilaBramseil | 63 | | The KaneSaw Massacre | 61 | | $jeik og betalt | 59 | | Skodad Octavia | 54 | ### Most unique teams in lineup during season | Team | # | | ----------------------- | --- | | Henriks H&#229;ndjagere | 20 | | AC Mila | 19 | | MilaysianBucketBoys | 19 | | SplitteMilaBramseil | 19 | | The KaneSaw Massacre | 19 | | Skodad Octavia | 18 | | $jeik og betalt | 18 | | Mast69urbinho | 18 | | Milady’s Cmilax | 18 |
Awards
Sam - 2 min read

Tech update - omskriving av rules engine 🤖

Backend prosesseringen til Milabowl bærer mye preg av teknsik gjeld og dårlig struktur som følge av mange snarveier når man gikk fra live applikasjon i Azure til Github Pages. En omfattende omskrivning nærmer seg nå slutten. Hovedfokuset er å senke terskelen for å legge til nye regler. Dette blir gjort ved å ta i bruk en helt ny rules engine, "MilaEngine"🧙🏼‍♂️. Det eneste man trenger for å legge til en ny regel er å implementere `IMilaRule` interfacet, deretter skjer alt automagisk: ```csharp public record MilaRuleResult(string RuleName, string RuleShortName, decimal Points); public interface IMilaRule { MilaRuleResult Calculate(MilaGameWeekState userGameWeek); } ``` Alle implementasjoner vil automatisk bli plukket opp av .NET sin DI container, og automatisk kalkulert og lagt inn i game_state.json. Frontendend vil også bli oppdatert til å automatisk plukke opp alle nye regler, og rendre nye regler. For å forenkle enda mer kan man implementere den abstrakte klassen `MilaRule`. Man må da sette et ShortName (som vil dukke opp i tabellene i front end), og en metode for å beregne poeng. Regelen vil dukke opp med samme navn som klassen i JSON resultatet. ```csharp public abstract class MilaRule : IMilaRule { protected abstract string ShortName { get; } protected abstract decimal CalculatePoints(MilaGameWeekState userGameWeek); public MilaRuleResult Calculate(MilaGameWeekState userGameWeek) { return new MilaRuleResult(GetType().Name, ShortName, CalculatePoints(userGameWeek)); } } ``` For å vise hvor enkelt det blir å legge til en ny regel kan vi se på implementasjonen av regelen for gult kort: ```csharp public class YellowCards : MilaRule { protected override string ShortName => "YC"; protected override decimal CalculatePoints(MilaGameWeekState userGameWeek) { return userGameWeek.User.Lineup .Where(pe => pe.YellowCards == 1) .Sum(pe => pe.Multiplier); } } ``` For å sikre at nye regler fungerer som tenkt vil byggen feile ❌ om man ikke har lagt til minst en test pr. regel. I tillegg til å gjøre det enklere å legge til nye regler, vil prosesseringene gå mye raskere og favhengigheten til SQL databasen i bunn blir fjernet. Planen er å ta nåværende løsning for import av data til SQL, lage et eget prosjekt og rename det til Milalytics, så man fortsatt har mulighet å analysere FPL / Mila data med SQL (spesielt handy rundt MilaAwards). NB: Navn på klasser og interfaces er fortsatt i endring
Tech
Anders - 4 min read

Hyttetur og beste lagnavn

I naturskjønne omgivelser i Krokskogen i Nordmarka var det duket for historiens første avstemning av beste lagnavn _før_ sesongen begynner! Dette ble selvfølgelig innført for å hindre taktisk stemming på slutten av sesongen, som kan eller ikke kan ha vært et problem tidligere år. Vi ankom hytta på fredag ettermiddag og kveld, først var Markus, Simen, Martin og Eivind (med bil lol), deretter kom Henrik og Anders på sykkel 💪. Bilgutta disket opp med sårt trengt fransk pasta à la Sïmén 👨‍🍳🇫🇷, noe som ble meget godt mottatt, spesielt av litt underernærte syklister. ### - Valg må tas På kvelden ble det Secret Hitler, der de liberale nok fikk en alt for enkel jobb med å skjønne at Hitler var helt borte vekk begge ganger på rad. Valg måtte tas, og Eivind valgte å dra hjem 🥸 (han hadde sikkert en god grunn) Lørdagen startet dårlig med tap for Japan i fotball-VM, med en meget svak prestasjon av de norske damene 😥 Været var rimelig dårlig så istedenfor å gå ut på tur, klinte vi til med Markus sin evige våte drøm - poker.\ Resultat: Markus 📈, resten 📉 ### My precious Heldigvis letta været så vi kunne ta turen ned til vannet og bade. Badeturen ble stort sett preget ev én ting, nemlig Martins 360 sidespin no-scope backflip fra stupebrettet. Dette imponerte Henrik så mye at han bestemte seg for å sparke av Anders sin giftering med tærne sine, i vannet. Det var kanskje ikke med vilje, men det var jo litt kjipt forsåvidt så vi prøvde å finne ringen da. Med grumsete, vanskelige grunnforhold, og etter _timesvis_ med leting og god hjelp fra alle, inkludert Damtjerns store sønn, Atle, fant Markus utrolig nok ringen i et siste Hail-Mary-forsøk (bilde nederst)! Anders ble glad - så glad faktisk at han ga Markus hele 1.69 Milapoeng. Hvordan dette medregnes i totalsummen på slutten av sesongen, må nesten være opp til sekretæriatet ✍🏻 ### Avstemning: Beste lagnavn Men så til helgens største event: Avstemning av beste lagnavn 🏆 På dette tidspunket hadde også Malte joinet gjengen på hytta via buss, da sjåfør Sam hadde blitt syk. På tide å få seg lappen, Malte? 🏎️ Markus og Simen hadde laget i stand et valglokale der én og én ble presentert med alle lagnavn, uten å vite hvem de hørte til. Deretter skulle vi rangere dem fra best til verst, samtidig som vi filmet oss selv (🤤) for å fange opp førsteinntrykket vårt. Lykke til med redigeringsjobben, noen! 😃 (Det var også visstnok en shot i lokalet, men hvem vet). ### Resultatet Det var bred enighet om at årets deltakere hadde rekordsterke lagnavn, og etter en nervepirrende opptelling, kunne valget erklæres gyldig! **Vinneren ble Simen med sine "Milaysian bucket boys", og hanker dermed inn hele 5 Milapoeng! Gratulerer! 🇲🇾🪣👦🏻** På andre plass finner vi Sam med hans "$jeik og betalt", og på tredje har vi Maltes "The KaneSaw Massacre". De tar med seg henholdsvis 3 og 1 poeng inn i sesongen. På de tre siste plassene finner vi Martins "AC Mila" på 7., Henriks "Masturbinho" på 8. og Mikkels "Milady's Cmilax", aka "Semilaksen", på 9. Det er mye man kan si om de ulike navnene, men at Henriks Håndjagere skulle tilhøre en annen enn Henrik, og Skodad Octavia skulle tilhøre en annen enn Octavia-pappaene - det var overraskende. At Milady's Cmilax gjorde det såpass svakt var ingen overraskelse for hyttedeltakerne der og da, men navnet har muligens vokst på oss i ettertid? Så som alle store kunstnere kan kanskje ikke heller Mikkel høste anerkjennelse i sin tid. Et annet notat undertegnede gjør seg er at 6 av 9 spillere i ligaen har fornavn på 6 bokstaver, og de 3 resterende har færre bokstaver og havnet samtidig på de 3 øverste plassene.. Collusion?!? 🤔 VAR?!?⚠️ Her er tabell, nå tar jeg kveld. | Plassering | Playah | Lagnavn | Milapoeng | | :--------- | :----- | :-------------------- | :-------- | | 1 👑 | Simen | Milaysian bucket boys | 5 | | 2 | Sam | $jeik og betalt | 3 | | 3 | Malte | The KaneSaw Massacre | 1 | | 4 | Anders | SplitteMilaBramseil | 0 | | 5 | Eivind | Henriks Håndjagere | 0 | | 5 | Markus | Skodad Octavia | 0 | | 7 | Martin | AC Mila | -1 | | 8 | Henrik | Masturbinho | -2 | | 9 💩 | Mikkel | Milady's Cmilax | -3 | ![My precious](../../../assets/my-precious.jpg)
Awards
Home Standings Team Blog