浏览代码

Implement code copy functionality across various posts and layouts, updating syntax highlighting to a new shortcode. Adjust links to use localhost for local development and enhance styling for code blocks.

codeskraps 1 周之前
父节点
当前提交
272a938b57
共有 52 个文件被更改,包括 3463 次插入423 次删除
  1. 12 12
      content/posts/2024/git_ssh_command.md
  2. 2 2
      content/posts/2024/gitignore_not_working.md
  3. 6 6
      content/posts/2024/mvi_architecture.md
  4. 4 4
      content/posts/2024/react_vs_kmp.md
  5. 26 26
      content/posts/2025/move_home_folder.md
  6. 3 0
      layouts/partials/head-additions.html
  7. 112 0
      layouts/shortcodes/codewithcopy.html
  8. 6 6
      public/404.html
  9. 7 7
      public/about/index.html
  10. 8 8
      public/categories/index.html
  11. 2 2
      public/categories/index.xml
  12. 89 0
      public/css/code-copy.css
  13. 8 8
      public/index.html
  14. 16 17
      public/index.xml
  15. 40 0
      public/js/code-copy.js
  16. 683 14
      public/posts/2024/git_ssh_command/index.html
  17. 120 8
      public/posts/2024/gitignore_not_working/index.html
  18. 342 9
      public/posts/2024/mvi_architecture/index.html
  19. 230 8
      public/posts/2024/react_vs_kmp/index.html
  20. 1350 18
      public/posts/2025/move_home_folder/index.html
  21. 13 13
      public/posts/index.html
  22. 12 12
      public/posts/index.xml
  23. 6 6
      public/projects/index.html
  24. 23 23
      public/sitemap.xml
  25. 10 10
      public/tags/android/index.html
  26. 6 6
      public/tags/android/index.xml
  27. 9 9
      public/tags/architecture/index.html
  28. 4 4
      public/tags/architecture/index.xml
  29. 10 10
      public/tags/git/index.html
  30. 6 6
      public/tags/git/index.xml
  31. 20 20
      public/tags/index.html
  32. 26 26
      public/tags/index.xml
  33. 9 9
      public/tags/ios/index.html
  34. 4 4
      public/tags/ios/index.xml
  35. 10 10
      public/tags/kmp/index.html
  36. 6 6
      public/tags/kmp/index.xml
  37. 10 10
      public/tags/kotlin/index.html
  38. 6 6
      public/tags/kotlin/index.xml
  39. 9 9
      public/tags/linux/index.html
  40. 4 4
      public/tags/linux/index.xml
  41. 9 9
      public/tags/mvi/index.html
  42. 4 4
      public/tags/mvi/index.xml
  43. 9 9
      public/tags/mvvm/index.html
  44. 4 4
      public/tags/mvvm/index.xml
  45. 9 9
      public/tags/react-native/index.html
  46. 4 4
      public/tags/react-native/index.xml
  47. 9 9
      public/tags/ssh/index.html
  48. 4 4
      public/tags/ssh/index.xml
  49. 9 9
      public/tags/viewmodel/index.html
  50. 4 4
      public/tags/viewmodel/index.xml
  51. 89 0
      static/css/code-copy.css
  52. 40 0
      static/js/code-copy.js

+ 12 - 12
content/posts/2024/git_ssh_command.md

@@ -16,9 +16,9 @@ Git provides a handy way to set configuration options for a single command using
 
 
 Here's the syntax:
 Here's the syntax:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 git -c core.sshCommand="ssh -i /path/to/private_key_file" <git command>
 git -c core.sshCommand="ssh -i /path/to/private_key_file" <git command>
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ## Examples
 ## Examples
 
 
@@ -26,26 +26,26 @@ git -c core.sshCommand="ssh -i /path/to/private_key_file" <git command>
 
 
 To clone a repository using a specific SSH key:
 To clone a repository using a specific SSH key:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 git -c core.sshCommand="ssh -i /path/to/private_key_file" clone git@github.com:username/repo.git
 git -c core.sshCommand="ssh -i /path/to/private_key_file" clone git@github.com:username/repo.git
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ### Adding a Submodule
 ### Adding a Submodule
 
 
 Similarly, when adding a submodule:
 Similarly, when adding a submodule:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 git -c core.sshCommand="ssh -i /path/to/private_key_file" submodule add git@github.com:username/submodule.git
 git -c core.sshCommand="ssh -i /path/to/private_key_file" submodule add git@github.com:username/submodule.git
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ## Making SSH Keys Available
 ## Making SSH Keys Available
 
 
 Before using SSH keys with Git, it's important to check which keys are already available on your system:
 Before using SSH keys with Git, it's important to check which keys are already available on your system:
 
 
 1. **Check Available Keys**: List the contents of your SSH directory:
 1. **Check Available Keys**: List the contents of your SSH directory:
-   {{<highlight bash>}}
+   {{<codewithcopy bash>}}
    ls -al ~/.ssh
    ls -al ~/.ssh
-   {{</highlight>}}
+   {{</codewithcopy>}}
    This command will show you all files in your SSH directory, including your key files (typically with extensions like .pub for public keys).
    This command will show you all files in your SSH directory, including your key files (typically with extensions like .pub for public keys).
 
 
 2. **Common Key Names**: Look for files like:
 2. **Common Key Names**: Look for files like:
@@ -54,10 +54,10 @@ Before using SSH keys with Git, it's important to check which keys are already a
    - id_ecdsa, id_ecdsa.pub
    - id_ecdsa, id_ecdsa.pub
 
 
 3. **Add to SSH Agent**: If you find the key you want to use, ensure it's added to your SSH agent:
 3. **Add to SSH Agent**: If you find the key you want to use, ensure it's added to your SSH agent:
-   {{<highlight bash>}}
+   {{<codewithcopy bash>}}
    eval "$(ssh-agent -s)"
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/your_private_key_file
    ssh-add ~/.ssh/your_private_key_file
-   {{</highlight>}}
+   {{</codewithcopy>}}
 
 
 4. **Verify Key in Git Host**: Make sure the corresponding public key (the .pub file) is added to your Git host (e.g., GitHub, GitLab) in the SSH keys section of your account settings.
 4. **Verify Key in Git Host**: Make sure the corresponding public key (the .pub file) is added to your Git host (e.g., GitHub, GitLab) in the SSH keys section of your account settings.
 
 
@@ -73,10 +73,10 @@ After cloning a repository using the method described above, you might want to m
 
 
 3. Add the following lines under the `[core]` section (or create it if it doesn't exist):
 3. Add the following lines under the `[core]` section (or create it if it doesn't exist):
 
 
-   {{<highlight ini>}}
+   {{<codewithcopy ini>}}
    [core]
    [core]
        sshCommand = ssh -i /path/to/private_key_file
        sshCommand = ssh -i /path/to/private_key_file
-   {{</highlight>}}
+   {{</codewithcopy>}}
 
 
 4. Save and close the file.
 4. Save and close the file.
 
 

+ 2 - 2
content/posts/2024/gitignore_not_working.md

@@ -24,10 +24,10 @@ Fear not! There's a simple (if somewhat counterintuitive) fix. Here's what you n
 
 
 2. Then, run these two commands:
 2. Then, run these two commands:
 
 
-   {{<highlight bash>}}
+   {{<codewithcopy bash>}}
    git rm -rf --cached .
    git rm -rf --cached .
    git add .
    git add .
-   {{</highlight>}}
+   {{</codewithcopy>}}
 
 
 Let's break down what these commands do:
 Let's break down what these commands do:
 
 

+ 6 - 6
content/posts/2024/mvi_architecture.md

@@ -10,7 +10,7 @@ Model-View-Intent (MVI) is a powerful architectural pattern for building user in
 
 
 First, let's look at the complete helper class:
 First, let's look at the complete helper class:
 
 
-{{< highlight kotlin >}}
+{{<codewithcopy kotlin>}}
 interface StateReceiver<STATE> {
 interface StateReceiver<STATE> {
     suspend fun updateState(transform: suspend (STATE) -> STATE)
     suspend fun updateState(transform: suspend (STATE) -> STATE)
     suspend fun withState(block: suspend (STATE) -> Unit)
     suspend fun withState(block: suspend (STATE) -> Unit)
@@ -81,7 +81,7 @@ class MVIViewModelDelegate<STATE, INTENT, ACTION>(
         throw NotImplementedError()
         throw NotImplementedError()
     }
     }
 }
 }
-{{< /highlight >}}
+{{</codewithcopy>}}
 
 
 ## Understanding the MVI Helper Class
 ## Understanding the MVI Helper Class
 
 
@@ -115,7 +115,7 @@ This class implements the `MVIViewModel` interface, providing a concrete impleme
 
 
 Let's implement a simple counter application using our MVI helper class. Note that we can use either data classes or sealed interfaces for our State, Intent, and Action definitions:
 Let's implement a simple counter application using our MVI helper class. Note that we can use either data classes or sealed interfaces for our State, Intent, and Action definitions:
 
 
-{{< highlight kotlin >}}
+{{<codewithcopy kotlin>}}
 // Define our State, Intent, and Action
 // Define our State, Intent, and Action
 data class CounterState(val count: Int = 0)
 data class CounterState(val count: Int = 0)
 
 
@@ -150,7 +150,7 @@ class CounterViewModel : MVIViewModel<CounterState, CounterIntent, CounterAction
         }
         }
     }
     }
 }
 }
-{{< /highlight >}}
+{{</codewithcopy>}}
 
 
 In this example:
 In this example:
 
 
