<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>FF Blog</title>
      <link>https://fyksen.me</link>
      <description>En blogg av en far som bor i Oslo. For tiden skriver jeg mest om pappaperm, løping og datanerding.</description>
      <generator>Zola</generator>
      <language>no</language>
      <atom:link href="https://fyksen.me/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Fri, 10 Apr 2026 08:08:26 +0000</lastBuildDate>
      <item>
          <title>MinID som alternativ til BankID</title>
          <pubDate>Fri, 10 Apr 2026 08:08:26 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/minid-som-alternativ-til-bankid/</link>
          <guid>https://fyksen.me/minid-som-alternativ-til-bankid/</guid>
          <description xml:base="https://fyksen.me/minid-som-alternativ-til-bankid/">&lt;p&gt;Jeg ønsker å gjøre meg så fri fra proprietære løsninger som mulig. Og i den forbindelse prøver jeg å kvitte meg med alle apper på telefonen min som krever Google Play services. På sikt hadde det vært moro å bruke &lt;a rel=&quot;external&quot; href=&quot;https://postmarketos.org/&quot;&gt;PostmarketOS&lt;/a&gt; på telefonen til daglig.&lt;/p&gt;
&lt;h2 id=&quot;hva-er-forskjellen-pa-bankid-og-minid&quot;&gt;Hva er forskjellen på BankID og MinID&lt;/h2&gt;
&lt;p&gt;Begge tjenestene brukes til å logge inn på offentlige tjenester.&lt;/p&gt;
&lt;h3 id=&quot;eiere-og-driftes&quot;&gt;Eiere og driftes&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BankID eies av Vipps, som igjen eies av banker. DNB er største eier, og Sparebanken på en god andreplass.&lt;/li&gt;
&lt;li&gt;MinID er et produkt utviklet og forvaltet av &lt;a rel=&quot;external&quot; href=&quot;https://no.wikipedia.org/wiki/Digitaliseringsdirektoratet&quot;&gt;Digitaliseringsdirektoratet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ulikt-sikkerhetsniva&quot;&gt;Ulikt sikkerhetsnivå&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BankID støtter «høyt sikkerhetsnivå»&lt;/li&gt;
&lt;li&gt;MinID støtter bare «betydelig sikkerhetsnivå»&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Du kan lese litt mer om sikkerhetsnivåene på norge.no &lt;a rel=&quot;external&quot; href=&quot;https://www.norge.no/nb/ulike-innloggingsmetoder/46#toc-heading-h2-5&quot;&gt;sine sider&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;bankid-stotter-flere-nettsider&quot;&gt;BankID støtter flere nettsider&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;BankID støtter ID Porten, banktjenester, betalingstjenester og mange selskap bruker BankID som elektronisk signering av dokumenter etc.&lt;/li&gt;
&lt;li&gt;MinID støter kun ID Porten.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ID Porten er portalen man kan velge hvilken innloggingsmetode man ønsker å bruke for offentlige tjenester.&lt;/p&gt;
&lt;h2 id=&quot;hvorfor-vil-jeg-ha-minid&quot;&gt;Hvorfor vil jeg ha MinID&lt;/h2&gt;
&lt;p&gt;MinID støtter standard 2fa innlogging. Som betyr at jeg kan bruke mine foretrukne 2fa applikasjon &lt;a rel=&quot;external&quot; href=&quot;https://getaegis.app/&quot;&gt;Aegis Authenticator&lt;/a&gt;. Mulighet for å ta lokal backup av authentiseringsnøklene til et format som støttes i flere applikasjoner, og bruke tjenesten på enheter som ikke er Android og Apple telefoner er viktig for meg.&lt;/p&gt;
&lt;h2 id=&quot;hvordan-opprette-minid&quot;&gt;Hvordan opprette MinID&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bestill aktiveringskoder i posten fra &lt;a rel=&quot;external&quot; href=&quot;https://minid.no/&quot;&gt;minid.no&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Registrer koden du får på brev i posten på &lt;a rel=&quot;external&quot; href=&quot;https://registrer.minid.no/start?locale=nb&quot;&gt;registrer.minid.no&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Registrer telefonnummer, epost og fødselsnummer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Logg inn på &lt;a rel=&quot;external&quot; href=&quot;https://profil.minid.no/&quot;&gt;profil.minid.no&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Scroll ned til «To-faktor metoder», og velg «engangskode fra autentiserings-app». Herfra kan du legge til 2fa som hvilken som helst annen nettside.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2026/04/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Skjermbilde fra profil.minid.no&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dessverre finner jeg ikke noen måte og deaktivere SMS-koder som reserveløsning for tofaktor. Så man er ikke trygg fra &lt;a rel=&quot;external&quot; href=&quot;https://en.wikipedia.org/wiki/SIM_swap_attack&quot;&gt;SIM angrep&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Takk for at du kom til min TED talk, hade bra!&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Vi må rigge oss for alternativer</title>
          <pubDate>Fri, 06 Mar 2026 12:14:30 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/vi-ma-rigge-oss-for-alternativer/</link>
          <guid>https://fyksen.me/vi-ma-rigge-oss-for-alternativer/</guid>
          <description xml:base="https://fyksen.me/vi-ma-rigge-oss-for-alternativer/">&lt;p&gt;Android operativsystemet kjører på nesten alle smarttelefoner som ikke bruker Apples iOS. Android er åpen kildekode. Dessverre blir telefoner som kjører Android mer låst ned for hver dag som går. Utfordringene er mange, men de viktigste mener jeg er:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mobilprodusentene låser ned telefonen så man kan ikke installere alternative versjoner av Android på mobilene. (Hederlige unntak er Googles egen Pixel-serie, og Fairphone).&lt;/li&gt;
&lt;li&gt;Applikasjonsmakerne bruker tjenester som bare er tilgjengelig via Google Play services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Denne posten handler om sistnevnte. Google play services, og spesifikt hvilke tjenester jeg kunne ønske norske leverandører stoppet å bruke.&lt;/p&gt;
&lt;h2 id=&quot;pushvarsel&quot;&gt;Pushvarsel&lt;/h2&gt;
&lt;p&gt;De fleste av oss har et forhold til pushvarsel. Her er allikevel et kjapt forsøk på å forklare. La oss ta Vipps sin applikasjon som et eksempel. En venn sender deg penger, og du får et varsel på telefonen. Varselet ble sendt fra Vipps, via Google, og så til telefonen din.&lt;/p&gt;
&lt;p&gt;Grunnen til at varselet ikke går direkte fra Vipps sine servere og til din telefon, er for å spare prosessorkraft (og dermed også batteri). Ved å samle alle varselsendinger via en strøm, blir det færre oppkoblinger for telefonen.&lt;/p&gt;
&lt;p&gt;Det er to store problemer med at applikasjoner bruker Google Play Services for pushvarsler: Metadata og lock-in.&lt;/p&gt;
&lt;h3 id=&quot;google-mottar-masse-data&quot;&gt;Google mottar masse data&lt;/h3&gt;
&lt;p&gt;Google får mye data om din data fra pushvarsler.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvilken applikasjon som mottar pushvarselet.&lt;/li&gt;
&lt;li&gt;Når pushvarselet var sendt fra Vipps sine servere og mottatt på enheten.&lt;/li&gt;
&lt;li&gt;Hvilken google brukerkontor varselet ble sendt til.&lt;/li&gt;
&lt;li&gt;Innholdet i varselet (bare om applikasjonen ikke har satt opp kryptering).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I tillegg har det vist seg å være vanskelig for applikasjonsutviklere og holde tunga rett i munnen når de skal sende pushvarseler. I studien «&lt;a rel=&quot;external&quot; href=&quot;https://arxiv.org/html/2407.10589v1&quot;&gt;The Medium is the Message&lt;/a&gt;: How Secure Messaging Apps Leak Sensitive Data to Push Notification Services», kan man lese at av de 20 krypterte meldingsapplikasjoner som ble analysert, sendte 11 av de informasjon som kan brukes til å identifisere deg til Google.&lt;/p&gt;
&lt;p&gt;Om man ønsker å bruke en alternativ versjon av Android uten Google sine tjenester, fungerer ikke pushvarseler. I praksis betyr det at du ikke får varselet fra Vipps før du åpner appen.&lt;/p&gt;
&lt;h2 id=&quot;google-play-store&quot;&gt;Google Play Store&lt;/h2&gt;
&lt;p&gt;Android &lt;em&gt;kan&lt;/em&gt; installere applikasjoner fra mange steder. Man kan laste ned installasjonsfiler fra Internett, eller bruke alternative applikasjonsbutikker.&lt;/p&gt;
&lt;p&gt;Dessverre er Google Play Store det eneste stedet Vipps publiserer applikasjonen sin. For å bruke Google Play Store må man ha Google bruker, og en telefon med Google Play Services. Entusiaster kan laste ned applikasjonen fra alternative nettsider som republiserer applikasjoner fra Play Store. Men her er det vanskelig og vite om installasjonsfilene er tuklet med.&lt;/p&gt;
&lt;h3 id=&quot;play-integrity-api&quot;&gt;Play Integrity API&lt;/h3&gt;
&lt;p&gt;For mange er første gangen de hørte om Play integrity i kode 24. Her kunne man lese om hvordan «&lt;a rel=&quot;external&quot; href=&quot;https://www.kode24.no/artikkel/ikke-mulig-a-bruke-vipps-og-samtidig-vaere-fri-fra-amerikansk-big-tech/255391&quot;&gt;Ikke mulig å bruke Vipps og samtidig være fri fra amerikansk Big Tech&lt;/a&gt;», samt «&lt;a rel=&quot;external&quot; href=&quot;https://www.kode24.no/artikkel/dette-svarer-vipps-til-kommentaren-fra-robin-heggelund-hansen/255453&quot;&gt;Dette svarer Vipps til kommentaren fra Robin Heggelund Hansen&lt;/a&gt;». I praksis leverer Play integrity en tjeneste for utviklere til å sjekke om Google mener telefonen er trygg, og ikke tuklet med. Dette er uten tvil den største hindringer for entusiaster å komme seg rundt. Man kan lese &lt;a rel=&quot;external&quot; href=&quot;https://privsec.dev/posts/android/banking-applications-compatibility-with-grapheneos/#norway&quot;&gt;side opp&lt;/a&gt; og &lt;a rel=&quot;external&quot; href=&quot;https://www.diskusjon.no/topic/1942234-vil-bankid-vipps-osv-fungere-med-magisk-rooting-og-hide-root-detection/&quot;&gt;side ned&lt;/a&gt; om brukere som lurer på om Play integrity fungerer på deres alternative versjon av Android.&lt;/p&gt;
&lt;h2 id=&quot;alternativene-finnes&quot;&gt;Alternativene finnes&lt;/h2&gt;
&lt;p&gt;For pushvarsel bør applikasjoner bruke &lt;a rel=&quot;external&quot; href=&quot;https://unifiedpush.org/&quot;&gt;Unifiedpush&lt;/a&gt;. Unifiedpush er et desentralisert pushvarsel system som lar brukeren velge pushvarsel-leverandør. Det er utviklet for å være sikkert, fleksibelt og åpent. &lt;a rel=&quot;external&quot; href=&quot;https://unifiedpush.org/users/apps/&quot;&gt;Noen og tredve&lt;/a&gt; applikasjoner støtter allerede Unifiedpush. Om man installerer en applikasjon som støtter Unifiedpush på en telefon med kun Google Play Services, så vil push-varselet sendes via Google som vanlig. Dermed vil ikke den jevne brukeren merke at applikasjonen støtter Unifiedpush, og man ødelegger ingen brukeropplevelser.&lt;/p&gt;
&lt;p&gt;Et godt Google Play store alternativ er &lt;a rel=&quot;external&quot; href=&quot;https://f-droid.org/&quot;&gt;F-Droid&lt;/a&gt;. F-Droid er en applikasjonsbutikk som ut av boksen bare inneholder applikasjoner med åpen kildekode. Heldigvis støtter F-Droid alternative pakkearkiver. Vipps kunne publisert &lt;em&gt;apk-ene&lt;/em&gt; sine i et slik pakkearkiv. F-Droid har &lt;a rel=&quot;external&quot; href=&quot;https://f-droid.org/en/tutorials/create-repo/&quot;&gt;god dokumentasjon&lt;/a&gt; på hvordan Vipps selv kan ta kontroll på hele publikasjonskjeden. Det er ikke så vanskelig og se for seg en fremtid hvor Google sperrer Vipps ut av Google Play Service, om de blir en for stor konkurrent til Google egen «&lt;a rel=&quot;external&quot; href=&quot;https://wallet.google/&quot;&gt;Google Wallet&lt;/a&gt;», eller om de bryter med en av Google Play Services &lt;a rel=&quot;external&quot; href=&quot;https://play.google/developer-content-policy/&quot;&gt;diffuse regler&lt;/a&gt;. Selvfølgelig burde Vipps fortsette å publisere til Google Play butikken, samtidig som de publiserer til et F-Droid pakkearkiv.&lt;/p&gt;
&lt;p&gt;Så er vi på Play integrity, som Vipps selv mente var vanskelig og bytte ut. Her er jeg til dels enig. Vipps &lt;a rel=&quot;external&quot; href=&quot;https://www.kode24.no/artikkel/dette-svarer-vipps-til-kommentaren-fra-robin-heggelund-hansen/255453&quot;&gt;sier til kode24&lt;/a&gt; at de ikke &lt;em&gt;må&lt;/em&gt; bruke Play integrity, men «løsningen dekker en stor del av det vi må ivareta rundt integritet av både enhet og app. ... Jeg vil si at det som gjør det vanskelig å gjøre endringer her er vel så mye det rundt avtaler, dokumentasjonskrav og revisjoner, som det er den tekniske løsningen.». Siden jeg ikke har innsikt i hvilke forpliktelser Vipps har med betalingsleverandørene, så er det vanskelig og komme med et teknisk alternativ. &lt;a rel=&quot;external&quot; href=&quot;https://grapheneos.org/&quot;&gt;GrapheneOS&lt;/a&gt; (en distribusjon av Android med særlig fokus på sikkerhet) &lt;a rel=&quot;external&quot; href=&quot;https://grapheneos.org/articles/attestation-compatibility-guide&quot;&gt;peker på&lt;/a&gt; «standard Android hardware attestation API». Men skulle være papirmøllene til betalingsleverandørene som stopper bruk av alternative åpen Android, vil jeg oppfordre Vipps til å dele det offentlig, så man har mulighet til å legge press mot riktig instans.&lt;/p&gt;
&lt;h2 id=&quot;utfordringer-oppfordringer-og-drommer&quot;&gt;Utfordringer, oppfordringer og drømmer&lt;/h2&gt;
&lt;p&gt;Det er få som har blitt rike av å støtte åpne standarder. Det er dårlig butikk å bruke penger på å utvikle tjenester den gemene hop ikke bruker. I disse ulvetider mener jeg det allikevel er hensiktsmessig at applikasjoner fra det offentlige (og selskaper med særlig samfunnsansvar) støtter åpne standarder. Ikke bare kan innbyggere velge om de vil ha big tech i lomma, men vi gjør det også mulig for nye konkurrenter og innovere, uten å spille ball med Google og Apple. Og skulle det i fremtiden bli enda vanskeligere og samarbeide med USA, er det veldig kjekt og ha klar selvstendig infrastruktur.&lt;/p&gt;
&lt;p&gt;Så kjære mellomledere og utviklere av applikasjonene til Vipps, BankID, Ruter, Posten, MinID, Entur, Vy også videre. Prøv å ta grep for å gjøre det enklere å velge bort selskapene som logrer for monopol og diktatur. Kanskje applikasjonene deres til og med kan bli publisert som åpen kildekode? Bevegelsen &lt;a rel=&quot;external&quot; href=&quot;https://publiccode.eu/en/&quot;&gt;Public Money, Public Code&lt;/a&gt; begynner å bli store i Europe.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>En av tingene som er vanskelig med et føderert Internett</title>
          <pubDate>Mon, 26 Jan 2026 10:43:37 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/ting-som-er-v/</link>
          <guid>https://fyksen.me/ting-som-er-v/</guid>
          <description xml:base="https://fyksen.me/ting-som-er-v/">&lt;p&gt;Vi som jobber for et åpent Internet med klienter som snakker med hverandre på tvers av servere (føderert som epost, ikke som Signal eller facebook), opplever ofte at teknologien vår er upraktisk hva gjelder og finne gamle kjente, og verifisere at brukeren er den hen gir ser ut for å være.&lt;/p&gt;
&lt;p&gt;Et av ankerpunktene ved å bruke Matrix chat (eller Mastodon, ActivityPub), er at man ikke har den samme sentrale databasen med metadata om brukerne som f.eks Facebook eller Signal har.&lt;/p&gt;
&lt;h2 id=&quot;verifisering-til-besvaer&quot;&gt;Verifisering til besvær&lt;/h2&gt;
&lt;p&gt;Når du åpner Signal for første gang, får du spørsmål om du vil dele kontaktene dine med appen, for å se om noen av dine venner allerede er medlemmer. Signal kan være helt sikker på at tlf-nummeret mitt er 81549300, fordi jeg har bevist til Signal at jeg kan motta koden de sendte til nummeret. Men om Signal var satt sammen av tusenvis av servere (som Matrix er), så måtte hver enkel server sende en sms til meg med en enganskode. Det funker jo ikke i praksis. Det samme gjelder e-post.&lt;/p&gt;
&lt;p&gt;Om vi hardnakket vil fortsette å bruke tlf-nummer som identitet må vi ha felles identitetsservere vi stoler på. For eksempel kunne vi hatt &lt;code&gt;matrix-identiteter.no&lt;/code&gt; som en felles Norsk &lt;a rel=&quot;external&quot; href=&quot;https://github.com/element-hq/sydent&quot;&gt;Sydent&lt;/a&gt; server, hvor alle som vil kan spørre tjeneren om verifisering og oppslag. Dette har dessverre noen ulemper. De største er:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hvordan forsvarer man seg mot at en server ikke skraper kontaktdataene og sender spam?&lt;/li&gt;
&lt;li&gt;Hvordan får man folk til å villig dele ut kontaktdataene sine?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;et-bedre-alternativ&quot;&gt;Et bedre alternativ?&lt;/h2&gt;
&lt;p&gt;Personlig tror jeg telefonnummerets tid er talte. Jeg liker godt &lt;a rel=&quot;external&quot; href=&quot;https://joinmastodon.org/verification&quot;&gt;hvordan Mastodon har løst det&lt;/a&gt; hvor man kan verifisere at man eier en nettside ved å lenke til brukeren sin fra domenet. På &lt;a rel=&quot;external&quot; href=&quot;https://mastodon.fyksen.me/@fredrik&quot;&gt;min Mastodon profil&lt;/a&gt;, kan alle se at jeg har skrivetilgang til domenene fyksen.me og norge.chat. Og alle Mastodon servere kan sjekke dette, uten at vi trenger og stole på en felles database. Den store ulempen er selvfølgelig at ikke alle har domener eller websider, og at domenet ikke funker godt som oppslag. En venn har jo (dessverre) ikke lagret meg i kontaktlista med et eget notat som sier &quot;eier fyksen.me&quot;, som igjen kan brukes som reversert oppslag til min Mastodon konto.&lt;/p&gt;
&lt;p&gt;Dette er altså grunnen til at jeg ikke (enda?) har satt opp en felles Norsk Sydent server.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Energigel i Norge</title>
          <pubDate>Thu, 02 Oct 2025 08:14:17 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/energigel-i-norge/</link>
          <guid>https://fyksen.me/energigel-i-norge/</guid>
          <description xml:base="https://fyksen.me/energigel-i-norge/">&lt;p&gt;Det er ingen tvil om at det er mye markedsføring i gode gels. For produkter som i bestefall er sukker, fruktsukker, syltepulver og vann er det fryktelig mye «babl». For en liten stund siden begynte jeg å undersøke effekten av ernæring under trening, og det gikk opp for meg at det kanskje er litt og hente på å mer aggressivt fylle energilagrene underveis i treningen. Det var &lt;a rel=&quot;external&quot; href=&quot;https://www.youtube.com/watch?v=fXfoyz7N8EQ&amp;amp;t=418s&quot;&gt;denne videoen&lt;/a&gt; av Göran Winblad som sparket i gang dette.&lt;/p&gt;
