codeskraps 6 kuukautta sitten
vanhempi
sitoutus
c523089f6c
51 muutettua tiedostoa jossa 1882 lisäystä ja 886 poistoa
  1. BIN
      .DS_Store
  2. 3 0
      .gitmodules
  3. 0 4
      content/about.md
  4. 40 0
      content/about/index.md
  5. 1 0
      content/posts/mvi_architecture.md
  6. 17 0
      content/projects/index.md
  7. 60 2
      hugo.toml
  8. 12 0
      layouts/about/single.html
  9. 1 0
      layouts/shortcodes/line_break.html
  10. BIN
      public/.DS_Store
  11. 83 0
      public/404.html
  12. 87 114
      public/about/index.html
  13. 62 91
      public/categories/index.html
  14. 6 3
      public/categories/index.xml
  15. 1 0
      public/css/style.min.36c061153203db94fc1169914d07c49c3a537a11316e9ffbd4c7a511df482d8d.css
  16. 1 0
      public/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css
  17. BIN
      public/fonts/FiraMono/FiraMono-Medium.eot
  18. BIN
      public/fonts/FiraMono/FiraMono-Medium.otf
  19. BIN
      public/fonts/FiraMono/FiraMono-Medium.ttf
  20. BIN
      public/fonts/FiraMono/FiraMono-Medium.woff
  21. BIN
      public/fonts/FiraMono/FiraMono-Medium.woff2
  22. BIN
      public/fonts/OpenSans/OpenSans-Regular.eot
  23. BIN
      public/fonts/OpenSans/OpenSans-Regular.ttf
  24. BIN
      public/fonts/OpenSans/OpenSans-Regular.woff
  25. BIN
      public/images/weekly_weather_logo.webp
  26. 80 106
      public/index.html
  27. 18 3
      public/index.xml
  28. 3 3
      public/page/1/index.html
  29. 159 82
      public/posts/index.html
  30. 11 3
      public/posts/index.xml
  31. 82 258
      public/posts/mvi_architecture/index.html
  32. 77 126
      public/posts/my-first-post/index.html
  33. 98 0
      public/projects/index.html
  34. 26 5
      public/sitemap.xml
  35. 181 0
      public/tags/android/index.html
  36. 17 0
      public/tags/android/index.xml
  37. 122 83
      public/tags/index.html
  38. 35 3
      public/tags/index.xml
  39. 181 0
      public/tags/kmp/index.html
  40. 17 0
      public/tags/kmp/index.xml
  41. 181 0
      public/tags/kotlin/index.html
  42. 17 0
      public/tags/kotlin/index.xml
  43. 181 0
      public/tags/mvi/index.html
  44. 17 0
      public/tags/mvi/index.xml
  45. 1 0
      resources/_gen/assets/sass/main.scss_614f236ad197e48376b133d2d4574a2e.content
  46. 1 0
      resources/_gen/assets/sass/main.scss_614f236ad197e48376b133d2d4574a2e.json
  47. 1 0
      resources/_gen/assets/sass/main.scss_d6ea8142f6fedb58f8eb9ee253edcb3c.content
  48. 1 0
      resources/_gen/assets/sass/main.scss_d6ea8142f6fedb58f8eb9ee253edcb3c.json
  49. BIN
      static/.DS_Store
  50. BIN
      static/images/weekly_weather_logo.webp
  51. 1 0
      themes/nightfall

BIN
.DS_Store


+ 3 - 0
.gitmodules

@@ -1,3 +1,6 @@
 [submodule "themes/hugo-theme-flat"]
 	path = themes/hugo-theme-flat
 	url = git@github.com:leafee98/hugo-theme-flat.git
+[submodule "themes/images"]
+	path = themes/images
+	url = git@github.com:hugomods/images.git

+ 0 - 4
content/about.md

@@ -1,4 +0,0 @@
-+++
-menus = 'main'
-title = 'About'
-+++

+ 40 - 0
content/about/index.md

