<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>All | Kim Grytøyr</title>
  <subtitle>Posts, notes, links and other things.</subtitle>
  <link href="https://kim.grytoyr.io/feed/all.xml" rel="self" />
  <link href="https://kim.grytoyr.io/" />
  <updated>2026-02-10T06:27:47Z</updated>
  <id>https://kim.grytoyr.io/</id>
  <author>
    <name>Kim Grytøyr</name>
  </author>
  <entry>
    <title>Barbarian</title>
    <link href="https://kim.grytoyr.io/movies/barbarian/" />
    <updated>2026-02-10T06:27:47Z</updated>
    <id>https://kim.grytoyr.io/movies/barbarian/</id>
    <content type="html"></content>
  </entry>
  <entry>
    <title>NOPE</title>
    <link href="https://kim.grytoyr.io/movies/nope/" />
    <updated>2026-02-07T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/movies/nope/</id>
    <content type="html">&lt;p&gt;I&#39;ve seen both &lt;a href=&quot;https://www.themoviedb.org/movie/419430-get-out&quot;&gt;Get out&lt;/a&gt; and &lt;a href=&quot;https://www.themoviedb.org/movie/458723-us&quot;&gt;Us&lt;/a&gt;, and although it was long before I started reviewing anything here on my website, I remember that I enjoyed both of these movies.&lt;/p&gt;
&lt;p&gt;That&#39;s &lt;strong&gt;not&lt;/strong&gt; what I&#39;m left with after having watched &lt;strong&gt;NOPE&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The film has all the technical mastery you&#39;d expect from Peele—gorgeous cinematography, tense moments, and some genuinely creepy scenes. The concept is interesting, and the performances are solid, particularly from Keke Palmer and Daniel Kaluuya. But something just didn&#39;t click for me.&lt;/p&gt;
&lt;p&gt;The pacing felt off, with the first act dragging and the payoff not quite delivering the emotional or narrative punch I was hoping for. While I appreciate what Peele was trying to do with the themes of spectacle and exploitation, the execution left me wanting more. It&#39;s a well-made film, but it didn&#39;t resonate with me the way his previous work did.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Handmaid&#39;s Tale</title>
    <link href="https://kim.grytoyr.io/books/the-handmaids-tale/" />
    <updated>2026-01-14T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/books/the-handmaids-tale/</id>
    <content type="html">&lt;p&gt;I am currently reading this book as part of the NRK podcast &lt;a href=&quot;https://radio.nrk.no/podkast/leseklubben&quot;&gt;Leseklubben&lt;/a&gt;. More to come when I&#39;ve finished reading it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Ingen skal drukne</title>
    <link href="https://kim.grytoyr.io/books/ingen-skal-drukne/" />
    <updated>2025-04-30T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/books/ingen-skal-drukne/</id>
    <content type="html">&lt;p&gt;This book is the second in a series of currently three books. It&#39;s about the Falck family and their intrigues.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://kim.grytoyr.io/notes/202504140955/" />
    <updated>2025-04-14T09:55:00Z</updated>
    <id>https://kim.grytoyr.io/notes/202504140955/</id>
    <content type="html">&lt;p&gt;I will be posting changes to my website simply as notes tagged with &lt;code&gt;changelog&lt;/code&gt;. This is the very first changelog of this site, and it summarizes the most important changes I&#39;ve done since I started wiping the dust of this site in April this year.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&#39;ve added a &lt;a href=&quot;https://buttondown.email/kimgrytoyr&quot;&gt;Buttondown&lt;/a&gt; newsletter integration. Whenever I publish a new post on my blog, an email will be sent to my subscribers.&lt;/li&gt;
&lt;li&gt;I&#39;ve added a «Reply by email» button to all content. Do not hestitate to contact me if you have comments or feedback. Getting feedback is a big part of why I blog in the first place — I enjoy hearing from readers and being part of a thoughtful exchange now and then.&lt;/li&gt;
&lt;li&gt;I&#39;ve added a &lt;a href=&quot;https://kim.grytoyr.io/search&quot;&gt;Search&lt;/a&gt; feature using &lt;a href=&quot;https://pagefind.app&quot;&gt;Pagefind&lt;/a&gt;. It&#39;s not yet fully configured or customized, but it&#39;s working.&lt;/li&gt;
&lt;li&gt;Added links to previous and next post, note and link.&lt;/li&gt;
&lt;li&gt;Added a &lt;a href=&quot;https://kim.grytoyr.io/404.html&quot;&gt;404&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;Reduced the size of uncompressed resources being loaded on the front page to
66 kB. Submitted a &lt;a href=&quot;https://github.com/kevquirk/512kb.club/pull/1798&quot;&gt;PR&lt;/a&gt; to
be added to the &lt;a href=&quot;https://512kb.club&quot;&gt;512kb.club&lt;/a&gt; website.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>Our dog: Kento</title>
    <link href="https://kim.grytoyr.io/blog/our-dog-kento/" />
    <updated>2025-04-14T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/our-dog-kento/</id>
    <content type="html">&lt;p&gt;I haven&#39;t yet posted any pictures of or information about our beloved dog Kento, an almost 3 years old fawn colored Standard Poodle. Here are a few pictures of him growing up:&lt;/p&gt;
&lt;div class=&quot;image-grid&quot;&gt;
      &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/sm32ojUOt9-400.avif 400w, https://kim.grytoyr.io/img/sm32ojUOt9-800.avif 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/sm32ojUOt9-400.webp 400w, https://kim.grytoyr.io/img/sm32ojUOt9-800.webp 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/sm32ojUOt9-400.jpeg&quot; alt=&quot;Kento at the age of 3 months.&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;600&quot; srcset=&quot;https://kim.grytoyr.io/img/sm32ojUOt9-400.jpeg 400w, https://kim.grytoyr.io/img/sm32ojUOt9-800.jpeg 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
    &lt;figcaption&gt;Kento at the age of 3 months.&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/0cWApHdD0i-400.avif 400w, https://kim.grytoyr.io/img/0cWApHdD0i-800.avif 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/0cWApHdD0i-400.webp 400w, https://kim.grytoyr.io/img/0cWApHdD0i-800.webp 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/0cWApHdD0i-400.jpeg&quot; alt=&quot;Kento at the age of 3 months.&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;600&quot; srcset=&quot;https://kim.grytoyr.io/img/0cWApHdD0i-400.jpeg 400w, https://kim.grytoyr.io/img/0cWApHdD0i-800.jpeg 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
    &lt;figcaption&gt;Kento at the age of 3 months.&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/u-fAviuH4J-400.avif 400w, https://kim.grytoyr.io/img/u-fAviuH4J-800.avif 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/u-fAviuH4J-400.webp 400w, https://kim.grytoyr.io/img/u-fAviuH4J-800.webp 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/u-fAviuH4J-400.jpeg&quot; alt=&quot;A cold 1.5 year old Kento getting warmed.&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;956&quot; srcset=&quot;https://kim.grytoyr.io/img/u-fAviuH4J-400.jpeg 400w, https://kim.grytoyr.io/img/u-fAviuH4J-800.jpeg 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
    &lt;figcaption&gt;A cold 1.5 year old Kento getting warmed.&lt;/figcaption&gt;
  &lt;/figure&gt;
&lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/vBE3dWJjXg-400.avif 400w, https://kim.grytoyr.io/img/vBE3dWJjXg-800.avif 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/vBE3dWJjXg-400.webp 400w, https://kim.grytoyr.io/img/vBE3dWJjXg-800.webp 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/vBE3dWJjXg-400.jpeg&quot; alt=&quot;A 2 year old Kento.&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;800&quot; height=&quot;1066&quot; srcset=&quot;https://kim.grytoyr.io/img/vBE3dWJjXg-400.jpeg 400w, https://kim.grytoyr.io/img/vBE3dWJjXg-800.jpeg 800w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
    &lt;figcaption&gt;A 2 year old Kento.&lt;/figcaption&gt;
  &lt;/figure&gt;
    &lt;/div&gt;
&lt;p&gt;The name &lt;strong&gt;Kento&lt;/strong&gt; is Japanese and has several meanings;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Smart person, cure for depression, happiness, rising up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I´ll probably post more pictures of him as time goes by, but at the very least he has now been introduced.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Project Music 2025</title>
    <link href="https://kim.grytoyr.io/blog/project-music/" />
    <updated>2025-04-11T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/project-music/</id>
    <content type="html">&lt;p&gt;I&#39;ve been a Spotify Premium subscriber for many, many years. I can&#39;t say I&#39;ve had any problems with their apps or service, there&#39;s just something about these «access to everything for a small monthly amount» services that I don&#39;t like. It’s easy to get lost in endless playlists, and forget what it means to connect with an album.&lt;/p&gt;