&lt;p&gt;Jeg var klar over at tidlig påfylling av raske karbohydrater etter økter var gunstig for restitusjon. Det jeg ikke var klar over er at man i stor grad kan trene opp magen til å innta karbohydrat underveis i treningsøkter. Dette er viktig både for lange konkurranser, men ikke minst for å kunne restituere fortere fra-, og tåle mer trening.&lt;/p&gt;
&lt;p&gt;En annen ting jeg ikke var klar over, var at magen klarer og ta opp mer karbohydrat om fyller på med både &lt;a rel=&quot;external&quot; href=&quot;https://no.wikipedia.org/wiki/Glukose&quot;&gt;glukose&lt;/a&gt; og &lt;a rel=&quot;external&quot; href=&quot;https://nn.wikipedia.org/wiki/Fruktose&quot;&gt;fruktose&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bevæpnet med min nye kunnskap løp jeg virtuelt så fort som mulig til en internettbutikk nær meg. Og få oversikt over fruktose/glukose-forhold og pris skulle være mer jobb en først antatt. Mange gels inneholder bare glukose, så jeg måtte ofte sjekke næringsinnhold for å se forskjellen. I tillegg var forholdet Glukose:Fruktose sjeldent oppgitt, så jeg måtte i enkelte tilfeller kontakte produsenten.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;Navn&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Pris pr ml&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Glukose:Fruktose&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Gel størrelse (g)&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Carbo per gel&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Antall i pakke&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Pris på pakke&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Pris pr gel&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Kroner pr karbo&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Lenke&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Enervit C2:1 Carbo&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;kr 0.69&lt;/td&gt;&lt;td&gt;2:1&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;kr 999.00&lt;/td&gt;&lt;td&gt;kr 41.63&lt;/td&gt;&lt;td&gt;kr 1.04&lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.sykkelkomponenter.no/ernaering/energigel/hele-esker/enervit-c2-1-carbo-mango-energigel-24-stk&quot;&gt;sykkelkomponenter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;SIS Beta Fuel&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;kr 0.42&lt;/td&gt;&lt;td&gt;1,3:1&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;kr 749.00&lt;/td&gt;&lt;td&gt;kr 24.97&lt;/td&gt;&lt;td&gt;kr 0.62&lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.sykkelkomponenter.no/ernaering/energigel/hele-esker/sis-beta-fuel-appelsin-gel-30-stk&quot;&gt;sykkelkomponenter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Maurten Gel 160&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;kr 0.85&lt;/td&gt;&lt;td&gt;1,25:1&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;kr 550.00&lt;/td&gt;&lt;td&gt;kr 55.00&lt;/td&gt;&lt;td&gt;kr 1.38&lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.sykkelkomponenter.no/ernaering/energigel/hele-esker/maurten-gel-160-10-pk&quot;&gt;sykkelkomponenter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fuel of Norway original&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;kr 0.64&lt;/td&gt;&lt;td&gt;2:1&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;kr 699.00&lt;/td&gt;&lt;td&gt;kr 34.95&lt;/td&gt;&lt;td&gt;kr 1.13&lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://bikeshop.no/fuel-of-norway/fon3006eske/fuel-of-norway-energigel-eske-bringeb%C3%A6r-20-x-55g&quot;&gt;bikeshop&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Fuel of Norway loaded&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;kr 0.58&lt;/td&gt;&lt;td&gt;1,25:1&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;kr 749.00&lt;/td&gt;&lt;td&gt;kr 37.45&lt;/td&gt;&lt;td&gt;kr 0.94&lt;/td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https://www.sykkelkomponenter.no/ernaering/energigel/hele-esker/fuel-of-norway-loaded-fuel-sitrus-energigel-20-stk&quot;&gt;sykkelkomponenter&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Kjenner jeg meg selv rett, kommer ikke denne lista til å holdes oppdatert. Se på den som et øyeblikksbildet i tid da denne posten ble skrevet (2 oktober 2025).&lt;/p&gt;
&lt;p&gt;Har du flere gels med fruktose og glukose, med god pris som burde komme på lista? Skyt meg en epost på fredrik@fyksen.me&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Auto import from SD card to Immich</title>
          <pubDate>Fri, 18 Jul 2025 17:56:27 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/auto-import-from-sd-card-to-immich/</link>
          <guid>https://fyksen.me/auto-import-from-sd-card-to-immich/</guid>
          <description xml:base="https://fyksen.me/auto-import-from-sd-card-to-immich/">&lt;p&gt;I recently bought a Fuji mirrorless camera, and want to make it as smooth as possible to upload photos to Immich. After I have imported, I delete the images I do not want.&lt;/p&gt;
&lt;h2 id=&quot;labeling-the-sd-card-and-automount&quot;&gt;Labeling the SD card and automount&lt;/h2&gt;
&lt;p&gt;Fuji does &lt;strong&gt;not&lt;/strong&gt; set a UUID or a label on the SD card when you format it. This is a bit annoying, since it makes is harder to automate the process that all cards formatted with a Fuji camera should automatically mount to /mnt/fuji. The workaround I went for is to create a label on the SD card manually after each format.&lt;/p&gt;
&lt;p&gt;First find the path to your memory card with &lt;code&gt;fdisk -l&lt;/code&gt;. Mine was &lt;code&gt;/dev/sdg1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then I put a label (DCIM) on it with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo exfatlabel /dev/sdg1 DCIM&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We can now edit the file &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;br /&gt;
Add the line:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;/dev/disk/by-label/DCIM  /mnt/fuji  exfat  noexec,nodev,nosuid,nofail  0 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We also need to add a udev rule, to have it automount.&lt;/p&gt;
&lt;p&gt;Edit the file &lt;code&gt;/etc/udev/rules.d/99-dcim-mount.rules&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With the content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Mount when the card appears&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACTION==&amp;quot;add&amp;quot;, SUBSYSTEM==&amp;quot;block&amp;quot;, ENV{ID_FS_LABEL}==&amp;quot;DCIM&amp;quot;, TAG+=&amp;quot;systemd&amp;quot;, \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ENV{SYSTEMD_WANTS}+=&amp;quot;mnt-fuji.mount&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# (Optional) cleanly unmount when it’s pulled&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ACTION==&amp;quot;remove&amp;quot;, SUBSYSTEM==&amp;quot;block&amp;quot;, ENV{ID_FS_LABEL}==&amp;quot;DCIM&amp;quot;, RUN+=&amp;quot;/usr/bin/umount /mnt/fuji&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create the dir, reload systemd, and test mount:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mkdir /mnt/fuji&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;udevadm control --reload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mount -a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;creating-systemd-file-to-start-bash-script&quot;&gt;Creating systemd file to start bash script&lt;/h2&gt;
&lt;p&gt;Create the systemd service file for running the script:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/systemd/system/auto-upload-immich.service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With the content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Unit]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Description=Archive .raf  and import jpeg to Immich&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;BindsTo=dev-disk-by\x2dlabel-DCIM.device     # die when the device goes away&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;After=dev-disk-by\x2dlabel-DCIM.device&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;RequiresMountsFor=/mnt/fuji                  # systemd mounts it for us&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ConditionPathIsMountPoint=/mnt/fuji&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Service]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type=oneshot&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;IMMICH_API_KEY=&amp;lt;yourAPIkey&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;IMMICH_INSTANCE_URL=https://&amp;lt;yourdomain.immich.domain&amp;gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;MOUNT_DIR=/mnt/fuji/DCIM/100_FUJI/&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;RAW_DIR=/mnt/appdata/rawfiles/&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;WEBHOOK_ENDPOINT=&amp;lt;endpoint if you want to ping a webhook&amp;gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;SD_CARD_MOUNT=/mnt/fuji&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Environment=&amp;quot;HA_URL=https://homeassistant.yourdomain.com/api/webhook/-webhookID&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ExecStart=/usr/local/bin/auto-upload-immich.sh --when=inserted --mount-point=/mnt/fuji&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[Install]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;WantedBy=dev-disk-by\x2dlabel-DCIM.device&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Please make sure to edit the environment variables for your environment. Take note that I have set the variable MOUNT_DIR to DCIM/100_FUJI, so Immich doesn&#39;t need to scan the whole SD card for the media files.&lt;/p&gt;
&lt;p&gt;The environment variable &lt;code&gt;$RAW_DIR&lt;/code&gt; is for moving the &lt;code&gt;.raf&lt;/code&gt; files to a separate directory before running the Immich import. This way I can store my .raf files independently, if I have a banger of a photo that the jpeg did not end up looking nice.&lt;/p&gt;
&lt;p&gt;The env &lt;code&gt;$WEBHOOK_ENDPOINT&lt;/code&gt; is for sending a POST to a webhook. I have another service that checks my geolocation from Home Assistant, and ads that data to the images on Immich. This way, I get geolocation on the photos without draining my battery with BLE connecting to the camera when I shoot.&lt;/p&gt;
&lt;p&gt;The env &lt;code&gt;HA_URL&lt;/code&gt; is for sending a http PUT request to a Home Assistant automation. (I have a automation that says on my speakers in the kitchen that the import is finished, so I remember to put the SD card back in the camera).&lt;/p&gt;
&lt;h2 id=&quot;the-bash-script&quot;&gt;The bash script&lt;/h2&gt;
&lt;p&gt;So finally it is the script. Create and edit the file:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/local/bin/auto-upload-immich.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;With the content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# set immich_cli variable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;IMMICH_CLI=&amp;quot;docker run --rm  --pull=always \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-v $MOUNT_DIR:/import:ro \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-e IMMICH_INSTANCE_URL=$IMMICH_INSTANCE_URL \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-e IMMICH_API_KEY=$IMMICH_API_KEY \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ghcr.io/immich-app/immich-cli:latest upload -r /import&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;script started&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;Moving raw files&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;shopt -s nullglob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;for file in &amp;quot;$MOUNT_DIR&amp;quot;*.RAF; do&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  # the -- protects against filenames starting with “-”&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  mv -- &amp;quot;$file&amp;quot; &amp;quot;$RAW_DIR&amp;quot;/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;Starting Immich import&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$IMMICH_CLI&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#echo &amp;quot;unmounting sd card&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;#umount $SD_CARD_MOUNT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;Sending curl&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;curl --silent --show-error --fail -X POST $WEBHOOK_ENDPOINT&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;curl --silent --show-error --fail -X PUT $HA_URL&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;echo &amp;quot;Done, exiting&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;You need docker (or podman) to run this.&lt;/li&gt;
&lt;li&gt;We also pull=always, so we do not end up with a stale immich cli image.&lt;/li&gt;
&lt;li&gt;We do not delete the files from the SD card, and mount it as read only inside the container.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fin&quot;&gt;fin&lt;/h2&gt;
&lt;p&gt;Finally we need to reaload systemd.&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;systemctl daemon-reload&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;systemctl enable /etc/systemd/system/auto-upload-immich.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can check your services with:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;journalctl -u /etc/systemd/system/auto-upload-immich.service -f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
      <item>
          <title>Fixing suspend with Linux on TUXEDO InfinityBook Pro 15</title>
          <pubDate>Wed, 26 Feb 2025 19:37:55 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/fixing-suspend-with-linux-on-tuxedo-infinitybook-pro-15/</link>
          <guid>https://fyksen.me/fixing-suspend-with-linux-on-tuxedo-infinitybook-pro-15/</guid>
          <description xml:base="https://fyksen.me/fixing-suspend-with-linux-on-tuxedo-infinitybook-pro-15/">&lt;p&gt;I&#39;m running Fedora Rawhide Cosmic. But this will be the same for all Fedora (and most other Linux distroes).&lt;/p&gt;
&lt;p&gt;Add &lt;code&gt;acpi.ec_no_wakeup=1&lt;/code&gt; to the line that starts with: &lt;code&gt;GRUB_CMDLINE_LINUX=&lt;/code&gt; in the file &lt;code&gt;/etc/default/grub&lt;/code&gt;. Then run &lt;code&gt;grub2-mkconfig -o /boot/grub2/grub.cfg&lt;/code&gt; then reboot.&lt;/p&gt;
&lt;p&gt;Then new file should look like this:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_TIMEOUT=5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_DISTRIBUTOR=&amp;quot;$(sed &amp;#39;s, release .*$,,g&amp;#39; /etc/system-release)&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_DEFAULT=saved&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_DISABLE_SUBMENU=true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_TERMINAL_OUTPUT=&amp;quot;console&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_CMDLINE_LINUX=&amp;quot;rhgb quiet acpi.ec_no_wakeup=1&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_DISABLE_RECOVERY=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;GRUB_ENABLE_BLSCFG=true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot your system, and the problem should be fixed.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>ICS Kalender for Ski VM Trondheim</title>
          <pubDate>Wed, 26 Feb 2025 10:00:13 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/ics-kalender-for-ski-vm-trondheim/</link>
          <guid>https://fyksen.me/ics-kalender-for-ski-vm-trondheim/</guid>
          <description xml:base="https://fyksen.me/ics-kalender-for-ski-vm-trondheim/">&lt;ul&gt;
&lt;li&gt;ICS FIL: &lt;a rel=&quot;external&quot; href=&quot;https://user.fm/calendar/v1-b9b3f3145aa7dd028de49c8a08a1d8f0/ski-vm.ics&quot;&gt;https://user.fm/calendar/v1-b9b3f3145aa7dd028de49c8a08a1d8f0/ski-vm.ics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Det er ville tilstander at man klarer å hoste opp chat AI, men ikke en kalender folk kan importere til kalenderne sine. Symptomatisk for websider i dizze tider.&lt;/p&gt;
</description>
      </item>
      <item>
          <title>Fosdemfylt helg</title>
          <pubDate>Sun, 02 Feb 2025 16:03:32 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/fosdemfylt-helg/</link>
          <guid>https://fyksen.me/fosdemfylt-helg/</guid>
          <description xml:base="https://fyksen.me/fosdemfylt-helg/">&lt;p&gt;Dette er første gang jeg har vært på Fosdem. Merksnodig som jeg er, så har det vært et mål i livet og jobbe for en arbeidsgiver som betaler kost og losji til Fosdem. Fosdem er jo ikke som andre konferanser. Det er ikke mulig for bedrifter og sponse Fosdem, for så å få holde foredrag. Dette bidrar til at konferansen er fylt med folk ideologisk opptatt av åpen kildekode, og som er interessert i å finne ut hvordan ting (gjerne tekniske dupeditter) fungerer.&lt;/p&gt;
&lt;h2 id=&quot;folk&quot;&gt;Folk.&lt;/h2&gt;
&lt;p&gt;Jeg er jo ganske opptatt av folk. Og det er ikke så vanskelig å definere en gjennomsnittlig Fosdemdeltaker. Hvit mann, middelklasse, sekk fra tech-arbeidsgiver, og praktiske klær. Men det slo meg at det er langt høyere andel personer som er trans eller ikke-binære blant Fosdem deltakere, enn det er i gjennomsnittet av befolkningne. Jeg synes dette er spennende. Jeg tror noe av grunnen til dette er at fri programvare gjør det mulig for personer utsatt for hetsing på det «vanlige nettet» lage sine egne trygge havner, hvor de selv får bestemme hva som er akseptabel oppførsel. Dette gjør meg både trist og glad. Trist fordi det ikke skulle være nødvendig, men glad fordi jeg er endel av et miljø som gir en trygg havn til de som trenger det. Muligheten til å være seg selv er jo en menneskerett.&lt;/p&gt;
&lt;p&gt;Jeg fikk besøke bodene og hørte på foredragene til prosjekter jeg bruker og følger. Høydepunktene for meg var&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mastodon&lt;/li&gt;
&lt;li&gt;Matrix&lt;/li&gt;
&lt;li&gt;Immich&lt;/li&gt;
&lt;li&gt;Pine64&lt;/li&gt;
&lt;li&gt;Forgejo&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/02/20250201_121821.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/02/20250202_131157.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/content/images/2025/02/20250202_142700.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Et knippe bilder fra helga&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;runner-loping&quot;&gt;🏃 Løping&lt;/h2&gt;
&lt;p&gt;Jo, også ble det en løpetur da. Intervaller i Parc du Cinquantenaire AKA Jubelparken. Helt på det jevne både på følelse og fart, men fikk iallefall klemt ut en god økt, til tross for en helg fylt med alt annet enn løping. Hadde egentlig tenkt til å løpe inni parken, men de slo ikke på lyset før godt utti intervallen, så det ble rundt istedenfor.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Distanse&lt;/th&gt;&lt;th&gt;Fart&lt;/th&gt;&lt;th&gt;Puls&lt;/th&gt;&lt;th&gt;Tid&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;9.9 km&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;3:41&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;128 bpm&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;36:28&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2.3 km&lt;/td&gt;&lt;td&gt;3:44&lt;/td&gt;&lt;td&gt;124 bpm&lt;/td&gt;&lt;td&gt;8:36&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2.3 km&lt;/td&gt;&lt;td&gt;3:39&lt;/td&gt;&lt;td&gt;123 bpm&lt;/td&gt;&lt;td&gt;8:26&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1.8 km&lt;/td&gt;&lt;td&gt;3:39&lt;/td&gt;&lt;td&gt;124 bpm&lt;/td&gt;&lt;td&gt;6:26&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1.8 km&lt;/td&gt;&lt;td&gt;3:40&lt;/td&gt;&lt;td&gt;134 bpm&lt;/td&gt;&lt;td&gt;6:30&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1.8 km&lt;/td&gt;&lt;td&gt;3:41&lt;/td&gt;&lt;td&gt;134 bpm&lt;/td&gt;&lt;td&gt;6:30&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</description>
      </item>
      <item>
          <title>Gpu lxc podman jellyfin passtrough</title>
          <pubDate>Sun, 27 Aug 2023 22:00:00 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/gpu-lxc-podman-jellyfin-passtrough/</link>
          <guid>https://fyksen.me/gpu-lxc-podman-jellyfin-passtrough/</guid>
          <description xml:base="https://fyksen.me/gpu-lxc-podman-jellyfin-passtrough/">&lt;h2 id=&quot;why-lxc-and-not-a-vm&quot;&gt;Why LXC, and not a VM?&lt;/h2&gt;
&lt;p&gt;A couple of reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disks on Proxmox perform better with Container mounts then with huge VM disks. I want to passtrough my video library as a separate zfs dataset to multiple LXC containers.&lt;/li&gt;
&lt;li&gt;If you passtrough a GPU to a VM, only that VM can use it. I want to make us of the GPU.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-to-notes&quot;&gt;How to notes:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I used a Fedora LXC container for this, but it should work pretty simular for Debian or Ubuntu as well.&lt;/li&gt;
&lt;li&gt;I use Proxmox 8.&lt;/li&gt;
&lt;li&gt;I have a AMD APU (Ryzen 5650GE)&lt;/li&gt;
&lt;li&gt;I have a intel arc A 380 GPU.&lt;/li&gt;
&lt;li&gt;Have a look at &lt;a rel=&quot;external&quot; href=&quot;https://jellyfin.org/docs/general/administration/hardware-acceleration/intel#arc-gpu-support&quot;&gt;Jellyfin doc&lt;/a&gt; about ARC GPU.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;proxmox-setup&quot;&gt;Proxmox setup:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create a privileged container.&lt;/li&gt;
&lt;li&gt;Go to Options -&amp;gt; Features -&amp;gt; Tick Nesting, FUSE and Create Device Nodes.&lt;/li&gt;
&lt;li&gt;ssh into the &lt;code&gt;proxmox host&lt;/code&gt; for the next few steps.&lt;/li&gt;
&lt;li&gt;We need to establish what the path to our GPU is. Run &lt;code&gt;lscpi | grep Arc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Take note off the PCI number. In my case, this is &lt;code&gt;12:00.0&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;root@rack:~# lspci | grep Arc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;12:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A380] (rev 05)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Now ne need to check where this PCI device is mounted. run &lt;code&gt;ls -la /dev/dri/by-path/ | grep 12:00&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;root@rack:~# ls -la /dev/dri/by-path/ | grep 12:00&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lrwxrwxrwx 1 root root   8 Aug 28 10:07 pci-0000:12:00.0-card -&amp;gt; ../card1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lrwxrwxrwx 1 root root  13 Aug 28 10:07 pci-0000:12:00.0-render -&amp;gt; ../renderD128&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;My card is mounted as &lt;code&gt;/dev/dri/card1&lt;/code&gt;, and &lt;code&gt;/dev/dri/renderD128&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We also need to check what group owns the /dev/dri files. run &lt;code&gt;ls -la /dev/dri&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;root@rack:~# ls -la /dev/dri/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxr-xr-x  3 root root        160 Aug 28 10:07 .&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxr-xr-x 18 root root       5040 Aug 28 10:07 ..&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;drwxr-xr-x  2 root root        140 Aug 28 10:07 by-path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;crw-rw----  1 root video  226,   0 Aug 28 10:07 card0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;crw-rw----  1 root video  226,   1 Aug 28 10:07 card1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;crw-rw----  1 root video  226,   2 Aug 28 10:07 card2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;crw-rw----  1 root render 226, 128 Aug 28 10:07 renderD128&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;crw-rw----  1 root render 226, 129 Aug 28 10:07 renderD129&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;In my setup, &lt;code&gt;226&lt;/code&gt; is the group that owns the cards.&lt;/li&gt;
&lt;li&gt;Now we need to map this into our container. My container have the ID 100, so my container config file is: &lt;code&gt;/etc/pve/lxc/100.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the following at the end of the file. Please make sure to insert your owner, instead of 226:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Allow C group:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lxc.cgroup2.devices.allow: c 226:* rwm&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;# Pass trough the files for the device:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lxc.mount.entry: /dev/dri/card1 dev/dri/card0 none bind,optional,create=file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;note that I passed trough host: &lt;code&gt;/dev/dri/card1&lt;/code&gt; to container: &lt;code&gt;dev/dri/card0&lt;/code&gt;. This is to make it easier for the container. Most software expects the gpu to be on /dev/dri/card0. This way I do not have to specify this in Jellyfin settings later.&lt;/li&gt;
&lt;li&gt;Save the file, and start your container.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;lxc-setup&quot;&gt;LXC setup:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Install packages:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;dnf install intel-gpu-tools podman&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;intel_gpu_top&lt;/code&gt;, to check that you can access the GPU device.&lt;/li&gt;
&lt;li&gt;Run podman with passtrough of the gpu:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;podman run  --name jellyfin-test -p 8096:8096 --device /dev/dri/card0:/dev/dri/card0 --device /dev/dri/renderD128:/dev/dri/renderD128 -v /root/jellyfin/config:/config -v /root/jellyfin/media/:/media/movies docker.io/jellyfin/jellyfin:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Check the QSV and VA-API codecs inside container with: &lt;code&gt;podman exec -it jellyfin-test /usr/lib/jellyfin-ffmpeg/vainfo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check OpenCL runtime status inside container: &lt;code&gt;podman exec -it jellyfin-test /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va -init_hw_device opencl@va&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Then login to your jellyfin &lt;code&gt;admin settings&lt;/code&gt; -&amp;gt; &lt;code&gt;playback&lt;/code&gt;. And tick the boxes ✅&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;i-have-not-tested-this-for-long-so-this-might-not-work-as-expected-we-ll-see&quot;&gt;I have not tested this for long, so this might not work as expected, we&#39;ll see.&lt;/h2&gt;
</description>
      </item>
      <item>
          <title>Asrock Rack x470D4U Resizable bar</title>
          <pubDate>Wed, 16 Aug 2023 22:00:00 +0000</pubDate>
          <author>Fredrik Sætereng Fyksen</author>
          <link>https://fyksen.me/asrock-rack-x470d4u-resizable-bar/</link>
          <guid>https://fyksen.me/asrock-rack-x470d4u-resizable-bar/</guid>
          <description xml:base="https://fyksen.me/asrock-rack-x470d4u-resizable-bar/">&lt;p&gt;To my surprise they answered a day later with a BIOS update:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #CDD6F4; background-color: #1E1E2E;&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;We add resized bar option in BIOS L4.27&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Advanced -&amp;gt; PCI Subsystem Settings -&amp;gt; Re-Size BAR support.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The BIOS is not listed on Asrocks pages yet, so you should probably not use it yet. (Especially not since you got the file from a random guys blog).&lt;/p&gt;
&lt;p&gt;But if somebody needs it, here&#39;s the file.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/content/files/2025/01/X47D4U427.ZIP&quot;&gt;X47D4U427.ZIP (10 MB)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Other names for resizable bar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CAM - Clever Access Memory&lt;/li&gt;
&lt;li&gt;SAM - Smart Access Memory&lt;/li&gt;
&lt;li&gt;Rebar - Resizable bar&lt;/li&gt;
&lt;/ul&gt;
</description>
      </item>
    </channel>
</rss>