@@ -163,7 +163,7 @@ In this example:
 
 
 Here's how you might use this ViewModel in an Android Activity or Fragment:
 Here's how you might use this ViewModel in an Android Activity or Fragment:
 
 
-{{< highlight kotlin >}}
+{{<codewithcopy kotlin>}}
 class CounterActivity : AppCompatActivity() {
 class CounterActivity : AppCompatActivity() {
     private val viewModel: CounterViewModel by viewModels()
     private val viewModel: CounterViewModel by viewModels()
 
 
@@ -200,7 +200,7 @@ class CounterActivity : AppCompatActivity() {
         counterTextView.text = state.count.toString()
         counterTextView.text = state.count.toString()
     }
     }
 }
 }
-{{< /highlight >}}
+{{</codewithcopy>}}
 
 
 ## Conclusion
 ## Conclusion
 
 

+ 4 - 4
content/posts/2024/react_vs_kmp.md

@@ -24,7 +24,7 @@ Kotlin Multiplatform, developed by JetBrains, takes a different approach. Introd
 
 
 React Native's use of JavaScript as its primary language is a significant advantage for many developers, especially those with a web development background. JavaScript's popularity and the vast ecosystem of tools and libraries make it an accessible choice for beginners and experienced developers alike.
 React Native's use of JavaScript as its primary language is a significant advantage for many developers, especially those with a web development background. JavaScript's popularity and the vast ecosystem of tools and libraries make it an accessible choice for beginners and experienced developers alike.
 
 
-{{< highlight javascript >}}
+{{<codewithcopy javascript>}}
 import React from 'react';
 import React from 'react';
 import { Text, View } from 'react-native';
 import { Text, View } from 'react-native';
 
 
@@ -37,7 +37,7 @@ const HelloWorldApp = () => {
 }
 }
 
 
 export default HelloWorldApp;
 export default HelloWorldApp;
-{{< /highlight >}}
+{{</codewithcopy>}}
 
 
 This familiarity can lead to faster onboarding and development cycles, particularly for teams already versed in web technologies.
 This familiarity can lead to faster onboarding and development cycles, particularly for teams already versed in web technologies.
 
 
@@ -45,7 +45,7 @@ This familiarity can lead to faster onboarding and development cycles, particula
 
 
 Kotlin Multiplatform, on the other hand, leverages the power and expressiveness of the Kotlin language. While it may have a steeper learning curve for those not familiar with Kotlin, it offers numerous benefits.
 Kotlin Multiplatform, on the other hand, leverages the power and expressiveness of the Kotlin language. While it may have a steeper learning curve for those not familiar with Kotlin, it offers numerous benefits.
 
 
-{{< highlight kotlin >}}
+{{<codewithcopy kotlin>}}
 expect class Platform()
 expect class Platform()
 expect fun Platform.name(): String
 expect fun Platform.name(): String
 
 
@@ -56,7 +56,7 @@ fun greet(): String = hello() + " on " + Platform().name()
 class Greeting {
 class Greeting {
     fun greeting(): String = greet()
     fun greeting(): String = greet()
 }
 }
-{{< /highlight >}}
+{{</codewithcopy>}}
 
 
 These features can lead to more robust, maintainable code, which can be especially beneficial for larger, more complex projects.
 These features can lead to more robust, maintainable code, which can be especially beneficial for larger, more complex projects.
 
 

+ 26 - 26
content/posts/2025/move_home_folder.md

@@ -12,91 +12,91 @@ You can move the `/home` folder on Ubuntu, but you must do it carefully to avoid
 ## **1. Create a Backup (Recommended)**
 ## **1. Create a Backup (Recommended)**
 Before proceeding, create a backup of your home folder in case anything goes wrong.
 Before proceeding, create a backup of your home folder in case anything goes wrong.
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo tar -czvf /home_backup.tar.gz /home
 sudo tar -czvf /home_backup.tar.gz /home
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ## **2. Create a New Partition or Mount Point (If Needed)**
 ## **2. Create a New Partition or Mount Point (If Needed)**
 If you're moving /home to a different partition or disk, make sure it's properly formatted and mounted.
 If you're moving /home to a different partition or disk, make sure it's properly formatted and mounted.
 
 
 For example, if you want to use a new disk (e.g., `/dev/sdb1`):
 For example, if you want to use a new disk (e.g., `/dev/sdb1`):
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo mkfs.ext4 /dev/sdb1
 sudo mkfs.ext4 /dev/sdb1
 sudo mkdir /mnt/newhome
 sudo mkdir /mnt/newhome
 sudo mount /dev/sdb1 /mnt/newhome
 sudo mount /dev/sdb1 /mnt/newhome
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ## **3. Copy the Home Folder**
 ## **3. Copy the Home Folder**
 Copy all user data to the new location while preserving permissions:
 Copy all user data to the new location while preserving permissions:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo rsync -aXS /home/ /mnt/newhome/
 sudo rsync -aXS /home/ /mnt/newhome/
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ---
 ---
 
 
 ## **4. Update fstab**
 ## **4. Update fstab**
 Edit /etc/fstab to mount the new home directory at boot.
 Edit /etc/fstab to mount the new home directory at boot.
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo nano /etc/fstab
 sudo nano /etc/fstab
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 Add this line at the end (adjust the path accordingly):
 Add this line at the end (adjust the path accordingly):
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 /dev/sdb1  /home  ext4  defaults  0  2
 /dev/sdb1  /home  ext4  defaults  0  2
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 If you prefer using the UUID, first find it:
 If you prefer using the UUID, first find it:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo blkid
 sudo blkid
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 Then, add this line instead:
 Then, add this line instead:
 
 
-{{<highlight arduino>}}
+{{<codewithcopy arduino>}}
 UUID=your-uuid /home ext4 defaults 0 2
 UUID=your-uuid /home ext4 defaults 0 2
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ---
 ---
 
 
 ## **5. Unmount Old Home and Mount New One**
 ## **5. Unmount Old Home and Mount New One**
 Switch to a different session (e.g., TTY):
 Switch to a different session (e.g., TTY):
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 Ctrl + Alt + F3
 Ctrl + Alt + F3
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 Log in and stop processes using `/home`:
 Log in and stop processes using `/home`:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo systemctl stop gdm  # For GNOME (or use sddm/lightdm if applicable)
 sudo systemctl stop gdm  # For GNOME (or use sddm/lightdm if applicable)
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 Unmount and remount:
 Unmount and remount:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo umount /home
 sudo umount /home
 sudo mount /home
 sudo mount /home
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ---
 ---
 
 
 ## **6. Verify and Reboot**
 ## **6. Verify and Reboot**
 Check that everything is in place:
 Check that everything is in place:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 ls /home
 ls /home
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 If everything looks good, reboot:
 If everything looks good, reboot:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo reboot
 sudo reboot
-{{</highlight>}}
+{{</codewithcopy>}}
 
 
 ---
 ---
 
 
@@ -105,6 +105,6 @@ sudo reboot
 
 
 * If you face permission issues, you might need to reapply ownership:
 * If you face permission issues, you might need to reapply ownership:
 
 
-{{<highlight bash>}}
+{{<codewithcopy bash>}}
 sudo chown -R username:username /home/username
 sudo chown -R username:username /home/username
-{{</highlight>}}
+{{</codewithcopy>}}

+ 3 - 0
layouts/partials/head-additions.html

@@ -0,0 +1,3 @@
+<!-- Code copy functionality -->
+<link rel="stylesheet" href="/css/code-copy.css">
+<script defer src="/js/code-copy.js"></script> 

+ 112 - 0
layouts/shortcodes/codewithcopy.html

@@ -0,0 +1,112 @@
+{{ $lang := .Get 0 }}
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="{{ $lang }}">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        {{ highlight (trim .Inner "\n") $lang "" }}
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        // Fallback
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 

+ 6 - 6
public/404.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 404 | codeskraps
 404 | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/404.html" >
+<link rel="canonical" href="http://localhost:55173/404.html" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 

+ 7 - 7
public/about/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 About | codeskraps
 About | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ About | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/about/" >
+<link rel="canonical" href="http://localhost:55173/about/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ About | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ About | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -108,7 +108,7 @@ About | codeskraps
       
       
       
       
   <picture>
   <picture>
-  <img class="img-fluid" src="https://codeskraps.com/images/me_codeskraps.gif?v=9df9e0930034eb1e10990a99d3ef1056" alt="me" loading="lazy" height="107" width="150" />
+  <img class="img-fluid" src="http://localhost:55173/images/me_codeskraps.gif?v=9df9e0930034eb1e10990a99d3ef1056" alt="me" loading="lazy" height="107" width="150" />
 </picture>
 </picture>
 </p>
 </p>
 <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 cross-platform mobile development with expertise in both Android and iOS ecosystems.</p>
 <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 cross-platform mobile development with expertise in both Android and iOS ecosystems.</p>

+ 8 - 8
public/categories/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Categories | codeskraps
 Categories | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Categories | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/categories/" >
-  <link href="https://codeskraps.com/categories/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/categories/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/categories/" >
+  <link href="http://localhost:55173/categories/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/categories/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Categories | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Categories | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 

+ 2 - 2
public/categories/index.xml

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

+ 89 - 0
public/css/code-copy.css

@@ -0,0 +1,89 @@
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+    background: #1e1e1e;
+}
+
+.code-header {
+    position: absolute;
+    top: 0.5rem;
+    right: 0.5rem !important;
+    z-index: 20;
+}
+
+.copy-button {
+    background: #2d2d2d !important;
+    border: 1px solid #404040 !important;
+    cursor: pointer;
+    padding: 0.4rem 0.8rem;
+    display: flex;
+    align-items: center;
+    gap: 0.5rem;
+    color: #ffffff !important;
+    border-radius: 4px;
+    transition: all 0.2s ease;
+    font-size: 0.85em;
+    line-height: 1;
+    min-height: 32px;
+}
+
+.copy-button:hover {
+    background-color: #404040 !important;
+    border-color: #505050 !important;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    stroke: currentColor;
+}
+
+.copy-button .button-text {
+    color: #ffffff !important;
+}
+
+.copy-button .tooltip {
+    visibility: hidden;
+    position: absolute;
+    top: -2.5rem;
+    left: 50%;
+    transform: translateX(-50%);
+    background: #000000;
+    color: #ffffff;
+    padding: 0.4rem 0.8rem;
+    border-radius: 4px;
+    font-size: 0.75rem;
+    white-space: nowrap;
+    opacity: 0;
+    transition: opacity 0.2s ease, visibility 0.2s ease;
+    pointer-events: none;
+    z-index: 30;
+}
+
+.copy-button.copied .tooltip {
+    visibility: visible;
+    opacity: 1;
+}
+
+.copy-button.copied {
+    background-color: #1a4721 !important;
+    border-color: #2ea043 !important;
+    color: #3fb950 !important;
+}
+
+.code-content {
+    position: relative;
+    overflow-x: auto;
+    padding: 1rem;
+}
+
+.copy-button .tooltip::after {
+    content: '';
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border-width: 5px;
+    border-style: solid;
+    border-color: #000000 transparent transparent transparent;
+} 

+ 8 - 8
public/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
         Home | codeskraps
         Home | codeskraps
     </title>
     </title>
@@ -13,9 +13,9 @@
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/" >
-  <link href="https://codeskraps.com/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/" >
+  <link href="http://localhost:55173/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 

文件差异内容过多而无法显示
+ 16 - 17
public/index.xml


+ 40 - 0
public/js/code-copy.js

@@ -0,0 +1,40 @@
+function copyCode(button) {
+    const codeBlock = button.closest('.code-block-container').querySelector('.code-content');
+    // Get the actual code content, excluding any highlight tags
+    const preElement = codeBlock.querySelector('pre');
+    const code = preElement ? preElement.textContent : codeBlock.textContent;
+    const tooltip = button.querySelector('.tooltip');
+
+    // Create a temporary textarea to copy the text
+    const textarea = document.createElement('textarea');
+    textarea.value = code.trim();
+    document.body.appendChild(textarea);
+    textarea.select();
+
+    try {
+        document.execCommand('copy');
+        button.classList.add('copied');
+        tooltip.textContent = 'Copied!';
+        
+        // Fallback to modern clipboard API if available
+        if (navigator.clipboard) {
+            navigator.clipboard.writeText(code.trim()).catch(() => {});
+        }
+
+        setTimeout(() => {
+            button.classList.remove('copied');
+            tooltip.textContent = '';
+        }, 2000);
+    } catch (err) {
+        console.error('Failed to copy:', err);
+        tooltip.textContent = 'Failed to copy';
+        button.classList.add('copied');
+        
+        setTimeout(() => {
+            button.classList.remove('copied');
+            tooltip.textContent = '';
+        }, 2000);
+    } finally {
+        document.body.removeChild(textarea);
+    }
+} 

+ 683 - 14
public/posts/2024/git_ssh_command/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Configuring SSH Keys for Individual Git Commands | codeskraps
 Configuring SSH Keys for Individual Git Commands | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/posts/2024/git_ssh_command/" >
+<link rel="canonical" href="http://localhost:55173/posts/2024/git_ssh_command/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -113,20 +113,465 @@ Configuring SSH Keys for Individual Git Commands | codeskraps
 <h2 id="the-solution">The Solution</h2>
 <h2 id="the-solution">The Solution</h2>
 <p>Git provides a handy way to set configuration options for a single command using the <code>-c</code> flag. This allows you to specify the SSH command to use, including the path to your private key file.</p>
 <p>Git provides a handy way to set configuration options for a single command using the <code>-c</code> flag. This allows you to specify the SSH command to use, including the path to your private key file.</p>
 <p>Here&rsquo;s the syntax:</p>
 <p>Here&rsquo;s the syntax:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> &lt;git command&gt;</span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> &lt;git command&gt;</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <h2 id="examples">Examples</h2>
 <h2 id="examples">Examples</h2>
 <h3 id="cloning-a-repository">Cloning a Repository</h3>
 <h3 id="cloning-a-repository">Cloning a Repository</h3>
 <p>To clone a repository using a specific SSH key:</p>
 <p>To clone a repository using a specific SSH key:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> clone git@github.com:username/repo.git</span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> clone git@github.com:username/repo.git</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <h3 id="adding-a-submodule">Adding a Submodule</h3>
 <h3 id="adding-a-submodule">Adding a Submodule</h3>
 <p>Similarly, when adding a submodule:</p>
 <p>Similarly, when adding a submodule:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> submodule add git@github.com:username/submodule.git</span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git -c core.sshCommand<span style="color:#ff79c6">=</span><span style="color:#f1fa8c">&#34;ssh -i /path/to/private_key_file&#34;</span> submodule add git@github.com:username/submodule.git</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <h2 id="making-ssh-keys-available">Making SSH Keys Available</h2>
 <h2 id="making-ssh-keys-available">Making SSH Keys Available</h2>
 <p>Before using SSH keys with Git, it&rsquo;s important to check which keys are already available on your system:</p>
 <p>Before using SSH keys with Git, it&rsquo;s important to check which keys are already available on your system:</p>
 <ol>
 <ol>
 <li>
 <li>
 <p><strong>Check Available Keys</strong>: List the contents of your SSH directory:
 <p><strong>Check Available Keys</strong>: List the contents of your SSH directory:
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ls -al ~/.ssh</span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>   ls -al ~/.ssh
+</span></span><span style="display:flex;"><span>   </span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 This command will show you all files in your SSH directory, including your key files (typically with extensions like .pub for public keys).</p>
 This command will show you all files in your SSH directory, including your key files (typically with extensions like .pub for public keys).</p>
 </li>
 </li>
 <li>
 <li>
@@ -139,8 +584,120 @@ This command will show you all files in your SSH directory, including your key f
 </li>
 </li>
 <li>
 <li>
 <p><strong>Add to SSH Agent</strong>: If you find the key you want to use, ensure it&rsquo;s added to your SSH agent:
 <p><strong>Add to SSH Agent</strong>: If you find the key you want to use, ensure it&rsquo;s added to your SSH agent:
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8be9fd;font-style:italic">eval</span> <span style="color:#f1fa8c">&#34;</span><span style="color:#ff79c6">$(</span>ssh-agent -s<span style="color:#ff79c6">)</span><span style="color:#f1fa8c">&#34;</span>
-</span></span><span style="display:flex;"><span>ssh-add ~/.ssh/your_private_key_file</span></span></code></pre></div></p>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>   <span style="color:#8be9fd;font-style:italic">eval</span> <span style="color:#f1fa8c">&#34;</span><span style="color:#ff79c6">$(</span>ssh-agent -s<span style="color:#ff79c6">)</span><span style="color:#f1fa8c">&#34;</span>
+</span></span><span style="display:flex;"><span>   ssh-add ~/.ssh/your_private_key_file
+</span></span><span style="display:flex;"><span>   </span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> </p>
 </li>
 </li>
 <li>
 <li>
 <p><strong>Verify Key in Git Host</strong>: Make sure the corresponding public key (the .pub file) is added to your Git host (e.g., GitHub, GitLab) in the SSH keys section of your account settings.</p>
 <p><strong>Verify Key in Git Host</strong>: Make sure the corresponding public key (the .pub file) is added to your Git host (e.g., GitHub, GitLab) in the SSH keys section of your account settings.</p>
@@ -158,8 +715,120 @@ This command will show you all files in your SSH directory, including your key f
 </li>
 </li>
 <li>
 <li>
 <p>Add the following lines under the <code>[core]</code> section (or create it if it doesn&rsquo;t exist):</p>
 <p>Add the following lines under the <code>[core]</code> section (or create it if it doesn&rsquo;t exist):</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#ff79c6">[core]</span>
-</span></span><span style="display:flex;"><span>    <span style="color:#50fa7b">sshCommand</span> <span style="color:#ff79c6">=</span> <span style="color:#f1fa8c">ssh -i /path/to/private_key_file</span></span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="ini">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span>   <span style="color:#ff79c6">[core]</span>
+</span></span><span style="display:flex;"><span>       <span style="color:#50fa7b">sshCommand</span> <span style="color:#ff79c6">=</span> <span style="color:#f1fa8c">ssh -i /path/to/private_key_file
+</span></span></span><span style="display:flex;"><span><span style="color:#f1fa8c">   </span></span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 </li>
 </li>
 <li>
 <li>
 <p>Save and close the file.</p>
 <p>Save and close the file.</p>

+ 120 - 8
public/posts/2024/gitignore_not_working/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
 When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/posts/2024/gitignore_not_working/" >
+<link rel="canonical" href="http://localhost:55173/posts/2024/gitignore_not_working/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -120,8 +120,120 @@ When .gitignore Doesnt Seem to Work: A Quick Fix | codeskraps
 </li>
 </li>
 <li>
 <li>
 <p>Then, run these two commands:</p>
 <p>Then, run these two commands:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git rm -rf --cached .
-</span></span><span style="display:flex;"><span>git add .</span></span></code></pre></div>
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="bash">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>   git rm -rf --cached .
+</span></span><span style="display:flex;"><span>   git add .
+</span></span><span style="display:flex;"><span>   </span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 </li>
 </li>
 </ol>
 </ol>
 <p>Let&rsquo;s break down what these commands do:</p>
 <p>Let&rsquo;s break down what these commands do:</p>