&lt;p&gt;Back in ~2014 I used to buy my music on iTunes. Thinking back to this time, these are some of the things that stand out to me:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I listened more thoroughly to the music I bought.&lt;/li&gt;
&lt;li&gt;Buying a new album was a joyous activity.&lt;/li&gt;
&lt;li&gt;It felt right.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&#39;m going back to this model now. I haven&#39;t decided how to consume this music yet, but there seems to be a couple of good alternatives:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;iBroadcast&lt;/li&gt;
&lt;li&gt;Plex&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Either way, I’m looking forward to making music feel intentional again — something I own, explore, and cherish. I’ll share more once I’ve landed on a setup. For now, I’m just excited to rebuild my music collection, one album at a time.&lt;/p&gt;
&lt;h2 id=&quot;albums-i-d-like-to-buy&quot;&gt;Albums I&#39;d like to buy&lt;/h2&gt;
&lt;p&gt;Here&#39;s a non-exhaustive list of albums I&#39;m planning on buying, at least one each month:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;s&gt;&lt;a href=&quot;https://music.apple.com/no/album/aventine/681187053&quot;&gt;Agnes Obel – Aventine&lt;/a&gt;&lt;/s&gt; (bought: 12th of April, 2025)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/portrayals/1765337706&quot;&gt;Ane Brun – Portrayals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/an-awesome-wave/1622205752&quot;&gt;alt-J – An Awesome Wave&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/this-is-all-yours/1620183062&quot;&gt;alt-J – This Is All Your&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.qobuz.com/no-en/album/every-kingdom-ben-howard/0060252781434&quot;&gt;Ben Harper – Every Kingdom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/this-empty-northern-hemisphere/316335828&quot;&gt;Gregory Alan Isakov – This Empty Northern Hemisphere&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;s&gt;&lt;a href=&quot;https://music.apple.com/no/album/deaf-heat-ep/828485268&quot;&gt;Marika Hackman – Deaf Heap EP&lt;/a&gt;&lt;/s&gt; (bought 12th of April, 2025)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/mezzanine-deluxe/1428684976&quot;&gt;Massive Attack – Mezzanine (Deluxe)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.apple.com/no/album/closing-time-remastered/1485071375&quot;&gt;Tom Waits – Closing Time (Remastered)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;...and so many more. I&#39;ll keep updating this list.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>listmonk</title>
    <link href="https://kim.grytoyr.io/links/listmonk/" />
    <updated>2025-04-10T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/links/listmonk/</id>
    <content type="html">&lt;p&gt;I haven&#39;t heard about listmonk before, but it&#39;s something I&#39;d definitely would like to try at some point. Its own description is: &lt;code&gt;«Self-hosted newsletter and mailing list manager»&lt;/code&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title></title>
    <link href="https://kim.grytoyr.io/notes/202504092000/" />
    <updated>2025-04-09T20:00:00Z</updated>
    <id>https://kim.grytoyr.io/notes/202504092000/</id>
    <content type="html">&lt;p&gt;This is the very first note on my new website. It&#39;s a GREAT note.&lt;/p&gt;
&lt;p&gt;It doesn&#39;t say much, but still – it marks the beginning of a new note-hosting era for this website.&lt;/p&gt;
&lt;p&gt;From now on, this is where my thoughts live.
Not in a walled garden. Not in an algorithmic feed.
Just here – short notes, ideas, links, things I want to remember or share.
A quiet feed, just for me – and anyone else who finds it.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Mindful Palettes № 122</title>
    <link href="https://kim.grytoyr.io/links/mindful-palettes-122/" />
    <updated>2025-04-09T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/links/mindful-palettes-122/</id>
    <content type="html">&lt;p&gt;I like this color palette, maybe I have to put it to use somewhere.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Back to basics – again..</title>
    <link href="https://kim.grytoyr.io/blog/back-to-basics/" />
    <updated>2025-04-08T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/back-to-basics/</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;I know...&lt;/strong&gt; I’ve made quite a few attempts to get this site looking, feeling, and working the way I want – but none have really stuck.&lt;/p&gt;
&lt;p&gt;So, I hereby declare this attempt number six — if we’re only counting the documented ones.&lt;/p&gt;
&lt;p&gt;If you&#39;re curious about the other times I&#39;ve changed my website platform, here you go:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/going-static/&quot;&gt;Going static&lt;/a&gt; (2014)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/new-website-platform/&quot;&gt;New website platform&lt;/a&gt; (2017)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/going-wordpress-again/&quot;&gt;Going WordPress again&lt;/a&gt; (2020)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/a-new-website-again/&quot;&gt;Website changes – again&lt;/a&gt; (2021)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/oops-i-did-it-again/&quot;&gt;Oops, I did it again...&lt;/a&gt; (2022)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-new-rig&quot;&gt;The new rig&lt;/h2&gt;
&lt;p&gt;The new rig takes this site back to its basic roots: A pure static website. This time it&#39;s &lt;a href=&quot;https://www.11ty.dev&quot;&gt;Eleventy&lt;/a&gt; doing all the dirty work. I&#39;ve tried to keep the site as simple as possible, only using &lt;a href=&quot;https://tailwindcss.com&quot;&gt;Tailwind&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;ve restored the content setup I had on my &lt;a href=&quot;https://kim.grytoyr.io/blog/new-website-platform/&quot;&gt;Hugo setup&lt;/a&gt;, except that I&#39;ve removed the &lt;code&gt;Diary&lt;/code&gt; section. You&#39;ll now find: &lt;a href=&quot;https://kim.grytoyr.io/blog/&quot;&gt;Posts&lt;/a&gt;, &lt;a href=&quot;https://kim.grytoyr.io/notes/&quot;&gt;notes&lt;/a&gt; and &lt;a href=&quot;https://kim.grytoyr.io/links/&quot;&gt;links&lt;/a&gt;. And some other static pages.&lt;/p&gt;
&lt;p&gt;The site is hosted by &lt;a href=&quot;https://devos.no/gronn-hosting&quot;&gt;Devos&lt;/a&gt;, my own company.&lt;/p&gt;
&lt;p&gt;I&#39;m planning on adding more things and keeping the site up-to-date this time. As always....&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>RNoAF Christmas Star 2022</title>
    <link href="https://kim.grytoyr.io/blog/christmas-star-2022/" />
    <updated>2022-12-09T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/christmas-star-2022/</id>
    <content type="html">&lt;p&gt;The Royal Norwegian Air Force practices formation flying every year in December. This year, they were schedule to fly over Bodø at 11:22 on December 8th. I managed to capture them with my zoom lens just a couple minutes after their scheduled arrival.&lt;/p&gt;
&lt;figure class=&quot;&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/MYHvF0I6Bv-400.avif 400w, https://kim.grytoyr.io/img/MYHvF0I6Bv-800.avif 800w, https://kim.grytoyr.io/img/MYHvF0I6Bv-1280.avif 1280w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/MYHvF0I6Bv-400.webp 400w, https://kim.grytoyr.io/img/MYHvF0I6Bv-800.webp 800w, https://kim.grytoyr.io/img/MYHvF0I6Bv-1280.webp 1280w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/MYHvF0I6Bv-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1280&quot; height=&quot;731&quot; srcset=&quot;https://kim.grytoyr.io/img/MYHvF0I6Bv-400.jpeg 400w, https://kim.grytoyr.io/img/MYHvF0I6Bv-800.jpeg 800w, https://kim.grytoyr.io/img/MYHvF0I6Bv-1280.jpeg 1280w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
&lt;p&gt;It wasn&#39;t the greatest light for photographing moving aircrafts, but I managed to get a couple of photos that turned out somewhat okay.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Remember iEX history</title>
    <link href="https://kim.grytoyr.io/blog/remember-iex-history/" />
    <updated>2022-12-02T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/remember-iex-history/</id>
    <content type="html">&lt;p&gt;I&#39;m often finding myself crafting some of the most complex and ingenious stuff ever known to IEx men, only to find myself having to recreate it minutes later because I&#39;m now in a new IEx session. Annoying? Yes. Solvable? Yes! Here&#39;s how.&lt;/p&gt;
&lt;p&gt;We&#39;re all familiar with using &lt;code&gt;Ctrl+r&lt;/code&gt; for searching our shell history of crafty one-liners, right? Great. With that out of the box, let&#39;s see how we can achieve the same in iEX. It&#39;s quite simple, and it&#39;s well explained in the &lt;a href=&quot;https://hexdocs.pm/iex/IEx.html#module-shell-history&quot;&gt;IEx documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enabling it for single sessions can be done by starting IEx in the following way:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;iex &lt;span class=&quot;token parameter variable&quot;&gt;--erl&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;-kernel shell_history enabled&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enabling it system-wide can be done by setting the following environment variable (Unix-like systems):&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;ERL_AFLAGS&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;-kernel shell_history enabled&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, once you&#39;ve done this you can enjoy having all of your IEx history available using the arrow up and arrow down keys, as well as the Ctrl+r trick mentioned earlier.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Oops, I did it again...</title>
    <link href="https://kim.grytoyr.io/blog/oops-i-did-it-again/" />
    <updated>2022-10-05T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/oops-i-did-it-again/</id>
    <content type="html">&lt;p&gt;It has happened many times before, and this sure ain&#39;t going to be the last time. I&#39;ve jumped off the WordPress ship and over to the headless CMS ship.&lt;/p&gt;
&lt;p&gt;If you&#39;re curious about the other times I&#39;ve changed my website platform, here you go:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/going-static/&quot;&gt;Going static&lt;/a&gt; (2014)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/new-website-platform/&quot;&gt;New website platform&lt;/a&gt; (2017)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/going-wordpress-again/&quot;&gt;Going WordPress again&lt;/a&gt; (2020)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kim.grytoyr.io/blog/a-new-website-again/&quot;&gt;Website changes – again&lt;/a&gt; (2021)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;.and many more since the late 90s that I don&#39;t have any record of, sadly.&lt;/p&gt;
&lt;p&gt;This time I&#39;ve abandoned the WordPress ship, which was great, in favour of the hypermodern headless CMS ship. To be more concise, my website is now built using &lt;a href=&quot;https://prismic.io/&quot;&gt;Prismic.io&lt;/a&gt; and &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt;. It&#39;s hosted on &lt;a href=&quot;https://vercel.com/&quot;&gt;Vercel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I spend at least half of my time developing React applications. Being able to do the same with my own website, and client websites for that matter, suits me perfectly. The combination of any headless CMS (there are many great ones, and I&#39;d really like to try Sanity.io), Next.js and Vercel is truly a great developer experience.&lt;/p&gt;
&lt;p&gt;There are also some limitations. Some are specific to Prismic.io and some are more general. So far I&#39;ve been able to work around most of them without too much hassle.&lt;/p&gt;
&lt;p&gt;There you have it. Rest assure there will be a new post of this kind at some point.&lt;/p&gt;
&lt;p&gt;Until then, I hope you enjoy my new website.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; You can use &lt;code&gt;Cmd+K&lt;/code&gt; or &lt;code&gt;Win+K&lt;/code&gt; to open the search palette which gives you easy access to all the content on this website.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>npaste-vscode updated</title>
    <link href="https://kim.grytoyr.io/blog/npaste-vscode-updated/" />
    <updated>2021-11-20T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/npaste-vscode-updated/</id>
    <content type="html">&lt;p&gt;I have written an encrypted pastebin for text and images called npaste. This post goes through the recent changes in the VSCode plugin for npaste.&lt;/p&gt;
&lt;p&gt;I’ve also created a plugin that allows you to quickly upload pastes from &lt;a href=&quot;https://kim.grytoyr.io/blog/sublime-text-3-creating-a-plugin/&quot;&gt;Sublime Text 3&lt;/a&gt;, which was the editor I was using at that point. I did also write a plugin for Visual Studio Code, but it was a bit rushed and I wasn’t very happy with it.&lt;/p&gt;
&lt;p&gt;Now there’s an update version of the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=kimgrytoyr.npaste&quot;&gt;npaste-vscode plugin&lt;/a&gt; with the following changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The commands for pasting is split into two: only the selected text or the current file.&lt;/li&gt;
&lt;li&gt;Updated dependencies.&lt;/li&gt;
&lt;li&gt;Changed default keyboard shortcuts to CTRL/CMD+ALT+, for pasting the selected text and CTRL/CMD+ALT+. for pasting the current file.&lt;/li&gt;
&lt;li&gt;Going forward I’m planning on rewriting the plugin completely, maybe using Typescript. There’s also one feature that npaste supports that could be very handy to have available in VSCode: Downloading a paste by its URL and opening it in a new file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stay tuned for more information about this.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Going solo</title>
    <link href="https://kim.grytoyr.io/blog/going-solo/" />
    <updated>2021-10-24T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/going-solo/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;The way to get started is to quit talking and begin doing.&lt;br&gt;
