<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title></title>
        <link>https://www.080f53.com/blog</link>
        <description></description>
        <lastBuildDate>Sun, 22 Dec 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-us</language>
        <copyright>Copyright © ${new Date().getFullYear()} 080f53</copyright>
        <item>
            <title><![CDATA[Cataloging my collection of CDs and vinyl records]]></title>
            <link>https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection</link>
            <guid>https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection</guid>
            <pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Music is more than just sound—it's a story, a mood, and a reflection of who we are. With that in mind, I wanted to combine my passion for music with my love for documenting things, including the atypical.]]></description>
            <content:encoded><![CDATA[<p>Music is more than just sound—it's a story, a mood, and a reflection of who we are. With that in mind, I wanted to combine my passion for music with my love for documenting things, including the atypical.</p>
<p>First, I created the <a href="https://github.com/josh-wong/music-collection" target="_blank" rel="noopener noreferrer">music-collection</a> repository, which catalogs my CDs and vinyl records. When I merge PRs that include changes to my collection, that repository syncs the updated contents to <a href="https://github.com/josh-wong/josh-wong.github.io" target="_blank" rel="noopener noreferrer">my website repository</a>. Then, my website updates with the new changes.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-i-chose-to-catalog-my-collection-of-cds-and-vinyl-records">Why I chose to catalog my collection of CDs and vinyl records<a href="https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection#why-i-chose-to-catalog-my-collection-of-cds-and-vinyl-records" class="hash-link" aria-label="Direct link to Why I chose to catalog my collection of CDs and vinyl records" title="Direct link to Why I chose to catalog my collection of CDs and vinyl records">​</a></h2>
<p>When you buy physical copies of music, keeping track of what albums you own can be difficult to remember. In particular, if a CD or vinyl record has multiple releases, like for specific countries, high-resolution formats, or re-releases, you might need to.</p>
<p>I chose to catalog my music collection so that I could:</p>
<ul>
<li><strong>Catalog my music collection:</strong> This project is a digital keepsake for my growing collection of CDs and vinyl records, and is available whenever I need to refer to my collection.</li>
<li><strong>Share what albums I own:</strong> With my collections publicly available, I can share not only my collection but also my tastes in music with others.</li>
<li><strong>Document the unordinary:</strong> Cataloging album information is significantly different from writing guides or tutorials. Because of this, showcasing this type of information requires a different type of creativity.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-kinds-of-details-i-chose-to-include-about-each-album">What kinds of details I chose to include about each album<a href="https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection#what-kinds-of-details-i-chose-to-include-about-each-album" class="hash-link" aria-label="Direct link to What kinds of details I chose to include about each album" title="Direct link to What kinds of details I chose to include about each album">​</a></h2>
<p>In my <a href="https://www.080f53.com/projects/music-collection">Music collection</a> project, you'll find an evolving catalog of CDs and vinyl records, each of which includes the following details:</p>
<table><thead><tr><th style="text-align:left">Details</th><th style="text-align:left">Options</th></tr></thead><tbody><tr><td style="text-align:left"><strong>Format</strong></td><td style="text-align:left">CD or Vinyl</td></tr><tr><td style="text-align:left"><strong>Country</strong></td><td style="text-align:left">Country of origin</td></tr><tr><td style="text-align:left"><strong>Released</strong></td><td style="text-align:left">Year the album was released</td></tr><tr><td style="text-align:left"><strong>Case</strong></td><td style="text-align:left"><strong>CDs:</strong> Digipak, Eco pack, Gatefold paper sleeve, Jewel case, or Mini-LP sleeve<br><strong>Vinyl:</strong> Cardboard</td></tr><tr><td style="text-align:left"><strong>Obi</strong></td><td style="text-align:left">Yes or No</td></tr><tr><td style="text-align:left"><strong>Additional details</strong></td><td style="text-align:left">Link to a reputable site, like <a href="https://www.discogs.com/" target="_blank" rel="noopener noreferrer">Discogs</a></td></tr></tbody></table>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>An obi is a strip of paper around the spine of a CD case that's used to advertise the CD. When reselling used CDs, collectors often favor CDs with an obi, especially if the CD is uncommon or rare and/or if the obi is from a specific series.</p></div></div>
<p>The following screenshot shows the details that I include with each album entry:</p>
<p><img decoding="async" loading="lazy" alt="Music collection - Top of the A page" src="https://www.080f53.com/assets/images/2024-12-22-music-collection-a-048f82fb110c565bc5ac3e82e8eabafd.jpg" width="1972" height="1072" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-i-update-my-music-collection">How I update my music collection<a href="https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection#how-i-update-my-music-collection" class="hash-link" aria-label="Direct link to How I update my music collection" title="Direct link to How I update my music collection">​</a></h2>
<p>This project requires a few steps, some of which are automated. The process is as follows:</p>
<ol>
<li>In the <a href="https://github.com/josh-wong/music-collection" target="_blank" rel="noopener noreferrer">music-collection</a> repository, I:<!-- -->
<ol>
<li>Create a branch.</li>
<li>Add, update, or remove albums or album information.</li>
<li>Create a PR that targets the <strong>main</strong> branch.</li>
<li>Confirm the changes in the PR.</li>
<li>Merge the PR.</li>
</ol>
</li>
<li>The <a href="https://github.com/josh-wong/music-collection/blob/main/.github/workflows/sync-docs.yml" target="_blank" rel="noopener noreferrer">syncing workflow</a> automatically syncs the updates as a branch to <a href="https://github.com/josh-wong/josh-wong.github.io" target="_blank" rel="noopener noreferrer">my website repository</a>.</li>
<li>The <a href="https://github.com/josh-wong/josh-wong.github.io/blob/main/.github/workflows/auto-create-pr-cd-component.yml" target="_blank" rel="noopener noreferrer">auto-PR workflow for my music collection</a> automatically creates a PR.</li>
<li>If the checks in that PR run successfully, I merge the PR.</li>
<li>GitHub Pages builds and deploys my site by using a <a href="https://github.com/josh-wong/josh-wong.github.io/blob/main/.github/workflows/deploy.yml" target="_blank" rel="noopener noreferrer">workflow for Docusaurus</a>.</li>
</ol>
<p>In addition, the Markdown files in <a href="https://github.com/josh-wong/music-collection" target="_blank" rel="noopener noreferrer">music-collection</a> also sync to my personal notes in Obsidian. By having the same Markdown files available in Obsidian as well, I can browse my music collection in my private, note-taking environment and link to albums from my other notes.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2024/12/22/cataloging-my-music-collection#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>Take a look at my <a href="https://www.080f53.com/projects/music-collection">music collection</a> and let me know what you think! I'm sure I'll update it as time goes on, so I look forward to any feedback or ideas. Above all, I hope this post inspires you to set up something similar for your own hobbies or projects.</p>]]></content:encoded>
            <category>automation</category>
            <category>music</category>
            <category>open source</category>
            <category>personal knowledge management</category>
        </item>
        <item>
            <title><![CDATA[Adding a notifications feature to my Docusaurus-based site]]></title>
            <link>https://www.080f53.com/blog/2024/11/20/site-notification-feature</link>
            <guid>https://www.080f53.com/blog/2024/11/20/site-notification-feature</guid>
            <pubDate>Wed, 20 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Recently, I added a notification feature to show noteworthy messages to visitors of my Docusaurus-based site. The purpose of having notifications is to show a short list of new or updated content. While implementing this feature, I faced an unexpected challenge that needed some troubleshooting to ensure a smooth experience, especially on mobile devices.]]></description>
            <content:encoded><![CDATA[<p>Recently, I added a notification feature to show noteworthy messages to visitors of my Docusaurus-based site. The purpose of having notifications is to show a short list of new or updated content. While implementing this feature, I faced an unexpected challenge that needed some troubleshooting to ensure a smooth experience, especially on mobile devices.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="initial-implementation">Initial implementation<a href="https://www.080f53.com/blog/2024/11/20/site-notification-feature#initial-implementation" class="hash-link" aria-label="Direct link to Initial implementation" title="Direct link to Initial implementation">​</a></h2>
<p>The first PR (<a href="https://github.com/josh-wong/josh-wong.github.io/pull/118" target="_blank" rel="noopener noreferrer">#118</a>) was straightforward: Add a bell as a notification icon in the navbar on my Docusaurus-based personal site. This icon, with the number of notifications shown in a red circle, signals whenever notable content has been added. To specify when notable content is available, I add a new message to the custom notifications component, which I add in my Docusaurus configuration file, <code>docusaurus.config.js</code>.</p>
<p>The first attempt required the user to update the notifications in the JavaScript file for the custom notification component. However, I was able to modify the code to allow users to update the notification messages in <code>docusaurus.config.js</code>. This way of updating notification messages is more in line with how other features, like the <a href="https://docusaurus.io/docs/api/themes/configuration#announcement-bar" target="_blank" rel="noopener noreferrer">announcement bar</a>, work in Docusaurus.</p>
<p>After doing some quick QA on desktop and mobile, I merged the PR. However, I soon noticed some issues on the mobile version of the site.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues-on-mobile-devices">Issues on mobile devices<a href="https://www.080f53.com/blog/2024/11/20/site-notification-feature#issues-on-mobile-devices" class="hash-link" aria-label="Direct link to Issues on mobile devices" title="Direct link to Issues on mobile devices">​</a></h2>
<p>After merging PR <a href="https://github.com/josh-wong/josh-wong.github.io/pull/118" target="_blank" rel="noopener noreferrer">#118</a>, I noticed the following issues on my iPhone:</p>
<ul>
<li>
<p>In the navbar, the notification icon appeared behind the search icon in the navbar at the top of the screen, causing a visual glitch.</p>
<p><img decoding="async" loading="lazy" alt="Problem #1 - Notification icon appears behind the search icon in navbar on mobile" src="https://www.080f53.com/assets/images/2024-11-20-mobile-navbar-notifications-style-problem-5bb5025d62c6836e564961f22bfb30ee.jpg" width="493" height="217" class="img_ev3q"></p>
</li>
<li>
<p>In the sidebar nav, the notification count was misaligned with the notification bell icon.</p>
<p><img decoding="async" loading="lazy" alt="Problem #2 - Notification icon misaligned in sidebar nav on mobile" src="https://www.080f53.com/assets/images/2024-11-20-mobile-sidebar-nav-notifications-style-problem-67122b6248a7e559b4c02331c460161b.jpg" width="493" height="391" class="img_ev3q"></p>
</li>
</ul>
<p>To prevent disruption on mobile, I reverted the initial PR with a follow-up PR (<a href="https://github.com/josh-wong/josh-wong.github.io/pull/120" target="_blank" rel="noopener noreferrer">#120</a>) and dug into troubleshooting. After identifying the issue, I moved forward with a refined approach to ensure everything displayed correctly on both desktop and mobile.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues-resolved-and-improvements-implemented">Issues resolved and improvements implemented<a href="https://www.080f53.com/blog/2024/11/20/site-notification-feature#issues-resolved-and-improvements-implemented" class="hash-link" aria-label="Direct link to Issues resolved and improvements implemented" title="Direct link to Issues resolved and improvements implemented">​</a></h2>
<p>The PR (<a href="https://github.com/josh-wong/josh-wong.github.io/pull/121" target="_blank" rel="noopener noreferrer">#121</a>) restored the notification functionality, with the issues on mobile fixed, and introduced additional improvements:</p>
<ul>
<li><strong>Notifications update dynamically:</strong> Once opened, the notification count decreases automatically.</li>
<li><strong>Links open contextually:</strong> Internal links open in the same tab, while external links open in a new tab.</li>
<li><strong>Configuration considerations:</strong> To ensure a smooth experience with updating notifications, each new notification must have a unique, incremented <code>id</code> in <code>docusaurus.config.js</code>. Otherwise, they won't display as new notifications.</li>
</ul>
<p>The following shows the results of the implemented notifications feature:</p>
<p>How the notifications feature looks in the navbar on desktop:</p>
<p><img decoding="async" loading="lazy" alt="Notifications in navbar on desktop" src="data:image/jpeg;base64,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" width="609" height="108" class="img_ev3q"></p>
<p>How the notifications feature looks in the sidebar nav on mobile:</p>
<p><img decoding="async" loading="lazy" alt="Notifications in sidebar nav on mobile" src="https://www.080f53.com/assets/images/2024-11-20-mobile-sidebar-nav-notifications-41d8569f2a244aec9925fdab3be5772e.jpg" width="492" height="391" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2024/11/20/site-notification-feature#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>The new notification feature is now live on this site, ready to keep visitors informed of noteworthy content. Working through the challenges was a valuable experience, especially needing to consider the mobile aspect, which can vary across devices.</p>
<p>Although the existing announcement bar is great in making single announcements at the top of the page, I think this notification feature could increase visitor interaction on a documentation site.</p>]]></content:encoded>
            <category>open source</category>
            <category>software engineering</category>
        </item>
        <item>
            <title><![CDATA[Recap of my participation in the 2024 TELL Step Up Challenge]]></title>
            <link>https://www.080f53.com/blog/2024/10/12/tell-step-up-challenge</link>
            <guid>https://www.080f53.com/blog/2024/10/12/tell-step-up-challenge</guid>
            <pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[This year, I participated in the Step Up Challenge by TELL Japan, which is an event to honor the 21,837 people who lost their lives to suicide in Japan in 2023. The purpose of this event is to raise mental-health awareness and funds for TELL to continue providing lifesaving services to the English-speaking community in Japan. Although you can participate in the event solo or as a group, I decided to join as an individual.]]></description>
            <content:encoded><![CDATA[<p>This year, I participated in the Step Up Challenge by <a href="https://telljp.com/" target="_blank" rel="noopener noreferrer">TELL Japan</a>, which is an event to honor the 21,837 people who lost their lives to suicide in Japan in 2023. The purpose of this event is to raise mental-health awareness and funds for TELL to continue providing lifesaving services to the English-speaking community in Japan. Although you can participate in the event solo or as a group, I decided to join as an individual.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>For English speakers living in Japan who are struggling and need someone to talk to, I recommend contacting TELL through their <a href="https://telljp.com/lifeline/" target="_blank" rel="noopener noreferrer">Lifeline service</a>. The organization's website also regularly posts on their blog and offers a plethora of resources if you prefer to get help at your own pace outside of their support hours.</p><p>Many of us struggle at some point, so I highly recommend keeping TELL top of mind if you find yourself going through a difficult time.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-i-took-part-in-the-2024-step-up-challenge">Why I took part in the 2024 Step Up Challenge<a href="https://www.080f53.com/blog/2024/10/12/tell-step-up-challenge#why-i-took-part-in-the-2024-step-up-challenge" class="hash-link" aria-label="Direct link to Why I took part in the 2024 Step Up Challenge" title="Direct link to Why I took part in the 2024 Step Up Challenge">​</a></h2>
<p>In 2023, 21,837 people lost their lives to suicide compared to 21,881 people in 2022. I believe we can significantly reduce how many people lose their lives to suicide by promoting services like TELL and by simply listening and checking in on each other.</p>
<p>For the past two years, I've participated in this event. Although I didn't write a post about participating in last year's event, you can read a recap about the first time that I participated at <a href="https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge">Recap of my participation in the 2022 TELL 21,007 Step Up Challenge</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-i-participated-in-the-2024-step-up-challenge">How I participated in the 2024 Step Up Challenge<a href="https://www.080f53.com/blog/2024/10/12/tell-step-up-challenge#how-i-participated-in-the-2024-step-up-challenge" class="hash-link" aria-label="Direct link to How I participated in the 2024 Step Up Challenge" title="Direct link to How I participated in the 2024 Step Up Challenge">​</a></h2>
<p>To honor those who lost their lives to suicide in 2023, I went on a 12.0 km hike in Mt. Ohira in Kamakura with my wife and a few friends. On that day, I walked a total of 26,124 steps.</p>
<div class="theme-admonition theme-admonition-success admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>September 21, 2024 - 26,124 steps</div><div class="admonitionContent_BuS1"><p><img decoding="async" loading="lazy" alt="2024 TELL Step Up Challenge: September 21, 2024 - 26,124 steps" src="https://www.080f53.com/assets/images/2024-10-12-tell-step-up-challenge-(09-21)-4866b0d38490960d931f697814e31da0.jpg" width="1179" height="1025" class="img_ev3q"></p></div></div>
<p>Unfortunately, I had some things blocking me from achieving 21,837 steps again, like rainy weather and not feeling well. However, that gave me time to meditate, write detailed notes in my daily journal, and do other things to reflect on and consider my own mental well-being.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2024/10/12/tell-step-up-challenge#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>As in previous years, participating in the TELL Step Up Challenge gives me extra motivation to exercise and to think about mental health. I do regret not being able to get to 21,837 steps more than once between September 10 and October 10, but nothing's stopping me from hitting that a few more times before the end of the year🚶🏻‍♂️‍➡️</p>]]></content:encoded>
            <category>charity</category>
            <category>health</category>
            <category>japan</category>
            <category>mental health</category>
            <category>physical health</category>
        </item>
        <item>
            <title><![CDATA[Forking and updating Go-ChatGPT with the latest LLMs from OpenAI]]></title>
            <link>https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt</link>
            <guid>https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt</guid>
            <pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[I recently updated a GoLang client that interfaces with OpenAI's ChatGPT API. As OpenAI releases new models and deprecates older models, it's important to keep the code up-to-date while reducing maintenance. This post describes the changes I made to the original Go-ChatGPT client so that my chatbot application can use the most up-to-date versions of ChatGPT.]]></description>
            <content:encoded><![CDATA[<p>I recently updated a GoLang client that interfaces with OpenAI's ChatGPT API. As OpenAI releases new models and deprecates older models, it's important to keep the code up-to-date while reducing maintenance. This post describes the changes I made to the original Go-ChatGPT client so that my chatbot application can use the most up-to-date versions of ChatGPT.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-make-changes-to-the-original-go-chatgpt-client">Why make changes to the original Go-ChatGPT client?<a href="https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt#why-make-changes-to-the-original-go-chatgpt-client" class="hash-link" aria-label="Direct link to Why make changes to the original Go-ChatGPT client?" title="Direct link to Why make changes to the original Go-ChatGPT client?">​</a></h2>
<p>I wanted to take advantage of the recently released models, but the original Go-ChatGPT client, <a href="https://github.com/ayush6624/go-chatgpt" target="_blank" rel="noopener noreferrer">ayush6624/go-chatgpt</a>, hadn't been updated in more than a year. Because of this:</p>
<ul>
<li>Recently released GPT-4o, GPT-4o Mini, and GPT-4-Turbo weren't listed in the client, so they couldn't be used in Go-based applications.</li>
<li>Date-versioned models from GPT-3.5 Turbo and GPT-4 that OpenAI had deprecated existed in the client.</li>
</ul>
<p>To implement my changes, I decided to fork the original repository to <a href="https://github.com/josh-wong/go-chatgpt" target="_blank" rel="noopener noreferrer">josh-wong/go-chatgpt</a> and release a new version to use with my chatbot application.</p>
<p><img decoding="async" loading="lazy" alt="AI models being created on a monitor in an office with a dachshund at the desk, with Visual Studio Code displayed on the screen, no humans present - Microsoft Copilot AI-generated image" src="https://www.080f53.com/assets/images/2024-08-04-ai-models-being-created-on-a-monitor-with-a-dachshund-at-the-desk---microsoft-copilot-ai-generated-image-84c07a3d0a25287aa14e0b48522b9075.jpg" width="1024" height="1024" class="img_ev3q"></p>
<p><em><strong>A dachshund working on AI-related code (AI image generated by Microsoft Copilot)</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="adding-models-and-removing-deprecated-models">Adding models and removing deprecated models<a href="https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt#adding-models-and-removing-deprecated-models" class="hash-link" aria-label="Direct link to Adding models and removing deprecated models" title="Direct link to Adding models and removing deprecated models">​</a></h2>
<p>To simplify the list of available models, I decided to add the <a href="https://github.com/josh-wong/go-chatgpt/blob/df291cd0fcec1b7b6b203de73246aac10c4912f6/chat.go#L14" target="_blank" rel="noopener noreferrer">foundation models for GPT-4o, GPT-4o Mini, and GPT-4-Turbo as constants</a> rather than date-versioned models. In addition, to reduce maintenance, I removed the deprecated models.</p>
<div class="docusaurus-theme-github-codeblock"><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">chat.go</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">loading</span><span class="token operator" style="color:#393A34">...</span><br></span></code></pre></div></div><div style="font-size:.9em;font-weight:600;color:#0E75DD;text-align:right;padding-bottom:13px;text-decoration:underline"><a href="https://github.com/josh-wong/go-chatgpt/blob/df291cd0fcec1b7b6b203de73246aac10c4912f6/chat.go#L14-L22" class="githubLink" style="margin:0 10px" target="_blank">View on GitHub</a></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The ChatGPT foundation models default to using the latest, stable date-versioned model.</p></div></div>
<p>I also needed to update the <a href="https://github.com/josh-wong/go-chatgpt/blob/df291cd0fcec1b7b6b203de73246aac10c4912f6/chat.go#L149" target="_blank" rel="noopener noreferrer"><code>allowedModels</code></a> to match the models that I had added as constants.</p>
<div class="docusaurus-theme-github-codeblock"><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">chat.go</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">loading</span><span class="token operator" style="color:#393A34">...</span><br></span></code></pre></div></div><div style="font-size:.9em;font-weight:600;color:#0E75DD;text-align:right;padding-bottom:13px;text-decoration:underline"><a href="https://github.com/josh-wong/go-chatgpt/blob/df291cd0fcec1b7b6b203de73246aac10c4912f6/chat.go#L149-L151" class="githubLink" style="margin:0 10px" target="_blank">View on GitHub</a></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="testing-and-validating-the-new-models">Testing and validating the new models<a href="https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt#testing-and-validating-the-new-models" class="hash-link" aria-label="Direct link to Testing and validating the new models" title="Direct link to Testing and validating the new models">​</a></h2>
<p>After making these changes, I installed the new version, <a href="https://github.com/josh-wong/go-chatgpt/releases/tag/v0.4.1" target="_blank" rel="noopener noreferrer">v0.4.1</a>, in my local environment. Since I'll be using my version of the Go-ChatGPT client moving forward, I needed to update the Go files in my chatbot application to refer to my repository and version.</p>
<p>Then, I tested my application with this new version and confirmed that I could still query the models and receive responses.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2024/08/04/forking-and-updating-go-chatgpt#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>By updating the Go-ChatGPT client, I can now use the latest releases of each ChatGPT model by specifying the foundation model and removing date-versioned models that have a short life cycle. This approach somewhat future-proofs the code, since I won't need to update it every time OpenAI releases or deprecates a date-versioned model.</p>]]></content:encoded>
            <category>gpt</category>
            <category>large language models</category>
            <category>open source</category>
            <category>software engineering</category>
        </item>
        <item>
            <title><![CDATA[Switching from 1Password to Bitwarden for password management]]></title>
            <link>https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden</link>
            <guid>https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden</guid>
            <pubDate>Mon, 24 Jun 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[After using 1Password for more than 10 years, I recently switched to Bitwarden as my password manager. Switching to Bitwarden was a commitment that I needed to act quickly on since my 1Password subscription was up for renewal. This post details my reasons for switching and walks through the process of how I migrated my data.]]></description>
            <content:encoded><![CDATA[<p>After using <a href="https://1password.com/" target="_blank" rel="noopener noreferrer">1Password</a> for more than 10 years, I recently switched to <a href="https://bitwarden.com/" target="_blank" rel="noopener noreferrer">Bitwarden</a> as my password manager. Switching to Bitwarden was a commitment that I needed to act quickly on since my 1Password subscription was up for renewal. This post details my reasons for switching and walks through the process of how I migrated my data.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-i-decided-to-switch">Why I decided to switch<a href="https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden#why-i-decided-to-switch" class="hash-link" aria-label="Direct link to Why I decided to switch" title="Direct link to Why I decided to switch">​</a></h2>
<p>Let's be real here: The primary reason for switching was cost.</p>
<p>I needed to decide if paying $59.88 (about ¥9,500 at the current USD to JPY exchange rate) for the Families plan for another year at the current price was worth the cost. Because of this, I started researching other password manager solutions.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>1Password is a great password management solution for businesses, primarily because you can centrally manage passwords and access to those passwords for everyone in an organization. Also, as of publishing this blog post, <a href="https://support.1password.com/link-family/" target="_blank" rel="noopener noreferrer">1Password offers free access to their Families plan if your organization is using 1Password for Business</a>, which is a nice perk!</p></div></div>
<p>I decided to switch to Bitwarden primarily because of the following:</p>
<ul>
<li><strong>Cost.</strong> Bitwarden offers a free version, which I imagine is enough for most users. Among the <a href="https://bitwarden.com/pricing/" target="_blank" rel="noopener noreferrer">plans available</a>, I decided on the Premium plan since I wanted to use some of the features available in that offering.</li>
<li><strong>Open source.</strong> I liked how Bitwarden's core password management solution is <a href="https://bitwarden.com/open-source/" target="_blank" rel="noopener noreferrer">open source</a>. In addition, Bitwarden offers a self-hosted solution that I might consider setting up in the future.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="migrating-my-data">Migrating my data<a href="https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden#migrating-my-data" class="hash-link" aria-label="Direct link to Migrating my data" title="Direct link to Migrating my data">​</a></h2>
<p>The first step was to export my data from 1Password in the <strong>.1pux</strong> format, and then import the data into Bitwarden. This was where I hit a few snags.</p>
<p>When importing my data into Bitwarden, I encountered a few issues:</p>
<ul>
<li><strong>"Sign in with" isn't supported in Bitwarden.</strong> All login credentials that use <strong>Sign in with Google</strong>, for example, show my email address with no indication that those credentials are tied to my Google account. Instead, the entry in Bitwarden looks like I have a username without a password saved.</li>
<li><strong>Created and modified dates for entries weren't migrated.</strong> The date of all login entries have a timestamp of when I imported the entries, not when those entries were actually created and modified.</li>
<li><strong>Archived login entries were mixed with unarchived entries.</strong> Login entries that I had labeled as archived and placed in a folder away from the active entries were mixed with active login entries. Fortunately, I had made notes of when I'd archived entries in the <strong>Notes</strong> field, but having entries for both valid and invalid login credentials was frustrating.</li>
<li><strong>Loss of Markdown formatting in login entry notes.</strong> Bitwarden doesn't support Markdown in the <strong>Notes</strong> field of entries, so some of my notes are a little hard to understand at first glance.</li>
</ul>
<p>None of these issues were showstopping. In fact, they probably did more to highlight how much I was relying on certain functionality that I didn't really need to use.</p>
<p>In fact, I reduced the number of entries that I'd previously archived and would probably never look at again. Some spring cleaning of unnecessary data decluttered the entries I'd saved and contributed to a fresh start.</p>
<p><img decoding="async" loading="lazy" alt="A dachshund running with a key in its mouth with an open padlock in the background - Microsoft Copilot AI-generated image" src="https://www.080f53.com/assets/images/2024-06-23-a-dachshund-running-with-a-key-in-its-mouth-with-an-open-padlock-in-the-background---microsoft-copilot-ai-generated-image-1f2fb1bb26993d7b1c155c9dfd66f463.jpg" width="1024" height="1024" class="img_ev3q"></p>
<p><em><strong>A cute yet malicious dachshund (AI image generated by Microsoft Copilot)</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-used-to-bitwarden">Getting used to Bitwarden<a href="https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden#getting-used-to-bitwarden" class="hash-link" aria-label="Direct link to Getting used to Bitwarden" title="Direct link to Getting used to Bitwarden">​</a></h2>
<p>Naturally, especially after using 1Password for more than 10 years, the UIs across Bitwarden for desktop, mobile, and browser felt quite a bit different from the UIs for 1Password. However, after a few days, I was used to the layouts, features, and how to configure settings across platforms. Simply put, Bitwarden offered all the essential functions I needed, just organized and presented a little differently compared to 1Password.</p>
<p>In addition, usability across platforms has been just as easy as my experience with 1Password.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2024/06/24/switching-from-1password-to-bitwarden#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>While 1Password served me well for more than 10 years, I've been happy with my switch to Bitwarden. I've been able to meet all my password management needs at a lower cost while supporting an open-source solution, without sacrificing usability.</p>
<p>Again, I think 1Password is excellent for organizations. However, if you're looking for a password management solution for yourself or for your family, <a href="https://bitwarden.com/" target="_blank" rel="noopener noreferrer">Bitwarden</a> is definitely worth a look.</p>
<p>Remember that the most important thing is to use a password manager, regardless of which one you choose🔐</p>]]></content:encoded>
            <category>open source</category>
            <category>security</category>
        </item>
        <item>
            <title><![CDATA[How to set up a Signal TLS proxy server]]></title>
            <link>https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy</link>
            <guid>https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy</guid>
            <pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[This post describes how to set up a Signal TLS proxy server on a Linux-based operating system (OS). I was able to set up this proxy server on both Debian and Ubuntu.]]></description>
            <content:encoded><![CDATA[<p>This post describes how to set up a <a href="https://github.com/signalapp/Signal-TLS-Proxy" target="_blank" rel="noopener noreferrer">Signal TLS proxy server</a> on a Linux-based operating system (OS). I was able to set up this proxy server on both Debian and Ubuntu.</p>
<p>I wrote this post because the official Signal TLS proxy server repository lacks instructions for setting up a domain, which is necessary to run a proxy server. However, keep in mind that the steps to set up a proxy server may vary depending on your OS environment and domain name service provider.</p>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>For security reasons, you should avoid running a server of any type on your home network. If you decide to run a server on your home network, please understand that you're putting your network and devices at significant risk of being compromised.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-run-a-proxy-server">Why run a proxy server?<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#why-run-a-proxy-server" class="hash-link" aria-label="Direct link to Why run a proxy server?" title="Direct link to Why run a proxy server?">​</a></h2>
<p>Government officials are known to occasionally block access to apps in their countries, especially during times of social unrest and when they don't want information widely shared.</p>
<p>By running a Signal proxy server, you can enable people in other countries to connect to Signal and stay in contact with friends and family.</p>
<p>For reference, you can see which countries have temporarily or permanently blocked connections to Signal in 2023, courtesy of the Open Observatory of Network Interference (OONI): <a href="https://explorer.ooni.org/search?since=2023-01-01&amp;test_name=signal&amp;failure=false&amp;only=anomalies&amp;until=2023-12-31" target="_blank" rel="noopener noreferrer">OONI Explorer</a></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-up-your-domain">Set up your domain<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#set-up-your-domain" class="hash-link" aria-label="Direct link to Set up your domain" title="Direct link to Set up your domain">​</a></h2>
<p>Before setting up your proxy server, you'll need to have a domain name so that others can connect to your proxy server from that domain name and modify the hostname of your OS.</p>
<p>Configure a domain name in your domain name service provider account by setting up a DNS record (A record) to point the domain to your public IP address. For details on how to set up an A record, please check your domain name service provider's documentation.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>When setting up an A record, you should also be able to specify a subdomain. Specifying a subdomain will allow you to use your domain name for other purposes.</p></div></div>
<p>After you've set up an A record in your domain name service provider account, you'll need to change the hostname of your OS. To do this, open <strong>Terminal</strong> and then open <strong>/etc/hosts</strong> by running the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo nano /etc/hosts</span><br></span></code></pre></div></div>
<p>Below the default hostname, add the following line, replacing <code>&lt;SUBDOMAIN&gt;.&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</code> with the address that you'll be using as your proxy server:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">192.168.1.101 &lt;SUBDOMAIN&gt;.&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The local IP address shown above depends on your environment. Be sure to confirm what your local IP address is if you encounter issues.</p></div></div>
<p>Save your changes, and close the file.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-up-ddns-and-ddclient">Set up DDNS and ddclient<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#set-up-ddns-and-ddclient" class="hash-link" aria-label="Direct link to Set up DDNS and ddclient" title="Direct link to Set up DDNS and ddclient">​</a></h2>
<p>Next, you'll need to set up dynamic DNS (DDNS) to make sure that the IP address of your OS changes automatically. Without DDNS, you'd need to manually update the IP address in your domain name service provider account, which would require constant oversight.</p>
<p>Most domain name service providers offer a DDNS service, which periodically checks for changes to an IP address and then automatically updates the DDNS database when a new IP address is discovered. For details on how to enable DDNS for your domain name, please check your domain name service provider's documentation.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>After enabling DDNS in your domain name service account, you should receive a password. You'll need to enter that password later, so make note of it.</p></div></div>
<p>After enabling DDNS for your domain name, you need to set up a DDNS client in your OS environment. In this tutorial, you will be installing ddclient. This client will automatically send updates to your domain name service provider when your IP address changes.</p>
<p>To install <strong>ddclient</strong>, open <strong>Terminal</strong> and run the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo apt-get install ddclient</span><br></span></code></pre></div></div>
<p>During setup, a wizard will be displayed. When prompted, enter the following configurations:</p>
<ul>
<li><strong>Dynamic DNS service provider:</strong> Select other and enter <strong>dynamicdns.park-your-domain.com</strong>.</li>
<li><strong>Dynamic DNS update protocol:</strong> Press <strong>Enter</strong>. You'll need to manually change this later.</li>
<li><strong>Username for dynamic DNS service:</strong> Enter your domain name.</li>
<li><strong>Password for dynamic DNS service:</strong> Enter the password you received after enabling DDNS in your domain name service provider account.</li>
<li><strong>Network interface used for dynamic DNS service:</strong> Enter <strong>dynamicdns.park-your-domain.com/getip</strong>. You'll need to modify the network interface later.</li>
<li><strong>DyDNS fully qualified domain names:</strong> Enter the <strong>subdomain</strong> that you specified when setting up. If you'll be running your proxy server without using subdomain, enter <strong>@</strong>.</li>
</ul>
<p>Now, you'll need to further modify the DDNS configuration file. In <strong>Terminal</strong>, open the ddclient configuration file by running the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo nano /etc/ddclient.conf</span><br></span></code></pre></div></div>
<p>To configure how often ddclient will update the DNS, add the following line to the top of the configurations in the file:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">daemon=3600</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">...</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p><code>3600</code> means that ddclient will check for changes to the public IP address every 3,600 seconds, which equals once an hour. You can adjust this value to be longer or shorter.</p></div></div>
<p>Then, set <code>protocol</code> to your domain name service provider (as specified in your domain name service provider's documentation) and set <code>use</code> to <code>web</code>. The configuration file should then look as follows:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Configuration file for ddclient generated by debconf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">#</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># /etc/ddclient.conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">daemon=3600</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">protocol=&lt;DOMAIN_NAME_SERVICE_PROVIDER&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">use=web, web=dynamicdns.park-your-domain.com/getip</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">server=dynamicdns.park-your-domain.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">login=&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">password=&lt;DDNS_PASSWORD&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&lt;SUBDOMAIN&gt;</span><br></span></code></pre></div></div>
<p>Save your changes, and close the file. You can check if the configuration is working by running the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo ddclient -daemon=0 -debug -verbose -noquiet</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>If you see any <code>invalid</code> or <code>error</code> outputs after running the above command, check the settings in your ddclient configuration file.</p></div></div>
<p>To confirm that ddclient is running in daemon mode, run the following command to open the ddclient system file:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo nano /etc/default/ddclient</span><br></span></code></pre></div></div>
<p>Confirm that <code>run_daemon</code> is set to <code>true</code>, then close the file.</p>
<p>To start the ddclient daemon, run the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo service ddclient start</span><br></span></code></pre></div></div>
<p>To check the status of ddclient, run the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo service ddclient status</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="set-up-and-connect-to-your-signal-tls-proxy-server">Set up and connect to your Signal TLS proxy server<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#set-up-and-connect-to-your-signal-tls-proxy-server" class="hash-link" aria-label="Direct link to Set up and connect to your Signal TLS proxy server" title="Direct link to Set up and connect to your Signal TLS proxy server">​</a></h2>
<p>After setting up the DNS record for your domain name in your domain name service provider account, changing the hostname of your OS, and configuring ddclient on your OS, you can set up the Signal TLS proxy server.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="set-up-the-signal-tls-proxy-server">Set up the Signal TLS proxy server<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#set-up-the-signal-tls-proxy-server" class="hash-link" aria-label="Direct link to Set up the Signal TLS proxy server" title="Direct link to Set up the Signal TLS proxy server">​</a></h3>
<p>In <strong>Terminal</strong>, clone <strong><a href="https://github.com/signalapp/Signal-TLS-Proxy" target="_blank" rel="noopener noreferrer">Signal-TLS-Proxy</a></strong> by running the following command and go to that folder:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git clone https://github.com/signalapp/Signal-TLS-Proxy</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd Signal-TLS-Proxy</span><br></span></code></pre></div></div>
<p>Run <strong>init-certificate.sh</strong> by running the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">./init-certificate.sh</span><br></span></code></pre></div></div>
<p>After running the bash script, follow the certificate setup instructions shown in Terminal.</p>
<p>After setting up the certificate, start the <strong>Docker container</strong> to run your proxy server by running the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker-compose up</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>To start your proxy server in the background without showing an output in Terminal, run the following command:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker-compose up --detach</span><br></span></code></pre></div></div></div></div>
<p>Your Signal TLS proxy server should now be running. If you encounter issues, see <a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#troubleshooting">Troubleshooting</a></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="connect-to-your-proxy-server">Connect to your proxy server<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#connect-to-your-proxy-server" class="hash-link" aria-label="Direct link to Connect to your proxy server" title="Direct link to Connect to your proxy server">​</a></h3>
<p>To connect to your proxy server, open a web browser on your mobile device and enter <code>https://signal.tube/#&lt;SUBDOMAIN&gt;.&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</code> into a mobile web browser, replacing <code>&lt;SUBDOMAIN&gt;.&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</code> with the details of the domain name you previously set up.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>You can also connect directly to the proxy server by adding the <code>&lt;SUBDOMAIN&gt;.&lt;DOMAIN_NAME&gt;.&lt;TOP_LEVEL_DOMAIN&gt;</code> (without <code>https://</code>) in the settings in the Signal app.</p><p>Keep in mind that the Signal desktop app currently does not support proxy connections.</p></div></div>
<p>The following are the different shield statuses in the Signal app:</p>
<ul>
<li><strong>Green shield:</strong> Indicates that you're connected to the Signal TLS proxy server.</li>
<li><strong>Gray shield:</strong> Indicates that you're trying to connect to the proxy server.</li>
<li><strong>Red shield:</strong> Indicates that you're no longer connected, which could mean the proxy server is down or otherwise no longer available.</li>
</ul>
<p>After confirming that your proxy server is working, be sure to monitor your setup periodically.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="shut-down-your-proxy-server">Shut down your proxy server<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#shut-down-your-proxy-server" class="hash-link" aria-label="Direct link to Shut down your proxy server" title="Direct link to Shut down your proxy server">​</a></h3>
<p>To stop the Docker container that your proxy server is running on, run the following command:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker-compose down</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="troubleshooting">Troubleshooting<a href="https://www.080f53.com/blog/2024/01/08/setting-up-signal-proxy#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting">​</a></h2>
<p>If you're unable to start your Signal TLS proxy server after shutting it down, open <strong>Terminal</strong> and run the following group of commands:</p>
<div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cd Signal-TLS-Proxy # Goes to the Signal-TLS-Proxy folder.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./init-certificate.sh # Runs the certificate script.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git pull # Pings the Signal-TLS-Proxy repository for any changes.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker-compose down # Stops the Docker container.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker-compose up # Starts the Docker container.</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>privacy</category>
            <category>security</category>
            <category>server</category>
        </item>
        <item>
            <title><![CDATA[How to fix an issue with the Obsidian app not opening and syncing on your iPhone]]></title>
            <link>https://www.080f53.com/blog/2023/03/03/fixing-iphone-obsidian-sync-issue</link>
            <guid>https://www.080f53.com/blog/2023/03/03/fixing-iphone-obsidian-sync-issue</guid>
            <pubDate>Fri, 03 Mar 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[I recently had issues with the Obsidian app not opening and syncing properly on my iPhone. I am a habitual note-taker, so having access to my notes at all times is extremely important to me. Because of that, I've tried a variety of different troubleshooting methods, which I describe in this post.]]></description>
            <content:encoded><![CDATA[<p>I recently had issues with the Obsidian app not opening and syncing properly on my iPhone. I am a habitual note-taker, so having access to my notes at all times is extremely important to me. Because of that, I've tried a variety of different troubleshooting methods, which I describe in this post.</p>
<p>This issue is a bit strange. The Obsidian for iPad app opens and syncs my notes as expected, so I don't think the Obsidian app is causing the issue. My iPhone is configured to install iOS beta builds, so that might be the issue.</p>
<p>Anyway, on to fixing the issue!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="resolve-icloud-sync-issues-with-obsidian">Resolve iCloud sync issues with Obsidian<a href="https://www.080f53.com/blog/2023/03/03/fixing-iphone-obsidian-sync-issue#resolve-icloud-sync-issues-with-obsidian" class="hash-link" aria-label="Direct link to Resolve iCloud sync issues with Obsidian" title="Direct link to Resolve iCloud sync issues with Obsidian">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Update</div><div class="admonitionContent_BuS1"><p>My previous troubleshooting method worked the first time I encountered this issue, but the instructions failed to work when I encountered the problem again a couple days later. I have updated this post to include another way to potentially solve the issue.</p></div></div>
<p>To get iCloud to sync your Obsidian vault again, perform the following steps from your iPhone:</p>
<ol>
<li>Confirm that you are connected to a Wi-Fi network.</li>
<li>In the <strong>Settings</strong> app, select <strong>[your name]</strong> and choose <strong>iCloud</strong>. Then, select <strong>iCloud Drive</strong> and disable <strong>Sync this iPhone</strong>.</li>
<li>Restart your iPhone.</li>
<li>In the <strong>Settings</strong> app, select <strong>[your name]</strong> and choose <strong>iCloud</strong>. Then, select <strong>iCloud Drive</strong> and enable <strong>Sync this iPhone</strong>. Wait for the contents in iCloud to sync.</li>
<li>Open the <strong>Files</strong> app. If you do not see any folders in the Files app, make sure you are connected to Wi-Fi.</li>
<li>Go to your <strong>Obsidian</strong> folder.</li>
<li>Long-press the folder with the name of the Obsidian vault that you want to access, then select <strong>Download Now</strong>. Wait a while for the contents to download. Repeat this step for any other vaults that you want to access.</li>
<li>Open the <strong>Obsidian</strong> app. After waiting a few seconds for the configuration files and your notes to sync, you should be able to access Obsidian on your iPhone.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="previous-set-of-troubleshooting-methods">Previous set of troubleshooting methods<a href="https://www.080f53.com/blog/2023/03/03/fixing-iphone-obsidian-sync-issue#previous-set-of-troubleshooting-methods" class="hash-link" aria-label="Direct link to Previous set of troubleshooting methods" title="Direct link to Previous set of troubleshooting methods">​</a></h2>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_BuS1"><p>The following instructions worked at one point, but when I encountered the same issue with iCloud not syncing my Obsidian notes, this method no longer worked. I will keep them visible in case they happen to work for someone else.</p></div></div>
<p>The following troubleshooting method requires using your iPhone and accessing iCloud from your desktop.</p>
<ol>
<li>On your iPhone, Open the <strong>Files</strong> app.</li>
<li>Go to the folder that contains your Obsidian vaults.</li>
<li>If any of the folders in your vaults have a cloud icon with an arrow pointing down, long-press the folder and select <strong>Download Now</strong>. Depending on the folder size, downloading the files may take some time.</li>
<li>After the files have finished downloading (you can check the sync status if you scroll to the bottom of the Files app), open the <strong>Obsidian</strong> app.</li>
</ol>
<p><strong>Were you able to open the Obsidian app on your iPhone and confirm that your notes are accessible?</strong> Great! You're done!</p>
<p><strong>Did the troubleshooting steps above not work?</strong> Let's proceed to the next set of troubleshooting steps.</p>
<ol>
<li>On your computer, rename the problematic folder that has the cloud icon with an arrow pointing down. For example, if the original folder name was <code>test</code>, change the folder name to <code>test1</code>.</li>
<li>Create a new folder named <code>test</code>.</li>
<li>Copy the items from the problematic folder (<code>test1</code>) into the new folder (<code>test</code>).</li>
<li>Delete the problematic folder (<code>test1</code>).</li>
<li>On your iPhone, open the <strong>Obsidian</strong> app on your iPhone.</li>
</ol>
<p><strong>Were you able to open the Obsidian app on your iPhone and confirm that your notes are accessible?</strong> Great! You're done!</p>
<p><strong>Did the troubleshooting steps above not work?</strong> Let's proceed to the next set of troubleshooting steps.</p>
<ol>
<li>On your computer, go to the problematic folder. This problematic folder should be the one on your iPhone that has a cloud icon with an arrow pointing down in the Files app.</li>
<li>Copy your notes to a folder on your desktop, outside of iCloud. We are doing this to ensure we have a backup of our notes.</li>
<li>On your iPhone, delete the problematic folder that has the cloud icon with an arrow pointing down.</li>
<li>Open the <strong>Obsidian</strong> app. If the app opens as expected, check that the notes in the previously problematic folder are displayed.</li>
<li>After confirming that your notes are accessible again in the Obsidian app, delete the backup notes you saved to the folder on your computer desktop.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2023/03/03/fixing-iphone-obsidian-sync-issue#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>These are the steps I took to troubleshoot and resolve the issue with Obsidian not opening and syncing my notes on my iPhone. If you have any troubleshooting methods that have worked for you, please share what steps you took to resolve the issue!</p>]]></content:encoded>
            <category>personal knowledge management</category>
            <category>ios</category>
            <category>obsidian</category>
            <category>troubleshooting</category>
        </item>
        <item>
            <title><![CDATA[Resurrecting my Raspberry Pi 4]]></title>
            <link>https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4</link>
            <guid>https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4</guid>
            <pubDate>Fri, 13 Jan 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[In October 2022, the fan on my Raspberry Pi 4 started making a loud clicking noise, so I unplugged the device and promptly forgot about it since I was busy. Since I didn't have plans on my first day off for the 2023 New Year holiday break, I decided to get my Raspberry Pi 4 running again.]]></description>
            <content:encoded><![CDATA[<p>In October 2022, the fan on my Raspberry Pi 4 started making a loud clicking noise, so I unplugged the device and promptly forgot about it since I was busy. Since I didn't have plans on my first day off for the 2023 New Year holiday break, I decided to get my Raspberry Pi 4 running again.</p>
<p>Previously, my Raspberry Pi 4 was primarily used to run Bitcoin Cash Node, which is software that helps power the Bitcoin Cash blockchain network and its transactions. I wanted to get back to contributing to the health of Bitcoin Cash and eventually use the device to run some other Linux-only programs.</p>
<p>The following is what I did to get my Raspberry Pi 4 running again and some of the programs I've set it up to run.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="removed-the-problematic-fan">Removed the problematic fan<a href="https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4#removed-the-problematic-fan" class="hash-link" aria-label="Direct link to Removed the problematic fan" title="Direct link to Removed the problematic fan">​</a></h2>
<p>The easy solution was to simply unplug the fan from the GPIO pins and remove it from the case. Now I just hope the heat sinks are enough to keep the device cool. So far, so good!</p>
<p>At some point, I'll dig out a spare fan from my box of miscellaneous gadgets.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgraded-ubuntu-to-22041-lts-jammy-jellyfish">Upgraded Ubuntu to 22.04.1 LTS (Jammy Jellyfish)<a href="https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4#upgraded-ubuntu-to-22041-lts-jammy-jellyfish" class="hash-link" aria-label="Direct link to Upgraded Ubuntu to 22.04.1 LTS (Jammy Jellyfish)" title="Direct link to Upgraded Ubuntu to 22.04.1 LTS (Jammy Jellyfish)">​</a></h2>
<p>Next up on the to-do list: check for an operating system upgrade.</p>
<p>When I booted up my Raspberry Pi 4 and tried updating Ubuntu, I was greeted with an error message that my version of Ubuntu, v21.10 (Impish Indri), was no longer eligible for updates. To get around this issue, I followed the troubleshooting workaround at <a href="https://help.ubuntu.com/community/EOLUpgrades" target="_blank" rel="noopener noreferrer">EOLUpgrades | Ubuntu Documentation</a> to enable upgrading to a newer version of Ubuntu.</p>
<p>After modifying the <code>sources.list</code> file as stated in the instructions, I ran the update and upgrade commands in Terminal. The workaround worked, and I was able to upgrade Ubuntu from 21.10 (Impish Indri) to Ubuntu 22.04.1 LTS (Jammy Jellyfish) on my Raspberry Pi 4.</p>
<p>No noticeable surprises with this upgrade since I'm not an Ubuntu power user. The squid background is pretty cool though.</p>
<p><img decoding="async" loading="lazy" alt="Ubuntu 22.04 (Jammy Jellyfish) squid background" src="https://www.080f53.com/assets/images/2023-01-12-ubuntu-jammy-jellyfish-aaca98abdb64f72d80a56f5b8739fff2.png" width="978" height="550" class="img_ev3q"></p>
<p><em><strong>Ubuntu 22.04 (Jammy Jellyfish) squid background</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="started-running-a-bitcoin-cash-node-again">Started running a Bitcoin Cash Node again<a href="https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4#started-running-a-bitcoin-cash-node-again" class="hash-link" aria-label="Direct link to Started running a Bitcoin Cash Node again" title="Direct link to Started running a Bitcoin Cash Node again">​</a></h2>
<p>After getting my Raspberry Pi 4 running again, I also decided to operate a Bitcoin Cash Node again.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>I'm simply operating a Bitcoin Cash Node to contribute to the Bitcoin Cash network. Since I'm not mining Bitcoin Cash, I don't receive mining rewards. My reward is supporting Bitcoin Cash as a way to create sound money that is usable by everyone in the world.</p></div></div>
<p>On the Bitcoin Cash Node site, I saw that an <a href="https://bitcoincashnode.org/en/newsroom/announcing-bitcoin-cash-node-v25-0-0" target="_blank" rel="noopener noreferrer">upgrade to the Bitcoin Cash network would occur on May 15, 2023</a>. To continue contributing to the health of the network after that date, I would need to upgrade the node software from v24.0.0 to v25.0.0.</p>
<p><img decoding="async" loading="lazy" alt="Bitcoin Cash Node &amp;quot;About&amp;quot; window showing v25.0.0" src="https://www.080f53.com/assets/images/2023-01-12-bitcoin-cash-node-about-0ece1ee725546f7887072489ddfa32c6.png" width="800" height="448" class="img_ev3q"></p>
<p><em><strong>Bitcoin Cash Node "About" window showing v25.0.0</strong></em></p>
<p>When upgrading the Bitcoin Cash Node software to v25.0.0, I referred to the tutorial that I'd created when I upgraded from v23.0.0 to v24.0.0. The instructions worked as expected, and I was able to improve the documentation by adding some knowledge that I'd gained while performing this upgrade.</p>
<p>You can see the tutorial I created for upgrading a Bitcoin Cash Node on Ubuntu at <a href="https://www.080f53.com/bitcoin-cash-node-on-raspberry-pi/upgrade">How to upgrade Bitcoin Cash Node on a Raspberry Pi 4 running Ubuntu Desktop</a>.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Use Signal for messaging? Check out the <a href="https://signal.art/addstickers/#pack_id=183a3ca8d7ccdcdb8fa7728b17453fbc&amp;pack_key=e9ac42b0e7276edd92d293321d2e51cca64e5744bad567fd9579b51abb78773d" target="_blank" rel="noopener noreferrer">Why Bitcoin Cash? sticker pack</a>! I created this sticker pack based on the "Why Bitcoin Cash?" brand assets.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="installed-foremost-for-recovering-data-from-drives">Installed Foremost for recovering data from drives<a href="https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4#installed-foremost-for-recovering-data-from-drives" class="hash-link" aria-label="Direct link to Installed Foremost for recovering data from drives" title="Direct link to Installed Foremost for recovering data from drives">​</a></h2>
<p>After confirming that my Bitcoin Cash Node was running, I wanted to check off another item that's been on my to-do list for a while: recover data by using Foremost, a popular data recovery tool.</p>
<p>At first, I tried installing Foremost in a Windows Subsystem for Linux (WSL) environment. However, I couldn't access the USB ports on my desktop running Windows, even after following the instructions in <a href="https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/" target="_blank" rel="noopener noreferrer">Connecting USB devices to WSL</a>.</p>
<p>Because of this issue, I switched to using my Raspberry Pi 4 and followed the instructions at <a href="https://www.section.io/engineering-education/recover-deleted-files-with-foremost/" target="_blank" rel="noopener noreferrer">Recovering deleted files using Foremost</a>. After setting up the software, I was immediately able to run the program on an empty USB drive and external hard drive.</p>
<ul>
<li><strong>8 GB USB drive:</strong> After 9 minutes, Foremost recovered 170 deleted files.<!-- -->
<ul>
<li>Four of the files were old PDF and JPEG files that I had recently printed out at a nearby convenience store.</li>
<li>The remaining 166 files were part of the USB drive software.</li>
</ul>
</li>
<li><strong>1 TB external hard drive:</strong> After 14 hours, Foremost recovered only 4 deleted files. I expected this outcome because I have a habit of reformatting unused drives multiple times.<!-- -->
<ul>
<li>Two of the files were corrupt.</li>
<li>The other two files were blank GIFs.</li>
</ul>
</li>
</ul>
<p>Although the types of files that Foremost can recover is limited, understanding how to use and having hands-on experience with data recovery tools is a nice-to-have skill.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2023/01/13/resurrecting-my-raspberry-pi-4#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>My Raspberry Pi 4 has been running perfectly for about two weeks. Even without a fan, the device runs at a fairly low temperature.</p>
<p>I have some other projects I want to run on Ubuntu in the future. Hopefully I can find time to work on them before the 2024 New Year holiday break!</p>]]></content:encoded>
            <category>bitcoin cash node</category>
            <category>data recovery</category>
            <category>foremost</category>
            <category>raspberry pi</category>
            <category>ubuntu</category>
        </item>
        <item>
            <title><![CDATA[Month in review - December]]></title>
            <link>https://www.080f53.com/blog/2022-12-month-in-review-december</link>
            <guid>https://www.080f53.com/blog/2022-12-month-in-review-december</guid>
            <pubDate>Tue, 03 Jan 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[December is always a bit of a hectic month with holiday gatherings and wrapping up tasks at work before the New Year break. Although I didn't get around to writing a post for this month, I do have quite a few topics to briefly share in this month-in-review post.]]></description>
            <content:encoded><![CDATA[<p>December is always a bit of a hectic month with holiday gatherings and wrapping up tasks at work before the New Year break. Although I didn't get around to writing a post for this month, I do have quite a few topics to briefly share in this month-in-review post.</p>
<ul>
<li>Wrote a post for the Mercari Engineering Blog</li>
<li>Bought a washer and dryer machine</li>
<li>Tried resurrecting a problematic hard drive</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Disclosure</div><div class="admonitionContent_BuS1"><p>Some links in this post are affiliate links. If you go through those links to make a purchase, I may earn a commission. Note that I only link to products and services if I am actively using them and am greatly satisfied with my experience.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrote-a-post-for-the-mercari-engineering-blog">Wrote a post for the Mercari Engineering Blog<a href="https://www.080f53.com/blog/2022-12-month-in-review-december#wrote-a-post-for-the-mercari-engineering-blog" class="hash-link" aria-label="Direct link to Wrote a post for the Mercari Engineering Blog" title="Direct link to Wrote a post for the Mercari Engineering Blog">​</a></h2>
<p>As part of the annual Advent Calendar series of posts on the <a href="https://engineering.mercari.com/en/blog/" target="_blank" rel="noopener noreferrer">Mercari Engineering Blog</a>, I wrote about personal knowledge management (PKM):</p>
<ul>
<li><a href="https://engineering.mercari.com/en/blog/entry/20221202-capturing-and-applying-knowledge-through-a-pkm-practice/" target="_blank" rel="noopener noreferrer">Capturing and applying knowledge through a personal knowledge management practice</a></li>
</ul>
<p>Let me know what you think!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bought-a-washer-and-dryer-machine">Bought a washer and dryer machine<a href="https://www.080f53.com/blog/2022-12-month-in-review-december#bought-a-washer-and-dryer-machine" class="hash-link" aria-label="Direct link to Bought a washer and dryer machine" title="Direct link to Bought a washer and dryer machine">​</a></h2>
<p>Hang clothes outside or inside to dry is pretty common Japan. But sometimes, we need to wait a full day (or two!) for clothing like jeans and hooded sweatshirts to completely dry.</p>
<p>After researching machines and confirming that one would fit, my wife and I decided to buy a <a href="https://hb.afl.rakuten.co.jp/ichiba/2e8bd7b9.a36d0b3a.2e8bd7ba.af228498/_RTLink64352?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbiccamera%2F4549980677285%2F&amp;link_type=hybrid_url&amp;ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJoeWJyaWRfdXJsIiwic2l6ZSI6IjI0MHgyNDAiLCJuYW0iOjEsIm5hbXAiOiJyaWdodCIsImNvbSI6MSwiY29tcCI6ImRvd24iLCJwcmljZSI6MCwiYm9yIjoxLCJjb2wiOjEsImJidG4iOjEsInByb2QiOjAsImFtcCI6ZmFsc2V9" target="_blank" rel="noopener noreferrer">Panasonic NA-LX127BL-W (Japanese)</a>. This front-loading, drum-type machine uses a heat-pump system for drying, which dries clothes pretty darn quick. The machine has a smartphone function that is convenient for:</p>
<ul>
<li>Scheduling a washing and drying cycle.</li>
<li>Checking the soap and softener tanks.</li>
<li>Confirming details about errors that occur during a washing cycle.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Panasonic NA-LX127BL-W washer and dryer machine after installation" src="https://www.080f53.com/assets/images/2023-01-03-panasonic-na-lx127bl-w-washer-and-dryer-machine-cba3851577026eeb53a2fa6f9bc6b5aa.jpg" width="332" height="500" class="img_ev3q"></p>
<p><em><strong>Panasonic NA-LX127BL-W washer and dryer machine after installation</strong></em></p>
<p>Overall, we're very happy with the Panasonic NA-LX127BL-W washer and dryer machine. We've reduced how much time we spend hanging clothes out to dry and saved a lot of time waiting for those clothes to dry. Our clothes also smell much more pleasant and feel a lot softer!</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="tried-resurrecting-a-problematic-hard-drive">Tried resurrecting a problematic hard drive<a href="https://www.080f53.com/blog/2022-12-month-in-review-december#tried-resurrecting-a-problematic-hard-drive" class="hash-link" aria-label="Direct link to Tried resurrecting a problematic hard drive" title="Direct link to Tried resurrecting a problematic hard drive">​</a></h2>
<p>A friend told me that his computer refused to recognize his external hard drive. On top of that, the hard drive made a clicking sound. I offered to troubleshoot the issue on my computer.</p>
<p>I tried the following methods to salvage the problematic hard drive:</p>
<table><thead><tr><th style="text-align:left"><strong>Method</strong></th><th style="text-align:left"><strong>Result</strong></th></tr></thead><tbody><tr><td style="text-align:left"><strong>Plugged the hard drive into my desktop and then my laptop</strong></td><td style="text-align:left">No change. Both computers exhibited the same behavior of briefly showing a connection to the hard drive but neither were able to show the contents of the hard drive. After a while, both computers were eventually unable to connect to the hard drive, which caused an endless loop of the computer trying to install the device driver.</td></tr><tr><td style="text-align:left"><strong>Uninstalled the driver when Device Manager finds the device, then restarted my computer</strong></td><td style="text-align:left">No change. The drive still didn't appear in the list of available drives.</td></tr><tr><td style="text-align:left"><strong>Installed WD Drive Utilities to see if the hard drive appeared in the utilities software</strong></td><td style="text-align:left">The drive does appear in this tool even after restarting the computer and unplugging and plugging in the device again.</td></tr><tr><td style="text-align:left"><strong>Followed the steps in <a href="https://www.ifixit.com/Guide/How+to+Shuck+a+WD+Elements+External+Hard+Drive/137646" target="_blank" rel="noopener noreferrer">How to Shuck a WD Elements External Hard Drive</a> to open the external casing of the hard drive to check if there were any loose parts</strong></td><td style="text-align:left">Nothing seemed loose. I made sure all the connectors were fully connected, but the drive still didn't appear in the list of available drives. Unfortunately, I lack the tools to open the disk enclosure and inspect the issue further.</td></tr><tr><td style="text-align:left"><strong>Followed the steps in <a href="https://www.ifixit.com/Guide/How+to+Shuck+a+WD+Elements+External+Hard+Drive/137646" target="_blank" rel="noopener noreferrer">How to Shuck a WD Elements External Hard Drive</a> to cover the 3.3V pin with tape.</strong></td><td style="text-align:left">Covering the 3.3V pin with tape didn't work. The drive still didn't appear in the list of available drives.</td></tr></tbody></table>
<p><img decoding="async" loading="lazy" alt="Friend&amp;#39;s disassembled Western Digital Elements external hard drive" src="https://www.080f53.com/assets/images/2023-01-03-western-digital-elements-broken-hard-drive-1f8e6f88271feb48a75701064b69c51b.jpg" width="417" height="500" class="img_ev3q"></p>
<p><em><strong>Friend's disassembled Western Digital Elements external hard drive</strong></em></p>
<p>Unfortunately, I was out of ideas to resolve the connection to the faulty hard drive. At this point, the only way to copy the data on the hard drive is to contact a professional who could remove the disk from its enclosure and further troubleshoot the issue.</p>]]></content:encoded>
            <category>knowledge management</category>
            <category>personal life</category>
            <category>work</category>
        </item>
        <item>
            <title><![CDATA[Month in review - November]]></title>
            <link>https://www.080f53.com/blog/2022-11-month-in-review-november</link>
            <guid>https://www.080f53.com/blog/2022-11-month-in-review-november</guid>
            <pubDate>Mon, 05 Dec 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This month-in-review post is a digest of topics that I don't cover in dedicated blog posts.]]></description>
            <content:encoded><![CDATA[<p>This month-in-review post is a digest of topics that I don't cover in dedicated blog posts.</p>
<ul>
<li>Aunt and uncle visited Tokyo</li>
<li>Configured a custom domain</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="aunt-and-uncle-visited-tokyo">Aunt and uncle visited Tokyo<a href="https://www.080f53.com/blog/2022-11-month-in-review-november#aunt-and-uncle-visited-tokyo" class="hash-link" aria-label="Direct link to Aunt and uncle visited Tokyo" title="Direct link to Aunt and uncle visited Tokyo">​</a></h2>
<p>For the first time since December 2019, I saw family in person! Coincidentally, my aunt and uncle who visited this November were the last relatives I saw in person in December 2019.</p>
<p>We had a heckuva two weeks, going to various places and trying out some new food spots. To get away from Tokyo for a bit, we went to a couple spots: Nikko and Kamakura.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="short-trip-to-nikko">Short trip to Nikko<a href="https://www.080f53.com/blog/2022-11-month-in-review-november#short-trip-to-nikko" class="hash-link" aria-label="Direct link to Short trip to Nikko" title="Direct link to Short trip to Nikko">​</a></h3>
<p>Nikko is an amazing spot to check out in the fall when the leaves change color. We got the about a week after peak leaf-changing season, but the sights of the foliage was still perfect.</p>
<p><img decoding="async" loading="lazy" alt="Gate inside of Toshogu" src="https://www.080f53.com/assets/images/2022-12-05-nikko-trip-toshogu-shrine-4b598e4860c8e55b2d49ca5c7ebb7a72.jpg" width="1200" height="555" class="img_ev3q"></p>
<p><em><strong>A gate inside of Toshogu</strong></em></p>
<p>As we strolled around the area, which is serene yet a two-hour ride from Tokyo, I could envision myself living there when I want some peace and quiet.</p>
<p><img decoding="async" loading="lazy" alt="Mid-color foliage changing" src="https://www.080f53.com/assets/images/2022-12-05-nikko-foliage-9e3e6819184ed19267bec5b5b268fc59.jpg" width="1200" height="555" class="img_ev3q"></p>
<p><em><strong>Mid-color foliage changing</strong></em></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="day-trip-to-kamakura">Day trip to Kamakura<a href="https://www.080f53.com/blog/2022-11-month-in-review-november#day-trip-to-kamakura" class="hash-link" aria-label="Direct link to Day trip to Kamakura" title="Direct link to Day trip to Kamakura">​</a></h3>
<p>I forget how close Kamakura is to Tokyo. My aunt wanted to visit Kamakura, so I happily obliged and took another day off work to show her and my uncle around.</p>
<p>I hadn't been to the giant Buddha statue in at least 16 years, so visiting the area again was a nice stroll down memory lane.</p>
<p><img decoding="async" loading="lazy" alt="Giant Buddha statue (daibutsu) in Kamakura" src="https://www.080f53.com/assets/images/2022-12-05-kamakura-trip-daibutsu-03098372467f350a3ea49c8285edf35c.jpg" width="1200" height="555" class="img_ev3q"></p>
<p><em><strong>Giant Buddha statue (daibutsu) in Kamakura</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="configured-a-custom-domain">Configured a custom domain<a href="https://www.080f53.com/blog/2022-11-month-in-review-november#configured-a-custom-domain" class="hash-link" aria-label="Direct link to Configured a custom domain" title="Direct link to Configured a custom domain">​</a></h2>
<p>I bought a domain and am actually using it! Below is my reason for choosing this particular domain, which is also currently on my <a href="https://www.080f53.com/about">About</a> page:</p>
<blockquote>
<p>I like the hex color&nbsp;<a href="https://encycolorpedia.com/080f53" target="_blank" rel="noopener noreferrer"><strong>#080f53</strong></a>, which is dark blue-violet.</p>
<p>Also, finding unique domain names is hard😅</p>
</blockquote>
<p>After I configured GitHub Pages to use <a href="https://www.080f53.com/" target="_blank" rel="noopener noreferrer">080f53.com</a>, I restructured the site to focus on my blog. I've got some more tweaking to do, but I'll apply those minor changes as time permits.</p>]]></content:encoded>
            <category>japan</category>
            <category>personal life</category>
            <category>travel</category>
        </item>
        <item>
            <title><![CDATA[Key points about knowledge management from "The Art of Readable Code"]]></title>
            <link>https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code</link>
            <guid>https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code</guid>
            <pubDate>Mon, 28 Nov 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This month, I read The Art of Readable Code: Simple and Practical Techniques for Writing Better Code on Kindle.]]></description>
            <content:encoded><![CDATA[<p>This month, I read The Art of Readable Code: Simple and Practical Techniques for Writing Better Code on Kindle.</p>
<p><em><strong>I wish I'd read this book years ago.</strong></em> As a technical writer and knowledge management specialist, the first part focuses on knowledge management and best practices for documentation within code. I found those topics interesting, especially since coding is only a hobby of mine and not a daily work activity.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-i-enjoyed-about-the-book">What I enjoyed about the book<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#what-i-enjoyed-about-the-book" class="hash-link" aria-label="Direct link to What I enjoyed about the book" title="Direct link to What I enjoyed about the book">​</a></h2>
<p>The beginning of "The Art of Readable Code" describes what I've found to be the laborious and unclear part of writing code in my free time: describing what's happening but only where necessary. The first half of the book guides the reader on how to best write code and leave comments for future reference or for others to reference.</p>
<p><img decoding="async" loading="lazy" alt="Cartoon strip &amp;quot;Take us to your leader... if he knows how to program&amp;quot; from &amp;quot;The Art of Readable Code&amp;quot;" src="https://www.080f53.com/assets/images/2022-11-27-art-of-readable-code-take-us-to-your-leader-maybe-75df91caff370e83b6d2108bd597a53e.jpg" width="516" height="307" class="img_ev3q"></p>
<p><em><strong>Cartoon strip from "The Art of Readable Code"</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-takeaways">Key takeaways<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#key-takeaways" class="hash-link" aria-label="Direct link to Key takeaways" title="Direct link to Key takeaways">​</a></h2>
<p>The kind of tacit knowledge that often comes with coding is difficult to share in an easily digestible format, whether written or verbally. However, I think the authors did a great job of explaining how to document that knowledge to help others gain from and build on that code, and address ideas and concerns.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="make-our-code-easy-to-read">Make our code easy to read<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#make-our-code-easy-to-read" class="hash-link" aria-label="Direct link to Make our code easy to read" title="Direct link to Make our code easy to read">​</a></h3>
<p>Making code easy to read can be subjective, and leaving comments can add time to finalizing code. But keep this in mind: We may need to refer to our own documentation in three weeks, three months, or three years. We can't guarantee knowledge retention amongst ourselves or our peers, so clearly documenting ideas or concerns is vital for saving time in the future.</p>
<p>The goal with comments or streamlined, self-explanatory code is to help our future selves and others to sufficiently understand code that may:</p>
<ul>
<li>be difficult to understand,</li>
<li>affect other parts of the code, or</li>
<li>be improved on in the future.</li>
</ul>
<p><strong>"We may need to refer to our own documentation in three weeks, three months, or three years. We can't guarantee knowledge retention amongst ourselves or our peers, so clearly documenting ideas or concerns is vital for saving time in the future."</strong></p>
<p>By sharing our knowledge in code, we can quickly remember why our code works a certain way and describe to others how they can improve that code later on. And again, we can help ourselves and others save time—for example, on retrying fixes, understanding what a function is, or explaining how a function can be improved upon later.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="consider-our-audience">Consider our audience<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#consider-our-audience" class="hash-link" aria-label="Direct link to Consider our audience" title="Direct link to Consider our audience">​</a></h3>
<p>When sharing knowledge in code, we should consider our current target audience and our future self and future colleagues who may need to refer to that code.</p>
<p>Some examples of why we need to consider our audience include:</p>
<ul>
<li>Organizations hire new employees who aren't familiar with the its products or culture.</li>
<li>People take on new roles.</li>
<li>Organizations shrink and need others to take on additional responsibilities.</li>
<li>We naturally forget knowledge over time if we don't actively use it.</li>
</ul>
<p>In both of these cases, people will need to read and understand our code. Imagine how much time we could save for ourselves and others by leaving a well-documented thought or streamlining code to be self-explanatory without needing comments to explain what the code does.</p>
<p><strong>"Sharing our knowledge empowers others to use their unique skills and experiences to further build on or improve on that code.</strong></p>
<p>Another positive effect of considering our audience and sharing our knowledge in code is that people will be more likely to contribute. Think of the old adage "strength in numbers." Sharing our knowledge empowers others to use their unique skills and experiences to further build on or improve on that code.</p>
<p>If we can get more people contributing, whether it's inside the code or in a knowledge base, we can foster a strong culture of documentation and knowledge sharing.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="exhibit-humility-in-code-comments">Exhibit humility in code comments<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#exhibit-humility-in-code-comments" class="hash-link" aria-label="Direct link to Exhibit humility in code comments" title="Direct link to Exhibit humility in code comments">​</a></h3>
<p>Another part of the book that I found interesting was the authors' suggestion to document where parts of the code could be improved.</p>
<p>This honest approach and self-critiquing of one's code takes quite a bit of humility and psychological safety within an organization to be effective. With this approach, an entire organization or a small team can foster a culture of learning that engineers—both current and future—can benefit from.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2022/11/28/book-review-the-art-of-readable-code#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p>Since I'm not skilled at writing code, the last half of the book was a little difficult to completely understand. However, I still found value in the content and could imagine re-reading parts to gradually gain a better understanding of the best practices that the author describes.</p>
<p>If you write code for work or for fun, I highly recommend reading The Art of Readable Code: Simple and Practical Techniques for Writing Better Code. The content was enlightening and I could imagine revisiting certain chapters to better understand how to write better code.</p>]]></content:encoded>
            <category>books</category>
            <category>book reviews</category>
            <category>knowledge management</category>
            <category>software engineering</category>
        </item>
        <item>
            <title><![CDATA[Month in review - October]]></title>
            <link>https://www.080f53.com/blog/2022-10-month-in-review-october</link>
            <guid>https://www.080f53.com/blog/2022-10-month-in-review-october</guid>
            <pubDate>Sun, 13 Nov 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This month-in-review post is a digest of topics that I don't cover in dedicated blog posts.]]></description>
            <content:encoded><![CDATA[<p>This month-in-review post is a digest of topics that I don't cover in dedicated blog posts.</p>
<ul>
<li>Finished reading "The Art of Letting Go"</li>
<li>passGen v3.x updates</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="finished-reading-the-art-of-letting-go">Finished reading "The Art of Letting Go"<a href="https://www.080f53.com/blog/2022-10-month-in-review-october#finished-reading-the-art-of-letting-go" class="hash-link" aria-label="Direct link to Finished reading &quot;The Art of Letting Go&quot;" title="Direct link to Finished reading &quot;The Art of Letting Go&quot;">​</a></h2>
<p>Early in the month, I finished reading The Art of Letting Go. As someone who continuously thinks about events and "what if" situations that I don't have control over, this book helped me think about how to move past those times.</p>
<p>The real value was not so much in reading the book, but highlighting parts that resonated with me. I've already referred to some of my highlights, and a month has barely passed since I finished reading the book.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="passgen-v3x-updates">passGen v3.x updates<a href="https://www.080f53.com/blog/2022-10-month-in-review-october#passgen-v3x-updates" class="hash-link" aria-label="Direct link to passGen v3.x updates" title="Direct link to passGen v3.x updates">​</a></h2>
<p>In 2017, I developed <strong><a href="https://github.com/josh-wong/passGen" target="_blank" rel="noopener noreferrer">passGen</a></strong>, which is a Windows app for creating randomly generated, 14-character passwords. At a previous job, I was helping some engineers design the UI of a Windows app, and I wanted to get familiar with C#. I ended up changing jobs soon after and shelved this project.</p>
<p>I revived this old project because I wanted to learn a little about how automatic updates work. Although the automatic-update function isn't pretty or customizable since I used the built-in "Publish" function in Visual Studio, I enjoyed the challenge and learning some basics about the architecture an app uses to check for updates.</p>
<p>Some notable changes include:</p>
<ul>
<li><a href="https://github.com/josh-wong/passGen/releases/tag/v3.0.0" target="_blank" rel="noopener noreferrer">passGen v3.0.0.0</a>: Added an automatic-update function and improved the UI a bit.</li>
<li><a href="https://github.com/josh-wong/passGen/releases/tag/v3.1.0" target="_blank" rel="noopener noreferrer">passGen v3.1.0.0</a>: Changed the password length from 10 characters to 14 characters.</li>
</ul>
<p>If you're interested in how passGen works, visit <a href="https://www.080f53.com/passgen">passGen documentation</a>.</p>]]></content:encoded>
            <category>books</category>
            <category>book reviews</category>
            <category>software engineering</category>
        </item>
        <item>
            <title><![CDATA[Adding a smart function to my heated blanket]]></title>
            <link>https://www.080f53.com/blog/2022/10/31/smart-heated-blanket</link>
            <guid>https://www.080f53.com/blog/2022/10/31/smart-heated-blanket</guid>
            <pubDate>Mon, 31 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[Every autumn and winter, I avoid turning on the HVAC units and space heaters in my apartment until absolutely necessary. The reason I wait is because:]]></description>
            <content:encoded><![CDATA[<p>Every autumn and winter, I avoid turning on the HVAC units and space heaters in my apartment until absolutely necessary. The reason I wait is because:</p>
<ul>
<li>Those units are not energy efficient, which causes environmental waste and a higher electricity bill.</li>
<li>The air becomes dry, which causes dry mouth, dry nostrils, and dry eyes.</li>
<li>My spouse and I have different thresholds for bedroom temperature.</li>
</ul>
<p>To address these concerns, I decided to buy a heated blanket and make it "smart."</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="hopping-on-the-heated-blanket-bandwagon">Hopping on the heated-blanket bandwagon<a href="https://www.080f53.com/blog/2022/10/31/smart-heated-blanket#hopping-on-the-heated-blanket-bandwagon" class="hash-link" aria-label="Direct link to Hopping on the heated-blanket bandwagon" title="Direct link to Hopping on the heated-blanket bandwagon">​</a></h2>
<p>To avoid having to use the HVAC units or space heaters, I purchased a heated throw blanket. I chose a heated <strong><em>throw</em></strong> blanket, which is thinner than a standard blanket, because:</p>
<ul>
<li>I wanted a blanket that I could either lie on as a bed mat or drape over me while I sleep.</li>
<li>I planned to used another, slightly thicker blanket while I slept.</li>
<li>I wanted a blanket to use in the living room or home office.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="making-my-heated-blanket-smart">Making my heated blanket smart<a href="https://www.080f53.com/blog/2022/10/31/smart-heated-blanket#making-my-heated-blanket-smart" class="hash-link" aria-label="Direct link to Making my heated blanket smart" title="Direct link to Making my heated blanket smart">​</a></h2>
<p>Never to miss a chance to automate even the most basic tasks, I purchased a TP-Link Tapo smart plug to create a smart heated blanket. The Tapo smart plug is an IoT device that enables you to control devices remotely. In this case, I can control the smart plug from the TP-Link Tapo app.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Since the remote control for adjusting the temperature of the blanket is analog, I can't adjust the temperature automatically. However, I can still manually adjust the temperature on the remote control.</p></div></div>
<p>After connecting the Tapo smart plug to my Wi-Fi network, I configured the Tapo app to:</p>
<ul>
<li>Turn on the plug before I go to sleep, and turn it off after 30 minutes.</li>
<li>Turn on the plug 10 minutes before my alarm goes off, and turn it off 10 minutes after my alarm goes off.</li>
</ul>
<p>By setting these schedules, I accomplish the following:</p>
<ul>
<li>Getting into a warm bed without the feeling of cold bed sheets</li>
<li>Holding myself accountable for going to bed on time</li>
<li>Waking up in a warm bed</li>
<li>Holding myself accountable for not lounging around in bed</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Screenshot of schedule in TP Link Tapo app" src="https://www.080f53.com/assets/images/2022-10-31-tplink-tapo-app-schedule-fc0c69cf3808796cf747c018b882346d.jpg" width="515" height="500" class="img_ev3q"></p>
<p><em><strong>Screenshot of my schedule in the TP Link Tapo app</strong></em></p>
<p>In the future, I might consider adding on/off intervals to ensure I stay warm throughout the night.</p>
<p>I also configured the Tapo smart plug through the Shortcuts app in iOS. This allows me to press a button in the Shortcuts widget to turn my blanket on or off. In the future, I'll look in to being able to turn my heated blanket on or off by using Alexa or Siri.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot of my Shortcut widgets screen" src="https://www.080f53.com/assets/images/2022-10-31-shortcuts-widget-bed8492affddd3ef02f9e5194754ac13.jpg" width="305" height="500" class="img_ev3q"></p>
<p><em><strong>Screenshot of my Shortcut widgets screen</strong></em></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ready-for-winter">Ready for winter!<a href="https://www.080f53.com/blog/2022/10/31/smart-heated-blanket#ready-for-winter" class="hash-link" aria-label="Direct link to Ready for winter!" title="Direct link to Ready for winter!">​</a></h2>
<p>So far, my smart heated throw blanket has been a great addition to my cold-weather arsenal. Aside from using the blanket when sleeping, I underestimated draping the blanket over my lap while working in my home office. Overall, I highly recommend getting a heated blanket and making it smart to make sleeping during autumn and winter a bit more relaxing.</p>
<p>I have one more Tapo smart plug left, so I might use it to automate the lights for my Christmas tree.🎄</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Update</div><div class="admonitionContent_BuS1"><p>In December 2022, I used my remaining Tapo smart plug to automatically turn on the lights on my Christmas tree every morning at 7:00 AM and turn off the lights at 11:00 PM. By automating this task, I didn't have to remember to turn on the lights in the morning or turn them off at night.</p></div></div>]]></content:encoded>
            <category>automation</category>
            <category>iot</category>
            <category>smart home</category>
        </item>
        <item>
            <title><![CDATA[Recap of my participation in the 2022 TELL 21,007 Step Up Challenge]]></title>
            <link>https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge</link>
            <guid>https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge</guid>
            <pubDate>Tue, 11 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This year, I participated in the Step Up Challenge by TELL Japan, which is an event to honor the people who lost their lives to suicide in Japan in 2021. The purpose of this event is to raise mental-health awareness and funds for TELL to continue providing lifesaving services to the English-speaking community in Japan. Although you can participate in the event solo or as a group, I decided to join as an individual.]]></description>
            <content:encoded><![CDATA[<p>This year, I participated in the Step Up Challenge by <a href="https://telljp.com/" target="_blank" rel="noopener noreferrer">TELL Japan</a>, which is an event to honor the people who lost their lives to suicide in Japan in 2021. The purpose of this event is to raise mental-health awareness and funds for TELL to continue providing lifesaving services to the English-speaking community in Japan. Although you can participate in the event solo or as a group, I decided to join as an individual.</p>
<p>By registering for the event, you may be eligible to receive event goodies (while supplies last!). This year's goodie bag included a nice tote bag, which was perfect for holding my water bottle, phone, wallet, keys, and any groceries I bought during my walks.</p>
<p><img decoding="async" loading="lazy" alt="2022 TELL Step Up Challenge swag: tote bag and sticker" src="https://www.080f53.com/assets/images/2022-10-10-tell-step-up-challenge-tote-bag-sticker-14a356e2b767f5513a7553efb92bac12.jpg" width="768" height="768" class="img_ev3q"></p>
<p><em><strong>2022 TELL Step Up Challenge swag: tote bag and sticker</strong></em></p>
<p>For details about the Step Up Challenge and other events, see <a href="https://www.tellevents.org/" target="_blank" rel="noopener noreferrer">TELL Japan events</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-im-taking-part-in-the-2022-step-up-challenge">Why I'm taking part in the 2022 Step Up Challenge<a href="https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge#why-im-taking-part-in-the-2022-step-up-challenge" class="hash-link" aria-label="Direct link to Why I'm taking part in the 2022 Step Up Challenge" title="Direct link to Why I'm taking part in the 2022 Step Up Challenge">​</a></h2>
<p>I heard about TELL on Twitter a few years ago, but I didn't know about this event until I read about it on the <a href="https://www.nanikore.net/2021/10/11/tell-21081-steps/" target="_blank" rel="noopener noreferrer">"TELL 21,081 Steps" blog post on nanikore.net</a>.</p>
<p>Living in Japan can get rough for nonnative residents. I had heard about how many foreigners struggle with how to proceed after around five years because of being homesick, wanting a better job, or other factors. I experienced a similar situation around my five-year anniversary mark. If I knew about TELL at that time, I believe I would have gotten the support that I needed and potentially saved quite a lot of yen on questionably helpful self-help books.</p>
<p><strong>Simply put:</strong> I believe in TELL's services and want to support their mission.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-i-participated-in-the-2022-step-up-challenge">How I participated in the 2022 Step Up Challenge<a href="https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge#how-i-participated-in-the-2022-step-up-challenge" class="hash-link" aria-label="Direct link to How I participated in the 2022 Step Up Challenge" title="Direct link to How I participated in the 2022 Step Up Challenge">​</a></h2>
<p>To honor the 21,007 people who lost their lives to suicide in 2021, I walked 21,007+ steps around Tokyo on the following dates.</p>
<div class="theme-admonition theme-admonition-success admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>September 10, 2022 - 21,034 steps</div><div class="admonitionContent_BuS1"><p><img decoding="async" loading="lazy" alt="2022 TELL Step Up Challenge: September 10, 2022 - 21,034 steps" src="https://www.080f53.com/assets/images/2022-10-10-tell-step-up-challenge-(09-10)-3d7d14b5cdf190fb2507f0c90fdb9408.jpg" width="768" height="873" class="img_ev3q"></p></div></div>
<div class="theme-admonition theme-admonition-success admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>September 17, 2022 - 22,197 steps</div><div class="admonitionContent_BuS1"><p><img decoding="async" loading="lazy" alt="2022 TELL Step Up Challenge: September 17, 2022 - 22,197 steps" src="https://www.080f53.com/assets/images/2022-10-10-tell-step-up-challenge-(09-17)-0d9df4c7dd41379fa6f14e241358fb1f.jpg" width="1170" height="1330" class="img_ev3q"></p></div></div>
<div class="theme-admonition theme-admonition-success admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>October 10, 2022 - 22,091 steps</div><div class="admonitionContent_BuS1"><p><img decoding="async" loading="lazy" alt="2022 TELL Step Up Challenge: October 10, 2022 - 22,091 steps" src="https://www.080f53.com/assets/images/2022-10-10-tell-step-up-challenge-(10-10)-484eaa46ff81948d5743dae3341429bb.jpg" width="768" height="873" class="img_ev3q"></p></div></div>
<p>Next year, I want to have some other activities lined up besides walking, like:</p>
<ul>
<li>Writing blog posts that total X number of words,</li>
<li>Reading for X seconds of yoga within the event period, and/or</li>
<li>Creating a playlist that includes X seconds of easy-listening music to relax to.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap-up<a href="https://www.080f53.com/blog/2022/10/11/tell-step-up-challenge#wrap-up" class="hash-link" aria-label="Direct link to Wrap-up" title="Direct link to Wrap-up">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Asahi Beer Hall and Tokyo SkyTree" src="https://www.080f53.com/assets/images/2022-10-10-asahi-beer-hall-tokyo-skytree-979837ce6664fb61b8f9d5efe7e08ede.jpg" width="1152" height="768" class="img_ev3q"></p>
<p><em><strong>View of the Asahi Beer Hall and Tokyo SkyTree from my walk on October 10, 2022</strong></em></p>
<p>I'll definitely participate in this event in the future and continue to promote TELL's support services to English speakers. Now that I know a bit more about how the event works, I'll also consider participating with a small group next time.</p>
<p>For English speakers living in Japan who are struggling and need someone to talk to, I recommend contacting TELL through their <a href="https://telljp.com/lifeline/" target="_blank" rel="noopener noreferrer">Lifeline service</a>. The organization's website also regularly posts on their blog and offers a plethora of resources if you prefer to get help at your own pace our outside of their support hours.</p>
<p>Many of us struggle at some point, so I highly recommend keeping TELL top of mind if you find yourself going through a difficult time.</p>]]></content:encoded>
            <category>charity</category>
            <category>health</category>
            <category>japan</category>
            <category>mental health</category>
            <category>physical health</category>
        </item>
        <item>
            <title><![CDATA[Hello World!🌏]]></title>
            <link>https://www.080f53.com/blog/2022/10/04/hello-world</link>
            <guid>https://www.080f53.com/blog/2022/10/04/hello-world</guid>
            <pubDate>Tue, 04 Oct 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[This is my first blog post!✍🏻]]></description>
            <content:encoded><![CDATA[<p>This is my first blog post!✍🏻</p>]]></content:encoded>
            <category>general</category>
            <category>hello world</category>
        </item>
        <item>
            <title><![CDATA[Understanding blockchain-based, decentralized cloud storage]]></title>
            <link>https://www.080f53.com/blog/2018/06/29/understanding-blockchain-based-decentralized-cloud-storage</link>
            <guid>https://www.080f53.com/blog/2018/06/29/understanding-blockchain-based-decentralized-cloud-storage</guid>
            <pubDate>Fri, 29 Jun 2018 00:00:00 GMT</pubDate>
            <description><![CDATA[Blockchain, an increasingly popular technology that can be used in a range of industries, is essentially a decentralized peer-to-peer system that's connected to create complete sets of data. These nodes reside on servers that run on various operating systems and computers of varying levels of power. Aside from verifying transactions for cryptocurrencies such as Bitcoin and Ethereum, an increasingly popular use for blockchain technology is as a decentralized cloud storage solution.]]></description>
            <content:encoded><![CDATA[<p>Blockchain, an increasingly popular technology that can be used in a range of industries, is essentially a decentralized peer-to-peer system that's connected to create complete sets of data. These nodes reside on servers that run on various operating systems and computers of varying levels of power. Aside from verifying transactions for cryptocurrencies such as Bitcoin and Ethereum, an increasingly popular use for blockchain technology is as a decentralized cloud storage solution.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>I originally published the following post on a self-hosted Wordpress site that subsequently crashed after years of service. To consolidate my written knowledge during those various times, I am republishing my old posts as is. Apologies in advance if any content in this post is incorrect or outdated.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="centralized-versus-decentralized-storage">Centralized versus decentralized storage<a href="https://www.080f53.com/blog/2018/06/29/understanding-blockchain-based-decentralized-cloud-storage#centralized-versus-decentralized-storage" class="hash-link" aria-label="Direct link to Centralized versus decentralized storage" title="Direct link to Centralized versus decentralized storage">​</a></h2>
<p>In a traditional, centralized cloud storage architecture, a file is uploaded to a server (likely redundant servers in most cases) and stored in a database. The issue with this is security. If a cloud storage account is compromised through phishing or other types of account hijacking, a hacker would have access to the account and files uploaded to the server.</p>
<p>In a blockchain-based, decentralized cloud storage architecture, a file is uploaded to an ecosystem of servers that host the blockchain and its nodes, which are essentially databases. A node stores only a fraction of the encrypted data, known as a shard, that makes up the file, and therefore, no single node contains a complete file. However, in a process called "mirroring," multiple servers store the same shard, which ensures high availability for the file uploaded. For example, if a server storing a shard within the blockchain goes down, another node within the blockchain network will automatically activate its mirrored shard.</p>
<p>The following diagram shows the process of uploading a file in a decentralized cloud storage architecture:</p>
<p><img decoding="async" loading="lazy" alt="Uploading files to decentralized cloud storage" src="https://www.080f53.com/assets/images/2018-06-29-blockchain-upload-00d278bccf5c25e3420267068db4d486.jpg" width="788" height="631" class="img_ev3q"></p>
<p>The following diagram shows the process of downloading a file in a decentralized cloud storage architecture:</p>
<p><img decoding="async" loading="lazy" alt="Downloading files from decentralized cloud storage" src="https://www.080f53.com/assets/images/2018-06-29-blockchain-download-5d55b263492a3f8f810366a94a1459ab.jpg" width="787" height="632" class="img_ev3q"></p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="considerations">Considerations<a href="https://www.080f53.com/blog/2018/06/29/understanding-blockchain-based-decentralized-cloud-storage#considerations" class="hash-link" aria-label="Direct link to Considerations" title="Direct link to Considerations">​</a></h2>
<p>Currently, one of the primary drawbacks when using a blockchain-based, decentralized cloud storage architecture is speed. Retrieving data from a standard cloud storage server is fast because of the direct, and thus speedy, connection to the server and a single location where the file is stored.</p>
<p>However, in a decentralized cloud storage architecture, users need to connect to the blockchain-based ecosystem to retrieve data from disparate nodes. These nodes are located on servers in various locations with varying connection speeds and processing power. This is fine for uploading and downloading small files to and from a decentralized cloud storage architecture, but the bottleneck occurs when using large files.</p>]]></content:encoded>
            <category>blockchain</category>
            <category>cloud storage</category>
            <category>decentralization</category>
        </item>
    </channel>
</rss>