+ 342 - 9
public/posts/2024/mvi_architecture/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Simplifying MVI Architecture | codeskraps
 Simplifying MVI Architecture | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ Simplifying MVI Architecture | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/posts/2024/mvi_architecture/" >
+<link rel="canonical" href="http://localhost:55173/posts/2024/mvi_architecture/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ Simplifying MVI Architecture | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ Simplifying MVI Architecture | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -115,7 +115,84 @@ Simplifying MVI Architecture | codeskraps
         <p>Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.</p>
         <p>Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.</p>
 <h2 id="the-mvi-helper-class">The MVI Helper Class</h2>
 <h2 id="the-mvi-helper-class">The MVI Helper Class</h2>
 <p>First, let&rsquo;s look at the complete helper class:</p>
 <p>First, let&rsquo;s look at the complete helper class:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">interface</span> <span style="color:#50fa7b">StateReceiver</span>&lt;STATE&gt; {
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="kotlin">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">interface</span> <span style="color:#50fa7b">StateReceiver</span>&lt;STATE&gt; {
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">suspend</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">updateState</span>(transform: <span style="color:#ff79c6">suspend</span> (STATE) <span style="color:#ff79c6">-&gt;</span> STATE)
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">suspend</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">updateState</span>(transform: <span style="color:#ff79c6">suspend</span> (STATE) <span style="color:#ff79c6">-&gt;</span> STATE)
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">suspend</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">withState</span>(block: <span style="color:#ff79c6">suspend</span> (STATE) <span style="color:#ff79c6">-&gt;</span> Unit)
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">suspend</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">withState</span>(block: <span style="color:#ff79c6">suspend</span> (STATE) <span style="color:#ff79c6">-&gt;</span> Unit)
 </span></span><span style="display:flex;"><span>}
 </span></span><span style="display:flex;"><span>}
@@ -185,6 +262,40 @@ Simplifying MVI Architecture | codeskraps
 </span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">throw</span> NotImplementedError()
 </span></span><span style="display:flex;"><span>        <span style="color:#ff79c6">throw</span> NotImplementedError()
 </span></span><span style="display:flex;"><span>    }
 </span></span><span style="display:flex;"><span>    }
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <h2 id="understanding-the-mvi-helper-class">Understanding the MVI Helper Class</h2>
 <h2 id="understanding-the-mvi-helper-class">Understanding the MVI Helper Class</h2>
 <p>Let&rsquo;s break down the key components of our MVI helper class:</p>
 <p>Let&rsquo;s break down the key components of our MVI helper class:</p>
 <h3 id="core-interfaces">Core Interfaces</h3>
 <h3 id="core-interfaces">Core Interfaces</h3>