– Walt Disney&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For the last ten years, I’ve been working as an employed developer. If you have a look at my &lt;a href=&quot;https://cv.kim.grytoyr.io/&quot;&gt;CV&lt;/a&gt;, you’ll see that more than nine of these years have been spent at a local company called &lt;a href=&quot;https://info.ibooking.no/&quot;&gt;iBooking&lt;/a&gt;. Since February 2021 I’ve been hired as a backend developer at Dekode Interaktiv, doing WordPress integrations and such.&lt;/p&gt;
&lt;p&gt;During the last few years, my longing for starting my own company and employing myself as an independent consultant has been growing, day by day. And now, finally, it’s happening! From November 1st I’ll be working about two thirds of the time in my own company, &lt;a href=&quot;https://devos.no/&quot;&gt;Devos AS&lt;/a&gt;. The remaining third of my work time will be spent as an employee in a company called &lt;a href=&quot;https://info.trimpoeng.no/&quot;&gt;Trimpoeng&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve joined &lt;a href=&quot;https://brainbase.no/&quot;&gt;BrainBase&lt;/a&gt; , a network for independent IT consultants based in Norway. It’s useful both because it can be a place to find work and, evenly important, a place to socialise with and learn from other people in the same industry.&lt;/p&gt;
&lt;p&gt;The road ahead will be exciting and I’m looking forward to tackling all the challenges that surely will surface.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Nice weather = quality time</title>
    <link href="https://kim.grytoyr.io/blog/nice-weather-quality-time/" />
    <updated>2021-06-11T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/nice-weather-quality-time/</id>
    <content type="html">&lt;p&gt;Last week and especially last weekend, we had some really nice weather. We decided to spend most of the time outside on various adventures, most of them including bathing. Here are a few photos from the trips.&lt;/p&gt;
&lt;div class=&quot;image-grid&quot;&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/ELQYK-HLhA-400.avif 400w, https://kim.grytoyr.io/img/ELQYK-HLhA-800.avif 800w, https://kim.grytoyr.io/img/ELQYK-HLhA-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/ELQYK-HLhA-400.webp 400w, https://kim.grytoyr.io/img/ELQYK-HLhA-800.webp 800w, https://kim.grytoyr.io/img/ELQYK-HLhA-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/ELQYK-HLhA-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/ELQYK-HLhA-400.jpeg 400w, https://kim.grytoyr.io/img/ELQYK-HLhA-800.jpeg 800w, https://kim.grytoyr.io/img/ELQYK-HLhA-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/y1kRZczajY-400.avif 400w, https://kim.grytoyr.io/img/y1kRZczajY-800.avif 800w, https://kim.grytoyr.io/img/y1kRZczajY-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/y1kRZczajY-400.webp 400w, https://kim.grytoyr.io/img/y1kRZczajY-800.webp 800w, https://kim.grytoyr.io/img/y1kRZczajY-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/y1kRZczajY-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/y1kRZczajY-400.jpeg 400w, https://kim.grytoyr.io/img/y1kRZczajY-800.jpeg 800w, https://kim.grytoyr.io/img/y1kRZczajY-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/ITCC5-fmtT-400.avif 400w, https://kim.grytoyr.io/img/ITCC5-fmtT-800.avif 800w, https://kim.grytoyr.io/img/ITCC5-fmtT-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/ITCC5-fmtT-400.webp 400w, https://kim.grytoyr.io/img/ITCC5-fmtT-800.webp 800w, https://kim.grytoyr.io/img/ITCC5-fmtT-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/ITCC5-fmtT-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/ITCC5-fmtT-400.jpeg 400w, https://kim.grytoyr.io/img/ITCC5-fmtT-800.jpeg 800w, https://kim.grytoyr.io/img/ITCC5-fmtT-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/zas2fJblbq-400.avif 400w, https://kim.grytoyr.io/img/zas2fJblbq-800.avif 800w, https://kim.grytoyr.io/img/zas2fJblbq-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/zas2fJblbq-400.webp 400w, https://kim.grytoyr.io/img/zas2fJblbq-800.webp 800w, https://kim.grytoyr.io/img/zas2fJblbq-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/zas2fJblbq-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/zas2fJblbq-400.jpeg 400w, https://kim.grytoyr.io/img/zas2fJblbq-800.jpeg 800w, https://kim.grytoyr.io/img/zas2fJblbq-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/-DSJ22QRfm-400.avif 400w, https://kim.grytoyr.io/img/-DSJ22QRfm-800.avif 800w, https://kim.grytoyr.io/img/-DSJ22QRfm-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/-DSJ22QRfm-400.webp 400w, https://kim.grytoyr.io/img/-DSJ22QRfm-800.webp 800w, https://kim.grytoyr.io/img/-DSJ22QRfm-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/-DSJ22QRfm-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/-DSJ22QRfm-400.jpeg 400w, https://kim.grytoyr.io/img/-DSJ22QRfm-800.jpeg 800w, https://kim.grytoyr.io/img/-DSJ22QRfm-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/HRhWpjqwKP-400.avif 400w, https://kim.grytoyr.io/img/HRhWpjqwKP-800.avif 800w, https://kim.grytoyr.io/img/HRhWpjqwKP-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/HRhWpjqwKP-400.webp 400w, https://kim.grytoyr.io/img/HRhWpjqwKP-800.webp 800w, https://kim.grytoyr.io/img/HRhWpjqwKP-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/HRhWpjqwKP-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/HRhWpjqwKP-400.jpeg 400w, https://kim.grytoyr.io/img/HRhWpjqwKP-800.jpeg 800w, https://kim.grytoyr.io/img/HRhWpjqwKP-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;grid&quot;&gt;
    &lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://kim.grytoyr.io/img/0n6fbZcJww-400.avif 400w, https://kim.grytoyr.io/img/0n6fbZcJww-800.avif 800w, https://kim.grytoyr.io/img/0n6fbZcJww-1200.avif 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://kim.grytoyr.io/img/0n6fbZcJww-400.webp 400w, https://kim.grytoyr.io/img/0n6fbZcJww-800.webp 800w, https://kim.grytoyr.io/img/0n6fbZcJww-1200.webp 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;img src=&quot;https://kim.grytoyr.io/img/0n6fbZcJww-400.jpeg&quot; alt=&quot;&quot; class=&quot;w-full&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://kim.grytoyr.io/img/0n6fbZcJww-400.jpeg 400w, https://kim.grytoyr.io/img/0n6fbZcJww-800.jpeg 800w, https://kim.grytoyr.io/img/0n6fbZcJww-1200.jpeg 1200w&quot; sizes=&quot;(min-width: 768px) 100vw, 100vw&quot;&gt;&lt;/picture&gt;
  &lt;/figure&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>wp shell</title>
    <link href="https://kim.grytoyr.io/blog/wp-shell/" />
    <updated>2021-06-10T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/wp-shell/</id>
    <content type="html">&lt;p&gt;If you’re a WordPress backend developer and don’t use wp shell, you &lt;strong&gt;must&lt;/strong&gt; continue reading.&lt;/p&gt;
