<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Kristofer Giltvedt Selbekk on Medium]]></title>
        <description><![CDATA[Stories by Kristofer Giltvedt Selbekk on Medium]]></description>
        <link>https://medium.com/@selbekk?source=rss-87b006004f1c------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*4Mql0_VPh_PtFqPEYIBGeQ.jpeg</url>
            <title>Stories by Kristofer Giltvedt Selbekk on Medium</title>
            <link>https://medium.com/@selbekk?source=rss-87b006004f1c------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 03:58:01 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@selbekk/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[ForrigeUke (uke 22, 2024)]]></title>
            <link>https://blogg.bekk.no/forrigeuke-uke-24-%C3%A5r-2024-d1df468c55c2?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/d1df468c55c2</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[forrigeuke]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 04 Jun 2024 07:22:47 GMT</pubDate>
            <atom:updated>2024-06-04T07:25:39.220Z</atom:updated>
            <content:encoded><![CDATA[<h3>&lt;ForrigeUke uke=”22” år=”2024” /&gt;</h3><p>Dette var uken for <a href="https://x.com/elise_kri/status/1795773971172098229">Betty White-vitser</a> 👵 , <a href="https://x.com/DWS________/status/1796305173402509494">Trump-tilfeldigheter</a> 🤡 og en <a href="https://x.com/ChrisJBakke/status/1794556331459825973">minneverdig forestilling</a> 🎙. <strong>Og 1 804 ting skjedde i frontend-verdenen</strong></p><blockquote>&lt;ForrigeUke /&gt; er en artikkelserie som oppsummerer hva som skjedde i frontend-verden i uken som var.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*8_ZDPBZVXWg4Qmvw" /><figcaption>Bilde av <a href="https://unsplash.com/@homajob?utm_source=medium&amp;utm_medium=referral">Scott Graham</a> på <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Lag tilpasningsdyktige komponenter med typesikre as-props</h3><p>Jeg har lenge vært i heiagjengen for å la de som skal bruke komponentene vi lager, bestemme hva slags HTML-element de skal rendre. Det gjør det enklere å lage universelt utformede løsninger, også lar det deg lage færre spesialtilpassede komponenter. Win win!</p><p>Men selv om det kan være relativt rett frem å få til med en prop (ofte kalt as ), kan det være skikkelig vanskelig å få til på en typesikker måte. For en &lt;button /&gt; -tag har andre props enn en &lt;a /&gt; -tag, og om du sender inn en custom komponent, vil du gjerne ha typesikkerhet der også.</p><p>Heldigvis har pseudo-navnebror Kristóf P skrevet en veldig fin artikkel som forklarer deg hvordan man gjør det, og hvilke tradeoffs man bør gjøre. Den har en litt “<a href="https://knowyourmeme.com/photos/572078-how-to-draw-an-owl">Draw the rest of the owl</a>” følelse når det kommer til TypeScripten, men det får man heller bare tåle. Jeg synes den forklarte det godt i alle fall!</p><p><a href="https://www.kripod.dev/blog/behind-the-as-prop-polymorphism-done-well/">Behind the &#39;as&#39; prop: polymorphism done well</a></p><h3>Ark 3.0.0 er ute!</h3><p>Jeg har lenge vært godt investert i Chakra UI. Det er rett og slett et bra bibliotek for å lage gode brukergrensesnitt raskt. Men Chakra er bygget på CSS-in-JS rammeverket Emotion, og Emotion sliter litt med å støtte effektiv serverside-rendering. Så da må man tenke litt nytt.</p><p>Ark er et “headless” UI-bibliotek, laget av de samme folka som står bak Chakra. Og på mange måter er det en verdig avtager også. De har nå sluppet en versjon 3.0.0 av biblioteket sitt, som gjør det enklere enn noen gang å lage kule brukergrensesnitt. Kanskje det er på tide å bevege seg over fra Chakra til Ark?</p><p>Les changeloggen her: <a href="https://ark-ui.com/react/docs/overview/changelog">https://ark-ui.com/react/docs/overview/changelog</a></p><h3>Litt diverse React-nytt</h3><p>Det var et par mindre React-nyheter som kan være nyttige å få med seg denne uken — enten for å være ekstra interessant i lunsjen, eller bare for å føle deg bedre enn andre når du overrasker dem med intrikat kunnskap det ikke er nødvendig å vite.</p><h4>🎉 React</h4><p><a href="https://x.com/t3dotgg/status/1795824921920336129">React ble open sourcet for 11 år siden forrige uke</a>! Det er veldig, veldig lenge siden for noen, men starten av min karriere i Bekk. Jeg vil argumentere det har gjort underverker for stabiliteten til frontend-utviklingssfæren, selv om vi ikke på noe vis er i mål enda. Hurra for 11-åringen!</p><h4>React 19 ute i RC</h4><p>Det som er fint med React, er at det tar ganske lang tid mellom hver breaking change de kommer med. Og når det kommer en breaking change, så får man som regel <em>god tid</em> på å forberede seg. Ulempen er jo at man blir så godt vant at man skvetter litt til hver gang det kommer en faktisk major-versjon.</p><p>Så ta dette som siste advarsel — det ser ut til at en faktisk 19.0.0 versjon er rett rundt hjørnet — for nå har React-teamet sluppet <a href="https://x.com/acdlite/status/1797668537349328923">hva de selv sier</a> er en release candidate som kommer til å være kliss lik det som slippes i den offisielle releasen.</p><p>Om du har lyst til å tyvstarte på oppgraderingsjobben (som visstnok ikke skal være altfor stor), kan du jo egentlig… oppgradere i dag, og se hvordan det går. Lykke til!</p><h4>Husk å holde react og react-dom i sync</h4><p>På weben består React av to npm-pakker — react og react-dom . De følger samme versjoneringstall, og lanseres alltid i tospann. Men før var det liksom ikke så farlig om de var helt i sync! Så lenge man var på samme major-versjon, var React helt okei med en liten diff mellom versjonene.</p><p>Men nå blir det hardare kår for sloppy avhengigheter. Fra og med v19 vil React kaste en feilmelding om de to versjonene ikke er helt i sync. Det vil si, er man på 19.0.1 på react , må man være på nøyaktig 19.0.1 på react-dom også. Or suffer the consequences 😱</p><p>Les mer i pull requestet her: <a href="https://github.com/facebook/react/pull/29236">https://github.com/facebook/react/pull/29236</a></p><p>Det… var faktisk det jeg hadde for dere denne uken. Takk for at dere leste, og velkommen tilbake til neste ukes ForrigeUke (denne uken?). Tjohei!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d1df468c55c2" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/forrigeuke-uke-24-%C3%A5r-2024-d1df468c55c2">ForrigeUke (uke 22, 2024)</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Leseliste for produktledere]]></title>
            <link>https://blogg.bekk.no/leseliste-for-produktledere-a67e9225500e?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/a67e9225500e</guid>
            <category><![CDATA[produktledelse]]></category>
            <category><![CDATA[produktutvikling]]></category>
            <category><![CDATA[produkt]]></category>
            <category><![CDATA[bøker]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 19 Mar 2024 11:30:04 GMT</pubDate>
            <atom:updated>2024-03-19T11:30:04.163Z</atom:updated>
            <content:encoded><![CDATA[<p>Er du produktleder, men har lyst til å lære mer om produktledelse? Da har jeg leselista for deg!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*_PuVWczYVSM6_XZU" /></figure><p>Så du vil bli en produktleder? Eller kanskje du har fått rollen i fanget, fordi organisasjonen din har blitt delt opp i produktområder eller noe annet nymotens? Lurer du på hvorfor folk plutselig har begynt å skrive OST med store bokstaver?</p><p>Produktledelse er et utrolig spennende fag, som bare blir mer og mer interessant å både jobbe med og lære om. Men det er mye stammespråk, mye teori og mye… greier man bør sette seg inn i, og det kan være en ganske overveldende opplevelse å bli kastet inn i. Så hvor skal man egentlig starte, om man ikke har jobbet så mye med det før?</p><p>Heldigvis for oss, er det utrolig mange velskrevne bøker om produktledelse. Denne artikkelen gir deg et utgangspunkt til hvilke bøker du burde komme deg gjennom frem mot sommeren, og hvorfor jeg anbefaler nettopp de bøkene.</p><h3>Inspired</h3><p>Av Marty Cagan</p><p>Denne boken er nok den mest nevnte boken på LinkedIn for tiden. Og ikke uten grunn. Marty Cagan sitt klassiske verk Inspired er en real innføring i produktledelse og ikke minst verdien i å innføre produktteam over utviklingsteam eller feature team.</p><p>Selv om boken kom ut i 2008 (og re-utgitt i 2017), er det plenty av gode tips og triks som de aller fleste organisasjoner her i Norge har veldig godt av å høre <em>i dag</em>. Boken er stappfull av pragmatiske og praktiske eksempler på hvordan store tech-selskaper klarer å innovere og bevege seg fremover flere ganger raskere enn andre — og hvorfor noen selskaper rett og slett ikke får det til.</p><p>Det er mange gode poenger som kommer frem i boken. Det å fokusere på outcomes over outputs er en av dem, og det å jobbe <em>faktisk</em> smidig, er to gode eksempler på det. Den er nok mest relevant for produktledere (eller folk som ønsker å være det en dag), men er nok nyttig lesning for alle som jobber i produktteams også.</p><p><a href="https://www.adlibris.com/no/bok/inspired-9781119387503?gad_source=1">Du kan kjøpe boken her</a>. Og når du først er i gang, kan jeg også anbefale <a href="https://www.adlibris.com/no/bok/empowered-9781119691297">Empowered</a> — en slags oppfølger som har et litt bredere nedslagsfelt, og handler mer om hva hele team må gjøre for å oppnå idealene i Inspired.</p><h3>Continuous Discovery Habits</h3><p>Av Teresa Torres</p><p>Denne boken er en av de nyttigste bøkene jeg har lest i år. Teresa Torres argumenterer sterkt for å innhente brukerinnsikt hele tiden, gjennom smarte verktøy og gode teknikker. Hun argumenterer sterkt for å undersøke mulighetsrommet man har for å løse utfordringer brukerne har, og verifisere antagelsene sine før man begynner å implementere noe som helst. Mesteparten av arbeidet bør med andre ord skje lenge før utviklerfingre treffer tastatur.</p><p>Torres introduserer også en teknikk hun kaller — litt morsomt på norsk — OST, eller Opportunity Solutiton Trees. Denne teknikken går ut på å utforske hvilke muligheter man har for å løse ett eller annet forretningsmål, dele dem opp i under-muligheter, og til slutt utforske en rekke forskjellige løsninger på disse. Det er en skikkelig kraftig teknikk, som vi har begynt å bruke flittig i vårt produktteam. <a href="https://www.bekk.christmas/post/2023/19/prov-ost-for-jul">Runar skrev også en veldig fin introduksjon til denne teknikken</a> her om dagen, som definitivt kan anbefales.</p><p>Dette er nok en bok som argumenterer sterkt for å jobbe smidig — ikke bare i teorien, men i praksis. Torres argumenterer også for å blande “discovery” og “delivery” fasene mye tettere enn andre forfattere har gjort.</p><p><a href="https://www.adlibris.com/no/bok/continuous-discovery-habits-9781736633304?gad_source=1">Du kan kjøpe boken her</a>.</p><h3>Team Topologies</h3><p>Av Matthew Skelton, Manel Pais</p><p>Når man jobber i større organisasjoner, er teamene man jobber i — og hvordan de er strukturert — noe man kontinuerlig itererer på. Hvordan man splitter opp ressursene sine er definitivt en av de tingene man gjør som påvirker både flyt, produktivitet og gjennomføringsevne mest i en produktorganisasjon.</p><p>Boken “Team Topologies” av Matthew Skelton og Manel Pais har blitt et slags standardverk for de som tar for seg denne jobben. Erfaringsmessig er dette et samarbeid mellom avdelingsledelsen og produktlederne.</p><p>Team Topologies argumenterer for at man burde strukturere teamene i fire distinkte typer — strøm-følgende, muliggjørende, kompliserte undersystem og plattform-teams. Når man deler seg inn i disse topologiene, mener forfatterne at man klarer å minimere kognitiv last, tilpasse seg endringer i organisasjonen og ha fokus på å levere.</p><p>Vi har brukt teorien fra denne boken i praksis hos flere kunder, og har opplevd at det også fungerer i praksis. Egentlig ganske gøy!</p><p><a href="https://www.adlibris.com/no/bok/team-topologies-9781942788812">Du kan kjøpe boken her.</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/832/0*NTxEcfKhjLWM6cpP.png" /></figure><h3>Accelerate</h3><p>Av Nicole Forsgren, Jez Humble, Gene Kim</p><p>“Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations” (jadda, de er glade i lange boknavn disse amerikanerne) er en av de første store bøkene jeg leste som teknolog, og det er kanskje det mest klassiske verket innen smidig produktutvikling. Om du skal være produktleder, tror jeg rett og slett du MÅ ha lest denne boken før du setter i gang.</p><p>Boken foreslår fire nøkkelmetrikker man bør se på for å bli en skikkelig bra digital produktorganisasjon:</p><ul><li>Hvor ofte du deployer til produksjon</li><li>Hvor fort det går fra du skriver kode til det er i produksjon</li><li>Hvor fort man kan rette feil i produksjon</li><li>Hvor ofte man brekker produksjon</li></ul><p>Mye om produksjon, da, med andre ord.</p><p>Boken lener seg tungt på forskning og erfaring fra store teknologiorganisasjoner, og har muligens flere referanser enn noe annet verk jeg har lest. Utrolig gøyal lesning — om enn litt… tung til tider.</p><p><a href="https://www.adlibris.com/no/bok/accelerate-9781942788331?gad_source=1">Du kan kjøpe boken her.</a></p><h3>Measure What Matters</h3><p>Av John Doerr</p><p>Du har hørt om OKR. Du har gjort OKR. Du har ikke helt fått til OKR. Og det er helt greit. Noen mener til og med at <a href="https://www.bekk.christmas/post/2023/02/det-er-ikke-noe-galt-med-okr-du-gjor-det-bare-feil">det er din egen skyld</a>.</p><p>En kollega av meg sa en gang at OKR et et “litt for enkelt rammeverk for å oppnå noe som er utrolig vanskelig”. Og det er kan jeg ikke være mer enig i. Men da kan det også være veldig greit å lese litt om hvordan det egentlig skal gjøres!</p><p>“Measure What Matters” er en fantastisk bok som tar deg med inn i OKR-verdenen, og hva man egentlig prøver å løse. Og det er jo litt som tittelen nevner — at man skal prøve å måle hva man egentlig prøver å få til. Det å prioritere er vanskelig på alle plan, men om man skal klare å sette mål for en hel organisasjon, så bør man virkelig sette seg inn i materien.</p><p>Denne boken er en “must-read” (har man et norsk uttrykk for det egentlig?) for alle som vil jobbe målrettet — og spesielt alle som har fått beskjed om at “nå skal vi bruke OKR” for å oppnå noe som helst.</p><p><a href="https://www.adlibris.com/no/bok/measure-what-matters-9780241348482">Du kan kjøpe boken her</a> — og hadde jeg vært deg, hadde jeg plukket med meg <a href="https://www.adlibris.com/no/bok/radical-focus-second-edition-9781955469012">Radical Focus</a> i samme slengen. Begge disse bøkene er helt ekte gullgruver for deg som vil prøve å få folk til å dra i samme retning.</p><h3>Escaping the Build Trap</h3><p>Av Melissa Perri</p><p>Vi er jo alle glade i å lage ting. Ingenting ser bedre ut på ukesoppsummeringen enn å ha lansert en ny tjeneste, en ny feature eller på andre måter å ha tilbudt brukerne deres noe mer. Men stopper du noen gang opp for å tenke om det var det de faktisk trengte?</p><p>“Escaping the Build Trap: How Effective Product Management Creates Real Value” introduserer konseptet om bygge-fella — det å lage ting bare for å lage ting, uten å verifisere at det er ting folk faktisk kommer til å bruke. Jeg har i alle fall gått i den fella opptil flere ganger selv!</p><p>For å fikse dette foreslår Perry et par forskjellige teknikker — men den som skinner best gjennom er å fokusere mer på “outcome” (hva folk faktisk sitter igjen med av verdi) enn output (hva du har laget). Dette er ganske likt det du hører fra både Inspired og Accelerate, men har muligens et ekstra fokus på sluttbrukerne.</p><p>En veldig bra bok i alle fall — og en jeg vurderer å lese en gang til i 2024.</p><p><a href="https://www.adlibris.com/no/bok/escaping-the-build-trap-9781491973790">Du kan kjøpe boken her</a>.</p><h3>Bedre Produkter</h3><p>Av Ida Aalen</p><p>Helt til slutt vil jeg komme meg min kanskje aller største anbefaling. Om du jobber med produktutvikling i Norge, er dette boken du burde lese først av alle.</p><p>Ida Aalen har en fantastisk evne til å oppsummere produktleder-kunnskapen som finnes i alle bøkene jeg har nevnt ovenfor (og et par til) — og oversette det til norske forhold. Alle er ikke Spotify eller Meta — og det er en god del tilpasninger man burde gjøre underveis i arbeidet sitt for å få ting til å fly her i Norge.</p><p>“Bedre Produkter” er proppfull av erfaringer fra forskjellige organisasjoner her i landet, og tar for seg hvordan beste praksis kan se ut når man jobber i norske forhold. Om jeg skulle lest én bok i år, så hadde det definitivt vært denne. Og så hadde den inspirert meg til å lese resten på denne listen.</p><p><a href="https://bedreprodukter.no/">Du kan kjøpe boken her</a>. Og det, det synes jeg du skal gjøre.</p><h3><strong>Mye å lese</strong></h3><p>Om du føler deg litt overveldet, så er det helt okei. Det hadde jeg også gjort. Men alle som en er fantastiske ressurser for å få deg bedre rigget som produktleder der du jobber.</p><p>På tvers av alle disse bøkene, så er det en slags konsensus om å spørre brukerne, iterere raskt på feedback og utforske mulighetsrommet man har. Og det er dritvanskelig. Men — herre min hatt, som det er verdt det.</p><p>Jeg håper du blir inspirert til å plukke opp et par bøker i 2024, og utvikle deg både som produktleder og medarbeider. For det har aldri vært et bedre tilbud for folk som vil mer.</p><p>Og du — hvis du har småbarn, en stressende hverdag, eller bare ikke er så flink til å lese, så kan jeg på det varmeste anbefale å signe opp for en lydboktjeneste. Jeg har hørt haugevis av bøker på vei til og fra jobb på <a href="https://www.audible.com/">Audible</a> — og det er en flott måte å bygge kompetanse på, uten at det stjeler noe av fritiden din på.</p><p>Lykke til!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a67e9225500e" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/leseliste-for-produktledere-a67e9225500e">Leseliste for produktledere</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[State of Frontend i Bekk 2024]]></title>
            <link>https://blogg.bekk.no/state-of-frontend-i-bekk-2024-0a069e6e21e0?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/0a069e6e21e0</guid>
            <category><![CDATA[css]]></category>
            <category><![CDATA[teknologi]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[state-of-frontend]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 05 Mar 2024 11:02:07 GMT</pubDate>
            <atom:updated>2024-03-05T13:06:20.963Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Skrevet av Caroline Odden og Kristofer Giltvedt Selbekk</em></p><p>Bekk jobber med noen av de største og viktigste premissgiverne når det kommer til teknologi i Norge. Men hva slags teknologi er det egentlig vi bruker? Og hva synes vi egentlig om det? Vi har gjennomført en unik intern spørreundersøkelse for å finne ut av nettopp det.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tAv-SbTG5IScdzhmrqvVVw.jpeg" /></figure><h3>Hva er dette for noe?</h3><p>Frontend-miljøet har alltid beveget seg fort – og kanskje spesielt fort det siste tiåret. Det er det mange grunner til. Brukere forventer mer av frontend-løsningene vi lager, og på grunn av det har det vært enorme investeringer i både forskning og nyutvikling av verktøyene som lar oss shippe bedre brukeropplevelser raskere. Mobiltelefonene og datamaskinene våre har blitt kraftigere, og mulighetsrommet vi har, har også vokst dramatisk.</p><p>Så da er det kanskje ikke så rart da, at folk opplever det som har blitt omtalt som <a href="https://dev.to/yehezkielgunawan/frontend-fatigue-5ai7">“frontend fatigue”</a>. For i prosessen med å lage bedre verktøy, har man prøvd utallige forskjellige måter å løse det samme problemet på – nemlig det å lage gode brukeroppleveser på en rask og enkel måte. Og da blir det nødvendigvis en god del iterasjon. Og slitne frontendere.</p><p><strong>Men hva er egentlig situasjonen i dag?</strong> Hva er det folk bruker, og hva synes de om status quo? Det har vi egentlig ikke så veldig mange tall på. Vi har <a href="https://stateofjs.com/en-US">State of JS-undersøkelsen</a>, men den har en stor vekting mot det amerikanske markedet, og er ikke direkte overførbar til hva vi opplever her på berget. Og der – der fikk vi en idé.</p><p>Bekk er et ganske stort konsulentselskap, med folk hos et bredt spektrum av Norges IT-bedrifter. Vi er representert hos både store offentlige aktører, mellomstore halv-statlige bedrifter og mindre startups. Vi er en gjeng med både unge og erfarne, som jobber både med hippe greenfield-prosjekter og tyngre forvaltningsoppdrag. Vi har rett og slett en unik innsikt i hva frontendere og fullstackere bruker! Og den — den har vi samlet inn, og vil dele med dere nå.</p><h3>Metode og demografi</h3><p>For å samle inn denne innsikten, laget vi en enkel spørreundersøkelse med 22 spørsmål, som vi tror de fleste som jobber med framsia vil finne interessant. Vi sendte ut en god gammeldags coco@channel på #frontend-kanalen vår på Slack, og ba alle som jobber med frontend – om det er litt eller mye — om å dele sine erfaringer.</p><p>Vi samlet inn meningene til 98 forskjellige frontendere og fullstackere i Bekk. Respondentene jobbet hos over 30 forskjellige kunder, og har nok i sum jobbet med langt over dobbelt så mange opp gjennom karrieren sin. Alle spørsmålene ble besvart av samtlige deltakere, som selvfølgelig svarte anonymt, og med en oppfordring om å dele sine ærlige meninger og erfaringer. De aller fleste spørsmålene var multiple choice (kanskje du er på et team som forvalter både ny React-kode og gammel Angular-kode?), og mange spørsmål hadde både en “hva bruker du”-seksjon og en “og hva synes du om det”-seksjon.</p><p>Kanskje du kan relatere til det vi har funnet, eller kanskje du er skikkelig uenig. Men en god debatt vil det nok starte uansett. Og debatt er bra.</p><figure><img alt="Hvor mange års relevant erfaring har du som utvikler? 37.8 % svarte 0–2, 27.6 % svarte 3–5, 17.3 % svarte 6–8 og 17.3 % svarte 9 år eller mer." src="https://cdn-images-1.medium.com/max/1024/1*BMpYAd0sgZT53HRcSH0TfQ.png" /></figure><p>Bekkerne som svarte på denne undersøkelsen fordelte seg utover en relativt representabel del av demografien vår. I underkant av 38 % var ganske ferske i gamet, 28 % var seniorkonsulenter, 17 % var managere og 17 % til var det man kan kalle ringrever.</p><figure><img alt="Hvor stort er teamet ditt? 9.2 % svarte 1-3, 27.6 % svarte 4–6, 30.6 % svarte 7–9 % og 32.7 % svarte over 10 eller flere." src="https://cdn-images-1.medium.com/max/1024/1*GSoCyOTbSRo_kZioTyUrGQ.png" /></figure><p>Folka jobbet også i ganske forskjellige teams. Ca 2 av 3 jobbet i relativt store teams på over 6 medlemmer, mens den siste tredjedelen hadde en litt mer intim arbeidshverdag på teams mellom 1 og 6. Veldig få av oss jobbet alene, eller med én eller to til.</p><p>Disse grupperingene inkluderer alt fra utviklere og designere til produktledere, testere og jurister. Det er kanskje derfor ikke så rart at det ikke er så mange som jobber på egenhånd.</p><p>Så nå vet dere hvordan vi gjennomførte undersøkelsen, og litt om hvem som svarte på det. Men hva var det de egentlig svarte på – og hva var resultatene? La oss hoppe i det!</p><h3>Hvilke JavaScript-biblioteker bruker du på oppdraget ditt i dag?</h3><figure><img alt="Hvilke JavaScript-biblioteker bruker du på oppdraget ditt i dag? 83.7 % svarte React, 10.2 % svarte Vue, 0 % svarte Svelte, 3.1 % svarte Angular og 7.1 % svarte Elm. I tillegg var det en rekke som svarte unike svar, som Knockout, React Native, Web Components og Ingen." src="https://cdn-images-1.medium.com/max/1024/1*S4rbYCMfAeMLLnkezeirNg.png" /></figure><p>Det aller første vi spurte om var nok det mange av oss lurer mest på. Hva er det folk bruker til å lage interaktive frontend-apper i dag?</p><p>Resultatet var overraskende ensidig. Hele 83.7 % av respondentene forteller at de skriver React-kode på en daglig basis (86.8 % om du inkluderer React Native). 10.2 % bruker Vue, 7.1 % bruker Elm og 3.1 % bruker Angular.</p><p>Det var også noen litt overraskende lave tall i undersøkelsen. Aller mest overraskende var nok at det var ingen Bekkere som bruker Svelte på arbeidsplassen sin! Det er mange som snakker positivt om Svelte internt, og mange som nevnte at de gjerne skulle jobbet med det – men det er altså ingen som bruker det i produksjon i dag.</p><p>Begrunnelsene for disse valgene var mange, men i hovedtrekk kan man oppsummere Reacts dominans slik:</p><h4>Enkel tilgang på ressurser</h4><p>Mange av kundene til Bekk er store organisasjoner, som trenger tilgang til mange ressurser for å få gjort arbeidet sitt godt og effektivt. Og er det noe som er enkelt å skaffe til veie for tiden, så er det folk som kan React.</p><p>Det er nok mange grunner til det, men det vi ser er at det er veldig mye gode læringsmuligheter når det kommer til React. Vi har både<a href="https://github.com/bekk/react-intro"> egenutviklede workshops</a>, forskjellige faggrupper og programmer, og masse folk som er genuint interessert i å bli gode, raskt. React har god dokumentasjon, det er massevis av opplæringsprogrammer man kan kjøpe seg, og biblioteket er i stadig utvikling. Kanskje ikke så rart da, at vi ser at flere av kundene våre har valgt React som standard-måten å utvikle løsninger på.</p><h4>(Veldig) modent</h4><p>React er 11 år gammelt i dag, og selv om dagens kode ikke nødvendigvis ser ut som den vi skrev for et tiår siden, er konseptene godt forankret og alle edge cases godt dekket. Mange fremhevet også at utvikleropplevelsen var ekstremt god, og at det er et enormt økosystem av biblioteker og meta-rammeverk som gjør det enkelt å shippe kode til produksjon som bare funker.</p><h4>“Learn once, write anywhere”</h4><p>Vi ser også at det er mange som fremhever at det å “kunne React” gjør at man ikke bare er frontendutvikler, men også mobilutvikler. Mange av kundene våre har React Native-applikasjoner, og når man jobber med både vanlige frontend-apper og mobilapper, så er det enklere å hoppe mellom paradigmene.</p><h3>Hvilke rammeverk bruker du på oppdraget ditt i dag?</h3><figure><img alt="Hvilke av disse rammeverkene bruker du på oppdraget ditt i dag? 20.4 % svarte Next.js (App Router), 10.2 % svarte Next.js (Pages Router), 6.1 % svarte Remix, 0 % svarte Astro og SvelteKit, 3.1 % svarte Nuxt og hele 63.3 % svarte “ingen”." src="https://cdn-images-1.medium.com/max/1024/1*YYV7Txj2ee90BOf-epIHNg.png" /></figure><p>Som utvikler, har vi lenge sett at rammeverk er gode å ha når en teknologi blir mer og mer kapabel. Vi har merket dette lenge på backenden, med både Spring Boot, Ktor og .net Core som klare favoritter – men i de siste årene har såkalte meta-rammeverk for frontend-apper også blitt veldig populære.</p><p>Det var derfor litt overraskende å se at hele 63 % av respondentene meldte at de ikke bruker noe meta-rammeverk for å lage frontend-appene sine. Ca en tredjedel brukte Next.js (enten i “gammel” eller “ny” versjon), mens kun 6 % brukte Remix, og 3 % brukte Nuxt.</p><p>Det er nok ofte enkelt å se seg blind på den globale diskursen når det kommer til teknologivalg. For det å dra inn et metarammeverk som Next.js eller Remix er nemlig ikke trivielt i en rigg som ofte har en fast hosting-leverandør, eller manglende støtte for Node-apper. Ofte er det heller ikke ønskelig med den økende kompleksiteten det fører med seg å ha en app som rendrer ting på serversiden. Det er mange saksbehandler-applikasjoner der ute, og både SEO og tid til man ser noe på skjermen etter en sidelast er ikke så viktig når man har en intern brukergruppe på noen titalls eller hundretalls saksbehandlere som laster appen din hver morgen kl 0900.</p><p>Vi ser allikevel en stor økning i bruken av meta-rammeverk rundt om. Rent anekdotisk merker vi at antallet utviklere som bruker enten Next.js eller Remix har økt betraktelig det siste året. Kanskje utvikleropplevelsen en slik løsning gir, etterhvert vil være verdt den ekstra kompleksiteten? Kanskje det å eliminere konsepter som backend-for-frontends gjør det ekstra interessant å migrere seg over? Vi er veldig spent på hvordan denne statistikken kommer til å utvikle seg år etter år.</p><p>Det skal også nevnes at ingen sa de brukte hverken SvelteKit eller Astro i produksjon i dag. Det er kanskje ikke så rart når det kommer til førstnevnte (siden ingen brukte Svelte), men at ingen bruker Astro (som har fått veldig mye positiv omtale i det siste, og som er kompatibelt med React), var mer overraskende.</p><h3>Hva bruker du for tilstandshåndtering?</h3><figure><img alt="Hva bruker du for tilstandshåndtering? 49.5 % svarte React Context og useState, 30.9 % svarte useSWR eller React Query, 14.4 % svarte Redux, 7.2 % svarte Recoil, og en rekke andre svarte unike svar, som Jotai, Elm, useReducer, Pinia og MobX" src="https://cdn-images-1.medium.com/max/1024/1*ShndhPwXwuaJfhMUe0NElA.png" /></figure><p>Tilstandshåndtering har lenge vært en av de vanskeligste tingene vi frontend-utviklere har å bryne oss på. Og det er kanskje her vi har iterert de siste 10 årene også.</p><p>Omtrentlig 50 % bruker Reacts innebygde primitiver for tilstandshåndtering, nemlig useState, useReducer og useContext. Ca en tredjedel bruker mer moderne respons-cache hooks som <a href="https://swr.vercel.app/">useSWR</a> eller <a href="https://tanstack.com/query/latest">TanStack Query</a>, 7 % bruker det <a href="https://github.com/facebookexperimental/Recoil/issues/1495">nå forlatte</a> <a href="https://recoiljs.org/">Recoil</a>, mens 14 % fortsatt bruker <a href="https://redux.js.org/">Redux</a>.</p><p>Erfaringene vi hentet inn hadde noen hovedpoenger:</p><h4>Redux er klønete og føles gammeldags</h4><p>De som jobbet med Redux, var mildt sagt ikke fornøyd. Det ble uten unntak brukt i eldre kodebaser, og samtlige respondenter ønsket å skrive seg vekk fra det. Selv om Redux har blitt veldig mye bedre i det siste, oppleves det fortsatt som en unødvendig runddans, som gjør det vanskeligere å forstå eksisterende kode, eller å utvikle nye features.</p><h4>Det meste løses av primitiver (og noen smarte hooks)</h4><p>Over halvparten av respondentene sa de brukte Reacts Context API og useState / useReducer til å håndtere tilstand i applikasjonene sine. Det er jo et tegn på at primitivene som tilbys løser de aller fleste behov, og at det ofte ikke er vits å implementere en mer ambisiøs løsning i de appene vi lager.</p><p>En av fordelene med denne trenden er at det er mindre APIer og biblioteker å lære seg. Klarer man seg med det mest grunnleggende – hva er egentlig vitsen i å dra inn nok et abstraksjonslag?</p><p>Vi så også en stor andel utviklere som var fornøyde med biblioteker som abstraherer vekk henting og mellomlagring av responser fra serveren, som useSWR og TanStack Query. Mange nevnte at dette ikke er tilstand i ordets rette forstand, men heller en måte å cache data fra serveren på. Og om man tenker slik på det, så kan det jo være</p><h4>Meta-rammeverkene tar over</h4><p>En annen trend vi så er at folk forvalter mindre tilstand enn før – i stor grad grunnet metarammeverk som Next.js og Remix. Når man knytter server og klient tettere sammen, blir det nemlig mindre tilstand å håndtere. Caching av data på klienten blir abstrahert vekk, og man blir i større grad oppfordet til å putte tilstand i URLer, eller i såkalte nøstede ruter. Og da er det ikke så mye tilstand igjen å håndtere egentlig.</p><h3>Typesetting — hva bruker du?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TL_uoR6XIfMevxmrd4nlzQ.png" /></figure><p>Dette spørsmålet førte til nok en overraskelse – nemlig hvor populært TypeScript har blitt! Hele 81.6 % av de som svarte oppga at de utelukkende brukte TypeScript i kodebasen sin, og kun 3.1 % sa at de hadde rene JavaScript kodebaser. 9.2 % svarte at de brukte andre typesikre språk som Elm eller Dart.</p><p>Denne endringen i hvordan vi skriver kode har nok hatt en enorm påvirkning på to ting – mengden bugs brukerne våre snubler over, og mengden enhetstester vi skriver for frontend-koden vår. For hvorfor skrive tester for ting vi kan statisk analysere oss frem til?</p><h3>Hvilke verktøy bruker du til testing?</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WgXBdvVQA4CNBJHP84Gq9w.png" /></figure><p>Apropos testing – vi avdekket mer spennende innsikt når det kom til hvordan vi tester frontend-koden vår.</p><p>Når det kommer til enhetstester, så ser vi at 30.6 % bruker Jest, mens 21.4 % bruker Vitest. Ende-til-ende-testene ble skrevet i Cypress i 27.6 % av tilfellene, mens 24.5 % sverget til Microsofts Playwright. Og litt over en fjerdedel av oss skriver ikke frontend-tester overhodet.</p><p>Tilbakemeldingene rundt testing var at de som skrev tester var ganske fornøyd med hvordan verktøyene var for tiden. Både Jest, Vitest, Cypress og Playwright er moderne rammeverk, som gjør det enkelt å automatisere det man tidligere trykket seg gjennom etter en prodsetting for å sjekke.</p><p>Det var overraskende å se at en fjerdedel ikke skriver tester for frontend-koden sin i det hele tatt – men etter å ha analysert tilbakemeldingene litt, ser vi at det har en forklaring det og. Typesystemer tar for seg mesteparten av behovet man historisk sett hadde for tester på frontend-apper, og bedre monitorering og bedre tilgang til å deploye til produksjon gjør at man kan finne og fikse bugs raskere når de en gang skjer.</p><p>Det er definitivt fortsatt gode bruksområder for testing, og vi anbefaler de fleste å innføre enkle tester som verifiserer at løsningene vi utvikler fungerer uten problemer. Det kan man nå få til med ende-til-ende-testverktøyene vi har listet opp over. Man kan også bruke disse verktøyene til å teste ganske mange edgecases når det kommer til universell utforming. Allikevel kan det å skrive tester utover dette være en høyere forvaltningsbelastning enn det er verdt for mange.</p><h3>Hvilke teknologier bruker dere til styling?</h3><figure><img alt="Hvilke teknologier bruker dere til styling? 27.6 % svarte vanlig CSS, 25.5 % svarte SCSS, 9.2 % svarte LESS, 21.4 % svarte (S)CSS Modules, 26.6 % svarte Styled Components, 8.2 % svarte Styled System, og 15 % svarte Tailwind." src="https://cdn-images-1.medium.com/max/1024/1*3AoCmHbsrvIgVMsTyxK2zg.png" /></figure><p>Når man tenker på frontend, er det mange som trekker direkte paralleller til CSS. For hva er det folk egentlig bruker der ute?</p><p>Resultatene fra spørsmålet vårt var ganske splittet. Det var ca 1/4 hver som brukte enten helt vanlig CSS, SCSS, (S)CSS Modules og Styled Components. 15 % brukte Tailwind, 9 % brukte Less, og 8 % brukte Styled System.</p><p>Tilbakemeldingene var like delt. Noen elsket Tailwind, mens andre hatet det. Noen sverget til CSS-in-JS, mens andre synes det var både pest og kolera på samme tid. Men de aller fleste virket ganske fornøyde med de teknologivalgene de hadde tatt.</p><p>Det kan nok tenkes at styling har blitt en god del enklere å jobbe med etterhvert som nettleserne vi jobber med har begynt å oppdatere seg selv. Det er lenge siden man måtte kjøre opp Internet Explorer i en virtuell maskin for å sjekke at alt så bra ut. Dette er en flott utvikling, som gjør at vi kan bruke mer av tiden vår på å lage brukerverdi for alle, og mindre tid på å knote med forskjeller mellom nettlesere.</p><h3>Bruker dere et designsystem?</h3><figure><img alt="Bruker dere et designsystem? 61.2 % svarte “ja, egenutviklet”, 20.4 % svarte “ja men basert på et bibliotek (chakra ui, material ui osv), og 18.4 % svarte nei." src="https://cdn-images-1.medium.com/max/1024/1*dmcQYmib8gO-QzVysfyY1Q.png" /></figure><p>Det har blitt populært å bruke designsystemer, gitt!</p><p>61.2 % av respondentene sa de brukte et egenutviklet designsystem, 20.4 % sa de brukte et designsystem basert på et komponentbibliotek som Chakra UI eller Material UI, mens kun 18.4 % sa de ikke brukte et.</p><p>Det er interessant å se hvor mange av oss som jobber med egenutviklede designsystemer og komponentbiblioteker. Det gir oss en enorm fleksibilitet, men også en veldig stor forvaltningsbyrde. For hvor stor forskjell er det egentlig mellom knappene hos Tolletaten og NAV? Eller hvor annerledes er brukerbehovene til en datovelger hos Vy enn hos SpareBank 1?</p><p>Det er kanskje ikke så rart at vi ser initiativer som <a href="https://github.com/digdir/designsystemet?tab=readme-ov-file#table-of-contents">Digitaliseringsdirektoratets nasjonale designsystem for offentlige virksomheter</a>, eller (det litt mer ekstreme) Brad Frost sitt forslag om <a href="https://bradfrost.com/blog/post/a-global-design-system/">et globalt designsystem</a>. Vi håper vi ser en større standardisering rundt dette fremover – som vil være en enorm seier både for brukeropplevelse, utvikleropplevelse, universell utforming og produktivitet for utviklere generelt.</p><h3>Hvordan gjør dere bygging av JavaScript?</h3><figure><img alt="Hvordan gjør dere bygging av TypeScript? 41.2 % svarte Vite, 30.9 % svarte Webpack, 24.7 % svarte at rammeverket gjorde det for seg, og 5.2 % svarte Parcel. 2.2 % svarte Bun." src="https://cdn-images-1.medium.com/max/1024/1*_aeVrprqe1ULKp5G7ERxhQ.png" /></figure><p>Der frontendene for 10 år siden var relativt statiske og frie for kompilering, har vi lenge merket en tendens til at det kreves stadig mer preprosessering av frontend-koden vår før vi kan servere den til sluttbrukerne. Og også her har det skjedd en enorm utvikling de siste par årene.</p><p>Resultatene viser at 41.2 % bruker Vite til å bygge applikasjonene sine, 30.0 % bruker Webpack, og 24.7 % lener seg på rammeverket sitt for å gjøre denne jobben. 5.2 % brukte Parcel, mens bare 2.1 % brukte frontend-verdenens nye superhelt Bun.</p><p>Migrasjonen vekk fra Webpack ser ut til å være i full gang. Der det en gang var en skrekkoppgave å sette seg inn i det nye prosjektet sitt sin Webpack-config, ser vi nå at mye av denne kompleksiteten abstraheres vekk gjennom verktøy som blant annet Vite. Meta-rammeverkene tar også over en stadig større del av denne jobben – som tross alt kan løses på en generell måte.</p><p>Vite har seilet opp som en stor favoritt blant prosjektene vi jobber på. Det er noen som bruker alternativer som Parcel eller Bun, men i stor grad ser det ut til at Vite er markedsvinneren her. Og det er kanskje ikke så rart, gitt hvor raskt og greit det er å bruke?</p><h3>Hvordan ser backendene dine ut?</h3><figure><img alt="Hvordan ser backenden din ut? 57.1 % svarte JVM (kotlin, java, scala osv), 24.5 % svarte .net, 6.1 % svarte Node, og 6.1 % svarte “rammeverket er backenden min”" src="https://cdn-images-1.medium.com/max/1024/1*wLPq3z-JuswGMLzEJV9Ofg.png" /></figure><p>Selv om dette er en frontend-undersøkelse, så er de aller fleste av oss fullstack-utviklere. Og hva er det egentlig som sender oss all den dataen vi jobber så hardt med å gjøre om til gode brukeropplevelser?</p><p>I Bekk er i alle fall fasit at omtrentlig 57 % av alle backends er basert på enten Kotlin, Java eller Scala – og i hovedsak Kotlin. 24.5 % henter dataen sin fra .net-baserte servere, mens kun 6.1 % bruker Node. Like mange bruker meta-rammerverket sitt som sin eneste backend.</p><p>Vi jobber med mange tunge systemer, med stort behov for avanserte sikkerhets- og integrasjonsmuligheter. Så da er det kanskje ikke så rart av nesten tre fjerdedeler av oss integrerer med “gode gamle” teknologier som JVMen eller .net. Det blir allikevel interessant å se hvordan dette tallet utvikler seg i fremtiden, etterhvert som metarammeverkenes fremmarsj muliggjør stadig enklere feedback-løkker, og tettere integrasjon med frontendene.</p><h3>Hva synes du er spennende i webutviklingsverdenen fremover?</h3><p>Ingenting er statisk – og kanskje spesielt i frontend-verdenen. Men hva er det Bekkere gleder seg til i tiden som kommer?</p><p>Det aller mest gjentakende temaet var RSC – eller React Server Components. For de uinnvidde, så er RSCer en React-komponent som bare rendres på serveren. Det er jo flott for de komponentene som er tunge og fulle av JavaScript som ikke egentlig trengs på klienten – som for eksempel et markdown-bibliotek eller kode-highlighting. Det er fortsatt ganske nytt og spennende, og det er nok mange som gleder seg til at det blir bredere støttet og inkludert i en stabil versjon av React.</p><p>Mer generelt, så vi også at det at mer skjer på serveren, er noe vi gleder oss over. Vi har gått gjennom en komplett syklus de siste årene, fra serverside-rendra apper, via klientside-rendra apper, og nå er vi tilbake igjen. Fordelen er jo at sluttresultatet er mange ganger bedre og mer fleksibelt enn det vi hadde i 2013. Men som vi viste tidligere, så er det fortsatt et stykke igjen til flesteparten av oss bruker det i produksjon. Det blir spennende å se hvor fort det tallet beveger seg fremover.</p><p>Bortsett fra dette, så vi også at det var mye spenning rundt tematikker som WASM, Elm-vedlikehold, AI-verktøyenes inntog og Rust-tooling. Her er det ingen tid til å hvile kompetansemessig, med andre ord.</p><h3>Hva synes du er vanskelig i frontend-utvikling for tiden?</h3><p>Alt er selvfølgelig ikke rosenrødt i frontend-landskapet heller. Det er alltid mye nytt, det er alltid mye kompleksitet, og det er alltid tradeoffs når man skal jobbe i frontenden. Og Bekkere hadde opptil flere ting de ønsket å påpeke.</p><p>Mange synes styling var vanskelig. Det at det er så mange forskjellige teknologier, kombinert med stadig videreutvikling innen CSS, og ofte et kompetanseetterslep, gjør at styling ofte fører til ganske mye frustrasjon. Bør man bruke CSS Modules? Styled Components? Eller kanskje Tailwind? Det er kanskje ikke så rart å forstå at folk synes det er vanskelig.</p><p>En annen frustrasjon mange luftet var at det er vanskelig og tidkrevende å holde avhengigheter oppdatert. Vi bruker stadig flere tredjepartsbiblioteker, som igjen bruker egne tredjepartsbiblioteker, som igjen… Det er ikke så rart at det blir en komplisert affære! Spesielt når man bryter kontrakten man skal følge i semantisk versjonering, eller innfører nye bugs når man fikser gamle. Fra et sikkerhetsperspektiv er det kanskje ekstra vanskelig – for hvor enkelt er det å få oversikt over alt denne tredje-, fjerde- og femteparts koden gjør? Definitivt en vanskelig utfordring, som blir spennende å følge fremover.</p><p>Selv om React er et populært valg i Bekk, ser vi også at det er endel av oss som synes det er vanskelig. Og det er kanskje ikke så rart. For etterhvert som React har modnet, har det også blitt mer og mer komplisert. Man har muliggjort mer komplekse interaksjoner, på bekostning av hvor enkelt det er å forstå “alt” React tilbyr.</p><p>Andre frustrasjoner inkluderte Safari-bugs, å følge med på alt som skjer, typesikkerhet og pakkehåndtering. Vi er ikke helt i mål, med andre ord.</p><h3>Hvor viktig er det for deg å være på det nyeste kuleste av frontend-teknologi</h3><figure><img alt="Hvor viktig er det for deg å være på det nyeste kuleste av frontend-teknologi? Svarene var på en skala fra 1–5 der 5 var viktigst. 4.1 % svarte 1, 20.4 % svarte 2, 32.7 % svarte 3, 36.7 % svarte 4 og 6.1 % svarte 5." src="https://cdn-images-1.medium.com/max/1024/1*6P5PN4hErvRHqvxwxhN-0g.png" /></figure><p>Det var spennende å se hvordan denne kurven kom til å forme seg. Var vi en gjeng med teknologioptimister, som kastet seg rundt for å teste det nyeste kuleste i prod? Eller var vi en gjeng sirumpa laggards, som var mer risikoaverse enn eventyrlystne?</p><p>Svaret så ut til å ligge et sted i midten, med en liten preferanse mot eksperimentering. Ingen av ekstremene var spesielt godt representert, og de aller fleste la seg et sted mellom “trygt og godt nok” og “spennende med nye-ish greier”.</p><p>Vi tror at dette er akkurat der vi burde være. Vi burde være eventyrlystne nok til å utforske ny teknologi, samtidig som vi ikke burde risikere kundene våre sine rykter og forretningsmodeller på å pushe den nyeste alpha-versjonen til produksjon. Vi synes nye ting er gøy, og er klare for å integrere det i løsningene våre når det blir stabilt nok, samtidig som det er mange nok av oss som tør å holde tilbake nok til å ikke gå på de største smellene.</p><h3>Refleksjoner</h3><p>Dette var en lang artikkel – så om du har kommet deg helt hit synes vi du fortjener en liten applaus. Men vi synes det er verdt innsatsen for å se hva som faktisk beveger seg rundt om hos noen av Norges største IT-bedrifter.</p><p>Fortell oss gjerne hva dine egne opplevelser er! Ser du det samme som oss? Mener du vi har noen enorme blindsoner vi ikke tar inn over oss? Si gjerne ifra i kommentarfeltet eller på sosiale medier. Vi gleder oss til debatten!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0a069e6e21e0" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/state-of-frontend-i-bekk-2024-0a069e6e21e0">State of Frontend i Bekk 2024</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ForrigeUke (uke 51, 2023)]]></title>
            <link>https://blogg.bekk.no/forrigeuke-uke-51-2023-18ff44f2b80a?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/18ff44f2b80a</guid>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[forrigeuke]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 26 Dec 2023 05:01:43 GMT</pubDate>
            <atom:updated>2023-12-26T05:01:43.679Z</atom:updated>
            <content:encoded><![CDATA[<h3>&lt;ForrigeUke uke=”51” år=”2023” /&gt;</h3><p>Dette var uken for <a href="https://www.instagram.com/p/C0ttPyvubFz/">espressofedre</a> ☕️, <a href="https://twitter.com/FredrikM3yer/status/1737221974689292393">trippy skyer</a> 🌥️ og <a href="https://www.instagram.com/p/C0zbsOLL3bv/">endeløse løkker</a> ➰. Og 2.412 ting skjedde i frontend-verdenen!</p><blockquote>&lt;ForrigeUke /&gt; er en artikkelserie som oppsummerer hva som skjedde i frontend-verden i uken som var.</blockquote><figure><img alt="Et KI-generert bilde av nissens alver (og nissen) som setter sammen mekaniske tastaturer." src="https://cdn-images-1.medium.com/max/1024/0*gE7acHulCV2HpKkn" /></figure><h3>React Aria Components i v1</h3><p>Som designsystem-entusiast følger jeg alltid litt ekstra godt med på nye komponentbiblioteker. Og få releases har vært mer etterlengtet enn denne. Gjengen hos Adobe som har fått friheten til å jobbe med et UU- og stylingvennlig komponentbibliotek har endelig kommet i mål med React Aria Components v1 – og for en innsats de har lagt inn!</p><p>I denne pakken får man nemlig over 40 høyst UU-vennlige komponenter du kan bruke til å lage relativt avanserte brukergrensesnitt. Alt har blitt utviklet i samarbeid med UU-eksperter, og man har gjort massevis av testing med ekte brukere underveis. Snakk om å skaffe seg helt gratis superkrefter til produktteamet!</p><p>Pakken har vært ute i beta en stund, men er nå endelig tilgjengelig i en mer produksjonsklar modus. Kanskje det er på tide å kaste ut den sjanglende datovelgeren din til noe som er litt enklere og bedre å bruke?</p><p><a href="https://react-spectrum.adobe.com/releases/2023-12-20.html">December 20, 2023 Release</a></p><h3>Shadcn/ui med masse nytt</h3><p>Et annet komponentbibliotek som har fått massevis av oppmerksomhet i 2023, er det noe merkelig navngitte shadncn/ui. Dette biblioteket har en litt annen approach enn andre biblioteker, i at det ikke er tilgjengelig på NPM. Istedenfor bruker man en CLI til å kopiere inn kode i din kodebase — slik at du kan gjøre alle tilpasninger du måtte ønske.</p><p>Forrige uke var det full lanseringsfest her også, med massevis av nye komponenter, som også gir deg litt mer avanserte verktøy til brukergrensesnitt-byggingen din.</p><p>Selveste shadcn (det er github-brukernavnet til personen bak) har en flott tråd der hen viser frem alt det nye:</p><h3>shadcn on Twitter: &quot;✨We&#39;ve added new components to shadcn/ui and made improvements to the CLI.◆ Drawer, Carousel, Pagination, Sonner &amp; Resizable◆ Support for custom Tailwind prefix◆ Shipping early next year: A new style with framer motion animationshttps://t.co/NknJtJiTH6 👇 pic.twitter.com/4TaZ4rVQZe / Twitter&quot;</h3><p>✨We&#39;ve added new components to shadcn/ui and made improvements to the CLI.◆ Drawer, Carousel, Pagination, Sonner &amp; Resizable◆ Support for custom Tailwind prefix◆ Shipping early next year: A new style with framer motion animationshttps://t.co/NknJtJiTH6 👇 pic.twitter.com/4TaZ4rVQZe</p><h3>En shadcn/ui deep dive</h3><p>Om du ble litt interessert i shadcn/ui etter avsnittene over, eller om du har testet det ut litt allerede, så kan neste artikkel være ekstra interessant.</p><p>Manupa har skrevet en fin deep dive rundt dette biblioteket, og hvilke patterns og tekniske valg som har blitt gjort underveis. Det kan være greit å ha et forhold til, siden det tross alt skal inn i kodebasen din!</p><p><a href="https://manupa.dev/blog/anatomy-of-shadcn-ui">The anatomy of shadcn/ui</a></p><h3>Remix får klient-data-støtte</h3><p>Remix slapp også en ny versjon i julestria. Den største nyheten er at man nå har en innebygget måte å hente data på i klienten! Remix er i utgangspunktet et server-sentrert React-rammeverk, men av og til er det rett og slett nødvendig å hente data på klientsiden også.</p><p>Remix v2.4.0 kommer med ny clientLoader eksport, som blant annet kan vente på server-loaderen til å bli ferdig. I tillegg kan den hente ny data fra klienten. Dette kan være veldig nyttig når du for eksempel ønsker å ha en ucachet datakilde på en ellers cachet side. Vi kommer til å bruke dette hos en kunde som har en status-liste som oppdateres ofte, på en side som caches hardt.</p><p>Dette er et steg i retning av å innføre en såkalt SPA-mode for Remix. Dette er en flott måte å skrive om eksisterende React-apper til å bruke Remix, uten å legge til en server med en gang. Det kan også være et smart valg for noen typer applikasjoner som krever mer interaksjon enn man vanligvis ser.</p><p>Les changeloggen her 🔽</p><p><a href="https://github.com/remix-run/remix/blob/main/CHANGELOG.md#v240">remix/CHANGELOG.md at main · remix-run/remix</a></p><h3>Remix-refleksjoner</h3><p>Om du ikke har brukt Remix selv enda, kan det være smart å høre litt fra andres erfaringer før man tar det i bruk selv. Her har Solomon fra konsulentselskapet Viget skrevet en fin oppsummering av deres egen læring fra å lage et internt verktøy i Remix.</p><p><a href="https://www.viget.com/articles/thoughts-on-remix/">Thoughts on Remix | Viget</a></p><h3>En guide til structuredClone</h3><p>Av og til trenger man å klone et objekt, og alle objektene og arrayene inni. En såkalt “dyp klone”. Det har alltid vært en klønete ting å få til i JavaScript – inntil nylig. Nå har man nemlig fått en innebygget måte å gjøre det på!</p><p>structuredClone gjør nemlig det man brukte relativt store biblioteker til i gamle dager – gjennom native kode i nettleseren. Og om du lurer på hvordan du bruker det, fant jeg en skikkelig fin guide her:</p><p><a href="https://www.builder.io/blog/structured-clone#why-not-code-clone-deep-code">Deep Cloning Objects in JavaScript, the Modern Way</a></p><p>(PS — riktignok fra januar, men jeg leste den først forrige uke. Så i min bok er det fortsatt dagsrelevant 😄)</p><h3>Bonus — frontend-artikler fra bekk.christmas!</h3><p>Bekk har i år som de siste 6 årene laget et sabla kaos av faglige artikler i desember. Og den siste uken har det kommet hele 12 artikler som relaterer seg til frontend. Vi leker ikke fagmiljø 🥰</p><p>Ta en titt da vel!</p><ul><li><a href="https://www.bekk.christmas/post/2023/18/immutable-state">Immutable state</a></li><li><a href="https://www.bekk.christmas/post/2023/19/slik-lager-du-et-bibliotek-som-stotter-react-server-components">Slik lager du et bibliotek som støtter React Server Components</a></li><li><a href="https://www.bekk.christmas/post/2023/20/jotai-build-your-state-with-atom-precision">Jotai: Build Your State with Atom Precision</a></li><li><a href="https://www.bekk.christmas/post/2023/20/ta-kontroll-pa-skjemaelementet">Ta kontroll på skjemaelementet!</a></li><li><a href="https://www.bekk.christmas/post/2023/21/grids-for-gen-flex">Tre Grids for generasjon Flex</a></li><li><a href="https://www.bekk.christmas/post/2023/23/laer-deg-a-bruke-voiceover-med-tre-enkle-kommandoer">Lær deg å bruke VoiceOver med tre, enkle kommandoer</a></li><li><a href="https://www.bekk.christmas/post/2023/24/prettier-config-considered-harmful">🔥 Prettier Config considered harmful</a></li><li><a href="https://www.bekk.christmas/post/2023/24/useeffects-only-for-side-effects">UseEffects only for side effects</a></li><li><a href="https://www.bekk.christmas/post/2023/24/three-techniques-for-faster-react-apps">Three techniques for faster React apps</a></li><li><a href="https://www.bekk.christmas/post/2023/24/hva-er-greia-med-useref-og-forwardref">Hva er greia med useRef og forwardRef?</a></li><li><a href="https://www.bekk.christmas/post/2023/24/accessible-loading-button">Making an accessible loading button: Aria-disabled with friends</a></li><li><a href="https://www.bekk.christmas/post/2023/24/get-typesafe-apis-with-zod-and-chatgpt">Get typesafe APIs with Zod and ChatGPT</a></li></ul><p>Tusen takk for følge i år — sees igjen neste år!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=18ff44f2b80a" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/forrigeuke-uke-51-2023-18ff44f2b80a">ForrigeUke (uke 51, 2023)</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ForrigeUke (uke 38, 2023)]]></title>
            <link>https://blogg.bekk.no/forrigeuke-uke-38-2023-921a6d11de03?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/921a6d11de03</guid>
            <category><![CDATA[react]]></category>
            <category><![CDATA[forrigeuke]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[svelte]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 26 Sep 2023 04:01:35 GMT</pubDate>
            <atom:updated>2023-09-26T04:01:35.955Z</atom:updated>
            <content:encoded><![CDATA[<h3>&lt;ForrigeUke uke=”38” år=”2023” /&gt;</h3><p>Dette var uken for <a href="https://twitter.com/insultsrare/status/1703370718027935758">nostalgia</a> 🚬 , <a href="https://www.instagram.com/p/CvESqj9Ncwu/">koselige pranks</a> 👮‍♀️ og <a href="https://www.instagram.com/p/Cu9vstItvEs/">hyggelige øyeblikk</a> 🐶. Og hvor jeg åpenbart var endel på instagram 🙈. Men det skjedde fortsatt haugevis av ting i frontend-verden, og nå skal du få en kjapp oppsummering!</p><blockquote>&lt;ForrigeUke /&gt; er en artikkelserie som oppsummerer hva som skjedde i frontend-verden i uken som var.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6IWGdIPfUpTj-bTz" /><figcaption>Runer var plutselig in igjen forrige uke. Bilde av <a href="https://unsplash.com/@carlamstgo?utm_source=medium&amp;utm_medium=referral">Carla Santiago</a> på <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Svelte får runer!</h3><p>Svelte har lenge vært et yndet rammeverk for folk som setter pris på reaktiv kode. Man endrer en variabel, som om det var vanlig JavaScript, og appen din oppdaterer seg perfekt. I alle fall så lenge du er inne i en .svelte fil.</p><p>Men beveger du deg utenfor de trygge rammene til Rich Harris’ kompilator, blir det fort mer utfordrende. Og da kan det være greit å ha noen litt kraftigere verktøy tilgjengelig — selv om de kanskje er hakket mer hårete å bruke.</p><p>I Svelte 5 kommer vi til å møte på “Runes”, som er et nytt konsept for å forenkle det å skrive reaktiv kode på tvers av store og mer avanserte applikasjoner, og ikke minst på tvers av både .svelte-filer og .js-filer.</p><p>Reaksjonene har vært litt delte, spesielt siden syntaksen er hakket verre enn den var, men om det skaper et bedre sluttprodukt, så er det nok verdt det for de fleste.</p><p>Les introduksjonsbloggposten her!</p><p><a href="https://svelte.dev/blog/runes">Introducing runes</a></p><h3>Next blir (enda) raskere</h3><p>Hver gang jeg ser en oppdatering av Next, så er de alltid raskere. Og sånn uforholdsmessig mye raskere. 40 % raskere her, 100 % raskere der, og halvparten så mye minnebruk liksom. Hvor raskt kan det bli?!</p><p>Next.js kom ut med en ny minor-versjon — 13.5. Og også denne gangen ble det noen enorme forbedringer. 22 % raskere startuptid lokalt, 29 % raskere hot module reloading, 40 % mindre minnebruk og – min favoritt – “over 438 bugs patched!”. Så… 439 bugs patched da, I guess?</p><p>Men selv om jeg peker nese, er det utrolig motiverende å se teamet bak Next.js fortsette å forbedre både ytelse, utvikleropplevelse og alt annet rundt rammeverket. Det er ikke en jobb som gjør seg selv, og de fortjener massiv kudos for arbeidet som gjøres 🙌</p><h4>Next.js Conf</h4><p>Om du jobber med Next.js (eller har lyst til å lære deg det), kan jeg anbefale å bli med på gratis-konferansen deres – Next.js Conf — som går av stabelen (i San Francisco og online) 26. oktober. Du kan få <a href="https://nextjs.org/conf">en gratisbillett her</a>.</p><h3>RFC for API routes i Expo</h3><p>For de av dere som jobber med kryss-plattform apputvikler, så kom det også et litt spennende nytt forslag i Expo-verdenen sist uke.</p><p>Expo er et slags rammeverk som sitter på toppen av React Native, og tilbyr en rekke snasne APIer og tjenester. De har blant annet laget sin egen router – Expo Router – som fungerer ganske bra. Ulempen er selvfølgelig, som med alle rammeverk, at du binder deg ganske til masta.</p><p>Forslaget jeg nevnte innledningsvis introduserer en måte for mobilutviklere å lage enkle API-endepunkter, der de kan gjøre sikre kall mot autentiserte tjenester. Det høres jo egentlig ut som en drøm – og er definitivt en av de produktivitetsboosterne jeg elsker mest med fullstack-utvikling i Remix og Next.js.</p><p>Når alt det er sagt — forslaget er fortsatt et forslag, og det er nok en stund til det er å se ute i produksjon. Men jeg lover å teste det ut så snart jeg kan!</p><p>Det var det for denne uken. Ikke så mange saker som beveget seg kanskje, der det definitivt mest spennende var Sveltes nye runer. Vi får ønske dem lykke til, og håpe på en ellers produktiv frontend-uke. Sees!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=921a6d11de03" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/forrigeuke-uke-38-2023-921a6d11de03">ForrigeUke (uke 38, 2023)</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ForrigeUke (uke 24, 2023)]]></title>
            <link>https://blogg.bekk.no/forrigeuke-uke-24-2023-a5b4dcd94bdd?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/a5b4dcd94bdd</guid>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[forrigeuke]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 20 Jun 2023 05:03:03 GMT</pubDate>
            <atom:updated>2023-07-03T17:30:02.429Z</atom:updated>
            <content:encoded><![CDATA[<h3>&lt;ForrigeUke uke=”24” år=”2023” /&gt;</h3><p>Dette var uken jeg løste <a href="https://twitter.com/selbekk/status/1665665262320844805">produktivitet for utviklere</a> 📈, nye <a href="https://twitter.com/b_e_n_t_e_n/status/1669885509919997952">lekkasjer fra Next 14</a> 🙈 og Dan Abramov <a href="https://twitter.com/dan_abramov/status/1670874621518700544">kaster brannfakler</a> 🔥. Og 242 023 ting skjedde i frontend-verdenen!</p><blockquote><em>&lt;ForrigeUke /&gt; er en artikkelserie som oppsummerer hva som skjedde i frontend-verden i uken som var.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XSVrKj48AeaCqb8_" /><figcaption>Snart sommer! Bilde av <a href="https://unsplash.com/@jamie452?utm_source=medium&amp;utm_medium=referral">Jamie Street</a> på <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h3>Hils på Panda CSS 🐼</h3><p>Jeg har alltid vært fan av Chakra UI. Det er enkelt å komme i gang med, har de fleste komponentene du trenger, og er enkelt å tilpasse via temaer og fargemoduser. Men det har noen nedsider. Det er stort og tungt, det avhenger av Emotion (som er litt gammeldags, er det ikke?) og ikke minst — fungerer skikkelig dårlig med React Server Components.</p><p>Så hvorfor liker jeg det fortsatt? Vel, mens vi har sittet her og klaget, har Chakra-sjef og gladfis Segun Adebayo brettet opp ermene for å lage noe som fungerer mye, mye bedre.</p><p>Panda CSS er et CSS-in-JS-rammeverk som genererer statiske stiler build-time – så det ikke trenger å sende en full CSS-in-JS-motor til klientene. Du kan fortsatt bruke såkalte style props (&lt;Box marginTop={2} /&gt; for eksempel), og skrive koden din som du gjør i Chakra UI. Du får riktignok ingen ferdige komponenter ut av boksen med Panda, men det gjør det enkelt nok å style dine egne.</p><p>Segun har også nevnt at det er på planen for Chakra UI å migrere over til Panda CSS, slik at du kan bruke Chakra i applikasjoner som bruker React Server Components.</p><p>Alt er åpenbart ganske nytt og ikke klart for å skrive om appen din i enda, men det virker som en veldig fin løsning for en vanskelig teknisk utfordring. Les mer på hjemmesiden deres!</p><p><a href="https://panda-css.com/">Panda CSS - Build modern websites using build time and type-safe CSS-in-JS</a></p><h3>Vercel slipper ny AI SDK og template 🤖</h3><p>Okei, jeg vet vi holder oss unna AI-ting her i ForrigeUke, men denne var såpass interessant at jeg snikern inn allikevel.</p><p>Vår alles favoritt-trekantselskap Vercel har nemlig sluppet en snasen liten SDK, som gjør det helt fantastisk enkelt å lage chat-baserte AI-applikasjoner i nettleseren.</p><p>Dette kan være grunnlaget for mang en morsom POC på landets mange kontorer, og som kan hjelpe med å løse faktiske brukerbehov på null komma niks.</p><p><a href="https://vercel.com/blog/introducing-the-vercel-ai-sdk">Introducing the Vercel AI SDK: npm i ai - Vercel</a></p><p>Du kan tilogmed streame responsen, som gjør det å lage en ChatGPT klone til, om ikke en lek, et ikke like skummelt eksperiment som man skulle tro.</p><p>Sjekk ut eksempel-appen deres her:</p><p><a href="https://t.co/1I28NR8af3">Next.js AI Chatbot</a></p><h3>Lag dybdebaserte blur-effekter med CSS</h3><p>Shu på Next.js teamet er ikke bare en rakker på React-greier — han kan også en ting eller tretten om CSS.</p><p>Forrige uke så delte han nemlig en skikkelig kul demo der han viser frem hvordan man kan lage en dybdebasert blur-effekt med ren CSS, og hvor kult det kan se ut:</p><h3>Shu on Twitter: &quot;Depth-based blur in CSS.https://t.co/kB7gFdbh5k (Chrome preferred) pic.twitter.com/W3RPVgh799 / Twitter&quot;</h3><p>Depth-based blur in CSS.https://t.co/kB7gFdbh5k (Chrome preferred) pic.twitter.com/W3RPVgh799</p><p>Jeg er litt usikker på hva man skulle brukt det til, men jeg tipper det trigger noen kreative idéer rundt om hos folk.</p><h3>MDX ute i versjon 2.0</h3><p>Hvis du har skrevet en React-basert blogg de siste par årene, har du kanskje vært borti MDX. MDX er en extension til Markdown-formatet, som lar deg skrive JSX for å rendre forskjellige komponenter mellom det vanlige innholdet.</p><p>MDX har vært utrolig nyttig for veldig mange, og i forrige uke kom det nemlig en helt ny major versjon, som inneholder en rekke nye features, raskere kompilering, mindre bundle size og full React Server Components-støtte. Også er alt TypeScript da!</p><p>Les mer om den nye major-versjonen og hva den inkluderer her:</p><p><a href="https://mdxjs.com/blog/v2/">MDX 2 | MDX</a></p><p>Og det var det vi kom over denne uken! Ikke dårlig bare det, gitt at hele Reddit var nede denne uken! Tusen takk for at du tok turen innom, og velkommen tilbake neste uke ❤</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a5b4dcd94bdd" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/forrigeuke-uke-24-2023-a5b4dcd94bdd">ForrigeUke (uke 24, 2023)</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ForrigeUke (uke 18, 2023)]]></title>
            <link>https://blogg.bekk.no/forrigeuke-uke-18-2023-45b073a306e2?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/45b073a306e2</guid>
            <category><![CDATA[forrigeuke]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 09 May 2023 05:01:21 GMT</pubDate>
            <atom:updated>2023-05-09T05:01:21.715Z</atom:updated>
            <content:encoded><![CDATA[<h3>&lt;ForrigeUke uke=”18” år=”2023” /&gt;</h3><p>Dette var uken for litt <a href="https://twitter.com/theShaneLevine/status/1654496703934857218">lettvekts trolling</a> 🧌 , <a href="https://twitter.com/dan_abramov/status/1654972762643918850">ny innsikt</a> 🤯 og en god <a href="https://www.instagram.com/p/CoAmZqvj5l2/">gammeldags prank</a> 🌭. Og gjett hvem som oppsummerer frontend-verden denne uka! 🧓</p><blockquote>&lt;ForrigeUke /&gt; er en artikkelserie som oppsummerer hva som skjedde i frontend-verden i uken som var.</blockquote><h3>CSS Zen Garden fyller 20 år!</h3><p>Jeg vet ikke hvordan dere startet deres karrierer som frontend-utviklere, men jeg husker fortsatt første gang jeg snublet over den nå ganske sagnomsuste nettsiden CSS Zen Garden for mange (mange!) år siden. For de som ikke kjenner til denne siden, så er det en standardisert bit med HTML, med noen klassenavn på, som forskjellige folk har fått til å se helt forskjellig ut <em>kun</em> med CSS.</p><p>Jeg ble så fascinert av mulighetene man hadde, at jeg satt meg ned og nileste alt jeg kunne komme over av CSS-litteratur i år fremover. Jeg var riktignok ganske tidlig i tenåra, så noen imponerende kloner ble det ikke – men det førte til en kjærlighet jeg har til CSS den dag i dag.</p><p>Om du ikke har vært innom denne rolige internetthagen før, anbefaler jeg at du tar et besøk, og klikker deg rundt til et par eksempler. La deg inspirere. La deg imponere. Og lag din egen, bare for moro skyld. Tipper det er gøyere uten å bruke tabeller til layout, som jeg gjorde 🙈</p><p><a href="http://csszengarden.com/">CSS Zen Garden</a></p><h3>Next.js 13.4 er ute!</h3><p>Manges React-rammeverk numero uno – Next.js – er ute med en ny minor-versjon, med relativt major endringer!</p><p>For det første er deres nye måte å strukturere sider på – “app”-mappa – ute av beta, og nå den anbefalte måten å lage sider på. Det høres kanskje ikke så veldig spennende ut, men det er et ganske stort paradigmeskifte – både for Next.js og React.</p><p>App-mappa til Next.js lar deg nemlig ta i bruk såkalte “server components” – komponenter som bare kjører på server-siden. Det gjør at du ikke trenger å sende hele markdown-parsing biblioteket eller tekster for alle språk til klienten – du sender i stor grad bare ferdig-rendret HTML som vises til brukeren raskere enn noen gang før.</p><p>For å deale med endringer, har Next også laget støtte for noe de kaller “Server Actions” – en litt ny og forbedret måte å deale med skjema-innsending på. Det har også endt opp med å være ganske interessant, både fra et Next-perspektiv og <a href="https://twitter.com/dan_abramov/status/1654490981977210884">fra et React perspektiv</a>. Disse kommer nemlig til selv klientside-apper!</p><p>Om du er interessert i dette, så vil jeg anbefale å ta en titt på den offisielle release-posten deres – dette er skikkelig spennende teknologi og gøyale fremskritt for både oss utviklere og sluttbrukeropplevelsen.</p><p><a href="https://nextjs.org/blog/next-13-4#server-actions-alpha">Next.js 13.4</a></p><h3>Vercel får støtte for KV-stores og Postgres 🤯</h3><p>Som om det ikke var nok moro fra Vercel i det siste, har de også lansert et par nye tjenester jeg ser for meg kan være veldig nyttige – både for mindre prosjekter og mange større bedrifter.</p><p>Nå får man nemlig støtte for både key-value stores (les Redis) og PostgreSQL, distribuert ut til der brukerne dine sitter. Det betyr latterlig lav latency, og ikke minst en veldig mye bedre brukeropplevelse. Se bare hvordan det anbefales at man skriver koden sin fremover:</p><pre>import { sql } from &#39;@vercel/postgres&#39;;<br><br>export default async function UserPage(props) {<br>  const { rows } = await sql`SELECT * FROM users WHERE id ${props.params.id}`;<br>  return &lt;h1&gt;Hei hei, {rows[0].name}&lt;/h1&gt;;<br>}</pre><p>Dette er ganske kult, spesielt siden det også sikrer oss mot SQL-injection angrep og en rekke andre ulumskheter.</p><p>Gleder meg til å teste ut dette ved neste anledning. Selv om det muligens gir litt <a href="https://twitter.com/aschmelyun/status/1654450114885308417">PHP-vibber</a> for noen 😁</p><ul><li><a href="https://vercel.com/storage/postgres">Vercel Postgres: Scalable SQL for the web - Vercel</a></li><li><a href="https://vercel.com/storage/kv">Vercel KV: Now in the Vercel dashboard - Vercel</a></li></ul><h3>RemixConf!</h3><p>Egentlig ikke en ForrigeUke-post verdig kanskje, for dette skjer denne uken – i dag og i morgen – men jeg gleder meg såpass mye til denne eventen at jeg ikke klarer å vente til neste uke.</p><p>Remix har lenge vært en reell utfordrer til hegemoniet Next.js har hatt på React-rammeverksfronten, og det lages stadig flere sider med hva jeg liker å kalle mitt goto-rammeverk. Men den siste tiden har det vært relativt stille fra gjengen bak – noe som jeg håper kan være en slags stillhet før stormen av nyheter.</p><p>For hva slags svar har Remix-gjengen til alle de nyhetene Vercel og gjengen har sluppet i det siste? Kommer vi til å se støtte for Server Components? Server Actions? Eller noe av det andre React-gjengen har kjørt på med i det siste?</p><p>Stemningen er til å ta og føle på, og jeg kommer i alle fal til å sitte spikra foran skjermen for å følge med i morgen. Det kan du også, tipper jeg, selv om de ikke har sagt eksplisitt at noe skal streames. I alle fall verdt å følge med på.</p><p><a href="https://remix.run/conf/2023">Remix Conf - May 2023</a></p><h3>React Aria Components får litt traction!</h3><p>De som kjenner meg vet at jeg er litt over snittet glad i designsystemer. Jeg bruker hverdagene mine på å hjelpe Vy sette sammen sitt, og har vært med på å lage en god del forskjellige designsystemer og komponentbiblioteker opp gjennom.</p><p>Derfor er jeg så glad for å se Adobes React Aria Components-bibliotek få mer traction – både i <a href="https://tldr.tech/">TL;DR-nyhetsbrevet</a> og på <a href="https://news.ycombinator.com/item?id=35848421">HackerNews</a>. Vi nevnte det for et <a href="https://blogg.bekk.no/forrigeuke-uke-14-2023-978aa7dda4f4">par uker siden</a>, men om du gikk glipp av det da, så er dette biblioteket et sett med ustylede React-komponenter som lar deg lage alle de tingene som er vanskelig å lage med ren HTML. Vi snakker combobokser, autosuggests og datepickers, for å nevne noen.</p><p>Før måtte man skru sammen disse komponentene selv, med hooks fra react-aria-biblioteket, men nå kan man spare seg ganske mye arbeid ved å bare bruke dette biblioteket ut av boksen. Og med den evig økende populariteten til Tailwind, kan det hende at biblioteker som Chakra UI og Material UI kanskje kan få en reell utfordrer i det spacet.</p><p>Det var det viktigste som skjedde i frontend-verdenen min denne uka i alle fall. Og selv om både <a href="https://blog.angular.io/angular-v16-is-here-4d7a28ec680d">Angular droppet en ny (visstnok veldig mye bedre) versjon</a>, og <a href="https://www.builder.io/blog/qwik-v1">Quik kom ut i v1.0</a>, så tror jeg det får være for de spesielt interesserte.</p><p>Det er en fin tid å være glad i frontend i alle fall. Det er det.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45b073a306e2" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/forrigeuke-uke-18-2023-45b073a306e2">ForrigeUke (uke 18, 2023)</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Lag ditt eget typesikre oversettelsesbibliotek!]]></title>
            <link>https://blogg.bekk.no/lag-ditt-eget-typesikre-oversettelsesbibliotek-54f066348540?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/54f066348540</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[i18n]]></category>
            <category><![CDATA[typescript]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 21 Mar 2023 06:02:08 GMT</pubDate>
            <atom:updated>2023-03-21T08:15:12.572Z</atom:updated>
            <content:encoded><![CDATA[<p>Når du skal oversette nettsiden din fra ett språk til et annet i JavaScript-apper, så blir man møtt med en rekke forskjellige biblioteker. Men hvem av dem skal man velge? Og trenger man egentlig et bibliotek i det hele tatt?</p><p>Denne artikkelen viser deg hvordan du kan lage et enkelt typesikkert oversettelsesverktøy for React på noen få linjer kode, uten at du trenger å dra inn noen eksterne avhengigheter. Og så lærer du kanskje litt om TypeScript underveis.</p><figure><img alt="En mann som sitter og oversetter en tekst på en tablet på en klippe foran et stormfullt hav" src="https://cdn-images-1.medium.com/max/640/1*KnF4leRGV8Tz8M27d7qhaQ.png" /></figure><h3>Steg 0: Lag en slagplan</h3><p>Før man begynner på et slikt lite prosjekt, så kan det være greit å tenke seg litt om hva det innebærer. I vårt tilfelle er TODO-listen slik:</p><ul><li>Bestemme hvordan bruken skal se ut</li><li>Definér hvilke språk vi skal støtte</li><li>Lage en måte å oversette tekst på</li><li>Legge til støtte for dynamiske tekster og nøstede objekter</li><li>Lage typer som gjør at vi ikke kan skrive noe feil.</li></ul><p>Med den oversikten på plass, kan vi hoppe inn i å lage ting!</p><h3>Steg 1: Bestemme hvordan bruken skal se ut</h3><p>Det finnes mange måter å designe hvordan et oversettelsesverktøy skal brukes på. Jeg lener meg på mitt favoritt-bibliotek fra et tidligere Bekk-oppdrag, nemlig Leiles <a href="https://github.com/leile/lobo-t">lobo-t</a>. Der ser bruken sånn ca slik ut:</p><pre>const Eksempel = (props) =&gt; {<br>  const { t } = useTranslation();<br>  return &lt;p&gt;{t(texts.example)}&lt;/p&gt;<br>};<br>const texts = {<br>  example: {<br>    no: &#39;Eksempel&#39;,<br>    en: &#39;Example&#39;,<br>  }<br>};</pre><p>Man henter ut en funksjon t fra en hook vi kaller useTranslation , også sender man inn et objekt med de forskjellige språkene for en gitt tekstnøkkel.</p><blockquote>I tillegg til denne funksjonaliteten, bør man også ha en måte å endre språk på (det kommer vi tilbake til senere).</blockquote><p>Det er to fordeler med dette API-designet slik jeg ser det:</p><ol><li>Man får typesikre tekster med auto-complete og hele smæla ut av boksen</li><li>Man kan samlokalisere tekstene sammen med koden som rendrer dem</li></ol><p>Det er én ulempe også, og det er at man må laste inn tekstene for alle språkene man skal støtte på hver side. Det har ikke vært en utfordring jeg har vært borti enda, men det kan være greit å være klar over.</p><h3>Steg 2: Definere hvilke språk vi skal støtte</h3><p>Språkene du skal støtte er typisk ikke en veldig dynamisk ting akkurat, så la oss bare hardkode dem inn i dette biblioteket, med en enum!</p><pre>enum Language {<br>  English = &quot;en&quot;,<br>  Norwegian = &quot;no&quot;,<br>}</pre><p>Verre var det ikke egentlig. Du kan også bruke en vanlig const om du ikke liker enums, da.</p><p>Ah, jeg elsker korte steg.</p><h3>Steg 3: Lage en måte å oversette tekst på</h3><p>Nå er det på tide at vi får dette til å fungere. APIet vårt går ut på å ha en hook som heter useTranslation , så da kan vi jo begynne med å lage den.</p><pre>function useTranslation() {<br>  const currentLanguage = getLanguageFromSomewhere();<br>  return {<br>    t: (translationObject) =&gt; translationObject[currentLanguage]<br>  };<br>}</pre><p>Vi henter språket fra ett eller annet sted, og returnerer en funksjon t , som rett og slett bare velger ut riktig språknøkkel for oss. Ganske grei skuring.</p><p>Men hvor får vi dette språket fra? Det finnes forskjellige løsninger for forskjellige rammeverk, men ett som fungerer overalt er å lagre valgt språket i en eller annen tilstand, og tilgjengeliggjøre det gjennom en context. Slik kan det se ut:</p><pre>const TranslationContext = createContext();<br>const TranslationProvider = (props) =&gt; {<br>  const currentLanguageState = useState&lt;Language&gt;(props.defaultLanguage);<br>  return (<br>    &lt;TranslationContext.Provider <br>      value={currentLanguageState}<br>    &gt;<br>      {props.children}<br>    &lt;/TranslationContext.Provider&gt;<br>  );<br>}<br>const useTranslationContext = () =&gt; useContext(TranslationContext);</pre><p>Så wrapper man appen sin i TranslationProvider-en, sender inn et default-språk, og oppdaterer useTranslation -koden sin:</p><pre>function useTranslation() {<br>  const [currentLanguage, changeLanguage] = useTranslationContext();<br>  return {<br>    t: (translationObject) =&gt; translationObject[currentLanguage],<br>    changeLanguage,<br>  };<br>}</pre><p>Vips, så har man et fungerende oversettelsesrammeverk.</p><h3>Steg 4.1: Legge til støtte for dynamiske tekster</h3><p>En feature du mest sannsynlig kommer til å ønske deg ganske raskt er dynamiske tekster – tekster som kan ta imot argumenter!</p><p>Slik kan de se ut:</p><pre>const texts = {<br>  greeting: (name, age) =&gt; ({<br>    no: `Hei ${name}, den ${age} år gamle magikeren`,<br>    en: `Hello ${name}, the ${age} old magician`<br>  })<br>}</pre><p>Dette fungerer faktisk rett ut av boksen allerede!</p><pre>const Eksempel = ({ name, age }) =&gt; {<br>  const { t } = useTranslation()<br>  return &lt;p&gt;{t(texts.greeting(name, age))}&lt;/p&gt;<br>}</pre><p>Nok en lett seksjon å fullføre, med andre ord.</p><h3>Steg 4.2: Legge til støtte for inline JSX</h3><p>Okei jeg skal ikke kaste bort tiden din. Dette funker også rett ut av boksen. Til og med med dynamiske tekster, om du vil gå helt amok.</p><p>Her er et enkelt eksempel på hvordan det kan se ut.</p><pre>const texts = {<br>  eksempel: {<br>    no: &lt;&gt;&lt;strong&gt;Gratulerer!&lt;strong&gt; Dette er gøy.&lt;/&gt;,<br>    en: &lt;&gt;&lt;strong&gt;Congrats!&lt;strong&gt; This is fun.&lt;/&gt;,<br>  }<br>}</pre><p>Bare husk å ikke gå helt amok med inline JSX-en — du vil ikke at texts-objektene dine skal bli altfor store heller 🤔</p><h3>Steg 5: Legge til typer for en enda sikrere hverdag.</h3><p>Nå har vi noe som fungerer sånn tålelig bra. Men det er fortsatt enkelt å skyte seg i foten! Vi har ikke brukt noe særlig typesikring enda, så det er kanskje ikke så rart. Heldigvis er det neste post på programmet!</p><p>Først, så tenker jeg vi kan definere hvordan et av disse objektene med oversettelser kan se ut. Det er et objekt med forskjellige språk-nøkler (en, no osv) som nøkler, og tekst som returverdi.</p><pre>type TranslationObject = { [key in Language]: string | ReactNode }</pre><p>Men så må vi huske at vi kunne sende inn en funksjon også (for disse dynamiske tekstene). Den typen ser slik ut:</p><pre>type TranslationFunction = (...args: (string | number)[]) =&gt; TranslationObject</pre><p>For å gi en god type til texts -objektet vi plasserer alle tekstene våre i, kan vi da kombinere litt:</p><pre>type Translations = Record&lt;string, TranslationObject | TranslationFunction&gt;<br>// evnt<br>type Translations = {<br>  [key: string]: TranslationObject | TranslationFunction<br>}</pre><p><strong>Bonus: </strong>Om du vil kunne lage litt dypt nøstede objekter av disse texts-objektene vi lager, kan du bruke noe som høres skumlere ut enn det er — rekursjon!</p><pre>type Translations = {<br>  [key: string]: TranslationObject | TranslationFunction | Translations<br>}</pre><p>En type som refererer til seg selv? Det hørtes skummelt ut! 🤯 Men det eneste det muliggjør er at man kan lage ting som dette:</p><pre>const texts: Translations = {<br>  meta: {<br>    title: { no: &#39;Min side&#39;, en: &#39;My page&#39; },<br>    description: { no: &#39;En side om meg&#39;, en: &#39;A page about me&#39; },<br>  },<br>  hero: { no: &#39;Dette er min side&#39;, en: &#39;This is my page&#39; },<br>}</pre><p><strong>Bonus 2:</strong> Selv om den castingen over fungerer finfint, så er jeg ikke så fan av syntaksen. Derfor lager jeg heller min egen funksjon — createTexts — som gjør den for meg. Den ser slik ut:</p><pre>export function createTexts&lt;T extends Translations&gt;(texts: T) {<br>  return texts;<br>}</pre><p>Helt til slutt må vi også huske på å oppdatere signaturen til t -funksjonen vår:</p><pre>t: (translations: TranslationObject) =&gt; translations[language] as string,</pre><p>Merk at vi type-caster returverdien til å være string . Det stemmer jo strengt talt ikke – vi kan få tilbake JSX også. Men siden man typisk returnerer strenger, og strenger er gyldig JSX, så fungerer dette overraskende fint.</p><p>Her kan du se en demo. All koden vi har skrevet ligger i i18n.tsx -fila,og hvordan man bruker det ligger i index.tsx og app.tsx .</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fred-lake-y77wvy%3Ffile%3D%2Fsrc%2FApp.tsx&amp;display_name=CodeSandbox&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fy77wvy&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fy77wvy%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/3d990add286d1a70aa0763b650e7ecf6/href">https://medium.com/media/3d990add286d1a70aa0763b650e7ecf6/href</a></iframe><h3>Veien fremover</h3><p>Det å lage oversettelsesverktøy er en komplisert oppgave, og det er mange features her som jeg har droppet for enkelhetens skyld. Men det er heldigvis ikke så mange du trenger å skrive selv.</p><p>Formattering av tid, datoer, tall, lister og en haug andre ting får du fra <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl">Intl -pakken</a> til moderne nettlesere. Hva man før brukte et titalls biblioteker til er nå bygget inn i plattformen! 💪</p><p>Og da er det kanskje ikke noe vits i å ha en egen pakke for å oversette tekster. Spesielt når det er så gøy å skrive selv!</p><p>Jeg håper du har likt denne artikkelen, og at den inspirerer deg til å gjøre noe lignende på ditt egne prosjekt en dag. Om du har noen spørsmål håper jeg du tar kontakt, så skal jeg svare så godt jeg kan.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=54f066348540" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/lag-ditt-eget-typesikre-oversettelsesbibliotek-54f066348540">Lag ditt eget typesikre oversettelsesbibliotek!</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[En enkel intro til landemerker i HTML]]></title>
            <link>https://blogg.bekk.no/en-enkel-intro-til-landemerker-i-html-2271c42cb1f8?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/2271c42cb1f8</guid>
            <category><![CDATA[universell-utforming]]></category>
            <category><![CDATA[html]]></category>
            <category><![CDATA[landemerker]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Tue, 14 Mar 2023 20:54:06 GMT</pubDate>
            <atom:updated>2023-03-14T20:54:06.491Z</atom:updated>
            <content:encoded><![CDATA[<p>Har du også skrevet en webside eller webapplikasjon, og tenkt å gjøre den så enkel å bruke for skjermlesere eller annen assisterende teknologi som mulig? Da er det på tide at du lærer deg en ting eller to om landemerker i HTML!</p><p>Denne artikkelen gir deg en rask introduksjon til de hva landemerker i HTML er, hvilken rolle de spiller, og hva som skjer når du bruker dem.</p><figure><img alt="En slags organisk struktur i svart-hvitt." src="https://cdn-images-1.medium.com/max/832/1*lR6UU1NvwoW2xbJMAlhAbQ.png" /><figcaption>En naturlig struktur generert fra Midjourney. Men du kan få til en ganske naturlig struktur med HTML også!</figcaption></figure><h3>Hva er landemerker?</h3><p>I HTML er landemerker — i likhet med hva de er i den fysiske verden — noe man kan navigere etter i et ellers ukjent landskap. De gir deg noen faste holdepunkter til hva som ligger hvor på siden din, og gjør det enklere å komme seg dit.</p><p>Landemerker lager man med ganske vanlig HTML. Du har kanskje sett dem før — &lt;main&gt; , &lt;nav&gt; , &lt;footer&gt; , &lt;header&gt; og &lt;section&gt; er noen eksempler. Men når bør du bruke hvilke? Og hva er egentlig effekten av å bruke dem?</p><h3>Regioner og rotorer</h3><p>Det mest grunnleggende du kan gjøre for å forbedre sidestrukturen din er å strukturere innholdet ditt i relevante bolker. For en “vanlig” nettside kan det se slik ut:</p><pre>&lt;body&gt;<br>  &lt;header&gt;<br>    &lt;nav&gt;<br>      &lt;ul&gt;<br>        &lt;li&gt;&lt;a href=&quot;/meg&quot;&gt;Meg&lt;/a&gt;&lt;/li&gt;<br>        &lt;li&gt;&lt;a href=&quot;/arbeider&quot;&gt;Arbeider&lt;/a&gt;&lt;/li&gt;<br>      &lt;/ul&gt;<br>    &lt;/nav&gt;<br>  &lt;/header&gt;<br>  &lt;main&gt;<br>    &lt;section&gt;<br>      &lt;h1&gt;Velkommen til min nettside&lt;/h1&gt;<br>      &lt;a href=&quot;/meg&quot;&gt;Lær mer om meg&lt;/a&gt;<br>    &lt;/section&gt;<br>    &lt;section&gt;<br>      &lt;h2&gt;Arbeider&lt;/h2&gt;<br>      &lt;p&gt;Jeg har gjort mye spennende.&lt;/p&gt;<br>      &lt;a href=&quot;/arbeider&quot;&gt;Se arbeidene mine&lt;/a&gt;<br>    &lt;/section&gt;<br>  &lt;/main&gt;<br>  &lt;footer&gt;<br>    &lt;nav&gt;<br>      &lt;ul&gt;<br>        &lt;li&gt;&lt;a href=&quot;https://twitter.com/selbekk&quot;&gt;Si hei på Twitter&lt;/a&gt;&lt;/li&gt;<br>        &lt;li&gt;&lt;a href=&quot;mailto:kristofer.selbekk@bekk.no&quot;&gt;Send meg en epost&lt;/a&gt;&lt;/li&gt;<br>      &lt;/ul&gt;<br>    &lt;/nav&gt;<br>  &lt;/footer&gt;<br>&lt;/body&gt;</pre><p>Dette har to fordeler:</p><ol><li>Det er enklere å lese koden i forhold til om alt hadde vært &lt;div&gt; -tagger</li><li>Det gir nettleseren mulighet til å lage en mer informert struktur som assisterende teknologi kan bruke.</li></ol><p>Åpner du koden over i Firefox, og åpner “Accessibility”-fanen i utviklerverktøyene vil du få se følgende struktur (også kjent som “accessibility-tree”):</p><figure><img alt="Skjermdump fra Firefox sine utviklerverktøy. Her er det mange landemerker og seksjoner." src="https://cdn-images-1.medium.com/max/1024/1*BNu11VhoqLBJidBn_3xf2g.png" /></figure><p>Hadde du byttet ut alle de semantiske elementene med &lt;div&gt; -tagger ville du fått følgende struktur:</p><figure><img alt="skjermdump fra firefox sin accessibility-fane. ingen semantisk informasjon, ingen landemerker å navigere etter." src="https://cdn-images-1.medium.com/max/1024/1*2CsQ-IF7-qowogbRvwoZ3g.png" /></figure><p>Ikke den største forskjellen ved første blikk kanskje, men for skjermlesere er det natt og dag. Faktisk så stor forskjell at om du bruker den første versjonen (den med alle landemerkene), får du en helt ny seksjon i kontrollpanelet skjermleserne ofte kaller en “rotor” — verktøyet man bruker for å navigere nettsider.</p><figure><img alt="Rotoren til VoiceOver på mac, med overskriften “Landmarks”, og en navigerbar liste over alle de forskjellige landemerkene." src="https://cdn-images-1.medium.com/max/1024/1*eNnwFWHEHssfhLRm6P1meg.png" /></figure><p>Dette kan være utrolig nyttig for brukerne dine — plutselig trenger de ikke lenger utforske strukturen på siden din i blinde!</p><h3>Navngi landemerkene dine</h3><p>Selv om det vi fikk til over var en soleklar forbedring over det man ofte kaller “div-suppe”, kan vi forbedre dem litt til. Vi kan nemlig gi dem noen navn. Det kan vi gjøre med aria-label . Under har vi endret menykoden vår til å gi den et navn:</p><pre><br>&lt;header&gt;<br>  &lt;nav aria-label=&quot;Hovednavigasjon&quot;&gt;<br>    &lt;ul&gt;<br>      &lt;li&gt;&lt;a href=&quot;/meg&quot;&gt;Meg&lt;/a&gt;&lt;/li&gt;<br>      &lt;li&gt;&lt;a href=&quot;/arbeider&quot;&gt;Arbeider&lt;/a&gt;&lt;/li&gt;<br>    &lt;/ul&gt;<br>  &lt;/nav&gt;<br>&lt;/header&gt;</pre><p>Det ser straks bedre ut i rotoren:</p><figure><img alt="Samme skjermdump som over av VoiceOver-rotoren med landemerker, denne gangen med “Hovednavigasjon navigation” og “Kontaktlenker navigation” labels på de forskjellige navigasjonsregionene" src="https://cdn-images-1.medium.com/max/1024/1*ElbjuVxARZpYsDdnH8WI2g.png" /></figure><h3>Hvilke landemerker finnes?</h3><p>Det er en rekke forskjellige HTML-tags du kan bruke for å opprette landemerker:</p><ul><li>&lt;header&gt;</li><li>&lt;footer&gt;</li><li>&lt;main&gt;</li><li>&lt;nav&gt;</li><li>&lt;section&gt;</li><li>&lt;article&gt;</li><li>&lt;aside&gt;</li><li>&lt;form&gt;</li><li>&lt;input type=&quot;search&quot;&gt;</li></ul><p>De kan nøstes på forskjellige måter, for å bygge en dypere informasjonsstruktur. Her er et eksempel av en imaginær blogg jeg kodet opp:</p><figure><img alt="Skjermdump av landemerker-menyen i VoiceOver-rotoren. Den har følgende valg: banner, main, Blogg region, Regioner og rotorer article, Om artikkelen complementary, Min første bloggpost article" src="https://cdn-images-1.medium.com/max/1024/1*kVmyFHcqI6gXK7yK3ybECg.png" /></figure><p>Snakk om å skape en flott måte å navigere en side på! Her har du full oversikt over alt innhold, uten å ha tabbet deg så mye som en rad nedover sidestrukturen 💪</p><h3>Bruk landemerker for det de er verdt!</h3><p>Landemerker er webbens egne innebygde måte å navigere strukturert innhold på. Det gjør at du kan dele opp siden din i logiske seksjoner, som man kan bevege seg rundt i uten å kunne for mye om siden eller applikasjonen din fra før av.</p><p>Ikke er det mye arbeid heller. Bruk litt tid på å lære deg når du skal bruke de forskjellige landemerkene, sleng på relevante labels der de trengs, og ikke minst, sjekk hvordan det oppleves i en skjermleser!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2271c42cb1f8" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/en-enkel-intro-til-landemerker-i-html-2271c42cb1f8">En enkel intro til landemerker i HTML</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[En enkel guide til aria-live]]></title>
            <link>https://blogg.bekk.no/en-enkel-guide-til-aria-live-a3c1377f94ab?source=rss-87b006004f1c------2</link>
            <guid isPermaLink="false">https://medium.com/p/a3c1377f94ab</guid>
            <category><![CDATA[wcag]]></category>
            <category><![CDATA[frontend]]></category>
            <category><![CDATA[universell-utforming]]></category>
            <category><![CDATA[html]]></category>
            <dc:creator><![CDATA[Kristofer Giltvedt Selbekk]]></dc:creator>
            <pubDate>Sun, 05 Mar 2023 07:26:39 GMT</pubDate>
            <atom:updated>2023-03-05T07:26:39.804Z</atom:updated>
            <content:encoded><![CDATA[<p>Universell utforming er vanskelig — spesielt om du ikke vet hvordan du skal starte. Heldigvis er hver enkelt bit relativt rett frem.</p><p>Denne artikkelen tar for seg en veldig nyttig teknikk for interaktive nettapplikasjoner, nemlig aria-live -attributten i HTML. Husker du denne, er du langt på vei til å løse noen UU-utfordringer i koden din.</p><figure><img alt="Et svart-hvitt bilde av en artist på en scene, sett bakfra i siluett." src="https://cdn-images-1.medium.com/max/1000/0*RTlPMQzzbHs6D7af" /></figure><h3>Når trengs aria-live?</h3><p>Før vi dykker ned i hvordan aria-live -attributten fungerer, kan det være greit å vite i hvilke situasjoner den er nyttig.</p><p>I gamle dager, når man laget websider, var det meste innholdet statisk. Man trykket på lenker, og man ble sendt til nye sider. Man fylte ut skjemaer og sendte dem inn, og ble videresendt til nye sider. Kanskje den samme siden, med noen feilmeldinger på — men fortsatt via en ny sidelast. Dette fungerte jo greit nok, selv om det kanskje ikke var like interaktivt og responsivt som i dag.</p><p>Dagens nettløsninger er ofte modellert som applikasjoner, med mye interaktivitet bygget inn. Det er validering av skjemafelter mens du fyller dem ut, det er asynkron server-kommunikasjon, og det er generelt veldig mye som endrer seg uten noen form for navigasjon.</p><p>Hadde skjermleseren din lest opp alt som forandret seg til enhver tid, ville man nok opplevd det som slitsomt. Du er ikke så interessert i at produktkarusellen i bunnen av siden du er på roterte til neste produkt, for eksempel.</p><p>Det er allikevel tilfeller der du vil få beskjed om at noe har skjedd. Toast-meldinger som popper opp, nye chatmeldinger, og feilmeldinger når du fyller ut et skjema er bare noen eksempler der det kan være nyttig å få beskjed. Og det er nettopp i de tilfellene det er greit å vite om aria-live.</p><h3>Hvordan funker aria-live?</h3><p>Bruksområdet for aria-live er ganske greit – hvis du vil at en skjermleser skal lese opp at innhold endrer seg før man navigerer seg til det, trenger man å legge på en aria-live-attributt.</p><p>Her er et enkelt eksempel på hvordan det kan se ut:</p><pre>&lt;div aria-live=&quot;polite&quot;&gt;<br>  Klokka er 15:29<br>&lt;/div&gt;</pre><p>aria-live kan ha tre forskjellige verdier – off , polite og assertive , der off er default-verdien (samme som å ikke ha med aria-live i det hele tatt). Forskjellen på polite og assertive -verdiene er når endringen leses opp. aria-live=&quot;polite&quot; venter til skjermleseren er ferdig med å lese opp det den holdt på å lese opp, mens aria-live=&quot;assertive&quot; avbryter og leser opp endringen med en gang. Det anbefales å bruke polite i de fleste tilfeller, da assertive -versjonen ofte oppleves som masete og irriterende om den brukes for mye</p><h3>Hvordan oppleves aria-live?</h3><p>Her er et kodeeksempel på hvordan aria-live fungerer. Du kan slå på din egen skjermleser og høre hvordan det oppleves:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fepic-shape-h3f6fo%3Ffile%3D%2Fsrc%2FApp.js&amp;display_name=CodeSandbox&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fepic-shape-h3f6fo%3Ffile%3D%2Fsrc%2FApp.js&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fh3f6fo%2Fscreenshot.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/c951cb66be748f12fbb190ff6b94aadf/href">https://medium.com/media/c951cb66be748f12fbb190ff6b94aadf/href</a></iframe><p>Om du ikke har en tilgjengelig, så kan jeg forklare det med litt tekst.</p><p>Hadde man ikke hatt noen aria-live -attributt, ville opplevelsen vært slik:</p><blockquote>[skjermleser]: Knapp, “klikk da”<br>[meg]: &lt;klikk&gt;<br>[skjermleser]: …<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: …</blockquote><p>Om man legger til aria-live=”polite&quot;, så er opplevelsen ca slik:</p><blockquote>[skjermleser]: Knapp, “klikk da”<br>[meg]: &lt;klikk&gt;<br>[skjermleser]: 1<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: 2</blockquote><h3>Møt aria-atomic</h3><p>Som du kanskje la merke til, så leste skjermleseren bare opp selve tallet som endret seg. Noen ganger hadde det vært fint om den leste opp hele teksten i aria-live-regionen hver gang noe endret seg der inne — ikke bare det ordet eller tallet som endret seg!</p><p>Det kan man få til med attributten aria-atomic=”true&quot; . Om du legger til den, vil opplevelsen endre seg slik:</p><blockquote>[skjermleser]: Knapp, “klikk da”<br>[meg]: &lt;klikk&gt;<br>[skjermleser]: Du har klikket 1 ganger<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: Du har klikket 2 ganger</blockquote><p>Velger man å tilgi entall/flertallsfloken så er det en ganske mye mer snedig opplevelse. Det er ikke alltid man vil ha det slik – spesielt om det er mye innhold – men det kan være et greit triks å ha i baklomma.</p><h3>…og aria-relevant</h3><p>Ut av boksen så vil skjermlesere kun lese opp hva som legges til eller endres i en aria-live -region. Men av og til kan det hende man vil lese opp ting som fjernes også. Et eksempel kan være når man har en liste over brukere i en chat, der man vil få lest opp når noen fjernes fra lista.</p><p>aria-relevant lar deg spesifisere hvilke endringer som er relevante for skjermleseren å lese. Det finnes 3 forskjellige verdier – additions , removals og text . Om du vil ha alle tre kan du også bruke en fjerde verdi all . Om den ikke defineres så er defaulten additions text (jepp, man kan ha flere, fordelt med mellomrom).</p><p>Her er et eksempel der vi legger til en ekstra linje med tekst når man har trykket 3 ganger:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fcodesandbox.io%2Fembed%2Fcrazy-dijkstra-yp6s1h%3Ffile%3D%2Fsrc%2FApp.js&amp;display_name=CodeSandbox&amp;url=https%3A%2F%2Fcodesandbox.io%2Fs%2Fh3f6fo&amp;image=https%3A%2F%2Fcodesandbox.io%2Fapi%2Fv1%2Fsandboxes%2Fyp6s1h%2Fscreenshot.png&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=codesandbox" width="1000" height="500" frameborder="0" scrolling="no"><a href="https://medium.com/media/370e07f68094d5d603a660edbf3c73b2/href">https://medium.com/media/370e07f68094d5d603a660edbf3c73b2/href</a></iframe><p>Slik vil det høres ut:</p><blockquote>[skjermleser]: Knapp, “klikk da”<br>[meg]: &lt;klikk&gt;<br>[skjermleser]: Du har klikket 1 ganger<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: Du har klikket 2 ganger<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: Du har klikket 3 ganger. Alle gode ting er 3.<br>[meg]: &lt;klikk en gang til&gt;<br>[skjermleser]: Alle gode ting er 3. Du har klikket 3 ganger.</blockquote><p>Det er ganske imponerende hvor stor kontroll man kan ha over skjermleseropplevelsen med et par ekstra attributter!</p><h3>Implisitt live</h3><p>Det finnes endel “presets” i HTML-verden, som gir deg endel aria-attributter ut av boksen. &lt;header /&gt; -taggen har for eksempel role=&quot;header&quot; som en implisitt attributt, og &lt;input type=&quot;search&quot; /&gt;har role=”searchbox” . role -attributten fungerer også på samme måte — har også endel implisitte betydninger – spesielt for aria-live .</p><p>Bruker du for eksempel role=&quot;alert&quot; , vil du automatisk få aria-live=&quot;assertive&quot; uten å måtte spesifisere den. Bruker du role=&quot;status&quot; , får du aria-live=&quot;polite&quot; . Du finner en <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions#roles_with_implicit_live_region_attributes">komplett liste på MDN</a>.</p><h3>Praktiske eksempler</h3><p>Her er et par praktiske eksempler for hvordan man ville brukt aria-live:</p><h4>Skjemavalidering</h4><p>Når man lager skjemaer, har man som regel en eller annen type validering på innholdet. Og om man får en valideringsfeil, er det viktig at den leses opp. For å få til det, wrapper man input-feltet sitt i en &lt;div /&gt; med aria-live=&quot;polite&quot; :</p><pre>&lt;div aria-live=&quot;polite&quot;&gt;<br>  &lt;label for=&quot;username&quot;&gt;Brukernavn&lt;/label&gt;<br>  &lt;input id=&quot;username&quot; name=&quot;username&quot; /&gt;<br>  &lt;div id=&quot;error-username&quot;&gt;&lt;/div&gt;<br>&lt;/div&gt;</pre><p>Om man oppdaterer innholdet i #error-username med JavaScript, vil det nå bli lest opp, selv om man fortsatt har fokuset i input-feltet.</p><p>En annen måte å vise feilmeldinger i skjemaer på er en boks på toppen av skjemaet etter man har prøvd å sende det inn. Det kan også løses på samme vis — sleng på en aria-live=&quot;polite&quot; for å få den til å bli lest opp. aria-live bryr seg nemlig ikke om man har fokuset et helt annet sted på siden!</p><pre>&lt;form action=&quot;/api/login&quot; method=&quot;post&quot;&gt;<br>  &lt;div aria-live=&quot;polite&quot; id=&quot;error-summary&quot;&gt;&lt;/div&gt;<br>  &lt;div&gt;<br>    &lt;label for=&quot;username&quot;&gt;Brukernavn&lt;/label&gt;<br>    &lt;input id=&quot;username&quot; name=&quot;username&quot; /&gt;<br>  &lt;/div&gt;<br>  &lt;div&gt;<br>    &lt;label for=&quot;password&quot;&gt;Passord&lt;/label&gt;<br>    &lt;input id=&quot;password&quot; name=&quot;password&quot; type=&quot;password&quot; /&gt;<br>  &lt;/div&gt;<br>  &lt;button&gt;Logg inn&lt;/button&gt;<br>&lt;/form&gt;</pre><p>Som sist — endrer man #error-summary , blir det lest opp når skjermleseren er ferdig med å lese opp hva den holdt på med (mest sannsynlig navnet på knappen eller inputfeltet man hadde fokusert på.</p><h4>Toasts og meldinger</h4><p>Mange webapplikasjoner har implementert meldinger som dukker opp i noen sekunder, og forsvinner igjen. Det kan være greit å si ifra om til brukeren — og det med en gang.</p><p>I dette tilfellet trenger vi faktisk ikke å bruke aria-live direkte — vi kan heller bruke role=&quot;alert&quot; – som kommer med en implisitt aria-live=&quot;assertive&quot; , i tillegg til bedre generell tilrettelegging for skjermlesere.</p><pre>&lt;div id=&quot;toast&quot; role=&quot;alert&quot;&gt;&lt;/div&gt;</pre><p>Når denne fylles med innhold, avbrytes hva enn skjermleseren leser for øyeblikket til fordel for det som legges til i alert-boksen vår. Fokus forblir der brukeren var, og skjermleseren vil fortsette der den var, når alert-en er ferdig opplest.</p><h3>TL;DR:</h3><p>Om dette ble for mye informasjon å ta til seg på en gang, så husk i alle fall dette:</p><blockquote>Om du oppdaterer innhold på nettsiden din, som du vil at brukeren skal få med seg, må du wrappe det innholdet i en tag som har attributten aria-live=”polite”. Haster det, kan du bruke aria-live=”assertive”. Men det haster mest sannsynligvis ikke.</blockquote><p>MDN er som alltid en flott ressurs om du vil lese litt mer, eller sette deg mer inn i detaljene. Ta en titt på <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions#roles_with_implicit_live_region_attributes">denne siden for mer informasjon</a>.</p><p>Hvis du har noen spørsmål, eller har andre ting du vil legge til, så legg gjerne igjen en kommentar :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a3c1377f94ab" width="1" height="1" alt=""><hr><p><a href="https://blogg.bekk.no/en-enkel-guide-til-aria-live-a3c1377f94ab">En enkel guide til aria-live</a> was originally published in <a href="https://blogg.bekk.no/">Bekk</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>