@@ -211,7 +322,84 @@ Simplifying MVI Architecture | codeskraps
 <p>This class implements the <code>MVIViewModel</code> interface, providing a concrete implementation of the MVI pattern.</p>
 <p>This class implements the <code>MVIViewModel</code> interface, providing a concrete implementation of the MVI pattern.</p>
 <h2 id="example-implementation">Example Implementation</h2>
 <h2 id="example-implementation">Example Implementation</h2>
 <p>Let&rsquo;s implement a simple counter application using our MVI helper class. Note that we can use either data classes or sealed interfaces for our State, Intent, and Action definitions:</p>
 <p>Let&rsquo;s implement a simple counter application using our MVI helper class. Note that we can use either data classes or sealed interfaces for our State, Intent, and Action definitions:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#6272a4">// Define our State, Intent, and Action
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="kotlin">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#6272a4">// Define our State, Intent, and Action
 </span></span></span><span style="display:flex;"><span><span style="color:#6272a4"></span><span style="color:#ff79c6">data</span> <span style="color:#ff79c6">class</span> <span style="color:#50fa7b">CounterState</span>(<span style="color:#ff79c6">val</span> count: Int = <span style="color:#bd93f9">0</span>)
 </span></span></span><span style="display:flex;"><span><span style="color:#6272a4"></span><span style="color:#ff79c6">data</span> <span style="color:#ff79c6">class</span> <span style="color:#50fa7b">CounterState</span>(<span style="color:#ff79c6">val</span> count: Int = <span style="color:#bd93f9">0</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:#ff79c6">sealed</span> <span style="color:#ff79c6">interface</span> <span style="color:#50fa7b">CounterIntent</span> {
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">sealed</span> <span style="color:#ff79c6">interface</span> <span style="color:#50fa7b">CounterIntent</span> {
@@ -245,6 +433,40 @@ Simplifying MVI Architecture | codeskraps
 </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></span></code></pre></div>
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <p>In this example:</p>
 <p>In this example:</p>
 <ol>
 <ol>
 <li>We define our <code>State</code> as a data class, and our <code>Intent</code> and <code>Action</code> as sealed interfaces.</li>
 <li>We define our <code>State</code> as a data class, and our <code>Intent</code> and <code>Action</code> as sealed interfaces.</li>
@@ -254,7 +476,84 @@ Simplifying MVI Architecture | codeskraps
 </ol>
 </ol>
 <h2 id="using-the-viewmodel-in-the-ui">Using the ViewModel in the UI</h2>
 <h2 id="using-the-viewmodel-in-the-ui">Using the ViewModel in the UI</h2>
 <p>Here&rsquo;s how you might use this ViewModel in an Android Activity or Fragment:</p>
 <p>Here&rsquo;s how you might use this ViewModel in an Android Activity or Fragment:</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">class</span> <span style="color:#50fa7b">CounterActivity</span> : AppCompatActivity() {
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="kotlin">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">class</span> <span style="color:#50fa7b">CounterActivity</span> : AppCompatActivity() {
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">private</span> <span style="color:#ff79c6">val</span> viewModel: CounterViewModel <span style="color:#ff79c6">by</span> viewModels()
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">private</span> <span style="color:#ff79c6">val</span> viewModel: CounterViewModel <span style="color:#ff79c6">by</span> viewModels()
 </span></span><span style="display:flex;"><span>
 </span></span><span style="display:flex;"><span>
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">override</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">onCreate</span>(savedInstanceState: Bundle?) {
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">override</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">onCreate</span>(savedInstanceState: Bundle?) {
@@ -290,6 +589,40 @@ Simplifying MVI Architecture | codeskraps
 </span></span><span style="display:flex;"><span>        counterTextView.text = state.count.toString()
 </span></span><span style="display:flex;"><span>        counterTextView.text = state.count.toString()
 </span></span><span style="display:flex;"><span>    }
 </span></span><span style="display:flex;"><span>    }
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <h2 id="conclusion">Conclusion</h2>
 <h2 id="conclusion">Conclusion</h2>
 <p>The MVI helper class we&rsquo;ve explored simplifies the implementation of the MVI pattern, providing a clean and type-safe way to manage state, handle user intents, and emit actions. By using this helper class, you can create more maintainable and testable view models, leading to more robust applications.</p>
 <p>The MVI helper class we&rsquo;ve explored simplifies the implementation of the MVI pattern, providing a clean and type-safe way to manage state, handle user intents, and emit actions. By using this helper class, you can create more maintainable and testable view models, leading to more robust applications.</p>
 <p>Remember that you can use either data classes or sealed interfaces for your State, Intent, and Action definitions, depending on your specific needs. This flexibility allows you to choose the most appropriate structure for each component of your MVI architecture.</p>
 <p>Remember that you can use either data classes or sealed interfaces for your State, Intent, and Action definitions, depending on your specific needs. This flexibility allows you to choose the most appropriate structure for each component of your MVI architecture.</p>

+ 230 - 8
public/posts/2024/react_vs_kmp/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 React Native vs Kotlin Multiplatform | codeskraps
 React Native vs Kotlin Multiplatform | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ React Native vs Kotlin Multiplatform | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/posts/2024/react_vs_kmp/" >
+<link rel="canonical" href="http://localhost:55173/posts/2024/react_vs_kmp/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ React Native vs Kotlin Multiplatform | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ React Native vs Kotlin Multiplatform | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -120,7 +120,84 @@ React Native vs Kotlin Multiplatform | codeskraps
 <h2 id="language-and-learning-curve">Language and Learning Curve</h2>
 <h2 id="language-and-learning-curve">Language and Learning Curve</h2>
 <h3 id="react-native-javascript-for-the-web-developer">React Native: JavaScript for the Web Developer</h3>
 <h3 id="react-native-javascript-for-the-web-developer">React Native: JavaScript for the Web Developer</h3>
 <p>React Native&rsquo;s use of JavaScript as its primary language is a significant advantage for many developers, especially those with a web development background. JavaScript&rsquo;s popularity and the vast ecosystem of tools and libraries make it an accessible choice for beginners and experienced developers alike.</p>
 <p>React Native&rsquo;s use of JavaScript as its primary language is a significant advantage for many developers, especially those with a web development background. JavaScript&rsquo;s popularity and the vast ecosystem of tools and libraries make it an accessible choice for beginners and experienced developers alike.</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#ff79c6">import</span> React from <span style="color:#f1fa8c">&#39;react&#39;</span>;
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="javascript">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#ff79c6">import</span> React from <span style="color:#f1fa8c">&#39;react&#39;</span>;
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">import</span> { Text, View } from <span style="color:#f1fa8c">&#39;react-native&#39;</span>;
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">import</span> { Text, View } from <span style="color:#f1fa8c">&#39;react-native&#39;</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:#ff79c6">const</span> HelloWorldApp <span style="color:#ff79c6">=</span> () =&gt; {
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">const</span> HelloWorldApp <span style="color:#ff79c6">=</span> () =&gt; {
@@ -132,10 +209,121 @@ React Native vs Kotlin Multiplatform | codeskraps
 </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:#ff79c6">export</span> <span style="color:#ff79c6">default</span> HelloWorldApp;</span></span></code></pre></div>
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">export</span> <span style="color:#ff79c6">default</span> HelloWorldApp;</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <p>This familiarity can lead to faster onboarding and development cycles, particularly for teams already versed in web technologies.</p>
 <p>This familiarity can lead to faster onboarding and development cycles, particularly for teams already versed in web technologies.</p>
 <h3 id="kmp-kotlins-modern-features-at-your-fingertips">KMP: Kotlin&rsquo;s Modern Features at Your Fingertips</h3>
 <h3 id="kmp-kotlins-modern-features-at-your-fingertips">KMP: Kotlin&rsquo;s Modern Features at Your Fingertips</h3>
 <p>Kotlin Multiplatform, on the other hand, leverages the power and expressiveness of the Kotlin language. While it may have a steeper learning curve for those not familiar with Kotlin, it offers numerous benefits.</p>
 <p>Kotlin Multiplatform, on the other hand, leverages the power and expressiveness of the Kotlin language. While it may have a steeper learning curve for those not familiar with Kotlin, it offers numerous benefits.</p>
-<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">expect</span> <span style="color:#ff79c6">class</span> <span style="color:#50fa7b">Platform</span>()
+
+<style>
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+}
+
+.code-header {
+    position: absolute;
+    top: 8px;
+    right: 8px;
+    z-index: 999;
+}
+
+.copy-button {
+    display: inline-flex;
+    align-items: center;
+    background: #2d2d2d;
+    color: white;
+    border: 1px solid #404040;
+    border-radius: 4px;
+    padding: 4px 8px;
+    font-size: 0.8em;
+    cursor: pointer;
+    transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+    background: #404040;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    margin-right: 4px;
+}
+
+.tooltip {
+    position: absolute;
+    top: -30px;
+    left: 50%;
+    transform: translateX(-50%);
+    background: black;
+    color: white;
+    padding: 4px 8px;
+    border-radius: 4px;
+    font-size: 12px;
+    display: none;
+}
+
+.tooltip::after {
+    content: "";
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border: 5px solid transparent;
+    border-top-color: black;
+}
+
+.copy-button.copied .tooltip {
+    display: block;
+}
+</style>
+
+<div class="code-block-container" data-lang="kotlin">
+    <div class="code-header">
+        <button class="copy-button" onclick="copyCodeBlock(this)" aria-label="Copy code">
+            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
+                <path d="M8 4v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7.242a2 2 0 0 0-.602-1.43L16.083 2.57A2 2 0 0 0 14.685 2H10a2 2 0 0 0-2 2z"/>
+                <path d="M16 18v2a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h2"/>
+            </svg>
+            <span>Copy</span>
+            <div class="tooltip">Copied!</div>
+        </button>
+    </div>
+    <div class="code-content">
+        <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-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:#ff79c6">expect</span> <span style="color:#ff79c6">class</span> <span style="color:#50fa7b">Platform</span>()
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">expect</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">Platform</span>.name(): String
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">expect</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">Platform</span>.name(): String
 </span></span><span style="display:flex;"><span>
 </span></span><span style="display:flex;"><span>
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">expect</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">hello</span>(): String
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">expect</span> <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">hello</span>(): String
@@ -145,6 +333,40 @@ React Native vs Kotlin Multiplatform | codeskraps
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">class</span> <span style="color:#50fa7b">Greeting</span> {
 </span></span><span style="display:flex;"><span><span style="color:#ff79c6">class</span> <span style="color:#50fa7b">Greeting</span> {
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">greeting</span>(): String = greet()
 </span></span><span style="display:flex;"><span>    <span style="color:#ff79c6">fun</span> <span style="color:#50fa7b">greeting</span>(): String = greet()
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
 </span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
+    </div>
+</div>
+
+<script>
+function copyCodeBlock(button) {
+    const container = button.closest('.code-block-container');
+    const codeContent = container.querySelector('.code-content pre');
+    const code = codeContent.textContent;
+    
+    navigator.clipboard.writeText(code.trim()).then(() => {
+        button.classList.add('copied');
+        setTimeout(() => {
+            button.classList.remove('copied');
+        }, 2000);
+    }).catch(err => {
+        console.error('Failed to copy:', err);
+        
+        const textarea = document.createElement('textarea');
+        textarea.value = code.trim();
+        document.body.appendChild(textarea);
+        textarea.select();
+        try {
+            document.execCommand('copy');
+            button.classList.add('copied');
+            setTimeout(() => {
+                button.classList.remove('copied');
+            }, 2000);
+        } catch (e) {
+            console.error('Fallback failed:', e);
+        }
+        document.body.removeChild(textarea);
+    });
+}
+</script> 
 <p>These features can lead to more robust, maintainable code, which can be especially beneficial for larger, more complex projects.</p>
 <p>These features can lead to more robust, maintainable code, which can be especially beneficial for larger, more complex projects.</p>
 <h2 id="ecosystem-and-libraries">Ecosystem and Libraries</h2>
 <h2 id="ecosystem-and-libraries">Ecosystem and Libraries</h2>
 <h3 id="react-native-a-vast-universe-of-packages">React Native: A Vast Universe of Packages</h3>
 <h3 id="react-native-a-vast-universe-of-packages">React Native: A Vast Universe of Packages</h3>

文件差异内容过多而无法显示
+ 1350 - 18
public/posts/2025/move_home_folder/index.html


+ 13 - 13
public/posts/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Posts | codeskraps
 Posts | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Posts | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/posts/" >
-  <link href="https://codeskraps.com/posts/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/posts/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/posts/" >
+  <link href="http://localhost:55173/posts/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/posts/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Posts | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Posts | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Posts | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2025/move_home_folder/">
+        <a class="postListLink" href="http://localhost:55173/posts/2025/move_home_folder/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -109,7 +109,7 @@ Posts | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -127,7 +127,7 @@ Posts | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -144,7 +144,7 @@ Posts | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/gitignore_not_working/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/gitignore_not_working/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -161,7 +161,7 @@ Posts | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/git_ssh_command/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/git_ssh_command/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 12 - 12
public/posts/index.xml

@@ -2,47 +2,47 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Posts on codeskraps</title>
     <title>Posts on codeskraps</title>
-    <link>https://codeskraps.com/posts/</link>
+    <link>http://localhost:55173/posts/</link>
     <description>Recent content in Posts on codeskraps</description>
     <description>Recent content in Posts on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
-    <atom:link href="https://codeskraps.com/posts/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/posts/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Move /home Folder</title>
       <title>Move /home Folder</title>
-      <link>https://codeskraps.com/posts/2025/move_home_folder/</link>
+      <link>http://localhost:55173/posts/2025/move_home_folder/</link>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2025/move_home_folder/</guid>
+      <guid>http://localhost:55173/posts/2025/move_home_folder/</guid>
       <description>&lt;p&gt;You can move the &lt;code&gt;/home&lt;/code&gt; folder on Ubuntu, but you must do it carefully to avoid breaking your system. Below are the steps to safely move &lt;code&gt;/home&lt;/code&gt; to a new location.&lt;/p&gt;</description>
       <description>&lt;p&gt;You can move the &lt;code&gt;/home&lt;/code&gt; folder on Ubuntu, but you must do it carefully to avoid breaking your system. Below are the steps to safely move &lt;code&gt;/home&lt;/code&gt; to a new location.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>When .gitignore Doesnt Seem to Work: A Quick Fix</title>
       <title>When .gitignore Doesnt Seem to Work: A Quick Fix</title>
-      <link>https://codeskraps.com/posts/2024/gitignore_not_working/</link>
+      <link>http://localhost:55173/posts/2024/gitignore_not_working/</link>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/gitignore_not_working/</guid>
+      <guid>http://localhost:55173/posts/2024/gitignore_not_working/</guid>
       <description>&lt;p&gt;As developers, we&amp;rsquo;ve all been there. You&amp;rsquo;ve added a file or folder to your &lt;code&gt;.gitignore&lt;/code&gt;, but Git keeps tracking it anyway. What gives? Let&amp;rsquo;s dive into why this happens and how to fix it.&lt;/p&gt;</description>
       <description>&lt;p&gt;As developers, we&amp;rsquo;ve all been there. You&amp;rsquo;ve added a file or folder to your &lt;code&gt;.gitignore&lt;/code&gt;, but Git keeps tracking it anyway. What gives? Let&amp;rsquo;s dive into why this happens and how to fix it.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Configuring SSH Keys for Individual Git Commands</title>
       <title>Configuring SSH Keys for Individual Git Commands</title>
-      <link>https://codeskraps.com/posts/2024/git_ssh_command/</link>
+      <link>http://localhost:55173/posts/2024/git_ssh_command/</link>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/git_ssh_command/</guid>
+      <guid>http://localhost:55173/posts/2024/git_ssh_command/</guid>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 6 - 6
public/projects/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Projects | codeskraps
 Projects | codeskraps
 </title>
 </title>
@@ -13,7 +13,7 @@ Projects | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/projects/" >
+<link rel="canonical" href="http://localhost:55173/projects/" >
 
 
 
 
 
 
@@ -31,7 +31,7 @@ Projects | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -41,17 +41,17 @@ Projects | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 

+ 23 - 23
public/sitemap.xml

@@ -2,70 +2,70 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <url>
   <url>
-    <loc>https://codeskraps.com/about/</loc>
+    <loc>http://localhost:55173/about/</loc>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/</loc>
+    <loc>http://localhost:55173/</loc>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/linux/</loc>
+    <loc>http://localhost:55173/tags/linux/</loc>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/2025/move_home_folder/</loc>
+    <loc>http://localhost:55173/posts/2025/move_home_folder/</loc>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/</loc>
+    <loc>http://localhost:55173/posts/</loc>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/</loc>
+    <loc>http://localhost:55173/tags/</loc>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
     <lastmod>2025-01-29T14:30:17+01:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/android/</loc>
+    <loc>http://localhost:55173/tags/android/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/ios/</loc>
+    <loc>http://localhost:55173/tags/ios/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/kmp/</loc>
+    <loc>http://localhost:55173/tags/kmp/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/kotlin/</loc>
+    <loc>http://localhost:55173/tags/kotlin/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/2024/react_vs_kmp/</loc>
+    <loc>http://localhost:55173/posts/2024/react_vs_kmp/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/react-native/</loc>
+    <loc>http://localhost:55173/tags/react-native/</loc>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
     <lastmod>2024-10-03T17:16:34+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/architecture/</loc>
+    <loc>http://localhost:55173/tags/architecture/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/mvi/</loc>
+    <loc>http://localhost:55173/tags/mvi/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/mvvm/</loc>
+    <loc>http://localhost:55173/tags/mvvm/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/2024/mvi_architecture/</loc>
+    <loc>http://localhost:55173/posts/2024/mvi_architecture/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/viewmodel/</loc>
+    <loc>http://localhost:55173/tags/viewmodel/</loc>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
     <lastmod>2024-09-27T13:45:09+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/git/</loc>
+    <loc>http://localhost:55173/tags/git/</loc>
     <lastmod>2024-06-02T18:14:23+02:00</lastmod>
     <lastmod>2024-06-02T18:14:23+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/2024/gitignore_not_working/</loc>
+    <loc>http://localhost:55173/posts/2024/gitignore_not_working/</loc>
     <lastmod>2024-06-02T18:14:23+02:00</lastmod>
     <lastmod>2024-06-02T18:14:23+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/posts/2024/git_ssh_command/</loc>
+    <loc>http://localhost:55173/posts/2024/git_ssh_command/</loc>
     <lastmod>2024-04-17T16:56:53+02:00</lastmod>
     <lastmod>2024-04-17T16:56:53+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/tags/ssh/</loc>
+    <loc>http://localhost:55173/tags/ssh/</loc>
     <lastmod>2024-04-17T16:56:53+02:00</lastmod>
     <lastmod>2024-04-17T16:56:53+02:00</lastmod>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/categories/</loc>
+    <loc>http://localhost:55173/categories/</loc>
   </url><url>
   </url><url>
-    <loc>https://codeskraps.com/projects/</loc>
+    <loc>http://localhost:55173/projects/</loc>
   </url>
   </url>
 </urlset>
 </urlset>

+ 10 - 10
public/tags/android/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Android | codeskraps
 Android | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Android | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/android/" >
-  <link href="https://codeskraps.com/tags/android/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/android/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/android/" >
+  <link href="http://localhost:55173/tags/android/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/android/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Android | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Android | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Android | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -110,7 +110,7 @@ Android | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 6 - 6
public/tags/android/index.xml

@@ -2,26 +2,26 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Android on codeskraps</title>
     <title>Android on codeskraps</title>
-    <link>https://codeskraps.com/tags/android/</link>
+    <link>http://localhost:55173/tags/android/</link>
     <description>Recent content in Android on codeskraps</description>
     <description>Recent content in Android on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/android/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/android/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/architecture/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Architecture | codeskraps
 Architecture | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Architecture | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/architecture/" >
-  <link href="https://codeskraps.com/tags/architecture/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/architecture/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/architecture/" >
+  <link href="http://localhost:55173/tags/architecture/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/architecture/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Architecture | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Architecture | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Architecture | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/architecture/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Architecture on codeskraps</title>
     <title>Architecture on codeskraps</title>
-    <link>https://codeskraps.com/tags/architecture/</link>
+    <link>http://localhost:55173/tags/architecture/</link>
     <description>Recent content in Architecture on codeskraps</description>
     <description>Recent content in Architecture on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 10 - 10
public/tags/git/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Git | codeskraps
 Git | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Git | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/git/" >
-  <link href="https://codeskraps.com/tags/git/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/git/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/git/" >
+  <link href="http://localhost:55173/tags/git/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/git/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Git | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Git | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Git | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/gitignore_not_working/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/gitignore_not_working/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -109,7 +109,7 @@ Git | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/git_ssh_command/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/git_ssh_command/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 6 - 6
public/tags/git/index.xml

@@ -2,26 +2,26 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Git on codeskraps</title>
     <title>Git on codeskraps</title>
-    <link>https://codeskraps.com/tags/git/</link>
+    <link>http://localhost:55173/tags/git/</link>
     <description>Recent content in Git on codeskraps</description>
     <description>Recent content in Git on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Sun, 02 Jun 2024 18:14:23 +0200</lastBuildDate>
     <lastBuildDate>Sun, 02 Jun 2024 18:14:23 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/git/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/git/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>When .gitignore Doesnt Seem to Work: A Quick Fix</title>
       <title>When .gitignore Doesnt Seem to Work: A Quick Fix</title>
-      <link>https://codeskraps.com/posts/2024/gitignore_not_working/</link>
+      <link>http://localhost:55173/posts/2024/gitignore_not_working/</link>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/gitignore_not_working/</guid>
+      <guid>http://localhost:55173/posts/2024/gitignore_not_working/</guid>
       <description>&lt;p&gt;As developers, we&amp;rsquo;ve all been there. You&amp;rsquo;ve added a file or folder to your &lt;code&gt;.gitignore&lt;/code&gt;, but Git keeps tracking it anyway. What gives? Let&amp;rsquo;s dive into why this happens and how to fix it.&lt;/p&gt;</description>
       <description>&lt;p&gt;As developers, we&amp;rsquo;ve all been there. You&amp;rsquo;ve added a file or folder to your &lt;code&gt;.gitignore&lt;/code&gt;, but Git keeps tracking it anyway. What gives? Let&amp;rsquo;s dive into why this happens and how to fix it.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Configuring SSH Keys for Individual Git Commands</title>
       <title>Configuring SSH Keys for Individual Git Commands</title>
-      <link>https://codeskraps.com/posts/2024/git_ssh_command/</link>
+      <link>http://localhost:55173/posts/2024/git_ssh_command/</link>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/git_ssh_command/</guid>
+      <guid>http://localhost:55173/posts/2024/git_ssh_command/</guid>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 20 - 20
public/tags/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Tags | codeskraps
 Tags | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Tags | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/" >
-  <link href="https://codeskraps.com/tags/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/" >
+  <link href="http://localhost:55173/tags/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Tags | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Tags | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Tags | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/linux/">
+        <a class="postListLink" href="http://localhost:55173/tags/linux/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -109,7 +109,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/android/">
+        <a class="postListLink" href="http://localhost:55173/tags/android/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -126,7 +126,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/ios/">
+        <a class="postListLink" href="http://localhost:55173/tags/ios/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -143,7 +143,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/kmp/">
+        <a class="postListLink" href="http://localhost:55173/tags/kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -160,7 +160,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/kotlin/">
+        <a class="postListLink" href="http://localhost:55173/tags/kotlin/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -177,7 +177,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/react-native/">
+        <a class="postListLink" href="http://localhost:55173/tags/react-native/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -194,7 +194,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/architecture/">
+        <a class="postListLink" href="http://localhost:55173/tags/architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -211,7 +211,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/mvi/">
+        <a class="postListLink" href="http://localhost:55173/tags/mvi/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -228,7 +228,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/mvvm/">
+        <a class="postListLink" href="http://localhost:55173/tags/mvvm/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -245,7 +245,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/viewmodel/">
+        <a class="postListLink" href="http://localhost:55173/tags/viewmodel/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -262,7 +262,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/git/">
+        <a class="postListLink" href="http://localhost:55173/tags/git/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -279,7 +279,7 @@ Tags | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/tags/ssh/">
+        <a class="postListLink" href="http://localhost:55173/tags/ssh/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 26 - 26
public/tags/index.xml

@@ -2,96 +2,96 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Tags on codeskraps</title>
     <title>Tags on codeskraps</title>
-    <link>https://codeskraps.com/tags/</link>
+    <link>http://localhost:55173/tags/</link>
     <description>Recent content in Tags on codeskraps</description>
     <description>Recent content in Tags on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Linux</title>
       <title>Linux</title>
-      <link>https://codeskraps.com/tags/linux/</link>
+      <link>http://localhost:55173/tags/linux/</link>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/linux/</guid>
+      <guid>http://localhost:55173/tags/linux/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Android</title>
       <title>Android</title>
-      <link>https://codeskraps.com/tags/android/</link>
+      <link>http://localhost:55173/tags/android/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/android/</guid>
+      <guid>http://localhost:55173/tags/android/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Ios</title>
       <title>Ios</title>
-      <link>https://codeskraps.com/tags/ios/</link>
+      <link>http://localhost:55173/tags/ios/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/ios/</guid>
+      <guid>http://localhost:55173/tags/ios/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Kmp</title>
       <title>Kmp</title>
-      <link>https://codeskraps.com/tags/kmp/</link>
+      <link>http://localhost:55173/tags/kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/kmp/</guid>
+      <guid>http://localhost:55173/tags/kmp/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Kotlin</title>
       <title>Kotlin</title>
-      <link>https://codeskraps.com/tags/kotlin/</link>
+      <link>http://localhost:55173/tags/kotlin/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/kotlin/</guid>
+      <guid>http://localhost:55173/tags/kotlin/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>React-Native</title>
       <title>React-Native</title>
-      <link>https://codeskraps.com/tags/react-native/</link>
+      <link>http://localhost:55173/tags/react-native/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/react-native/</guid>
+      <guid>http://localhost:55173/tags/react-native/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Architecture</title>
       <title>Architecture</title>
-      <link>https://codeskraps.com/tags/architecture/</link>
+      <link>http://localhost:55173/tags/architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/architecture/</guid>
+      <guid>http://localhost:55173/tags/architecture/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Mvi</title>
       <title>Mvi</title>
-      <link>https://codeskraps.com/tags/mvi/</link>
+      <link>http://localhost:55173/tags/mvi/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/mvi/</guid>
+      <guid>http://localhost:55173/tags/mvi/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Mvvm</title>
       <title>Mvvm</title>
-      <link>https://codeskraps.com/tags/mvvm/</link>
+      <link>http://localhost:55173/tags/mvvm/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/mvvm/</guid>
+      <guid>http://localhost:55173/tags/mvvm/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Viewmodel</title>
       <title>Viewmodel</title>
-      <link>https://codeskraps.com/tags/viewmodel/</link>
+      <link>http://localhost:55173/tags/viewmodel/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/viewmodel/</guid>
+      <guid>http://localhost:55173/tags/viewmodel/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Git</title>
       <title>Git</title>
-      <link>https://codeskraps.com/tags/git/</link>
+      <link>http://localhost:55173/tags/git/</link>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Sun, 02 Jun 2024 18:14:23 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/git/</guid>
+      <guid>http://localhost:55173/tags/git/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
     <item>
     <item>
       <title>Ssh</title>
       <title>Ssh</title>
-      <link>https://codeskraps.com/tags/ssh/</link>
+      <link>http://localhost:55173/tags/ssh/</link>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/tags/ssh/</guid>
+      <guid>http://localhost:55173/tags/ssh/</guid>
       <description></description>
       <description></description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/ios/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Ios | codeskraps
 Ios | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Ios | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/ios/" >
-  <link href="https://codeskraps.com/tags/ios/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/ios/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/ios/" >
+  <link href="http://localhost:55173/tags/ios/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/ios/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Ios | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Ios | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Ios | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/ios/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Ios on codeskraps</title>
     <title>Ios on codeskraps</title>
-    <link>https://codeskraps.com/tags/ios/</link>
+    <link>http://localhost:55173/tags/ios/</link>
     <description>Recent content in Ios on codeskraps</description>
     <description>Recent content in Ios on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/ios/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/ios/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 10 - 10
public/tags/kmp/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Kmp | codeskraps
 Kmp | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Kmp | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/kmp/" >
-  <link href="https://codeskraps.com/tags/kmp/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/kmp/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/kmp/" >
+  <link href="http://localhost:55173/tags/kmp/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/kmp/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Kmp | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Kmp | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Kmp | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -110,7 +110,7 @@ Kmp | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 6 - 6
public/tags/kmp/index.xml

@@ -2,26 +2,26 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Kmp on codeskraps</title>
     <title>Kmp on codeskraps</title>
-    <link>https://codeskraps.com/tags/kmp/</link>
+    <link>http://localhost:55173/tags/kmp/</link>
     <description>Recent content in Kmp on codeskraps</description>
     <description>Recent content in Kmp on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/kmp/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/kmp/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 10 - 10
public/tags/kotlin/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Kotlin | codeskraps
 Kotlin | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Kotlin | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/kotlin/" >
-  <link href="https://codeskraps.com/tags/kotlin/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/kotlin/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/kotlin/" >
+  <link href="http://localhost:55173/tags/kotlin/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/kotlin/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Kotlin | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Kotlin | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Kotlin | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">
@@ -110,7 +110,7 @@ Kotlin | codeskraps
 
 
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 6 - 6
public/tags/kotlin/index.xml

@@ -2,26 +2,26 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Kotlin on codeskraps</title>
     <title>Kotlin on codeskraps</title>
-    <link>https://codeskraps.com/tags/kotlin/</link>
+    <link>http://localhost:55173/tags/kotlin/</link>
     <description>Recent content in Kotlin on codeskraps</description>
     <description>Recent content in Kotlin on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/kotlin/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/kotlin/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/linux/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Linux | codeskraps
 Linux | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Linux | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/linux/" >
-  <link href="https://codeskraps.com/tags/linux/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/linux/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/linux/" >
+  <link href="http://localhost:55173/tags/linux/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/linux/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Linux | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Linux | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Linux | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2025/move_home_folder/">
+        <a class="postListLink" href="http://localhost:55173/posts/2025/move_home_folder/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/linux/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Linux on codeskraps</title>
     <title>Linux on codeskraps</title>
-    <link>https://codeskraps.com/tags/linux/</link>
+    <link>http://localhost:55173/tags/linux/</link>
     <description>Recent content in Linux on codeskraps</description>
     <description>Recent content in Linux on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
     <lastBuildDate>Wed, 29 Jan 2025 14:30:17 +0100</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/linux/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/linux/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Move /home Folder</title>
       <title>Move /home Folder</title>
-      <link>https://codeskraps.com/posts/2025/move_home_folder/</link>
+      <link>http://localhost:55173/posts/2025/move_home_folder/</link>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 29 Jan 2025 14:30:17 +0100</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2025/move_home_folder/</guid>
+      <guid>http://localhost:55173/posts/2025/move_home_folder/</guid>
       <description>&lt;p&gt;You can move the &lt;code&gt;/home&lt;/code&gt; folder on Ubuntu, but you must do it carefully to avoid breaking your system. Below are the steps to safely move &lt;code&gt;/home&lt;/code&gt; to a new location.&lt;/p&gt;</description>
       <description>&lt;p&gt;You can move the &lt;code&gt;/home&lt;/code&gt; folder on Ubuntu, but you must do it carefully to avoid breaking your system. Below are the steps to safely move &lt;code&gt;/home&lt;/code&gt; to a new location.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/mvi/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Mvi | codeskraps
 Mvi | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Mvi | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/mvi/" >
-  <link href="https://codeskraps.com/tags/mvi/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/mvi/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/mvi/" >
+  <link href="http://localhost:55173/tags/mvi/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/mvi/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Mvi | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Mvi | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Mvi | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/mvi/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Mvi on codeskraps</title>
     <title>Mvi on codeskraps</title>
-    <link>https://codeskraps.com/tags/mvi/</link>
+    <link>http://localhost:55173/tags/mvi/</link>
     <description>Recent content in Mvi on codeskraps</description>
     <description>Recent content in Mvi on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/mvi/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/mvi/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/mvvm/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Mvvm | codeskraps
 Mvvm | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Mvvm | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/mvvm/" >
-  <link href="https://codeskraps.com/tags/mvvm/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/mvvm/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/mvvm/" >
+  <link href="http://localhost:55173/tags/mvvm/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/mvvm/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Mvvm | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Mvvm | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Mvvm | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/mvvm/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Mvvm on codeskraps</title>
     <title>Mvvm on codeskraps</title>
-    <link>https://codeskraps.com/tags/mvvm/</link>
+    <link>http://localhost:55173/tags/mvvm/</link>
     <description>Recent content in Mvvm on codeskraps</description>
     <description>Recent content in Mvvm on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/mvvm/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/mvvm/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/react-native/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 React-Native | codeskraps
 React-Native | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ React-Native | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/react-native/" >
-  <link href="https://codeskraps.com/tags/react-native/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/react-native/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/react-native/" >
+  <link href="http://localhost:55173/tags/react-native/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/react-native/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ React-Native | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ React-Native | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ React-Native | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/react_vs_kmp/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/react_vs_kmp/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/react-native/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>React-Native on codeskraps</title>
     <title>React-Native on codeskraps</title>
-    <link>https://codeskraps.com/tags/react-native/</link>
+    <link>http://localhost:55173/tags/react-native/</link>
     <description>Recent content in React-Native on codeskraps</description>
     <description>Recent content in React-Native on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
     <lastBuildDate>Thu, 03 Oct 2024 17:16:34 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/react-native/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/react-native/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>React Native vs Kotlin Multiplatform</title>
       <title>React Native vs Kotlin Multiplatform</title>
-      <link>https://codeskraps.com/posts/2024/react_vs_kmp/</link>
+      <link>http://localhost:55173/posts/2024/react_vs_kmp/</link>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Thu, 03 Oct 2024 17:16:34 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/react_vs_kmp/</guid>
+      <guid>http://localhost:55173/posts/2024/react_vs_kmp/</guid>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
       <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In the ever-evolving world of mobile app development, choosing the right cross-platform framework can be a game-changer for businesses and developers alike. Two prominent contenders in this space are React Native and Kotlin Multiplatform (KMP). Both offer unique approaches to the challenge of writing code once and deploying it across multiple platforms. This article will dive deep into the strengths and considerations of each, helping you make an informed decision for your next project.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/ssh/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Ssh | codeskraps
 Ssh | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Ssh | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/ssh/" >
-  <link href="https://codeskraps.com/tags/ssh/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/ssh/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/ssh/" >
+  <link href="http://localhost:55173/tags/ssh/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/ssh/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Ssh | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Ssh | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Ssh | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/git_ssh_command/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/git_ssh_command/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/ssh/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Ssh on codeskraps</title>
     <title>Ssh on codeskraps</title>
-    <link>https://codeskraps.com/tags/ssh/</link>
+    <link>http://localhost:55173/tags/ssh/</link>
     <description>Recent content in Ssh on codeskraps</description>
     <description>Recent content in Ssh on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Wed, 17 Apr 2024 16:56:53 +0200</lastBuildDate>
     <lastBuildDate>Wed, 17 Apr 2024 16:56:53 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/ssh/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/ssh/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Configuring SSH Keys for Individual Git Commands</title>
       <title>Configuring SSH Keys for Individual Git Commands</title>
-      <link>https://codeskraps.com/posts/2024/git_ssh_command/</link>
+      <link>http://localhost:55173/posts/2024/git_ssh_command/</link>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Wed, 17 Apr 2024 16:56:53 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/git_ssh_command/</guid>
+      <guid>http://localhost:55173/posts/2024/git_ssh_command/</guid>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
       <description>&lt;p&gt;When working with Git repositories, you often need to authenticate using SSH keys. While you can configure SSH settings globally, there are times when you need to use a specific SSH key for just one command. This is particularly useful when cloning a new repository or adding a submodule, where there isn&amp;rsquo;t yet a local &lt;code&gt;.git/config&lt;/code&gt; file to modify.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 9 - 9
public/tags/viewmodel/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html lang="en-us">
 <html lang="en-us">
 
 
-<head>
+<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=55173&amp;path=livereload" data-no-instant defer></script>
     <title>
     <title>
 Viewmodel | codeskraps
 Viewmodel | codeskraps
 </title>
 </title>
@@ -13,9 +13,9 @@ Viewmodel | codeskraps
 <meta name="generator" content="Hugo 0.145.0">
 <meta name="generator" content="Hugo 0.145.0">
 
 
 
 
-<link rel="canonical" href="https://codeskraps.com/tags/viewmodel/" >
-  <link href="https://codeskraps.com/tags/viewmodel/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
-  <link href="https://codeskraps.com/tags/viewmodel/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
+<link rel="canonical" href="http://localhost:55173/tags/viewmodel/" >
+  <link href="http://localhost:55173/tags/viewmodel/index.xml" rel="alternate" type="application/rss+xml" title="codeskraps" >
+  <link href="http://localhost:55173/tags/viewmodel/index.xml" rel="feed" type="application/rss+xml" title="codeskraps" >
 
 
 
 
 
 
@@ -33,7 +33,7 @@ Viewmodel | codeskraps
         <header class="headerWrapper">
         <header class="headerWrapper">
     <div class="header">
     <div class="header">
         <div>
         <div>
-            <a class="terminal" href="https://codeskraps.com/">
+            <a class="terminal" href="http://localhost:55173/">
                 <span>me@codeskraps.com ~ $</span>
                 <span>me@codeskraps.com ~ $</span>
             </a>
             </a>
         </div>
         </div>
@@ -43,17 +43,17 @@ Viewmodel | codeskraps
             <ul>
             <ul>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/posts/" title="" >
+                    <a href="http://localhost:55173/posts/" title="" >
                         ~/posts</a>
                         ~/posts</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/projects/" title="" >
+                    <a href="http://localhost:55173/projects/" title="" >
                         ~/projects</a>
                         ~/projects</a>
                 </li>
                 </li>
                 
                 
                 <li>
                 <li>
-                    <a href="https://codeskraps.com/about/" title="" >
+                    <a href="http://localhost:55173/about/" title="" >
                         ~/about</a>
                         ~/about</a>
                 </li>
                 </li>
                 
                 
@@ -92,7 +92,7 @@ Viewmodel | codeskraps
     <div>
     <div>
         
         
 
 
-        <a class="postListLink" href="https://codeskraps.com/posts/2024/mvi_architecture/">
+        <a class="postListLink" href="http://localhost:55173/posts/2024/mvi_architecture/">
             
             
             <div class="postListItem" role="listitem">
             <div class="postListItem" role="listitem">
                 <div class="postHeader">
                 <div class="postHeader">

+ 4 - 4
public/tags/viewmodel/index.xml

@@ -2,19 +2,19 @@
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
   <channel>
     <title>Viewmodel on codeskraps</title>
     <title>Viewmodel on codeskraps</title>
-    <link>https://codeskraps.com/tags/viewmodel/</link>
+    <link>http://localhost:55173/tags/viewmodel/</link>
     <description>Recent content in Viewmodel on codeskraps</description>
     <description>Recent content in Viewmodel on codeskraps</description>
     <generator>Hugo</generator>
     <generator>Hugo</generator>
     <language>en-us</language>
     <language>en-us</language>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <managingEditor>me@codeskraps.com (codeskraps)</managingEditor>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <webMaster>me@codeskraps.com (codeskraps)</webMaster>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
     <lastBuildDate>Fri, 27 Sep 2024 13:45:09 +0200</lastBuildDate>
-    <atom:link href="https://codeskraps.com/tags/viewmodel/index.xml" rel="self" type="application/rss+xml" />
+    <atom:link href="http://localhost:55173/tags/viewmodel/index.xml" rel="self" type="application/rss+xml" />
     <item>
     <item>
       <title>Simplifying MVI Architecture</title>
       <title>Simplifying MVI Architecture</title>
-      <link>https://codeskraps.com/posts/2024/mvi_architecture/</link>
+      <link>http://localhost:55173/posts/2024/mvi_architecture/</link>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
       <pubDate>Fri, 27 Sep 2024 13:45:09 +0200</pubDate><author>me@codeskraps.com (codeskraps)</author>
-      <guid>https://codeskraps.com/posts/2024/mvi_architecture/</guid>
+      <guid>http://localhost:55173/posts/2024/mvi_architecture/</guid>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
       <description>&lt;p&gt;Model-View-Intent (MVI) is a powerful architectural pattern for building user interfaces, especially in Android development. In this post, we&amp;rsquo;ll explore a helper class that simplifies the implementation of MVI, making it easier to manage state, handle user intents, and emit actions in your application.&lt;/p&gt;</description>
     </item>
     </item>
   </channel>
   </channel>

+ 89 - 0
static/css/code-copy.css

@@ -0,0 +1,89 @@
+.code-block-container {
+    position: relative;
+    margin: 1em 0;
+    background: #1e1e1e;
+}
+
+.code-header {
+    position: absolute;
+    top: 0.5rem;
+    right: 0.5rem !important;
+    z-index: 20;
+}
+
+.copy-button {
+    background: #2d2d2d !important;
+    border: 1px solid #404040 !important;
+    cursor: pointer;
+    padding: 0.4rem 0.8rem;
+    display: flex;
+    align-items: center;
+    gap: 0.5rem;
+    color: #ffffff !important;
+    border-radius: 4px;
+    transition: all 0.2s ease;
+    font-size: 0.85em;
+    line-height: 1;
+    min-height: 32px;
+}
+
+.copy-button:hover {
+    background-color: #404040 !important;
+    border-color: #505050 !important;
+}
+
+.copy-button svg {
+    width: 14px;
+    height: 14px;
+    stroke: currentColor;
+}
+
+.copy-button .button-text {
+    color: #ffffff !important;
+}
+
+.copy-button .tooltip {
+    visibility: hidden;
+    position: absolute;
+    top: -2.5rem;
+    left: 50%;
+    transform: translateX(-50%);
+    background: #000000;
+    color: #ffffff;
+    padding: 0.4rem 0.8rem;
+    border-radius: 4px;
+    font-size: 0.75rem;
+    white-space: nowrap;
+    opacity: 0;
+    transition: opacity 0.2s ease, visibility 0.2s ease;
+    pointer-events: none;
+    z-index: 30;
+}
+
+.copy-button.copied .tooltip {
+    visibility: visible;
+    opacity: 1;
+}
+
+.copy-button.copied {
+    background-color: #1a4721 !important;
+    border-color: #2ea043 !important;
+    color: #3fb950 !important;
+}
+
+.code-content {
+    position: relative;
+    overflow-x: auto;
+    padding: 1rem;
+}
+
+.copy-button .tooltip::after {
+    content: '';
+    position: absolute;
+    top: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+    border-width: 5px;
+    border-style: solid;
+    border-color: #000000 transparent transparent transparent;
+} 

+ 40 - 0
static/js/code-copy.js

@@ -0,0 +1,40 @@
+function copyCode(button) {
+    const codeBlock = button.closest('.code-block-container').querySelector('.code-content');
+    // Get the actual code content, excluding any highlight tags
+    const preElement = codeBlock.querySelector('pre');
+    const code = preElement ? preElement.textContent : codeBlock.textContent;
+    const tooltip = button.querySelector('.tooltip');
+
+    // Create a temporary textarea to copy the text
+    const textarea = document.createElement('textarea');
+    textarea.value = code.trim();
+    document.body.appendChild(textarea);
+    textarea.select();
+
+    try {
+        document.execCommand('copy');
+        button.classList.add('copied');
+        tooltip.textContent = 'Copied!';
+        
+        // Fallback to modern clipboard API if available
+        if (navigator.clipboard) {
+            navigator.clipboard.writeText(code.trim()).catch(() => {});
+        }
+
+        setTimeout(() => {
+            button.classList.remove('copied');
+            tooltip.textContent = '';
+        }, 2000);
+    } catch (err) {
+        console.error('Failed to copy:', err);
+        tooltip.textContent = 'Failed to copy';
+        button.classList.add('copied');
+        
+        setTimeout(() => {
+            button.classList.remove('copied');
+            tooltip.textContent = '';
+        }, 2000);
+    } finally {
+        document.body.removeChild(textarea);
+    }
+} 

部分文件因为文件数量过多而无法显示