Permalänk
Medlem

Skatteverkets JavaScript :D

Vem har sagt att det är tråkigt att deklarera?

Ja öppnade webbläsarens utvecklarverktyg när jag höll på att granska min deklaration och såg följande i konsolen:

I run after the page is ready. DOJO parsed done and ready. fLaggTillMenyLankLyssnare done. einkPageInit done.

”I run after the page is ready.” och ”fLaggTillMenyLankLyssnare done.” fick mig att undra hur JavaScript-koden på sidan egentligen ser ut. Vilken guldgruva!

https://sso.skatteverket.se/ef/ef_webapp/skript/lokal/lokal.js

Gillar du variabelnamn och kommentarer på svenska, utkommenterad gammal debug-kod och snurrig spaghetti så kan jag varm rekommendera att titta igenom ovannämnda skript!

(Tips: Ladda ned filen först och öppna i en texteditor – direkt i webbläsaren blir åäö fel.)

Permalänk
Medlem

Alltså, vafan sysslar dom med?

**edit **

Denna mening :

// TODO Är det någon mening att iterera över en lista här? Det är ju ändå gjort för att bara vara ett fält, "övriga upplysningar"?

Ja, du kanske ska kolla upp det?

Permalänk
Medlem

Jag uppskattade speciellt `fIsDirty` nestlade if och flera olika return och loopande beteenden.

Det är den här koden som nybörjade behöver se, vem som helst kan uppenbarligen få jobb med begränsade kunskaper!

Permalänk

Svågerpolitik heter det när man låter sin svåger få utföra jobbet före andra. Men vad heter det när tjänstemän låter deras barn i 10års åldern få jobbet?

Jag förstår inte hur koden kan se ut som den gör. Alltså detta är en samhällskritisk tjänst som ska valideras till den förbannelse. Det är då en eller flera helt externa besiktningsmän på andra företag som ska godkänna jobbet och dessa får precis som kodaren mycket skit om de missar något.

Permalänk

Jobbar faktiskt som systemutvecklare på Skatteverket men inte direkt med skattedeklarationssystemet. Jag vill bara lyfta fram att all kod inte ser ut så här som vi arbetar med Mycket av det jag jobbar med är mycket välskriven och strukturerad. I alla fall personerna i mitt team är otroligt duktiga och passionerade över det de håller på med och vill göra sitt bästa. Det testas ordentligt och jag blir lika förvånad varje gång när jag som programmerare missar något som inte testarna gör. Men det är ganska normalt att skriva variabler och funktioner på svenska (vilket jag stör mig lite på). Kan inte tala för alla systemen. Men som hyfsad nyanställd (och junior) blev jag förvånad hur enkelt jag hade att komma in i ett utav våra system. Försöker inte skydda eller något och det finns mycket som inte är perfekt.

EDIT: Skriver som en kratta på söndagar (med andra ord lite grammatiska rättningar)

Permalänk
Medlem

haha humor

Permalänk
Medlem

Jag gillar denna:

// Anledningar att skippa dirtycheck h?r? Ful l?sning men funkar....

Permalänk
Medlem

Trodde alltid att man körde något script som rensade och komprimerade koden innan den skickades till webbservern. Just för bandbredd, även om det bara är text är det många användare som laddar den.

Inte programmerare men det ser inte proffsigt ut sett till kommentarerna, mycket lösa boliner som behöver fixas till. Engelska uttryck tycker jag alltid fungerar bättre när man inte ska/får använda åäö. Typ gästnät blir gastnat, och då saknar man bara dödmans kista.

Blev iaf påmind om att deklarera.

Permalänk
Medlem

Det är mer eller mindre ett krav att svenska ska användas i programkod på statliga myndigheter. Tanken är att korrekta juridiska termer ska användas på alla nivåer, men när man väl kommer till implementation så är ju verkligheten ofta större än juridiken och då blir det lite av en soppa. "okKnapp" är ju inte direkt något som står i lagstiftningen.

Eftersom hela premissen med offentlig upphandling är att den som är billigast får göra jobbet så är det ju inte helt oväntat att resultatet ibland (för det mesta?) blir ruttet.

Permalänk
Medlem
Skrivet av lillaankan_i_dammen:

Svågerpolitik heter det när man låter sin svåger få utföra jobbet före andra. Men vad heter det när tjänstemän låter deras barn i 10års åldern få jobbet?

Jag tror du överskattar medel-programmeraren. Med risk för att låta elitisk, (för det är jag väl) många som kallar sig programmerare har inget i fältet att göra. Dessvärre vet inte alla arbetsgivare bättre heller, och då betalar de för en undermålig tjänst, och resultaten ser vi här.

Visa signatur

"Some poor, phoneless fool is probably sitting next to a waterfall somewhere, totally unaware of how angry and scared he's supposed to be." - Duncan Trussell

Permalänk
Medlem
Skrivet av jocke92:

Trodde alltid att man körde något script som rensade och komprimerade koden innan den skickades till webbservern. Just för bandbredd, även om det bara är text är det många användare som laddar den.

Inte programmerare men det ser inte proffsigt ut sett till kommentarerna, mycket lösa boliner som behöver fixas till. Engelska uttryck tycker jag alltid fungerar bättre när man inte ska/får använda åäö. Typ gästnät blir gastnat, och då saknar man bara dödmans kista.

Blev iaf påmind om att deklarera.

Precis, man kör en clean/minify/bundling av sina scriptfiler. Kommenterarer ska inte finnas i produktionsmiljö.

Permalänk
Medlem

Sanningen är att det är ganska vanligt med liknande kod även i produktion.
Men för en så stor tjänst är det inte så optimalt kan man tycka.

Minns quake 3 källkod med kommentaren i stilen
"// This code does dothing as far as i can tell, but unless it runs the following fuction call fail for some reason"

Visa signatur

There are 10 types of people in the world: Those who understand binary, and those who don't...

Asus Maximus VIII Hero | i7-6700K | ASUS GeForce GTX1070 Strix 8GB | G.Skill F4-2133C15Q-32GRK |

Permalänk
Medlem

I verkligheten, jämfört med skolan, är det större prio på att sakerna fungerar än att koden är snygg.

Visa signatur

[Asus P5Q-E] [Q6600 G0 @ 3,6 ghz] [Scythe Yasya] [Gigabyte Gtx 460 1gb] [4x2 Gb Kingston HyperX PC8500] [OCZ ModXstream Pro 700 W ] [Crucial M4 128 gb ]
HTPC - AMD Athlon X2 5050e - M4N78-VM - Kingston HyperX 2 GB - Seagate 7200.12 1 TB - Seagate Green SATA III 2TB

Permalänk
Medlem
Skrivet av Red Beaver:

I verkligheten, jämfört med skolan, är det större prio på att sakerna fungerar än att koden är snygg.

Ful kod som fungerar perfekt behöver man ju inte röra. Tills kraven ändras. Eller tills man ska uppgradera/migrera systemet till en ny lösning. Båda sakerna tenderar att hända förr eller senare.

"Fungerar" bör alltså tolkas som "gör vad den ska enligt kraven (explicita/implicita) och är lätt att förvalta". Om det är uppfyllt är ful/snygg mest en smakfråga. Jag kodar inte JS, men jag tycker inte den där koden verkar vara jättelätt att förvalta.

Permalänk
Medlem
Skrivet av KAD:

Ful kod som fungerar perfekt behöver man ju inte röra. Tills kraven ändras. Eller tills man ska uppgradera/migrera systemet till en ny lösning. Båda sakerna tenderar att hända förr eller senare.

"Fungerar" bör alltså tolkas som "gör vad den ska enligt kraven (explicita/implicita) och är lätt att förvalta". Om det är uppfyllt är ful/snygg mest en smakfråga. Jag kodar inte JS, men jag tycker inte den där koden verkar vara jättelätt att förvalta.

Det är säkert byggt av en konsultfirma, och om all kod skulle vara perfekt hade det antagligen blivit väldigt dyrt. Det är en balansgång.

Visa signatur

[Asus P5Q-E] [Q6600 G0 @ 3,6 ghz] [Scythe Yasya] [Gigabyte Gtx 460 1gb] [4x2 Gb Kingston HyperX PC8500] [OCZ ModXstream Pro 700 W ] [Crucial M4 128 gb ]
HTPC - AMD Athlon X2 5050e - M4N78-VM - Kingston HyperX 2 GB - Seagate 7200.12 1 TB - Seagate Green SATA III 2TB

Permalänk
Medlem

Jo det är ju standard mer eller mindre överallt.

Där jag jobbar nu är den bästa kommentaren jag hittat i stil med ”Todo: det här blir fel, men borde fungera kortsiktigt. Måste lösas asap”. Den koden har rullat dagligen i 16 år nu

Permalänk
Medlem
Skrivet av BasseBaba:

Jo det är ju standard mer eller mindre överallt.

Där jag jobbar nu är den bästa kommentaren jag hittat i stil med ”Todo: det här blir fel, men borde fungera kortsiktigt. Måste lösas asap”. Den koden har rullat dagligen i 16 år nu

Jag har en del kommentarer i dom system jag jobbar med:

"Fixes bug XYZ, remove 2013". Koden ligger kvar, vågar inte ta bort den.

Det här var humor på hög nivå! Var exakt laddas skriptet in? Verkar väldigt skumt att dom inte kört detta i någon transpiler/checker etc för att minifiera koden och ta bort kommentarer osv.

Permalänk

Det är viktigt att man tänker sig för när man gör commits och hur man kommenterar dem, för det kommer synas i release om det står "Merged away from hell" och "Merged back to hell"

Permalänk
Medlem

Globals, globals everwhere.

Man mår rätt illa. Hoppas de inte betalade för mycket av mina surt förvärvade skattekronor för det där.

Permalänk
Föredetting
Skrivet av Red Beaver:

Det är säkert byggt av en konsultfirma, och om all kod skulle vara perfekt hade det antagligen blivit väldigt dyrt. Det är en balansgång.

Myndigheter är ju kända för att snåla och ställa höga krav, eller hur var det nu...

Visa signatur

Internet of Things. Translation: Anything that connects to the internet, no matter how useless nor how much of a security risk it poses.

Permalänk
99:e percentilen

Ja, man blir ju mörkrädd alltså. Ta bara den här funktionen, som du visade mig allra först, @lydell:

function onlyContainsNumSpace(theVal) { var whiteSpacePattern = /[\s\u00A0]/; if (theVal) { // Fint värde for (var n=0;n<theVal.length;n++) { var theCh = theVal.charAt(n); if ((theCh <= '9' && theCh >= '0') || (n == 0 && theCh == '-') || whiteSpacePattern.test(theCh)) { // Ok.... } else { return false; } } return true; } else { return false; } }

  • Hur är det möjligt att känna till regex och ändå skriva sådan kod?

  • Väldigt satsorienterad kod för ett problem jag uppfattar som uttrycksorienterat.

  • Varför är \u00A0 med i whitespacePattern? /\s/.test("\u00A0") === true. Kanske finns legacyskäl?

  • var? Legacyskäl, får man hoppas.

  • ==? Går väl inte ens att bortförklara med legacyskäl?

  • theCh <= '9' && theCh >= '0'

  • if (condition) { // Ok.... } else { return false; }

Tror att denna kod representerar samma funktion (åtminstone nära nog):

function onlyContainsNumSpaceByAlling(x) { return Boolean(x && (x.length === undefined || /^\-?[\d\s]*$/.test(x))); }

(Den märkliga kontrollen theVal.length === undefined fångar inputs som true, Infinity, -Infinity och {}. Man vet ju aldrig vilken den tänkta definitionsmängden är i JavaScript. Beroende på kravspecen/kontexten går det säkert att skriva en bättre lösning.)

Klicka för mer information

const TEST_CASES = [ null, undefined, true, false, 0, 5, NaN, Infinity, -Infinity, {}, [], "", " ", " ", "\u00a0", " \u00a0", "\u00a0 ", "-", "- ", " -", "5", "59", "5 9", "5 9 ", " 5 9 ", "-5", "-59", "-5 9 ", " -5 9 ", "\u00a06", "6\u00a0", ]; for (const t of TEST_CASES) { const expected = onlyContainsNumSpace(t); const actual = onlyContainsNumSpaceByAlling(t); if (expected !== actual) { console.error(t, "– expected:", expected, ", actual:", actual); } }

Visa mer
Visa signatur

Skrivet med hjälp av Better SweClockers