@@ -0,0 +1,40 @@
+---
+title: 'About Me'
+type: about
+weight: 20
+---
+I'm a passionate and highly motivated software engineer with a deep-rooted love for technology that dates back to my first computer, an Amstrad 8256. From those early days of programming as a hobby, I've turned my passion into a successful career, specializing in mobile development with a focus on Android.
+
+## Professional Journey
+
+Currently, I'm leading the mobile team at Game Golf, where I oversee all aspects of our mobile app development. My experience spans various domains, including:
+
+- Android app development and maintenance
+- iOS development
+- Backend technologies like Spring Framework and RESTful APIs
+- Working in fast-paced, agile environments
+
+Throughout my career, I've contributed to award-winning apps and worked with startups and established companies alike. I take pride in writing clean, efficient code and designing scalable solutions that adhere to best practices in object-oriented programming.
+
+## Technical Expertise
+
+My skill set includes:
+
+- Proficiency in Java, Kotlin, and Android SDK
+- Experience with iOS development
+- Familiarity with various libraries and frameworks (RxJava, Dagger2, Room, LiveData, etc.)
+- Version control with Git
+- Database technologies (SQLite, MongoDB)
+- Some web development (HTML, CSS, JavaScript)
+
+I'm always eager to learn and stay up-to-date with the latest trends in technology, particularly in the mobile development world.
+
+## Beyond Coding
+
+Outside of my professional work, I'm an active member of the tech community. I co-founded 091 Labs, a local hackerspace, where I've conducted workshops on Android development. I'm also passionate about open-source projects and have contributed to various initiatives on GitHub and Launchpad.
+
+As a multilingual professional fluent in English, Catalan, and Spanish, I bring a global perspective to my work and enjoy collaborating with diverse teams.
+
+Whether it's developing innovative mobile applications, contributing to open-source projects, or sharing knowledge with aspiring developers, I'm always excited to take on new challenges in the ever-evolving world of technology.
+
+Feel free to check out my work on [GitHub](https://github.com/codeskraps) or my published apps on the [Google Play Store](https://play.google.com/store/apps/developer?id=Codeskraps).

+ 1 - 0
content/posts/mvi_architecture.md

@@ -1,6 +1,7 @@
 +++
 title = 'MVI Architecture Helper'
 date = 2024-09-27T13:45:09+02:00
+tags = ['kotlin', 'kmp', 'android', 'mvi']
 draft = true
 +++
 Something smart to talk about this helper class

+ 17 - 0
content/projects/index.md

@@ -0,0 +1,17 @@
++++
+title = 'Projects'
+type = 'about'
++++
+![logo](/imagesweekly_weather_logo.webp)
+
+![logo2](https://github.com/codeskraps/Weekly-Weather/blob/main/app/src/main/web_hi_res_512.png)
+
+# Weekly-Weather
+
+A quick view of your weekly weather
+
+A quick overview of you weekly weather of your current location or search and save your favourite locations for easy access.
+
+Save a GPS weather location with a custom name.
+
+App translated into 37 languages.

+ 60 - 2
hugo.toml

@@ -1,5 +1,63 @@
 baseURL = 'https://codeskraps.com/'
 languageCode = 'en-us'
 title = 'codeskraps'
-theme = 'hugo-theme-flat'
-sectionPagesMenu = 'main'
+theme = 'nightfall'
+
+[module]
+  [[module.imports]]
+    path = 'github.com/hugomods/images'
+
+[menu]
+   [[menu.header]]
+        name = "posts"
+        url = "/posts/"
+        weight = 0
+    [[menu.header]]
+        name = "projects"
+	url = "/projects/"
+        weight = 1
+    [[menu.header]]
+        name = "about"
+        url = "/about/"
+        weight = 2
+
+[params]
+user = "me"
+hostname = "codeskraps.com"
+sitedescription = 'Your website description'
+readingTime = true
+published = true
+footerHtml = 'CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme'
+
+    [params.author]
+        name = "codeskraps"
+        email = "me@codeskraps.com"
+
+    [params.styles]
+        color = "orange"
+
+[[params.social]]
+key = 0
+name = "github"
+url = "https://github.com/codeskraps"
+target = "_blank"
+aria = "GitHub Profile"
+
+[[params.social]]
+key = 1
+name = "google play"
+url = "https://play.google.com/store/apps/developer?id=Codeskraps"
+aria = "Google Play"
+
+[[params.social]]
+key = 2
+name = "linkedin"
+url = "https://www.linkedin.com/in/carles-sentis-4a072130"
+aria = "LinkedIn Profile"
+
+[[params.social]]
+key = 3
+name = "email"
+url = "mailto:me@codeskraps.com"
+aria = "Email me"
+

+ 12 - 0
layouts/about/single.html

@@ -0,0 +1,12 @@
+{{ define "main" }}
+  <article>
+      <header>
+        <h1>
+          {{ .Title }}
+        </h1>
+      </header>
+
+      {{ .Content }}
+    </div>
+  </article>
+{{ end }}

+ 1 - 0
layouts/shortcodes/line_break.html

@@ -0,0 +1 @@
+<br />

BIN
public/.DS_Store


+ 83 - 0
public/404.html

@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+404 | codeskraps
+</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/404.html" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+<h1>NOT FOUND</h1>
+<p>You just hit a route that doesn&#39;t exist...</p>
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

+ 87 - 114
public/about/index.html

@@ -1,144 +1,117 @@
 <!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+        codeskraps
+        </title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>About | codeskraps</title>
-<link rel="canonical" href="https://codeskraps.com/about/">
-<meta property="og:type" content="article" />
-<meta property="og:title" content="About | codeskraps" />
-<meta property="og:url" content="https://codeskraps.com/about/" />
 
+<link rel="canonical" href="http://localhost:49905/about/" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
     <div class="header">
-        <a class="site-title" href="https://codeskraps.com/">codeskraps</a>
-
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
-
-<section class="single">
-    <h1 class="title">About</h1>
-
-    <div class="tip">
-        <time datetime="0001-01-01 00:00:00 &#43;0000 UTC">0001/01/01</time>
-        <span class="split">·</span>
-        <span> 0 words </span>
-        <span class="split">·</span>
-        <span>
-            0 minutes to read
-        </span>
-    </div>
-
-    <div class="taxonomies">
-        
-
-        
-    </div>
 
-    <hr />
+        <div class="content">
+            <main class="main">
+                
+  <article>
+      <header>
+        <h1>
+          About Me
+        </h1>
+      </header>
+
+      <p>I&rsquo;m a passionate and highly motivated software engineer with a deep-rooted love for technology that dates back to my first computer, an Amstrad 8256. From those early days of programming as a hobby, I&rsquo;ve turned my passion into a successful career, specializing in mobile development with a focus on Android.</p>
+<h2 id="professional-journey">Professional Journey</h2>
+<p>Currently, I&rsquo;m leading the mobile team at Game Golf, where I oversee all aspects of our mobile app development. My experience spans various domains, including:</p>
+<ul>
+<li>Android app development and maintenance</li>
+<li>iOS development</li>
+<li>Backend technologies like Spring Framework and RESTful APIs</li>
+<li>Working in fast-paced, agile environments</li>
+</ul>
+<p>Throughout my career, I&rsquo;ve contributed to award-winning apps and worked with startups and established companies alike. I take pride in writing clean, efficient code and designing scalable solutions that adhere to best practices in object-oriented programming.</p>
+<h2 id="technical-expertise">Technical Expertise</h2>
+<p>My skill set includes:</p>
+<ul>
+<li>Proficiency in Java, Kotlin, and Android SDK</li>
+<li>Experience with iOS development</li>
+<li>Familiarity with various libraries and frameworks (RxJava, Dagger2, Room, LiveData, etc.)</li>
+<li>Version control with Git</li>
+<li>Database technologies (SQLite, MongoDB)</li>
+<li>Some web development (HTML, CSS, JavaScript)</li>
+</ul>
+<p>I&rsquo;m always eager to learn and stay up-to-date with the latest trends in technology, particularly in the mobile development world.</p>
+<h2 id="beyond-coding">Beyond Coding</h2>
+<p>Outside of my professional work, I&rsquo;m an active member of the tech community. I co-founded 091 Labs, a local hackerspace, where I&rsquo;ve conducted workshops on Android development. I&rsquo;m also passionate about open-source projects and have contributed to various initiatives on GitHub and Launchpad.</p>
+<p>As a multilingual professional fluent in English, Catalan, and Spanish, I bring a global perspective to my work and enjoy collaborating with diverse teams.</p>
+<p>Whether it&rsquo;s developing innovative mobile applications, contributing to open-source projects, or sharing knowledge with aspiring developers, I&rsquo;m always excited to take on new challenges in the ever-evolving world of technology.</p>
+<p>Feel free to check out my work on <a href="https://github.com/codeskraps">GitHub</a> or my published apps on the <a href="https://play.google.com/store/apps/developer?id=Codeskraps">Google Play Store</a>.</p>
 
-    <div class="content">
-        
     </div>
+  </article>
 
-    
-</section>
-
+            </main>
+        </div>
 
-            </div>
-            <div class="side">
-                
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
-</div>
 
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
-</div>
-
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
-</div>
-
-            </div>
-        </main>
         <footer class="footer">
-    <div class="footer-row">
-        
-            
-            
-                <a class="footer-item" href="https://codeskraps.com/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
-
-        
-            
-            
-        
-    </div>
-
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

+ 62 - 91
public/categories/index.html

@@ -1,125 +1,96 @@
 <!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Categories | codeskraps
+</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>codeskraps</title>
-<link rel="canonical" href="https://codeskraps.com/categories/">
-<meta property="og:type" content="article" />
-<meta property="og:title" content="codeskraps" />
-<meta property="og:url" content="https://codeskraps.com/categories/" />
-<link rel="alternate" type="application/rss+xml" href="https://codeskraps.com/categories/index.xml" title="codeskraps" />
 
+<link rel="canonical" href="http://localhost:49905/categories/" >
+  <link href="http://localhost:49905/categories/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/categories/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
     <div class="header">
-        <a class="site-title" href="https://codeskraps.com/">codeskraps</a>
-
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
-    <section id="tags">
-        
-        
-    </section>
 
-            </div>
-            <div class="side">
+        <div class="content">
+            <main class="main">
                 
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
 
-    <ul>
-        
-    </ul>
-</div>
+<div>
+    <div class="listHeader">
+        <h1>Categories</h1>
+    </div>
 
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
+    
 
-    <ul>
+    <div>
         
-    </ul>
+    </div>
 </div>
 
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
 
-    <ul>
-        
-    </ul>
-</div>
+            </main>
+        </div>
 
-            </div>
-        </main>
-        <footer class="footer">
-    <div class="footer-row">
-        
-            
-            
-                <a class="footer-item" href="https://codeskraps.com/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
-
-        
-            
-            
-                <a class="footer-item" href="https://codeskraps.com/categories/index.xml">
-                    Feed of "Categories"
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
-    </div>
 
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

+ 6 - 3
public/categories/index.xml

@@ -2,9 +2,12 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Categories on codeskraps</title>
-    <link>https://codeskraps.com/categories/</link>
+    <link>http://localhost:49905/categories/</link>
     <description>Recent content in Categories on codeskraps</description>
-    <generator>Hugo -- gohugo.io</generator>
-    <language>en-us</language><atom:link href="https://codeskraps.com/categories/index.xml" rel="self" type="application/rss+xml" />
+    <generator>Hugo</generator>
+    <language>en-us</language>
+    <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
+    <webMaster>me@codeskraps.com (codeskraps)</webMaster>
+    <atom:link href="http://localhost:49905/categories/index.xml" rel="self" type="application/rss+xml" />
   </channel>
 </rss>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
public/css/style.min.36c061153203db94fc1169914d07c49c3a537a11316e9ffbd4c7a511df482d8d.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
public/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css


BIN
public/fonts/FiraMono/FiraMono-Medium.eot


BIN
public/fonts/FiraMono/FiraMono-Medium.otf


BIN
public/fonts/FiraMono/FiraMono-Medium.ttf


BIN
public/fonts/FiraMono/FiraMono-Medium.woff


BIN
public/fonts/FiraMono/FiraMono-Medium.woff2


BIN
public/fonts/OpenSans/OpenSans-Regular.eot


BIN
public/fonts/OpenSans/OpenSans-Regular.ttf


BIN
public/fonts/OpenSans/OpenSans-Regular.woff


BIN
public/images/weekly_weather_logo.webp


+ 80 - 106
public/index.html

@@ -1,144 +1,118 @@
 <!DOCTYPE html>
-<html>
-    <head>
-	<meta name="generator" content="Hugo 0.134.3">
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+        Home | codeskraps
+    </title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>codeskraps</title>
-<link rel="canonical" href="https://codeskraps.com/">
-<meta property="og:type" content="article" />
-<meta property="og:title" content="codeskraps" />
-<meta property="og:url" content="https://codeskraps.com/" />
-<link rel="alternate" type="application/rss+xml" href="https://codeskraps.com/index.xml" title="codeskraps" />
 
+<link rel="canonical" href="http://localhost:49905/" >
+  <link href="http://localhost:49905/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
-    <div class="header">
-        <a class="site-title" href="https://codeskraps.com/">codeskraps</a>
+<body>
 
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
 
-<div class="max-wrapper">
-    <div id="list-page">
-        
-        
-        
-
-    </div>
-    
-
-<nav class="pagination">
-
-    
-    
-    
-    
-    
+        <div class="content vertical">
+            <main class="main">
+                <div class="indexWrapper">
+                    <div>
+                        <h1 class="indexHeader">codeskraps</h1>
+                    </div>
+                    
+                        <div class="socialNavbar">
+    <ul>
         
+        <li>
             
+                <a href="https://github.com/codeskraps"  target="_blank"  aria-label="GitHub Profile"   >github</a>
             
-
+        </li>
+        
+        <li>
             
-                <a class="enabled current" href="/">1</a>
+                <a href="https://play.google.com/store/apps/developer?id=Codeskraps"  >google play</a>
             
-
+        </li>
         
-    
-
-</nav>
-</div>
-
-            </div>
-            <div class="side">
-                
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
-
-    <ul>
+        <li>
+            
+                <a href="https://www.linkedin.com/in/carles-sentis-4a072130"  >linkedin</a>
+            
+        </li>
         
-    </ul>
-</div>
-
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
-
-    <ul>
+        <li>
+            
+                <a href="mailto:me@codeskraps.com"  >email</a>
+            
+        </li>
         
     </ul>
 </div>
 
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
+                    
+                </div>
+            </main>
+        </div>
 
-    <ul>
-        
-    </ul>
-</div>
 
-            </div>
-        </main>
         <footer class="footer">
-    <div class="footer-row">
-        
-            
-            
-                <a class="footer-item" href="https://codeskraps.com/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
-
-        
-    </div>
-
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 18 - 3
public/index.xml


+ 3 - 3
public/page/1/index.html

@@ -1,10 +1,10 @@
 <!DOCTYPE html>
 <html lang="en-us">
   <head>
-    <title>https://codeskraps.com/</title>
-    <link rel="canonical" href="https://codeskraps.com/">
+    <title>http://localhost:51444/</title>
+    <link rel="canonical" href="http://localhost:51444/">
     <meta name="robots" content="noindex">
     <meta charset="utf-8">
-    <meta http-equiv="refresh" content="0; url=https://codeskraps.com/">
+    <meta http-equiv="refresh" content="0; url=http://localhost:51444/">
   </head>
 </html>

+ 159 - 82
public/posts/index.html

@@ -1,123 +1,200 @@
 <!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Posts | codeskraps
+</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>codeskraps</title>
-<link rel="canonical" href="https://codeskraps.com/posts/">
-<meta property="og:type" content="article" />
-<meta property="og:title" content="codeskraps" />
-<meta property="og:url" content="https://codeskraps.com/posts/" />
-<link rel="alternate" type="application/rss+xml" href="https://codeskraps.com/posts/index.xml" title="codeskraps" />
 
+<link rel="canonical" href="http://localhost:49905/posts/" >
+  <link href="http://localhost:49905/posts/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/posts/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
-    <div class="header">
-        <a class="site-title" href="https://codeskraps.com/">codeskraps</a>
+<body>
 
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
+
+        <div class="content">
+            <main class="main">
                 
 
 <div>
+    <div class="listHeader">
+        <h1>Posts</h1>
+    </div>
+
     
 
-    <section id="archive">
+    <div>
         
 
-    </section>
-</div>
-
-
+        <a class="postListLink" href="http://localhost:49905/posts/mvi_architecture/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">MVI Architecture Helper</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><p>Something smart to talk about this helper class</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.withType(<span style="color:#66d9ef">crossinline</span> block: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>    withState { state <span style="color:#f92672">-&gt;</span>
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (state <span style="color:#66d9ef">is</span> TYPE) {
+</span></span><span style="display:flex;"><span>            block(state)
+</span></span><span style="display:flex;"><span>        }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.updateWithType(<span style="color:#66d9ef">crossinline</span> transform: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> TYPE) {
+</span></span><span style="display:flex;"><span>    withType&lt;TYPE, STATE&gt; { state <span style="color:#f92672">-&gt;</span> updateState { transform(state) } }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateProvider</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentReceiver</span>&lt;INTENT&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionProvider</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionReceiver</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateModule</span>&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentModule</span>&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionModule</span>&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">MVIViewModel</span>&lt;STATE, INTENT, ACTION&gt; :
+</span></span><span style="display:flex;"><span>    StateModule&lt;STATE&gt;,
+</span></span><span style="display:flex;"><span>    IntentModule&lt;INTENT&gt;,
+</span></span><span style="display:flex;"><span>    ActionModule&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MVIViewModelDelegate</span>&lt;STATE, INTENT, ACTION&gt;(
+</span></span><span style="display:flex;"><span>    initial: STATE
+</span></span><span style="display:flex;"><span>) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _state = MutableStateFlow(initial)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _action = Channel&lt;ACTION&gt;()
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE) {
+</span></span><span style="display:flex;"><span>        _state.update { transform(<span style="color:#66d9ef">it</span>) }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>        block(_state.<span style="color:#66d9ef">value</span>)
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION) {
+</span></span><span style="display:flex;"><span>        _action.trySend(block())
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> NotImplementedError()
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
+                </div>
             </div>
-            <div class="side">
-                
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
+        </a>
 
-    <ul>
-        
-    </ul>
-</div>
-
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
 
-    <ul>
         
-    </ul>
-</div>
 
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
+        <a class="postListLink" href="http://localhost:49905/posts/my-first-post/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">My First Post</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><h2 id="introduction">Introduction</h2>
+<p>This is <strong>bold</strong> text, and this is <em>emphasized</em> text.</p>
+<p>Visit the <a href="https://gohugo.io">Hugo</a> website!</p></p>
+                </div>
+            </div>
+        </a>
+
 
-    <ul>
         
-    </ul>
+    </div>
 </div>
 
-            </div>
-        </main>
-        <footer class="footer">
-    <div class="footer-row">
-        
-            
-            
-                <a class="footer-item" href="https://codeskraps.com/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
 
-        
-    </div>
+            </main>
+        </div>
+
 
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 11 - 3
public/posts/index.xml


+ 82 - 258
public/posts/mvi_architecture/index.html

@@ -1,220 +1,99 @@
 <!DOCTYPE html>
-<html>
-    <head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+MVI Architecture Helper | codeskraps
+</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>MVI Architecture Helper | codeskraps</title>
-<link rel="canonical" href="http://localhost:1313/posts/mvi_architecture/">
-<meta name="description" content="Something smart to talk about this helper class
-interface StateReceiver&lt;STATE&gt; {
-    suspend fun updateState(transform: suspend (STATE) -&gt; STATE)
-    suspend fun withState(block: suspend (STATE) -&gt; Unit)
-}
 
-suspend inline fun &lt;reified TYPE : STATE, STATE&gt; StateReceiver&lt;STATE&gt;.withType(crossinline block: suspend (TYPE) -&gt; Unit) {
-    withState { state -&gt;
-        if (state is TYPE) {
-            block(state)
-        }
-    }
-}
+<link rel="canonical" href="http://localhost:49905/posts/mvi_architecture/" >
 
-suspend inline fun &lt;reified TYPE : STATE, STATE&gt; StateReceiver&lt;STATE&gt;.updateWithType(crossinline transform: suspend (TYPE) -&gt; TYPE) {
-    withType&lt;TYPE, STATE&gt; { state -&gt; updateState { transform(state) } }
-}
 
-interface StateProvider&lt;STATE&gt; {
-    val state: StateFlow&lt;STATE&gt;
-}
 
-interface IntentReceiver&lt;INTENT&gt; {
-    fun handleIntent(intent: INTENT)
-}
 
-interface ActionProvider&lt;ACTION&gt; {
-    val action: Flow&lt;ACTION&gt;
-}
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
-interface ActionReceiver&lt;ACTION&gt; {
-    suspend fun sendAction(block: suspend () -&gt; ACTION)
-}
 
-interface StateModule&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
-interface IntentModule&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
-interface ActionModule&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
 
-interface MVIViewModel&lt;STATE, INTENT, ACTION&gt; :
-    StateModule&lt;STATE&gt;,
-    IntentModule&lt;INTENT&gt;,
-    ActionModule&lt;ACTION&gt;
 
-class MVIViewModelDelegate&lt;STATE, INTENT, ACTION&gt;(
-    initial: STATE
-) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</head>
 
-    private val _state = MutableStateFlow(initial)
-    override val state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+<body>
 
-    private val _action = Channel&lt;ACTION&gt;()
-    override val action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
-
-    override suspend fun updateState(transform: suspend (STATE) -&gt; STATE) {
-        _state.update { transform(it) }
-    }
-
-    override suspend fun withState(block: suspend (STATE) -&gt; Unit) {
-        block(_state.value)
-    }
-
-    override suspend fun sendAction(block: suspend () -&gt; ACTION) {
-        _action.trySend(block())
-    }
-
-    override fun handleIntent(intent: INTENT) {
-        throw NotImplementedError()
-    }
-}" />
-<meta property="og:type" content="article" />
-<meta property="og:title" content="MVI Architecture Helper | codeskraps" />
-<meta property="og:url" content="http://localhost:1313/posts/mvi_architecture/" />
-<meta property="og:description" content="Something smart to talk about this helper class
-interface StateReceiver&lt;STATE&gt; {
-    suspend fun updateState(transform: suspend (STATE) -&gt; STATE)
-    suspend fun withState(block: suspend (STATE) -&gt; Unit)
-}
-
-suspend inline fun &lt;reified TYPE : STATE, STATE&gt; StateReceiver&lt;STATE&gt;.withType(crossinline block: suspend (TYPE) -&gt; Unit) {
-    withState { state -&gt;
-        if (state is TYPE) {
-            block(state)
-        }
-    }
-}
-
-suspend inline fun &lt;reified TYPE : STATE, STATE&gt; StateReceiver&lt;STATE&gt;.updateWithType(crossinline transform: suspend (TYPE) -&gt; TYPE) {
-    withType&lt;TYPE, STATE&gt; { state -&gt; updateState { transform(state) } }
-}
-
-interface StateProvider&lt;STATE&gt; {
-    val state: StateFlow&lt;STATE&gt;
-}
-
-interface IntentReceiver&lt;INTENT&gt; {
-    fun handleIntent(intent: INTENT)
-}
-
-interface ActionProvider&lt;ACTION&gt; {
-    val action: Flow&lt;ACTION&gt;
-}
-
-interface ActionReceiver&lt;ACTION&gt; {
-    suspend fun sendAction(block: suspend () -&gt; ACTION)
-}
-
-interface StateModule&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
-interface IntentModule&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
-interface ActionModule&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
-
-interface MVIViewModel&lt;STATE, INTENT, ACTION&gt; :
-    StateModule&lt;STATE&gt;,
-    IntentModule&lt;INTENT&gt;,
-    ActionModule&lt;ACTION&gt;
-
-class MVIViewModelDelegate&lt;STATE, INTENT, ACTION&gt;(
-    initial: STATE
-) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
-
-    private val _state = MutableStateFlow(initial)
-    override val state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
-
-    private val _action = Channel&lt;ACTION&gt;()
-    override val action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
-
-    override suspend fun updateState(transform: suspend (STATE) -&gt; STATE) {
-        _state.update { transform(it) }
-    }
-
-    override suspend fun withState(block: suspend (STATE) -&gt; Unit) {
-        block(_state.value)
-    }
-
-    override suspend fun sendAction(block: suspend () -&gt; ACTION) {
-        _action.trySend(block())
-    }
-
-    override fun handleIntent(intent: INTENT) {
-        throw NotImplementedError()
-    }
-}" />
-
-
-
-
-
-
-
-
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
-
-    </head>
-
-    <body>
-        <header class="header-wrapper">
+    <div class="flexWrapper">
+        <header class="headerWrapper">
     <div class="header">
-        <a class="site-title" href="http://localhost:1313/">codeskraps</a>
-
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
-
-<section class="single">
-    <h1 class="title">MVI Architecture Helper</h1>
-
-    <div class="tip">
-        <time datetime="2024-09-27 13:45:09 &#43;0200 CEST">2024/09/27</time>
-        <span class="split">·</span>
-        <span> 213 words </span>
-        <span class="split">·</span>
-        <span>
-            1 minutes to read
-        </span>
-    </div>
 
-    <div class="taxonomies">
-        
-
-        
-    </div>
-
-    <hr />
-
-    <div class="content">
+        <div class="content">
+            <main class="main">
+                
+<div class="postWrapper">
+    <h1>MVI Architecture Helper</h1>
+    
+    
+    <section class="postMetadata">
+        <dl>
+            
+                
+<dt>tags</dt>
+<dd><span></span>
+    <a href="/tags/kotlin/">#Kotlin</a><span></span>
+    <a href="/tags/kmp/">#Kmp</a><span></span>
+    <a href="/tags/android/">#Android</a><span></span>
+    <a href="/tags/mvi/">#Mvi</a></dd>
+            
+            
+            
+            
+                <dt>published</dt>
+                
+                <dd><time datetime="2024-09-27">September 27, 2024</time></dd>
+            
+            
+                <dt>reading time</dt>
+                <dd>1 minute</dd>
+            
+        </dl>
+    </section>
+    
+    <div>
         <p>Something smart to talk about this helper class</p>
 <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
 </span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
@@ -286,74 +165,19 @@ class MVIViewModelDelegate&lt;STATE, INTENT, ACTION&gt;(
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
 
     </div>
-
-    
-</section>
-
-
-            </div>
-            <div class="side">
-                
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
-
-    <ul>
-        
-            <li>
-                <a href="/posts/mvi_architecture/">MVI Architecture Helper</a>
-            </li>
-        
-            <li>
-                <a href="/posts/my-first-post/">My First Post</a>
-            </li>
-        
-    </ul>
-</div>
-
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
 </div>
 
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
+            </main>
+        </div>
 
-    <ul>
-        
-    </ul>
-</div>
 
-            </div>
-        </main>
         <footer class="footer">
-    <div class="footer-row">
-        
-            
-            
-                <a class="footer-item" href="http://localhost:1313/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
-
-        
-            
-            
-        
-    </div>
-
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

+ 77 - 126
public/posts/my-first-post/index.html

@@ -1,158 +1,109 @@
 <!DOCTYPE html>
-<html>
-    <head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=1313&amp;path=livereload" data-no-instant defer></script>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+My First Post | codeskraps
+</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>My First Post | codeskraps</title>
-<link rel="canonical" href="http://localhost:1313/posts/my-first-post/">
-<meta name="description" content="Introduction 🔗This is bold text, and this is emphasized text.
-Visit the Hugo website!" />
-<meta property="og:type" content="article" />
-<meta property="og:title" content="My First Post | codeskraps" />
-<meta property="og:url" content="http://localhost:1313/posts/my-first-post/" />
-<meta property="og:description" content="Introduction 🔗This is bold text, and this is emphasized text.
-Visit the Hugo website!" />
 
+<link rel="canonical" href="http://localhost:49905/posts/my-first-post/" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
-    <div class="header">
-        <a class="site-title" href="http://localhost:1313/">codeskraps</a>
+<body>
 
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
-
-<section class="single">
-    <h1 class="title">My First Post</h1>
-
-    <div class="tip">
-        <time datetime="2024-09-27 11:59:03 &#43;0200 CEST">2024/09/27</time>
-        <span class="split">·</span>
-        <span> 14 words </span>
-        <span class="split">·</span>
-        <span>
-            1 minutes to read
-        </span>
-    </div>
-
-    <div class="taxonomies">
-        
 
-        
-    </div>
-
-    <hr />
-
-    <div class="content">
-        <h2 id="introduction">Introduction <a href="#introduction" class="anchor">🔗</a></h2><p>This is <strong>bold</strong> text, and this is <em>emphasized</em> text.</p>
-<p>Visit the <a href="https://gohugo.io">Hugo</a> website!</p>
-
-    </div>
-
-    
-</section>
-
-
-            </div>
-            <div class="side">
+        <div class="content">
+            <main class="main">
                 
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
-
-    <ul>
-        
-            <li>
-                <a href="/posts/mvi_architecture/">MVI Architecture Helper</a>
-            </li>
-        
-            <li>
-                <a href="/posts/my-first-post/">My First Post</a>
-            </li>
-        
-    </ul>
-</div>
-
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
-</div>
-
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
-
-    <ul>
-        
-    </ul>
-</div>
-
-            </div>
-        </main>
-        <footer class="footer">
-    <div class="footer-row">
-        
+<div class="postWrapper">
+    <h1>My First Post</h1>
+    
+    
+    <section class="postMetadata">
+        <dl>
             
             
-                <a class="footer-item" href="http://localhost:1313/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
             
-        
-
-        
             
+                <dt>published</dt>
+                
+                <dd><time datetime="2024-09-27">September 27, 2024</time></dd>
+            
+            
+                <dt>reading time</dt>
+                <dd>1 minute</dd>
             
-        
+        </dl>
+    </section>
+    
+    <div>
+        <h2 id="introduction">Introduction</h2>
+<p>This is <strong>bold</strong> text, and this is <em>emphasized</em> text.</p>
+<p>Visit the <a href="https://gohugo.io">Hugo</a> website!</p>
+
     </div>
+</div>
 
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

+ 98 - 0
public/projects/index.html

@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+        codeskraps
+        </title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/projects/" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+  <article>
+      <header>
+        <h1>
+          Projects
+        </h1>
+      </header>
+
+      <p><img src="/imagesweekly_weather_logo.webp" alt="logo"></p>
+<p><img src="https://github.com/codeskraps/Weekly-Weather/blob/main/app/src/main/web_hi_res_512.png" alt="logo2"></p>
+<h1 id="weekly-weather">Weekly-Weather</h1>
+<p>A quick view of your weekly weather</p>
+<p>A quick overview of you weekly weather of your current location or search and save your favourite locations for easy access.</p>
+<p>Save a GPS weather location with a custom name.</p>
+<p>App translated into 37 languages.</p>
+
+    </div>
+  </article>
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

+ 26 - 5
public/sitemap.xml

@@ -2,16 +2,37 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <url>
-    <loc>https://codeskraps.com/</loc>
+    <loc>http://localhost:49905/about/</loc>
+  </url><url>
+    <loc>http://localhost:49905/tags/android/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/tags/kmp/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/tags/kotlin/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/tags/mvi/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/posts/mvi_architecture/</loc>
+    <lastmod>2024-09-27T13:45:09+02:00</lastmod>
+  </url><url>
+    <loc>http://localhost:49905/posts/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
-    <loc>https://codeskraps.com/posts/</loc>
+    <loc>http://localhost:49905/tags/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
-    <loc>https://codeskraps.com/about/</loc>
+    <loc>http://localhost:49905/posts/my-first-post/</loc>
+    <lastmod>2024-09-27T11:59:03+02:00</lastmod>
   </url><url>
-    <loc>https://codeskraps.com/categories/</loc>
+    <loc>http://localhost:49905/categories/</loc>
   </url><url>
-    <loc>https://codeskraps.com/tags/</loc>
+    <loc>http://localhost:49905/projects/</loc>
   </url>
 </urlset>

+ 181 - 0
public/tags/android/index.html

@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Android | codeskraps
+</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/tags/android/" >
+  <link href="http://localhost:49905/tags/android/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/tags/android/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+
+<div>
+    <div class="listHeader">
+        <h1>Android</h1>
+    </div>
+
+    
+
+    <div>
+        
+
+        <a class="postListLink" href="http://localhost:49905/posts/mvi_architecture/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">MVI Architecture Helper</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><p>Something smart to talk about this helper class</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.withType(<span style="color:#66d9ef">crossinline</span> block: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>    withState { state <span style="color:#f92672">-&gt;</span>
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (state <span style="color:#66d9ef">is</span> TYPE) {
+</span></span><span style="display:flex;"><span>            block(state)
+</span></span><span style="display:flex;"><span>        }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.updateWithType(<span style="color:#66d9ef">crossinline</span> transform: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> TYPE) {
+</span></span><span style="display:flex;"><span>    withType&lt;TYPE, STATE&gt; { state <span style="color:#f92672">-&gt;</span> updateState { transform(state) } }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateProvider</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentReceiver</span>&lt;INTENT&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionProvider</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionReceiver</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateModule</span>&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentModule</span>&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionModule</span>&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">MVIViewModel</span>&lt;STATE, INTENT, ACTION&gt; :
+</span></span><span style="display:flex;"><span>    StateModule&lt;STATE&gt;,
+</span></span><span style="display:flex;"><span>    IntentModule&lt;INTENT&gt;,
+</span></span><span style="display:flex;"><span>    ActionModule&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MVIViewModelDelegate</span>&lt;STATE, INTENT, ACTION&gt;(
+</span></span><span style="display:flex;"><span>    initial: STATE
+</span></span><span style="display:flex;"><span>) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _state = MutableStateFlow(initial)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _action = Channel&lt;ACTION&gt;()
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE) {
+</span></span><span style="display:flex;"><span>        _state.update { transform(<span style="color:#66d9ef">it</span>) }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>        block(_state.<span style="color:#66d9ef">value</span>)
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION) {
+</span></span><span style="display:flex;"><span>        _action.trySend(block())
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> NotImplementedError()
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
+                </div>
+            </div>
+        </a>
+
+
+        
+    </div>
+</div>
+
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 17 - 0
public/tags/android/index.xml


+ 122 - 83
public/tags/index.html

@@ -1,125 +1,164 @@
 <!DOCTYPE html>
-<html>
-    <head>
-        <meta charset="utf-8">
-<meta name="viewport" content="width=device-width,minimum-scale=1">
+<html lang="en-us">
 
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Tags | codeskraps
+</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
 
+<meta name="generator" content="Hugo 0.134.3">
 
-<title>codeskraps</title>
-<link rel="canonical" href="https://codeskraps.com/tags/">
-<meta property="og:type" content="article" />
-<meta property="og:title" content="codeskraps" />
-<meta property="og:url" content="https://codeskraps.com/tags/" />
-<link rel="alternate" type="application/rss+xml" href="https://codeskraps.com/tags/index.xml" title="codeskraps" />
 
+<link rel="canonical" href="http://localhost:49905/tags/" >
+  <link href="http://localhost:49905/tags/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/tags/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
 
 
 
-<link rel="stylesheet" href="/lib/icofont/icofont.min.css" />
-<link rel="stylesheet" href="/css/syntax.css" />
-<link rel="stylesheet" href="/css/style.css" />
-<script src="/js/copy-code-block.js"></script>
-<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
 
-    </head>
+</head>
 
-    <body>
-        <header class="header-wrapper">
-    <div class="header">
-        <a class="site-title" href="https://codeskraps.com/">codeskraps</a>
+<body>
 
-        <nav class="menu">
-            
-                <div class="menu-item">
-                    
-                        <a href="/about/">About</a>
-                    
-                </div>
-            
-                <div class="menu-item">
-                    
-                        <a href="/posts/">Posts</a>
-                    
-                </div>
-            
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
         </nav>
     </div>
 </header>
 
-        <main class="main-wrapper">
-            <div class="main">
-                
-    <section id="tags">
-        
-        
-    </section>
 
-            </div>
-            <div class="side">
+        <div class="content">
+            <main class="main">
                 
-                    <div class="side-recent">
-    <h2 class="side-title">
-        <a href="/posts/">Recent Posts</a>
-    </h2>
-    <hr />
 
-    <ul>
-        
-    </ul>
-</div>
+<div>
+    <div class="listHeader">
+        <h1>Tags</h1>
+    </div>
 
-                
-                <div class="side-categories">
-    <h2>Categories</h2>
-    <hr />
+    
 
-    <ul>
+    <div>
         
-    </ul>
-</div>
 
-                <div class="side-tags">
-    <h2>Tags</h2>
-    <hr />
+        <a class="postListLink" href="http://localhost:49905/tags/android/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">Android</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p></p>
+                </div>
+            </div>
+        </a>
+
 
-    <ul>
         
-    </ul>
-</div>
 
+        <a class="postListLink" href="http://localhost:49905/tags/kmp/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">Kmp</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p></p>
+                </div>
             </div>
-        </main>
-        <footer class="footer">
-    <div class="footer-row">
+        </a>
+
+
         
+
+        <a class="postListLink" href="http://localhost:49905/tags/kotlin/">
             
-            
-                <a class="footer-item" href="https://codeskraps.com/posts/index.xml">
-                    Feed of Posts
-                    <i class="icofont-rss"></i>
-                </a>
-            
-        
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">Kotlin</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p></p>
+                </div>
+            </div>
+        </a>
+
 
         
+
+        <a class="postListLink" href="http://localhost:49905/tags/mvi/">
             
-            
-                <a class="footer-item" href="https://codeskraps.com/tags/index.xml">
-                    Feed of "Tags"
-                    <i class="icofont-rss"></i>
-                </a>
-            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">Mvi</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p></p>
+                </div>
+            </div>
+        </a>
+
+
         
     </div>
+</div>
+
+
+            </main>
+        </div>
+
 
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
     
 </footer>
+    </div>
+
+</body>
 
-    </body>
-</html>
+</html>

+ 35 - 3
public/tags/index.xml

@@ -2,9 +2,41 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
     <title>Tags on codeskraps</title>
-    <link>https://codeskraps.com/tags/</link>
+    <link>http://localhost:49905/tags/</link>
     <description>Recent content in Tags on codeskraps</description>
-    <generator>Hugo -- gohugo.io</generator>
-    <language>en-us</language><atom:link href="https://codeskraps.com/tags/index.xml" rel="self" type="application/rss+xml" />
+    <generator>Hugo</generator>
+    <language>en-us</language>
+    <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
+    <webMaster>me@codeskraps.com (codeskraps)</webMaster>
+    <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
+    <atom:link href="http://localhost:49905/tags/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Android</title>
+      <link>http://localhost:49905/tags/android/</link>
+      <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
+      <guid>http://localhost:49905/tags/android/</guid>
+      <description></description>
+    </item>
+    <item>
+      <title>Kmp</title>
+      <link>http://localhost:49905/tags/kmp/</link>
+      <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
+      <guid>http://localhost:49905/tags/kmp/</guid>
+      <description></description>
+    </item>
+    <item>
+      <title>Kotlin</title>
+      <link>http://localhost:49905/tags/kotlin/</link>
+      <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
+      <guid>http://localhost:49905/tags/kotlin/</guid>
+      <description></description>
+    </item>
+    <item>
+      <title>Mvi</title>
+      <link>http://localhost:49905/tags/mvi/</link>
+      <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
+      <guid>http://localhost:49905/tags/mvi/</guid>
+      <description></description>
+    </item>
   </channel>
 </rss>

+ 181 - 0
public/tags/kmp/index.html

@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Kmp | codeskraps
+</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/tags/kmp/" >
+  <link href="http://localhost:49905/tags/kmp/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/tags/kmp/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+
+<div>
+    <div class="listHeader">
+        <h1>Kmp</h1>
+    </div>
+
+    
+
+    <div>
+        
+
+        <a class="postListLink" href="http://localhost:49905/posts/mvi_architecture/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">MVI Architecture Helper</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><p>Something smart to talk about this helper class</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.withType(<span style="color:#66d9ef">crossinline</span> block: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>    withState { state <span style="color:#f92672">-&gt;</span>
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (state <span style="color:#66d9ef">is</span> TYPE) {
+</span></span><span style="display:flex;"><span>            block(state)
+</span></span><span style="display:flex;"><span>        }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.updateWithType(<span style="color:#66d9ef">crossinline</span> transform: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> TYPE) {
+</span></span><span style="display:flex;"><span>    withType&lt;TYPE, STATE&gt; { state <span style="color:#f92672">-&gt;</span> updateState { transform(state) } }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateProvider</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentReceiver</span>&lt;INTENT&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionProvider</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionReceiver</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateModule</span>&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentModule</span>&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionModule</span>&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">MVIViewModel</span>&lt;STATE, INTENT, ACTION&gt; :
+</span></span><span style="display:flex;"><span>    StateModule&lt;STATE&gt;,
+</span></span><span style="display:flex;"><span>    IntentModule&lt;INTENT&gt;,
+</span></span><span style="display:flex;"><span>    ActionModule&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MVIViewModelDelegate</span>&lt;STATE, INTENT, ACTION&gt;(
+</span></span><span style="display:flex;"><span>    initial: STATE
+</span></span><span style="display:flex;"><span>) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _state = MutableStateFlow(initial)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _action = Channel&lt;ACTION&gt;()
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE) {
+</span></span><span style="display:flex;"><span>        _state.update { transform(<span style="color:#66d9ef">it</span>) }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>        block(_state.<span style="color:#66d9ef">value</span>)
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION) {
+</span></span><span style="display:flex;"><span>        _action.trySend(block())
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> NotImplementedError()
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
+                </div>
+            </div>
+        </a>
+
+
+        
+    </div>
+</div>
+
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 17 - 0
public/tags/kmp/index.xml


+ 181 - 0
public/tags/kotlin/index.html

@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Kotlin | codeskraps
+</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/tags/kotlin/" >
+  <link href="http://localhost:49905/tags/kotlin/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/tags/kotlin/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+
+<div>
+    <div class="listHeader">
+        <h1>Kotlin</h1>
+    </div>
+
+    
+
+    <div>
+        
+
+        <a class="postListLink" href="http://localhost:49905/posts/mvi_architecture/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">MVI Architecture Helper</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><p>Something smart to talk about this helper class</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.withType(<span style="color:#66d9ef">crossinline</span> block: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>    withState { state <span style="color:#f92672">-&gt;</span>
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (state <span style="color:#66d9ef">is</span> TYPE) {
+</span></span><span style="display:flex;"><span>            block(state)
+</span></span><span style="display:flex;"><span>        }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.updateWithType(<span style="color:#66d9ef">crossinline</span> transform: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> TYPE) {
+</span></span><span style="display:flex;"><span>    withType&lt;TYPE, STATE&gt; { state <span style="color:#f92672">-&gt;</span> updateState { transform(state) } }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateProvider</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentReceiver</span>&lt;INTENT&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionProvider</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionReceiver</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateModule</span>&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentModule</span>&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionModule</span>&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">MVIViewModel</span>&lt;STATE, INTENT, ACTION&gt; :
+</span></span><span style="display:flex;"><span>    StateModule&lt;STATE&gt;,
+</span></span><span style="display:flex;"><span>    IntentModule&lt;INTENT&gt;,
+</span></span><span style="display:flex;"><span>    ActionModule&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MVIViewModelDelegate</span>&lt;STATE, INTENT, ACTION&gt;(
+</span></span><span style="display:flex;"><span>    initial: STATE
+</span></span><span style="display:flex;"><span>) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _state = MutableStateFlow(initial)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _action = Channel&lt;ACTION&gt;()
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE) {
+</span></span><span style="display:flex;"><span>        _state.update { transform(<span style="color:#66d9ef">it</span>) }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>        block(_state.<span style="color:#66d9ef">value</span>)
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION) {
+</span></span><span style="display:flex;"><span>        _action.trySend(block())
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> NotImplementedError()
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
+                </div>
+            </div>
+        </a>
+
+
+        
+    </div>
+</div>
+
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 17 - 0
public/tags/kotlin/index.xml


+ 181 - 0
public/tags/mvi/index.html

@@ -0,0 +1,181 @@
+<!DOCTYPE html>
+<html lang="en-us">
+
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=49905&amp;path=livereload" data-no-instant defer></script>
+    <title>
+Mvi | codeskraps
+</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="description" content="Your website description">
+
+<meta name="generator" content="Hugo 0.134.3">
+
+
+<link rel="canonical" href="http://localhost:49905/tags/mvi/" >
+  <link href="http://localhost:49905/tags/mvi/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:49905/tags/mvi/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+
+
+
+
+<link href="/css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css" rel="stylesheet">
+
+
+
+
+</head>
+
+<body>
+
+    <div class="flexWrapper">
+        <header class="headerWrapper">
+    <div class="header">
+        <div>
+            <a class="terminal" href="http://localhost:49905/">
+                <span>me@codeskraps.com ~ $</span>
+            </a>
+        </div>
+        <input class="side-menu" type="checkbox" id="side-menu">
+        <label class="hamb" for="side-menu"><span class="hamb-line"></span></label>
+        <nav class="headerLinks">
+            <ul>
+                
+                <li>
+                    <a href="http://localhost:49905/projects/" title="" >
+                        ~/projects</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/about/" title="" >
+                        ~/about</a>
+                </li>
+                
+                <li>
+                    <a href="http://localhost:49905/posts/" title="" >
+                        ~/posts</a>
+                </li>
+                
+            </ul>
+        </nav>
+    </div>
+</header>
+
+
+        <div class="content">
+            <main class="main">
+                
+
+<div>
+    <div class="listHeader">
+        <h1>Mvi</h1>
+    </div>
+
+    
+
+    <div>
+        
+
+        <a class="postListLink" href="http://localhost:49905/posts/mvi_architecture/">
+            
+            <div class="postListItem" role="listitem">
+                <div class="postHeader">
+                    <span class="postTitle">MVI Architecture Helper</span>
+                    
+                    <time class="postDate" datetime="2024-09-27">September 27, 2024</time>
+                </div>
+                <div class="postExcerpt">
+                    <p><p>Something smart to talk about this helper class</p>
+<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.withType(<span style="color:#66d9ef">crossinline</span> block: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>    withState { state <span style="color:#f92672">-&gt;</span>
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span> (state <span style="color:#66d9ef">is</span> TYPE) {
+</span></span><span style="display:flex;"><span>            block(state)
+</span></span><span style="display:flex;"><span>        }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">inline</span> <span style="color:#66d9ef">fun</span> &lt;<span style="color:#66d9ef">reified</span> <span style="color:#a6e22e">TYPE</span> : <span style="color:#a6e22e">STATE</span>, <span style="color:#a6e22e">STATE</span>&gt; <span style="color:#a6e22e">StateReceiver</span>&lt;STATE&gt;.updateWithType(<span style="color:#66d9ef">crossinline</span> transform: <span style="color:#66d9ef">suspend</span> (TYPE) <span style="color:#f92672">-&gt;</span> TYPE) {
+</span></span><span style="display:flex;"><span>    withType&lt;TYPE, STATE&gt; { state <span style="color:#f92672">-&gt;</span> updateState { transform(state) } }
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateProvider</span>&lt;STATE&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentReceiver</span>&lt;INTENT&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionProvider</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionReceiver</span>&lt;ACTION&gt; {
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION)
+</span></span><span style="display:flex;"><span>}
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">StateModule</span>&lt;STATE&gt; : StateReceiver&lt;STATE&gt;, StateProvider&lt;STATE&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">IntentModule</span>&lt;INTENT&gt; : IntentReceiver&lt;INTENT&gt;
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">ActionModule</span>&lt;ACTION&gt; : ActionReceiver&lt;ACTION&gt;, ActionProvider&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">MVIViewModel</span>&lt;STATE, INTENT, ACTION&gt; :
+</span></span><span style="display:flex;"><span>    StateModule&lt;STATE&gt;,
+</span></span><span style="display:flex;"><span>    IntentModule&lt;INTENT&gt;,
+</span></span><span style="display:flex;"><span>    ActionModule&lt;ACTION&gt;
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span><span style="color:#66d9ef">class</span> <span style="color:#a6e22e">MVIViewModelDelegate</span>&lt;STATE, INTENT, ACTION&gt;(
+</span></span><span style="display:flex;"><span>    initial: STATE
+</span></span><span style="display:flex;"><span>) : MVIViewModel&lt;STATE, INTENT, ACTION&gt; {
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _state = MutableStateFlow(initial)
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> state: StateFlow&lt;STATE&gt; = _state.asStateFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">private</span> <span style="color:#66d9ef">val</span> _action = Channel&lt;ACTION&gt;()
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">val</span> action: Flow&lt;ACTION&gt; = _action.receiveAsFlow()
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">updateState</span>(transform: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> STATE) {
+</span></span><span style="display:flex;"><span>        _state.update { transform(<span style="color:#66d9ef">it</span>) }
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">withState</span>(block: <span style="color:#66d9ef">suspend</span> (STATE) <span style="color:#f92672">-&gt;</span> Unit) {
+</span></span><span style="display:flex;"><span>        block(_state.<span style="color:#66d9ef">value</span>)
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">suspend</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">sendAction</span>(block: <span style="color:#66d9ef">suspend</span> () <span style="color:#f92672">-&gt;</span> ACTION) {
+</span></span><span style="display:flex;"><span>        _action.trySend(block())
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>
+</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">override</span> <span style="color:#66d9ef">fun</span> <span style="color:#a6e22e">handleIntent</span>(intent: INTENT) {
+</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">throw</span> NotImplementedError()
+</span></span><span style="display:flex;"><span>    }
+</span></span><span style="display:flex;"><span>}</span></span></code></pre></div></p>
+                </div>
+            </div>
+        </a>
+
+
+        
+    </div>
+</div>
+
+
+            </main>
+        </div>
+
+
+        <footer class="footer">
+    
+        <span>CC-0, Built with <a href="https://gohugo.io" class="footerLink">Hugo</a> and <a href="https://github.com/LordMathis/hugo-theme-nightfall" class="footerLink">Nightfall</a> theme</span>
+    
+</footer>
+    </div>
+
+</body>
+
+</html>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 17 - 0
public/tags/mvi/index.xml


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
resources/_gen/assets/sass/main.scss_614f236ad197e48376b133d2d4574a2e.content


+ 1 - 0
resources/_gen/assets/sass/main.scss_614f236ad197e48376b133d2d4574a2e.json

@@ -0,0 +1 @@
+{"Target":"css/style.min.38d8ec3c7cca8185fe94ab7dc7ca79d69e14b78ca3c077807b2c32725df95c62.css","MediaType":"text/css","Data":{"Integrity":"sha256-ONjsPHzKgYX+lKt9x8p51p4Ut4yjwHeAeywycl35XGI="}}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
resources/_gen/assets/sass/main.scss_d6ea8142f6fedb58f8eb9ee253edcb3c.content


+ 1 - 0
resources/_gen/assets/sass/main.scss_d6ea8142f6fedb58f8eb9ee253edcb3c.json

@@ -0,0 +1 @@
+{"Target":"css/style.min.36c061153203db94fc1169914d07c49c3a537a11316e9ffbd4c7a511df482d8d.css","MediaType":"text/css","Data":{"Integrity":"sha256-NsBhFTID25T8EWmRTQfEnDpTehExbp/71MelEd9ILY0="}}

BIN
static/.DS_Store


BIN
static/images/weekly_weather_logo.webp


+ 1 - 0
themes/nightfall

@@ -0,0 +1 @@
+Subproject commit 88f65c6a36a64d8ea7e0dbafb92f66eeb13bcee6

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä