{"id":70,"date":"2026-08-30T19:04:35","date_gmt":"2026-08-30T17:04:35","guid":{"rendered":"https:\/\/blog.syndiqatet.se\/?p=70"},"modified":"2026-08-30T19:04:35","modified_gmt":"2026-08-30T17:04:35","slug":"ingen-ny-edge-den-har-veckan-bara-fem-fel-jag-byggt-in-sjalv","status":"publish","type":"post","link":"https:\/\/blog.syndiqatet.se\/?p=70","title":{"rendered":"Ingen ny edge den h\u00e4r veckan \u2013 bara fem fel jag byggt in sj\u00e4lv"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Har inte hittat n\u00e5gon ny edge den h\u00e4r veckan. Har hittat fem s\u00e4tt som jag lurat mig sj\u00e4lv p\u00e5 i st\u00e4llet, vilket \u00e4r tr\u00e5kigare att skriva om men f\u00f6rmodligen nyttigare&#8230; alla fem satt ju uppstr\u00f6ms om i princip allt annat jag m\u00e4tt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det v\u00e4rsta f\u00f6rst. ATG skickar strecket i hundradels procent, allts\u00e5&nbsp;<code>3382<\/code>&nbsp;f\u00f6r 33,82 %. Min kod delade med 100 i st\u00e4llet f\u00f6r 10 000 och skickade vidare det som en sannolikhet \u2014 och efter normaliseringen fick avdelningens streckfavorit typ 95 % av hela massan. Sen var det inte en rad utan \u00e5tta st\u00e4llen, sju av dem levande. Och eftersom talet g\u00e5r in i en produkt \u00f6ver avdelningarna s\u00e5 v\u00e4xer felet med spelformen: den skattade kombinatoriska utdelningen f\u00f6r en V4-rad kom ut som 0,00027 kr d\u00e4r den skulle vara 26 685 kr. P\u00e5 en V64 \u00e4r det tolv tiopotenser. S\u00e5 det g\u00e5r inte ens att korrigera i efterhand med en konstant, felet beror p\u00e5 hur m\u00e5nga avdelningar spelet har.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Men det som st\u00f6r mig \u00e4r egentligen inte felet, utan att det legat d\u00e4r i ungef\u00e4r ett \u00e5r utan att n\u00e5got larmat. Tre olika testfixturer skrev f\u00e4ltet i ren procent \u2014 en enhet som produktionen aldrig producerar \u2014 och den gamla koden gissade enheten ur hur stort talet var. Allts\u00e5 h\u00f6ll testerna med buggen. &#8220;Gr\u00f6nt&#8221; hela v\u00e4gen. Numera \u00e4r regeln att en fixtur ska skrivas i f\u00e4ltets enhet, aldrig i den enhet som r\u00e5kar f\u00e5 testet gr\u00f6nt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sen en till av samma sort. Produktionsloggen sa en sak och en replay av exakt samma funktioner sa n\u00e5got helt annat, och n\u00e4r det \u00e4r samma kod s\u00e5 m\u00e5ste ju indatan skilja sig. Det gjorde den. Ett steg i pipelinen skrev p\u00e5 sin anropares avdelningar p\u00e5 plats, s\u00e5 den som byggde avdelningarna en g\u00e5ng och sen k\u00f6rde pipelinen flera g\u00e5nger matade varje k\u00f6rning med f\u00f6rra k\u00f6rningens utdata. Ett varv drev toppsannolikheten till ungef\u00e4r 0,9. Fem varv l\u00e5ste den p\u00e5 exakt 1,0. Tecknet har legat i loggen hela tiden och jag har l\u00e4st f\u00f6rbi det hur m\u00e5nga g\u00e5nger som helst: en rad som s\u00e4ger &#8220;3,30 bitar, vid\u00f6ppen avdelning&#8221; bredvid tv\u00e5 h\u00e4star \u00f6ver 45 %. Det g\u00e5r ju inte ihop inom en och samma sannolikhetsvektor, vilket \u00e4r precis vad det betyder \u2014 man l\u00e4ser tv\u00e5 olika.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sen kom den obehagliga fr\u00e5gan. Jag f\u00f6r register \u00f6ver varje \u00e5terv\u00e4ndsgr\u00e4nd jag m\u00e4tt, runt 75 d\u00f6dade id\u00e9er, just f\u00f6r att slippa k\u00f6ra om ett avgjort experiment om ett halv\u00e5r n\u00e4r jag gl\u00f6mt att jag redan gjort det. Men hur m\u00e5nga av de d\u00e4r domarna producerades av den trasiga koden? S\u00e5 jag fick korspr\u00f6va alla. De flesta st\u00e5r. Tv\u00e5 g\u00f6r det inte: en j\u00e4mf\u00f6relse k\u00f6rde b\u00e5da sina armar genom den trasiga blandningen, s\u00e5 den var aldrig n\u00e5gon j\u00e4mf\u00f6relse \u00f6ver huvud taget, och en &#8220;den h\u00e4r prediktorn tillf\u00f6r ingenting&#8221;-null hade matats med en indatasignal som var rent skr\u00e4p \u2014 den id\u00e9n \u00e4r allts\u00e5 \u00f6ppen igen i st\u00e4llet f\u00f6r d\u00f6d. Tv\u00e5 d\u00e5liga domar av 75 \u00e4r v\u00e4l helt ok faktiskt. Att l\u00e5ta bli att st\u00e4lla fr\u00e5gan hade varit betydligt dyrare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sen spikarna. Jag har haft en mekanism som v\u00e4ljer hur m\u00e5nga spikar en kupong ska b\u00e4ra, genom att optimera \u00f6ver antalet, och den kan strukturellt inte fungera under ett t\u00e4ckningsm\u00e5l. Tog mig l\u00f6jligt l\u00e5ng tid att se varf\u00f6r: m\u00e4ngden ramar med&nbsp;<em>exakt<\/em>&nbsp;k spikar \u00e4r en delm\u00e4ngd av m\u00e4ngden med&nbsp;<em>h\u00f6gst<\/em>&nbsp;k, s\u00e5 att kr\u00e4va ett exakt antal kan bara ta bort alternativ. Optimum hamnar d\u00e4rf\u00f6r p\u00e5 noll. Uppm\u00e4tt k=0 i 97,6 % av 2 142 omg\u00e5ngar. Och positivkontrollen gjorde det pinsamt tydligt \u2014 k\u00f6r armen p\u00e5 medvetet omkastade sannolikheter s\u00e5 presterar den i princip lika bra som p\u00e5 de riktiga. Sj\u00e4lva m\u00e4tningen fungerade allts\u00e5. Det var kriteriet som var skr\u00e4p.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det som d\u00e4remot h\u00e5ller \u00e4r att om man l\u00f6ser breddf\u00f6rdelningen fritt, utan n\u00e5got spikantal som indata, s\u00e5 uppst\u00e5r spikarna av sig sj\u00e4lva \u2014 och de skiljer sig ganska mycket \u00e5t per spelform:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>V85: 1,77 i snitt (minst en spik i 95,5 % av omg\u00e5ngarna)<\/li>\n\n\n\n<li>V86: 1,74<\/li>\n\n\n\n<li>GS75: 1,20<\/li>\n\n\n\n<li>V64: 0,79<\/li>\n\n\n\n<li>V5: 0,54<\/li>\n\n\n\n<li>V4: 0,12<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Nollorna \u00e4r h\u00e4rledda, inte trimmade \u2014 en DD med 100 rader t\u00e4cker ju n\u00e4stan hela f\u00e4ltet \u00e4nd\u00e5. S\u00e5 antalet spikar \u00e4r egentligen ingenting man best\u00e4mmer, det \u00e4r n\u00e5got man l\u00e4ser av n\u00e4r breddallokeringen \u00e4r klar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det fynd som svider mest \u00e4r \u00e4nd\u00e5 radvalet. Jag tittade p\u00e5 286 omg\u00e5ngar och plockade ut bara de d\u00e4r hela vinnarlinjen redan l\u00e5g i min ram \u2014 allts\u00e5 varje vinnare utpekad, ingen missad, den sv\u00e5ra biten l\u00f6st. I de omg\u00e5ngarna beh\u00f6ll radvalet vinnarraden i 21,1 % av fallen. En orakelv\u00e4ljare f\u00e5r 100 % p\u00e5 exakt samma m\u00e4ngd, s\u00e5 taket \u00e4r verkligt och m\u00e4tningen h\u00e5ller. Fyra g\u00e5nger av fem som jag g\u00f6r det sv\u00e5ra r\u00e4tt s\u00e5 sl\u00e4nger jag allts\u00e5 bort vinnaren i det l\u00e4tta steget, och det \u00e4r j\u00e4kligt irriterande att ha h\u00e5llit p\u00e5 med ramen i m\u00e5nader n\u00e4r det uppenbarligen \u00e4r h\u00e4r det f\u00f6rsvinner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Och det finns ingen genv\u00e4g heller. Att byta po\u00e4ngformel f\u00f6r radvalet st\u00e4nger ungef\u00e4r 6 % av gapet, och byter dessutom tecken p\u00e5 V85, s\u00e5 formeln \u00e4r fel axel att skruva p\u00e5. Det ser i st\u00e4llet ut att vara en marginalkollaps \u2014 topp-N p\u00e5 produktsannolikhet koncentrerar strukturellt varje avdelning till sina en eller tv\u00e5 \u00f6versta h\u00e4star, s\u00e5 modellens rank 3 och rank 4, som ju b\u00e4r reell massa, kl\u00e4ms mot noll exponering. Kupongen speglar d\u00e5 inte l\u00e4ngre modellens egen f\u00f6rdelning utan en spetsigare modell som jag aldrig bett om. F\u00e5r se om det g\u00e5r att g\u00f6ra n\u00e5got \u00e5t utan att bara h\u00f6ja budgeten&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En sista sak, som egentligen f\u00f6rklarar hur de andra fyra kunde \u00f6verleva. Testsviten rapporterade 263 filer och 2 307 test, alla gr\u00f6na, och dagens 13 nya test var inte bland dem. Filen l\u00e5g p\u00e5 disk men konfigurationen \u00e4r en explicit lista, inte ett film\u00f6nster. B\u00e5da rapporterna var allts\u00e5 sanna. Slutsatsen jag drog av dem var det inte. Och det \u00e4r en hel klass av samma sak: en bock f\u00f6r en f\u00f6rm\u00e5ga som aldrig kopplades in, en j\u00e4mf\u00f6relse mellan tv\u00e5 &#8220;olika&#8221; inst\u00e4llningar d\u00e4r flaggan som skiljer dem inte har n\u00e5gon l\u00e4sare kvar, tystnad fr\u00e5n en gate som granskat noll saker. Numera f\u00f6rs\u00f6ker jag st\u00e4lla en enda fr\u00e5ga i st\u00e4llet \u2014 vad \u00e4r det som m\u00e5ste ha k\u00f6rts, och k\u00f6rde det?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sen har jag delat upp felen i tv\u00e5 sorter, mest f\u00f6r min egen skull. Mekaniska fel (fel enhet, fel skala, saknad post i ett register) l\u00e4mnar ett sp\u00e5r som g\u00e5r att s\u00f6ka efter, och d\u00e4r \u00e4r en automatisk gate r\u00e4tt investering. Semantiska fel har r\u00e4tt typ, r\u00e4tt skala, r\u00e4tt intervall, men svarar p\u00e5 fel fr\u00e5ga. Jag testade faktiskt om man kan s\u00f6ka sig fram till dem ocks\u00e5: 30 kandidater blev 5 blev noll. Varenda semantiskt fel jag hittade den dagen kom av att n\u00e5gon l\u00e4ste koden. En kommentar som ljuger, ljuger ju om meningen, och meningen syns inte i en s\u00f6kning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ingen ny edge den h\u00e4r veckan allts\u00e5, bara fem st\u00e4llen d\u00e4r det jag redan m\u00e4tt vilade p\u00e5 siffror som inte h\u00f6ll. F\u00e5r se vad omm\u00e4tningarna s\u00e4ger nu n\u00e4r talen \u00e4r r\u00e4tt&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Har inte hittat n\u00e5gon ny edge den h\u00e4r veckan. Har hittat fem s\u00e4tt som jag lurat mig sj\u00e4lv p\u00e5 i st\u00e4llet, vilket \u00e4r tr\u00e5kigare att skriva om men f\u00f6rmodligen nyttigare&#8230; alla fem satt ju uppstr\u00f6ms om i princip allt annat jag m\u00e4tt. Det v\u00e4rsta f\u00f6rst. ATG skickar strecket i hundradels procent, allts\u00e5&nbsp;3382&nbsp;f\u00f6r 33,82 %. Min &#8230; <a title=\"Ingen ny edge den h\u00e4r veckan \u2013 bara fem fel jag byggt in sj\u00e4lv\" class=\"read-more\" href=\"https:\/\/blog.syndiqatet.se\/?p=70\" aria-label=\"Read more about Ingen ny edge den h\u00e4r veckan \u2013 bara fem fel jag byggt in sj\u00e4lv\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpai_generated_summary":"","wpai_meta_description":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-70","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/posts\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=70"}],"version-history":[{"count":1,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":71,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=\/wp\/v2\/posts\/70\/revisions\/71"}],"wp:attachment":[{"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.syndiqatet.se\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}