&lt;p&gt;I have this imaginary plugin that is used to fetch some data from a third-party service and store every item as a post of a custom post type. Now I need to figure out how something deep down in this very complex integration works, but there’s a problem: To be able to test it locally I’d have to start an import that will fetch GB’s of data that I don’t need. Only to simulate what happens when a specific function is being executed as part of that import. wp shell to the rescue!&lt;/p&gt;
&lt;p&gt;Let’s say that there’s an &lt;code&gt;&#92;ImaginaryPlugin&#92;format_description( string $description )&lt;/code&gt; function that is the function we’d like to test or debug. There’s also an &lt;code&gt;ImaginaryPlugin&#92;get_item( int $item_id )&lt;/code&gt; function that can be used to get an item. Testing it on an existing item is as simple as this:&lt;/p&gt;
&lt;pre class=&quot;language-php&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-php&quot;&gt;$ wp shell

wp&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;ImaginaryPlugin&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;get_item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token string single-quoted-string&quot;&gt;&#39;id&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword type-declaration&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;123&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token string single-quoted-string&quot;&gt;&#39;name&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;Test&quot;&lt;/span&gt;
  &lt;span class=&quot;token string single-quoted-string&quot;&gt;&#39;description&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
  &lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;This_is_a_test&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

wp&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;ImaginaryPlugin&lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;format_description&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$item&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string single-quoted-string&quot;&gt;&#39;description&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword type-declaration&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token string double-quoted-string&quot;&gt;&quot;This is a test&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Awesome! Being able to do this can make debugging or testing a breeze compared to actually testing things by refreshing the web page or running new imports over and over again.&lt;/p&gt;
&lt;p&gt;There are of course other ways to test this specific and rather bad example, but the point of this post still stands: wp shell is &lt;strong&gt;very&lt;/strong&gt; useful!&lt;/p&gt;
&lt;p&gt;In general, the whole WP CLI project is an addition to WordPress that I find extremely useful. If you’re not familiar with it, check it out: &lt;a href=&quot;https://wp-cli.org/&quot;&gt;https://wp-cli.org/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Interval running with Myworkout GO</title>
    <link href="https://kim.grytoyr.io/blog/interval-running-with-myworkout-go/" />
    <updated>2021-06-06T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/interval-running-with-myworkout-go/</id>
    <content type="html">&lt;p&gt;I happen to know some of the people involved with the app &lt;a href=&quot;https://myworkout.com/&quot;&gt;Myworkout GO&lt;/a&gt;. On their website, they claim the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do more than one 4×4 workout sessions per week to increase your cardiac capacity by +0,5% per week.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you do two a week you’ll keep the health of a 20 year-old until you are 70 years old.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m in no position to claim that these statements are incorrect – or correct, for that matter. But I’m an optimist and I’d like to believe that it’s true. According to their own website, these statements are based on «25 years of research at the Norwegian University of Science and Technology».&lt;/p&gt;
&lt;p&gt;Anyhow, there’s no doubt that interval running is healthy and an efficient way to improve your health, so I’m giving it a shot. From next week, I’ll replace at least one of my &lt;a href=&quot;https://kim.grytoyr.io/blog/running-challenge&quot;&gt;weekly runs&lt;/a&gt; with a session of interval running, and we’ll see how that will affect my regular runs.&lt;/p&gt;
&lt;p&gt;If you’re interested in learning more about the Myworkout project, you can find their website here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://myworkout.com/en/&quot;&gt;https://myworkout.com/en/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>npaste – a simple paste bin</title>
    <link href="https://kim.grytoyr.io/blog/npaste-a-simple-paste-bin/" />
    <updated>2021-06-04T00:00:00Z</updated>
    <id>https://kim.grytoyr.io/blog/npaste-a-simple-paste-bin/</id>
    <content type="html">&lt;p&gt;At work, I often need to share secrets and other important information with my colleagues. We use Slack to communicate with each other, and that’s good enough for the most part. Now and then, we share secret stuff. Like, top secret. There are many paste bins on the internet that we could use, but I don’t really trust them for these things. So I created my own: &lt;strong&gt;npaste&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;npaste is a very simple paste bin that supports both images and text. It uses GPG to encrypt pastes before they are uploaded to the server. The encryption key is appended to the URL after a hashbang on the client uploading the paste, so the server never knows about the key. In the browser, the paste is decrypted using OpenGPG.&lt;/p&gt;
&lt;p&gt;The npaste cli client supports downloading pastes, both encrypted and non-encrypted. I haven’t spent much time perfecting the project, so contributions to it are very welcome. Let’s have a look at how it works!&lt;/p&gt;
&lt;h2 id=&quot;uploading-text&quot;&gt;Uploading text&lt;/h2&gt;
&lt;p&gt;Let’s say you have some super secret text that you’d like to share with your colleague. You store it in a file named &lt;code&gt;super-secret.txt&lt;/code&gt; and then run the following command:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npaste &lt;span class=&quot;token parameter variable&quot;&gt;--encrypt&lt;/span&gt; --no-archive&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;1h super-secret.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The npaste client will do all the dirty work and return a URL (it’s also copied to the clipboard automatically):&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;https://paste.yourdomain.com/68678632939f75e9bbd0a4f8&lt;span class=&quot;token comment&quot;&gt;#e61ac5c997098e59337b653a27fcff27&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;By specifying the &lt;code&gt;--no-archive=1&lt;/code&gt; flag, you tell the server to physically delete this paste after it expires, as opposed to just archiving it. The &lt;code&gt;--age=1h&lt;/code&gt; flag tells the server to set the expiration of the paste to one hour in the future.&lt;/p&gt;
&lt;h2 id=&quot;uploading-images&quot;&gt;Uploading images&lt;/h2&gt;
&lt;p&gt;There’s really nothing else you’d have to do if you wanted to upload an image instead. The CLI script will take care of all the dirty work, so the command is exactly the same:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npaste &lt;span class=&quot;token parameter variable&quot;&gt;--encrypt&lt;/span&gt; --no-archive&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-age&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;1h super-secret.jpg&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Behind the scenes, the image will be Base64 encoded before being encrypted, and in the browser it will be decoded after being decrypted.&lt;/p&gt;
&lt;h2 id=&quot;downloading-a-paste&quot;&gt;Downloading a paste&lt;/h2&gt;
&lt;p&gt;If someone sends you an npaste link and you’d like to download it to your computer, it’s as simple as this:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;npaste &lt;span class=&quot;token parameter variable&quot;&gt;--get&lt;/span&gt; https://paste.yourdomain.com/68678632939f75e9bbd0a4f8&lt;span class=&quot;token comment&quot;&gt;#e61ac5c997098e59337b653a27fcff27&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The CLI script will figure out that this paste needs to be decrypted and it will store it in a file with the same name as the paste ID. You can then open it in your editor of choice to edit it.&lt;/p&gt;
&lt;h2 id=&quot;contributions-are-welcome&quot;&gt;Contributions are welcome&lt;/h2&gt;
&lt;p&gt;If you’re interested in contributing to the project, feel free to do so. It lives over on my private Gitea server:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://src.grytoyr.io/kim/npaste/&quot;&gt;https://src.grytoyr.io/kim/npaste/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
</feed>